From aad8141e27318350712a2d453b529e7fd011dd7d Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Thu, 1 Jul 2021 14:34:02 +0200 Subject: [PATCH 001/134] Prepare v.2.17.0-develop --- CHANGELOG.md | 10 ++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8d57bfd..e6639b00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,16 @@ This project adheres to [Semantic Versioning](https://semver.org/). ❤️ **Donate:** Enjoying MagicMirror²? [Please consider a donation!](https://magicmirror.builders/donate) With your help we can continue to improve the MagicMirror² +## [2.17.0] - Unreleased (Develop Branch) + +_This release is scheduled to be released on 2021-07-01._ + +### Added + +### Updated + +### Fixed + ## [2.16.0] - 2021-07-01 Special thanks to the following contributors: @210954, @B1gG, @codac, @Crazylegstoo, @daniel, @earlman, @ezeholz, @FrancoisRmn, @jupadin, @khassel, @KristjanESPERANTO, @njwilliams, @oemel09, @r3wald, @rejas, @rico24, Faizan Ahmed. diff --git a/package-lock.json b/package-lock.json index c5e03f6b..83c64a08 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "magicmirror", - "version": "2.16.0", + "version": "2.17.0-develop", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "magicmirror", - "version": "2.16.0", + "version": "2.17.0-develop", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 12f62e26..229c8b1d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "magicmirror", - "version": "2.16.0", + "version": "2.17.0-develop", "description": "The open source modular smart mirror platform.", "main": "js/electron.js", "scripts": { From ad13de358856793edd812b9beeb46207b885e4c3 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sun, 4 Jul 2021 17:46:22 +0200 Subject: [PATCH 002/134] update electron to v13 --- .husky/.gitignore | 1 - js/electron.js | 7 ++++++- package.json | 14 +++++++------- tests/configs/env.js | 3 ++- tests/configs/modules/clock/clock_12hr.js | 2 +- tests/configs/modules/clock/clock_24hr.js | 2 +- tests/configs/modules/clock/clock_analog.js | 2 +- .../modules/clock/clock_displaySeconds_false.js | 2 +- .../configs/modules/clock/clock_showPeriodUpper.js | 2 +- tests/configs/modules/clock/clock_showWeek.js | 2 +- tests/configs/modules/clock/es/clock_12hr.js | 2 +- tests/configs/modules/clock/es/clock_24hr.js | 2 +- .../modules/clock/es/clock_showPeriodUpper.js | 2 +- tests/configs/modules/clock/es/clock_showWeek.js | 2 +- 14 files changed, 25 insertions(+), 20 deletions(-) delete mode 100644 .husky/.gitignore diff --git a/.husky/.gitignore b/.husky/.gitignore deleted file mode 100644 index 31354ec1..00000000 --- a/.husky/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_ diff --git a/js/electron.js b/js/electron.js index a834f7ab..467ec782 100644 --- a/js/electron.js +++ b/js/electron.js @@ -102,7 +102,12 @@ app.on("ready", function () { // Quit when all windows are closed. app.on("window-all-closed", function () { - createWindow(); + if (process.env.JEST_WORKER_ID !== undefined) { + // if we are running with jest + app.quit(); + } else { + createWindow(); + }; }); app.on("activate", function () { diff --git a/package.json b/package.json index 229c8b1d..571a64c9 100644 --- a/package.json +++ b/package.json @@ -46,32 +46,32 @@ "homepage": "https://magicmirror.builders", "devDependencies": { "eslint-config-prettier": "^8.3.0", - "eslint-plugin-jsdoc": "^35.4.0", + "eslint-plugin-jsdoc": "^35.4.1", "eslint-plugin-prettier": "^3.4.0", "eslint-plugin-jest": "^24.3.6", "express-basic-auth": "^1.2.0", - "husky": "^6.0.0", - "jest": "27.0.5", + "husky": "^7.0.0", + "jest": "27.0.6", "jsdom": "^16.6.0", "lodash": "^4.17.21", "nyc": "^15.1.0", - "prettier": "^2.3.1", + "prettier": "^2.3.2", "pretty-quick": "^3.1.1", "sinon": "^11.1.1", - "spectron": "^13.0.0", + "spectron": "^15.0.0", "stylelint": "^13.13.1", "stylelint-config-prettier": "^8.0.2", "stylelint-config-standard": "^22.0.0", "stylelint-prettier": "^1.2.0" }, "optionalDependencies": { - "electron": "^11.4.9" + "electron": "^13.1.5" }, "dependencies": { "colors": "^1.4.0", "console-stamp": "^3.0.2", "digest-fetch": "^1.2.0", - "eslint": "^7.29.0", + "eslint": "^7.30.0", "express": "^4.17.1", "express-ipfilter": "^1.2.0", "feedme": "^2.0.2", diff --git a/tests/configs/env.js b/tests/configs/env.js index 99bd6b4e..e05424c8 100644 --- a/tests/configs/env.js +++ b/tests/configs/env.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/clock/clock_12hr.js b/tests/configs/modules/clock/clock_12hr.js index bf3cedff..4e32f2e1 100644 --- a/tests/configs/modules/clock/clock_12hr.js +++ b/tests/configs/modules/clock/clock_12hr.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/clock/clock_24hr.js b/tests/configs/modules/clock/clock_24hr.js index 7813a10d..bd4cf459 100644 --- a/tests/configs/modules/clock/clock_24hr.js +++ b/tests/configs/modules/clock/clock_24hr.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/clock/clock_analog.js b/tests/configs/modules/clock/clock_analog.js index b18412d0..f18e9fa7 100644 --- a/tests/configs/modules/clock/clock_analog.js +++ b/tests/configs/modules/clock/clock_analog.js @@ -12,7 +12,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/clock/clock_displaySeconds_false.js b/tests/configs/modules/clock/clock_displaySeconds_false.js index 292a8283..02e4e56a 100644 --- a/tests/configs/modules/clock/clock_displaySeconds_false.js +++ b/tests/configs/modules/clock/clock_displaySeconds_false.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/clock/clock_showPeriodUpper.js b/tests/configs/modules/clock/clock_showPeriodUpper.js index 5dd30222..dcf5b288 100644 --- a/tests/configs/modules/clock/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/clock_showPeriodUpper.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/clock/clock_showWeek.js b/tests/configs/modules/clock/clock_showWeek.js index ca9d4384..fe0dc0c7 100644 --- a/tests/configs/modules/clock/clock_showWeek.js +++ b/tests/configs/modules/clock/clock_showWeek.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/clock/es/clock_12hr.js b/tests/configs/modules/clock/es/clock_12hr.js index 82f5bfdb..14fd51d9 100644 --- a/tests/configs/modules/clock/es/clock_12hr.js +++ b/tests/configs/modules/clock/es/clock_12hr.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/clock/es/clock_24hr.js b/tests/configs/modules/clock/es/clock_24hr.js index 8db5aae2..5f973b4b 100644 --- a/tests/configs/modules/clock/es/clock_24hr.js +++ b/tests/configs/modules/clock/es/clock_24hr.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/clock/es/clock_showPeriodUpper.js b/tests/configs/modules/clock/es/clock_showPeriodUpper.js index 1d24a58a..1bcc440c 100644 --- a/tests/configs/modules/clock/es/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/es/clock_showPeriodUpper.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/clock/es/clock_showWeek.js b/tests/configs/modules/clock/es/clock_showWeek.js index d86db2d7..fc63ee22 100644 --- a/tests/configs/modules/clock/es/clock_showWeek.js +++ b/tests/configs/modules/clock/es/clock_showWeek.js @@ -14,7 +14,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, From e9fabd59ede4d1ccebb76393b082275de8e12640 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sun, 4 Jul 2021 18:25:43 +0200 Subject: [PATCH 003/134] contextIsolation: false --- tests/configs/empty_ipWhiteList.js | 2 +- tests/configs/env.js | 3 +-- tests/configs/modules/alert/default.js | 2 +- tests/configs/modules/calendar/auth-default.js | 2 +- tests/configs/modules/calendar/basic-auth.js | 2 +- tests/configs/modules/calendar/changed-port.js | 2 +- tests/configs/modules/calendar/custom.js | 2 +- tests/configs/modules/calendar/default.js | 2 +- tests/configs/modules/calendar/fail-basic-auth.js | 2 +- tests/configs/modules/calendar/old-basic-auth.js | 2 +- tests/configs/modules/calendar/recurring.js | 2 +- tests/configs/modules/compliments/compliments_anytime.js | 2 +- tests/configs/modules/compliments/compliments_date.js | 2 +- tests/configs/modules/compliments/compliments_only_anytime.js | 2 +- tests/configs/modules/compliments/compliments_parts_day.js | 2 +- tests/configs/modules/display.js | 2 +- tests/configs/modules/helloworld/helloworld.js | 2 +- tests/configs/modules/helloworld/helloworld_default.js | 2 +- tests/configs/modules/newsfeed/default.js | 2 +- tests/configs/modules/newsfeed/incorrect_url.js | 2 +- tests/configs/modules/newsfeed/prohibited_words.js | 2 +- tests/configs/modules/positions.js | 2 +- tests/configs/modules/weather/currentweather_compliments.js | 2 +- tests/configs/modules/weather/currentweather_default.js | 2 +- tests/configs/modules/weather/currentweather_options.js | 2 +- tests/configs/modules/weather/currentweather_units.js | 2 +- tests/configs/modules/weather/forecastweather_default.js | 2 +- tests/configs/modules/weather/forecastweather_options.js | 2 +- tests/configs/modules/weather/forecastweather_units.js | 2 +- tests/configs/noIpWhiteList.js | 2 +- tests/configs/port_8090.js | 2 +- tests/configs/without_modules.js | 2 +- 32 files changed, 32 insertions(+), 33 deletions(-) diff --git a/tests/configs/empty_ipWhiteList.js b/tests/configs/empty_ipWhiteList.js index 45728c71..edc2a1d3 100644 --- a/tests/configs/empty_ipWhiteList.js +++ b/tests/configs/empty_ipWhiteList.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/env.js b/tests/configs/env.js index e05424c8..909ad68a 100644 --- a/tests/configs/env.js +++ b/tests/configs/env.js @@ -13,8 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/alert/default.js b/tests/configs/modules/alert/default.js index 8ee282d0..3b9870f6 100644 --- a/tests/configs/modules/alert/default.js +++ b/tests/configs/modules/alert/default.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/auth-default.js b/tests/configs/modules/calendar/auth-default.js index 053c18ff..aff7f8f6 100644 --- a/tests/configs/modules/calendar/auth-default.js +++ b/tests/configs/modules/calendar/auth-default.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/basic-auth.js b/tests/configs/modules/calendar/basic-auth.js index c34998b8..ccad21f3 100644 --- a/tests/configs/modules/calendar/basic-auth.js +++ b/tests/configs/modules/calendar/basic-auth.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/changed-port.js b/tests/configs/modules/calendar/changed-port.js index a7e3b34a..476b9636 100644 --- a/tests/configs/modules/calendar/changed-port.js +++ b/tests/configs/modules/calendar/changed-port.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/custom.js b/tests/configs/modules/calendar/custom.js index 6b0e6707..e302f338 100644 --- a/tests/configs/modules/calendar/custom.js +++ b/tests/configs/modules/calendar/custom.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/default.js b/tests/configs/modules/calendar/default.js index 901a6667..29b75800 100644 --- a/tests/configs/modules/calendar/default.js +++ b/tests/configs/modules/calendar/default.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/fail-basic-auth.js b/tests/configs/modules/calendar/fail-basic-auth.js index c48d2471..adfa603d 100644 --- a/tests/configs/modules/calendar/fail-basic-auth.js +++ b/tests/configs/modules/calendar/fail-basic-auth.js @@ -15,7 +15,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/old-basic-auth.js b/tests/configs/modules/calendar/old-basic-auth.js index 7d0a146b..ddab97e0 100644 --- a/tests/configs/modules/calendar/old-basic-auth.js +++ b/tests/configs/modules/calendar/old-basic-auth.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/recurring.js b/tests/configs/modules/calendar/recurring.js index 371446a3..b80b8410 100644 --- a/tests/configs/modules/calendar/recurring.js +++ b/tests/configs/modules/calendar/recurring.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/compliments/compliments_anytime.js b/tests/configs/modules/compliments/compliments_anytime.js index 21db9ffb..e9f2e2c1 100644 --- a/tests/configs/modules/compliments/compliments_anytime.js +++ b/tests/configs/modules/compliments/compliments_anytime.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/compliments/compliments_date.js b/tests/configs/modules/compliments/compliments_date.js index cc2134bb..9cda72ff 100644 --- a/tests/configs/modules/compliments/compliments_date.js +++ b/tests/configs/modules/compliments/compliments_date.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/compliments/compliments_only_anytime.js b/tests/configs/modules/compliments/compliments_only_anytime.js index 145157d9..3c5f2d48 100644 --- a/tests/configs/modules/compliments/compliments_only_anytime.js +++ b/tests/configs/modules/compliments/compliments_only_anytime.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/compliments/compliments_parts_day.js b/tests/configs/modules/compliments/compliments_parts_day.js index c04b3a32..28a9a2f6 100644 --- a/tests/configs/modules/compliments/compliments_parts_day.js +++ b/tests/configs/modules/compliments/compliments_parts_day.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/display.js b/tests/configs/modules/display.js index d22e3cf5..24e59f86 100644 --- a/tests/configs/modules/display.js +++ b/tests/configs/modules/display.js @@ -16,7 +16,7 @@ let config = { height: 600, webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/helloworld/helloworld.js b/tests/configs/modules/helloworld/helloworld.js index c0e00458..e5285d85 100644 --- a/tests/configs/modules/helloworld/helloworld.js +++ b/tests/configs/modules/helloworld/helloworld.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/helloworld/helloworld_default.js b/tests/configs/modules/helloworld/helloworld_default.js index 9d516aef..1ca0f0a2 100644 --- a/tests/configs/modules/helloworld/helloworld_default.js +++ b/tests/configs/modules/helloworld/helloworld_default.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/newsfeed/default.js b/tests/configs/modules/newsfeed/default.js index 94c9a47f..ab471c1b 100644 --- a/tests/configs/modules/newsfeed/default.js +++ b/tests/configs/modules/newsfeed/default.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/newsfeed/incorrect_url.js b/tests/configs/modules/newsfeed/incorrect_url.js index 110a1968..80b79bac 100644 --- a/tests/configs/modules/newsfeed/incorrect_url.js +++ b/tests/configs/modules/newsfeed/incorrect_url.js @@ -12,7 +12,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/newsfeed/prohibited_words.js b/tests/configs/modules/newsfeed/prohibited_words.js index f9bfa5cf..04256b9a 100644 --- a/tests/configs/modules/newsfeed/prohibited_words.js +++ b/tests/configs/modules/newsfeed/prohibited_words.js @@ -12,7 +12,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/positions.js b/tests/configs/modules/positions.js index b99316ce..c34210fb 100644 --- a/tests/configs/modules/positions.js +++ b/tests/configs/modules/positions.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/weather/currentweather_compliments.js b/tests/configs/modules/weather/currentweather_compliments.js index 0a039b36..50969d48 100644 --- a/tests/configs/modules/weather/currentweather_compliments.js +++ b/tests/configs/modules/weather/currentweather_compliments.js @@ -14,7 +14,7 @@ let config = { fullscreen: false, webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/weather/currentweather_default.js b/tests/configs/modules/weather/currentweather_default.js index 440cc725..9c6bfca0 100644 --- a/tests/configs/modules/weather/currentweather_default.js +++ b/tests/configs/modules/weather/currentweather_default.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/weather/currentweather_options.js b/tests/configs/modules/weather/currentweather_options.js index 3fcd49b9..e9820327 100644 --- a/tests/configs/modules/weather/currentweather_options.js +++ b/tests/configs/modules/weather/currentweather_options.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/weather/currentweather_units.js b/tests/configs/modules/weather/currentweather_units.js index 9eba6660..db3384a4 100644 --- a/tests/configs/modules/weather/currentweather_units.js +++ b/tests/configs/modules/weather/currentweather_units.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/weather/forecastweather_default.js b/tests/configs/modules/weather/forecastweather_default.js index dbe2d7e3..44b1a563 100644 --- a/tests/configs/modules/weather/forecastweather_default.js +++ b/tests/configs/modules/weather/forecastweather_default.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/weather/forecastweather_options.js b/tests/configs/modules/weather/forecastweather_options.js index 32e0c8af..708aed62 100644 --- a/tests/configs/modules/weather/forecastweather_options.js +++ b/tests/configs/modules/weather/forecastweather_options.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/modules/weather/forecastweather_units.js b/tests/configs/modules/weather/forecastweather_units.js index 9d1a54ff..3bde2ff1 100644 --- a/tests/configs/modules/weather/forecastweather_units.js +++ b/tests/configs/modules/weather/forecastweather_units.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/noIpWhiteList.js b/tests/configs/noIpWhiteList.js index 28369bea..a438f5ce 100644 --- a/tests/configs/noIpWhiteList.js +++ b/tests/configs/noIpWhiteList.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/port_8090.js b/tests/configs/port_8090.js index 99386dd2..cbfe3db8 100644 --- a/tests/configs/port_8090.js +++ b/tests/configs/port_8090.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } }, diff --git a/tests/configs/without_modules.js b/tests/configs/without_modules.js index 8703374c..53dc70a9 100644 --- a/tests/configs/without_modules.js +++ b/tests/configs/without_modules.js @@ -13,7 +13,7 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true + enableRemoteModule: true, contextIsolation: false } } }; From f945d50c0dc5c8b7515035915e1517a272aacff0 Mon Sep 17 00:00:00 2001 From: karsten13 Date: Sun, 4 Jul 2021 19:21:17 +0200 Subject: [PATCH 004/134] run prettier --- js/electron.js | 2 +- tests/configs/empty_ipWhiteList.js | 3 ++- tests/configs/env.js | 3 ++- tests/configs/modules/alert/default.js | 3 ++- tests/configs/modules/calendar/auth-default.js | 3 ++- tests/configs/modules/calendar/basic-auth.js | 3 ++- tests/configs/modules/calendar/changed-port.js | 3 ++- tests/configs/modules/calendar/custom.js | 3 ++- tests/configs/modules/calendar/default.js | 3 ++- tests/configs/modules/calendar/fail-basic-auth.js | 3 ++- tests/configs/modules/calendar/old-basic-auth.js | 3 ++- tests/configs/modules/calendar/recurring.js | 3 ++- tests/configs/modules/clock/clock_12hr.js | 3 ++- tests/configs/modules/clock/clock_24hr.js | 3 ++- tests/configs/modules/clock/clock_analog.js | 3 ++- tests/configs/modules/clock/clock_displaySeconds_false.js | 3 ++- tests/configs/modules/clock/clock_showPeriodUpper.js | 3 ++- tests/configs/modules/clock/clock_showWeek.js | 3 ++- tests/configs/modules/clock/es/clock_12hr.js | 3 ++- tests/configs/modules/clock/es/clock_24hr.js | 3 ++- tests/configs/modules/clock/es/clock_showPeriodUpper.js | 3 ++- tests/configs/modules/clock/es/clock_showWeek.js | 3 ++- tests/configs/modules/compliments/compliments_anytime.js | 3 ++- tests/configs/modules/compliments/compliments_date.js | 3 ++- tests/configs/modules/compliments/compliments_only_anytime.js | 3 ++- tests/configs/modules/compliments/compliments_parts_day.js | 3 ++- tests/configs/modules/display.js | 3 ++- tests/configs/modules/helloworld/helloworld.js | 3 ++- tests/configs/modules/helloworld/helloworld_default.js | 3 ++- tests/configs/modules/newsfeed/default.js | 3 ++- tests/configs/modules/newsfeed/incorrect_url.js | 3 ++- tests/configs/modules/newsfeed/prohibited_words.js | 3 ++- tests/configs/modules/positions.js | 3 ++- tests/configs/modules/weather/currentweather_compliments.js | 3 ++- tests/configs/modules/weather/currentweather_default.js | 3 ++- tests/configs/modules/weather/currentweather_options.js | 3 ++- tests/configs/modules/weather/currentweather_units.js | 3 ++- tests/configs/modules/weather/forecastweather_default.js | 3 ++- tests/configs/modules/weather/forecastweather_options.js | 3 ++- tests/configs/modules/weather/forecastweather_units.js | 3 ++- tests/configs/noIpWhiteList.js | 3 ++- tests/configs/port_8090.js | 3 ++- tests/configs/without_modules.js | 3 ++- 43 files changed, 85 insertions(+), 43 deletions(-) diff --git a/js/electron.js b/js/electron.js index 467ec782..b566f0ad 100644 --- a/js/electron.js +++ b/js/electron.js @@ -107,7 +107,7 @@ app.on("window-all-closed", function () { app.quit(); } else { createWindow(); - }; + } }); app.on("activate", function () { diff --git a/tests/configs/empty_ipWhiteList.js b/tests/configs/empty_ipWhiteList.js index edc2a1d3..4b0d4057 100644 --- a/tests/configs/empty_ipWhiteList.js +++ b/tests/configs/empty_ipWhiteList.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/env.js b/tests/configs/env.js index 909ad68a..e05424c8 100644 --- a/tests/configs/env.js +++ b/tests/configs/env.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/alert/default.js b/tests/configs/modules/alert/default.js index 3b9870f6..8a358ec8 100644 --- a/tests/configs/modules/alert/default.js +++ b/tests/configs/modules/alert/default.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/auth-default.js b/tests/configs/modules/calendar/auth-default.js index aff7f8f6..8eabfe21 100644 --- a/tests/configs/modules/calendar/auth-default.js +++ b/tests/configs/modules/calendar/auth-default.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/basic-auth.js b/tests/configs/modules/calendar/basic-auth.js index ccad21f3..342da0e2 100644 --- a/tests/configs/modules/calendar/basic-auth.js +++ b/tests/configs/modules/calendar/basic-auth.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/changed-port.js b/tests/configs/modules/calendar/changed-port.js index 476b9636..ef59aea9 100644 --- a/tests/configs/modules/calendar/changed-port.js +++ b/tests/configs/modules/calendar/changed-port.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/custom.js b/tests/configs/modules/calendar/custom.js index e302f338..721c0990 100644 --- a/tests/configs/modules/calendar/custom.js +++ b/tests/configs/modules/calendar/custom.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/default.js b/tests/configs/modules/calendar/default.js index 29b75800..ccb37af8 100644 --- a/tests/configs/modules/calendar/default.js +++ b/tests/configs/modules/calendar/default.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/fail-basic-auth.js b/tests/configs/modules/calendar/fail-basic-auth.js index adfa603d..0ab1bdde 100644 --- a/tests/configs/modules/calendar/fail-basic-auth.js +++ b/tests/configs/modules/calendar/fail-basic-auth.js @@ -15,7 +15,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/old-basic-auth.js b/tests/configs/modules/calendar/old-basic-auth.js index ddab97e0..519acc9b 100644 --- a/tests/configs/modules/calendar/old-basic-auth.js +++ b/tests/configs/modules/calendar/old-basic-auth.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/calendar/recurring.js b/tests/configs/modules/calendar/recurring.js index b80b8410..a085ad07 100644 --- a/tests/configs/modules/calendar/recurring.js +++ b/tests/configs/modules/calendar/recurring.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/clock/clock_12hr.js b/tests/configs/modules/clock/clock_12hr.js index 4e32f2e1..9de222ed 100644 --- a/tests/configs/modules/clock/clock_12hr.js +++ b/tests/configs/modules/clock/clock_12hr.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/clock/clock_24hr.js b/tests/configs/modules/clock/clock_24hr.js index bd4cf459..e5ec59e3 100644 --- a/tests/configs/modules/clock/clock_24hr.js +++ b/tests/configs/modules/clock/clock_24hr.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/clock/clock_analog.js b/tests/configs/modules/clock/clock_analog.js index f18e9fa7..c76c10eb 100644 --- a/tests/configs/modules/clock/clock_analog.js +++ b/tests/configs/modules/clock/clock_analog.js @@ -12,7 +12,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/clock/clock_displaySeconds_false.js b/tests/configs/modules/clock/clock_displaySeconds_false.js index 02e4e56a..e74019d3 100644 --- a/tests/configs/modules/clock/clock_displaySeconds_false.js +++ b/tests/configs/modules/clock/clock_displaySeconds_false.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/clock/clock_showPeriodUpper.js b/tests/configs/modules/clock/clock_showPeriodUpper.js index dcf5b288..6819de54 100644 --- a/tests/configs/modules/clock/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/clock_showPeriodUpper.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/clock/clock_showWeek.js b/tests/configs/modules/clock/clock_showWeek.js index fe0dc0c7..26b16194 100644 --- a/tests/configs/modules/clock/clock_showWeek.js +++ b/tests/configs/modules/clock/clock_showWeek.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/clock/es/clock_12hr.js b/tests/configs/modules/clock/es/clock_12hr.js index 14fd51d9..ed9d390d 100644 --- a/tests/configs/modules/clock/es/clock_12hr.js +++ b/tests/configs/modules/clock/es/clock_12hr.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/clock/es/clock_24hr.js b/tests/configs/modules/clock/es/clock_24hr.js index 5f973b4b..985d579c 100644 --- a/tests/configs/modules/clock/es/clock_24hr.js +++ b/tests/configs/modules/clock/es/clock_24hr.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/clock/es/clock_showPeriodUpper.js b/tests/configs/modules/clock/es/clock_showPeriodUpper.js index 1bcc440c..29c02155 100644 --- a/tests/configs/modules/clock/es/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/es/clock_showPeriodUpper.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/clock/es/clock_showWeek.js b/tests/configs/modules/clock/es/clock_showWeek.js index fc63ee22..95803d5a 100644 --- a/tests/configs/modules/clock/es/clock_showWeek.js +++ b/tests/configs/modules/clock/es/clock_showWeek.js @@ -14,7 +14,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/compliments/compliments_anytime.js b/tests/configs/modules/compliments/compliments_anytime.js index e9f2e2c1..8cc0fc07 100644 --- a/tests/configs/modules/compliments/compliments_anytime.js +++ b/tests/configs/modules/compliments/compliments_anytime.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/compliments/compliments_date.js b/tests/configs/modules/compliments/compliments_date.js index 9cda72ff..8403d10c 100644 --- a/tests/configs/modules/compliments/compliments_date.js +++ b/tests/configs/modules/compliments/compliments_date.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/compliments/compliments_only_anytime.js b/tests/configs/modules/compliments/compliments_only_anytime.js index 3c5f2d48..758ac9b2 100644 --- a/tests/configs/modules/compliments/compliments_only_anytime.js +++ b/tests/configs/modules/compliments/compliments_only_anytime.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/compliments/compliments_parts_day.js b/tests/configs/modules/compliments/compliments_parts_day.js index 28a9a2f6..51d5ea89 100644 --- a/tests/configs/modules/compliments/compliments_parts_day.js +++ b/tests/configs/modules/compliments/compliments_parts_day.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/display.js b/tests/configs/modules/display.js index 24e59f86..aae06520 100644 --- a/tests/configs/modules/display.js +++ b/tests/configs/modules/display.js @@ -16,7 +16,8 @@ let config = { height: 600, webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/helloworld/helloworld.js b/tests/configs/modules/helloworld/helloworld.js index e5285d85..3f83a0f9 100644 --- a/tests/configs/modules/helloworld/helloworld.js +++ b/tests/configs/modules/helloworld/helloworld.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/helloworld/helloworld_default.js b/tests/configs/modules/helloworld/helloworld_default.js index 1ca0f0a2..a0a9a29e 100644 --- a/tests/configs/modules/helloworld/helloworld_default.js +++ b/tests/configs/modules/helloworld/helloworld_default.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/newsfeed/default.js b/tests/configs/modules/newsfeed/default.js index ab471c1b..59cf7d02 100644 --- a/tests/configs/modules/newsfeed/default.js +++ b/tests/configs/modules/newsfeed/default.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/newsfeed/incorrect_url.js b/tests/configs/modules/newsfeed/incorrect_url.js index 80b79bac..afb093e0 100644 --- a/tests/configs/modules/newsfeed/incorrect_url.js +++ b/tests/configs/modules/newsfeed/incorrect_url.js @@ -12,7 +12,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/newsfeed/prohibited_words.js b/tests/configs/modules/newsfeed/prohibited_words.js index 04256b9a..a21dd475 100644 --- a/tests/configs/modules/newsfeed/prohibited_words.js +++ b/tests/configs/modules/newsfeed/prohibited_words.js @@ -12,7 +12,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/positions.js b/tests/configs/modules/positions.js index c34210fb..a69b26fd 100644 --- a/tests/configs/modules/positions.js +++ b/tests/configs/modules/positions.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/weather/currentweather_compliments.js b/tests/configs/modules/weather/currentweather_compliments.js index 50969d48..257c92cf 100644 --- a/tests/configs/modules/weather/currentweather_compliments.js +++ b/tests/configs/modules/weather/currentweather_compliments.js @@ -14,7 +14,8 @@ let config = { fullscreen: false, webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/weather/currentweather_default.js b/tests/configs/modules/weather/currentweather_default.js index 9c6bfca0..0cdac111 100644 --- a/tests/configs/modules/weather/currentweather_default.js +++ b/tests/configs/modules/weather/currentweather_default.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/weather/currentweather_options.js b/tests/configs/modules/weather/currentweather_options.js index e9820327..568c7006 100644 --- a/tests/configs/modules/weather/currentweather_options.js +++ b/tests/configs/modules/weather/currentweather_options.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/weather/currentweather_units.js b/tests/configs/modules/weather/currentweather_units.js index db3384a4..4c18a5eb 100644 --- a/tests/configs/modules/weather/currentweather_units.js +++ b/tests/configs/modules/weather/currentweather_units.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/weather/forecastweather_default.js b/tests/configs/modules/weather/forecastweather_default.js index 44b1a563..fc374c3b 100644 --- a/tests/configs/modules/weather/forecastweather_default.js +++ b/tests/configs/modules/weather/forecastweather_default.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/weather/forecastweather_options.js b/tests/configs/modules/weather/forecastweather_options.js index 708aed62..4a1c5461 100644 --- a/tests/configs/modules/weather/forecastweather_options.js +++ b/tests/configs/modules/weather/forecastweather_options.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/modules/weather/forecastweather_units.js b/tests/configs/modules/weather/forecastweather_units.js index 3bde2ff1..6e3d0dfb 100644 --- a/tests/configs/modules/weather/forecastweather_units.js +++ b/tests/configs/modules/weather/forecastweather_units.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/noIpWhiteList.js b/tests/configs/noIpWhiteList.js index a438f5ce..cb578296 100644 --- a/tests/configs/noIpWhiteList.js +++ b/tests/configs/noIpWhiteList.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/port_8090.js b/tests/configs/port_8090.js index cbfe3db8..e6813e5e 100644 --- a/tests/configs/port_8090.js +++ b/tests/configs/port_8090.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } }, diff --git a/tests/configs/without_modules.js b/tests/configs/without_modules.js index 53dc70a9..46e721e5 100644 --- a/tests/configs/without_modules.js +++ b/tests/configs/without_modules.js @@ -13,7 +13,8 @@ let config = { electronOptions: { webPreferences: { nodeIntegration: true, - enableRemoteModule: true, contextIsolation: false + enableRemoteModule: true, + contextIsolation: false } } }; From 99c04648b412f36f4adc35ba81982a88e1fe6336 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sun, 4 Jul 2021 19:35:36 +0200 Subject: [PATCH 005/134] update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6639b00..f3583ff7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ _This release is scheduled to be released on 2021-07-01._ ### Updated +- Bump electron to v13 (and spectron to v15) and update other dependencies in package.json. + ### Fixed ## [2.16.0] - 2021-07-01 From d617d4aa09b7cdc2a9e0b5f63f6152f81608a568 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sun, 4 Jul 2021 20:54:54 +0200 Subject: [PATCH 006/134] update package-lock.json --- package-lock.json | 3043 +++++++++++++++++++++------------------------ 1 file changed, 1423 insertions(+), 1620 deletions(-) diff --git a/package-lock.json b/package-lock.json index 83c64a08..ef2155a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "colors": "^1.4.0", "console-stamp": "^3.0.2", "digest-fetch": "^1.2.0", - "eslint": "^7.29.0", + "eslint": "^7.30.0", "express": "^4.17.1", "express-ipfilter": "^1.2.0", "feedme": "^2.0.2", @@ -29,18 +29,18 @@ "devDependencies": { "eslint-config-prettier": "^8.3.0", "eslint-plugin-jest": "^24.3.6", - "eslint-plugin-jsdoc": "^35.4.0", + "eslint-plugin-jsdoc": "^35.4.1", "eslint-plugin-prettier": "^3.4.0", "express-basic-auth": "^1.2.0", - "husky": "^6.0.0", - "jest": "27.0.5", + "husky": "^7.0.0", + "jest": "27.0.6", "jsdom": "^16.6.0", "lodash": "^4.17.21", "nyc": "^15.1.0", - "prettier": "^2.3.1", + "prettier": "^2.3.2", "pretty-quick": "^3.1.1", "sinon": "^11.1.1", - "spectron": "^13.0.0", + "spectron": "^15.0.0", "stylelint": "^13.13.1", "stylelint-config-prettier": "^8.0.2", "stylelint-config-standard": "^22.0.0", @@ -50,7 +50,7 @@ "node": ">=12" }, "optionalDependencies": { - "electron": "^11.4.9" + "electron": "^13.1.5" } }, "node_modules/@babel/code-frame": { @@ -693,6 +693,15 @@ "global-tunnel-ng": "^2.7.1" } }, + "node_modules/@electron/remote": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-1.2.0.tgz", + "integrity": "sha512-C774t2DFVJsa+dxU9Gc2nYzylRZoJ79I0Sxrh8T9cN69fBkntfGbyBEQiD9UfZopqL0CYLzk1anY2Ywhql6h1w==", + "dev": true, + "peerDependencies": { + "electron": ">= 10.0.0-beta.1" + } + }, "node_modules/@es-joy/jsdoccomment": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.8.0.tgz", @@ -726,6 +735,24 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -761,16 +788,16 @@ } }, "node_modules/@jest/console": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.2.tgz", - "integrity": "sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.6.tgz", + "integrity": "sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.0.2", - "jest-util": "^27.0.2", + "jest-message-util": "^27.0.6", + "jest-util": "^27.0.6", "slash": "^3.0.0" }, "engines": { @@ -778,35 +805,35 @@ } }, "node_modules/@jest/core": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.5.tgz", - "integrity": "sha512-g73//jF0VwsOIrWUC9Cqg03lU3QoAMFxVjsm6n6yNmwZcQPN/o8w+gLWODw5VfKNFZT38otXHWxc6b8eGDUpEA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.6.tgz", + "integrity": "sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow==", "dev": true, "dependencies": { - "@jest/console": "^27.0.2", - "@jest/reporters": "^27.0.5", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/console": "^27.0.6", + "@jest/reporters": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.0.2", - "jest-config": "^27.0.5", - "jest-haste-map": "^27.0.5", - "jest-message-util": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.5", - "jest-resolve-dependencies": "^27.0.5", - "jest-runner": "^27.0.5", - "jest-runtime": "^27.0.5", - "jest-snapshot": "^27.0.5", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "jest-watcher": "^27.0.2", + "jest-changed-files": "^27.0.6", + "jest-config": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-resolve-dependencies": "^27.0.6", + "jest-runner": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", + "jest-watcher": "^27.0.6", "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", @@ -826,62 +853,62 @@ } }, "node_modules/@jest/environment": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.5.tgz", - "integrity": "sha512-IAkJPOT7bqn0GiX5LPio6/e1YpcmLbrd8O5EFYpAOZ6V+9xJDsXjdgN2vgv9WOKIs/uA1kf5WeD96HhlBYO+FA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.6.tgz", + "integrity": "sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg==", "dev": true, "dependencies": { - "@jest/fake-timers": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", - "jest-mock": "^27.0.3" + "jest-mock": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.5.tgz", - "integrity": "sha512-d6Tyf7iDoKqeUdwUKrOBV/GvEZRF67m7lpuWI0+SCD9D3aaejiOQZxAOxwH2EH/W18gnfYaBPLi0VeTGBHtQBg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.6.tgz", + "integrity": "sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^27.0.2", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2" + "jest-message-util": "^27.0.6", + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/globals": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.5.tgz", - "integrity": "sha512-qqKyjDXUaZwDuccpbMMKCCMBftvrbXzigtIsikAH/9ca+kaae8InP2MDf+Y/PdCSMuAsSpHS6q6M25irBBUh+Q==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.6.tgz", + "integrity": "sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw==", "dev": true, "dependencies": { - "@jest/environment": "^27.0.5", - "@jest/types": "^27.0.2", - "expect": "^27.0.2" + "@jest/environment": "^27.0.6", + "@jest/types": "^27.0.6", + "expect": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/reporters": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.5.tgz", - "integrity": "sha512-4uNg5+0eIfRafnpgu3jCZws3NNcFzhu5JdRd1mKQ4/53+vkIqwB6vfZ4gn5BdGqOaLtYhlOsPaL5ATkKzyBrJw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.6.tgz", + "integrity": "sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.0.2", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/console": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -892,10 +919,10 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.0.5", - "jest-resolve": "^27.0.5", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", + "jest-haste-map": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -915,9 +942,9 @@ } }, "node_modules/@jest/source-map": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.1.tgz", - "integrity": "sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", + "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", "dev": true, "dependencies": { "callsites": "^3.0.0", @@ -929,13 +956,13 @@ } }, "node_modules/@jest/test-result": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.2.tgz", - "integrity": "sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.6.tgz", + "integrity": "sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w==", "dev": true, "dependencies": { - "@jest/console": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/console": "^27.0.6", + "@jest/types": "^27.0.6", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -944,36 +971,36 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.5.tgz", - "integrity": "sha512-opztnGs+cXzZ5txFG2+omBaV5ge/0yuJNKbhE3DREMiXE0YxBuzyEa6pNv3kk2JuucIlH2Xvgmn9kEEHSNt/SA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz", + "integrity": "sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA==", "dev": true, "dependencies": { - "@jest/test-result": "^27.0.2", + "@jest/test-result": "^27.0.6", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.5", - "jest-runtime": "^27.0.5" + "jest-haste-map": "^27.0.6", + "jest-runtime": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/transform": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.5.tgz", - "integrity": "sha512-lBD6OwKXSc6JJECBNk4mVxtSVuJSBsQrJ9WCBisfJs7EZuYq4K6vM9HmoB7hmPiLIDGeyaerw3feBV/bC4z8tg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.6.tgz", + "integrity": "sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.5", - "jest-regex-util": "^27.0.1", - "jest-util": "^27.0.2", + "jest-haste-map": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-util": "^27.0.6", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", @@ -985,9 +1012,9 @@ } }, "node_modules/@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -1173,9 +1200,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.0.tgz", + "integrity": "sha512-IilJZ1hJBUZwMOVDNTdflOOLzJB/ZtljYVa7k3gEZN/jqIJIPkWHC6dvbX+DD2CwZDHB9wAKzZPzzqMIkW37/w==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" @@ -1284,9 +1311,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "12.20.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.15.tgz", - "integrity": "sha512-F6S4Chv4JicJmyrwlDkxUdGNSplsQdGwp1A0AJloEVDirWdZOAiRHhovDlsFkKUrquUXhz1imJhXHsf59auyAg==" + "version": "14.17.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.4.tgz", + "integrity": "sha512-8kQ3+wKGRNN0ghtEn7EGps/B8CzuBz1nXZEIGGLP2GnwbqYn4dbTs7k+VKLTq1HvZLRCIDtN3Snx1Ege8B7L5A==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.0", @@ -1301,9 +1328,9 @@ "dev": true }, "node_modules/@types/prettier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.0.tgz", - "integrity": "sha512-hkc1DATxFLQo4VxPDpMH1gCkPpBbpOoJ/4nhuXw4n63/0R6bCpQECj4+K226UJ4JO/eJQz+1mC2I7JsWanAdQw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.1.tgz", + "integrity": "sha512-NVkb4p4YjI8E3O6+1m8I+8JlMpFZwfSbPGdaw0wXuyPRTEz0SLKwBUWNSO7Maoi8tQMPC8JLZNWkrcKPI7/sLA==", "dev": true }, "node_modules/@types/puppeteer": { @@ -1334,15 +1361,15 @@ } }, "node_modules/@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "node_modules/@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.4.tgz", + "integrity": "sha512-zfyYsDTK1HTGYXU3fTiM76+om93HcFtsZd2M0bO/CL4DiETV7mSa/pIVN/6+G3esOqEMdg2An5cHHbK5t+9w+A==", "dev": true }, "node_modules/@types/which": { @@ -1352,24 +1379,24 @@ "dev": true }, "node_modules/@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "20.2.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", "dev": true }, "node_modules/@types/yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", "dev": true, "optional": true, "dependencies": { @@ -1377,15 +1404,15 @@ } }, "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.0.tgz", - "integrity": "sha512-9XD9s7mt3QWMk82GoyUpc/Ji03vz4T5AYlHF9DcoFNfJ/y3UAclRsfGiE2gLfXtyC+JRA3trR7cR296TEb1oiQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.1.tgz", + "integrity": "sha512-n8/ggadrZ+uyrfrSEchx3jgODdmcx7MzVM2sI3cTpI/YlfSm0+9HEUaWw3aQn2urL2KYlWYMDgn45iLfjDYB+Q==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.28.0", - "@typescript-eslint/types": "4.28.0", - "@typescript-eslint/typescript-estree": "4.28.0", + "@typescript-eslint/scope-manager": "4.28.1", + "@typescript-eslint/types": "4.28.1", + "@typescript-eslint/typescript-estree": "4.28.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -1419,13 +1446,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.0.tgz", - "integrity": "sha512-eCALCeScs5P/EYjwo6se9bdjtrh8ByWjtHzOkC4Tia6QQWtQr3PHovxh3TdYTuFcurkYI4rmFsRFpucADIkseg==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.1.tgz", + "integrity": "sha512-o95bvGKfss6705x7jFGDyS7trAORTy57lwJ+VsYwil/lOUxKQ9tA7Suuq+ciMhJc/1qPwB3XE2DKh9wubW8YYA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.28.0", - "@typescript-eslint/visitor-keys": "4.28.0" + "@typescript-eslint/types": "4.28.1", + "@typescript-eslint/visitor-keys": "4.28.1" }, "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" @@ -1436,9 +1463,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.0.tgz", - "integrity": "sha512-p16xMNKKoiJCVZY5PW/AfILw2xe1LfruTcfAKBj3a+wgNYP5I9ZEKNDOItoRt53p4EiPV6iRSICy8EPanG9ZVA==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.1.tgz", + "integrity": "sha512-4z+knEihcyX7blAGi7O3Fm3O6YRCP+r56NJFMNGsmtdw+NCdpG5SgNz427LS9nQkRVTswZLhz484hakQwB8RRg==", "dev": true, "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" @@ -1449,13 +1476,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.0.tgz", - "integrity": "sha512-m19UQTRtxMzKAm8QxfKpvh6OwQSXaW1CdZPoCaQuLwAq7VZMNuhJmZR4g5281s2ECt658sldnJfdpSZZaxUGMQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.1.tgz", + "integrity": "sha512-GhKxmC4sHXxHGJv8e8egAZeTZ6HI4mLU6S7FUzvFOtsk7ZIDN1ksA9r9DyOgNqowA9yAtZXV0Uiap61bIO81FQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.28.0", - "@typescript-eslint/visitor-keys": "4.28.0", + "@typescript-eslint/types": "4.28.1", + "@typescript-eslint/visitor-keys": "4.28.1", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -1491,12 +1518,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.0.tgz", - "integrity": "sha512-PjJyTWwrlrvM5jazxYF5ZPs/nl0kHDZMVbuIcbpawVXaDPelp3+S9zpOz5RmVUfS/fD5l5+ZXNKnWhNYjPzCvw==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.1.tgz", + "integrity": "sha512-K4HMrdFqr9PFquPu178SaSb92CaWe2yErXyPumc8cYWxFmhgJsNY9eSePmO05j0JhBvf2Cdhptd6E6Yv9HVHcg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.28.0", + "@typescript-eslint/types": "4.28.1", "eslint-visitor-keys": "^2.0.0" }, "engines": { @@ -1814,11 +1841,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/argparse/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, "node_modules/array-differ": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", @@ -1851,24 +1873,6 @@ "node": ">=8" } }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -1932,32 +1936,17 @@ "url": "https://tidelift.com/funding/github/npm/autoprefixer" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, "node_modules/babel-jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.5.tgz", - "integrity": "sha512-bTMAbpCX7ldtfbca2llYLeSFsDM257aspyAOpsdrdSrBqoLkWCy4HPYTXtXWaSLgFPjrJGACL65rzzr4RFGadw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.6.tgz", + "integrity": "sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==", "dev": true, "dependencies": { - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.1", + "babel-preset-jest": "^27.0.6", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" @@ -1986,9 +1975,9 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz", - "integrity": "sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz", + "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", @@ -2024,12 +2013,12 @@ } }, "node_modules/babel-preset-jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz", - "integrity": "sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz", + "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^27.0.1", + "babel-plugin-jest-hoist": "^27.0.6", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -2107,15 +2096,6 @@ "node": ">= 0.8" } }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -2397,31 +2377,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/camelcase-keys/node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001239", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz", - "integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==", + "version": "1.0.30001242", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001242.tgz", + "integrity": "sha512-KvNuZ/duufelMB3w2xtf9gEWCSxJwUgoxOx5b6ScLXC4kPc9xsczUVCPrQU26j5kOsHM4pSUL54tAZt5THQKug==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/browserslist" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, "node_modules/chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", @@ -2692,10 +2657,10 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "devOptional": true, "engines": [ "node >= 0.8" ], - "optional": true, "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -2767,9 +2732,9 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "node_modules/core-js": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.1.tgz", - "integrity": "sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", + "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==", "hasInstallScript": true, "optional": true, "funding": { @@ -2923,18 +2888,6 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -2958,9 +2911,9 @@ } }, "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dependencies": { "ms": "2.1.2" }, @@ -3005,9 +2958,9 @@ } }, "node_modules/decimal.js": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.0.tgz", - "integrity": "sha512-MrQRs2gyD//7NeHi9TtsfClkf+cFAewDz+PZHR8ILKglLmBMyVX3ymQ+oeznE3tjrS7beTN+6JXb2C3JDHm7ug==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, "node_modules/decompress-response": { @@ -3151,9 +3104,9 @@ } }, "node_modules/diff-sequences": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", - "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -3274,16 +3227,6 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "devOptional": true }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/edge-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-2.2.1.tgz", @@ -3300,14 +3243,14 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron": { - "version": "11.4.9", - "resolved": "https://registry.npmjs.org/electron/-/electron-11.4.9.tgz", - "integrity": "sha512-3TJG1vAnuR8p47mzorCW5l7uWCjdNUufIbZ+gKjm010dtHmhrO1zchP1a76vuT4BllK8q1iygFSkNnDlZ0i2pA==", + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.5.tgz", + "integrity": "sha512-ZoMCcPQNs/zO/Zdb5hq5H+rwRaKrdI3/sfXEwBVMx7f5jwa9jPQB3dZ2+7t59uD9VcFAWsH/pozr8nPPlv0tyw==", + "devOptional": true, "hasInstallScript": true, - "optional": true, "dependencies": { "@electron/get": "^1.0.1", - "@types/node": "^12.0.12", + "@types/node": "^14.6.2", "extract-zip": "^1.0.3" }, "bin": { @@ -3318,13 +3261,13 @@ } }, "node_modules/electron-chromedriver": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-11.0.0.tgz", - "integrity": "sha512-ayMJPBbB4puU0SqYbcD9XvF3/7GWIhqKE1n5lG2/GQPRnrZkNoPIilsrS0rQcD50Xhl69KowatDqLhUznZWtbA==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-13.0.0.tgz", + "integrity": "sha512-fID1ms8wT7qNfoKkXHNpH0ZE8/Nclb5YmkF3O0w57OxsR8S9PxgE9CJAgaSGroxBgZ+ge1i2OU0Aq/WE/e/Neg==", "dev": true, "hasInstallScript": true, "dependencies": { - "@electron/get": "^1.12.2", + "@electron/get": "^1.12.4", "extract-zip": "^2.0.0" }, "bin": { @@ -3370,9 +3313,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.3.756", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.756.tgz", - "integrity": "sha512-WsmJym1TMeHVndjPjczTFbnRR/c4sbzg8fBFtuhlb2Sru3i/S1VGpzDSrv/It8ctMU2bj8G7g7/O3FzYMGw6eA==", + "version": "1.3.766", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.766.tgz", + "integrity": "sha512-u2quJ862q9reRKh/je3GXis3w38+RoXH1J9N3XjtsS6NzmUAosNsyZgUVFZPN/ZlJ3v6T0rTyZR3q/J5c6Sy5w==", "dev": true }, "node_modules/emittery": { @@ -3445,6 +3388,26 @@ "node": ">= 0.6" } }, + "node_modules/engine.io/node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -3594,12 +3557,13 @@ } }, "node_modules/eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==", + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", + "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", "dependencies": { "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.4.2", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -3682,12 +3646,12 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "35.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-35.4.0.tgz", - "integrity": "sha512-0cr+NkPTxpTiMCtYOd8W5fd2IyC/CmaTHKb+0bzkpP9p8HfmJ3B2/M6FWj97rQJOLwLMkx+g2MIEZsrttpbFmQ==", + "version": "35.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-35.4.1.tgz", + "integrity": "sha512-lnpu2Bj+ta2eAqwCWnb6f3Xjc78TWKo/oMCpDH5NfpPhYnePNtGZJzoAMgU5uo9BQqmXJ8pql8aiodOhg82ofw==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "^0.8.0-alpha.2", + "@es-joy/jsdoccomment": "^0.8.0", "comment-parser": "1.1.5", "debug": "^4.3.1", "esquery": "^1.4.0", @@ -3957,17 +3921,17 @@ } }, "node_modules/expect": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.2.tgz", - "integrity": "sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.6.tgz", + "integrity": "sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.1", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-regex-util": "^27.0.1" + "jest-get-type": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-regex-util": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -4071,7 +4035,7 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", - "optional": true, + "devOptional": true, "dependencies": { "concat-stream": "^1.6.2", "debug": "^2.6.9", @@ -4086,7 +4050,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "optional": true, + "devOptional": true, "dependencies": { "ms": "2.0.0" } @@ -4095,16 +4059,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] + "devOptional": true }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -4118,17 +4073,16 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", + "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" }, "engines": { "node": ">=8" @@ -4151,9 +4105,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -4285,9 +4239,9 @@ } }, "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.0.tgz", + "integrity": "sha512-XprP7lDrVT+kE2c2YlfiV+IfS9zxukiIOvNamPNsImNhXadSsQEbosItdL9bUQlCZXR13SvPk20BjWSWLA7m4A==" }, "node_modules/foreground-child": { "version": "2.0.0", @@ -4302,15 +4256,6 @@ "node": ">=8.0.0" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -4474,15 +4419,6 @@ "node": ">=6" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", @@ -4613,17 +4549,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globalthis": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", @@ -4723,29 +4648,6 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -4915,21 +4817,6 @@ "node": ">= 6" } }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, "node_modules/http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -4943,6 +4830,18 @@ "node": ">=10.19.0" } }, + "node_modules/http2-wrapper/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -4966,13 +4865,16 @@ } }, "node_modules/husky": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz", - "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.0.tgz", + "integrity": "sha512-xK7lO0EtSzfFPiw+oQncQVy/XqV7UVVjxBByc+Iv5iK3yhW9boDoWgvZy3OGo48QKg/hUtZkzz0hi2HXa0kn7w==", "dev": true, "bin": { "husky": "lib/bin.js" }, + "engines": { + "node": ">=12" + }, "funding": { "url": "https://github.com/sponsors/typicode" } @@ -5251,12 +5153,12 @@ } }, "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/is-potential-custom-element-name": { @@ -5333,12 +5235,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, "node_modules/istanbul-lib-coverage": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", @@ -5445,14 +5341,14 @@ } }, "node_modules/jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.5.tgz", - "integrity": "sha512-4NlVMS29gE+JOZvgmSAsz3eOjkSsHqjTajlIsah/4MVSmKvf3zFP/TvgcLoWe2UVHiE9KF741sReqhF0p4mqbQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.6.tgz", + "integrity": "sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA==", "dev": true, "dependencies": { - "@jest/core": "^27.0.5", + "@jest/core": "^27.0.6", "import-local": "^3.0.2", - "jest-cli": "^27.0.5" + "jest-cli": "^27.0.6" }, "bin": { "jest": "bin/jest.js" @@ -5470,12 +5366,12 @@ } }, "node_modules/jest-changed-files": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.2.tgz", - "integrity": "sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.6.tgz", + "integrity": "sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "execa": "^5.0.0", "throat": "^6.0.1" }, @@ -5484,27 +5380,27 @@ } }, "node_modules/jest-circus": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.5.tgz", - "integrity": "sha512-p5rO90o1RTh8LPOG6l0Fc9qgp5YGv+8M5CFixhMh7gGHtGSobD1AxX9cjFZujILgY8t30QZ7WVvxlnuG31r8TA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.6.tgz", + "integrity": "sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q==", "dev": true, "dependencies": { - "@jest/environment": "^27.0.5", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/environment": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.0.2", + "expect": "^27.0.6", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-runtime": "^27.0.5", - "jest-snapshot": "^27.0.5", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2", + "jest-each": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "pretty-format": "^27.0.6", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" @@ -5513,33 +5409,67 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-cli": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.6.tgz", + "integrity": "sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg==", + "dev": true, + "dependencies": { + "@jest/core": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", + "prompts": "^2.0.1", + "yargs": "^16.0.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, "node_modules/jest-config": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.5.tgz", - "integrity": "sha512-zCUIXag7QIXKEVN4kUKbDBDi9Q53dV5o3eNhGqe+5zAbt1vLs4VE3ceWaYrOub0L4Y7E9pGfM84TX/0ARcE+Qw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.6.tgz", + "integrity": "sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.0.5", - "@jest/types": "^27.0.2", - "babel-jest": "^27.0.5", + "@jest/test-sequencer": "^27.0.6", + "@jest/types": "^27.0.6", + "babel-jest": "^27.0.6", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", - "jest-circus": "^27.0.5", - "jest-environment-jsdom": "^27.0.5", - "jest-environment-node": "^27.0.5", - "jest-get-type": "^27.0.1", - "jest-jasmine2": "^27.0.5", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.5", - "jest-runner": "^27.0.5", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", + "jest-circus": "^27.0.6", + "jest-environment-jsdom": "^27.0.6", + "jest-environment-node": "^27.0.6", + "jest-get-type": "^27.0.6", + "jest-jasmine2": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-runner": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", "micromatch": "^4.0.4", - "pretty-format": "^27.0.2" + "pretty-format": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5554,24 +5484,24 @@ } }, "node_modules/jest-diff": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.2.tgz", - "integrity": "sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.6.tgz", + "integrity": "sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^27.0.1", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-docblock": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.1.tgz", - "integrity": "sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", + "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" @@ -5581,33 +5511,33 @@ } }, "node_modules/jest-each": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.2.tgz", - "integrity": "sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.6.tgz", + "integrity": "sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2" + "jest-get-type": "^27.0.6", + "jest-util": "^27.0.6", + "pretty-format": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.5.tgz", - "integrity": "sha512-ToWhViIoTl5738oRaajTMgYhdQL73UWPoV4GqHGk2DPhs+olv8OLq5KoQW8Yf+HtRao52XLqPWvl46dPI88PdA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz", + "integrity": "sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw==", "dev": true, "dependencies": { - "@jest/environment": "^27.0.5", - "@jest/fake-timers": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/environment": "^27.0.6", + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2", + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6", "jsdom": "^16.6.0" }, "engines": { @@ -5615,47 +5545,47 @@ } }, "node_modules/jest-environment-node": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.5.tgz", - "integrity": "sha512-47qqScV/WMVz5OKF5TWpAeQ1neZKqM3ySwNveEnLyd+yaE/KT6lSMx/0SOx60+ZUcVxPiESYS+Kt2JS9y4PpkQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.6.tgz", + "integrity": "sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w==", "dev": true, "dependencies": { - "@jest/environment": "^27.0.5", - "@jest/fake-timers": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/environment": "^27.0.6", + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2" + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", + "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-haste-map": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.5.tgz", - "integrity": "sha512-3LFryGSHxwPFHzKIs6W0BGA2xr6g1MvzSjR3h3D8K8Uqy4vbRm/grpGHzbPtIbOPLC6wFoViRrNEmd116QWSkw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.6.tgz", + "integrity": "sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.0.1", - "jest-serializer": "^27.0.1", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", + "jest-regex-util": "^27.0.6", + "jest-serializer": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", "micromatch": "^4.0.4", "walker": "^1.0.7" }, @@ -5667,28 +5597,28 @@ } }, "node_modules/jest-jasmine2": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.5.tgz", - "integrity": "sha512-m3TojR19sFmTn79QoaGy1nOHBcLvtLso6Zh7u+gYxZWGcza4rRPVqwk1hciA5ZOWWZIJOukAcore8JRX992FaA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz", + "integrity": "sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA==", "dev": true, "dependencies": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.0.5", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/environment": "^27.0.6", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.0.2", + "expect": "^27.0.6", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-runtime": "^27.0.5", - "jest-snapshot": "^27.0.5", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2", + "jest-each": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "pretty-format": "^27.0.6", "throat": "^6.0.1" }, "engines": { @@ -5696,46 +5626,46 @@ } }, "node_modules/jest-leak-detector": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz", - "integrity": "sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz", + "integrity": "sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ==", "dev": true, "dependencies": { - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz", - "integrity": "sha512-Qczi5xnTNjkhcIB0Yy75Txt+Ez51xdhOxsukN7awzq2auZQGPHcQrJ623PZj0ECDEMOk2soxWx05EXdXGd1CbA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz", + "integrity": "sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.0.2", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" + "jest-diff": "^27.0.6", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-message-util": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.2.tgz", - "integrity": "sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.6.tgz", + "integrity": "sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.0.2", + "pretty-format": "^27.0.6", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -5756,12 +5686,12 @@ } }, "node_modules/jest-mock": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.3.tgz", - "integrity": "sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.6.tgz", + "integrity": "sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "@types/node": "*" }, "engines": { @@ -5786,27 +5716,27 @@ } }, "node_modules/jest-regex-util": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.1.tgz", - "integrity": "sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", + "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-resolve": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.5.tgz", - "integrity": "sha512-Md65pngRh8cRuWVdWznXBB5eDt391OJpdBaJMxfjfuXCvOhM3qQBtLMCMTykhuUKiBMmy5BhqCW7AVOKmPrW+Q==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.6.tgz", + "integrity": "sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", "resolve": "^1.20.0", "slash": "^3.0.0" }, @@ -5815,45 +5745,45 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.5.tgz", - "integrity": "sha512-xUj2dPoEEd59P+nuih4XwNa4nJ/zRd/g4rMvjHrZPEBWeWRq/aJnnM6mug+B+Nx+ILXGtfWHzQvh7TqNV/WbuA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz", + "integrity": "sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-snapshot": "^27.0.5" + "@jest/types": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-snapshot": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-runner": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.5.tgz", - "integrity": "sha512-HNhOtrhfKPArcECgBTcWOc+8OSL8GoFoa7RsHGnfZR1C1dFohxy9eLtpYBS+koybAHlJLZzNCx2Y/Ic3iEtJpQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.6.tgz", + "integrity": "sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ==", "dev": true, "dependencies": { - "@jest/console": "^27.0.2", - "@jest/environment": "^27.0.5", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/console": "^27.0.6", + "@jest/environment": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.1", - "jest-environment-jsdom": "^27.0.5", - "jest-environment-node": "^27.0.5", - "jest-haste-map": "^27.0.5", - "jest-leak-detector": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-resolve": "^27.0.5", - "jest-runtime": "^27.0.5", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", + "jest-docblock": "^27.0.6", + "jest-environment-jsdom": "^27.0.6", + "jest-environment-node": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-leak-detector": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", "source-map-support": "^0.5.6", "throat": "^6.0.1" }, @@ -5862,19 +5792,19 @@ } }, "node_modules/jest-runtime": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.5.tgz", - "integrity": "sha512-V/w/+VasowPESbmhXn5AsBGPfb35T7jZPGZybYTHxZdP7Gwaa+A0EXE6rx30DshHKA98lVCODbCO8KZpEW3hiQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.6.tgz", + "integrity": "sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q==", "dev": true, "dependencies": { - "@jest/console": "^27.0.2", - "@jest/environment": "^27.0.5", - "@jest/fake-timers": "^27.0.5", - "@jest/globals": "^27.0.5", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/console": "^27.0.6", + "@jest/environment": "^27.0.6", + "@jest/fake-timers": "^27.0.6", + "@jest/globals": "^27.0.6", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", @@ -5882,14 +5812,14 @@ "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.5", - "jest-message-util": "^27.0.2", - "jest-mock": "^27.0.3", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.5", - "jest-snapshot": "^27.0.5", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", + "jest-haste-map": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-mock": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" @@ -5899,9 +5829,9 @@ } }, "node_modules/jest-serializer": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.1.tgz", - "integrity": "sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", + "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", "dev": true, "dependencies": { "@types/node": "*", @@ -5912,9 +5842,9 @@ } }, "node_modules/jest-snapshot": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.5.tgz", - "integrity": "sha512-H1yFYdgnL1vXvDqMrnDStH6yHFdMEuzYQYc71SnC/IJnuuhW6J16w8GWG1P+qGd3Ag3sQHjbRr0TcwEo/vGS+g==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.6.tgz", + "integrity": "sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A==", "dev": true, "dependencies": { "@babel/core": "^7.7.2", @@ -5923,23 +5853,23 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.0.2", + "expect": "^27.0.6", "graceful-fs": "^4.2.4", - "jest-diff": "^27.0.2", - "jest-get-type": "^27.0.1", - "jest-haste-map": "^27.0.5", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-resolve": "^27.0.5", - "jest-util": "^27.0.2", + "jest-diff": "^27.0.6", + "jest-get-type": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-util": "^27.0.6", "natural-compare": "^1.4.0", - "pretty-format": "^27.0.2", + "pretty-format": "^27.0.6", "semver": "^7.3.2" }, "engines": { @@ -5962,12 +5892,12 @@ } }, "node_modules/jest-util": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.2.tgz", - "integrity": "sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.6.tgz", + "integrity": "sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -5979,17 +5909,17 @@ } }, "node_modules/jest-validate": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.2.tgz", - "integrity": "sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.6.tgz", + "integrity": "sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", + "jest-get-type": "^27.0.6", "leven": "^3.1.0", - "pretty-format": "^27.0.2" + "pretty-format": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -6008,17 +5938,17 @@ } }, "node_modules/jest-watcher": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.2.tgz", - "integrity": "sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.6.tgz", + "integrity": "sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ==", "dev": true, "dependencies": { - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.0.2", + "jest-util": "^27.0.6", "string-length": "^4.0.1" }, "engines": { @@ -6026,9 +5956,9 @@ } }, "node_modules/jest-worker": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", - "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", + "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", "dev": true, "dependencies": { "@types/node": "*", @@ -6054,40 +5984,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest/node_modules/jest-cli": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.5.tgz", - "integrity": "sha512-kZqY020QFOFQKVE2knFHirTBElw3/Q0kUbDc3nMfy/x+RQ7zUY89SUuzpHHJoSX1kX7Lq569ncvjNqU3Td/FCA==", - "dev": true, - "dependencies": { - "@jest/core": "^27.0.5", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.0.5", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "prompts": "^2.0.1", - "yargs": "^16.0.3" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6105,12 +6001,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "node_modules/jsdoc-type-pratt-parser": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.0.4.tgz", @@ -6202,12 +6092,6 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6222,7 +6106,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "devOptional": true + "optional": true }, "node_modules/json5": { "version": "2.2.0", @@ -6248,21 +6132,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "node_modules/just-extend": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", @@ -6849,15 +6718,6 @@ "node": ">=0.10.0" } }, - "node_modules/minimist-options/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -7239,15 +7099,6 @@ "node": ">=6" } }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7511,12 +7362,6 @@ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "devOptional": true }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "node_modules/picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -7780,9 +7625,9 @@ } }, "node_modules/prettier": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", - "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -7804,12 +7649,12 @@ } }, "node_modules/pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", + "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", "dev": true, "dependencies": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" @@ -8130,15 +7975,12 @@ ] }, "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/range_check": { @@ -8393,84 +8235,6 @@ "node": ">=0.10" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -8552,9 +8316,9 @@ } }, "node_modules/resq": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resq/-/resq-1.10.0.tgz", - "integrity": "sha512-hCUd0xMalqtPDz4jXIqs0M5Wnv/LZXN8h7unFOo4/nvExT9dDPbhwd3udRxLlp0HgBnHcV009UlduE9NZi7A6w==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resq/-/resq-1.10.1.tgz", + "integrity": "sha512-zhp1iyUH02MLciv3bIM2bNtTFx/fqRsK4Jk73jcPqp00d/sMTTjOtjdTMAcgjrQKGx5DvQ/HSpeqaMW0atGRJA==", "dev": true, "dependencies": { "fast-deep-equal": "^2.0.1" @@ -8613,6 +8377,12 @@ "node": ">=8.0" } }, + "node_modules/roarr/node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "optional": true + }, "node_modules/rrule": { "version": "2.6.8", "resolved": "https://registry.npmjs.org/rrule/-/rrule-2.6.8.tgz", @@ -8745,6 +8515,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/serve-static": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", @@ -8969,20 +8751,193 @@ } }, "node_modules/spectron": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/spectron/-/spectron-13.0.0.tgz", - "integrity": "sha512-7RPa6Fp8gqL4V0DubobnqIRFHIijkpjg6MFHcJlxoerWyvLJd+cQvOh756XpB1Z/U3DyA9jPcS+HE2PvYRP5+A==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/spectron/-/spectron-15.0.0.tgz", + "integrity": "sha512-eErHqymkEVb6H+LPZQoDYvWEv93o3nhxL7HXXdmC61ncV0jBckh8x3Qt6j+As2c1n0C/hKG9A2H1NnwGwD6agg==", "dev": true, "hasInstallScript": true, "dependencies": { + "@electron/remote": "^1.1.0", "dev-null": "^0.1.1", - "electron-chromedriver": "^11.0.0", - "request": "^2.88.2", + "electron-chromedriver": "^13.0.0", + "got": "^11.8.0", "split": "^1.0.1", "webdriverio": "^6.9.1" }, "engines": { - "node": ">=10.12.0" + "node": ">=12.20.0" + } + }, + "node_modules/spectron/node_modules/@sindresorhus/is": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.1.tgz", + "integrity": "sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/spectron/node_modules/@szmarczak/http-timer": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", + "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/spectron/node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/spectron/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/spectron/node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/spectron/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/spectron/node_modules/got": { + "version": "11.8.2", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", + "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.1", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/spectron/node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/spectron/node_modules/keyv": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", + "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/spectron/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/spectron/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/spectron/node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/spectron/node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/spectron/node_modules/responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" } }, "node_modules/split": { @@ -8998,35 +8953,9 @@ } }, "node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "optional": true - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "node_modules/stack-utils": { "version": "2.0.3", @@ -9368,9 +9297,9 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", - "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", + "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -9594,24 +9523,6 @@ "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -9633,10 +9544,9 @@ } }, "node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "optional": true, + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "engines": { "node": ">=10" }, @@ -9660,7 +9570,7 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "optional": true + "devOptional": true }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", @@ -9671,6 +9581,20 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/ua-parser-js": { "version": "0.7.28", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", @@ -9741,6 +9665,15 @@ "node": ">=4" } }, + "node_modules/unified/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/unist-util-find-all-after": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", @@ -9882,20 +9815,6 @@ "node": ">= 0.8" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "node_modules/vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", @@ -10244,18 +10163,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/webdriverio/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/webdriverio/node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -10302,9 +10209,9 @@ "dev": true }, "node_modules/whatwg-url": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.6.0.tgz", - "integrity": "sha512-os0KkeeqUOl7ccdDT1qqUcS4KH4tcBTSKK5Nl5WKb2lyxInIZ/CpjkqKa1Ss12mjfdcRX9mHmPPs7/SxG1Hbdw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "dependencies": { "lodash": "^4.7.0", @@ -10378,9 +10285,10 @@ } }, "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.2.tgz", + "integrity": "sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ==", + "dev": true, "engines": { "node": ">=8.3.0" }, @@ -10997,6 +10905,13 @@ "sumchecker": "^3.0.1" } }, + "@electron/remote": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-1.2.0.tgz", + "integrity": "sha512-C774t2DFVJsa+dxU9Gc2nYzylRZoJ79I0Sxrh8T9cN69fBkntfGbyBEQiD9UfZopqL0CYLzk1anY2Ywhql6h1w==", + "dev": true, + "requires": {} + }, "@es-joy/jsdoccomment": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.8.0.tgz", @@ -11024,6 +10939,21 @@ "strip-json-comments": "^3.1.1" } }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -11052,49 +10982,49 @@ "dev": true }, "@jest/console": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.2.tgz", - "integrity": "sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.6.tgz", + "integrity": "sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg==", "dev": true, "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.0.2", - "jest-util": "^27.0.2", + "jest-message-util": "^27.0.6", + "jest-util": "^27.0.6", "slash": "^3.0.0" } }, "@jest/core": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.5.tgz", - "integrity": "sha512-g73//jF0VwsOIrWUC9Cqg03lU3QoAMFxVjsm6n6yNmwZcQPN/o8w+gLWODw5VfKNFZT38otXHWxc6b8eGDUpEA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.6.tgz", + "integrity": "sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow==", "dev": true, "requires": { - "@jest/console": "^27.0.2", - "@jest/reporters": "^27.0.5", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/console": "^27.0.6", + "@jest/reporters": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.0.2", - "jest-config": "^27.0.5", - "jest-haste-map": "^27.0.5", - "jest-message-util": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.5", - "jest-resolve-dependencies": "^27.0.5", - "jest-runner": "^27.0.5", - "jest-runtime": "^27.0.5", - "jest-snapshot": "^27.0.5", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "jest-watcher": "^27.0.2", + "jest-changed-files": "^27.0.6", + "jest-config": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-resolve-dependencies": "^27.0.6", + "jest-runner": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", + "jest-watcher": "^27.0.6", "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", @@ -11103,53 +11033,53 @@ } }, "@jest/environment": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.5.tgz", - "integrity": "sha512-IAkJPOT7bqn0GiX5LPio6/e1YpcmLbrd8O5EFYpAOZ6V+9xJDsXjdgN2vgv9WOKIs/uA1kf5WeD96HhlBYO+FA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.6.tgz", + "integrity": "sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg==", "dev": true, "requires": { - "@jest/fake-timers": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", - "jest-mock": "^27.0.3" + "jest-mock": "^27.0.6" } }, "@jest/fake-timers": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.5.tgz", - "integrity": "sha512-d6Tyf7iDoKqeUdwUKrOBV/GvEZRF67m7lpuWI0+SCD9D3aaejiOQZxAOxwH2EH/W18gnfYaBPLi0VeTGBHtQBg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.6.tgz", + "integrity": "sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ==", "dev": true, "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^27.0.2", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2" + "jest-message-util": "^27.0.6", + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6" } }, "@jest/globals": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.5.tgz", - "integrity": "sha512-qqKyjDXUaZwDuccpbMMKCCMBftvrbXzigtIsikAH/9ca+kaae8InP2MDf+Y/PdCSMuAsSpHS6q6M25irBBUh+Q==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.6.tgz", + "integrity": "sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw==", "dev": true, "requires": { - "@jest/environment": "^27.0.5", - "@jest/types": "^27.0.2", - "expect": "^27.0.2" + "@jest/environment": "^27.0.6", + "@jest/types": "^27.0.6", + "expect": "^27.0.6" } }, "@jest/reporters": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.5.tgz", - "integrity": "sha512-4uNg5+0eIfRafnpgu3jCZws3NNcFzhu5JdRd1mKQ4/53+vkIqwB6vfZ4gn5BdGqOaLtYhlOsPaL5ATkKzyBrJw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.6.tgz", + "integrity": "sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.0.2", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/console": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -11160,10 +11090,10 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.0.5", - "jest-resolve": "^27.0.5", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", + "jest-haste-map": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -11172,9 +11102,9 @@ } }, "@jest/source-map": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.1.tgz", - "integrity": "sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", + "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", "dev": true, "requires": { "callsites": "^3.0.0", @@ -11183,45 +11113,45 @@ } }, "@jest/test-result": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.2.tgz", - "integrity": "sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.6.tgz", + "integrity": "sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w==", "dev": true, "requires": { - "@jest/console": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/console": "^27.0.6", + "@jest/types": "^27.0.6", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.5.tgz", - "integrity": "sha512-opztnGs+cXzZ5txFG2+omBaV5ge/0yuJNKbhE3DREMiXE0YxBuzyEa6pNv3kk2JuucIlH2Xvgmn9kEEHSNt/SA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz", + "integrity": "sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA==", "dev": true, "requires": { - "@jest/test-result": "^27.0.2", + "@jest/test-result": "^27.0.6", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.5", - "jest-runtime": "^27.0.5" + "jest-haste-map": "^27.0.6", + "jest-runtime": "^27.0.6" } }, "@jest/transform": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.5.tgz", - "integrity": "sha512-lBD6OwKXSc6JJECBNk4mVxtSVuJSBsQrJ9WCBisfJs7EZuYq4K6vM9HmoB7hmPiLIDGeyaerw3feBV/bC4z8tg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.6.tgz", + "integrity": "sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.5", - "jest-regex-util": "^27.0.1", - "jest-util": "^27.0.2", + "jest-haste-map": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-util": "^27.0.6", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", @@ -11230,9 +11160,9 @@ } }, "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -11389,9 +11319,9 @@ } }, "@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.0.tgz", + "integrity": "sha512-IilJZ1hJBUZwMOVDNTdflOOLzJB/ZtljYVa7k3gEZN/jqIJIPkWHC6dvbX+DD2CwZDHB9wAKzZPzzqMIkW37/w==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -11500,9 +11430,9 @@ "dev": true }, "@types/node": { - "version": "12.20.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.15.tgz", - "integrity": "sha512-F6S4Chv4JicJmyrwlDkxUdGNSplsQdGwp1A0AJloEVDirWdZOAiRHhovDlsFkKUrquUXhz1imJhXHsf59auyAg==" + "version": "14.17.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.4.tgz", + "integrity": "sha512-8kQ3+wKGRNN0ghtEn7EGps/B8CzuBz1nXZEIGGLP2GnwbqYn4dbTs7k+VKLTq1HvZLRCIDtN3Snx1Ege8B7L5A==" }, "@types/normalize-package-data": { "version": "2.4.0", @@ -11517,9 +11447,9 @@ "dev": true }, "@types/prettier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.0.tgz", - "integrity": "sha512-hkc1DATxFLQo4VxPDpMH1gCkPpBbpOoJ/4nhuXw4n63/0R6bCpQECj4+K226UJ4JO/eJQz+1mC2I7JsWanAdQw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.1.tgz", + "integrity": "sha512-NVkb4p4YjI8E3O6+1m8I+8JlMpFZwfSbPGdaw0wXuyPRTEz0SLKwBUWNSO7Maoi8tQMPC8JLZNWkrcKPI7/sLA==", "dev": true }, "@types/puppeteer": { @@ -11550,15 +11480,15 @@ } }, "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.4.tgz", + "integrity": "sha512-zfyYsDTK1HTGYXU3fTiM76+om93HcFtsZd2M0bO/CL4DiETV7mSa/pIVN/6+G3esOqEMdg2An5cHHbK5t+9w+A==", "dev": true }, "@types/which": { @@ -11568,24 +11498,24 @@ "dev": true }, "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "20.2.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", "dev": true }, "@types/yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", "dev": true, "optional": true, "requires": { @@ -11593,15 +11523,15 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.0.tgz", - "integrity": "sha512-9XD9s7mt3QWMk82GoyUpc/Ji03vz4T5AYlHF9DcoFNfJ/y3UAclRsfGiE2gLfXtyC+JRA3trR7cR296TEb1oiQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.1.tgz", + "integrity": "sha512-n8/ggadrZ+uyrfrSEchx3jgODdmcx7MzVM2sI3cTpI/YlfSm0+9HEUaWw3aQn2urL2KYlWYMDgn45iLfjDYB+Q==", "dev": true, "requires": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.28.0", - "@typescript-eslint/types": "4.28.0", - "@typescript-eslint/typescript-estree": "4.28.0", + "@typescript-eslint/scope-manager": "4.28.1", + "@typescript-eslint/types": "4.28.1", + "@typescript-eslint/typescript-estree": "4.28.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -11618,29 +11548,29 @@ } }, "@typescript-eslint/scope-manager": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.0.tgz", - "integrity": "sha512-eCALCeScs5P/EYjwo6se9bdjtrh8ByWjtHzOkC4Tia6QQWtQr3PHovxh3TdYTuFcurkYI4rmFsRFpucADIkseg==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.1.tgz", + "integrity": "sha512-o95bvGKfss6705x7jFGDyS7trAORTy57lwJ+VsYwil/lOUxKQ9tA7Suuq+ciMhJc/1qPwB3XE2DKh9wubW8YYA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.28.0", - "@typescript-eslint/visitor-keys": "4.28.0" + "@typescript-eslint/types": "4.28.1", + "@typescript-eslint/visitor-keys": "4.28.1" } }, "@typescript-eslint/types": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.0.tgz", - "integrity": "sha512-p16xMNKKoiJCVZY5PW/AfILw2xe1LfruTcfAKBj3a+wgNYP5I9ZEKNDOItoRt53p4EiPV6iRSICy8EPanG9ZVA==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.1.tgz", + "integrity": "sha512-4z+knEihcyX7blAGi7O3Fm3O6YRCP+r56NJFMNGsmtdw+NCdpG5SgNz427LS9nQkRVTswZLhz484hakQwB8RRg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.0.tgz", - "integrity": "sha512-m19UQTRtxMzKAm8QxfKpvh6OwQSXaW1CdZPoCaQuLwAq7VZMNuhJmZR4g5281s2ECt658sldnJfdpSZZaxUGMQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.1.tgz", + "integrity": "sha512-GhKxmC4sHXxHGJv8e8egAZeTZ6HI4mLU6S7FUzvFOtsk7ZIDN1ksA9r9DyOgNqowA9yAtZXV0Uiap61bIO81FQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.28.0", - "@typescript-eslint/visitor-keys": "4.28.0", + "@typescript-eslint/types": "4.28.1", + "@typescript-eslint/visitor-keys": "4.28.1", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -11660,12 +11590,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.0.tgz", - "integrity": "sha512-PjJyTWwrlrvM5jazxYF5ZPs/nl0kHDZMVbuIcbpawVXaDPelp3+S9zpOz5RmVUfS/fD5l5+ZXNKnWhNYjPzCvw==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.1.tgz", + "integrity": "sha512-K4HMrdFqr9PFquPu178SaSb92CaWe2yErXyPumc8cYWxFmhgJsNY9eSePmO05j0JhBvf2Cdhptd6E6Yv9HVHcg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.28.0", + "@typescript-eslint/types": "4.28.1", "eslint-visitor-keys": "^2.0.0" } }, @@ -11900,13 +11830,6 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { "sprintf-js": "~1.0.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - } } }, "array-differ": { @@ -11932,21 +11855,6 @@ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -11991,29 +11899,17 @@ "postcss-value-parser": "^4.1.0" } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, "babel-jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.5.tgz", - "integrity": "sha512-bTMAbpCX7ldtfbca2llYLeSFsDM257aspyAOpsdrdSrBqoLkWCy4HPYTXtXWaSLgFPjrJGACL65rzzr4RFGadw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.6.tgz", + "integrity": "sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==", "dev": true, "requires": { - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.1", + "babel-preset-jest": "^27.0.6", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" @@ -12033,9 +11929,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz", - "integrity": "sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz", + "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==", "dev": true, "requires": { "@babel/template": "^7.3.3", @@ -12065,12 +11961,12 @@ } }, "babel-preset-jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz", - "integrity": "sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz", + "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^27.0.1", + "babel-plugin-jest-hoist": "^27.0.6", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -12115,15 +12011,6 @@ "safe-buffer": "5.1.2" } }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -12337,26 +12224,12 @@ "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" - }, - "dependencies": { - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - } } }, "caniuse-lite": { - "version": "1.0.30001239", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz", - "integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "version": "1.0.30001242", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001242.tgz", + "integrity": "sha512-KvNuZ/duufelMB3w2xtf9gEWCSxJwUgoxOx5b6ScLXC4kPc9xsczUVCPrQU26j5kOsHM4pSUL54tAZt5THQKug==", "dev": true }, "chalk": { @@ -12573,7 +12446,7 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "optional": true, + "devOptional": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -12633,9 +12506,9 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "core-js": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.1.tgz", - "integrity": "sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", + "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==", "optional": true }, "core-util-is": { @@ -12755,15 +12628,6 @@ } } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -12781,9 +12645,9 @@ "integrity": "sha512-OD0TZ+B7yP7ZgpJf5K2DIbj3FZvFvxgFUuaqA/V5zTjAtAAXZ1E8bktHxmAGs4x5b7PflqA9LeQ84Og7wYtF7Q==" }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { "ms": "2.1.2" } @@ -12813,9 +12677,9 @@ } }, "decimal.js": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.0.tgz", - "integrity": "sha512-MrQRs2gyD//7NeHi9TtsfClkf+cFAewDz+PZHR8ILKglLmBMyVX3ymQ+oeznE3tjrS7beTN+6JXb2C3JDHm7ug==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, "decompress-response": { @@ -12932,9 +12796,9 @@ "dev": true }, "diff-sequences": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", - "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", "dev": true }, "digest-fetch": { @@ -13035,16 +12899,6 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "devOptional": true }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "edge-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-2.2.1.tgz", @@ -13061,23 +12915,23 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron": { - "version": "11.4.9", - "resolved": "https://registry.npmjs.org/electron/-/electron-11.4.9.tgz", - "integrity": "sha512-3TJG1vAnuR8p47mzorCW5l7uWCjdNUufIbZ+gKjm010dtHmhrO1zchP1a76vuT4BllK8q1iygFSkNnDlZ0i2pA==", - "optional": true, + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.5.tgz", + "integrity": "sha512-ZoMCcPQNs/zO/Zdb5hq5H+rwRaKrdI3/sfXEwBVMx7f5jwa9jPQB3dZ2+7t59uD9VcFAWsH/pozr8nPPlv0tyw==", + "devOptional": true, "requires": { "@electron/get": "^1.0.1", - "@types/node": "^12.0.12", + "@types/node": "^14.6.2", "extract-zip": "^1.0.3" } }, "electron-chromedriver": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-11.0.0.tgz", - "integrity": "sha512-ayMJPBbB4puU0SqYbcD9XvF3/7GWIhqKE1n5lG2/GQPRnrZkNoPIilsrS0rQcD50Xhl69KowatDqLhUznZWtbA==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-13.0.0.tgz", + "integrity": "sha512-fID1ms8wT7qNfoKkXHNpH0ZE8/Nclb5YmkF3O0w57OxsR8S9PxgE9CJAgaSGroxBgZ+ge1i2OU0Aq/WE/e/Neg==", "dev": true, "requires": { - "@electron/get": "^1.12.2", + "@electron/get": "^1.12.4", "extract-zip": "^2.0.0" }, "dependencies": { @@ -13105,9 +12959,9 @@ } }, "electron-to-chromium": { - "version": "1.3.756", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.756.tgz", - "integrity": "sha512-WsmJym1TMeHVndjPjczTFbnRR/c4sbzg8fBFtuhlb2Sru3i/S1VGpzDSrv/It8ctMU2bj8G7g7/O3FzYMGw6eA==", + "version": "1.3.766", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.766.tgz", + "integrity": "sha512-u2quJ862q9reRKh/je3GXis3w38+RoXH1J9N3XjtsS6NzmUAosNsyZgUVFZPN/ZlJ3v6T0rTyZR3q/J5c6Sy5w==", "dev": true }, "emittery": { @@ -13153,6 +13007,12 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} } } }, @@ -13276,12 +13136,13 @@ } }, "eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==", + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", + "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", "requires": { "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.4.2", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -13348,12 +13209,12 @@ } }, "eslint-plugin-jsdoc": { - "version": "35.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-35.4.0.tgz", - "integrity": "sha512-0cr+NkPTxpTiMCtYOd8W5fd2IyC/CmaTHKb+0bzkpP9p8HfmJ3B2/M6FWj97rQJOLwLMkx+g2MIEZsrttpbFmQ==", + "version": "35.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-35.4.1.tgz", + "integrity": "sha512-lnpu2Bj+ta2eAqwCWnb6f3Xjc78TWKo/oMCpDH5NfpPhYnePNtGZJzoAMgU5uo9BQqmXJ8pql8aiodOhg82ofw==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "^0.8.0-alpha.2", + "@es-joy/jsdoccomment": "^0.8.0", "comment-parser": "1.1.5", "debug": "^4.3.1", "esquery": "^1.4.0", @@ -13527,17 +13388,17 @@ "dev": true }, "expect": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.2.tgz", - "integrity": "sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.6.tgz", + "integrity": "sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw==", "dev": true, "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.1", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-regex-util": "^27.0.1" + "jest-get-type": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-regex-util": "^27.0.6" }, "dependencies": { "ansi-styles": { @@ -13630,7 +13491,7 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", - "optional": true, + "devOptional": true, "requires": { "concat-stream": "^1.6.2", "debug": "^2.6.9", @@ -13642,7 +13503,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "optional": true, + "devOptional": true, "requires": { "ms": "2.0.0" } @@ -13651,16 +13512,10 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true + "devOptional": true } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -13673,17 +13528,16 @@ "dev": true }, "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", + "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" } }, "fast-json-stable-stringify": { @@ -13703,9 +13557,9 @@ "dev": true }, "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -13815,9 +13669,9 @@ } }, "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.0.tgz", + "integrity": "sha512-XprP7lDrVT+kE2c2YlfiV+IfS9zxukiIOvNamPNsImNhXadSsQEbosItdL9bUQlCZXR13SvPk20BjWSWLA7m4A==" }, "foreground-child": { "version": "2.0.0", @@ -13829,12 +13683,6 @@ "signal-exit": "^3.0.2" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, "form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -13941,15 +13789,6 @@ "pump": "^3.0.0" } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", @@ -14046,13 +13885,6 @@ "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", "requires": { "type-fest": "^0.20.2" - }, - "dependencies": { - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - } } }, "globalthis": { @@ -14132,22 +13964,6 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, "hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -14284,17 +14100,6 @@ "debug": "4" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -14303,6 +14108,14 @@ "requires": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" + }, + "dependencies": { + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + } } }, "https-proxy-agent": { @@ -14322,9 +14135,9 @@ "dev": true }, "husky": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz", - "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.0.tgz", + "integrity": "sha512-xK7lO0EtSzfFPiw+oQncQVy/XqV7UVVjxBByc+Iv5iK3yhW9boDoWgvZy3OGo48QKg/hUtZkzz0hi2HXa0kn7w==", "dev": true }, "iconv-lite": { @@ -14511,9 +14324,9 @@ "dev": true }, "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, "is-potential-custom-element-name": { @@ -14572,12 +14385,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, "istanbul-lib-coverage": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", @@ -14661,256 +14468,254 @@ } }, "jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.5.tgz", - "integrity": "sha512-4NlVMS29gE+JOZvgmSAsz3eOjkSsHqjTajlIsah/4MVSmKvf3zFP/TvgcLoWe2UVHiE9KF741sReqhF0p4mqbQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.6.tgz", + "integrity": "sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA==", "dev": true, "requires": { - "@jest/core": "^27.0.5", + "@jest/core": "^27.0.6", "import-local": "^3.0.2", - "jest-cli": "^27.0.5" - }, - "dependencies": { - "jest-cli": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.5.tgz", - "integrity": "sha512-kZqY020QFOFQKVE2knFHirTBElw3/Q0kUbDc3nMfy/x+RQ7zUY89SUuzpHHJoSX1kX7Lq569ncvjNqU3Td/FCA==", - "dev": true, - "requires": { - "@jest/core": "^27.0.5", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.0.5", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "prompts": "^2.0.1", - "yargs": "^16.0.3" - } - } + "jest-cli": "^27.0.6" } }, "jest-changed-files": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.2.tgz", - "integrity": "sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.6.tgz", + "integrity": "sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA==", "dev": true, "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "execa": "^5.0.0", "throat": "^6.0.1" } }, "jest-circus": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.5.tgz", - "integrity": "sha512-p5rO90o1RTh8LPOG6l0Fc9qgp5YGv+8M5CFixhMh7gGHtGSobD1AxX9cjFZujILgY8t30QZ7WVvxlnuG31r8TA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.6.tgz", + "integrity": "sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q==", "dev": true, "requires": { - "@jest/environment": "^27.0.5", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/environment": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.0.2", + "expect": "^27.0.6", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-runtime": "^27.0.5", - "jest-snapshot": "^27.0.5", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2", + "jest-each": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "pretty-format": "^27.0.6", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" } }, + "jest-cli": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.6.tgz", + "integrity": "sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg==", + "dev": true, + "requires": { + "@jest/core": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", + "prompts": "^2.0.1", + "yargs": "^16.0.3" + } + }, "jest-config": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.5.tgz", - "integrity": "sha512-zCUIXag7QIXKEVN4kUKbDBDi9Q53dV5o3eNhGqe+5zAbt1vLs4VE3ceWaYrOub0L4Y7E9pGfM84TX/0ARcE+Qw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.6.tgz", + "integrity": "sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.0.5", - "@jest/types": "^27.0.2", - "babel-jest": "^27.0.5", + "@jest/test-sequencer": "^27.0.6", + "@jest/types": "^27.0.6", + "babel-jest": "^27.0.6", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", - "jest-circus": "^27.0.5", - "jest-environment-jsdom": "^27.0.5", - "jest-environment-node": "^27.0.5", - "jest-get-type": "^27.0.1", - "jest-jasmine2": "^27.0.5", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.5", - "jest-runner": "^27.0.5", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", + "jest-circus": "^27.0.6", + "jest-environment-jsdom": "^27.0.6", + "jest-environment-node": "^27.0.6", + "jest-get-type": "^27.0.6", + "jest-jasmine2": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-runner": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", "micromatch": "^4.0.4", - "pretty-format": "^27.0.2" + "pretty-format": "^27.0.6" } }, "jest-diff": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.2.tgz", - "integrity": "sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.6.tgz", + "integrity": "sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^27.0.1", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" } }, "jest-docblock": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.1.tgz", - "integrity": "sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", + "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.2.tgz", - "integrity": "sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.6.tgz", + "integrity": "sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA==", "dev": true, "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2" + "jest-get-type": "^27.0.6", + "jest-util": "^27.0.6", + "pretty-format": "^27.0.6" } }, "jest-environment-jsdom": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.5.tgz", - "integrity": "sha512-ToWhViIoTl5738oRaajTMgYhdQL73UWPoV4GqHGk2DPhs+olv8OLq5KoQW8Yf+HtRao52XLqPWvl46dPI88PdA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz", + "integrity": "sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw==", "dev": true, "requires": { - "@jest/environment": "^27.0.5", - "@jest/fake-timers": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/environment": "^27.0.6", + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2", + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6", "jsdom": "^16.6.0" } }, "jest-environment-node": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.5.tgz", - "integrity": "sha512-47qqScV/WMVz5OKF5TWpAeQ1neZKqM3ySwNveEnLyd+yaE/KT6lSMx/0SOx60+ZUcVxPiESYS+Kt2JS9y4PpkQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.6.tgz", + "integrity": "sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w==", "dev": true, "requires": { - "@jest/environment": "^27.0.5", - "@jest/fake-timers": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/environment": "^27.0.6", + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2" + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6" } }, "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", + "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", "dev": true }, "jest-haste-map": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.5.tgz", - "integrity": "sha512-3LFryGSHxwPFHzKIs6W0BGA2xr6g1MvzSjR3h3D8K8Uqy4vbRm/grpGHzbPtIbOPLC6wFoViRrNEmd116QWSkw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.6.tgz", + "integrity": "sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w==", "dev": true, "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.0.1", - "jest-serializer": "^27.0.1", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", + "jest-regex-util": "^27.0.6", + "jest-serializer": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.5.tgz", - "integrity": "sha512-m3TojR19sFmTn79QoaGy1nOHBcLvtLso6Zh7u+gYxZWGcza4rRPVqwk1hciA5ZOWWZIJOukAcore8JRX992FaA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz", + "integrity": "sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.0.5", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/environment": "^27.0.6", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.0.2", + "expect": "^27.0.6", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-runtime": "^27.0.5", - "jest-snapshot": "^27.0.5", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2", + "jest-each": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "pretty-format": "^27.0.6", "throat": "^6.0.1" } }, "jest-leak-detector": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz", - "integrity": "sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz", + "integrity": "sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ==", "dev": true, "requires": { - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" } }, "jest-matcher-utils": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz", - "integrity": "sha512-Qczi5xnTNjkhcIB0Yy75Txt+Ez51xdhOxsukN7awzq2auZQGPHcQrJ623PZj0ECDEMOk2soxWx05EXdXGd1CbA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz", + "integrity": "sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.0.2", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" + "jest-diff": "^27.0.6", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" } }, "jest-message-util": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.2.tgz", - "integrity": "sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.6.tgz", + "integrity": "sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.0.2", + "pretty-format": "^27.0.6", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -14927,12 +14732,12 @@ } }, "jest-mock": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.3.tgz", - "integrity": "sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.6.tgz", + "integrity": "sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw==", "dev": true, "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "@types/node": "*" } }, @@ -14944,83 +14749,83 @@ "requires": {} }, "jest-regex-util": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.1.tgz", - "integrity": "sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", + "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", "dev": true }, "jest-resolve": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.5.tgz", - "integrity": "sha512-Md65pngRh8cRuWVdWznXBB5eDt391OJpdBaJMxfjfuXCvOhM3qQBtLMCMTykhuUKiBMmy5BhqCW7AVOKmPrW+Q==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.6.tgz", + "integrity": "sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA==", "dev": true, "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", "resolve": "^1.20.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.5.tgz", - "integrity": "sha512-xUj2dPoEEd59P+nuih4XwNa4nJ/zRd/g4rMvjHrZPEBWeWRq/aJnnM6mug+B+Nx+ILXGtfWHzQvh7TqNV/WbuA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz", + "integrity": "sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA==", "dev": true, "requires": { - "@jest/types": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-snapshot": "^27.0.5" + "@jest/types": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-snapshot": "^27.0.6" } }, "jest-runner": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.5.tgz", - "integrity": "sha512-HNhOtrhfKPArcECgBTcWOc+8OSL8GoFoa7RsHGnfZR1C1dFohxy9eLtpYBS+koybAHlJLZzNCx2Y/Ic3iEtJpQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.6.tgz", + "integrity": "sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ==", "dev": true, "requires": { - "@jest/console": "^27.0.2", - "@jest/environment": "^27.0.5", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/console": "^27.0.6", + "@jest/environment": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.1", - "jest-environment-jsdom": "^27.0.5", - "jest-environment-node": "^27.0.5", - "jest-haste-map": "^27.0.5", - "jest-leak-detector": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-resolve": "^27.0.5", - "jest-runtime": "^27.0.5", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", + "jest-docblock": "^27.0.6", + "jest-environment-jsdom": "^27.0.6", + "jest-environment-node": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-leak-detector": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", "source-map-support": "^0.5.6", "throat": "^6.0.1" } }, "jest-runtime": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.5.tgz", - "integrity": "sha512-V/w/+VasowPESbmhXn5AsBGPfb35T7jZPGZybYTHxZdP7Gwaa+A0EXE6rx30DshHKA98lVCODbCO8KZpEW3hiQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.6.tgz", + "integrity": "sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q==", "dev": true, "requires": { - "@jest/console": "^27.0.2", - "@jest/environment": "^27.0.5", - "@jest/fake-timers": "^27.0.5", - "@jest/globals": "^27.0.5", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/console": "^27.0.6", + "@jest/environment": "^27.0.6", + "@jest/fake-timers": "^27.0.6", + "@jest/globals": "^27.0.6", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", @@ -15028,23 +14833,23 @@ "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.5", - "jest-message-util": "^27.0.2", - "jest-mock": "^27.0.3", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.5", - "jest-snapshot": "^27.0.5", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", + "jest-haste-map": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-mock": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" } }, "jest-serializer": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.1.tgz", - "integrity": "sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", + "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", "dev": true, "requires": { "@types/node": "*", @@ -15052,9 +14857,9 @@ } }, "jest-snapshot": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.5.tgz", - "integrity": "sha512-H1yFYdgnL1vXvDqMrnDStH6yHFdMEuzYQYc71SnC/IJnuuhW6J16w8GWG1P+qGd3Ag3sQHjbRr0TcwEo/vGS+g==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.6.tgz", + "integrity": "sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A==", "dev": true, "requires": { "@babel/core": "^7.7.2", @@ -15063,23 +14868,23 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.0.2", + "expect": "^27.0.6", "graceful-fs": "^4.2.4", - "jest-diff": "^27.0.2", - "jest-get-type": "^27.0.1", - "jest-haste-map": "^27.0.5", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-resolve": "^27.0.5", - "jest-util": "^27.0.2", + "jest-diff": "^27.0.6", + "jest-get-type": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-util": "^27.0.6", "natural-compare": "^1.4.0", - "pretty-format": "^27.0.2", + "pretty-format": "^27.0.6", "semver": "^7.3.2" }, "dependencies": { @@ -15095,12 +14900,12 @@ } }, "jest-util": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.2.tgz", - "integrity": "sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.6.tgz", + "integrity": "sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ==", "dev": true, "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -15109,17 +14914,17 @@ } }, "jest-validate": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.2.tgz", - "integrity": "sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.6.tgz", + "integrity": "sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA==", "dev": true, "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", + "jest-get-type": "^27.0.6", "leven": "^3.1.0", - "pretty-format": "^27.0.2" + "pretty-format": "^27.0.6" }, "dependencies": { "camelcase": { @@ -15131,24 +14936,24 @@ } }, "jest-watcher": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.2.tgz", - "integrity": "sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.6.tgz", + "integrity": "sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ==", "dev": true, "requires": { - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.0.2", + "jest-util": "^27.0.6", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", - "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", + "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", "dev": true, "requires": { "@types/node": "*", @@ -15181,12 +14986,6 @@ "esprima": "^4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "jsdoc-type-pratt-parser": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.0.4.tgz", @@ -15254,12 +15053,6 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -15274,7 +15067,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "devOptional": true + "optional": true }, "json5": { "version": "2.2.0", @@ -15294,18 +15087,6 @@ "graceful-fs": "^4.1.6" } }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "just-extend": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", @@ -15756,12 +15537,6 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true } } }, @@ -16083,12 +15858,6 @@ } } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -16279,12 +16048,6 @@ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "devOptional": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -16488,9 +16251,9 @@ "devOptional": true }, "prettier": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", - "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", "dev": true }, "prettier-linter-helpers": { @@ -16503,12 +16266,12 @@ } }, "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", + "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", "dev": true, "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.0.6", "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" @@ -16735,9 +16498,9 @@ "dev": true }, "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, "range_check": { @@ -16940,69 +16703,6 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -17068,9 +16768,9 @@ } }, "resq": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resq/-/resq-1.10.0.tgz", - "integrity": "sha512-hCUd0xMalqtPDz4jXIqs0M5Wnv/LZXN8h7unFOo4/nvExT9dDPbhwd3udRxLlp0HgBnHcV009UlduE9NZi7A6w==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resq/-/resq-1.10.1.tgz", + "integrity": "sha512-zhp1iyUH02MLciv3bIM2bNtTFx/fqRsK4Jk73jcPqp00d/sMTTjOtjdTMAcgjrQKGx5DvQ/HSpeqaMW0atGRJA==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1" @@ -17116,6 +16816,14 @@ "json-stringify-safe": "^5.0.1", "semver-compare": "^1.0.0", "sprintf-js": "^1.1.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "optional": true + } } }, "rrule": { @@ -17221,6 +16929,14 @@ "optional": true, "requires": { "type-fest": "^0.13.1" + }, + "dependencies": { + "type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "optional": true + } } }, "serve-static": { @@ -17410,16 +17126,140 @@ "dev": true }, "spectron": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/spectron/-/spectron-13.0.0.tgz", - "integrity": "sha512-7RPa6Fp8gqL4V0DubobnqIRFHIijkpjg6MFHcJlxoerWyvLJd+cQvOh756XpB1Z/U3DyA9jPcS+HE2PvYRP5+A==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/spectron/-/spectron-15.0.0.tgz", + "integrity": "sha512-eErHqymkEVb6H+LPZQoDYvWEv93o3nhxL7HXXdmC61ncV0jBckh8x3Qt6j+As2c1n0C/hKG9A2H1NnwGwD6agg==", "dev": true, "requires": { + "@electron/remote": "^1.1.0", "dev-null": "^0.1.1", - "electron-chromedriver": "^11.0.0", - "request": "^2.88.2", + "electron-chromedriver": "^13.0.0", + "got": "^11.8.0", "split": "^1.0.1", "webdriverio": "^6.9.1" + }, + "dependencies": { + "@sindresorhus/is": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.1.tgz", + "integrity": "sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", + "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + } + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + } + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "got": { + "version": "11.8.2", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", + "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==", + "dev": true, + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.1", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "keyv": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", + "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true + }, + "responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "dev": true, + "requires": { + "lowercase-keys": "^2.0.0" + } + } } }, "split": { @@ -17432,27 +17272,9 @@ } }, "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "optional": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "stack-utils": { "version": "2.0.3", @@ -17715,9 +17537,9 @@ }, "dependencies": { "ajv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", - "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", + "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -17892,21 +17714,6 @@ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "optional": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -17922,10 +17729,9 @@ "dev": true }, "type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "optional": true + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" }, "type-is": { "version": "1.6.18", @@ -17940,7 +17746,7 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "optional": true + "devOptional": true }, "typedarray-to-buffer": { "version": "3.1.5", @@ -17951,6 +17757,13 @@ "is-typedarray": "^1.0.0" } }, + "typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true, + "peer": true + }, "ua-parser-js": { "version": "0.7.28", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", @@ -17986,6 +17799,12 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true } } }, @@ -18096,17 +17915,6 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", @@ -18363,12 +18171,6 @@ "type-fest": "^0.20.2" } }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -18410,9 +18212,9 @@ "dev": true }, "whatwg-url": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.6.0.tgz", - "integrity": "sha512-os0KkeeqUOl7ccdDT1qqUcS4KH4tcBTSKK5Nl5WKb2lyxInIZ/CpjkqKa1Ss12mjfdcRX9mHmPPs7/SxG1Hbdw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "requires": { "lodash": "^4.7.0", @@ -18468,9 +18270,10 @@ } }, "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.2.tgz", + "integrity": "sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ==", + "dev": true, "requires": {} }, "xml-name-validator": { From a7ae79493d447bfd3d1d4d85b8ec433e82151237 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Mon, 5 Jul 2021 00:33:50 +0200 Subject: [PATCH 007/134] refactor test config --- CHANGELOG.md | 1 + tests/configs/default.js | 21 +++++++++++++++++++ tests/configs/empty_ipWhiteList.js | 19 ++--------------- tests/configs/env.js | 17 +-------------- tests/configs/modules/alert/default.js | 16 ++------------ .../configs/modules/calendar/auth-default.js | 14 ++----------- tests/configs/modules/calendar/basic-auth.js | 14 ++----------- .../configs/modules/calendar/changed-port.js | 14 ++----------- tests/configs/modules/calendar/custom.js | 14 ++----------- tests/configs/modules/calendar/default.js | 14 ++----------- .../modules/calendar/fail-basic-auth.js | 14 ++----------- .../modules/calendar/old-basic-auth.js | 14 ++----------- tests/configs/modules/calendar/recurring.js | 14 ++----------- tests/configs/modules/clock/clock_12hr.js | 14 ++----------- tests/configs/modules/clock/clock_24hr.js | 16 ++------------ tests/configs/modules/clock/clock_analog.js | 16 ++------------ .../clock/clock_displaySeconds_false.js | 14 ++----------- .../modules/clock/clock_showPeriodUpper.js | 14 ++----------- tests/configs/modules/clock/clock_showWeek.js | 14 ++----------- tests/configs/modules/clock/es/clock_12hr.js | 13 ++---------- tests/configs/modules/clock/es/clock_24hr.js | 14 ++----------- .../modules/clock/es/clock_showPeriodUpper.js | 13 ++---------- .../modules/clock/es/clock_showWeek.js | 13 ++---------- .../compliments/compliments_anytime.js | 14 ++----------- .../modules/compliments/compliments_date.js | 14 ++----------- .../compliments/compliments_only_anytime.js | 14 ++----------- .../compliments/compliments_parts_day.js | 14 ++----------- tests/configs/modules/display.js | 8 ++----- .../configs/modules/helloworld/helloworld.js | 16 ++------------ .../modules/helloworld/helloworld_default.js | 16 ++------------ tests/configs/modules/newsfeed/default.js | 14 ++----------- .../configs/modules/newsfeed/incorrect_url.js | 14 ++----------- .../modules/newsfeed/prohibited_words.js | 14 ++----------- tests/configs/modules/positions.js | 16 ++------------ .../weather/currentweather_compliments.js | 17 ++------------- .../modules/weather/currentweather_default.js | 14 ++----------- .../modules/weather/currentweather_options.js | 16 ++------------ .../modules/weather/currentweather_units.js | 14 ++----------- .../weather/forecastweather_default.js | 14 ++----------- .../weather/forecastweather_options.js | 14 ++----------- .../modules/weather/forecastweather_units.js | 14 ++----------- tests/configs/noIpWhiteList.js | 19 ++--------------- tests/configs/port_8090.js | 19 ++--------------- tests/configs/without_modules.js | 17 ++------------- 44 files changed, 105 insertions(+), 534 deletions(-) create mode 100644 tests/configs/default.js diff --git a/CHANGELOG.md b/CHANGELOG.md index f3583ff7..36dcf39d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ _This release is scheduled to be released on 2021-07-01._ ### Updated - Bump electron to v13 (and spectron to v15) and update other dependencies in package.json. +- Refactor test configs, use default test config for all tests. ### Fixed diff --git a/tests/configs/default.js b/tests/configs/default.js new file mode 100644 index 00000000..fe066d19 --- /dev/null +++ b/tests/configs/default.js @@ -0,0 +1,21 @@ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + + language: "en", + timeFormat: 24, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + enableRemoteModule: true, + contextIsolation: false + } + }, + + modules: [] +}; + +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/empty_ipWhiteList.js b/tests/configs/empty_ipWhiteList.js index 4b0d4057..1c9353b5 100644 --- a/tests/configs/empty_ipWhiteList.js +++ b/tests/configs/empty_ipWhiteList.js @@ -3,23 +3,8 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { - port: 8080, - ipWhitelist: [], - - language: "en", - timeFormat: 24, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, - - modules: [] -}; +let config = require('./default.js'); +config.ipWhitelist = []; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/env.js b/tests/configs/env.js index e05424c8..9386d1c5 100644 --- a/tests/configs/env.js +++ b/tests/configs/env.js @@ -3,23 +3,8 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", - timeFormat: 24, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, - - modules: [] -}; +let config = require('./default.js'); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/alert/default.js b/tests/configs/modules/alert/default.js index 8a358ec8..0713079b 100644 --- a/tests/configs/modules/alert/default.js +++ b/tests/configs/modules/alert/default.js @@ -4,20 +4,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", - timeFormat: 24, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, - modules: [ { module: "alert", @@ -29,6 +15,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/calendar/auth-default.js b/tests/configs/modules/calendar/auth-default.js index 8eabfe21..0bc6bc78 100644 --- a/tests/configs/modules/calendar/auth-default.js +++ b/tests/configs/modules/calendar/auth-default.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -38,6 +26,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/calendar/basic-auth.js b/tests/configs/modules/calendar/basic-auth.js index 342da0e2..4243a237 100644 --- a/tests/configs/modules/calendar/basic-auth.js +++ b/tests/configs/modules/calendar/basic-auth.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -39,6 +27,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/calendar/changed-port.js b/tests/configs/modules/calendar/changed-port.js index ef59aea9..02f6d385 100644 --- a/tests/configs/modules/calendar/changed-port.js +++ b/tests/configs/modules/calendar/changed-port.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -38,6 +26,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/calendar/custom.js b/tests/configs/modules/calendar/custom.js index 721c0990..7e34bddd 100644 --- a/tests/configs/modules/calendar/custom.js +++ b/tests/configs/modules/calendar/custom.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -38,6 +26,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/calendar/default.js b/tests/configs/modules/calendar/default.js index ccb37af8..a532dd8d 100644 --- a/tests/configs/modules/calendar/default.js +++ b/tests/configs/modules/calendar/default.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -34,6 +22,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/calendar/fail-basic-auth.js b/tests/configs/modules/calendar/fail-basic-auth.js index 0ab1bdde..17427e63 100644 --- a/tests/configs/modules/calendar/fail-basic-auth.js +++ b/tests/configs/modules/calendar/fail-basic-auth.js @@ -6,19 +6,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -41,6 +29,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/calendar/old-basic-auth.js b/tests/configs/modules/calendar/old-basic-auth.js index 519acc9b..7ac4f930 100644 --- a/tests/configs/modules/calendar/old-basic-auth.js +++ b/tests/configs/modules/calendar/old-basic-auth.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -36,6 +24,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/calendar/recurring.js b/tests/configs/modules/calendar/recurring.js index a085ad07..04691813 100644 --- a/tests/configs/modules/calendar/recurring.js +++ b/tests/configs/modules/calendar/recurring.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -35,6 +23,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/clock/clock_12hr.js b/tests/configs/modules/clock/clock_12hr.js index 9de222ed..016a10a4 100644 --- a/tests/configs/modules/clock/clock_12hr.js +++ b/tests/configs/modules/clock/clock_12hr.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -26,6 +14,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/clock/clock_24hr.js b/tests/configs/modules/clock/clock_24hr.js index e5ec59e3..899d1e0a 100644 --- a/tests/configs/modules/clock/clock_24hr.js +++ b/tests/configs/modules/clock/clock_24hr.js @@ -4,20 +4,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", - timeFormat: 24, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, - modules: [ { module: "clock", @@ -26,6 +12,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/clock/clock_analog.js b/tests/configs/modules/clock/clock_analog.js index c76c10eb..54295b4f 100644 --- a/tests/configs/modules/clock/clock_analog.js +++ b/tests/configs/modules/clock/clock_analog.js @@ -3,20 +3,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", - timeFormat: 24, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, - modules: [ { module: "clock", @@ -29,6 +15,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/clock/clock_displaySeconds_false.js b/tests/configs/modules/clock/clock_displaySeconds_false.js index e74019d3..b39c0322 100644 --- a/tests/configs/modules/clock/clock_displaySeconds_false.js +++ b/tests/configs/modules/clock/clock_displaySeconds_false.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -29,6 +17,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/clock/clock_showPeriodUpper.js b/tests/configs/modules/clock/clock_showPeriodUpper.js index 6819de54..a18c5b56 100644 --- a/tests/configs/modules/clock/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/clock_showPeriodUpper.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -29,6 +17,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/clock/clock_showWeek.js b/tests/configs/modules/clock/clock_showWeek.js index 26b16194..63ba437f 100644 --- a/tests/configs/modules/clock/clock_showWeek.js +++ b/tests/configs/modules/clock/clock_showWeek.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -29,6 +17,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/clock/es/clock_12hr.js b/tests/configs/modules/clock/es/clock_12hr.js index ed9d390d..d1c1d0e5 100644 --- a/tests/configs/modules/clock/es/clock_12hr.js +++ b/tests/configs/modules/clock/es/clock_12hr.js @@ -4,19 +4,8 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "es", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -26,6 +15,8 @@ let config = { ] }; +config = Object.assign(require("../../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/clock/es/clock_24hr.js b/tests/configs/modules/clock/es/clock_24hr.js index 985d579c..41d3e60b 100644 --- a/tests/configs/modules/clock/es/clock_24hr.js +++ b/tests/configs/modules/clock/es/clock_24hr.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "es", - timeFormat: 24, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -26,6 +14,8 @@ let config = { ] }; +config = Object.assign(require("../../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/clock/es/clock_showPeriodUpper.js b/tests/configs/modules/clock/es/clock_showPeriodUpper.js index 29c02155..6f8fb1d2 100644 --- a/tests/configs/modules/clock/es/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/es/clock_showPeriodUpper.js @@ -4,19 +4,8 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "es", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -29,6 +18,8 @@ let config = { ] }; +config = Object.assign(require("../../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/clock/es/clock_showWeek.js b/tests/configs/modules/clock/es/clock_showWeek.js index 95803d5a..dc90b1ed 100644 --- a/tests/configs/modules/clock/es/clock_showWeek.js +++ b/tests/configs/modules/clock/es/clock_showWeek.js @@ -5,19 +5,8 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "es", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -30,6 +19,8 @@ let config = { ] }; +config = Object.assign(require("../../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/compliments/compliments_anytime.js b/tests/configs/modules/compliments/compliments_anytime.js index 8cc0fc07..acf5b684 100644 --- a/tests/configs/modules/compliments/compliments_anytime.js +++ b/tests/configs/modules/compliments/compliments_anytime.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -34,6 +22,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/compliments/compliments_date.js b/tests/configs/modules/compliments/compliments_date.js index 8403d10c..38ec2b7c 100644 --- a/tests/configs/modules/compliments/compliments_date.js +++ b/tests/configs/modules/compliments/compliments_date.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -35,6 +23,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/compliments/compliments_only_anytime.js b/tests/configs/modules/compliments/compliments_only_anytime.js index 758ac9b2..47d24fb5 100644 --- a/tests/configs/modules/compliments/compliments_only_anytime.js +++ b/tests/configs/modules/compliments/compliments_only_anytime.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -31,6 +19,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/compliments/compliments_parts_day.js b/tests/configs/modules/compliments/compliments_parts_day.js index 51d5ea89..2d475c01 100644 --- a/tests/configs/modules/compliments/compliments_parts_day.js +++ b/tests/configs/modules/compliments/compliments_parts_day.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -33,6 +21,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/display.js b/tests/configs/modules/display.js index aae06520..1ea3ec97 100644 --- a/tests/configs/modules/display.js +++ b/tests/configs/modules/display.js @@ -4,12 +4,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", - timeFormat: 24, - units: "metric", electronOptions: { fullscreen: false, width: 800, @@ -40,6 +34,8 @@ let config = { ] }; +config = Object.assign(require("../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/helloworld/helloworld.js b/tests/configs/modules/helloworld/helloworld.js index 3f83a0f9..126cadca 100644 --- a/tests/configs/modules/helloworld/helloworld.js +++ b/tests/configs/modules/helloworld/helloworld.js @@ -4,20 +4,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", - timeFormat: 24, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, - modules: [ { module: "helloworld", @@ -29,6 +15,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/helloworld/helloworld_default.js b/tests/configs/modules/helloworld/helloworld_default.js index a0a9a29e..e091c796 100644 --- a/tests/configs/modules/helloworld/helloworld_default.js +++ b/tests/configs/modules/helloworld/helloworld_default.js @@ -4,20 +4,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", - timeFormat: 24, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, - modules: [ { module: "helloworld", @@ -26,6 +12,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/newsfeed/default.js b/tests/configs/modules/newsfeed/default.js index 59cf7d02..649bbcdd 100644 --- a/tests/configs/modules/newsfeed/default.js +++ b/tests/configs/modules/newsfeed/default.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -34,6 +22,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/newsfeed/incorrect_url.js b/tests/configs/modules/newsfeed/incorrect_url.js index afb093e0..242ad992 100644 --- a/tests/configs/modules/newsfeed/incorrect_url.js +++ b/tests/configs/modules/newsfeed/incorrect_url.js @@ -3,19 +3,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -33,6 +21,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/newsfeed/prohibited_words.js b/tests/configs/modules/newsfeed/prohibited_words.js index a21dd475..15ac8dd7 100644 --- a/tests/configs/modules/newsfeed/prohibited_words.js +++ b/tests/configs/modules/newsfeed/prohibited_words.js @@ -3,19 +3,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -35,6 +23,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/positions.js b/tests/configs/modules/positions.js index a69b26fd..d3229532 100644 --- a/tests/configs/modules/positions.js +++ b/tests/configs/modules/positions.js @@ -4,20 +4,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", - timeFormat: 24, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, - modules: // Using exotic content. This is why don't accept go to JSON configuration file (function () { @@ -36,6 +22,8 @@ let config = { })() }; +config = Object.assign(require("../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/weather/currentweather_compliments.js b/tests/configs/modules/weather/currentweather_compliments.js index 257c92cf..3b47ea65 100644 --- a/tests/configs/modules/weather/currentweather_compliments.js +++ b/tests/configs/modules/weather/currentweather_compliments.js @@ -4,21 +4,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", - timeFormat: 24, - units: "metric", - electronOptions: { - fullscreen: false, - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, - modules: [ { module: "compliments", @@ -42,6 +27,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/weather/currentweather_default.js b/tests/configs/modules/weather/currentweather_default.js index 0cdac111..7e9859c7 100644 --- a/tests/configs/modules/weather/currentweather_default.js +++ b/tests/configs/modules/weather/currentweather_default.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -31,6 +19,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/weather/currentweather_options.js b/tests/configs/modules/weather/currentweather_options.js index 568c7006..30f14e3b 100644 --- a/tests/configs/modules/weather/currentweather_options.js +++ b/tests/configs/modules/weather/currentweather_options.js @@ -4,20 +4,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", - timeFormat: 24, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, - modules: [ { module: "weather", @@ -37,6 +23,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/weather/currentweather_units.js b/tests/configs/modules/weather/currentweather_units.js index 4c18a5eb..e6a487a7 100644 --- a/tests/configs/modules/weather/currentweather_units.js +++ b/tests/configs/modules/weather/currentweather_units.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", - timeFormat: 24, units: "imperial", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -33,6 +21,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/weather/forecastweather_default.js b/tests/configs/modules/weather/forecastweather_default.js index fc374c3b..c9385515 100644 --- a/tests/configs/modules/weather/forecastweather_default.js +++ b/tests/configs/modules/weather/forecastweather_default.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -33,6 +21,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/weather/forecastweather_options.js b/tests/configs/modules/weather/forecastweather_options.js index 4a1c5461..ad6883e9 100644 --- a/tests/configs/modules/weather/forecastweather_options.js +++ b/tests/configs/modules/weather/forecastweather_options.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", timeFormat: 12, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -36,6 +24,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/modules/weather/forecastweather_units.js b/tests/configs/modules/weather/forecastweather_units.js index 6e3d0dfb..af5c8f09 100644 --- a/tests/configs/modules/weather/forecastweather_units.js +++ b/tests/configs/modules/weather/forecastweather_units.js @@ -4,19 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", - timeFormat: 24, units: "imperial", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, modules: [ { @@ -34,6 +22,8 @@ let config = { ] }; +config = Object.assign(require("../../default.js"), config); + /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; diff --git a/tests/configs/noIpWhiteList.js b/tests/configs/noIpWhiteList.js index cb578296..6fe8e888 100644 --- a/tests/configs/noIpWhiteList.js +++ b/tests/configs/noIpWhiteList.js @@ -3,23 +3,8 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { - port: 8080, - ipWhitelist: ["x.x.x.x"], - - language: "en", - timeFormat: 24, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, - - modules: [] -}; +let config = require('./default.js'); +config.ipWhitelist = ["x.x.x.x"]; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/port_8090.js b/tests/configs/port_8090.js index e6813e5e..9771e40b 100644 --- a/tests/configs/port_8090.js +++ b/tests/configs/port_8090.js @@ -3,23 +3,8 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { - port: 8090, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", - timeFormat: 24, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, - - modules: [] -}; +let config = require('./default.js'); +config.port = 8090; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/without_modules.js b/tests/configs/without_modules.js index 46e721e5..d985a4f5 100644 --- a/tests/configs/without_modules.js +++ b/tests/configs/without_modules.js @@ -3,21 +3,8 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.10.1"], - - language: "en", - timeFormat: 24, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - } -}; +let config = require('./default.js'); +delete config.modules; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { From 659e1da79dc9cc0f14abe8483de7da1592433f4d Mon Sep 17 00:00:00 2001 From: karsten13 Date: Mon, 5 Jul 2021 00:40:01 +0200 Subject: [PATCH 008/134] run prettier --- tests/configs/empty_ipWhiteList.js | 2 +- tests/configs/env.js | 2 +- tests/configs/noIpWhiteList.js | 2 +- tests/configs/port_8090.js | 2 +- tests/configs/without_modules.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/configs/empty_ipWhiteList.js b/tests/configs/empty_ipWhiteList.js index 1c9353b5..6a0a9e95 100644 --- a/tests/configs/empty_ipWhiteList.js +++ b/tests/configs/empty_ipWhiteList.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require('./default.js'); +let config = require("./default.js"); config.ipWhitelist = []; /*************** DO NOT EDIT THE LINE BELOW ***************/ diff --git a/tests/configs/env.js b/tests/configs/env.js index 9386d1c5..e5689d4c 100644 --- a/tests/configs/env.js +++ b/tests/configs/env.js @@ -4,7 +4,7 @@ * MIT Licensed. */ -let config = require('./default.js'); +let config = require("./default.js"); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/noIpWhiteList.js b/tests/configs/noIpWhiteList.js index 6fe8e888..f9d3698e 100644 --- a/tests/configs/noIpWhiteList.js +++ b/tests/configs/noIpWhiteList.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require('./default.js'); +let config = require("./default.js"); config.ipWhitelist = ["x.x.x.x"]; /*************** DO NOT EDIT THE LINE BELOW ***************/ diff --git a/tests/configs/port_8090.js b/tests/configs/port_8090.js index 9771e40b..400a54e1 100644 --- a/tests/configs/port_8090.js +++ b/tests/configs/port_8090.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require('./default.js'); +let config = require("./default.js"); config.port = 8090; /*************** DO NOT EDIT THE LINE BELOW ***************/ diff --git a/tests/configs/without_modules.js b/tests/configs/without_modules.js index d985a4f5..78d56717 100644 --- a/tests/configs/without_modules.js +++ b/tests/configs/without_modules.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require('./default.js'); +let config = require("./default.js"); delete config.modules; /*************** DO NOT EDIT THE LINE BELOW ***************/ From 7cfc3458ec9ec51a2ddec34f14d3528cfd8b2158 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Mon, 5 Jul 2021 18:08:56 +0200 Subject: [PATCH 009/134] fix tests --- tests/configs/modules/display.js | 14 +++----------- tests/configs/without_modules.js | 6 +++++- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/tests/configs/modules/display.js b/tests/configs/modules/display.js index 1ea3ec97..24556659 100644 --- a/tests/configs/modules/display.js +++ b/tests/configs/modules/display.js @@ -4,17 +4,6 @@ * MIT Licensed. */ let config = { - electronOptions: { - fullscreen: false, - width: 800, - height: 600, - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, - modules: [ { module: "helloworld", @@ -35,6 +24,9 @@ let config = { }; config = Object.assign(require("../default.js"), config); +config.electronOptions.fullscreen = false; +config.electronOptions.width = 800; +config.electronOptions.height = 600; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/without_modules.js b/tests/configs/without_modules.js index 78d56717..6e199b00 100644 --- a/tests/configs/without_modules.js +++ b/tests/configs/without_modules.js @@ -3,7 +3,11 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require("./default.js"); +let config = { + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.10.1"] +}; + +config = Object.assign(require("./default.js"), config); delete config.modules; /*************** DO NOT EDIT THE LINE BELOW ***************/ From 2881d19d43f1c5ab1eb730212b823e0f46a9b878 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Mon, 5 Jul 2021 18:27:14 +0200 Subject: [PATCH 010/134] remove env.js --- tests/configs/env.js | 12 ------------ tests/e2e/dev_console.js | 2 +- tests/e2e/env_spec.js | 2 +- tests/e2e/vendor_spec.js | 2 +- 4 files changed, 3 insertions(+), 15 deletions(-) delete mode 100644 tests/configs/env.js diff --git a/tests/configs/env.js b/tests/configs/env.js deleted file mode 100644 index e5689d4c..00000000 --- a/tests/configs/env.js +++ /dev/null @@ -1,12 +0,0 @@ -/* Magic Mirror Test config sample environment - * - * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com - * MIT Licensed. - */ - -let config = require("./default.js"); - -/*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") { - module.exports = config; -} diff --git a/tests/e2e/dev_console.js b/tests/e2e/dev_console.js index 2a607e5b..06470645 100644 --- a/tests/e2e/dev_console.js +++ b/tests/e2e/dev_console.js @@ -7,7 +7,7 @@ describe("Development console tests", function () { beforeAll(function () { // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/env.js"; + process.env.MM_CONFIG_FILE = "tests/configs/default.js"; }); describe("Without 'dev' commandline argument", function () { diff --git a/tests/e2e/env_spec.js b/tests/e2e/env_spec.js index 706274a2..77605b4a 100644 --- a/tests/e2e/env_spec.js +++ b/tests/e2e/env_spec.js @@ -8,7 +8,7 @@ describe("Electron app environment", function () { beforeAll(function () { // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/env.js"; + process.env.MM_CONFIG_FILE = "tests/configs/default.js"; }); beforeEach(function () { diff --git a/tests/e2e/vendor_spec.js b/tests/e2e/vendor_spec.js index b5289c2f..3c97515d 100644 --- a/tests/e2e/vendor_spec.js +++ b/tests/e2e/vendor_spec.js @@ -10,7 +10,7 @@ describe("Vendors", function () { let app = null; beforeAll(function () { - process.env.MM_CONFIG_FILE = "tests/configs/env.js"; + process.env.MM_CONFIG_FILE = "tests/configs/default.js"; return helpers .startApplication({ args: ["js/electron.js"] From 179989aa4237b3babc87c727891d20c7611008d3 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Mon, 5 Jul 2021 19:21:39 +0200 Subject: [PATCH 011/134] add missing comments --- tests/configs/default.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/configs/default.js b/tests/configs/default.js index fe066d19..1b7068ad 100644 --- a/tests/configs/default.js +++ b/tests/configs/default.js @@ -1,3 +1,8 @@ +/* Magic Mirror Test default config for modules + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ let config = { port: 8080, ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], @@ -16,6 +21,7 @@ let config = { modules: [] }; +/*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { module.exports = config; } From bbb3accf0c3a1c89b1d7049d238d981ab92e8318 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Mon, 5 Jul 2021 19:45:58 +0200 Subject: [PATCH 012/134] use factory --- tests/configs/modules/alert/default.js | 8 ++++---- tests/configs/modules/calendar/auth-default.js | 8 ++++---- tests/configs/modules/calendar/basic-auth.js | 8 ++++---- tests/configs/modules/calendar/changed-port.js | 8 ++++---- tests/configs/modules/calendar/custom.js | 8 ++++---- tests/configs/modules/calendar/default.js | 8 ++++---- tests/configs/modules/calendar/fail-basic-auth.js | 8 ++++---- tests/configs/modules/calendar/old-basic-auth.js | 8 ++++---- tests/configs/modules/calendar/recurring.js | 8 ++++---- tests/configs/modules/clock/clock_12hr.js | 8 ++++---- tests/configs/modules/clock/clock_24hr.js | 8 ++++---- tests/configs/modules/clock/clock_analog.js | 8 ++++---- .../configs/modules/clock/clock_displaySeconds_false.js | 8 ++++---- tests/configs/modules/clock/clock_showPeriodUpper.js | 8 ++++---- tests/configs/modules/clock/clock_showWeek.js | 8 ++++---- tests/configs/modules/clock/es/clock_12hr.js | 8 ++++---- tests/configs/modules/clock/es/clock_24hr.js | 8 ++++---- tests/configs/modules/clock/es/clock_showPeriodUpper.js | 8 ++++---- tests/configs/modules/clock/es/clock_showWeek.js | 8 ++++---- tests/configs/modules/compliments/compliments_anytime.js | 8 ++++---- tests/configs/modules/compliments/compliments_date.js | 8 ++++---- .../modules/compliments/compliments_only_anytime.js | 8 ++++---- .../configs/modules/compliments/compliments_parts_day.js | 8 ++++---- tests/configs/modules/display.js | 7 ++++--- tests/configs/modules/helloworld/helloworld.js | 8 ++++---- tests/configs/modules/helloworld/helloworld_default.js | 8 ++++---- tests/configs/modules/newsfeed/default.js | 8 ++++---- tests/configs/modules/newsfeed/incorrect_url.js | 8 ++++---- tests/configs/modules/newsfeed/prohibited_words.js | 8 ++++---- tests/configs/modules/positions.js | 8 ++++---- .../modules/weather/currentweather_compliments.js | 8 ++++---- tests/configs/modules/weather/currentweather_default.js | 8 ++++---- tests/configs/modules/weather/currentweather_options.js | 8 ++++---- tests/configs/modules/weather/currentweather_units.js | 8 ++++---- tests/configs/modules/weather/forecastweather_default.js | 8 ++++---- tests/configs/modules/weather/forecastweather_options.js | 8 ++++---- tests/configs/modules/weather/forecastweather_units.js | 8 ++++---- tests/configs/without_modules.js | 9 ++++----- 38 files changed, 152 insertions(+), 152 deletions(-) diff --git a/tests/configs/modules/alert/default.js b/tests/configs/modules/alert/default.js index 0713079b..e43c427d 100644 --- a/tests/configs/modules/alert/default.js +++ b/tests/configs/modules/alert/default.js @@ -3,7 +3,9 @@ * By rejas * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ modules: [ { module: "alert", @@ -13,9 +15,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/calendar/auth-default.js b/tests/configs/modules/calendar/auth-default.js index 0bc6bc78..af1074bf 100644 --- a/tests/configs/modules/calendar/auth-default.js +++ b/tests/configs/modules/calendar/auth-default.js @@ -3,7 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -24,9 +26,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/calendar/basic-auth.js b/tests/configs/modules/calendar/basic-auth.js index 4243a237..23de5d3f 100644 --- a/tests/configs/modules/calendar/basic-auth.js +++ b/tests/configs/modules/calendar/basic-auth.js @@ -3,7 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -25,9 +27,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/calendar/changed-port.js b/tests/configs/modules/calendar/changed-port.js index 02f6d385..e181dbdf 100644 --- a/tests/configs/modules/calendar/changed-port.js +++ b/tests/configs/modules/calendar/changed-port.js @@ -3,7 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -24,9 +26,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/calendar/custom.js b/tests/configs/modules/calendar/custom.js index 7e34bddd..353de3c8 100644 --- a/tests/configs/modules/calendar/custom.js +++ b/tests/configs/modules/calendar/custom.js @@ -3,7 +3,9 @@ * By Rejas * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -24,9 +26,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/calendar/default.js b/tests/configs/modules/calendar/default.js index a532dd8d..5e75513f 100644 --- a/tests/configs/modules/calendar/default.js +++ b/tests/configs/modules/calendar/default.js @@ -3,7 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -20,9 +22,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/calendar/fail-basic-auth.js b/tests/configs/modules/calendar/fail-basic-auth.js index 17427e63..92f36827 100644 --- a/tests/configs/modules/calendar/fail-basic-auth.js +++ b/tests/configs/modules/calendar/fail-basic-auth.js @@ -5,7 +5,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -27,9 +29,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/calendar/old-basic-auth.js b/tests/configs/modules/calendar/old-basic-auth.js index 7ac4f930..5611245d 100644 --- a/tests/configs/modules/calendar/old-basic-auth.js +++ b/tests/configs/modules/calendar/old-basic-auth.js @@ -3,7 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -22,9 +24,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/calendar/recurring.js b/tests/configs/modules/calendar/recurring.js index 04691813..5f3fedc0 100644 --- a/tests/configs/modules/calendar/recurring.js +++ b/tests/configs/modules/calendar/recurring.js @@ -3,7 +3,9 @@ * By Rejas * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -21,9 +23,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/clock_12hr.js b/tests/configs/modules/clock/clock_12hr.js index 016a10a4..3f7ea748 100644 --- a/tests/configs/modules/clock/clock_12hr.js +++ b/tests/configs/modules/clock/clock_12hr.js @@ -3,7 +3,9 @@ * By Sergey Morozov * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -12,9 +14,7 @@ let config = { position: "middle_center" } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/clock_24hr.js b/tests/configs/modules/clock/clock_24hr.js index 899d1e0a..77a0948e 100644 --- a/tests/configs/modules/clock/clock_24hr.js +++ b/tests/configs/modules/clock/clock_24hr.js @@ -3,16 +3,16 @@ * By Sergey Morozov * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ modules: [ { module: "clock", position: "middle_center" } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/clock_analog.js b/tests/configs/modules/clock/clock_analog.js index 54295b4f..c9f13aae 100644 --- a/tests/configs/modules/clock/clock_analog.js +++ b/tests/configs/modules/clock/clock_analog.js @@ -2,7 +2,9 @@ * * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ modules: [ { module: "clock", @@ -13,9 +15,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/clock_displaySeconds_false.js b/tests/configs/modules/clock/clock_displaySeconds_false.js index b39c0322..dd7eee9b 100644 --- a/tests/configs/modules/clock/clock_displaySeconds_false.js +++ b/tests/configs/modules/clock/clock_displaySeconds_false.js @@ -3,7 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -15,9 +17,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/clock_showPeriodUpper.js b/tests/configs/modules/clock/clock_showPeriodUpper.js index a18c5b56..98acafce 100644 --- a/tests/configs/modules/clock/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/clock_showPeriodUpper.js @@ -3,7 +3,9 @@ * By Sergey Morozov * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -15,9 +17,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/clock_showWeek.js b/tests/configs/modules/clock/clock_showWeek.js index 63ba437f..182d5d1e 100644 --- a/tests/configs/modules/clock/clock_showWeek.js +++ b/tests/configs/modules/clock/clock_showWeek.js @@ -3,7 +3,9 @@ * By Johan Hammar * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -15,9 +17,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/es/clock_12hr.js b/tests/configs/modules/clock/es/clock_12hr.js index d1c1d0e5..7313a814 100644 --- a/tests/configs/modules/clock/es/clock_12hr.js +++ b/tests/configs/modules/clock/es/clock_12hr.js @@ -3,7 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../../default.js') + +const config = configFacory({ language: "es", timeFormat: 12, @@ -13,9 +15,7 @@ let config = { position: "middle_center" } ] -}; - -config = Object.assign(require("../../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/es/clock_24hr.js b/tests/configs/modules/clock/es/clock_24hr.js index 41d3e60b..715a47ba 100644 --- a/tests/configs/modules/clock/es/clock_24hr.js +++ b/tests/configs/modules/clock/es/clock_24hr.js @@ -3,7 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../../default.js') + +const config = configFacory({ language: "es", modules: [ @@ -12,9 +14,7 @@ let config = { position: "middle_center" } ] -}; - -config = Object.assign(require("../../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/es/clock_showPeriodUpper.js b/tests/configs/modules/clock/es/clock_showPeriodUpper.js index 6f8fb1d2..2bff573b 100644 --- a/tests/configs/modules/clock/es/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/es/clock_showPeriodUpper.js @@ -3,7 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../../default.js') + +const config = configFacory({ language: "es", timeFormat: 12, @@ -16,9 +18,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/es/clock_showWeek.js b/tests/configs/modules/clock/es/clock_showWeek.js index dc90b1ed..bcb00b49 100644 --- a/tests/configs/modules/clock/es/clock_showWeek.js +++ b/tests/configs/modules/clock/es/clock_showWeek.js @@ -4,7 +4,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../../default.js') + +const config = configFacory({ language: "es", timeFormat: 12, @@ -17,9 +19,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/compliments/compliments_anytime.js b/tests/configs/modules/compliments/compliments_anytime.js index acf5b684..5fb90091 100644 --- a/tests/configs/modules/compliments/compliments_anytime.js +++ b/tests/configs/modules/compliments/compliments_anytime.js @@ -3,7 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -20,9 +22,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/compliments/compliments_date.js b/tests/configs/modules/compliments/compliments_date.js index 38ec2b7c..07ce74fe 100644 --- a/tests/configs/modules/compliments/compliments_date.js +++ b/tests/configs/modules/compliments/compliments_date.js @@ -3,7 +3,9 @@ * By Rejas * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -21,9 +23,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/compliments/compliments_only_anytime.js b/tests/configs/modules/compliments/compliments_only_anytime.js index 47d24fb5..8ff8c76d 100644 --- a/tests/configs/modules/compliments/compliments_only_anytime.js +++ b/tests/configs/modules/compliments/compliments_only_anytime.js @@ -3,7 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -17,9 +19,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/compliments/compliments_parts_day.js b/tests/configs/modules/compliments/compliments_parts_day.js index 2d475c01..c4685ea7 100644 --- a/tests/configs/modules/compliments/compliments_parts_day.js +++ b/tests/configs/modules/compliments/compliments_parts_day.js @@ -3,7 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -19,9 +21,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/display.js b/tests/configs/modules/display.js index 24556659..176c2d2a 100644 --- a/tests/configs/modules/display.js +++ b/tests/configs/modules/display.js @@ -3,7 +3,9 @@ * By Rejas * MIT Licensed. */ -let config = { +const configFactory = require('../default.js') + +let config = configFacory({ modules: [ { module: "helloworld", @@ -21,9 +23,8 @@ let config = { } } ] -}; +}); -config = Object.assign(require("../default.js"), config); config.electronOptions.fullscreen = false; config.electronOptions.width = 800; config.electronOptions.height = 600; diff --git a/tests/configs/modules/helloworld/helloworld.js b/tests/configs/modules/helloworld/helloworld.js index 126cadca..770daf39 100644 --- a/tests/configs/modules/helloworld/helloworld.js +++ b/tests/configs/modules/helloworld/helloworld.js @@ -3,7 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ modules: [ { module: "helloworld", @@ -13,9 +15,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/helloworld/helloworld_default.js b/tests/configs/modules/helloworld/helloworld_default.js index e091c796..cbe15e80 100644 --- a/tests/configs/modules/helloworld/helloworld_default.js +++ b/tests/configs/modules/helloworld/helloworld_default.js @@ -3,16 +3,16 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ modules: [ { module: "helloworld", position: "bottom_bar" } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/newsfeed/default.js b/tests/configs/modules/newsfeed/default.js index 649bbcdd..8faf9b5e 100644 --- a/tests/configs/modules/newsfeed/default.js +++ b/tests/configs/modules/newsfeed/default.js @@ -3,7 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -20,9 +22,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/newsfeed/incorrect_url.js b/tests/configs/modules/newsfeed/incorrect_url.js index 242ad992..c81729e6 100644 --- a/tests/configs/modules/newsfeed/incorrect_url.js +++ b/tests/configs/modules/newsfeed/incorrect_url.js @@ -2,7 +2,9 @@ * * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -19,9 +21,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/newsfeed/prohibited_words.js b/tests/configs/modules/newsfeed/prohibited_words.js index 15ac8dd7..ca567d35 100644 --- a/tests/configs/modules/newsfeed/prohibited_words.js +++ b/tests/configs/modules/newsfeed/prohibited_words.js @@ -2,7 +2,9 @@ * * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -21,9 +23,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/positions.js b/tests/configs/modules/positions.js index d3229532..1794a1fb 100644 --- a/tests/configs/modules/positions.js +++ b/tests/configs/modules/positions.js @@ -3,7 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { +const configFactory = require('../default.js') + +const config = configFacory({ modules: // Using exotic content. This is why don't accept go to JSON configuration file (function () { @@ -20,9 +22,7 @@ let config = { } return modules; })() -}; - -config = Object.assign(require("../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/weather/currentweather_compliments.js b/tests/configs/modules/weather/currentweather_compliments.js index 3b47ea65..fb8929ca 100644 --- a/tests/configs/modules/weather/currentweather_compliments.js +++ b/tests/configs/modules/weather/currentweather_compliments.js @@ -3,7 +3,9 @@ * By rejas https://github.com/rejas * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ modules: [ { module: "compliments", @@ -25,9 +27,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/weather/currentweather_default.js b/tests/configs/modules/weather/currentweather_default.js index 7e9859c7..d753d28f 100644 --- a/tests/configs/modules/weather/currentweather_default.js +++ b/tests/configs/modules/weather/currentweather_default.js @@ -3,7 +3,9 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -17,9 +19,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/weather/currentweather_options.js b/tests/configs/modules/weather/currentweather_options.js index 30f14e3b..7af1a9f3 100644 --- a/tests/configs/modules/weather/currentweather_options.js +++ b/tests/configs/modules/weather/currentweather_options.js @@ -3,7 +3,9 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ modules: [ { module: "weather", @@ -21,9 +23,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/weather/currentweather_units.js b/tests/configs/modules/weather/currentweather_units.js index e6a487a7..77792cb6 100644 --- a/tests/configs/modules/weather/currentweather_units.js +++ b/tests/configs/modules/weather/currentweather_units.js @@ -3,7 +3,9 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ units: "imperial", modules: [ @@ -19,9 +21,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/weather/forecastweather_default.js b/tests/configs/modules/weather/forecastweather_default.js index c9385515..ff9769a9 100644 --- a/tests/configs/modules/weather/forecastweather_default.js +++ b/tests/configs/modules/weather/forecastweather_default.js @@ -3,7 +3,9 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -19,9 +21,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/weather/forecastweather_options.js b/tests/configs/modules/weather/forecastweather_options.js index ad6883e9..9952e9c5 100644 --- a/tests/configs/modules/weather/forecastweather_options.js +++ b/tests/configs/modules/weather/forecastweather_options.js @@ -3,7 +3,9 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ timeFormat: 12, modules: [ @@ -22,9 +24,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/weather/forecastweather_units.js b/tests/configs/modules/weather/forecastweather_units.js index af5c8f09..e17e1a20 100644 --- a/tests/configs/modules/weather/forecastweather_units.js +++ b/tests/configs/modules/weather/forecastweather_units.js @@ -3,7 +3,9 @@ * By rejas * MIT Licensed. */ -let config = { +const configFactory = require('../../default.js') + +const config = configFacory({ units: "imperial", modules: [ @@ -20,9 +22,7 @@ let config = { } } ] -}; - -config = Object.assign(require("../../default.js"), config); +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/without_modules.js b/tests/configs/without_modules.js index 6e199b00..a9eec34a 100644 --- a/tests/configs/without_modules.js +++ b/tests/configs/without_modules.js @@ -3,12 +3,11 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.10.1"] -}; +const configFactory = require('./default.js') -config = Object.assign(require("./default.js"), config); -delete config.modules; +const config = configFacory({ + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.10.1"] +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { From 209e049893aba66f8bbf8c3dfe5cf2e65ce1400d Mon Sep 17 00:00:00 2001 From: karsten13 Date: Mon, 5 Jul 2021 19:51:18 +0200 Subject: [PATCH 013/134] run prettier --- tests/configs/modules/alert/default.js | 2 +- tests/configs/modules/calendar/auth-default.js | 2 +- tests/configs/modules/calendar/basic-auth.js | 2 +- tests/configs/modules/calendar/changed-port.js | 2 +- tests/configs/modules/calendar/custom.js | 2 +- tests/configs/modules/calendar/default.js | 2 +- tests/configs/modules/calendar/fail-basic-auth.js | 2 +- tests/configs/modules/calendar/old-basic-auth.js | 2 +- tests/configs/modules/calendar/recurring.js | 2 +- tests/configs/modules/clock/clock_12hr.js | 2 +- tests/configs/modules/clock/clock_24hr.js | 2 +- tests/configs/modules/clock/clock_analog.js | 2 +- tests/configs/modules/clock/clock_displaySeconds_false.js | 2 +- tests/configs/modules/clock/clock_showPeriodUpper.js | 2 +- tests/configs/modules/clock/clock_showWeek.js | 2 +- tests/configs/modules/clock/es/clock_12hr.js | 2 +- tests/configs/modules/clock/es/clock_24hr.js | 2 +- tests/configs/modules/clock/es/clock_showPeriodUpper.js | 2 +- tests/configs/modules/clock/es/clock_showWeek.js | 2 +- tests/configs/modules/compliments/compliments_anytime.js | 2 +- tests/configs/modules/compliments/compliments_date.js | 2 +- tests/configs/modules/compliments/compliments_only_anytime.js | 2 +- tests/configs/modules/compliments/compliments_parts_day.js | 2 +- tests/configs/modules/display.js | 2 +- tests/configs/modules/helloworld/helloworld.js | 2 +- tests/configs/modules/helloworld/helloworld_default.js | 2 +- tests/configs/modules/newsfeed/default.js | 2 +- tests/configs/modules/newsfeed/incorrect_url.js | 2 +- tests/configs/modules/newsfeed/prohibited_words.js | 2 +- tests/configs/modules/positions.js | 2 +- tests/configs/modules/weather/currentweather_compliments.js | 2 +- tests/configs/modules/weather/currentweather_default.js | 2 +- tests/configs/modules/weather/currentweather_options.js | 2 +- tests/configs/modules/weather/currentweather_units.js | 2 +- tests/configs/modules/weather/forecastweather_default.js | 2 +- tests/configs/modules/weather/forecastweather_options.js | 2 +- tests/configs/modules/weather/forecastweather_units.js | 2 +- tests/configs/without_modules.js | 2 +- 38 files changed, 38 insertions(+), 38 deletions(-) diff --git a/tests/configs/modules/alert/default.js b/tests/configs/modules/alert/default.js index e43c427d..fd1d48bd 100644 --- a/tests/configs/modules/alert/default.js +++ b/tests/configs/modules/alert/default.js @@ -3,7 +3,7 @@ * By rejas * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ modules: [ diff --git a/tests/configs/modules/calendar/auth-default.js b/tests/configs/modules/calendar/auth-default.js index af1074bf..e87e2f99 100644 --- a/tests/configs/modules/calendar/auth-default.js +++ b/tests/configs/modules/calendar/auth-default.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/calendar/basic-auth.js b/tests/configs/modules/calendar/basic-auth.js index 23de5d3f..b62739c0 100644 --- a/tests/configs/modules/calendar/basic-auth.js +++ b/tests/configs/modules/calendar/basic-auth.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/calendar/changed-port.js b/tests/configs/modules/calendar/changed-port.js index e181dbdf..e0c70d75 100644 --- a/tests/configs/modules/calendar/changed-port.js +++ b/tests/configs/modules/calendar/changed-port.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/calendar/custom.js b/tests/configs/modules/calendar/custom.js index 353de3c8..5a289fe0 100644 --- a/tests/configs/modules/calendar/custom.js +++ b/tests/configs/modules/calendar/custom.js @@ -3,7 +3,7 @@ * By Rejas * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/calendar/default.js b/tests/configs/modules/calendar/default.js index 5e75513f..40801e9a 100644 --- a/tests/configs/modules/calendar/default.js +++ b/tests/configs/modules/calendar/default.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/calendar/fail-basic-auth.js b/tests/configs/modules/calendar/fail-basic-auth.js index 92f36827..16bbaa92 100644 --- a/tests/configs/modules/calendar/fail-basic-auth.js +++ b/tests/configs/modules/calendar/fail-basic-auth.js @@ -5,7 +5,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/calendar/old-basic-auth.js b/tests/configs/modules/calendar/old-basic-auth.js index 5611245d..b7688557 100644 --- a/tests/configs/modules/calendar/old-basic-auth.js +++ b/tests/configs/modules/calendar/old-basic-auth.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/calendar/recurring.js b/tests/configs/modules/calendar/recurring.js index 5f3fedc0..6e361081 100644 --- a/tests/configs/modules/calendar/recurring.js +++ b/tests/configs/modules/calendar/recurring.js @@ -3,7 +3,7 @@ * By Rejas * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/clock/clock_12hr.js b/tests/configs/modules/clock/clock_12hr.js index 3f7ea748..3dc815a1 100644 --- a/tests/configs/modules/clock/clock_12hr.js +++ b/tests/configs/modules/clock/clock_12hr.js @@ -3,7 +3,7 @@ * By Sergey Morozov * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/clock/clock_24hr.js b/tests/configs/modules/clock/clock_24hr.js index 77a0948e..7b9c2479 100644 --- a/tests/configs/modules/clock/clock_24hr.js +++ b/tests/configs/modules/clock/clock_24hr.js @@ -3,7 +3,7 @@ * By Sergey Morozov * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ modules: [ diff --git a/tests/configs/modules/clock/clock_analog.js b/tests/configs/modules/clock/clock_analog.js index c9f13aae..34cae41d 100644 --- a/tests/configs/modules/clock/clock_analog.js +++ b/tests/configs/modules/clock/clock_analog.js @@ -2,7 +2,7 @@ * * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ modules: [ diff --git a/tests/configs/modules/clock/clock_displaySeconds_false.js b/tests/configs/modules/clock/clock_displaySeconds_false.js index dd7eee9b..19ebcc99 100644 --- a/tests/configs/modules/clock/clock_displaySeconds_false.js +++ b/tests/configs/modules/clock/clock_displaySeconds_false.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/clock/clock_showPeriodUpper.js b/tests/configs/modules/clock/clock_showPeriodUpper.js index 98acafce..7275c8aa 100644 --- a/tests/configs/modules/clock/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/clock_showPeriodUpper.js @@ -3,7 +3,7 @@ * By Sergey Morozov * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/clock/clock_showWeek.js b/tests/configs/modules/clock/clock_showWeek.js index 182d5d1e..5519d3f7 100644 --- a/tests/configs/modules/clock/clock_showWeek.js +++ b/tests/configs/modules/clock/clock_showWeek.js @@ -3,7 +3,7 @@ * By Johan Hammar * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/clock/es/clock_12hr.js b/tests/configs/modules/clock/es/clock_12hr.js index 7313a814..adf430c0 100644 --- a/tests/configs/modules/clock/es/clock_12hr.js +++ b/tests/configs/modules/clock/es/clock_12hr.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../../default.js') +const configFactory = require("../../../default.js"); const config = configFacory({ language: "es", diff --git a/tests/configs/modules/clock/es/clock_24hr.js b/tests/configs/modules/clock/es/clock_24hr.js index 715a47ba..a5772341 100644 --- a/tests/configs/modules/clock/es/clock_24hr.js +++ b/tests/configs/modules/clock/es/clock_24hr.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../../default.js') +const configFactory = require("../../../default.js"); const config = configFacory({ language: "es", diff --git a/tests/configs/modules/clock/es/clock_showPeriodUpper.js b/tests/configs/modules/clock/es/clock_showPeriodUpper.js index 2bff573b..e432ff91 100644 --- a/tests/configs/modules/clock/es/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/es/clock_showPeriodUpper.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../../default.js') +const configFactory = require("../../../default.js"); const config = configFacory({ language: "es", diff --git a/tests/configs/modules/clock/es/clock_showWeek.js b/tests/configs/modules/clock/es/clock_showWeek.js index bcb00b49..71b16e15 100644 --- a/tests/configs/modules/clock/es/clock_showWeek.js +++ b/tests/configs/modules/clock/es/clock_showWeek.js @@ -4,7 +4,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../../default.js') +const configFactory = require("../../../default.js"); const config = configFacory({ language: "es", diff --git a/tests/configs/modules/compliments/compliments_anytime.js b/tests/configs/modules/compliments/compliments_anytime.js index 5fb90091..7f12efe2 100644 --- a/tests/configs/modules/compliments/compliments_anytime.js +++ b/tests/configs/modules/compliments/compliments_anytime.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/compliments/compliments_date.js b/tests/configs/modules/compliments/compliments_date.js index 07ce74fe..1dfb2512 100644 --- a/tests/configs/modules/compliments/compliments_date.js +++ b/tests/configs/modules/compliments/compliments_date.js @@ -3,7 +3,7 @@ * By Rejas * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/compliments/compliments_only_anytime.js b/tests/configs/modules/compliments/compliments_only_anytime.js index 8ff8c76d..ea1eab13 100644 --- a/tests/configs/modules/compliments/compliments_only_anytime.js +++ b/tests/configs/modules/compliments/compliments_only_anytime.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/compliments/compliments_parts_day.js b/tests/configs/modules/compliments/compliments_parts_day.js index c4685ea7..cf7dfa97 100644 --- a/tests/configs/modules/compliments/compliments_parts_day.js +++ b/tests/configs/modules/compliments/compliments_parts_day.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/display.js b/tests/configs/modules/display.js index 176c2d2a..c7684cd2 100644 --- a/tests/configs/modules/display.js +++ b/tests/configs/modules/display.js @@ -3,7 +3,7 @@ * By Rejas * MIT Licensed. */ -const configFactory = require('../default.js') +const configFactory = require("../default.js"); let config = configFacory({ modules: [ diff --git a/tests/configs/modules/helloworld/helloworld.js b/tests/configs/modules/helloworld/helloworld.js index 770daf39..8525ee62 100644 --- a/tests/configs/modules/helloworld/helloworld.js +++ b/tests/configs/modules/helloworld/helloworld.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ modules: [ diff --git a/tests/configs/modules/helloworld/helloworld_default.js b/tests/configs/modules/helloworld/helloworld_default.js index cbe15e80..7c656fb9 100644 --- a/tests/configs/modules/helloworld/helloworld_default.js +++ b/tests/configs/modules/helloworld/helloworld_default.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ modules: [ diff --git a/tests/configs/modules/newsfeed/default.js b/tests/configs/modules/newsfeed/default.js index 8faf9b5e..958e65f4 100644 --- a/tests/configs/modules/newsfeed/default.js +++ b/tests/configs/modules/newsfeed/default.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/newsfeed/incorrect_url.js b/tests/configs/modules/newsfeed/incorrect_url.js index c81729e6..058a4b6b 100644 --- a/tests/configs/modules/newsfeed/incorrect_url.js +++ b/tests/configs/modules/newsfeed/incorrect_url.js @@ -2,7 +2,7 @@ * * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/newsfeed/prohibited_words.js b/tests/configs/modules/newsfeed/prohibited_words.js index ca567d35..68c69f10 100644 --- a/tests/configs/modules/newsfeed/prohibited_words.js +++ b/tests/configs/modules/newsfeed/prohibited_words.js @@ -2,7 +2,7 @@ * * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/positions.js b/tests/configs/modules/positions.js index 1794a1fb..9a9fd441 100644 --- a/tests/configs/modules/positions.js +++ b/tests/configs/modules/positions.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('../default.js') +const configFactory = require("../default.js"); const config = configFacory({ modules: diff --git a/tests/configs/modules/weather/currentweather_compliments.js b/tests/configs/modules/weather/currentweather_compliments.js index fb8929ca..8a96c6b1 100644 --- a/tests/configs/modules/weather/currentweather_compliments.js +++ b/tests/configs/modules/weather/currentweather_compliments.js @@ -3,7 +3,7 @@ * By rejas https://github.com/rejas * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ modules: [ diff --git a/tests/configs/modules/weather/currentweather_default.js b/tests/configs/modules/weather/currentweather_default.js index d753d28f..02208ec4 100644 --- a/tests/configs/modules/weather/currentweather_default.js +++ b/tests/configs/modules/weather/currentweather_default.js @@ -3,7 +3,7 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/weather/currentweather_options.js b/tests/configs/modules/weather/currentweather_options.js index 7af1a9f3..0bbf32b6 100644 --- a/tests/configs/modules/weather/currentweather_options.js +++ b/tests/configs/modules/weather/currentweather_options.js @@ -3,7 +3,7 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ modules: [ diff --git a/tests/configs/modules/weather/currentweather_units.js b/tests/configs/modules/weather/currentweather_units.js index 77792cb6..236061ef 100644 --- a/tests/configs/modules/weather/currentweather_units.js +++ b/tests/configs/modules/weather/currentweather_units.js @@ -3,7 +3,7 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ units: "imperial", diff --git a/tests/configs/modules/weather/forecastweather_default.js b/tests/configs/modules/weather/forecastweather_default.js index ff9769a9..e3a725d7 100644 --- a/tests/configs/modules/weather/forecastweather_default.js +++ b/tests/configs/modules/weather/forecastweather_default.js @@ -3,7 +3,7 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/weather/forecastweather_options.js b/tests/configs/modules/weather/forecastweather_options.js index 9952e9c5..616ef626 100644 --- a/tests/configs/modules/weather/forecastweather_options.js +++ b/tests/configs/modules/weather/forecastweather_options.js @@ -3,7 +3,7 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ timeFormat: 12, diff --git a/tests/configs/modules/weather/forecastweather_units.js b/tests/configs/modules/weather/forecastweather_units.js index e17e1a20..2a9785cd 100644 --- a/tests/configs/modules/weather/forecastweather_units.js +++ b/tests/configs/modules/weather/forecastweather_units.js @@ -3,7 +3,7 @@ * By rejas * MIT Licensed. */ -const configFactory = require('../../default.js') +const configFactory = require("../../default.js"); const config = configFacory({ units: "imperial", diff --git a/tests/configs/without_modules.js b/tests/configs/without_modules.js index a9eec34a..198f857d 100644 --- a/tests/configs/without_modules.js +++ b/tests/configs/without_modules.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require('./default.js') +const configFactory = require("./default.js"); const config = configFacory({ ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.10.1"] From 50e272efbafd8d761f6ce0e1673bc1b62c97d018 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Mon, 5 Jul 2021 19:54:31 +0200 Subject: [PATCH 014/134] Fix release date. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3583ff7..b2967241 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ This project adheres to [Semantic Versioning](https://semver.org/). ## [2.17.0] - Unreleased (Develop Branch) -_This release is scheduled to be released on 2021-07-01._ +_This release is scheduled to be released on 2021-10-01._ ### Added From 9aa0af4f9c1d57bdac7f2a067d83414fd388de5f Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Mon, 5 Jul 2021 19:57:04 +0200 Subject: [PATCH 015/134] factory again --- tests/configs/default.js | 35 +++++++++---------- tests/configs/empty_ipWhiteList.js | 5 +-- tests/configs/env.js | 11 ++++++ tests/configs/modules/alert/default.js | 4 +-- .../configs/modules/calendar/auth-default.js | 4 +-- tests/configs/modules/calendar/basic-auth.js | 4 +-- .../configs/modules/calendar/changed-port.js | 4 +-- tests/configs/modules/calendar/custom.js | 4 +-- tests/configs/modules/calendar/default.js | 4 +-- .../modules/calendar/fail-basic-auth.js | 4 +-- .../modules/calendar/old-basic-auth.js | 4 +-- tests/configs/modules/calendar/recurring.js | 4 +-- tests/configs/modules/clock/clock_12hr.js | 4 +-- tests/configs/modules/clock/clock_24hr.js | 4 +-- tests/configs/modules/clock/clock_analog.js | 4 +-- .../clock/clock_displaySeconds_false.js | 4 +-- .../modules/clock/clock_showPeriodUpper.js | 4 +-- tests/configs/modules/clock/clock_showWeek.js | 4 +-- tests/configs/modules/clock/es/clock_12hr.js | 4 +-- tests/configs/modules/clock/es/clock_24hr.js | 4 +-- .../modules/clock/es/clock_showPeriodUpper.js | 4 +-- .../modules/clock/es/clock_showWeek.js | 4 +-- .../compliments/compliments_anytime.js | 4 +-- .../modules/compliments/compliments_date.js | 4 +-- .../compliments/compliments_only_anytime.js | 4 +-- .../compliments/compliments_parts_day.js | 4 +-- tests/configs/modules/display.js | 4 +-- .../configs/modules/helloworld/helloworld.js | 4 +-- .../modules/helloworld/helloworld_default.js | 4 +-- tests/configs/modules/newsfeed/default.js | 4 +-- .../configs/modules/newsfeed/incorrect_url.js | 4 +-- .../modules/newsfeed/prohibited_words.js | 4 +-- tests/configs/modules/positions.js | 4 +-- .../weather/currentweather_compliments.js | 4 +-- .../modules/weather/currentweather_default.js | 4 +-- .../modules/weather/currentweather_options.js | 4 +-- .../modules/weather/currentweather_units.js | 4 +-- .../weather/forecastweather_default.js | 4 +-- .../weather/forecastweather_options.js | 4 +-- .../modules/weather/forecastweather_units.js | 4 +-- tests/configs/noIpWhiteList.js | 5 +-- tests/configs/port_8090.js | 5 +-- tests/configs/without_modules.js | 4 +-- tests/e2e/dev_console.js | 2 +- tests/e2e/env_spec.js | 2 +- tests/e2e/vendor_spec.js | 2 +- 46 files changed, 77 insertions(+), 142 deletions(-) create mode 100644 tests/configs/env.js diff --git a/tests/configs/default.js b/tests/configs/default.js index 1b7068ad..030769eb 100644 --- a/tests/configs/default.js +++ b/tests/configs/default.js @@ -3,25 +3,22 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], +exports.configFactory = function (options) { + return Object.assign({ + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", - timeFormat: 24, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } - }, + language: "en", + timeFormat: 24, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + enableRemoteModule: true, + contextIsolation: false + } + }, - modules: [] + modules: [] + }, options); }; - -/*************** DO NOT EDIT THE LINE BELOW ***************/ -if (typeof module !== "undefined") { - module.exports = config; -} diff --git a/tests/configs/empty_ipWhiteList.js b/tests/configs/empty_ipWhiteList.js index 6a0a9e95..e2826e93 100644 --- a/tests/configs/empty_ipWhiteList.js +++ b/tests/configs/empty_ipWhiteList.js @@ -3,8 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require("./default.js"); -config.ipWhitelist = []; +const config = require("./default.js").configFactory({ + ipWhitelist: [] +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/env.js b/tests/configs/env.js new file mode 100644 index 00000000..5673d988 --- /dev/null +++ b/tests/configs/env.js @@ -0,0 +1,11 @@ +/* Magic Mirror Test config sample environment + * + * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com + * MIT Licensed. + */ +const config = require("./default.js").configFactory(); + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/configs/modules/alert/default.js b/tests/configs/modules/alert/default.js index fd1d48bd..423e9462 100644 --- a/tests/configs/modules/alert/default.js +++ b/tests/configs/modules/alert/default.js @@ -3,9 +3,7 @@ * By rejas * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ modules: [ { module: "alert", diff --git a/tests/configs/modules/calendar/auth-default.js b/tests/configs/modules/calendar/auth-default.js index e87e2f99..cad5d51b 100644 --- a/tests/configs/modules/calendar/auth-default.js +++ b/tests/configs/modules/calendar/auth-default.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/calendar/basic-auth.js b/tests/configs/modules/calendar/basic-auth.js index b62739c0..be0e530e 100644 --- a/tests/configs/modules/calendar/basic-auth.js +++ b/tests/configs/modules/calendar/basic-auth.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/calendar/changed-port.js b/tests/configs/modules/calendar/changed-port.js index e0c70d75..022849be 100644 --- a/tests/configs/modules/calendar/changed-port.js +++ b/tests/configs/modules/calendar/changed-port.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/calendar/custom.js b/tests/configs/modules/calendar/custom.js index 5a289fe0..80d9dc5f 100644 --- a/tests/configs/modules/calendar/custom.js +++ b/tests/configs/modules/calendar/custom.js @@ -3,9 +3,7 @@ * By Rejas * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/calendar/default.js b/tests/configs/modules/calendar/default.js index 40801e9a..1a0c6ae7 100644 --- a/tests/configs/modules/calendar/default.js +++ b/tests/configs/modules/calendar/default.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/calendar/fail-basic-auth.js b/tests/configs/modules/calendar/fail-basic-auth.js index 16bbaa92..a1c1bd33 100644 --- a/tests/configs/modules/calendar/fail-basic-auth.js +++ b/tests/configs/modules/calendar/fail-basic-auth.js @@ -5,9 +5,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/calendar/old-basic-auth.js b/tests/configs/modules/calendar/old-basic-auth.js index b7688557..23d06159 100644 --- a/tests/configs/modules/calendar/old-basic-auth.js +++ b/tests/configs/modules/calendar/old-basic-auth.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/calendar/recurring.js b/tests/configs/modules/calendar/recurring.js index 6e361081..935aacaf 100644 --- a/tests/configs/modules/calendar/recurring.js +++ b/tests/configs/modules/calendar/recurring.js @@ -3,9 +3,7 @@ * By Rejas * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/clock/clock_12hr.js b/tests/configs/modules/clock/clock_12hr.js index 3dc815a1..85302aa2 100644 --- a/tests/configs/modules/clock/clock_12hr.js +++ b/tests/configs/modules/clock/clock_12hr.js @@ -3,9 +3,7 @@ * By Sergey Morozov * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/clock/clock_24hr.js b/tests/configs/modules/clock/clock_24hr.js index 7b9c2479..819f1b5b 100644 --- a/tests/configs/modules/clock/clock_24hr.js +++ b/tests/configs/modules/clock/clock_24hr.js @@ -3,9 +3,7 @@ * By Sergey Morozov * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ modules: [ { module: "clock", diff --git a/tests/configs/modules/clock/clock_analog.js b/tests/configs/modules/clock/clock_analog.js index 34cae41d..c5053202 100644 --- a/tests/configs/modules/clock/clock_analog.js +++ b/tests/configs/modules/clock/clock_analog.js @@ -2,9 +2,7 @@ * * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ modules: [ { module: "clock", diff --git a/tests/configs/modules/clock/clock_displaySeconds_false.js b/tests/configs/modules/clock/clock_displaySeconds_false.js index 19ebcc99..86b09185 100644 --- a/tests/configs/modules/clock/clock_displaySeconds_false.js +++ b/tests/configs/modules/clock/clock_displaySeconds_false.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/clock/clock_showPeriodUpper.js b/tests/configs/modules/clock/clock_showPeriodUpper.js index 7275c8aa..ea5179c5 100644 --- a/tests/configs/modules/clock/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/clock_showPeriodUpper.js @@ -3,9 +3,7 @@ * By Sergey Morozov * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/clock/clock_showWeek.js b/tests/configs/modules/clock/clock_showWeek.js index 5519d3f7..81a71cde 100644 --- a/tests/configs/modules/clock/clock_showWeek.js +++ b/tests/configs/modules/clock/clock_showWeek.js @@ -3,9 +3,7 @@ * By Johan Hammar * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/clock/es/clock_12hr.js b/tests/configs/modules/clock/es/clock_12hr.js index adf430c0..c4f5bc68 100644 --- a/tests/configs/modules/clock/es/clock_12hr.js +++ b/tests/configs/modules/clock/es/clock_12hr.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../../default.js"); - -const config = configFacory({ +const config = require("../../../default.js").configFactory({ language: "es", timeFormat: 12, diff --git a/tests/configs/modules/clock/es/clock_24hr.js b/tests/configs/modules/clock/es/clock_24hr.js index a5772341..21ab1559 100644 --- a/tests/configs/modules/clock/es/clock_24hr.js +++ b/tests/configs/modules/clock/es/clock_24hr.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../../default.js"); - -const config = configFacory({ +const config = require("../../../default.js").configFactory({ language: "es", modules: [ diff --git a/tests/configs/modules/clock/es/clock_showPeriodUpper.js b/tests/configs/modules/clock/es/clock_showPeriodUpper.js index e432ff91..804626c3 100644 --- a/tests/configs/modules/clock/es/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/es/clock_showPeriodUpper.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../../default.js"); - -const config = configFacory({ +const config = require("../../../default.js").configFactory({ language: "es", timeFormat: 12, diff --git a/tests/configs/modules/clock/es/clock_showWeek.js b/tests/configs/modules/clock/es/clock_showWeek.js index 71b16e15..c9c03804 100644 --- a/tests/configs/modules/clock/es/clock_showWeek.js +++ b/tests/configs/modules/clock/es/clock_showWeek.js @@ -4,9 +4,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../../default.js"); - -const config = configFacory({ +const config = require("../../../default.js").configFactory({ language: "es", timeFormat: 12, diff --git a/tests/configs/modules/compliments/compliments_anytime.js b/tests/configs/modules/compliments/compliments_anytime.js index 7f12efe2..2b7d479a 100644 --- a/tests/configs/modules/compliments/compliments_anytime.js +++ b/tests/configs/modules/compliments/compliments_anytime.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/compliments/compliments_date.js b/tests/configs/modules/compliments/compliments_date.js index 1dfb2512..287dac3c 100644 --- a/tests/configs/modules/compliments/compliments_date.js +++ b/tests/configs/modules/compliments/compliments_date.js @@ -3,9 +3,7 @@ * By Rejas * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/compliments/compliments_only_anytime.js b/tests/configs/modules/compliments/compliments_only_anytime.js index ea1eab13..d9d4a45a 100644 --- a/tests/configs/modules/compliments/compliments_only_anytime.js +++ b/tests/configs/modules/compliments/compliments_only_anytime.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/compliments/compliments_parts_day.js b/tests/configs/modules/compliments/compliments_parts_day.js index cf7dfa97..198f2ace 100644 --- a/tests/configs/modules/compliments/compliments_parts_day.js +++ b/tests/configs/modules/compliments/compliments_parts_day.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/display.js b/tests/configs/modules/display.js index c7684cd2..02abc72d 100644 --- a/tests/configs/modules/display.js +++ b/tests/configs/modules/display.js @@ -3,9 +3,7 @@ * By Rejas * MIT Licensed. */ -const configFactory = require("../default.js"); - -let config = configFacory({ +let config = require("../default.js").configFactory({ modules: [ { module: "helloworld", diff --git a/tests/configs/modules/helloworld/helloworld.js b/tests/configs/modules/helloworld/helloworld.js index 8525ee62..4713fce9 100644 --- a/tests/configs/modules/helloworld/helloworld.js +++ b/tests/configs/modules/helloworld/helloworld.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ modules: [ { module: "helloworld", diff --git a/tests/configs/modules/helloworld/helloworld_default.js b/tests/configs/modules/helloworld/helloworld_default.js index 7c656fb9..5087a01b 100644 --- a/tests/configs/modules/helloworld/helloworld_default.js +++ b/tests/configs/modules/helloworld/helloworld_default.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ modules: [ { module: "helloworld", diff --git a/tests/configs/modules/newsfeed/default.js b/tests/configs/modules/newsfeed/default.js index 958e65f4..9a469609 100644 --- a/tests/configs/modules/newsfeed/default.js +++ b/tests/configs/modules/newsfeed/default.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/newsfeed/incorrect_url.js b/tests/configs/modules/newsfeed/incorrect_url.js index 058a4b6b..63fc2c4d 100644 --- a/tests/configs/modules/newsfeed/incorrect_url.js +++ b/tests/configs/modules/newsfeed/incorrect_url.js @@ -2,9 +2,7 @@ * * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/newsfeed/prohibited_words.js b/tests/configs/modules/newsfeed/prohibited_words.js index 68c69f10..ef23c047 100644 --- a/tests/configs/modules/newsfeed/prohibited_words.js +++ b/tests/configs/modules/newsfeed/prohibited_words.js @@ -2,9 +2,7 @@ * * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/positions.js b/tests/configs/modules/positions.js index 9a9fd441..d12f1619 100644 --- a/tests/configs/modules/positions.js +++ b/tests/configs/modules/positions.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("../default.js"); - -const config = configFacory({ +const config = require("../default.js").configFactory({ modules: // Using exotic content. This is why don't accept go to JSON configuration file (function () { diff --git a/tests/configs/modules/weather/currentweather_compliments.js b/tests/configs/modules/weather/currentweather_compliments.js index 8a96c6b1..cef5539b 100644 --- a/tests/configs/modules/weather/currentweather_compliments.js +++ b/tests/configs/modules/weather/currentweather_compliments.js @@ -3,9 +3,7 @@ * By rejas https://github.com/rejas * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ modules: [ { module: "compliments", diff --git a/tests/configs/modules/weather/currentweather_default.js b/tests/configs/modules/weather/currentweather_default.js index 02208ec4..66eb4db3 100644 --- a/tests/configs/modules/weather/currentweather_default.js +++ b/tests/configs/modules/weather/currentweather_default.js @@ -3,9 +3,7 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/weather/currentweather_options.js b/tests/configs/modules/weather/currentweather_options.js index 0bbf32b6..c9d18f83 100644 --- a/tests/configs/modules/weather/currentweather_options.js +++ b/tests/configs/modules/weather/currentweather_options.js @@ -3,9 +3,7 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ modules: [ { module: "weather", diff --git a/tests/configs/modules/weather/currentweather_units.js b/tests/configs/modules/weather/currentweather_units.js index 236061ef..1dade633 100644 --- a/tests/configs/modules/weather/currentweather_units.js +++ b/tests/configs/modules/weather/currentweather_units.js @@ -3,9 +3,7 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ units: "imperial", modules: [ diff --git a/tests/configs/modules/weather/forecastweather_default.js b/tests/configs/modules/weather/forecastweather_default.js index e3a725d7..eac9dd0c 100644 --- a/tests/configs/modules/weather/forecastweather_default.js +++ b/tests/configs/modules/weather/forecastweather_default.js @@ -3,9 +3,7 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/weather/forecastweather_options.js b/tests/configs/modules/weather/forecastweather_options.js index 616ef626..0a1daa00 100644 --- a/tests/configs/modules/weather/forecastweather_options.js +++ b/tests/configs/modules/weather/forecastweather_options.js @@ -3,9 +3,7 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/weather/forecastweather_units.js b/tests/configs/modules/weather/forecastweather_units.js index 2a9785cd..6ff79d98 100644 --- a/tests/configs/modules/weather/forecastweather_units.js +++ b/tests/configs/modules/weather/forecastweather_units.js @@ -3,9 +3,7 @@ * By rejas * MIT Licensed. */ -const configFactory = require("../../default.js"); - -const config = configFacory({ +const config = require("../../default.js").configFactory({ units: "imperial", modules: [ diff --git a/tests/configs/noIpWhiteList.js b/tests/configs/noIpWhiteList.js index f9d3698e..3f515a6e 100644 --- a/tests/configs/noIpWhiteList.js +++ b/tests/configs/noIpWhiteList.js @@ -3,8 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require("./default.js"); -config.ipWhitelist = ["x.x.x.x"]; +const config = require("./default.js").configFactory({ + ipWhitelist: ["x.x.x.x"] +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/port_8090.js b/tests/configs/port_8090.js index 400a54e1..f7aaacac 100644 --- a/tests/configs/port_8090.js +++ b/tests/configs/port_8090.js @@ -3,8 +3,9 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require("./default.js"); -config.port = 8090; +const config = require("./default.js").configFactory({ + port: 8090 +}); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/without_modules.js b/tests/configs/without_modules.js index 198f857d..f531d137 100644 --- a/tests/configs/without_modules.js +++ b/tests/configs/without_modules.js @@ -3,9 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const configFactory = require("./default.js"); - -const config = configFacory({ +const config = require("./default.js").configFactory({ ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.10.1"] }); diff --git a/tests/e2e/dev_console.js b/tests/e2e/dev_console.js index 06470645..2a607e5b 100644 --- a/tests/e2e/dev_console.js +++ b/tests/e2e/dev_console.js @@ -7,7 +7,7 @@ describe("Development console tests", function () { beforeAll(function () { // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/default.js"; + process.env.MM_CONFIG_FILE = "tests/configs/env.js"; }); describe("Without 'dev' commandline argument", function () { diff --git a/tests/e2e/env_spec.js b/tests/e2e/env_spec.js index 77605b4a..706274a2 100644 --- a/tests/e2e/env_spec.js +++ b/tests/e2e/env_spec.js @@ -8,7 +8,7 @@ describe("Electron app environment", function () { beforeAll(function () { // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/default.js"; + process.env.MM_CONFIG_FILE = "tests/configs/env.js"; }); beforeEach(function () { diff --git a/tests/e2e/vendor_spec.js b/tests/e2e/vendor_spec.js index 3c97515d..b5289c2f 100644 --- a/tests/e2e/vendor_spec.js +++ b/tests/e2e/vendor_spec.js @@ -10,7 +10,7 @@ describe("Vendors", function () { let app = null; beforeAll(function () { - process.env.MM_CONFIG_FILE = "tests/configs/default.js"; + process.env.MM_CONFIG_FILE = "tests/configs/env.js"; return helpers .startApplication({ args: ["js/electron.js"] From e75e4e228413f7c030aa7804064bafac78fc0bcd Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Tue, 13 Jul 2021 23:39:55 +0200 Subject: [PATCH 016/134] use process.cwd() for correct path --- tests/configs/default.js | 33 ++++++++++--------- tests/configs/empty_ipWhiteList.js | 2 +- tests/configs/env.js | 2 +- tests/configs/modules/alert/default.js | 2 +- .../configs/modules/calendar/auth-default.js | 2 +- tests/configs/modules/calendar/basic-auth.js | 2 +- .../configs/modules/calendar/changed-port.js | 2 +- tests/configs/modules/calendar/custom.js | 2 +- tests/configs/modules/calendar/default.js | 2 +- .../modules/calendar/fail-basic-auth.js | 2 +- .../modules/calendar/old-basic-auth.js | 2 +- tests/configs/modules/calendar/recurring.js | 2 +- tests/configs/modules/clock/clock_12hr.js | 2 +- tests/configs/modules/clock/clock_24hr.js | 2 +- tests/configs/modules/clock/clock_analog.js | 2 +- .../clock/clock_displaySeconds_false.js | 2 +- .../modules/clock/clock_showPeriodUpper.js | 2 +- tests/configs/modules/clock/clock_showWeek.js | 2 +- tests/configs/modules/clock/es/clock_12hr.js | 2 +- tests/configs/modules/clock/es/clock_24hr.js | 2 +- .../modules/clock/es/clock_showPeriodUpper.js | 2 +- .../modules/clock/es/clock_showWeek.js | 2 +- .../compliments/compliments_anytime.js | 2 +- .../modules/compliments/compliments_date.js | 2 +- .../compliments/compliments_only_anytime.js | 2 +- .../compliments/compliments_parts_day.js | 2 +- tests/configs/modules/display.js | 2 +- .../configs/modules/helloworld/helloworld.js | 2 +- .../modules/helloworld/helloworld_default.js | 2 +- tests/configs/modules/newsfeed/default.js | 2 +- .../configs/modules/newsfeed/incorrect_url.js | 2 +- .../modules/newsfeed/prohibited_words.js | 2 +- tests/configs/modules/positions.js | 2 +- .../weather/currentweather_compliments.js | 2 +- .../modules/weather/currentweather_default.js | 2 +- .../modules/weather/currentweather_options.js | 2 +- .../modules/weather/currentweather_units.js | 2 +- .../weather/forecastweather_default.js | 2 +- .../weather/forecastweather_options.js | 2 +- .../modules/weather/forecastweather_units.js | 2 +- tests/configs/noIpWhiteList.js | 2 +- tests/configs/port_8090.js | 2 +- tests/configs/without_modules.js | 3 +- 43 files changed, 61 insertions(+), 57 deletions(-) diff --git a/tests/configs/default.js b/tests/configs/default.js index 030769eb..e3236318 100644 --- a/tests/configs/default.js +++ b/tests/configs/default.js @@ -4,21 +4,24 @@ * MIT Licensed. */ exports.configFactory = function (options) { - return Object.assign({ - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + return Object.assign( + { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", - timeFormat: 24, - units: "metric", - electronOptions: { - webPreferences: { - nodeIntegration: true, - enableRemoteModule: true, - contextIsolation: false - } + language: "en", + timeFormat: 24, + units: "metric", + electronOptions: { + webPreferences: { + nodeIntegration: true, + enableRemoteModule: true, + contextIsolation: false + } + }, + + modules: [] }, - - modules: [] - }, options); + options + ); }; diff --git a/tests/configs/empty_ipWhiteList.js b/tests/configs/empty_ipWhiteList.js index e2826e93..cdf637c5 100644 --- a/tests/configs/empty_ipWhiteList.js +++ b/tests/configs/empty_ipWhiteList.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("./default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ ipWhitelist: [] }); diff --git a/tests/configs/env.js b/tests/configs/env.js index 5673d988..a2d81f67 100644 --- a/tests/configs/env.js +++ b/tests/configs/env.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("./default.js").configFactory(); +let config = require(process.cwd() + "/tests/configs/default.js").configFactory(); /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/alert/default.js b/tests/configs/modules/alert/default.js index 423e9462..b75a41f8 100644 --- a/tests/configs/modules/alert/default.js +++ b/tests/configs/modules/alert/default.js @@ -3,7 +3,7 @@ * By rejas * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ modules: [ { module: "alert", diff --git a/tests/configs/modules/calendar/auth-default.js b/tests/configs/modules/calendar/auth-default.js index cad5d51b..8375bfcd 100644 --- a/tests/configs/modules/calendar/auth-default.js +++ b/tests/configs/modules/calendar/auth-default.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/calendar/basic-auth.js b/tests/configs/modules/calendar/basic-auth.js index be0e530e..a1150281 100644 --- a/tests/configs/modules/calendar/basic-auth.js +++ b/tests/configs/modules/calendar/basic-auth.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/calendar/changed-port.js b/tests/configs/modules/calendar/changed-port.js index 022849be..e43feafa 100644 --- a/tests/configs/modules/calendar/changed-port.js +++ b/tests/configs/modules/calendar/changed-port.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/calendar/custom.js b/tests/configs/modules/calendar/custom.js index 80d9dc5f..16f82ea0 100644 --- a/tests/configs/modules/calendar/custom.js +++ b/tests/configs/modules/calendar/custom.js @@ -3,7 +3,7 @@ * By Rejas * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/calendar/default.js b/tests/configs/modules/calendar/default.js index 1a0c6ae7..5964b294 100644 --- a/tests/configs/modules/calendar/default.js +++ b/tests/configs/modules/calendar/default.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/calendar/fail-basic-auth.js b/tests/configs/modules/calendar/fail-basic-auth.js index a1c1bd33..54d04064 100644 --- a/tests/configs/modules/calendar/fail-basic-auth.js +++ b/tests/configs/modules/calendar/fail-basic-auth.js @@ -5,7 +5,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/calendar/old-basic-auth.js b/tests/configs/modules/calendar/old-basic-auth.js index 23d06159..06570eb1 100644 --- a/tests/configs/modules/calendar/old-basic-auth.js +++ b/tests/configs/modules/calendar/old-basic-auth.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/calendar/recurring.js b/tests/configs/modules/calendar/recurring.js index 935aacaf..879b966e 100644 --- a/tests/configs/modules/calendar/recurring.js +++ b/tests/configs/modules/calendar/recurring.js @@ -3,7 +3,7 @@ * By Rejas * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/clock/clock_12hr.js b/tests/configs/modules/clock/clock_12hr.js index 85302aa2..35b45914 100644 --- a/tests/configs/modules/clock/clock_12hr.js +++ b/tests/configs/modules/clock/clock_12hr.js @@ -3,7 +3,7 @@ * By Sergey Morozov * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/clock/clock_24hr.js b/tests/configs/modules/clock/clock_24hr.js index 819f1b5b..01b2a36b 100644 --- a/tests/configs/modules/clock/clock_24hr.js +++ b/tests/configs/modules/clock/clock_24hr.js @@ -3,7 +3,7 @@ * By Sergey Morozov * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ modules: [ { module: "clock", diff --git a/tests/configs/modules/clock/clock_analog.js b/tests/configs/modules/clock/clock_analog.js index c5053202..b33bd051 100644 --- a/tests/configs/modules/clock/clock_analog.js +++ b/tests/configs/modules/clock/clock_analog.js @@ -2,7 +2,7 @@ * * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ modules: [ { module: "clock", diff --git a/tests/configs/modules/clock/clock_displaySeconds_false.js b/tests/configs/modules/clock/clock_displaySeconds_false.js index 86b09185..1caef7e3 100644 --- a/tests/configs/modules/clock/clock_displaySeconds_false.js +++ b/tests/configs/modules/clock/clock_displaySeconds_false.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/clock/clock_showPeriodUpper.js b/tests/configs/modules/clock/clock_showPeriodUpper.js index ea5179c5..b069c438 100644 --- a/tests/configs/modules/clock/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/clock_showPeriodUpper.js @@ -3,7 +3,7 @@ * By Sergey Morozov * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/clock/clock_showWeek.js b/tests/configs/modules/clock/clock_showWeek.js index 81a71cde..b595ba70 100644 --- a/tests/configs/modules/clock/clock_showWeek.js +++ b/tests/configs/modules/clock/clock_showWeek.js @@ -3,7 +3,7 @@ * By Johan Hammar * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/clock/es/clock_12hr.js b/tests/configs/modules/clock/es/clock_12hr.js index c4f5bc68..addbeb9f 100644 --- a/tests/configs/modules/clock/es/clock_12hr.js +++ b/tests/configs/modules/clock/es/clock_12hr.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ language: "es", timeFormat: 12, diff --git a/tests/configs/modules/clock/es/clock_24hr.js b/tests/configs/modules/clock/es/clock_24hr.js index 21ab1559..a5fe49ca 100644 --- a/tests/configs/modules/clock/es/clock_24hr.js +++ b/tests/configs/modules/clock/es/clock_24hr.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ language: "es", modules: [ diff --git a/tests/configs/modules/clock/es/clock_showPeriodUpper.js b/tests/configs/modules/clock/es/clock_showPeriodUpper.js index 804626c3..4a5ab636 100644 --- a/tests/configs/modules/clock/es/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/es/clock_showPeriodUpper.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ language: "es", timeFormat: 12, diff --git a/tests/configs/modules/clock/es/clock_showWeek.js b/tests/configs/modules/clock/es/clock_showWeek.js index c9c03804..b4a436a6 100644 --- a/tests/configs/modules/clock/es/clock_showWeek.js +++ b/tests/configs/modules/clock/es/clock_showWeek.js @@ -4,7 +4,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ language: "es", timeFormat: 12, diff --git a/tests/configs/modules/compliments/compliments_anytime.js b/tests/configs/modules/compliments/compliments_anytime.js index 2b7d479a..f6731edf 100644 --- a/tests/configs/modules/compliments/compliments_anytime.js +++ b/tests/configs/modules/compliments/compliments_anytime.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/compliments/compliments_date.js b/tests/configs/modules/compliments/compliments_date.js index 287dac3c..c9549816 100644 --- a/tests/configs/modules/compliments/compliments_date.js +++ b/tests/configs/modules/compliments/compliments_date.js @@ -3,7 +3,7 @@ * By Rejas * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/compliments/compliments_only_anytime.js b/tests/configs/modules/compliments/compliments_only_anytime.js index d9d4a45a..d65bc67d 100644 --- a/tests/configs/modules/compliments/compliments_only_anytime.js +++ b/tests/configs/modules/compliments/compliments_only_anytime.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/compliments/compliments_parts_day.js b/tests/configs/modules/compliments/compliments_parts_day.js index 198f2ace..e490a710 100644 --- a/tests/configs/modules/compliments/compliments_parts_day.js +++ b/tests/configs/modules/compliments/compliments_parts_day.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/display.js b/tests/configs/modules/display.js index 02abc72d..070dc9e5 100644 --- a/tests/configs/modules/display.js +++ b/tests/configs/modules/display.js @@ -3,7 +3,7 @@ * By Rejas * MIT Licensed. */ -let config = require("../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ modules: [ { module: "helloworld", diff --git a/tests/configs/modules/helloworld/helloworld.js b/tests/configs/modules/helloworld/helloworld.js index 4713fce9..9845e4b8 100644 --- a/tests/configs/modules/helloworld/helloworld.js +++ b/tests/configs/modules/helloworld/helloworld.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ modules: [ { module: "helloworld", diff --git a/tests/configs/modules/helloworld/helloworld_default.js b/tests/configs/modules/helloworld/helloworld_default.js index 5087a01b..6400c9f7 100644 --- a/tests/configs/modules/helloworld/helloworld_default.js +++ b/tests/configs/modules/helloworld/helloworld_default.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ modules: [ { module: "helloworld", diff --git a/tests/configs/modules/newsfeed/default.js b/tests/configs/modules/newsfeed/default.js index 9a469609..1a112566 100644 --- a/tests/configs/modules/newsfeed/default.js +++ b/tests/configs/modules/newsfeed/default.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/newsfeed/incorrect_url.js b/tests/configs/modules/newsfeed/incorrect_url.js index 63fc2c4d..ab126aa4 100644 --- a/tests/configs/modules/newsfeed/incorrect_url.js +++ b/tests/configs/modules/newsfeed/incorrect_url.js @@ -2,7 +2,7 @@ * * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/newsfeed/prohibited_words.js b/tests/configs/modules/newsfeed/prohibited_words.js index ef23c047..f4040557 100644 --- a/tests/configs/modules/newsfeed/prohibited_words.js +++ b/tests/configs/modules/newsfeed/prohibited_words.js @@ -2,7 +2,7 @@ * * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/positions.js b/tests/configs/modules/positions.js index d12f1619..479775c8 100644 --- a/tests/configs/modules/positions.js +++ b/tests/configs/modules/positions.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ modules: // Using exotic content. This is why don't accept go to JSON configuration file (function () { diff --git a/tests/configs/modules/weather/currentweather_compliments.js b/tests/configs/modules/weather/currentweather_compliments.js index cef5539b..35d5ffb5 100644 --- a/tests/configs/modules/weather/currentweather_compliments.js +++ b/tests/configs/modules/weather/currentweather_compliments.js @@ -3,7 +3,7 @@ * By rejas https://github.com/rejas * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ modules: [ { module: "compliments", diff --git a/tests/configs/modules/weather/currentweather_default.js b/tests/configs/modules/weather/currentweather_default.js index 66eb4db3..5c7edd5c 100644 --- a/tests/configs/modules/weather/currentweather_default.js +++ b/tests/configs/modules/weather/currentweather_default.js @@ -3,7 +3,7 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/weather/currentweather_options.js b/tests/configs/modules/weather/currentweather_options.js index c9d18f83..f3ff9d5d 100644 --- a/tests/configs/modules/weather/currentweather_options.js +++ b/tests/configs/modules/weather/currentweather_options.js @@ -3,7 +3,7 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ modules: [ { module: "weather", diff --git a/tests/configs/modules/weather/currentweather_units.js b/tests/configs/modules/weather/currentweather_units.js index 1dade633..af73d058 100644 --- a/tests/configs/modules/weather/currentweather_units.js +++ b/tests/configs/modules/weather/currentweather_units.js @@ -3,7 +3,7 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ units: "imperial", modules: [ diff --git a/tests/configs/modules/weather/forecastweather_default.js b/tests/configs/modules/weather/forecastweather_default.js index eac9dd0c..f4b401f6 100644 --- a/tests/configs/modules/weather/forecastweather_default.js +++ b/tests/configs/modules/weather/forecastweather_default.js @@ -3,7 +3,7 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/weather/forecastweather_options.js b/tests/configs/modules/weather/forecastweather_options.js index 0a1daa00..094d9a00 100644 --- a/tests/configs/modules/weather/forecastweather_options.js +++ b/tests/configs/modules/weather/forecastweather_options.js @@ -3,7 +3,7 @@ * By fewieden https://github.com/fewieden * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ timeFormat: 12, modules: [ diff --git a/tests/configs/modules/weather/forecastweather_units.js b/tests/configs/modules/weather/forecastweather_units.js index 6ff79d98..843f874b 100644 --- a/tests/configs/modules/weather/forecastweather_units.js +++ b/tests/configs/modules/weather/forecastweather_units.js @@ -3,7 +3,7 @@ * By rejas * MIT Licensed. */ -const config = require("../../default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ units: "imperial", modules: [ diff --git a/tests/configs/noIpWhiteList.js b/tests/configs/noIpWhiteList.js index 3f515a6e..40655480 100644 --- a/tests/configs/noIpWhiteList.js +++ b/tests/configs/noIpWhiteList.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("./default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ ipWhitelist: ["x.x.x.x"] }); diff --git a/tests/configs/port_8090.js b/tests/configs/port_8090.js index f7aaacac..7756fb76 100644 --- a/tests/configs/port_8090.js +++ b/tests/configs/port_8090.js @@ -3,7 +3,7 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("./default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ port: 8090 }); diff --git a/tests/configs/without_modules.js b/tests/configs/without_modules.js index f531d137..02b767c0 100644 --- a/tests/configs/without_modules.js +++ b/tests/configs/without_modules.js @@ -3,9 +3,10 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -const config = require("./default.js").configFactory({ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.10.1"] }); +delete config.modules; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { From af5d132410f6a5e912f143205836b26558c3d4f4 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 25 Apr 2021 22:11:51 +0200 Subject: [PATCH 017/134] Rename global version variable --- index.html | 2 +- js/module.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index c9f2239c..37fc2f6e 100644 --- a/index.html +++ b/index.html @@ -16,7 +16,7 @@ diff --git a/js/module.js b/js/module.js index b754e197..4c454558 100644 --- a/js/module.js +++ b/js/module.js @@ -498,8 +498,8 @@ Module.create = function (name) { Module.register = function (name, moduleDefinition) { if (moduleDefinition.requiresVersion) { - Log.log("Check MagicMirror version for module '" + name + "' - Minimum version: " + moduleDefinition.requiresVersion + " - Current version: " + window.version); - if (cmpVersions(window.version, moduleDefinition.requiresVersion) >= 0) { + Log.log("Check MagicMirror version for module '" + name + "' - Minimum version: " + moduleDefinition.requiresVersion + " - Current version: " + window.mmVersion); + if (cmpVersions(window.mmVersion, moduleDefinition.requiresVersion) >= 0) { Log.log("Version is ok!"); } else { Log.warn("Version is incorrect. Skip module: '" + name + "'"); From 099929c677d0cfea1f2a9e826fbe8cf8af4743d6 Mon Sep 17 00:00:00 2001 From: veeck Date: Wed, 30 Jun 2021 15:12:30 +0200 Subject: [PATCH 018/134] Actually test all js and css files when lint script is run --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 571a64c9..2857d967 100644 --- a/package.json +++ b/package.json @@ -15,13 +15,13 @@ "test:e2e": "NODE_ENV=test jest --selectProjects e2e -i --forceExit", "test:unit": "NODE_ENV=test jest --selectProjects unit -i --forceExit", "test:prettier": "prettier . --check", - "test:js": "eslint js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json --quiet", - "test:css": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json", + "test:js": "eslint 'js/**/*.js' 'modules/default/**/*.js' 'clientonly/*.js' 'serveronly/*.js' 'translations/*.js' 'vendor/*.js' 'tests/**/*.js' 'config/*' --config .eslintrc.json --quiet", + "test:css": "stylelint 'css/main.css' 'modules/default/**/*.css' --config .stylelintrc.json", "test:calendar": "node ./modules/default/calendar/debug.js", "config:check": "node js/check_config.js", "lint:prettier": "prettier . --write", - "lint:js": "eslint js/**/*.js modules/default/**/*.js clientonly/*.js serveronly/*.js translations/*.js vendor/*.js tests/**/*.js config/* --config .eslintrc.json --fix", - "lint:css": "stylelint css/main.css modules/default/**/*.css --config .stylelintrc.json --fix", + "lint:js": "eslint 'js/**/*.js' 'modules/default/**/*.js' 'clientonly/*.js' 'serveronly/*.js' 'translations/*.js' 'vendor/*.js' 'tests/**/*.js' 'config/*' --config .eslintrc.json --fix", + "lint:css": "stylelint 'css/main.css' 'modules/default/**/*.css' --config .stylelintrc.json --fix", "lint:staged": "pretty-quick --staged", "prepare": "[ -f node_modules/.bin/husky ] && husky install || echo no husky installed." }, From 39aa2dfe01982a2ce22977892dced46edfc58526 Mon Sep 17 00:00:00 2001 From: veeck Date: Wed, 30 Jun 2021 15:13:15 +0200 Subject: [PATCH 019/134] Run linter over all files again --- tests/e2e/modules/mocks/weather_current.js | 3 +++ tests/e2e/modules/mocks/weather_forecast.js | 3 +++ tests/e2e/modules/weather_spec.js | 10 ++++++++++ tests/unit/classes/translator_spec.js | 3 +++ 4 files changed, 19 insertions(+) diff --git a/tests/e2e/modules/mocks/weather_current.js b/tests/e2e/modules/mocks/weather_current.js index a0c3401d..3988212c 100644 --- a/tests/e2e/modules/mocks/weather_current.js +++ b/tests/e2e/modules/mocks/weather_current.js @@ -1,5 +1,8 @@ const _ = require("lodash"); +/** + * @param extendedData + */ function generateWeather(extendedData = {}) { return JSON.stringify( _.merge( diff --git a/tests/e2e/modules/mocks/weather_forecast.js b/tests/e2e/modules/mocks/weather_forecast.js index eaf2e375..7943e073 100644 --- a/tests/e2e/modules/mocks/weather_forecast.js +++ b/tests/e2e/modules/mocks/weather_forecast.js @@ -1,5 +1,8 @@ const _ = require("lodash"); +/** + * @param extendedData + */ function generateWeatherForecast(extendedData = {}) { return JSON.stringify( _.merge( diff --git a/tests/e2e/modules/weather_spec.js b/tests/e2e/modules/weather_spec.js index 5698dc6a..a9bf2cb8 100644 --- a/tests/e2e/modules/weather_spec.js +++ b/tests/e2e/modules/weather_spec.js @@ -12,6 +12,9 @@ describe("Weather module", function () { helpers.setupTimeout(this); + /** + * @param responses + */ async function setup(responses) { app = await helpers.startApplication({ args: ["js/electron.js"], @@ -23,10 +26,17 @@ describe("Weather module", function () { app.client.setupStub(); } + /** + * @param element + */ async function getElement(element) { return await app.client.$(element); } + /** + * @param element + * @param result + */ async function getText(element, result) { const elem = await getElement(element); return await elem.getText(element).then(function (text) { diff --git a/tests/unit/classes/translator_spec.js b/tests/unit/classes/translator_spec.js index fe942753..2756b41b 100644 --- a/tests/unit/classes/translator_spec.js +++ b/tests/unit/classes/translator_spec.js @@ -67,6 +67,9 @@ describe("Translator", function () { Fallback: "core fallback" }; + /** + * @param Translator + */ function setTranslations(Translator) { Translator.translations = translations; Translator.coreTranslations = coreTranslations; From 2e44e1626d7379486658410c8d167a1a5f2ee607 Mon Sep 17 00:00:00 2001 From: veeck Date: Wed, 30 Jun 2021 15:22:24 +0200 Subject: [PATCH 020/134] Remove unused variables --- tests/e2e/vendor_spec.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/e2e/vendor_spec.js b/tests/e2e/vendor_spec.js index b5289c2f..9fcb9aeb 100644 --- a/tests/e2e/vendor_spec.js +++ b/tests/e2e/vendor_spec.js @@ -1,9 +1,6 @@ const helpers = require("./global-setup"); const fetch = require("node-fetch"); -const before = global.before; -const after = global.after; - describe("Vendors", function () { helpers.setupTimeout(this); @@ -26,6 +23,7 @@ describe("Vendors", function () { describe("Get list vendors", function () { const vendors = require(__dirname + "/../../vendor/vendor.js"); + Object.keys(vendors).forEach((vendor) => { it(`should return 200 HTTP code for vendor "${vendor}"`, function (done) { const urlVendor = "http://localhost:8080/vendor/" + vendors[vendor]; From 399dca2ef928761a9c94c16ba1849fd839532c46 Mon Sep 17 00:00:00 2001 From: veeck Date: Wed, 30 Jun 2021 15:26:03 +0200 Subject: [PATCH 021/134] Make eslint complain about var usage --- .eslintrc.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.json b/.eslintrc.json index 3e685a0d..0905057c 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -25,6 +25,7 @@ "prettier/prettier": "error", "eqeqeq": "error", "no-prototype-builtins": "off", + "no-var": "error", "no-unused-vars": "off" } } From a1e3fed312a003570b7cf8c0346739890d5d31f8 Mon Sep 17 00:00:00 2001 From: veeck Date: Wed, 30 Jun 2021 15:39:10 +0200 Subject: [PATCH 022/134] Disable eslint checks in deprecated weather modules --- modules/default/currentweather/currentweather.js | 2 ++ modules/default/weatherforecast/weatherforecast.js | 2 ++ 2 files changed, 4 insertions(+) diff --git a/modules/default/currentweather/currentweather.js b/modules/default/currentweather/currentweather.js index 0d22b40a..5a00fb99 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -1,3 +1,5 @@ +/* eslint-disable */ + /* Magic Mirror * Module: CurrentWeather * diff --git a/modules/default/weatherforecast/weatherforecast.js b/modules/default/weatherforecast/weatherforecast.js index 50229262..50c1f3a7 100644 --- a/modules/default/weatherforecast/weatherforecast.js +++ b/modules/default/weatherforecast/weatherforecast.js @@ -1,3 +1,5 @@ +/* eslint-disable */ + /* Magic Mirror * Module: WeatherForecast * From bcc0cc599d65edc21f0de1d5da26d6fff32c48e9 Mon Sep 17 00:00:00 2001 From: veeck Date: Wed, 30 Jun 2021 15:53:51 +0200 Subject: [PATCH 023/134] Fix == usages --- modules/default/weather/providers/smhi.js | 4 ++-- modules/default/weather/providers/ukmetofficedatahub.js | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/default/weather/providers/smhi.js b/modules/default/weather/providers/smhi.js index efcf8bb0..1512b067 100644 --- a/modules/default/weather/providers/smhi.js +++ b/modules/default/weather/providers/smhi.js @@ -60,7 +60,7 @@ WeatherProvider.register("smhi", { */ setConfig(config) { this.config = config; - if (!config.precipitationValue || ["pmin", "pmean", "pmedian", "pmax"].indexOf(config.precipitationValue) == -1) { + if (!config.precipitationValue || ["pmin", "pmean", "pmedian", "pmax"].indexOf(config.precipitationValue) === -1) { console.log("invalid or not set: " + config.precipitationValue); config.precipitationValue = this.defaults.precipitationValue; } @@ -240,7 +240,7 @@ WeatherProvider.register("smhi", { * @param name */ paramValue(currentWeatherData, name) { - return currentWeatherData.parameters.filter((p) => p.name == name).flatMap((p) => p.values)[0]; + return currentWeatherData.parameters.filter((p) => p.name === name).flatMap((p) => p.values)[0]; }, /** diff --git a/modules/default/weather/providers/ukmetofficedatahub.js b/modules/default/weather/providers/ukmetofficedatahub.js index d096c33b..41e84880 100644 --- a/modules/default/weather/providers/ukmetofficedatahub.js +++ b/modules/default/weather/providers/ukmetofficedatahub.js @@ -91,7 +91,7 @@ WeatherProvider.register("ukmetofficedatahub", { this.fetchWeather(this.getUrl("hourly"), this.getHeaders()) .then((data) => { // Check data is useable - if (!data || !data.features || !data.features[0].properties || !data.features[0].properties.timeSeries || data.features[0].properties.timeSeries.length == 0) { + if (!data || !data.features || !data.features[0].properties || !data.features[0].properties.timeSeries || data.features[0].properties.timeSeries.length === 0) { // Did not receive usable new data. // Maybe this needs a better check? Log.error("Possibly bad current/hourly data?"); @@ -162,7 +162,7 @@ WeatherProvider.register("ukmetofficedatahub", { this.fetchWeather(this.getUrl("daily"), this.getHeaders()) .then((data) => { // Check data is useable - if (!data || !data.features || !data.features[0].properties || !data.features[0].properties.timeSeries || data.features[0].properties.timeSeries.length == 0) { + if (!data || !data.features || !data.features[0].properties || !data.features[0].properties.timeSeries || data.features[0].properties.timeSeries.length === 0) { // Did not receive usable new data. // Maybe this needs a better check? Log.error("Possibly bad forecast data?"); @@ -258,11 +258,11 @@ WeatherProvider.register("ukmetofficedatahub", { // To use kilometres per hour, use "kph" // Else assumed imperial and the value is returned in miles per hour (a Met Office user is likely to be UK-based) convertWindSpeed(windInMpS) { - if (this.config.windUnits == "mps") { + if (this.config.windUnits === "mps") { return windInMpS; } - if (this.config.windUnits == "kph" || this.config.windUnits == "metric" || this.config.useKmh) { + if (this.config.windUnits === "kph" || this.config.windUnits === "metric" || this.config.useKmh) { return windInMpS * 3.6; } From bcff953fbb260d980f905730daf3c56228ccb152 Mon Sep 17 00:00:00 2001 From: veeck Date: Wed, 30 Jun 2021 16:00:26 +0200 Subject: [PATCH 024/134] Fix warning in weather provider --- modules/default/weather/providers/envcanada.js | 2 +- modules/default/weather/providers/smhi.js | 4 ++-- modules/default/weather/providers/ukmetofficedatahub.js | 6 ++++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/modules/default/weather/providers/envcanada.js b/modules/default/weather/providers/envcanada.js index db0773ea..10db7415 100644 --- a/modules/default/weather/providers/envcanada.js +++ b/modules/default/weather/providers/envcanada.js @@ -359,7 +359,7 @@ WeatherProvider.register("envcanada", { var lastDate = moment(baseDate, "YYYYMMDDhhmmss"); for (var stepDay = nextDay; stepDay < lastDay; stepDay += 2) { - var weather = new WeatherObject(this.config.units, this.config.tempUnits, this.config.windUnits); + let weather = new WeatherObject(this.config.units, this.config.tempUnits, this.config.windUnits); // Add 1 to the date to reflect the current forecast day we are building diff --git a/modules/default/weather/providers/smhi.js b/modules/default/weather/providers/smhi.js index 1512b067..89c67487 100644 --- a/modules/default/weather/providers/smhi.js +++ b/modules/default/weather/providers/smhi.js @@ -216,12 +216,12 @@ WeatherProvider.register("smhi", { */ fillInGaps(data) { let result = []; - for (const i = 1; i < data.length; i++) { + for (let i = 1; i < data.length; i++) { let to = moment(data[i].validTime); let from = moment(data[i - 1].validTime); let hours = moment.duration(to.diff(from)).asHours(); // For each hour add a datapoint but change the validTime - for (const j = 0; j < hours; j++) { + for (let j = 0; j < hours; j++) { let current = Object.assign({}, data[i]); current.validTime = from.clone().add(j, "hours").toISOString(); result.push(current); diff --git a/modules/default/weather/providers/ukmetofficedatahub.js b/modules/default/weather/providers/ukmetofficedatahub.js index 41e84880..054dce78 100644 --- a/modules/default/weather/providers/ukmetofficedatahub.js +++ b/modules/default/weather/providers/ukmetofficedatahub.js @@ -1,3 +1,5 @@ +/* global WeatherProvider, WeatherObject, SunCalc */ + /* Magic Mirror * Module: Weather * @@ -125,7 +127,7 @@ WeatherProvider.register("ukmetofficedatahub", { let nowUtc = moment.utc(); // Find hour that contains the current time - for (hour in forecastDataHours) { + for (let hour in forecastDataHours) { let forecastTime = moment.utc(forecastDataHours[hour].time); if (nowUtc.isSameOrAfter(forecastTime) && nowUtc.isBefore(moment(forecastTime.add(1, "h")))) { currentWeather.date = forecastTime; @@ -196,7 +198,7 @@ WeatherProvider.register("ukmetofficedatahub", { let today = moment.utc().startOf("date"); // Go through each day in the forecasts - for (day in forecastDataDays) { + for (let day in forecastDataDays) { const forecastWeather = new WeatherObject(this.config.units, this.config.tempUnits, this.config.windUnits, this.config.useKmh); // Get date of forecast From 53720ae8aee7e2ebf75c177564a08ce22516d5d7 Mon Sep 17 00:00:00 2001 From: rejas Date: Thu, 1 Jul 2021 16:37:27 +0200 Subject: [PATCH 025/134] Fix some eslint issues in the tests --- tests/e2e/modules/clock_es_spec.js | 2 +- tests/e2e/modules/clock_spec.js | 2 +- .../unit/global_vars/defaults_modules_spec.js | 66 ++++++++--------- tests/unit/global_vars/root_path_spec.js | 70 ++++++++++--------- 4 files changed, 72 insertions(+), 68 deletions(-) diff --git a/tests/e2e/modules/clock_es_spec.js b/tests/e2e/modules/clock_es_spec.js index f97fba2f..4c39a241 100644 --- a/tests/e2e/modules/clock_es_spec.js +++ b/tests/e2e/modules/clock_es_spec.js @@ -5,7 +5,7 @@ describe("Clock set to spanish language module", function () { let app = null; - testMatch = async function (element, regex) { + const testMatch = async function (element, regex) { await app.client.waitUntilWindowLoaded(); const elem = await app.client.$(element); const txt = await elem.getText(element); diff --git a/tests/e2e/modules/clock_spec.js b/tests/e2e/modules/clock_spec.js index c09f44de..473c6f6a 100644 --- a/tests/e2e/modules/clock_spec.js +++ b/tests/e2e/modules/clock_spec.js @@ -6,7 +6,7 @@ describe("Clock module", function () { let app = null; - testMatch = async function (element, regex) { + const testMatch = async function (element, regex) { await app.client.waitUntilWindowLoaded(); const elem = await app.client.$(element); const txt = await elem.getText(element); diff --git a/tests/unit/global_vars/defaults_modules_spec.js b/tests/unit/global_vars/defaults_modules_spec.js index c0a7f0e4..03879a86 100644 --- a/tests/unit/global_vars/defaults_modules_spec.js +++ b/tests/unit/global_vars/defaults_modules_spec.js @@ -4,39 +4,41 @@ const vm = require("vm"); const basedir = path.join(__dirname, "../../.."); -beforeAll(function () { - const fileName = "js/app.js"; - const filePath = path.join(basedir, fileName); - const code = fs.readFileSync(filePath); - - sandbox = { - module: {}, - __dirname: path.dirname(filePath), - global: {}, - process: { - on: function () {}, - env: {} - } - }; - - sandbox.require = function (filename) { - // This modifies the global slightly, - // but supplies vm with essential code - if (filename === "logger") { - return require("../mocks/logger.js"); - } else { - try { - return require(filename); - } catch { - // ignore - } - } - }; - - vm.runInNewContext(code, sandbox, fileName); -}); - describe("Default modules set in modules/default/defaultmodules.js", function () { + let sandbox = null; + + beforeAll(function () { + const fileName = "js/app.js"; + const filePath = path.join(basedir, fileName); + const code = fs.readFileSync(filePath); + + sandbox = { + module: {}, + __dirname: path.dirname(filePath), + global: {}, + process: { + on: function () {}, + env: {} + } + }; + + sandbox.require = function (filename) { + // This modifies the global slightly, + // but supplies vm with essential code + if (filename === "logger") { + return require("../mocks/logger.js"); + } else { + try { + return require(filename); + } catch (ignore) { + // ignore + } + } + }; + + vm.runInNewContext(code, sandbox, fileName); + }); + const expectedDefaultModules = require("../../../modules/default/defaultmodules"); for (const defaultModule of expectedDefaultModules) { diff --git a/tests/unit/global_vars/root_path_spec.js b/tests/unit/global_vars/root_path_spec.js index 591f3ddb..9dfc3f30 100644 --- a/tests/unit/global_vars/root_path_spec.js +++ b/tests/unit/global_vars/root_path_spec.js @@ -2,41 +2,43 @@ const fs = require("fs"); const path = require("path"); const vm = require("vm"); -beforeAll(function () { - const basedir = path.join(__dirname, "../../.."); - - const fileName = "js/app.js"; - const filePath = path.join(basedir, fileName); - const code = fs.readFileSync(filePath); - - sandbox = { - module: {}, - __dirname: path.dirname(filePath), - global: {}, - process: { - on: function () {}, - env: {} - } - }; - - sandbox.require = function (filename) { - // This modifies the global slightly, - // but supplies vm with essential code - if (filename === "logger") { - return require("../mocks/logger.js"); - } else { - try { - return require(filename); - } catch { - // ignore - } - } - }; - - vm.runInNewContext(code, sandbox, fileName); -}); - describe("'global.root_path' set in js/app.js", function () { + let sandbox = null; + + beforeAll(function () { + const basedir = path.join(__dirname, "../../.."); + + const fileName = "js/app.js"; + const filePath = path.join(basedir, fileName); + const code = fs.readFileSync(filePath); + + sandbox = { + module: {}, + __dirname: path.dirname(filePath), + global: {}, + process: { + on: function () {}, + env: {} + } + }; + + sandbox.require = function (filename) { + // This modifies the global slightly, + // but supplies vm with essential code + if (filename === "logger") { + return require("../mocks/logger.js"); + } else { + try { + return require(filename); + } catch (ignore) { + // ignore + } + } + }; + + vm.runInNewContext(code, sandbox, fileName); + }); + const expectedSubPaths = ["modules", "serveronly", "js", "js/app.js", "js/main.js", "js/electron.js", "config"]; expectedSubPaths.forEach((subpath) => { From 2619f92d09612e3df71828ff15c78b9d17aac111 Mon Sep 17 00:00:00 2001 From: rejas Date: Fri, 2 Jul 2021 17:24:29 +0200 Subject: [PATCH 026/134] More var -> let/const conversions --- js/class.js | 20 ++++---- js/electron.js | 2 +- js/translator.js | 7 +-- .../default/weather/providers/envcanada.js | 49 ++++++++++--------- 4 files changed, 37 insertions(+), 41 deletions(-) diff --git a/js/class.js b/js/class.js index b25ced0a..339e24b2 100644 --- a/js/class.js +++ b/js/class.js @@ -8,8 +8,8 @@ * MIT Licensed. */ (function () { - var initializing = false; - var fnTest = /xyz/.test(function () { + let initializing = false; + const fnTest = /xyz/.test(function () { xyz; }) ? /\b_super\b/ @@ -20,27 +20,27 @@ // Create a new Class that inherits from this class Class.extend = function (prop) { - var _super = this.prototype; + let _super = this.prototype; // Instantiate a base class (but only create the instance, // don't run the init constructor) initializing = true; - var prototype = new this(); + const prototype = new this(); initializing = false; // Make a copy of all prototype properties, to prevent reference issues. - for (var p in prototype) { + for (const p in prototype) { prototype[p] = cloneObject(prototype[p]); } // Copy the properties over onto the new prototype - for (var name in prop) { + for (const name in prop) { // Check if we're overwriting an existing function prototype[name] = typeof prop[name] === "function" && typeof _super[name] === "function" && fnTest.test(prop[name]) ? (function (name, fn) { return function () { - var tmp = this._super; + const tmp = this._super; // Add a new ._super() method that is the same method // but on the super-class @@ -48,7 +48,7 @@ // The method only need to be bound temporarily, so we // remove it when we're done executing - var ret = fn.apply(this, arguments); + const ret = fn.apply(this, arguments); this._super = tmp; return ret; @@ -91,8 +91,8 @@ function cloneObject(obj) { return obj; } - var temp = obj.constructor(); // give temp the original obj's constructor - for (var key in obj) { + const temp = obj.constructor(); // give temp the original obj's constructor + for (const key in obj) { temp[key] = cloneObject(obj[key]); if (key === "lockStrings") { diff --git a/js/electron.js b/js/electron.js index b566f0ad..36b3d352 100644 --- a/js/electron.js +++ b/js/electron.js @@ -65,7 +65,7 @@ function createWindow() { if (process.argv.includes("dev")) { if (process.env.JEST_WORKER_ID !== undefined) { // if we are running with jest - var devtools = new BrowserWindow(electronOptions); + const devtools = new BrowserWindow(electronOptions); mainWindow.webContents.setDevToolsWebContents(devtools.webContents); } mainWindow.webContents.openDevTools(); diff --git a/js/translator.js b/js/translator.js index 1144e899..bff29d61 100644 --- a/js/translator.js +++ b/js/translator.js @@ -141,12 +141,7 @@ var Translator = (function () { * The first language defined in translations.js will be used. */ loadCoreTranslationsFallback: function () { - // The variable `first` will contain the first - // defined translation after the following line. - for (var first in translations) { - break; - } - + let first = Object.keys(translations)[0]; if (first) { Log.log("Loading core translation fallback file: " + translations[first]); loadJSON(translations[first], (translations) => { diff --git a/modules/default/weather/providers/envcanada.js b/modules/default/weather/providers/envcanada.js index 10db7415..0f9ef21e 100644 --- a/modules/default/weather/providers/envcanada.js +++ b/modules/default/weather/providers/envcanada.js @@ -134,7 +134,7 @@ WeatherProvider.register("envcanada", { // fetchData: function (url, method = "GET", data = null) { return new Promise(function (resolve, reject) { - var request = new XMLHttpRequest(); + const request = new XMLHttpRequest(); request.open(method, url, true); request.onreadystatechange = function () { if (this.readyState === 4) { @@ -164,7 +164,7 @@ WeatherProvider.register("envcanada", { // CORS errors when accessing EC // getUrl() { - var path = "https://thingproxy.freeboard.io/fetch/https://dd.weather.gc.ca/citypage_weather/xml/" + this.config.provCode + "/" + this.config.siteCode + "_e.xml"; + const path = "https://thingproxy.freeboard.io/fetch/https://dd.weather.gc.ca/citypage_weather/xml/" + this.config.provCode + "/" + this.config.siteCode + "_e.xml"; return path; }, @@ -232,7 +232,7 @@ WeatherProvider.register("envcanada", { // Capture the sunrise and sunset values from EC data // - var sunList = ECdoc.querySelectorAll("siteData riseSet dateTime"); + const sunList = ECdoc.querySelectorAll("siteData riseSet dateTime"); currentWeather.sunrise = moment(sunList[1].querySelector("timeStamp").textContent, "YYYYMMDDhhmmss"); currentWeather.sunset = moment(sunList[3].querySelector("timeStamp").textContent, "YYYYMMDDhhmmss"); @@ -249,14 +249,14 @@ WeatherProvider.register("envcanada", { const days = []; - var weather = new WeatherObject(this.config.units, this.config.tempUnits, this.config.windUnits); + const weather = new WeatherObject(this.config.units, this.config.tempUnits, this.config.windUnits); - var foreBaseDates = ECdoc.querySelectorAll("siteData forecastGroup dateTime"); - var baseDate = foreBaseDates[1].querySelector("timeStamp").textContent; + const foreBaseDates = ECdoc.querySelectorAll("siteData forecastGroup dateTime"); + const baseDate = foreBaseDates[1].querySelector("timeStamp").textContent; weather.date = moment(baseDate, "YYYYMMDDhhmmss"); - var foreGroup = ECdoc.querySelectorAll("siteData forecastGroup forecast"); + const foreGroup = ECdoc.querySelectorAll("siteData forecastGroup forecast"); // For simplicity, we will only accumulate precipitation and will not try to break out // rain vs snow accumulations @@ -288,9 +288,9 @@ WeatherProvider.register("envcanada", { // where the next day's (aka Tomorrow's) forecast is located in the forecast array. // - var nextDay = 0; - var lastDay = 0; - var currentTemp = ECdoc.querySelector("siteData currentConditions temperature").textContent; + let nextDay = 0; + let lastDay = 0; + const currentTemp = ECdoc.querySelector("siteData currentConditions temperature").textContent; // // If the first Element is Current Today, look at Current Today and Current Tonight for the current day. @@ -356,9 +356,9 @@ WeatherProvider.register("envcanada", { // iteration looking at the current Element and the next Element. // - var lastDate = moment(baseDate, "YYYYMMDDhhmmss"); + let lastDate = moment(baseDate, "YYYYMMDDhhmmss"); - for (var stepDay = nextDay; stepDay < lastDay; stepDay += 2) { + for (let stepDay = nextDay; stepDay < lastDay; stepDay += 2) { let weather = new WeatherObject(this.config.units, this.config.tempUnits, this.config.windUnits); // Add 1 to the date to reflect the current forecast day we are building @@ -402,23 +402,23 @@ WeatherProvider.register("envcanada", { // Get local timezone UTC offset so that each hourly time can be calculated properly - var baseHours = ECdoc.querySelectorAll("siteData hourlyForecastGroup dateTime"); - var hourOffset = baseHours[1].getAttribute("UTCOffset"); + const baseHours = ECdoc.querySelectorAll("siteData hourlyForecastGroup dateTime"); + const hourOffset = baseHours[1].getAttribute("UTCOffset"); // // The EC hourly forecast is held in a 24-element array - Elements 0 to 23 - with Element 0 holding // the forecast for the next 'on the hour' timeslot. This means the array is a rolling 24 hours. // - var hourGroup = ECdoc.querySelectorAll("siteData hourlyForecastGroup hourlyForecast"); + const hourGroup = ECdoc.querySelectorAll("siteData hourlyForecastGroup hourlyForecast"); - for (var stepHour = 0; stepHour < 24; stepHour += 1) { - var weather = new WeatherObject(this.config.units, this.config.tempUnits, this.config.windUnits); + for (let stepHour = 0; stepHour < 24; stepHour += 1) { + const weather = new WeatherObject(this.config.units, this.config.tempUnits, this.config.windUnits); // Determine local time by applying UTC offset to the forecast timestamp - var foreTime = moment(hourGroup[stepHour].getAttribute("dateTimeUTC"), "YYYYMMDDhhmmss"); - var currTime = foreTime.add(hourOffset, "hours"); + const foreTime = moment(hourGroup[stepHour].getAttribute("dateTimeUTC"), "YYYYMMDDhhmmss"); + const currTime = foreTime.add(hourOffset, "hours"); weather.date = moment(currTime, "X"); // Capture the temperature @@ -427,7 +427,7 @@ WeatherProvider.register("envcanada", { // Capture Likelihood of Precipitation (LOP) and unit-of-measure values - var precipLOP = hourGroup[stepHour].querySelector("lop").textContent * 1.0; + const precipLOP = hourGroup[stepHour].querySelector("lop").textContent * 1.0; if (precipLOP > 0) { weather.precipitation = precipLOP; @@ -453,9 +453,9 @@ WeatherProvider.register("envcanada", { // setMinMaxTemps(weather, foreGroup, today, fullDay, currentTemp) { - var todayTemp = foreGroup[today].querySelector("temperatures temperature").textContent; + const todayTemp = foreGroup[today].querySelector("temperatures temperature").textContent; - var todayClass = foreGroup[today].querySelector("temperatures temperature").getAttribute("class"); + const todayClass = foreGroup[today].querySelector("temperatures temperature").getAttribute("class"); // // The following logic is largely aimed at accommodating the Current day's forecast whereby we @@ -500,9 +500,9 @@ WeatherProvider.register("envcanada", { } } - var nextTemp = foreGroup[today + 1].querySelector("temperatures temperature").textContent; + const nextTemp = foreGroup[today + 1].querySelector("temperatures temperature").textContent; - var nextClass = foreGroup[today + 1].querySelector("temperatures temperature").getAttribute("class"); + const nextClass = foreGroup[today + 1].querySelector("temperatures temperature").getAttribute("class"); if (fullDay === true) { if (nextClass === "low") { @@ -577,6 +577,7 @@ WeatherProvider.register("envcanada", { return temp; } }, + // // Convert km/h to mph // From 36d6a5bc15020295582ea319eca29a0fab7b6dac Mon Sep 17 00:00:00 2001 From: veeck Date: Tue, 6 Jul 2021 10:03:41 +0200 Subject: [PATCH 027/134] Start cleaning up some jsdoc --- modules/default/weather/providers/smhi.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/modules/default/weather/providers/smhi.js b/modules/default/weather/providers/smhi.js index 89c67487..d84d9081 100644 --- a/modules/default/weather/providers/smhi.js +++ b/modules/default/weather/providers/smhi.js @@ -70,6 +70,7 @@ WeatherProvider.register("smhi", { * Of all the times returned find out which one is closest to the current time, should be the first if the data isn't old. * * @param times + * @returns {undefined} */ getClosestToCurrentTime(times) { let now = moment(); @@ -85,6 +86,8 @@ WeatherProvider.register("smhi", { /** * Get the forecast url for the configured coordinates + * + * @returns {string} */ getURL() { let lon = this.config.lon; @@ -99,8 +102,7 @@ WeatherProvider.register("smhi", { * * @param weatherData * @param coordinates - * @param weatherData - * @param coordinates + * @returns {WeatherObject} */ convertWeatherDataToObject(weatherData, coordinates) { let currentWeather = new WeatherObject("metric", "metric", "metric"); //Weather data is only for Sweden and nobody in Sweden would use imperial @@ -145,8 +147,7 @@ WeatherProvider.register("smhi", { * * @param allWeatherData * @param coordinates - * @param allWeatherData - * @param coordinates + * @returns {*[]} */ convertWeatherDataGroupedByDay(allWeatherData, coordinates) { let currentWeather; @@ -194,6 +195,7 @@ WeatherProvider.register("smhi", { * Resolve coordinates from the response data (probably preferably to use this if it's not matching the config values exactly) * * @param data + * @returns {{lon, lat}} */ resolveCoordinates(data) { return { lat: data.geometry.coordinates[0][1], lon: data.geometry.coordinates[0][0] }; @@ -203,6 +205,7 @@ WeatherProvider.register("smhi", { * Checks if the weatherObject is at dayTime. * * @param weatherObject + * @returns {boolean} */ isDayTime(weatherObject) { return weatherObject.date.isBetween(weatherObject.sunrise, weatherObject.sunset, undefined, "[]"); @@ -213,6 +216,7 @@ WeatherProvider.register("smhi", { * Find these gaps and fill them with the previous hours data to make the data returned a complete set. * * @param data + * @returns {*[]} */ fillInGaps(data) { let result = []; @@ -236,8 +240,7 @@ WeatherProvider.register("smhi", { * * @param currentWeatherData * @param name - * @param currentWeatherData - * @param name + * @returns {unknown} */ paramValue(currentWeatherData, name) { return currentWeatherData.parameters.filter((p) => p.name === name).flatMap((p) => p.values)[0]; @@ -250,8 +253,7 @@ WeatherProvider.register("smhi", { * * @param input * @param isDayTime - * @param input - * @param isDayTime + * @returns {string|string} */ convertWeatherType(input, isDayTime) { switch (input) { From dd5041395c8682121128744ac89b8c800fe778f4 Mon Sep 17 00:00:00 2001 From: veeck Date: Tue, 6 Jul 2021 11:26:21 +0200 Subject: [PATCH 028/134] Run stylelint over all css files --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 2857d967..08cc09b0 100644 --- a/package.json +++ b/package.json @@ -16,12 +16,12 @@ "test:unit": "NODE_ENV=test jest --selectProjects unit -i --forceExit", "test:prettier": "prettier . --check", "test:js": "eslint 'js/**/*.js' 'modules/default/**/*.js' 'clientonly/*.js' 'serveronly/*.js' 'translations/*.js' 'vendor/*.js' 'tests/**/*.js' 'config/*' --config .eslintrc.json --quiet", - "test:css": "stylelint 'css/main.css' 'modules/default/**/*.css' --config .stylelintrc.json", + "test:css": "stylelint 'css/main.css' 'fonts/*.css' 'modules/default/**/*.css' 'vendor/*.css' --config .stylelintrc.json", "test:calendar": "node ./modules/default/calendar/debug.js", "config:check": "node js/check_config.js", "lint:prettier": "prettier . --write", "lint:js": "eslint 'js/**/*.js' 'modules/default/**/*.js' 'clientonly/*.js' 'serveronly/*.js' 'translations/*.js' 'vendor/*.js' 'tests/**/*.js' 'config/*' --config .eslintrc.json --fix", - "lint:css": "stylelint 'css/main.css' 'modules/default/**/*.css' --config .stylelintrc.json --fix", + "lint:css": "stylelint 'css/main.css' 'fonts/*.css' 'modules/default/**/*.css' 'vendor/*.css' --config .stylelintrc.json --fix", "lint:staged": "pretty-quick --staged", "prepare": "[ -f node_modules/.bin/husky ] && husky install || echo no husky installed." }, From 8a7abfe42d5c93f74154842bec33eef3761bb66a Mon Sep 17 00:00:00 2001 From: rejas Date: Tue, 6 Jul 2021 16:47:36 +0200 Subject: [PATCH 029/134] Update dependencies --- package-lock.json | 150 +++++++++++++++++++++++----------------------- package.json | 16 ++--- 2 files changed, 84 insertions(+), 82 deletions(-) diff --git a/package-lock.json b/package-lock.json index ef2155a3..ae8d93d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "license": "MIT", "dependencies": { "colors": "^1.4.0", - "console-stamp": "^3.0.2", + "console-stamp": "^3.0.3", "digest-fetch": "^1.2.0", "eslint": "^7.30.0", "express": "^4.17.1", @@ -23,17 +23,17 @@ "moment": "^2.29.1", "node-fetch": "^2.6.1", "node-ical": "^0.13.0", - "simple-git": "^2.40.0", - "socket.io": "^4.1.2" + "simple-git": "^2.41.1", + "socket.io": "^4.1.3" }, "devDependencies": { "eslint-config-prettier": "^8.3.0", "eslint-plugin-jest": "^24.3.6", - "eslint-plugin-jsdoc": "^35.4.1", + "eslint-plugin-jsdoc": "^35.4.3", "eslint-plugin-prettier": "^3.4.0", "express-basic-auth": "^1.2.0", - "husky": "^7.0.0", - "jest": "27.0.6", + "husky": "^7.0.1", + "jest": "^27.0.6", "jsdom": "^16.6.0", "lodash": "^4.17.21", "nyc": "^15.1.0", @@ -50,7 +50,7 @@ "node": ">=12" }, "optionalDependencies": { - "electron": "^13.1.5" + "electron": "^13.1.6" } }, "node_modules/@babel/code-frame": { @@ -703,17 +703,17 @@ } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.8.0.tgz", - "integrity": "sha512-Xd3GzYsL2sz2pcdtYt5Q0Wz1ol/o9Nt2UQL4nFPDcaEomvPmwjJsbjkKx1SKhl2h3TgwazNBLdcNr2m0UiGiFA==", + "version": "0.9.0-alpha.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.9.0-alpha.1.tgz", + "integrity": "sha512-Clxxc0PwpISoYYBibA+1L2qFJ7gvFVhI2Hos87S06K+Q0cXdOhZQJNKWuaQGPAeHjZEuUB/YoWOfwjuF2wirqA==", "dev": true, "dependencies": { - "comment-parser": "^1.1.5", + "comment-parser": "1.1.6-beta.0", "esquery": "^1.4.0", "jsdoc-type-pratt-parser": "1.0.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" } }, "node_modules/@eslint/eslintrc": { @@ -2600,9 +2600,9 @@ } }, "node_modules/comment-parser": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.1.5.tgz", - "integrity": "sha512-RePCE4leIhBlmrqiYTvaqEeGYg7qpSl4etaIabKtdOQVi+mSTIBBklGUwIr79GXYnl3LpMwmDw4KeR2stNc6FA==", + "version": "1.1.6-beta.0", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.1.6-beta.0.tgz", + "integrity": "sha512-q3cA8TSMyqW7wcPSYWzbO/rMahnXgzs4SLG/UIWXdEsnXTFPZkEkWAdNgPiHig2OzxgpPLOh4WwsmClDxndwHw==", "dev": true, "engines": { "node": ">= 10.0.0" @@ -2679,11 +2679,11 @@ } }, "node_modules/console-stamp": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/console-stamp/-/console-stamp-3.0.2.tgz", - "integrity": "sha512-nYIxVrp1Cau8wRy8RQJO1VNBTYQPnFcN7SrsLAStSavo38Y4+jcysh5n4nZNd/WkR2IOULgwr2+6qDxMUA7Hog==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/console-stamp/-/console-stamp-3.0.3.tgz", + "integrity": "sha512-6ltMcMEVDHb1bqb+qaVfCX7Vf3vEkfZEeKyReG1ny45Rv6YJynCcdv94j7whNVfxj/4/3Ji/QBHY6p4JI51Ucw==", "dependencies": { - "chalk": "^4.1.0", + "chalk": "^4.1.1", "dateformat": "^4.5.1" }, "engines": { @@ -3243,11 +3243,12 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron": { - "version": "13.1.5", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.5.tgz", - "integrity": "sha512-ZoMCcPQNs/zO/Zdb5hq5H+rwRaKrdI3/sfXEwBVMx7f5jwa9jPQB3dZ2+7t59uD9VcFAWsH/pozr8nPPlv0tyw==", + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.6.tgz", + "integrity": "sha512-XiB55/JTaQpDFQrD9pulYnOGwaWeMyRIub5ispvoE2bWBvM5zVMLptwMLb0m3KTMrfSkzhedZvOu7fwYvR7L7Q==", "devOptional": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "@electron/get": "^1.0.1", "@types/node": "^14.6.2", @@ -3646,14 +3647,14 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "35.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-35.4.1.tgz", - "integrity": "sha512-lnpu2Bj+ta2eAqwCWnb6f3Xjc78TWKo/oMCpDH5NfpPhYnePNtGZJzoAMgU5uo9BQqmXJ8pql8aiodOhg82ofw==", + "version": "35.4.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-35.4.3.tgz", + "integrity": "sha512-hBEn+VNjVX0IKoZ2OdZs0Z1fU8CqZkBSzLqD8ZpwZEamrdi2TUgKvujvETe8gXYQ/67hpRtbR5iPFTgmWpRevw==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "^0.8.0", - "comment-parser": "1.1.5", - "debug": "^4.3.1", + "@es-joy/jsdoccomment": "^0.9.0-alpha.1", + "comment-parser": "1.1.6-beta.0", + "debug": "^4.3.2", "esquery": "^1.4.0", "jsdoc-type-pratt-parser": "^1.0.4", "lodash": "^4.17.21", @@ -4865,10 +4866,11 @@ } }, "node_modules/husky": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.0.tgz", - "integrity": "sha512-xK7lO0EtSzfFPiw+oQncQVy/XqV7UVVjxBByc+Iv5iK3yhW9boDoWgvZy3OGo48QKg/hUtZkzz0hi2HXa0kn7w==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.1.tgz", + "integrity": "sha512-gceRaITVZ+cJH9sNHqx5tFwbzlLCVxtVZcusME8JYQ8Edy5mpGDOqD8QBCdMhpyo9a+JXddnujQ4rpY2Ff9SJA==", "dev": true, + "license": "MIT", "bin": { "husky": "lib/bin.js" }, @@ -8578,9 +8580,9 @@ "dev": true }, "node_modules/simple-git": { - "version": "2.40.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.40.0.tgz", - "integrity": "sha512-7IO/eQwrN5kvS38TTu9ljhG9tx2nn0BTqZOmqpPpp51TvE44YIvLA6fETqEVA8w/SeEfPaVv6mk7Tsk9Jns+ag==", + "version": "2.41.1", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.41.1.tgz", + "integrity": "sha512-n1STz1tfnemvYndzWakgKa0JB4s/LrUG4btXMetWB9N9ZoIAJQd0ZtWj9sBwWxIZ/X/tYdA/tq+KHfFNAGzZhQ==", "dependencies": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", @@ -8637,19 +8639,19 @@ } }, "node_modules/socket.io": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.2.tgz", - "integrity": "sha512-xK0SD1C7hFrh9+bYoYCdVt+ncixkSLKtNLCax5aEy1o3r5PaO5yQhVb97exIe67cE7lAK+EpyMytXWTWmyZY8w==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.3.tgz", + "integrity": "sha512-tLkaY13RcO4nIRh1K2hT5iuotfTaIQw7cVIe0FUykN3SuQi0cm7ALxuyT5/CtDswOMWUzMGTibxYNx/gU7In+Q==", "dependencies": { "@types/cookie": "^0.4.0", - "@types/cors": "^2.8.8", + "@types/cors": "^2.8.10", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "~2.0.0", "debug": "~4.3.1", - "engine.io": "~5.1.0", - "socket.io-adapter": "~2.3.0", - "socket.io-parser": "~4.0.3" + "engine.io": "~5.1.1", + "socket.io-adapter": "~2.3.1", + "socket.io-parser": "~4.0.4" }, "engines": { "node": ">=10.0.0" @@ -10913,12 +10915,12 @@ "requires": {} }, "@es-joy/jsdoccomment": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.8.0.tgz", - "integrity": "sha512-Xd3GzYsL2sz2pcdtYt5Q0Wz1ol/o9Nt2UQL4nFPDcaEomvPmwjJsbjkKx1SKhl2h3TgwazNBLdcNr2m0UiGiFA==", + "version": "0.9.0-alpha.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.9.0-alpha.1.tgz", + "integrity": "sha512-Clxxc0PwpISoYYBibA+1L2qFJ7gvFVhI2Hos87S06K+Q0cXdOhZQJNKWuaQGPAeHjZEuUB/YoWOfwjuF2wirqA==", "dev": true, "requires": { - "comment-parser": "^1.1.5", + "comment-parser": "1.1.6-beta.0", "esquery": "^1.4.0", "jsdoc-type-pratt-parser": "1.0.4" } @@ -12396,9 +12398,9 @@ } }, "comment-parser": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.1.5.tgz", - "integrity": "sha512-RePCE4leIhBlmrqiYTvaqEeGYg7qpSl4etaIabKtdOQVi+mSTIBBklGUwIr79GXYnl3LpMwmDw4KeR2stNc6FA==", + "version": "1.1.6-beta.0", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.1.6-beta.0.tgz", + "integrity": "sha512-q3cA8TSMyqW7wcPSYWzbO/rMahnXgzs4SLG/UIWXdEsnXTFPZkEkWAdNgPiHig2OzxgpPLOh4WwsmClDxndwHw==", "dev": true }, "commondir": { @@ -12465,11 +12467,11 @@ } }, "console-stamp": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/console-stamp/-/console-stamp-3.0.2.tgz", - "integrity": "sha512-nYIxVrp1Cau8wRy8RQJO1VNBTYQPnFcN7SrsLAStSavo38Y4+jcysh5n4nZNd/WkR2IOULgwr2+6qDxMUA7Hog==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/console-stamp/-/console-stamp-3.0.3.tgz", + "integrity": "sha512-6ltMcMEVDHb1bqb+qaVfCX7Vf3vEkfZEeKyReG1ny45Rv6YJynCcdv94j7whNVfxj/4/3Ji/QBHY6p4JI51Ucw==", "requires": { - "chalk": "^4.1.0", + "chalk": "^4.1.1", "dateformat": "^4.5.1" } }, @@ -12915,9 +12917,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron": { - "version": "13.1.5", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.5.tgz", - "integrity": "sha512-ZoMCcPQNs/zO/Zdb5hq5H+rwRaKrdI3/sfXEwBVMx7f5jwa9jPQB3dZ2+7t59uD9VcFAWsH/pozr8nPPlv0tyw==", + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.6.tgz", + "integrity": "sha512-XiB55/JTaQpDFQrD9pulYnOGwaWeMyRIub5ispvoE2bWBvM5zVMLptwMLb0m3KTMrfSkzhedZvOu7fwYvR7L7Q==", "devOptional": true, "requires": { "@electron/get": "^1.0.1", @@ -13209,14 +13211,14 @@ } }, "eslint-plugin-jsdoc": { - "version": "35.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-35.4.1.tgz", - "integrity": "sha512-lnpu2Bj+ta2eAqwCWnb6f3Xjc78TWKo/oMCpDH5NfpPhYnePNtGZJzoAMgU5uo9BQqmXJ8pql8aiodOhg82ofw==", + "version": "35.4.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-35.4.3.tgz", + "integrity": "sha512-hBEn+VNjVX0IKoZ2OdZs0Z1fU8CqZkBSzLqD8ZpwZEamrdi2TUgKvujvETe8gXYQ/67hpRtbR5iPFTgmWpRevw==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "^0.8.0", - "comment-parser": "1.1.5", - "debug": "^4.3.1", + "@es-joy/jsdoccomment": "^0.9.0-alpha.1", + "comment-parser": "1.1.6-beta.0", + "debug": "^4.3.2", "esquery": "^1.4.0", "jsdoc-type-pratt-parser": "^1.0.4", "lodash": "^4.17.21", @@ -14135,9 +14137,9 @@ "dev": true }, "husky": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.0.tgz", - "integrity": "sha512-xK7lO0EtSzfFPiw+oQncQVy/XqV7UVVjxBByc+Iv5iK3yhW9boDoWgvZy3OGo48QKg/hUtZkzz0hi2HXa0kn7w==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.1.tgz", + "integrity": "sha512-gceRaITVZ+cJH9sNHqx5tFwbzlLCVxtVZcusME8JYQ8Edy5mpGDOqD8QBCdMhpyo9a+JXddnujQ4rpY2Ff9SJA==", "dev": true }, "iconv-lite": { @@ -16981,9 +16983,9 @@ "dev": true }, "simple-git": { - "version": "2.40.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.40.0.tgz", - "integrity": "sha512-7IO/eQwrN5kvS38TTu9ljhG9tx2nn0BTqZOmqpPpp51TvE44YIvLA6fETqEVA8w/SeEfPaVv6mk7Tsk9Jns+ag==", + "version": "2.41.1", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.41.1.tgz", + "integrity": "sha512-n1STz1tfnemvYndzWakgKa0JB4s/LrUG4btXMetWB9N9ZoIAJQd0ZtWj9sBwWxIZ/X/tYdA/tq+KHfFNAGzZhQ==", "requires": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", @@ -17027,19 +17029,19 @@ } }, "socket.io": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.2.tgz", - "integrity": "sha512-xK0SD1C7hFrh9+bYoYCdVt+ncixkSLKtNLCax5aEy1o3r5PaO5yQhVb97exIe67cE7lAK+EpyMytXWTWmyZY8w==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.3.tgz", + "integrity": "sha512-tLkaY13RcO4nIRh1K2hT5iuotfTaIQw7cVIe0FUykN3SuQi0cm7ALxuyT5/CtDswOMWUzMGTibxYNx/gU7In+Q==", "requires": { "@types/cookie": "^0.4.0", - "@types/cors": "^2.8.8", + "@types/cors": "^2.8.10", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "~2.0.0", "debug": "~4.3.1", - "engine.io": "~5.1.0", - "socket.io-adapter": "~2.3.0", - "socket.io-parser": "~4.0.3" + "engine.io": "~5.1.1", + "socket.io-adapter": "~2.3.1", + "socket.io-parser": "~4.0.4" } }, "socket.io-adapter": { diff --git a/package.json b/package.json index 08cc09b0..b0b5426d 100644 --- a/package.json +++ b/package.json @@ -46,12 +46,12 @@ "homepage": "https://magicmirror.builders", "devDependencies": { "eslint-config-prettier": "^8.3.0", - "eslint-plugin-jsdoc": "^35.4.1", - "eslint-plugin-prettier": "^3.4.0", "eslint-plugin-jest": "^24.3.6", + "eslint-plugin-jsdoc": "^35.4.3", + "eslint-plugin-prettier": "^3.4.0", "express-basic-auth": "^1.2.0", - "husky": "^7.0.0", - "jest": "27.0.6", + "husky": "^7.0.1", + "jest": "^27.0.6", "jsdom": "^16.6.0", "lodash": "^4.17.21", "nyc": "^15.1.0", @@ -65,11 +65,11 @@ "stylelint-prettier": "^1.2.0" }, "optionalDependencies": { - "electron": "^13.1.5" + "electron": "^13.1.6" }, "dependencies": { "colors": "^1.4.0", - "console-stamp": "^3.0.2", + "console-stamp": "^3.0.3", "digest-fetch": "^1.2.0", "eslint": "^7.30.0", "express": "^4.17.1", @@ -81,8 +81,8 @@ "moment": "^2.29.1", "node-fetch": "^2.6.1", "node-ical": "^0.13.0", - "simple-git": "^2.40.0", - "socket.io": "^4.1.2" + "simple-git": "^2.41.1", + "socket.io": "^4.1.3" }, "_moduleAliases": { "node_helper": "js/node_helper.js", From 6b17f6aa288100006686055db281f637b6d398cf Mon Sep 17 00:00:00 2001 From: rejas Date: Wed, 14 Jul 2021 15:06:23 +0200 Subject: [PATCH 030/134] Final var conversions --- js/module.js | 4 +++- js/translator.js | 4 +++- translations/translations.js | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/js/module.js b/js/module.js index 4c454558..84222fa3 100644 --- a/js/module.js +++ b/js/module.js @@ -7,7 +7,7 @@ * By Michael Teeuw https://michaelteeuw.nl * MIT Licensed. */ -var Module = Class.extend({ +const Module = Class.extend({ /********************************************************* * All methods (and properties) below can be subclassed. * *********************************************************/ @@ -510,6 +510,8 @@ Module.register = function (name, moduleDefinition) { Module.definitions[name] = moduleDefinition; }; +window.Module = Module; + /** * Compare two semantic version numbers and return the difference. * diff --git a/js/translator.js b/js/translator.js index bff29d61..d69a9a1a 100644 --- a/js/translator.js +++ b/js/translator.js @@ -6,7 +6,7 @@ * By Christopher Fenner https://github.com/CFenner * MIT Licensed. */ -var Translator = (function () { +const Translator = (function () { /** * Load a JSON file via XHR. * @@ -151,3 +151,5 @@ var Translator = (function () { } }; })(); + +window.Translator = Translator; diff --git a/translations/translations.js b/translations/translations.js index cddd3b74..85182053 100644 --- a/translations/translations.js +++ b/translations/translations.js @@ -5,7 +5,7 @@ * MIT Licensed. */ -var translations = { +let translations = { en: "translations/en.json", // English nl: "translations/nl.json", // Dutch de: "translations/de.json", // German From 029745070238f4c98e5f4994c86da7a554c92a99 Mon Sep 17 00:00:00 2001 From: rejas Date: Wed, 14 Jul 2021 15:21:03 +0200 Subject: [PATCH 031/134] Remove eslint rules that now pass --- .eslintrc.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 0905057c..31aae27f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -23,9 +23,7 @@ }, "rules": { "prettier/prettier": "error", - "eqeqeq": "error", "no-prototype-builtins": "off", - "no-var": "error", "no-unused-vars": "off" } } From 2d7b8121d75ac62d349fd966e873c8c79290537e Mon Sep 17 00:00:00 2001 From: rejas Date: Wed, 14 Jul 2021 16:03:19 +0200 Subject: [PATCH 032/134] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ebe571f..c62a2634 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ _This release is scheduled to be released on 2021-10-01._ - Bump electron to v13 (and spectron to v15) and update other dependencies in package.json. - Refactor test configs, use default test config for all tests. +- Actually test all js and css files when lint script is run. ### Fixed From af5344dccda90a85cc3b924bdbf162660ac7aafb Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Wed, 14 Jul 2021 21:25:12 +0200 Subject: [PATCH 033/134] update github templates --- .github/CONTRIBUTING.md | 6 +++--- .github/ISSUE_TEMPLATE.md | 9 +++++---- CHANGELOG.md | 1 + 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 56c6cfa9..d66290d4 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -18,7 +18,7 @@ To run ESLint, use `npm run lint:js`. We use [StyleLint](https://stylelint.io) to lint our CSS. Our configuration is in our .stylelintrc file. -To run StyleLint, use `npm run lint:style`. +To run StyleLint, use `npm run lint:css`. ### Submitting Issues @@ -32,9 +32,9 @@ When submitting a new issue, please supply the following information: **Platform**: Place your platform here... give us your web browser/Electron version _and_ your hardware (Raspberry Pi 2/3/4, Windows, Mac, Linux, System V UNIX). -**Node Version**: Make sure it's version 10 or later. +**Node Version**: Make sure it's version 12 or later (recommended is 14). -**MagicMirror Version**: Now that the versions have split, tell us if you are using the PHP version (v1) or the newer JavaScript version (v2). +**MagicMirror Version**: Please let us now which version of MagicMirror you are running. It can be found in the `package.json` file. **Description**: Provide a detailed description about the issue and include specific details to help us understand the problem. Adding screenshots will help describing the problem. diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 87635902..69e08a6c 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -19,8 +19,9 @@ If you are facing an issue or found a bug while trying to install MagicMirror vi ## I found a bug in the MagicMirror Docker image -If you are facing an issue or found a bug while running MagicMirror inside a Docker container please create an issue in the GitHub repository of the MagicMirror Docker image: -[https://github.com/bastilimbach/docker-MagicMirror](https://github.com/bastilimbach/docker-MagicMirror) +If you are facing an issue or found a bug while running MagicMirror inside a Docker container please create an issue in the corresponding repository: +- karsten13/magicmirror: [https://gitlab.com/khassel/magicmirror](https://gitlab.com/khassel/magicmirror) +- (deprecated) bastilimbach/docker-magicmirror: [https://github.com/bastilimbach/docker-MagicMirror](https://github.com/bastilimbach/docker-MagicMirror) --- @@ -31,9 +32,9 @@ When submitting a new issue, please supply the following information: **Platform**: Place your platform here... give us your web browser/Electron version _and_ your hardware (Raspberry Pi 2/3/4, Windows, Mac, Linux, System V UNIX). -**Node Version**: Make sure it's version 10 or later. +**Node Version**: Make sure it's version 12 or later (recommended is 14). -**MagicMirror Version**: Please let us now which version of MagicMirror you are running. It can be found in the `package.log` file. +**MagicMirror Version**: Please let us now which version of MagicMirror you are running. It can be found in the `package.json` file. **Description**: Provide a detailed description about the issue and include specific details to help us understand the problem. Adding screenshots will help describing the problem. diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ebe571f..7e1f3b96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ _This release is scheduled to be released on 2021-10-01._ - Bump electron to v13 (and spectron to v15) and update other dependencies in package.json. - Refactor test configs, use default test config for all tests. +- Updated github templates. ### Fixed From 745a5f037661651f4eeb4636e19c1a1e0c8488e0 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 1 Aug 2021 09:39:07 +0200 Subject: [PATCH 034/134] Move ignoreToday logic into template to fix undefined forecast --- modules/default/weather/forecast.njk | 7 +++++-- modules/default/weather/weather.js | 4 ---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/modules/default/weather/forecast.njk b/modules/default/weather/forecast.njk index 92a575cf..32a2e4a6 100644 --- a/modules/default/weather/forecast.njk +++ b/modules/default/weather/forecast.njk @@ -2,6 +2,9 @@ {% set numSteps = forecast | calcNumSteps %} {% set currentStep = 0 %} + {% if config.ignoreToday %} + {% set forecast = forecast.splice(1) %} + {% endif %} {% set forecast = forecast.slice(0, numSteps) %} {% for f in forecast %} @@ -20,10 +23,10 @@ {{ f.minTemperature | roundValue | unit("temperature") | decimalSymbol }} {% if config.showPrecipitationAmount %} - {% if f.precipitationUnits %} + {% if f.precipitationUnits %} + {% else %}
{{ f.precipitation }}{{ f.precipitationUnits }} - {{ f.precipitation | unit("precip") }} diff --git a/modules/default/weather/weather.js b/modules/default/weather/weather.js index 3386277c..62182211 100644 --- a/modules/default/weather/weather.js +++ b/modules/default/weather/weather.js @@ -132,10 +132,6 @@ Module.register("weather", { getTemplateData: function () { const forecast = this.weatherProvider.weatherForecast(); - if (this.config.ignoreToday) { - forecast.splice(0, 1); - } - return { config: this.config, current: this.weatherProvider.currentWeather(), From be5f71f4a76a1c19e7ba45af7457d564986c7b5b Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 1 Aug 2021 09:40:44 +0200 Subject: [PATCH 035/134] Update CHANGELOG --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8a5479a..06b6404c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ _This release is scheduled to be released on 2021-10-01._ ### Fixed +- Fix undefined error with ignoreToday option in weather module (#2620). + ## [2.16.0] - 2021-07-01 Special thanks to the following contributors: @210954, @B1gG, @codac, @Crazylegstoo, @daniel, @earlman, @ezeholz, @FrancoisRmn, @jupadin, @khassel, @KristjanESPERANTO, @njwilliams, @oemel09, @r3wald, @rejas, @rico24, Faizan Ahmed. From ae3d552ad7dd85f66405595297236f72587fe16f Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 1 Aug 2021 09:52:04 +0200 Subject: [PATCH 036/134] Update dependencies --- package-lock.json | 191 +++++++++++++++++++++++----------------------- package.json | 12 +-- 2 files changed, 101 insertions(+), 102 deletions(-) diff --git a/package-lock.json b/package-lock.json index ae8d93d2..94e2e4d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "colors": "^1.4.0", "console-stamp": "^3.0.3", "digest-fetch": "^1.2.0", - "eslint": "^7.30.0", + "eslint": "^7.32.0", "express": "^4.17.1", "express-ipfilter": "^1.2.0", "feedme": "^2.0.2", @@ -23,13 +23,13 @@ "moment": "^2.29.1", "node-fetch": "^2.6.1", "node-ical": "^0.13.0", - "simple-git": "^2.41.1", + "simple-git": "^2.42.0", "socket.io": "^4.1.3" }, "devDependencies": { "eslint-config-prettier": "^8.3.0", - "eslint-plugin-jest": "^24.3.6", - "eslint-plugin-jsdoc": "^35.4.3", + "eslint-plugin-jest": "^24.4.0", + "eslint-plugin-jsdoc": "^36.0.6", "eslint-plugin-prettier": "^3.4.0", "express-basic-auth": "^1.2.0", "husky": "^7.0.1", @@ -39,7 +39,7 @@ "nyc": "^15.1.0", "prettier": "^2.3.2", "pretty-quick": "^3.1.1", - "sinon": "^11.1.1", + "sinon": "^11.1.2", "spectron": "^15.0.0", "stylelint": "^13.13.1", "stylelint-config-prettier": "^8.0.2", @@ -50,7 +50,7 @@ "node": ">=12" }, "optionalDependencies": { - "electron": "^13.1.6" + "electron": "^13.1.7" } }, "node_modules/@babel/code-frame": { @@ -703,23 +703,23 @@ } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.9.0-alpha.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.9.0-alpha.1.tgz", - "integrity": "sha512-Clxxc0PwpISoYYBibA+1L2qFJ7gvFVhI2Hos87S06K+Q0cXdOhZQJNKWuaQGPAeHjZEuUB/YoWOfwjuF2wirqA==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.10.7.tgz", + "integrity": "sha512-aNKZEoMESDzOBjKxCWrFuG50mcpMeKVBnBNko4+IZZ5t9zXYs8GT1KB0ZaOq1YUsKumDRc6YII/TQm309MJ0KQ==", "dev": true, "dependencies": { - "comment-parser": "1.1.6-beta.0", + "comment-parser": "1.2.3", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "1.0.4" + "jsdoc-type-pratt-parser": "1.1.1" }, "engines": { - "node": ">=12.0.0" + "node": "^12.20 || ^14.14.0 || ^16" } }, "node_modules/@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", @@ -1636,9 +1636,9 @@ } }, "node_modules/acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -2600,12 +2600,12 @@ } }, "node_modules/comment-parser": { - "version": "1.1.6-beta.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.1.6-beta.0.tgz", - "integrity": "sha512-q3cA8TSMyqW7wcPSYWzbO/rMahnXgzs4SLG/UIWXdEsnXTFPZkEkWAdNgPiHig2OzxgpPLOh4WwsmClDxndwHw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.3.tgz", + "integrity": "sha512-vnqDwBSXSsdAkGS5NjwMIPelE47q+UkEgWKHvCDNhVIIaQSUFY6sNnEYGzdoPGMdpV+7KR3ZkRd7oyWIjtuvJg==", "dev": true, "engines": { - "node": ">= 10.0.0" + "node": "^12.20 || ^14.14.0 || ^16" } }, "node_modules/commondir": { @@ -3243,12 +3243,11 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.6.tgz", - "integrity": "sha512-XiB55/JTaQpDFQrD9pulYnOGwaWeMyRIub5ispvoE2bWBvM5zVMLptwMLb0m3KTMrfSkzhedZvOu7fwYvR7L7Q==", + "version": "13.1.7", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.7.tgz", + "integrity": "sha512-sVfpP/0s6a82FK32LMuEe9L+aWZw15u3uYn9xUJArPjy4OZHteE6yM5871YCNXNiDnoCLQ5eqQWipiVgHsf8nQ==", "devOptional": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "@electron/get": "^1.0.1", "@types/node": "^14.6.2", @@ -3558,12 +3557,12 @@ } }, "node_modules/eslint": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", - "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dependencies": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", + "@eslint/eslintrc": "^0.4.3", "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -3626,9 +3625,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "24.3.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.6.tgz", - "integrity": "sha512-WOVH4TIaBLIeCX576rLcOgjNXqP+jNlCiEmRgFTfQtJ52DpwnIQKAVGlGPAN7CZ33bW6eNfHD6s8ZbEUTQubJg==", + "version": "24.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.4.0.tgz", + "integrity": "sha512-8qnt/hgtZ94E9dA6viqfViKBfkJwFHXgJmTWlMGDgunw1XJEGqm3eiPjDsTanM3/u/3Az82nyQM9GX7PM/QGmg==", "dev": true, "dependencies": { "@typescript-eslint/experimental-utils": "^4.0.1" @@ -3647,23 +3646,23 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "35.4.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-35.4.3.tgz", - "integrity": "sha512-hBEn+VNjVX0IKoZ2OdZs0Z1fU8CqZkBSzLqD8ZpwZEamrdi2TUgKvujvETe8gXYQ/67hpRtbR5iPFTgmWpRevw==", + "version": "36.0.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.6.tgz", + "integrity": "sha512-vOm27rI2SMfi1bOAYmzzGkanMCD/boquKwvN5ECi8EF9ASsXJwlnCzYtiOYpsDpbC2+6JXEHAmWMkqYNA3BWRw==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "^0.9.0-alpha.1", - "comment-parser": "1.1.6-beta.0", + "@es-joy/jsdoccomment": "0.10.7", + "comment-parser": "1.2.3", "debug": "^4.3.2", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "^1.0.4", + "jsdoc-type-pratt-parser": "^1.1.1", "lodash": "^4.17.21", "regextras": "^0.8.0", "semver": "^7.3.5", "spdx-expression-parse": "^3.0.1" }, "engines": { - "node": ">=12" + "node": "^12.20 || ^14.14.0 || ^16" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0" @@ -4537,9 +4536,9 @@ } }, "node_modules/globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dependencies": { "type-fest": "^0.20.2" }, @@ -6004,9 +6003,9 @@ } }, "node_modules/jsdoc-type-pratt-parser": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.0.4.tgz", - "integrity": "sha512-jzmW9gokeq9+bHPDR1nCeidMyFUikdZlbOhKzh9+/nJqB75XhpNKec1/UuxW5c4+O+Pi31Gc/dCboyfSm/pSpQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.1.1.tgz", + "integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==", "dev": true, "engines": { "node": ">=12.0.0" @@ -8580,9 +8579,9 @@ "dev": true }, "node_modules/simple-git": { - "version": "2.41.1", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.41.1.tgz", - "integrity": "sha512-n1STz1tfnemvYndzWakgKa0JB4s/LrUG4btXMetWB9N9ZoIAJQd0ZtWj9sBwWxIZ/X/tYdA/tq+KHfFNAGzZhQ==", + "version": "2.42.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.42.0.tgz", + "integrity": "sha512-illpUX0bcrdB3AyvBGLz0ToRVP7lXNJOGVybGVuVk7PpivPNK5YKJx2aagKdKbveaMtt0DCLK4/jfjDb6b2M2g==", "dependencies": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", @@ -8590,13 +8589,13 @@ } }, "node_modules/sinon": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-11.1.1.tgz", - "integrity": "sha512-ZSSmlkSyhUWbkF01Z9tEbxZLF/5tRC9eojCdFh33gtQaP7ITQVaMWQHGuFM7Cuf/KEfihuh1tTl3/ABju3AQMg==", + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-11.1.2.tgz", + "integrity": "sha512-59237HChms4kg7/sXhiRcUzdSkKuydDeTiamT/jesUVHshBgL8XAmhgFo0GfK6RruMDM/iRSij1EybmMog9cJw==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.8.3", - "@sinonjs/fake-timers": "^7.1.0", + "@sinonjs/fake-timers": "^7.1.2", "@sinonjs/samsam": "^6.0.2", "diff": "^5.0.0", "nise": "^5.1.0", @@ -10915,20 +10914,20 @@ "requires": {} }, "@es-joy/jsdoccomment": { - "version": "0.9.0-alpha.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.9.0-alpha.1.tgz", - "integrity": "sha512-Clxxc0PwpISoYYBibA+1L2qFJ7gvFVhI2Hos87S06K+Q0cXdOhZQJNKWuaQGPAeHjZEuUB/YoWOfwjuF2wirqA==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.10.7.tgz", + "integrity": "sha512-aNKZEoMESDzOBjKxCWrFuG50mcpMeKVBnBNko4+IZZ5t9zXYs8GT1KB0ZaOq1YUsKumDRc6YII/TQm309MJ0KQ==", "dev": true, "requires": { - "comment-parser": "1.1.6-beta.0", + "comment-parser": "1.2.3", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "1.0.4" + "jsdoc-type-pratt-parser": "1.1.1" } }, "@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", @@ -11679,9 +11678,9 @@ } }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "requires": {} }, "acorn-walk": { @@ -12398,9 +12397,9 @@ } }, "comment-parser": { - "version": "1.1.6-beta.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.1.6-beta.0.tgz", - "integrity": "sha512-q3cA8TSMyqW7wcPSYWzbO/rMahnXgzs4SLG/UIWXdEsnXTFPZkEkWAdNgPiHig2OzxgpPLOh4WwsmClDxndwHw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.3.tgz", + "integrity": "sha512-vnqDwBSXSsdAkGS5NjwMIPelE47q+UkEgWKHvCDNhVIIaQSUFY6sNnEYGzdoPGMdpV+7KR3ZkRd7oyWIjtuvJg==", "dev": true }, "commondir": { @@ -12917,9 +12916,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.6.tgz", - "integrity": "sha512-XiB55/JTaQpDFQrD9pulYnOGwaWeMyRIub5ispvoE2bWBvM5zVMLptwMLb0m3KTMrfSkzhedZvOu7fwYvR7L7Q==", + "version": "13.1.7", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.7.tgz", + "integrity": "sha512-sVfpP/0s6a82FK32LMuEe9L+aWZw15u3uYn9xUJArPjy4OZHteE6yM5871YCNXNiDnoCLQ5eqQWipiVgHsf8nQ==", "devOptional": true, "requires": { "@electron/get": "^1.0.1", @@ -13138,12 +13137,12 @@ } }, "eslint": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", - "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", + "@eslint/eslintrc": "^0.4.3", "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -13202,25 +13201,25 @@ "requires": {} }, "eslint-plugin-jest": { - "version": "24.3.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.6.tgz", - "integrity": "sha512-WOVH4TIaBLIeCX576rLcOgjNXqP+jNlCiEmRgFTfQtJ52DpwnIQKAVGlGPAN7CZ33bW6eNfHD6s8ZbEUTQubJg==", + "version": "24.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.4.0.tgz", + "integrity": "sha512-8qnt/hgtZ94E9dA6viqfViKBfkJwFHXgJmTWlMGDgunw1XJEGqm3eiPjDsTanM3/u/3Az82nyQM9GX7PM/QGmg==", "dev": true, "requires": { "@typescript-eslint/experimental-utils": "^4.0.1" } }, "eslint-plugin-jsdoc": { - "version": "35.4.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-35.4.3.tgz", - "integrity": "sha512-hBEn+VNjVX0IKoZ2OdZs0Z1fU8CqZkBSzLqD8ZpwZEamrdi2TUgKvujvETe8gXYQ/67hpRtbR5iPFTgmWpRevw==", + "version": "36.0.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.6.tgz", + "integrity": "sha512-vOm27rI2SMfi1bOAYmzzGkanMCD/boquKwvN5ECi8EF9ASsXJwlnCzYtiOYpsDpbC2+6JXEHAmWMkqYNA3BWRw==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "^0.9.0-alpha.1", - "comment-parser": "1.1.6-beta.0", + "@es-joy/jsdoccomment": "0.10.7", + "comment-parser": "1.2.3", "debug": "^4.3.2", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "^1.0.4", + "jsdoc-type-pratt-parser": "^1.1.1", "lodash": "^4.17.21", "regextras": "^0.8.0", "semver": "^7.3.5", @@ -13882,9 +13881,9 @@ } }, "globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "requires": { "type-fest": "^0.20.2" } @@ -14989,9 +14988,9 @@ } }, "jsdoc-type-pratt-parser": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.0.4.tgz", - "integrity": "sha512-jzmW9gokeq9+bHPDR1nCeidMyFUikdZlbOhKzh9+/nJqB75XhpNKec1/UuxW5c4+O+Pi31Gc/dCboyfSm/pSpQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.1.1.tgz", + "integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==", "dev": true }, "jsdom": { @@ -16983,9 +16982,9 @@ "dev": true }, "simple-git": { - "version": "2.41.1", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.41.1.tgz", - "integrity": "sha512-n1STz1tfnemvYndzWakgKa0JB4s/LrUG4btXMetWB9N9ZoIAJQd0ZtWj9sBwWxIZ/X/tYdA/tq+KHfFNAGzZhQ==", + "version": "2.42.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.42.0.tgz", + "integrity": "sha512-illpUX0bcrdB3AyvBGLz0ToRVP7lXNJOGVybGVuVk7PpivPNK5YKJx2aagKdKbveaMtt0DCLK4/jfjDb6b2M2g==", "requires": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", @@ -16993,13 +16992,13 @@ } }, "sinon": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-11.1.1.tgz", - "integrity": "sha512-ZSSmlkSyhUWbkF01Z9tEbxZLF/5tRC9eojCdFh33gtQaP7ITQVaMWQHGuFM7Cuf/KEfihuh1tTl3/ABju3AQMg==", + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-11.1.2.tgz", + "integrity": "sha512-59237HChms4kg7/sXhiRcUzdSkKuydDeTiamT/jesUVHshBgL8XAmhgFo0GfK6RruMDM/iRSij1EybmMog9cJw==", "dev": true, "requires": { "@sinonjs/commons": "^1.8.3", - "@sinonjs/fake-timers": "^7.1.0", + "@sinonjs/fake-timers": "^7.1.2", "@sinonjs/samsam": "^6.0.2", "diff": "^5.0.0", "nise": "^5.1.0", diff --git a/package.json b/package.json index b0b5426d..9f51c5d8 100644 --- a/package.json +++ b/package.json @@ -46,8 +46,8 @@ "homepage": "https://magicmirror.builders", "devDependencies": { "eslint-config-prettier": "^8.3.0", - "eslint-plugin-jest": "^24.3.6", - "eslint-plugin-jsdoc": "^35.4.3", + "eslint-plugin-jest": "^24.4.0", + "eslint-plugin-jsdoc": "^36.0.6", "eslint-plugin-prettier": "^3.4.0", "express-basic-auth": "^1.2.0", "husky": "^7.0.1", @@ -57,7 +57,7 @@ "nyc": "^15.1.0", "prettier": "^2.3.2", "pretty-quick": "^3.1.1", - "sinon": "^11.1.1", + "sinon": "^11.1.2", "spectron": "^15.0.0", "stylelint": "^13.13.1", "stylelint-config-prettier": "^8.0.2", @@ -65,13 +65,13 @@ "stylelint-prettier": "^1.2.0" }, "optionalDependencies": { - "electron": "^13.1.6" + "electron": "^13.1.7" }, "dependencies": { "colors": "^1.4.0", "console-stamp": "^3.0.3", "digest-fetch": "^1.2.0", - "eslint": "^7.30.0", + "eslint": "^7.32.0", "express": "^4.17.1", "express-ipfilter": "^1.2.0", "feedme": "^2.0.2", @@ -81,7 +81,7 @@ "moment": "^2.29.1", "node-fetch": "^2.6.1", "node-ical": "^0.13.0", - "simple-git": "^2.41.1", + "simple-git": "^2.42.0", "socket.io": "^4.1.3" }, "_moduleAliases": { From cd18794fca07afcf388c30a63e00425349068e96 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 1 Aug 2021 09:53:28 +0200 Subject: [PATCH 037/134] Update jsdocs --- .../weather/providers/openweathermap.js | 2 +- modules/default/weather/providers/smhi.js | 26 +++++++++---------- tests/e2e/modules/mocks/weather_current.js | 3 ++- tests/e2e/modules/mocks/weather_forecast.js | 3 ++- tests/e2e/modules/weather_spec.js | 13 +++++++--- 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/modules/default/weather/providers/openweathermap.js b/modules/default/weather/providers/openweathermap.js index bbe74d3b..ec17904a 100755 --- a/modules/default/weather/providers/openweathermap.js +++ b/modules/default/weather/providers/openweathermap.js @@ -89,7 +89,7 @@ WeatherProvider.register("openweathermap", { /** * Overrides method for setting config to check if endpoint is correct for hourly * - * @param config + * @param {object} config The configuration object */ setConfig(config) { this.config = config; diff --git a/modules/default/weather/providers/smhi.js b/modules/default/weather/providers/smhi.js index d84d9081..c7155193 100644 --- a/modules/default/weather/providers/smhi.js +++ b/modules/default/weather/providers/smhi.js @@ -56,7 +56,7 @@ WeatherProvider.register("smhi", { /** * Overrides method for setting config with checks for the precipitationValue being unset or invalid * - * @param config + * @param {object} config The configuration object */ setConfig(config) { this.config = config; @@ -69,8 +69,8 @@ WeatherProvider.register("smhi", { /** * Of all the times returned find out which one is closest to the current time, should be the first if the data isn't old. * - * @param times - * @returns {undefined} + * @param {object[]} times Array of time objects + * @returns {object} The weatherdata closest to the current time */ getClosestToCurrentTime(times) { let now = moment(); @@ -87,7 +87,7 @@ WeatherProvider.register("smhi", { /** * Get the forecast url for the configured coordinates * - * @returns {string} + * @returns {string} the url for the specified coordinates */ getURL() { let lon = this.config.lon; @@ -100,8 +100,8 @@ WeatherProvider.register("smhi", { * The returned units is always in metric system. * Requires coordinates to determine if its daytime or nighttime to know which icon to use and also to set sunrise and sunset. * - * @param weatherData - * @param coordinates + * @param {object} weatherData Weatherdata to convert + * @param {object} coordinates Coordinates of the locations of the weather * @returns {WeatherObject} */ convertWeatherDataToObject(weatherData, coordinates) { @@ -146,7 +146,7 @@ WeatherProvider.register("smhi", { * Takes all of the data points and converts it to one WeatherObject per day. * * @param allWeatherData - * @param coordinates + * @param {object} coordinates * @returns {*[]} */ convertWeatherDataGroupedByDay(allWeatherData, coordinates) { @@ -194,8 +194,8 @@ WeatherProvider.register("smhi", { /** * Resolve coordinates from the response data (probably preferably to use this if it's not matching the config values exactly) * - * @param data - * @returns {{lon, lat}} + * @param {object} data Response data from the weather service + * @returns {{lon, lat}} the lat/long coordinates of the data */ resolveCoordinates(data) { return { lat: data.geometry.coordinates[0][1], lon: data.geometry.coordinates[0][0] }; @@ -215,8 +215,8 @@ WeatherProvider.register("smhi", { * The distance between the data points is increasing in the data the more distant the prediction is. * Find these gaps and fill them with the previous hours data to make the data returned a complete set. * - * @param data - * @returns {*[]} + * @param {object[]} data Response data from the weather service + * @returns {object[]} Given data with filled gaps */ fillInGaps(data) { let result = []; @@ -238,8 +238,8 @@ WeatherProvider.register("smhi", { * Helper method to fetch a property from the returned data set. * The returned values is an array with always one value in it. * - * @param currentWeatherData - * @param name + * @param {object} weatherData Weatherdata to fetch from + * @param {string} name The name of the property * @returns {unknown} */ paramValue(currentWeatherData, name) { diff --git a/tests/e2e/modules/mocks/weather_current.js b/tests/e2e/modules/mocks/weather_current.js index 3988212c..c466129a 100644 --- a/tests/e2e/modules/mocks/weather_current.js +++ b/tests/e2e/modules/mocks/weather_current.js @@ -1,7 +1,8 @@ const _ = require("lodash"); /** - * @param extendedData + * @param {object} extendedData extra data to add to the default mock data + * @returns {string} mocked current weather data */ function generateWeather(extendedData = {}) { return JSON.stringify( diff --git a/tests/e2e/modules/mocks/weather_forecast.js b/tests/e2e/modules/mocks/weather_forecast.js index 7943e073..4c0ef9c9 100644 --- a/tests/e2e/modules/mocks/weather_forecast.js +++ b/tests/e2e/modules/mocks/weather_forecast.js @@ -1,7 +1,8 @@ const _ = require("lodash"); /** - * @param extendedData + * @param {object} extendedData extra data to add to the default mock data + * @returns {string} mocked forecast weather data */ function generateWeatherForecast(extendedData = {}) { return JSON.stringify( diff --git a/tests/e2e/modules/weather_spec.js b/tests/e2e/modules/weather_spec.js index a9bf2cb8..6be9d6e2 100644 --- a/tests/e2e/modules/weather_spec.js +++ b/tests/e2e/modules/weather_spec.js @@ -13,7 +13,9 @@ describe("Weather module", function () { helpers.setupTimeout(this); /** - * @param responses + * + * @param {object} responses mocked data to be returned + * @returns {Promise} Resolved once the electron app is started */ async function setup(responses) { app = await helpers.startApplication({ @@ -27,15 +29,18 @@ describe("Weather module", function () { } /** - * @param element + * + * @param {string} element css selector + * @returns {Promise} Promise with the element once it is rendered */ async function getElement(element) { return await app.client.$(element); } /** - * @param element - * @param result + * @param {string} element css selector + * @param {string} result Expected text in given selector + * @returns {Promise} Promise with True if the text matches */ async function getText(element, result) { const elem = await getElement(element); From f84f590f1d55944d4501698c571f236386a6df17 Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 24 Jul 2021 09:49:46 +0200 Subject: [PATCH 038/134] Start filling last gaps of jsdoc --- tests/unit/classes/translator_spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/classes/translator_spec.js b/tests/unit/classes/translator_spec.js index 2756b41b..09e14f20 100644 --- a/tests/unit/classes/translator_spec.js +++ b/tests/unit/classes/translator_spec.js @@ -68,7 +68,7 @@ describe("Translator", function () { }; /** - * @param Translator + * @param {object} Translator the global Translator object */ function setTranslations(Translator) { Translator.translations = translations; From 3a5052c871eee93cb6e52ad81efe9b6f8c118a09 Mon Sep 17 00:00:00 2001 From: rejas Date: Thu, 5 Aug 2021 16:38:57 +0200 Subject: [PATCH 039/134] Final jsdoc comments --- modules/default/weather/providers/smhi.js | 25 +++++++++++------------ 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/modules/default/weather/providers/smhi.js b/modules/default/weather/providers/smhi.js index c7155193..244fc1de 100644 --- a/modules/default/weather/providers/smhi.js +++ b/modules/default/weather/providers/smhi.js @@ -102,7 +102,7 @@ WeatherProvider.register("smhi", { * * @param {object} weatherData Weatherdata to convert * @param {object} coordinates Coordinates of the locations of the weather - * @returns {WeatherObject} + * @returns {WeatherObject} The converted weatherdata at the specified location */ convertWeatherDataToObject(weatherData, coordinates) { let currentWeather = new WeatherObject("metric", "metric", "metric"); //Weather data is only for Sweden and nobody in Sweden would use imperial @@ -145,9 +145,9 @@ WeatherProvider.register("smhi", { /** * Takes all of the data points and converts it to one WeatherObject per day. * - * @param allWeatherData - * @param {object} coordinates - * @returns {*[]} + * @param {object[]} allWeatherData Array of weatherdata + * @param {object} coordinates Coordinates of the locations of the weather + * @returns {WeatherObject[]} Array of weatherobjects */ convertWeatherDataGroupedByDay(allWeatherData, coordinates) { let currentWeather; @@ -204,8 +204,8 @@ WeatherProvider.register("smhi", { /** * Checks if the weatherObject is at dayTime. * - * @param weatherObject - * @returns {boolean} + * @param {WeatherObject} weatherObject The weatherObject to look at + * @returns {boolean} true if it is at dayTime */ isDayTime(weatherObject) { return weatherObject.date.isBetween(weatherObject.sunrise, weatherObject.sunset, undefined, "[]"); @@ -235,12 +235,11 @@ WeatherProvider.register("smhi", { }, /** - * Helper method to fetch a property from the returned data set. - * The returned values is an array with always one value in it. + * Helper method to get a property from the returned data set. * - * @param {object} weatherData Weatherdata to fetch from + * @param {object} currentWeatherData Weatherdata to get from * @param {string} name The name of the property - * @returns {unknown} + * @returns {*} The value of the property in the weatherdata */ paramValue(currentWeatherData, name) { return currentWeatherData.parameters.filter((p) => p.name === name).flatMap((p) => p.values)[0]; @@ -251,9 +250,9 @@ WeatherProvider.register("smhi", { * Uses different icons depending if its daytime or nighttime. * SHMI's description of what the numeric value means is the comment after the case. * - * @param input - * @param isDayTime - * @returns {string|string} + * @param {number} input The smhi icon value + * @param {boolean} isDayTime True if the icon should be for daytime, false for nightime + * @returns {string} The icon name for the MagicMirror */ convertWeatherType(input, isDayTime) { switch (input) { From 385c4c32f917434b25b908c0bfff15974c96daaf Mon Sep 17 00:00:00 2001 From: rejas Date: Thu, 5 Aug 2021 16:39:14 +0200 Subject: [PATCH 040/134] Update dependencies --- package-lock.json | 32 ++++++++++++++++---------------- package.json | 4 ++-- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 94e2e4d9..82c8dcbd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,7 @@ "express-basic-auth": "^1.2.0", "husky": "^7.0.1", "jest": "^27.0.6", - "jsdom": "^16.6.0", + "jsdom": "^16.7.0", "lodash": "^4.17.21", "nyc": "^15.1.0", "prettier": "^2.3.2", @@ -50,7 +50,7 @@ "node": ">=12" }, "optionalDependencies": { - "electron": "^13.1.7" + "electron": "^13.1.8" } }, "node_modules/@babel/code-frame": { @@ -3243,9 +3243,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron": { - "version": "13.1.7", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.7.tgz", - "integrity": "sha512-sVfpP/0s6a82FK32LMuEe9L+aWZw15u3uYn9xUJArPjy4OZHteE6yM5871YCNXNiDnoCLQ5eqQWipiVgHsf8nQ==", + "version": "13.1.8", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.8.tgz", + "integrity": "sha512-ei2ZyyG81zUOlvm5Zxri668TdH5GNLY0wF+XrC2FRCqa8AABAPjJIWTRkhFEr/H6PDVPNZjMPvSs3XhHyVVk2g==", "devOptional": true, "hasInstallScript": true, "dependencies": { @@ -6012,9 +6012,9 @@ } }, "node_modules/jsdom": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", - "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "dependencies": { "abab": "^2.0.5", @@ -6042,7 +6042,7 @@ "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.5.0", - "ws": "^7.4.5", + "ws": "^7.4.6", "xml-name-validator": "^3.0.0" }, "engines": { @@ -12916,9 +12916,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron": { - "version": "13.1.7", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.7.tgz", - "integrity": "sha512-sVfpP/0s6a82FK32LMuEe9L+aWZw15u3uYn9xUJArPjy4OZHteE6yM5871YCNXNiDnoCLQ5eqQWipiVgHsf8nQ==", + "version": "13.1.8", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.8.tgz", + "integrity": "sha512-ei2ZyyG81zUOlvm5Zxri668TdH5GNLY0wF+XrC2FRCqa8AABAPjJIWTRkhFEr/H6PDVPNZjMPvSs3XhHyVVk2g==", "devOptional": true, "requires": { "@electron/get": "^1.0.1", @@ -14994,9 +14994,9 @@ "dev": true }, "jsdom": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", - "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "requires": { "abab": "^2.0.5", @@ -15024,7 +15024,7 @@ "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.5.0", - "ws": "^7.4.5", + "ws": "^7.4.6", "xml-name-validator": "^3.0.0" }, "dependencies": { diff --git a/package.json b/package.json index 9f51c5d8..cfc834cb 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "express-basic-auth": "^1.2.0", "husky": "^7.0.1", "jest": "^27.0.6", - "jsdom": "^16.6.0", + "jsdom": "^16.7.0", "lodash": "^4.17.21", "nyc": "^15.1.0", "prettier": "^2.3.2", @@ -65,7 +65,7 @@ "stylelint-prettier": "^1.2.0" }, "optionalDependencies": { - "electron": "^13.1.7" + "electron": "^13.1.8" }, "dependencies": { "colors": "^1.4.0", From 3d19a08cc7f2d33eec2568f45c1ba7b477bd868e Mon Sep 17 00:00:00 2001 From: rejas Date: Thu, 5 Aug 2021 16:40:49 +0200 Subject: [PATCH 041/134] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06b6404c..b6e7ba29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ _This release is scheduled to be released on 2021-10-01._ - Refactor test configs, use default test config for all tests. - Updated github templates. - Actually test all js and css files when lint script is run. +- Update jsdocs and print warnings during testing too ### Fixed From 490151267ad19f1d18cf13f3c7031d08cee3fb7a Mon Sep 17 00:00:00 2001 From: rejas Date: Thu, 5 Aug 2021 16:41:10 +0200 Subject: [PATCH 042/134] Print warnings about jsdoc during testing too --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cfc834cb..cec44b26 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "test:e2e": "NODE_ENV=test jest --selectProjects e2e -i --forceExit", "test:unit": "NODE_ENV=test jest --selectProjects unit -i --forceExit", "test:prettier": "prettier . --check", - "test:js": "eslint 'js/**/*.js' 'modules/default/**/*.js' 'clientonly/*.js' 'serveronly/*.js' 'translations/*.js' 'vendor/*.js' 'tests/**/*.js' 'config/*' --config .eslintrc.json --quiet", + "test:js": "eslint 'js/**/*.js' 'modules/default/**/*.js' 'clientonly/*.js' 'serveronly/*.js' 'translations/*.js' 'vendor/*.js' 'tests/**/*.js' 'config/*' --config .eslintrc.json", "test:css": "stylelint 'css/main.css' 'fonts/*.css' 'modules/default/**/*.css' 'vendor/*.css' --config .stylelintrc.json", "test:calendar": "node ./modules/default/calendar/debug.js", "config:check": "node js/check_config.js", From f9639d9705d165c815be0df3b9a6f844be7cb29f Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 7 Aug 2021 10:05:45 +0200 Subject: [PATCH 043/134] Refactor clock to allow finer placement of analog clock --- modules/default/clock/clock.js | 163 ++++++++++--------------- modules/default/clock/clock_styles.css | 27 +++- 2 files changed, 92 insertions(+), 98 deletions(-) diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index fbab09a0..9b6d0a49 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -12,11 +12,14 @@ Module.register("clock", { displayType: "digital", // options: digital, analog, both timeFormat: config.timeFormat, + timezone: null, + displaySeconds: true, showPeriod: true, showPeriodUpper: false, clockBold: false, showDate: true, + showTime: false, showWeek: false, dateFormat: "dddd, LL", @@ -24,9 +27,8 @@ Module.register("clock", { analogSize: "200px", analogFace: "simple", // options: 'none', 'simple', 'face-###' (where ### is 001 to 012 inclusive) analogPlacement: "bottom", // options: 'top', 'bottom', 'left', 'right' - analogShowDate: "top", // options: false, 'top', or 'bottom' + analogShowDate: "top", // OBSOLETE, can be replaced with analogPlacement and showTime, options: false, 'top', or 'bottom' secondsColor: "#888888", - timezone: null, showSunTimes: false, showMoonTimes: false, @@ -89,11 +91,20 @@ Module.register("clock", { // Override dom generator. getDom: function () { const wrapper = document.createElement("div"); + wrapper.classList.add("clockGrid"); + + /************************************ + * Create wrappers for analog and digital clock + */ + const analogWrapper = document.createElement("div"); + analogWrapper.className = "clockCircle"; + const digitalWrapper = document.createElement("div"); + digitalWrapper.className = "digital"; + digitalWrapper.style.gridArea = "center"; /************************************ * Create wrappers for DIGITAL clock */ - const dateWrapper = document.createElement("div"); const timeWrapper = document.createElement("div"); const secondsWrapper = document.createElement("sup"); @@ -101,10 +112,11 @@ Module.register("clock", { const sunWrapper = document.createElement("div"); const moonWrapper = document.createElement("div"); const weekWrapper = document.createElement("div"); + // Style Wrappers dateWrapper.className = "date normal medium"; timeWrapper.className = "time bright large light"; - secondsWrapper.className = "dimmed"; + secondsWrapper.className = "seconds dimmed"; sunWrapper.className = "sun dimmed small"; moonWrapper.className = "moon dimmed small"; weekWrapper.className = "week dimmed medium"; @@ -124,7 +136,7 @@ Module.register("clock", { hourSymbol = "h"; } - if (this.config.clockBold === true) { + if (this.config.clockBold) { timeString = now.format(hourSymbol + '[]mm[]'); } else { timeString = now.format(hourSymbol + ":mm"); @@ -132,22 +144,24 @@ Module.register("clock", { if (this.config.showDate) { dateWrapper.innerHTML = now.format(this.config.dateFormat); + digitalWrapper.appendChild(dateWrapper); } - if (this.config.showWeek) { - weekWrapper.innerHTML = this.translate("WEEK", { weekNumber: now.week() }); - } - timeWrapper.innerHTML = timeString; - secondsWrapper.innerHTML = now.format("ss"); - if (this.config.showPeriodUpper) { - periodWrapper.innerHTML = now.format("A"); - } else { - periodWrapper.innerHTML = now.format("a"); - } - if (this.config.displaySeconds) { - timeWrapper.appendChild(secondsWrapper); - } - if (this.config.showPeriod && this.config.timeFormat !== 24) { - timeWrapper.appendChild(periodWrapper); + + if (this.config.showTime || this.config.displayType !== "analog") { + timeWrapper.innerHTML = timeString; + secondsWrapper.innerHTML = now.format("ss"); + if (this.config.showPeriodUpper) { + periodWrapper.innerHTML = now.format("A"); + } else { + periodWrapper.innerHTML = now.format("a"); + } + if (this.config.displaySeconds) { + timeWrapper.appendChild(secondsWrapper); + } + if (this.config.showPeriod && this.config.timeFormat !== 24) { + timeWrapper.appendChild(periodWrapper); + } + digitalWrapper.appendChild(timeWrapper); } /** @@ -165,6 +179,9 @@ Module.register("clock", { return moment(time).format(formatString); } + /**************************************************************** + * Create wrappers for Sun Times, only if specified in config + */ if (this.config.showSunTimes) { const sunTimes = SunCalc.getTimes(now, this.config.lat, this.config.lon); const isVisible = now.isBetween(sunTimes.sunrise, sunTimes.sunset); @@ -191,7 +208,12 @@ Module.register("clock", { ' ' + formatTime(this.config, sunTimes.sunset) + ""; + digitalWrapper.appendChild(sunWrapper); } + + /**************************************************************** + * Create wrappers for Moon Times, only if specified in config + */ if (this.config.showMoonTimes) { const moonIllumination = SunCalc.getMoonIllumination(now.toDate()); const moonTimes = SunCalc.getMoonTimes(now, this.config.lat, this.config.lon); @@ -217,13 +239,17 @@ Module.register("clock", { ' ' + (moonSet ? formatTime(this.config, moonSet) : "...") + ""; + digitalWrapper.appendChild(moonWrapper); + } + + if (this.config.showWeek) { + weekWrapper.innerHTML = this.translate("WEEK", { weekNumber: now.week() }); + digitalWrapper.appendChild(weekWrapper); } /**************************************************************** * Create wrappers for ANALOG clock, only if specified in config */ - const clockCircle = document.createElement("div"); - if (this.config.displayType !== "digital") { // If it isn't 'digital', then an 'analog' clock was also requested @@ -236,19 +262,18 @@ Module.register("clock", { hour = ((now.hours() % 12) / 12) * 360 + 90 + minute / 12; // Create wrappers - clockCircle.className = "clockCircle"; - clockCircle.style.width = this.config.analogSize; - clockCircle.style.height = this.config.analogSize; + analogWrapper.style.width = this.config.analogSize; + analogWrapper.style.height = this.config.analogSize; if (this.config.analogFace !== "" && this.config.analogFace !== "simple" && this.config.analogFace !== "none") { - clockCircle.style.background = "url(" + this.data.path + "faces/" + this.config.analogFace + ".svg)"; - clockCircle.style.backgroundSize = "100%"; + analogWrapper.style.background = "url(" + this.data.path + "faces/" + this.config.analogFace + ".svg)"; + analogWrapper.style.backgroundSize = "100%"; // The following line solves issue: https://github.com/MichMich/MagicMirror/issues/611 - // clockCircle.style.border = "1px solid black"; - clockCircle.style.border = "rgba(0, 0, 0, 0.1)"; //Updated fix for Issue 611 where non-black backgrounds are used + // analogWrapper.style.border = "1px solid black"; + analogWrapper.style.border = "rgba(0, 0, 0, 0.1)"; //Updated fix for Issue 611 where non-black backgrounds are used } else if (this.config.analogFace !== "none") { - clockCircle.style.border = "2px solid white"; + analogWrapper.style.border = "2px solid white"; } const clockFace = document.createElement("div"); clockFace.className = "clockFace"; @@ -274,84 +299,28 @@ Module.register("clock", { clockSecond.style.backgroundColor = this.config.secondsColor; clockFace.appendChild(clockSecond); } - clockCircle.appendChild(clockFace); + analogWrapper.appendChild(clockFace); } /******************************************* - * Combine wrappers, check for .displayType + * Update placement, respect old analogShowDate even if its not needed anymore */ - - if (this.config.displayType === "digital") { - // Display only a digital clock - wrapper.appendChild(dateWrapper); - wrapper.appendChild(timeWrapper); - wrapper.appendChild(sunWrapper); - wrapper.appendChild(moonWrapper); - wrapper.appendChild(weekWrapper); - } else if (this.config.displayType === "analog") { + if (this.config.displayType === "analog") { // Display only an analog clock - - if (this.config.showWeek) { - weekWrapper.style.paddingBottom = "15px"; - } else { - dateWrapper.style.paddingBottom = "15px"; - } - if (this.config.analogShowDate === "top") { - wrapper.appendChild(dateWrapper); - wrapper.appendChild(weekWrapper); - wrapper.appendChild(clockCircle); + wrapper.classList.add("clockGrid--bottom"); } else if (this.config.analogShowDate === "bottom") { - wrapper.appendChild(clockCircle); - wrapper.appendChild(dateWrapper); - wrapper.appendChild(weekWrapper); + wrapper.classList.add("clockGrid--top"); } else { - wrapper.appendChild(clockCircle); - } - } else { - // Both clocks have been configured, check position - const placement = this.config.analogPlacement; - - const analogWrapper = document.createElement("div"); - analogWrapper.id = "analog"; - analogWrapper.style.cssFloat = "none"; - analogWrapper.appendChild(clockCircle); - - const digitalWrapper = document.createElement("div"); - digitalWrapper.id = "digital"; - digitalWrapper.style.cssFloat = "none"; - digitalWrapper.appendChild(dateWrapper); - digitalWrapper.appendChild(timeWrapper); - digitalWrapper.appendChild(sunWrapper); - digitalWrapper.appendChild(moonWrapper); - digitalWrapper.appendChild(weekWrapper); - - const appendClocks = (condition, pos1, pos2) => { - const padding = [0, 0, 0, 0]; - padding[placement === condition ? pos1 : pos2] = "20px"; - analogWrapper.style.padding = padding.join(" "); - if (placement === condition) { - wrapper.appendChild(analogWrapper); - wrapper.appendChild(digitalWrapper); - } else { - wrapper.appendChild(digitalWrapper); - wrapper.appendChild(analogWrapper); - } - }; - - if (placement === "left" || placement === "right") { - digitalWrapper.style.display = "inline-block"; - digitalWrapper.style.verticalAlign = "top"; - analogWrapper.style.display = "inline-block"; - - appendClocks("left", 1, 3); - } else { - digitalWrapper.style.textAlign = "center"; - - appendClocks("top", 2, 0); + //analogWrapper.style.gridArea = "center"; } + } else if (this.config.displayType === "both") { + wrapper.classList.add("clockGrid--" + this.config.analogPlacement); } + wrapper.appendChild(analogWrapper); + wrapper.appendChild(digitalWrapper); + // Return the wrapper to the dom. return wrapper; } diff --git a/modules/default/clock/clock_styles.css b/modules/default/clock/clock_styles.css index 0e74fd7a..f15677b2 100644 --- a/modules/default/clock/clock_styles.css +++ b/modules/default/clock/clock_styles.css @@ -1,5 +1,26 @@ +.clockGrid { + display: inline-flex; + gap: 15px; +} + +.clockGrid--left { + flex-direction: row; +} + +.clockGrid--right { + flex-direction: row-reverse; +} + +.clockGrid--top { + flex-direction: column; +} + +.clockGrid--bottom { + flex-direction: column-reverse; +} + .clockCircle { - margin: 0 auto; + place-self: center; position: relative; border-radius: 50%; background-size: 100%; @@ -61,6 +82,10 @@ transform-origin: 50% 100%; } +.digital { + text-align: center; +} + .module.clock .sun, .module.clock .moon { display: flex; From 934b156ebb21233d4b1ea208f2a10b0d55d4ded7 Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 7 Aug 2021 13:33:11 +0200 Subject: [PATCH 044/134] Update CHANGELOG --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6e7ba29..a1097bad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ _This release is scheduled to be released on 2021-10-01._ ### Added +- Added showTime parameter to clock module for enabling/disabling time display in analog clock + ### Updated - Bump electron to v13 (and spectron to v15) and update other dependencies in package.json. From 1a8413d8f01feeb7f178ca9ff0f20b2f0aa2e8de Mon Sep 17 00:00:00 2001 From: Adam Piontek Date: Tue, 10 Aug 2021 18:54:34 -0400 Subject: [PATCH 045/134] update weathergov provider to try fetching not just current but also forecast when API URLs available --- CHANGELOG.md | 1 + modules/default/weather/providers/weathergov.js | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6e7ba29..8d60f0a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ _This release is scheduled to be released on 2021-10-01._ - Updated github templates. - Actually test all js and css files when lint script is run. - Update jsdocs and print warnings during testing too +- Update weathergov provider to try fetching not just current, but also foreacst, when API URLs available. ### Fixed diff --git a/modules/default/weather/providers/weathergov.js b/modules/default/weather/providers/weathergov.js index ee418edc..ab46b4ee 100755 --- a/modules/default/weather/providers/weathergov.js +++ b/modules/default/weather/providers/weathergov.js @@ -21,7 +21,7 @@ WeatherProvider.register("weathergov", { // Set the default config properties that is specific to this provider defaults: { - apiBase: "https://api.weatherbit.io/v2.0", + apiBase: "https://api.weather.gov/points/", weatherEndpoint: "/forecast", lat: 0, lon: 0 @@ -129,7 +129,12 @@ WeatherProvider.register("weathergov", { .finally(() => { // excellent, let's fetch some actual wx data this.configURLs = true; - this.fetchCurrentWeather(); + // handle 'forecast' config, fall back to 'current' + if (config.type == "forecast") { + this.fetchWeatherForecast(); + } else { + this.fetchCurrentWeather(); + } }); }, From a1fc38c5fe66043055e2cb4fb23707a47d05af45 Mon Sep 17 00:00:00 2001 From: Julian Dinter Date: Sun, 22 Aug 2021 13:57:24 +0200 Subject: [PATCH 046/134] Prettified and added debug messages. --- modules/default/calendar/calendarutils.js | 52 +++++++++++++++-------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/modules/default/calendar/calendarutils.js b/modules/default/calendar/calendarutils.js index 7f0b14b8..041c3882 100644 --- a/modules/default/calendar/calendarutils.js +++ b/modules/default/calendar/calendarutils.js @@ -138,13 +138,14 @@ const CalendarUtils = { return CalendarUtils.isFullDayEvent(event) ? moment(event[time], "YYYYMMDD") : moment(new Date(event[time])); }; - Log.debug("there are " + Object.entries(data).length + " calendar entries"); + Log.debug("There are " + Object.entries(data).length + " calendar entries."); Object.entries(data).forEach(([key, event]) => { + Log.debug("Processing entry..."); const now = new Date(); const today = moment().startOf("day").toDate(); const future = moment().startOf("day").add(config.maximumNumberOfDays, "days").subtract(1, "seconds").toDate(); // Subtract 1 second so that events that start on the middle of the night will not repeat. let past = today; - Log.debug("have entries "); + if (config.includePastEvents) { past = moment().startOf("day").subtract(config.maximumNumberOfDays, "days").toDate(); } @@ -159,10 +160,10 @@ const CalendarUtils = { } if (event.type === "VEVENT") { + Log.debug("\nEvent: " + JSON.stringify(event)); let startDate = eventDate(event, "start"); let endDate; - Log.debug("\nevent=" + JSON.stringify(event)); if (typeof event.end !== "undefined") { endDate = eventDate(event, "end"); } else if (typeof event.duration !== "undefined") { @@ -176,16 +177,21 @@ const CalendarUtils = { } } - Log.debug(" start=" + startDate.toDate() + " end=" + endDate.toDate()); + Log.debug("startDate (local): " + startDate.toDate()); + Log.debug("endDate (local): " + endDate.toDate()); - // calculate the duration of the event for use with recurring events. + // Calculate the duration of the event for use with recurring events. let duration = parseInt(endDate.format("x")) - parseInt(startDate.format("x")); + Log.debug("duration: " + duration); + // FIXME: Since the parsed json object from node-ical comes with time information + // this check could be removed (?) if (event.start.length === 8) { startDate = startDate.startOf("day"); } const title = CalendarUtils.getTitleFromEvent(event); + Log.debug("title: " + title); let excluded = false, dateFilter = null; @@ -260,9 +266,13 @@ const CalendarUtils = { let pastLocal = 0; let futureLocal = 0; if (CalendarUtils.isFullDayEvent(event)) { + Log.debug("fullday"); // if full day event, only use the date part of the ranges pastLocal = pastMoment.toDate(); futureLocal = futureMoment.toDate(); + + Log.debug("pastLocal: " + pastLocal); + Log.debug("futureLocal: " + futureLocal); } else { // if we want past events if (config.includePastEvents) { @@ -274,9 +284,9 @@ const CalendarUtils = { } futureLocal = futureMoment.toDate(); // future } - Log.debug(" between=" + pastLocal + " to " + futureLocal); + Log.debug("Search for recurring events between: " + pastLocal + " and " + futureLocal); const dates = rule.between(pastLocal, futureLocal, true, limitFunction); - Log.debug("title=" + event.summary + " dates=" + JSON.stringify(dates)); + Log.debug("Title: " + event.summary + ", with dates: " + JSON.stringify(dates)); // The "dates" array contains the set of dates within our desired date range range that are valid // for the recurrence rule. *However*, it's possible for us to have a specific recurrence that // had its date changed from outside the range to inside the range. For the time being, @@ -284,6 +294,7 @@ const CalendarUtils = { // because the logic below will filter out any recurrences that don't actually belong within // our display range. // Would be great if there was a better way to handle this. + Log.debug("event.recurrences: " + event.recurrences); if (event.recurrences !== undefined) { for (let r in event.recurrences) { // Only add dates that weren't already in the range we added from the rrule so that @@ -296,6 +307,7 @@ const CalendarUtils = { // Loop through the set of date entries to see which recurrences should be added to our event list. for (let d in dates) { let date = dates[d]; + // FIXME: We now use node-ical instead of ical.js, but method stays the same. // ical.js started returning recurrences and exdates as ISOStrings without time information. // .toISOString().substring(0,10) is the method they use to calculate keys, so we'll do the same // (see https://github.com/peterbraden/ical.js/pull/84 ) @@ -303,21 +315,24 @@ const CalendarUtils = { let curEvent = event; let showRecurrence = true; - // get the offset of today where we are processing - // this will be the correction we need to apply + // Get the offset of today where we are processing + // This will be the correction, we need to apply. let nowOffset = new Date().getTimezoneOffset(); - // for full day events, the time might be off from RRULE/Luxon problem - // get time zone offset of the rule calculated event + // For full day events, the time might be off from RRULE/Luxon problem + // Get time zone offset of the rule calculated event let dateoffset = date.getTimezoneOffset(); - // reduce the time by the offset + + // Reduce the time by the following offset. Log.debug(" recurring date is " + date + " offset is " + dateoffset); + let dh = moment(date).format("HH"); Log.debug(" recurring date is " + date + " offset is " + dateoffset / 60 + " Hour is " + dh); + if (CalendarUtils.isFullDayEvent(event)) { - Log.debug("fullday"); - // if the offset is negative, east of GMT where the problem is + Log.debug("Fullday"); + // If the offset is negative (east of GMT), where the problem is if (dateoffset < 0) { - // if the date hour is less than the offset + // If the date hour is less than the offset if (dh < Math.abs(dateoffset / 60)) { // reduce the time by the offset Log.debug(" recurring date is " + date + " offset is " + dateoffset); @@ -373,6 +388,7 @@ const CalendarUtils = { } } startDate = moment(date); + Log.debug("Corrected startDate (local): " + startDate.toDate()); let adjustDays = CalendarUtils.calculateTimezoneAdjustment(event, date); @@ -388,7 +404,7 @@ const CalendarUtils = { // This date is an exception date, which means we should skip it in the recurrence pattern. showRecurrence = false; } - Log.debug("duration=" + duration); + Log.debug("duration: " + duration); endDate = moment(parseInt(startDate.format("x")) + duration, "x"); if (startDate.format("x") === endDate.format("x")) { @@ -408,7 +424,7 @@ const CalendarUtils = { } if (showRecurrence === true) { - Log.debug("saving event =" + description); + Log.debug("saving event: " + description); addedEvents++; newEvents.push({ title: recurrenceTitle, @@ -424,7 +440,7 @@ const CalendarUtils = { }); } } - // end recurring event parsing + // End recurring event parsing. } else { // Single event. const fullDayEvent = isFacebookBirthday ? true : CalendarUtils.isFullDayEvent(event); From e7f06f5c0c928cf5e646af5bf9ff01f3dac04854 Mon Sep 17 00:00:00 2001 From: Julian Dinter Date: Sun, 22 Aug 2021 14:06:24 +0200 Subject: [PATCH 047/134] Removed duplicated and thus superfluous debug messages. --- modules/default/calendar/calendarutils.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/modules/default/calendar/calendarutils.js b/modules/default/calendar/calendarutils.js index 041c3882..ad24182f 100644 --- a/modules/default/calendar/calendarutils.js +++ b/modules/default/calendar/calendarutils.js @@ -334,9 +334,8 @@ const CalendarUtils = { if (dateoffset < 0) { // If the date hour is less than the offset if (dh < Math.abs(dateoffset / 60)) { - // reduce the time by the offset - Log.debug(" recurring date is " + date + " offset is " + dateoffset); - // apply the correction to the date/time to get it UTC relative + // Reduce the time by the offset: + // Apply the correction to the date/time to get it UTC relative date = new Date(date.getTime() - Math.abs(nowOffset) * 60000); // the duration was calculated way back at the top before we could correct the start time.. // fix it for this event entry @@ -363,9 +362,8 @@ const CalendarUtils = { if (dateoffset < 0) { // if the date hour is less than the offset if (dh < Math.abs(dateoffset / 60)) { - // reduce the time by the offset - Log.debug(" recurring date is " + date + " offset is " + dateoffset); - // apply the correction to the date/time to get it UTC relative + // Reduce the time by the offset: + // Apply the correction to the date/time to get it UTC relative date = new Date(date.getTime() - Math.abs(nowOffset) * 60000); // the duration was calculated way back at the top before we could correct the start time.. // fix it for this event entry From 878c0be727a39bec10757689e6fd665bb43b3f11 Mon Sep 17 00:00:00 2001 From: Julian Dinter Date: Sun, 22 Aug 2021 14:16:02 +0200 Subject: [PATCH 048/134] [Fix] start time of calendar event gets corrected by time zone offset. --- modules/default/calendar/calendarutils.js | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/modules/default/calendar/calendarutils.js b/modules/default/calendar/calendarutils.js index ad24182f..32801a05 100644 --- a/modules/default/calendar/calendarutils.js +++ b/modules/default/calendar/calendarutils.js @@ -332,16 +332,17 @@ const CalendarUtils = { Log.debug("Fullday"); // If the offset is negative (east of GMT), where the problem is if (dateoffset < 0) { - // If the date hour is less than the offset - if (dh < Math.abs(dateoffset / 60)) { - // Reduce the time by the offset: - // Apply the correction to the date/time to get it UTC relative - date = new Date(date.getTime() - Math.abs(nowOffset) * 60000); - // the duration was calculated way back at the top before we could correct the start time.. - // fix it for this event entry - //duration = 24 * 60 * 60 * 1000; - Log.debug("new recurring date1 is " + date); - } + // Remove the offset, independently of the comparison between the date hour and the offset, + // since in the case that *date houre < offset*, the *new Date* command will handle this by + // representing the day before. + + // Reduce the time by the offset: + // Apply the correction to the date/time to get it UTC relative + date = new Date(date.getTime() - Math.abs(nowOffset) * 60000); + // the duration was calculated way back at the top before we could correct the start time.. + // fix it for this event entry + //duration = 24 * 60 * 60 * 1000; + Log.debug("new recurring date1 is " + date); } else { // if the timezones are the same, correct date if needed if (event.start.tz === moment.tz.guess()) { From 83b8cc6729bd78cf79668d9ebe23fb48265d77ec Mon Sep 17 00:00:00 2001 From: Julian Dinter Date: Sun, 22 Aug 2021 14:23:10 +0200 Subject: [PATCH 049/134] Ran npm run lint:prettier.. --- modules/default/calendar/calendarutils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default/calendar/calendarutils.js b/modules/default/calendar/calendarutils.js index 32801a05..9d9876e1 100644 --- a/modules/default/calendar/calendarutils.js +++ b/modules/default/calendar/calendarutils.js @@ -327,7 +327,7 @@ const CalendarUtils = { let dh = moment(date).format("HH"); Log.debug(" recurring date is " + date + " offset is " + dateoffset / 60 + " Hour is " + dh); - + if (CalendarUtils.isFullDayEvent(event)) { Log.debug("Fullday"); // If the offset is negative (east of GMT), where the problem is From b34bb87d7a7bf20d0aa6aad9bf387c737e90b099 Mon Sep 17 00:00:00 2001 From: Julian Dinter Date: Sun, 22 Aug 2021 14:27:18 +0200 Subject: [PATCH 050/134] Added fix to CHANGELOG. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4205ac3..b9cad781 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ _This release is scheduled to be released on 2021-10-01._ ### Fixed - Fix undefined error with ignoreToday option in weather module (#2620). +- Fix time zone correction in calendar module when the date hour is equal to the time zone correction value (#2632). ## [2.16.0] - 2021-07-01 From 3e1b051ec3f0d7726b0483e29af285a219693660 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 22 Aug 2021 22:34:11 +0200 Subject: [PATCH 051/134] Fix layout of digital clock ALignment was always set to center. Instead it now takes the positions alignment (left/center/right) --- CHANGELOG.md | 1 + modules/default/clock/clock_styles.css | 4 ---- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4205ac3..5b0befed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ _This release is scheduled to be released on 2021-10-01._ - Actually test all js and css files when lint script is run. - Update jsdocs and print warnings during testing too - Update weathergov provider to try fetching not just current, but also foreacst, when API URLs available. +- Refactored clock layout ### Fixed diff --git a/modules/default/clock/clock_styles.css b/modules/default/clock/clock_styles.css index f15677b2..e3eb7e94 100644 --- a/modules/default/clock/clock_styles.css +++ b/modules/default/clock/clock_styles.css @@ -82,10 +82,6 @@ transform-origin: 50% 100%; } -.digital { - text-align: center; -} - .module.clock .sun, .module.clock .moon { display: flex; From c0258b352e66f3d20c127c067ab61b8bfc1dcc47 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 22 Aug 2021 22:45:08 +0200 Subject: [PATCH 052/134] Update dependencies --- package-lock.json | 388 ++++++++++++++++++++++++++++++--------- package.json | 12 +- vendor/package-lock.json | 18 +- vendor/package.json | 2 +- 4 files changed, 319 insertions(+), 101 deletions(-) diff --git a/package-lock.json b/package-lock.json index 82c8dcbd..6746c4de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "dependencies": { "colors": "^1.4.0", "console-stamp": "^3.0.3", - "digest-fetch": "^1.2.0", + "digest-fetch": "^1.2.1", "eslint": "^7.32.0", "express": "^4.17.1", "express-ipfilter": "^1.2.0", @@ -23,18 +23,18 @@ "moment": "^2.29.1", "node-fetch": "^2.6.1", "node-ical": "^0.13.0", - "simple-git": "^2.42.0", + "simple-git": "^2.44.0", "socket.io": "^4.1.3" }, "devDependencies": { "eslint-config-prettier": "^8.3.0", "eslint-plugin-jest": "^24.4.0", - "eslint-plugin-jsdoc": "^36.0.6", - "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-jsdoc": "^36.0.7", + "eslint-plugin-prettier": "^3.4.1", "express-basic-auth": "^1.2.0", "husky": "^7.0.1", "jest": "^27.0.6", - "jsdom": "^16.7.0", + "jsdom": "^17.0.0", "lodash": "^4.17.21", "nyc": "^15.1.0", "prettier": "^2.3.2", @@ -50,7 +50,7 @@ "node": ">=12" }, "optionalDependencies": { - "electron": "^13.1.8" + "electron": "^13.2.1" } }, "node_modules/@babel/code-frame": { @@ -2865,9 +2865,9 @@ } }, "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", "dev": true }, "node_modules/cssstyle": { @@ -2889,17 +2889,17 @@ "dev": true }, "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.0.tgz", + "integrity": "sha512-4AefxbTTdFtxDUdh0BuMBs2qJVL25Mow2zlcuuePegQwgD6GEmQao42LLEeksOui8nL4RcNEugIpFP7eRd33xg==", "dev": true, "dependencies": { "abab": "^2.0.3", "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "whatwg-url": "^9.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/dateformat": { @@ -3113,9 +3113,9 @@ } }, "node_modules/digest-fetch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.2.0.tgz", - "integrity": "sha512-DSbWN+dPXH+9A/aqmGnpI40cVKzJRgL4iDm1eGpsZ1MpW3tXQuBJN5xNY3PEqUx3QjkQIPyD99ypClHr9fW9Ow==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.2.1.tgz", + "integrity": "sha512-Do130fdya/9DPUl80PaltD7R0WIOKkROnLjrdh0CxvS+s3WGGWFMPZvB2eH48BRnVxlSKrLdp/wBH19f0Kag6Q==", "dependencies": { "base-64": "^0.1.0", "md5": "^2.3.0" @@ -3243,9 +3243,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron": { - "version": "13.1.8", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.8.tgz", - "integrity": "sha512-ei2ZyyG81zUOlvm5Zxri668TdH5GNLY0wF+XrC2FRCqa8AABAPjJIWTRkhFEr/H6PDVPNZjMPvSs3XhHyVVk2g==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.2.1.tgz", + "integrity": "sha512-/K0Uw+o3+phbHtrVL6qDFVJqmeRF6EIPwVeUHEH5R8JNy13f4X3RouKjQzVyY/Os8fEqYHGFONWhD6q6g750HQ==", "devOptional": true, "hasInstallScript": true, "dependencies": { @@ -3646,9 +3646,9 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "36.0.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.6.tgz", - "integrity": "sha512-vOm27rI2SMfi1bOAYmzzGkanMCD/boquKwvN5ECi8EF9ASsXJwlnCzYtiOYpsDpbC2+6JXEHAmWMkqYNA3BWRw==", + "version": "36.0.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.7.tgz", + "integrity": "sha512-x73l/WCRQ1qCjLq46Ca7csuGd5o3y3vbJIa3cktg11tdf3UZleBdIXKN9Cf0xjs3tXYPEy2SoNXowT8ydnjNDQ==", "dev": true, "dependencies": { "@es-joy/jsdoccomment": "0.10.7", @@ -3684,9 +3684,9 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", - "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0" @@ -4257,9 +4257,9 @@ } }, "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "dependencies": { "asynckit": "^0.4.0", @@ -5545,6 +5545,112 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-environment-jsdom/node_modules/acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-environment-jsdom/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest-environment-node": { "version": "27.0.6", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.6.tgz", @@ -6012,21 +6118,21 @@ } }, "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-17.0.0.tgz", + "integrity": "sha512-MUq4XdqwtNurZDVeKScENMPHnkgmdIvMzZ1r1NSwHkDuaqI6BouPjr+17COo4/19oLNnmdpFDPOHVpgIZmZ+VA==", "dev": true, "dependencies": { "abab": "^2.0.5", - "acorn": "^8.2.4", + "acorn": "^8.4.1", "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", + "cssom": "^0.5.0", "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", + "data-urls": "^3.0.0", + "decimal.js": "^10.3.1", "domexception": "^2.0.1", "escodegen": "^2.0.0", - "form-data": "^3.0.0", + "form-data": "^4.0.0", "html-encoding-sniffer": "^2.0.1", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", @@ -6041,12 +6147,12 @@ "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", + "whatwg-url": "^9.0.0", + "ws": "^8.0.0", "xml-name-validator": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" }, "peerDependencies": { "canvas": "^2.5.0" @@ -6069,6 +6175,27 @@ "node": ">=0.4.0" } }, + "node_modules/jsdom/node_modules/ws": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.0.tgz", + "integrity": "sha512-uYhVJ/m9oXwEI04iIVmgLmugh2qrZihkywG9y5FfZV2ATeLIzHf93qs+tUNqlttbQK957/VX3mtwAS+UfIwA4g==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -8579,9 +8706,9 @@ "dev": true }, "node_modules/simple-git": { - "version": "2.42.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.42.0.tgz", - "integrity": "sha512-illpUX0bcrdB3AyvBGLz0ToRVP7lXNJOGVybGVuVk7PpivPNK5YKJx2aagKdKbveaMtt0DCLK4/jfjDb6b2M2g==", + "version": "2.44.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.44.0.tgz", + "integrity": "sha512-wIjcAmymhzgdaM0Y/a+XxmNGlivvHQTPZDYXVmyHMShVDwdeVqu3+OOyDbYu0DnfVzqLs2EOxRTgMNbC3YquwQ==", "dependencies": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", @@ -10210,17 +10337,16 @@ "dev": true }, "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-9.1.0.tgz", + "integrity": "sha512-CQ0UcrPHyomtlOCot1TL77WyMIm/bCwrJ2D6AOKGwEczU9EpyoqAokfqrf/MioU9kHcMsmJZcg1egXix2KYEsA==", "dev": true, "dependencies": { - "lodash": "^4.7.0", "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/which": { @@ -12607,9 +12733,9 @@ "dev": true }, "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", "dev": true }, "cssstyle": { @@ -12630,14 +12756,14 @@ } }, "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.0.tgz", + "integrity": "sha512-4AefxbTTdFtxDUdh0BuMBs2qJVL25Mow2zlcuuePegQwgD6GEmQao42LLEeksOui8nL4RcNEugIpFP7eRd33xg==", "dev": true, "requires": { "abab": "^2.0.3", "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "whatwg-url": "^9.0.0" } }, "dateformat": { @@ -12803,9 +12929,9 @@ "dev": true }, "digest-fetch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.2.0.tgz", - "integrity": "sha512-DSbWN+dPXH+9A/aqmGnpI40cVKzJRgL4iDm1eGpsZ1MpW3tXQuBJN5xNY3PEqUx3QjkQIPyD99ypClHr9fW9Ow==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.2.1.tgz", + "integrity": "sha512-Do130fdya/9DPUl80PaltD7R0WIOKkROnLjrdh0CxvS+s3WGGWFMPZvB2eH48BRnVxlSKrLdp/wBH19f0Kag6Q==", "requires": { "base-64": "^0.1.0", "md5": "^2.3.0" @@ -12916,9 +13042,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron": { - "version": "13.1.8", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.8.tgz", - "integrity": "sha512-ei2ZyyG81zUOlvm5Zxri668TdH5GNLY0wF+XrC2FRCqa8AABAPjJIWTRkhFEr/H6PDVPNZjMPvSs3XhHyVVk2g==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.2.1.tgz", + "integrity": "sha512-/K0Uw+o3+phbHtrVL6qDFVJqmeRF6EIPwVeUHEH5R8JNy13f4X3RouKjQzVyY/Os8fEqYHGFONWhD6q6g750HQ==", "devOptional": true, "requires": { "@electron/get": "^1.0.1", @@ -13210,9 +13336,9 @@ } }, "eslint-plugin-jsdoc": { - "version": "36.0.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.6.tgz", - "integrity": "sha512-vOm27rI2SMfi1bOAYmzzGkanMCD/boquKwvN5ECi8EF9ASsXJwlnCzYtiOYpsDpbC2+6JXEHAmWMkqYNA3BWRw==", + "version": "36.0.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.7.tgz", + "integrity": "sha512-x73l/WCRQ1qCjLq46Ca7csuGd5o3y3vbJIa3cktg11tdf3UZleBdIXKN9Cf0xjs3tXYPEy2SoNXowT8ydnjNDQ==", "dev": true, "requires": { "@es-joy/jsdoccomment": "0.10.7", @@ -13238,9 +13364,9 @@ } }, "eslint-plugin-prettier": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", - "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -13685,9 +13811,9 @@ } }, "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -14613,6 +14739,88 @@ "jest-mock": "^27.0.6", "jest-util": "^27.0.6", "jsdom": "^16.6.0" + }, + "dependencies": { + "acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "dev": true + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + } + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + } } }, "jest-environment-node": { @@ -14994,21 +15202,21 @@ "dev": true }, "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-17.0.0.tgz", + "integrity": "sha512-MUq4XdqwtNurZDVeKScENMPHnkgmdIvMzZ1r1NSwHkDuaqI6BouPjr+17COo4/19oLNnmdpFDPOHVpgIZmZ+VA==", "dev": true, "requires": { "abab": "^2.0.5", - "acorn": "^8.2.4", + "acorn": "^8.4.1", "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", + "cssom": "^0.5.0", "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", + "data-urls": "^3.0.0", + "decimal.js": "^10.3.1", "domexception": "^2.0.1", "escodegen": "^2.0.0", - "form-data": "^3.0.0", + "form-data": "^4.0.0", "html-encoding-sniffer": "^2.0.1", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", @@ -15023,8 +15231,8 @@ "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", + "whatwg-url": "^9.0.0", + "ws": "^8.0.0", "xml-name-validator": "^3.0.0" }, "dependencies": { @@ -15033,6 +15241,13 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", "dev": true + }, + "ws": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.0.tgz", + "integrity": "sha512-uYhVJ/m9oXwEI04iIVmgLmugh2qrZihkywG9y5FfZV2ATeLIzHf93qs+tUNqlttbQK957/VX3mtwAS+UfIwA4g==", + "dev": true, + "requires": {} } } }, @@ -16982,9 +17197,9 @@ "dev": true }, "simple-git": { - "version": "2.42.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.42.0.tgz", - "integrity": "sha512-illpUX0bcrdB3AyvBGLz0ToRVP7lXNJOGVybGVuVk7PpivPNK5YKJx2aagKdKbveaMtt0DCLK4/jfjDb6b2M2g==", + "version": "2.44.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.44.0.tgz", + "integrity": "sha512-wIjcAmymhzgdaM0Y/a+XxmNGlivvHQTPZDYXVmyHMShVDwdeVqu3+OOyDbYu0DnfVzqLs2EOxRTgMNbC3YquwQ==", "requires": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", @@ -18213,12 +18428,11 @@ "dev": true }, "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-9.1.0.tgz", + "integrity": "sha512-CQ0UcrPHyomtlOCot1TL77WyMIm/bCwrJ2D6AOKGwEczU9EpyoqAokfqrf/MioU9kHcMsmJZcg1egXix2KYEsA==", "dev": true, "requires": { - "lodash": "^4.7.0", "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" } diff --git a/package.json b/package.json index cec44b26..a2a45415 100644 --- a/package.json +++ b/package.json @@ -47,12 +47,12 @@ "devDependencies": { "eslint-config-prettier": "^8.3.0", "eslint-plugin-jest": "^24.4.0", - "eslint-plugin-jsdoc": "^36.0.6", - "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-jsdoc": "^36.0.7", + "eslint-plugin-prettier": "^3.4.1", "express-basic-auth": "^1.2.0", "husky": "^7.0.1", "jest": "^27.0.6", - "jsdom": "^16.7.0", + "jsdom": "^17.0.0", "lodash": "^4.17.21", "nyc": "^15.1.0", "prettier": "^2.3.2", @@ -65,12 +65,12 @@ "stylelint-prettier": "^1.2.0" }, "optionalDependencies": { - "electron": "^13.1.8" + "electron": "^13.2.1" }, "dependencies": { "colors": "^1.4.0", "console-stamp": "^3.0.3", - "digest-fetch": "^1.2.0", + "digest-fetch": "^1.2.1", "eslint": "^7.32.0", "express": "^4.17.1", "express-ipfilter": "^1.2.0", @@ -81,7 +81,7 @@ "moment": "^2.29.1", "node-fetch": "^2.6.1", "node-ical": "^0.13.0", - "simple-git": "^2.42.0", + "simple-git": "^2.44.0", "socket.io": "^4.1.3" }, "_moduleAliases": { diff --git a/vendor/package-lock.json b/vendor/package-lock.json index d20a096e..7aaf2391 100644 --- a/vendor/package-lock.json +++ b/vendor/package-lock.json @@ -7,7 +7,7 @@ "name": "magicmirror-vendors", "license": "MIT", "dependencies": { - "@fortawesome/fontawesome-free": "^5.15.3", + "@fortawesome/fontawesome-free": "^5.15.4", "moment": "^2.29.1", "moment-timezone": "^0.5.33", "nunjucks": "^3.2.3", @@ -16,9 +16,13 @@ } }, "node_modules/@fortawesome/fontawesome-free": { - "version": "5.15.3", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.3.tgz", - "integrity": "sha512-rFnSUN/QOtnOAgqFRooTA3H57JLDm0QEG/jPdk+tLQNL/eWd+Aok8g3qCI+Q1xuDPWpGW/i9JySpJVsq8Q0s9w==" + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz", + "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } }, "node_modules/a-sync-waterfall": { "version": "1.0.1", @@ -94,9 +98,9 @@ }, "dependencies": { "@fortawesome/fontawesome-free": { - "version": "5.15.3", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.3.tgz", - "integrity": "sha512-rFnSUN/QOtnOAgqFRooTA3H57JLDm0QEG/jPdk+tLQNL/eWd+Aok8g3qCI+Q1xuDPWpGW/i9JySpJVsq8Q0s9w==" + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz", + "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==" }, "a-sync-waterfall": { "version": "1.0.1", diff --git a/vendor/package.json b/vendor/package.json index a52af548..570d33d7 100755 --- a/vendor/package.json +++ b/vendor/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/MichMich/MagicMirror/issues" }, "dependencies": { - "@fortawesome/fontawesome-free": "^5.15.3", + "@fortawesome/fontawesome-free": "^5.15.4", "moment": "^2.29.1", "moment-timezone": "^0.5.33", "nunjucks": "^3.2.3", From cfff2ad72b2a66ee57fc148b1999c49e2cf6ef38 Mon Sep 17 00:00:00 2001 From: Julian Dinter Date: Wed, 25 Aug 2021 17:28:37 +0200 Subject: [PATCH 053/134] Changed comment regarding "ical.js" and "node-ical". --- modules/default/calendar/calendarutils.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/default/calendar/calendarutils.js b/modules/default/calendar/calendarutils.js index 9d9876e1..91679f13 100644 --- a/modules/default/calendar/calendarutils.js +++ b/modules/default/calendar/calendarutils.js @@ -307,10 +307,10 @@ const CalendarUtils = { // Loop through the set of date entries to see which recurrences should be added to our event list. for (let d in dates) { let date = dates[d]; - // FIXME: We now use node-ical instead of ical.js, but method stays the same. - // ical.js started returning recurrences and exdates as ISOStrings without time information. - // .toISOString().substring(0,10) is the method they use to calculate keys, so we'll do the same - // (see https://github.com/peterbraden/ical.js/pull/84 ) + // Remove the time information of each date by using its substring, using the following method: + // .toISOString().substring(0,10). + // since the date is given as ISOString with YYYY-MM-DDTHH:MM:SS.SSSZ + // (see https://momentjs.com/docs/#/displaying/as-iso-string/). const dateKey = date.toISOString().substring(0, 10); let curEvent = event; let showRecurrence = true; From c41fff8f5cefff7cb7177184e26a85aed43f062a Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 29 Aug 2021 20:00:42 +0200 Subject: [PATCH 054/134] Add test for showTime parameter --- tests/configs/modules/clock/clock_showTime.js | 23 +++++++++++++++++++ tests/e2e/modules/clock_spec.js | 14 +++++++++++ 2 files changed, 37 insertions(+) create mode 100644 tests/configs/modules/clock/clock_showTime.js diff --git a/tests/configs/modules/clock/clock_showTime.js b/tests/configs/modules/clock/clock_showTime.js new file mode 100644 index 00000000..93dd83de --- /dev/null +++ b/tests/configs/modules/clock/clock_showTime.js @@ -0,0 +1,23 @@ +/* Magic Mirror Test config for default clock module + * + * By Johan Hammar + * MIT Licensed. + */ +let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ + timeFormat: 12, + + modules: [ + { + module: "clock", + position: "middle_center", + config: { + showTime: false + } + } + ] +}); + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") { + module.exports = config; +} diff --git a/tests/e2e/modules/clock_spec.js b/tests/e2e/modules/clock_spec.js index 473c6f6a..57a2fa65 100644 --- a/tests/e2e/modules/clock_spec.js +++ b/tests/e2e/modules/clock_spec.js @@ -85,6 +85,20 @@ describe("Clock module", function () { }); }); + describe("with showTime config disabled", function () { + beforeAll(function () { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_showTime.js"; + }); + + it("should show not show the time when digital clock is shown", async function () { + await app.client.waitUntilWindowLoaded(); + const digital = await app.client.$(".clock .digital"); + const time = await digital.$$(".time"); + return expect(time.length).toBe(0); + }); + }); + describe("with showWeek config enabled", function () { beforeAll(function () { // Set config sample for use in test From 6225abb01034fbc0f2201b62d53b7567f59277d0 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 29 Aug 2021 20:00:55 +0200 Subject: [PATCH 055/134] Fix showTime parameter --- modules/default/clock/clock.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index 9b6d0a49..52cdb7e0 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -19,7 +19,7 @@ Module.register("clock", { showPeriodUpper: false, clockBold: false, showDate: true, - showTime: false, + showTime: true, showWeek: false, dateFormat: "dddd, LL", @@ -147,7 +147,7 @@ Module.register("clock", { digitalWrapper.appendChild(dateWrapper); } - if (this.config.showTime || this.config.displayType !== "analog") { + if (this.config.displayType !== "analog" && this.config.showTime) { timeWrapper.innerHTML = timeString; secondsWrapper.innerHTML = now.format("ss"); if (this.config.showPeriodUpper) { From c05d93aed8a11d25d0f075945d61e60501255ec4 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 29 Aug 2021 20:05:42 +0200 Subject: [PATCH 056/134] Update CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5939c003..b3908270 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ _This release is scheduled to be released on 2021-10-01._ ### Added -- Added showTime parameter to clock module for enabling/disabling time display in analog clock +- Added showTime parameter to clock module for enabling/disabling time display in digital clock ### Updated From 21c3179e03b8c422cf8f19f3bb0d08e9d697ff0f Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 29 Aug 2021 20:07:29 +0200 Subject: [PATCH 057/134] Update dependencies --- package-lock.json | 1289 +++++++++++++++++++++++---------------------- package.json | 10 +- 2 files changed, 651 insertions(+), 648 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6746c4de..68a80731 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,17 +23,17 @@ "moment": "^2.29.1", "node-fetch": "^2.6.1", "node-ical": "^0.13.0", - "simple-git": "^2.44.0", + "simple-git": "^2.45.0", "socket.io": "^4.1.3" }, "devDependencies": { "eslint-config-prettier": "^8.3.0", "eslint-plugin-jest": "^24.4.0", - "eslint-plugin-jsdoc": "^36.0.7", + "eslint-plugin-jsdoc": "^36.0.8", "eslint-plugin-prettier": "^3.4.1", "express-basic-auth": "^1.2.0", - "husky": "^7.0.1", - "jest": "^27.0.6", + "husky": "^7.0.2", + "jest": "^27.1.0", "jsdom": "^17.0.0", "lodash": "^4.17.21", "nyc": "^15.1.0", @@ -50,7 +50,7 @@ "node": ">=12" }, "optionalDependencies": { - "electron": "^13.2.1" + "electron": "^13.2.3" } }, "node_modules/@babel/code-frame": { @@ -703,17 +703,17 @@ } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.10.7.tgz", - "integrity": "sha512-aNKZEoMESDzOBjKxCWrFuG50mcpMeKVBnBNko4+IZZ5t9zXYs8GT1KB0ZaOq1YUsKumDRc6YII/TQm309MJ0KQ==", + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.10.8.tgz", + "integrity": "sha512-3P1JiGL4xaR9PoTKUHa2N/LKwa2/eUdRqGwijMWWgBqbFEqJUVpmaOi2TcjcemrsRMgFLBzQCK4ToPhrSVDiFQ==", "dev": true, "dependencies": { - "comment-parser": "1.2.3", + "comment-parser": "1.2.4", "esquery": "^1.4.0", "jsdoc-type-pratt-parser": "1.1.1" }, "engines": { - "node": "^12.20 || ^14.14.0 || ^16" + "node": "^12 || ^14 || ^16" } }, "node_modules/@eslint/eslintrc": { @@ -788,16 +788,16 @@ } }, "node_modules/@jest/console": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.6.tgz", - "integrity": "sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.1.0.tgz", + "integrity": "sha512-+Vl+xmLwAXLNlqT61gmHEixeRbS4L8MUzAjtpBCOPWH+izNI/dR16IeXjkXJdRtIVWVSf9DO1gdp67B1XorZhQ==", "dev": true, "dependencies": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.0.6", - "jest-util": "^27.0.6", + "jest-message-util": "^27.1.0", + "jest-util": "^27.1.0", "slash": "^3.0.0" }, "engines": { @@ -805,35 +805,35 @@ } }, "node_modules/@jest/core": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.6.tgz", - "integrity": "sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.1.0.tgz", + "integrity": "sha512-3l9qmoknrlCFKfGdrmiQiPne+pUR4ALhKwFTYyOeKw6egfDwJkO21RJ1xf41rN8ZNFLg5W+w6+P4fUqq4EMRWA==", "dev": true, "dependencies": { - "@jest/console": "^27.0.6", - "@jest/reporters": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/console": "^27.1.0", + "@jest/reporters": "^27.1.0", + "@jest/test-result": "^27.1.0", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.0.6", - "jest-config": "^27.0.6", - "jest-haste-map": "^27.0.6", - "jest-message-util": "^27.0.6", + "jest-changed-files": "^27.1.0", + "jest-config": "^27.1.0", + "jest-haste-map": "^27.1.0", + "jest-message-util": "^27.1.0", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-resolve-dependencies": "^27.0.6", - "jest-runner": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", - "jest-watcher": "^27.0.6", + "jest-resolve": "^27.1.0", + "jest-resolve-dependencies": "^27.1.0", + "jest-runner": "^27.1.0", + "jest-runtime": "^27.1.0", + "jest-snapshot": "^27.1.0", + "jest-util": "^27.1.0", + "jest-validate": "^27.1.0", + "jest-watcher": "^27.1.0", "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", @@ -853,62 +853,62 @@ } }, "node_modules/@jest/environment": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.6.tgz", - "integrity": "sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.1.0.tgz", + "integrity": "sha512-wRp50aAMY2w1U2jP1G32d6FUVBNYqmk8WaGkiIEisU48qyDV0WPtw3IBLnl7orBeggveommAkuijY+RzVnNDOQ==", "dev": true, "dependencies": { - "@jest/fake-timers": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/fake-timers": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", - "jest-mock": "^27.0.6" + "jest-mock": "^27.1.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.6.tgz", - "integrity": "sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.1.0.tgz", + "integrity": "sha512-22Zyn8il8DzpS+30jJNVbTlm7vAtnfy1aYvNeOEHloMlGy1PCYLHa4PWlSws0hvNsMM5bON6GISjkLoQUV3oMA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^27.0.6", - "jest-mock": "^27.0.6", - "jest-util": "^27.0.6" + "jest-message-util": "^27.1.0", + "jest-mock": "^27.1.0", + "jest-util": "^27.1.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/globals": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.6.tgz", - "integrity": "sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.1.0.tgz", + "integrity": "sha512-73vLV4aNHAlAgjk0/QcSIzzCZSqVIPbmFROJJv9D3QUR7BI4f517gVdJpSrCHxuRH3VZFhe0yGG/tmttlMll9g==", "dev": true, "dependencies": { - "@jest/environment": "^27.0.6", - "@jest/types": "^27.0.6", - "expect": "^27.0.6" + "@jest/environment": "^27.1.0", + "@jest/types": "^27.1.0", + "expect": "^27.1.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/reporters": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.6.tgz", - "integrity": "sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.1.0.tgz", + "integrity": "sha512-5T/zlPkN2HnK3Sboeg64L5eC8iiaZueLpttdktWTJsvALEtP2YMkC5BQxwjRWQACG9SwDmz+XjjkoxXUDMDgdw==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/console": "^27.1.0", + "@jest/test-result": "^27.1.0", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -919,10 +919,10 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-util": "^27.0.6", - "jest-worker": "^27.0.6", + "jest-haste-map": "^27.1.0", + "jest-resolve": "^27.1.0", + "jest-util": "^27.1.0", + "jest-worker": "^27.1.0", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -956,13 +956,13 @@ } }, "node_modules/@jest/test-result": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.6.tgz", - "integrity": "sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.1.0.tgz", + "integrity": "sha512-Aoz00gpDL528ODLghat3QSy6UBTD5EmmpjrhZZMK/v1Q2/rRRqTGnFxHuEkrD4z/Py96ZdOHxIWkkCKRpmnE1A==", "dev": true, "dependencies": { - "@jest/console": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/console": "^27.1.0", + "@jest/types": "^27.1.0", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -971,36 +971,36 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz", - "integrity": "sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.1.0.tgz", + "integrity": "sha512-lnCWawDr6Z1DAAK9l25o3AjmKGgcutq1iIbp+hC10s/HxnB8ZkUsYq1FzjOoxxZ5hW+1+AthBtvS4x9yno3V1A==", "dev": true, "dependencies": { - "@jest/test-result": "^27.0.6", + "@jest/test-result": "^27.1.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.6", - "jest-runtime": "^27.0.6" + "jest-haste-map": "^27.1.0", + "jest-runtime": "^27.1.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/transform": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.6.tgz", - "integrity": "sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.1.0.tgz", + "integrity": "sha512-ZRGCA2ZEVJ00ubrhkTG87kyLbN6n55g1Ilq0X9nJb5bX3MhMp3O6M7KG+LvYu+nZRqG5cXsQnJEdZbdpTAV8pQ==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.6", + "jest-haste-map": "^27.1.0", "jest-regex-util": "^27.0.6", - "jest-util": "^27.0.6", + "jest-util": "^27.1.0", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", @@ -1012,9 +1012,9 @@ } }, "node_modules/@jest/types": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", - "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.0.tgz", + "integrity": "sha512-pRP5cLIzN7I7Vp6mHKRSaZD7YpBTK7hawx5si8trMKqk4+WOdK8NEKOTO2G8PKWD1HbKMVckVB6/XHh/olhf2g==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -1168,9 +1168,9 @@ } }, "node_modules/@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "version": "7.1.15", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", + "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -1181,18 +1181,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -1200,9 +1200,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.0.tgz", - "integrity": "sha512-IilJZ1hJBUZwMOVDNTdflOOLzJB/ZtljYVa7k3gEZN/jqIJIPkWHC6dvbX+DD2CwZDHB9wAKzZPzzqMIkW37/w==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" @@ -1328,9 +1328,9 @@ "dev": true }, "node_modules/@types/prettier": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.1.tgz", - "integrity": "sha512-NVkb4p4YjI8E3O6+1m8I+8JlMpFZwfSbPGdaw0wXuyPRTEz0SLKwBUWNSO7Maoi8tQMPC8JLZNWkrcKPI7/sLA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", "dev": true }, "node_modules/@types/puppeteer": { @@ -1937,13 +1937,13 @@ } }, "node_modules/babel-jest": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.6.tgz", - "integrity": "sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.1.0.tgz", + "integrity": "sha512-6NrdqzaYemALGCuR97QkC/FkFIEBWP5pw5TMJoUHZTVXyOgocujp6A0JE2V6gE0HtqAAv6VKU/nI+OCR1Z4gHA==", "dev": true, "dependencies": { - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", "babel-preset-jest": "^27.0.6", @@ -2485,9 +2485,9 @@ "dev": true }, "node_modules/cjs-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz", - "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, "node_modules/clarinet": { @@ -2600,12 +2600,12 @@ } }, "node_modules/comment-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.3.tgz", - "integrity": "sha512-vnqDwBSXSsdAkGS5NjwMIPelE47q+UkEgWKHvCDNhVIIaQSUFY6sNnEYGzdoPGMdpV+7KR3ZkRd7oyWIjtuvJg==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz", + "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==", "dev": true, "engines": { - "node": "^12.20 || ^14.14.0 || ^16" + "node": ">= 12.0.0" } }, "node_modules/commondir": { @@ -3243,9 +3243,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.2.1.tgz", - "integrity": "sha512-/K0Uw+o3+phbHtrVL6qDFVJqmeRF6EIPwVeUHEH5R8JNy13f4X3RouKjQzVyY/Os8fEqYHGFONWhD6q6g750HQ==", + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.2.3.tgz", + "integrity": "sha512-FzWhbKHjq7ZTpPQFaYiLPL64erC8/BOsu5NlNN9nQ6f7rIP8ygKlNAlQit3vbOcksQAwItDUCIw4sW0mcaRpCA==", "devOptional": true, "hasInstallScript": true, "dependencies": { @@ -3646,13 +3646,13 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "36.0.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.7.tgz", - "integrity": "sha512-x73l/WCRQ1qCjLq46Ca7csuGd5o3y3vbJIa3cktg11tdf3UZleBdIXKN9Cf0xjs3tXYPEy2SoNXowT8ydnjNDQ==", + "version": "36.0.8", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.8.tgz", + "integrity": "sha512-brNjHvRuBy5CaV01mSp6WljrO/T8fHNj0DXG38odOGDnhI7HdcbLKX7DpSvg2Rfcifwh8GlnNFzx13sI05t3bg==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "0.10.7", - "comment-parser": "1.2.3", + "@es-joy/jsdoccomment": "0.10.8", + "comment-parser": "1.2.4", "debug": "^4.3.2", "esquery": "^1.4.0", "jsdoc-type-pratt-parser": "^1.1.1", @@ -3662,7 +3662,7 @@ "spdx-expression-parse": "^3.0.1" }, "engines": { - "node": "^12.20 || ^14.14.0 || ^16" + "node": "^12 || ^14 || ^16" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0" @@ -3921,16 +3921,16 @@ } }, "node_modules/expect": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.6.tgz", - "integrity": "sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.1.0.tgz", + "integrity": "sha512-9kJngV5hOJgkFil4F/uXm3hVBubUK2nERVfvqNNwxxuW8ZOUwSTTSysgfzckYtv/LBzj/LJXbiAF7okHCXgdug==", "dev": true, "dependencies": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "ansi-styles": "^5.0.0", "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", + "jest-matcher-utils": "^27.1.0", + "jest-message-util": "^27.1.0", "jest-regex-util": "^27.0.6" }, "engines": { @@ -4865,11 +4865,10 @@ } }, "node_modules/husky": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.1.tgz", - "integrity": "sha512-gceRaITVZ+cJH9sNHqx5tFwbzlLCVxtVZcusME8JYQ8Edy5mpGDOqD8QBCdMhpyo9a+JXddnujQ4rpY2Ff9SJA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.2.tgz", + "integrity": "sha512-8yKEWNX4z2YsofXAMT7KvA1g8p+GxtB1ffV8XtpAEGuXNAbCV5wdNKH+qTpw8SM9fh4aMPDR+yQuKfgnreyZlg==", "dev": true, - "license": "MIT", "bin": { "husky": "lib/bin.js" }, @@ -5342,14 +5341,14 @@ } }, "node_modules/jest": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.6.tgz", - "integrity": "sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", + "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", "dev": true, "dependencies": { - "@jest/core": "^27.0.6", + "@jest/core": "^27.1.0", "import-local": "^3.0.2", - "jest-cli": "^27.0.6" + "jest-cli": "^27.1.0" }, "bin": { "jest": "bin/jest.js" @@ -5367,12 +5366,12 @@ } }, "node_modules/jest-changed-files": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.6.tgz", - "integrity": "sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.1.0.tgz", + "integrity": "sha512-eRcb13TfQw0xiV2E98EmiEgs9a5uaBIqJChyl0G7jR9fCIvGjXovnDS6Zbku3joij4tXYcSK4SE1AXqOlUxjWg==", "dev": true, "dependencies": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "execa": "^5.0.0", "throat": "^6.0.1" }, @@ -5381,27 +5380,27 @@ } }, "node_modules/jest-circus": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.6.tgz", - "integrity": "sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.1.0.tgz", + "integrity": "sha512-6FWtHs3nZyZlMBhRf1wvAC5CirnflbGJAY1xssSAnERLiiXQRH+wY2ptBVtXjX4gz4AA2EwRV57b038LmifRbA==", "dev": true, "dependencies": { - "@jest/environment": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/environment": "^27.1.0", + "@jest/test-result": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.0.6", + "expect": "^27.1.0", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "pretty-format": "^27.0.6", + "jest-each": "^27.1.0", + "jest-matcher-utils": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-runtime": "^27.1.0", + "jest-snapshot": "^27.1.0", + "jest-util": "^27.1.0", + "pretty-format": "^27.1.0", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" @@ -5411,21 +5410,21 @@ } }, "node_modules/jest-cli": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.6.tgz", - "integrity": "sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.1.0.tgz", + "integrity": "sha512-h6zPUOUu+6oLDrXz0yOWY2YXvBLk8gQinx4HbZ7SF4V3HzasQf+ncoIbKENUMwXyf54/6dBkYXvXJos+gOHYZw==", "dev": true, "dependencies": { - "@jest/core": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/core": "^27.1.0", + "@jest/test-result": "^27.1.0", + "@jest/types": "^27.1.0", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", - "jest-config": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", + "jest-config": "^27.1.0", + "jest-util": "^27.1.0", + "jest-validate": "^27.1.0", "prompts": "^2.0.1", "yargs": "^16.0.3" }, @@ -5445,32 +5444,32 @@ } }, "node_modules/jest-config": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.6.tgz", - "integrity": "sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.1.0.tgz", + "integrity": "sha512-GMo7f76vMYUA3b3xOdlcKeKQhKcBIgurjERO2hojo0eLkKPGcw7fyIoanH+m6KOP2bLad+fGnF8aWOJYxzNPeg==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.0.6", - "@jest/types": "^27.0.6", - "babel-jest": "^27.0.6", + "@jest/test-sequencer": "^27.1.0", + "@jest/types": "^27.1.0", + "babel-jest": "^27.1.0", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", - "jest-circus": "^27.0.6", - "jest-environment-jsdom": "^27.0.6", - "jest-environment-node": "^27.0.6", + "jest-circus": "^27.1.0", + "jest-environment-jsdom": "^27.1.0", + "jest-environment-node": "^27.1.0", "jest-get-type": "^27.0.6", - "jest-jasmine2": "^27.0.6", + "jest-jasmine2": "^27.1.0", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-runner": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", + "jest-resolve": "^27.1.0", + "jest-runner": "^27.1.0", + "jest-util": "^27.1.0", + "jest-validate": "^27.1.0", "micromatch": "^4.0.4", - "pretty-format": "^27.0.6" + "pretty-format": "^27.1.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5485,15 +5484,15 @@ } }, "node_modules/jest-diff": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.6.tgz", - "integrity": "sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.1.0.tgz", + "integrity": "sha512-rjfopEYl58g/SZTsQFmspBODvMSytL16I+cirnScWTLkQVXYVZfxm78DFfdIIXc05RCYuGjxJqrdyG4PIFzcJg==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^27.0.6", "jest-get-type": "^27.0.6", - "pretty-format": "^27.0.6" + "pretty-format": "^27.1.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5512,33 +5511,33 @@ } }, "node_modules/jest-each": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.6.tgz", - "integrity": "sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.1.0.tgz", + "integrity": "sha512-K/cNvQlmDqQMRHF8CaQ0XPzCfjP5HMJc2bIJglrIqI9fjwpNqITle63IWE+wq4p+3v+iBgh7Wq0IdGpLx5xjDg==", "dev": true, "dependencies": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", - "jest-util": "^27.0.6", - "pretty-format": "^27.0.6" + "jest-util": "^27.1.0", + "pretty-format": "^27.1.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz", - "integrity": "sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.1.0.tgz", + "integrity": "sha512-JbwOcOxh/HOtsj56ljeXQCUJr3ivnaIlM45F5NBezFLVYdT91N5UofB1ux2B1CATsQiudcHdgTaeuqGXJqjJYQ==", "dev": true, "dependencies": { - "@jest/environment": "^27.0.6", - "@jest/fake-timers": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/environment": "^27.1.0", + "@jest/fake-timers": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", - "jest-mock": "^27.0.6", - "jest-util": "^27.0.6", + "jest-mock": "^27.1.0", + "jest-util": "^27.1.0", "jsdom": "^16.6.0" }, "engines": { @@ -5652,17 +5651,17 @@ } }, "node_modules/jest-environment-node": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.6.tgz", - "integrity": "sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.1.0.tgz", + "integrity": "sha512-JIyJ8H3wVyM4YCXp7njbjs0dIT87yhGlrXCXhDKNIg1OjurXr6X38yocnnbXvvNyqVTqSI4M9l+YfPKueqL1lw==", "dev": true, "dependencies": { - "@jest/environment": "^27.0.6", - "@jest/fake-timers": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/environment": "^27.1.0", + "@jest/fake-timers": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", - "jest-mock": "^27.0.6", - "jest-util": "^27.0.6" + "jest-mock": "^27.1.0", + "jest-util": "^27.1.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5678,12 +5677,12 @@ } }, "node_modules/jest-haste-map": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.6.tgz", - "integrity": "sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.1.0.tgz", + "integrity": "sha512-7mz6LopSe+eA6cTFMf10OfLLqRoIPvmMyz5/OnSXnHO7hB0aDP1iIeLWCXzAcYU5eIJVpHr12Bk9yyq2fTW9vg==", "dev": true, "dependencies": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", @@ -5691,8 +5690,8 @@ "graceful-fs": "^4.2.4", "jest-regex-util": "^27.0.6", "jest-serializer": "^27.0.6", - "jest-util": "^27.0.6", - "jest-worker": "^27.0.6", + "jest-util": "^27.1.0", + "jest-worker": "^27.1.0", "micromatch": "^4.0.4", "walker": "^1.0.7" }, @@ -5704,28 +5703,28 @@ } }, "node_modules/jest-jasmine2": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz", - "integrity": "sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.1.0.tgz", + "integrity": "sha512-Z/NIt0wBDg3przOW2FCWtYjMn3Ip68t0SL60agD/e67jlhTyV3PIF8IzT9ecwqFbeuUSO2OT8WeJgHcalDGFzQ==", "dev": true, "dependencies": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.0.6", + "@jest/environment": "^27.1.0", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/test-result": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.0.6", + "expect": "^27.1.0", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "pretty-format": "^27.0.6", + "jest-each": "^27.1.0", + "jest-matcher-utils": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-runtime": "^27.1.0", + "jest-snapshot": "^27.1.0", + "jest-util": "^27.1.0", + "pretty-format": "^27.1.0", "throat": "^6.0.1" }, "engines": { @@ -5733,46 +5732,46 @@ } }, "node_modules/jest-leak-detector": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz", - "integrity": "sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.1.0.tgz", + "integrity": "sha512-oHvSkz1E80VyeTKBvZNnw576qU+cVqRXUD3/wKXh1zpaki47Qty2xeHg2HKie9Hqcd2l4XwircgNOWb/NiGqdA==", "dev": true, "dependencies": { "jest-get-type": "^27.0.6", - "pretty-format": "^27.0.6" + "pretty-format": "^27.1.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz", - "integrity": "sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.1.0.tgz", + "integrity": "sha512-VmAudus2P6Yt/JVBRdTPFhUzlIN8DYJd+et5Rd9QDsO/Z82Z4iwGjo43U8Z+PTiz8CBvKvlb6Fh3oKy39hykkQ==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.0.6", + "jest-diff": "^27.1.0", "jest-get-type": "^27.0.6", - "pretty-format": "^27.0.6" + "pretty-format": "^27.1.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-message-util": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.6.tgz", - "integrity": "sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.1.0.tgz", + "integrity": "sha512-Eck8NFnJ5Sg36R9XguD65cf2D5+McC+NF5GIdEninoabcuoOfWrID5qJhufq5FB0DRKoiyxB61hS7MKoMD0trQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.0.6", + "pretty-format": "^27.1.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -5793,12 +5792,12 @@ } }, "node_modules/jest-mock": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.6.tgz", - "integrity": "sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.0.tgz", + "integrity": "sha512-iT3/Yhu7DwAg/0HvvLCqLvrTKTRMyJlrrfJYWzuLSf9RCAxBoIXN3HoymZxMnYsC3eD8ewGbUa9jUknwBenx2w==", "dev": true, "dependencies": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "@types/node": "*" }, "engines": { @@ -5832,18 +5831,19 @@ } }, "node_modules/jest-resolve": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.6.tgz", - "integrity": "sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.1.0.tgz", + "integrity": "sha512-TXvzrLyPg0vLOwcWX38ZGYeEztSEmW+cQQKqc4HKDUwun31wsBXwotRlUz4/AYU/Fq4GhbMd/ileIWZEtcdmIA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.1.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", + "jest-util": "^27.1.0", + "jest-validate": "^27.1.0", "resolve": "^1.20.0", "slash": "^3.0.0" }, @@ -5852,45 +5852,45 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz", - "integrity": "sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.0.tgz", + "integrity": "sha512-Kq5XuDAELuBnrERrjFYEzu/A+i2W7l9HnPWqZEeKGEQ7m1R+6ndMbdXCVCx29Se1qwLZLgvoXwinB3SPIaitMQ==", "dev": true, "dependencies": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.0.6" + "jest-snapshot": "^27.1.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-runner": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.6.tgz", - "integrity": "sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.1.0.tgz", + "integrity": "sha512-ZWPKr9M5w5gDplz1KsJ6iRmQaDT/yyAFLf18fKbb/+BLWsR1sCNC2wMT0H7pP3gDcBz0qZ6aJraSYUNAGSJGaw==", "dev": true, "dependencies": { - "@jest/console": "^27.0.6", - "@jest/environment": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/console": "^27.1.0", + "@jest/environment": "^27.1.0", + "@jest/test-result": "^27.1.0", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.0.6", - "jest-environment-node": "^27.0.6", - "jest-haste-map": "^27.0.6", - "jest-leak-detector": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-util": "^27.0.6", - "jest-worker": "^27.0.6", + "jest-environment-jsdom": "^27.1.0", + "jest-environment-node": "^27.1.0", + "jest-haste-map": "^27.1.0", + "jest-leak-detector": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-resolve": "^27.1.0", + "jest-runtime": "^27.1.0", + "jest-util": "^27.1.0", + "jest-worker": "^27.1.0", "source-map-support": "^0.5.6", "throat": "^6.0.1" }, @@ -5899,34 +5899,35 @@ } }, "node_modules/jest-runtime": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.6.tgz", - "integrity": "sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.1.0.tgz", + "integrity": "sha512-okiR2cpGjY0RkWmUGGado6ETpFOi9oG3yV0CioYdoktkVxy5Hv0WRLWnJFuArSYS8cHMCNcceUUMGiIfgxCO9A==", "dev": true, "dependencies": { - "@jest/console": "^27.0.6", - "@jest/environment": "^27.0.6", - "@jest/fake-timers": "^27.0.6", - "@jest/globals": "^27.0.6", + "@jest/console": "^27.1.0", + "@jest/environment": "^27.1.0", + "@jest/fake-timers": "^27.1.0", + "@jest/globals": "^27.1.0", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/test-result": "^27.1.0", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-mock": "^27.0.6", + "jest-haste-map": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-mock": "^27.1.0", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", + "jest-resolve": "^27.1.0", + "jest-snapshot": "^27.1.0", + "jest-util": "^27.1.0", + "jest-validate": "^27.1.0", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" @@ -5949,9 +5950,9 @@ } }, "node_modules/jest-snapshot": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.6.tgz", - "integrity": "sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.1.0.tgz", + "integrity": "sha512-eaeUBoEjuuRwmiRI51oTldUsKOohB1F6fPqWKKILuDi/CStxzp2IWekVUXbuHHoz5ik33ioJhshiHpgPFbYgcA==", "dev": true, "dependencies": { "@babel/core": "^7.7.2", @@ -5960,23 +5961,23 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.0.6", + "expect": "^27.1.0", "graceful-fs": "^4.2.4", - "jest-diff": "^27.0.6", + "jest-diff": "^27.1.0", "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-util": "^27.0.6", + "jest-haste-map": "^27.1.0", + "jest-matcher-utils": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-resolve": "^27.1.0", + "jest-util": "^27.1.0", "natural-compare": "^1.4.0", - "pretty-format": "^27.0.6", + "pretty-format": "^27.1.0", "semver": "^7.3.2" }, "engines": { @@ -5999,12 +6000,12 @@ } }, "node_modules/jest-util": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.6.tgz", - "integrity": "sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.1.0.tgz", + "integrity": "sha512-edSLD2OneYDKC6gZM1yc+wY/877s/fuJNoM1k3sOEpzFyeptSmke3SLnk1dDHk9CgTA+58mnfx3ew3J11Kes/w==", "dev": true, "dependencies": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -6016,17 +6017,17 @@ } }, "node_modules/jest-validate": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.6.tgz", - "integrity": "sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.1.0.tgz", + "integrity": "sha512-QiJ+4XuSuMsfPi9zvdO//IrSRSlG6ybJhOpuqYSsuuaABaNT84h0IoD6vvQhThBOKT+DIKvl5sTM0l6is9+SRA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "leven": "^3.1.0", - "pretty-format": "^27.0.6" + "pretty-format": "^27.1.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -6045,17 +6046,17 @@ } }, "node_modules/jest-watcher": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.6.tgz", - "integrity": "sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.1.0.tgz", + "integrity": "sha512-ivaWTrA46aHWdgPDgPypSHiNQjyKnLBpUIHeBaGg11U+pDzZpkffGlcB1l1a014phmG0mHgkOHtOgiqJQM6yKQ==", "dev": true, "dependencies": { - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/test-result": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.0.6", + "jest-util": "^27.1.0", "string-length": "^4.0.1" }, "engines": { @@ -6063,9 +6064,9 @@ } }, "node_modules/jest-worker": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", - "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.0.tgz", + "integrity": "sha512-mO4PHb2QWLn9yRXGp7rkvXLAYuxwhq1ZYUo0LoDhg8wqvv4QizP1ZWEJOeolgbEgAWZLIEU0wsku8J+lGWfBhg==", "dev": true, "dependencies": { "@types/node": "*", @@ -7777,12 +7778,12 @@ } }, "node_modules/pretty-format": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", - "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.1.0.tgz", + "integrity": "sha512-4aGaud3w3rxAO6OXmK3fwBFQ0bctIOG3/if+jYEFGNGIs0EvuidQm3bZ9mlP2/t9epLNC/12czabfy7TZNSwVA==", "dev": true, "dependencies": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" @@ -8706,9 +8707,9 @@ "dev": true }, "node_modules/simple-git": { - "version": "2.44.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.44.0.tgz", - "integrity": "sha512-wIjcAmymhzgdaM0Y/a+XxmNGlivvHQTPZDYXVmyHMShVDwdeVqu3+OOyDbYu0DnfVzqLs2EOxRTgMNbC3YquwQ==", + "version": "2.45.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.45.0.tgz", + "integrity": "sha512-wu/Ujs9IXn0HuyYm4HyRvne+EKsjJSWKEMkB3wQa3gNHSMHt7y3oeNX9zRQ3UBPk7bRRMLLHAdIZCZfHT9ehPg==", "dependencies": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", @@ -11040,12 +11041,12 @@ "requires": {} }, "@es-joy/jsdoccomment": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.10.7.tgz", - "integrity": "sha512-aNKZEoMESDzOBjKxCWrFuG50mcpMeKVBnBNko4+IZZ5t9zXYs8GT1KB0ZaOq1YUsKumDRc6YII/TQm309MJ0KQ==", + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.10.8.tgz", + "integrity": "sha512-3P1JiGL4xaR9PoTKUHa2N/LKwa2/eUdRqGwijMWWgBqbFEqJUVpmaOi2TcjcemrsRMgFLBzQCK4ToPhrSVDiFQ==", "dev": true, "requires": { - "comment-parser": "1.2.3", + "comment-parser": "1.2.4", "esquery": "^1.4.0", "jsdoc-type-pratt-parser": "1.1.1" } @@ -11109,49 +11110,49 @@ "dev": true }, "@jest/console": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.6.tgz", - "integrity": "sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.1.0.tgz", + "integrity": "sha512-+Vl+xmLwAXLNlqT61gmHEixeRbS4L8MUzAjtpBCOPWH+izNI/dR16IeXjkXJdRtIVWVSf9DO1gdp67B1XorZhQ==", "dev": true, "requires": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.0.6", - "jest-util": "^27.0.6", + "jest-message-util": "^27.1.0", + "jest-util": "^27.1.0", "slash": "^3.0.0" } }, "@jest/core": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.6.tgz", - "integrity": "sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.1.0.tgz", + "integrity": "sha512-3l9qmoknrlCFKfGdrmiQiPne+pUR4ALhKwFTYyOeKw6egfDwJkO21RJ1xf41rN8ZNFLg5W+w6+P4fUqq4EMRWA==", "dev": true, "requires": { - "@jest/console": "^27.0.6", - "@jest/reporters": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/console": "^27.1.0", + "@jest/reporters": "^27.1.0", + "@jest/test-result": "^27.1.0", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.0.6", - "jest-config": "^27.0.6", - "jest-haste-map": "^27.0.6", - "jest-message-util": "^27.0.6", + "jest-changed-files": "^27.1.0", + "jest-config": "^27.1.0", + "jest-haste-map": "^27.1.0", + "jest-message-util": "^27.1.0", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-resolve-dependencies": "^27.0.6", - "jest-runner": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", - "jest-watcher": "^27.0.6", + "jest-resolve": "^27.1.0", + "jest-resolve-dependencies": "^27.1.0", + "jest-runner": "^27.1.0", + "jest-runtime": "^27.1.0", + "jest-snapshot": "^27.1.0", + "jest-util": "^27.1.0", + "jest-validate": "^27.1.0", + "jest-watcher": "^27.1.0", "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", @@ -11160,53 +11161,53 @@ } }, "@jest/environment": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.6.tgz", - "integrity": "sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.1.0.tgz", + "integrity": "sha512-wRp50aAMY2w1U2jP1G32d6FUVBNYqmk8WaGkiIEisU48qyDV0WPtw3IBLnl7orBeggveommAkuijY+RzVnNDOQ==", "dev": true, "requires": { - "@jest/fake-timers": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/fake-timers": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", - "jest-mock": "^27.0.6" + "jest-mock": "^27.1.0" } }, "@jest/fake-timers": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.6.tgz", - "integrity": "sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.1.0.tgz", + "integrity": "sha512-22Zyn8il8DzpS+30jJNVbTlm7vAtnfy1aYvNeOEHloMlGy1PCYLHa4PWlSws0hvNsMM5bON6GISjkLoQUV3oMA==", "dev": true, "requires": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^27.0.6", - "jest-mock": "^27.0.6", - "jest-util": "^27.0.6" + "jest-message-util": "^27.1.0", + "jest-mock": "^27.1.0", + "jest-util": "^27.1.0" } }, "@jest/globals": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.6.tgz", - "integrity": "sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.1.0.tgz", + "integrity": "sha512-73vLV4aNHAlAgjk0/QcSIzzCZSqVIPbmFROJJv9D3QUR7BI4f517gVdJpSrCHxuRH3VZFhe0yGG/tmttlMll9g==", "dev": true, "requires": { - "@jest/environment": "^27.0.6", - "@jest/types": "^27.0.6", - "expect": "^27.0.6" + "@jest/environment": "^27.1.0", + "@jest/types": "^27.1.0", + "expect": "^27.1.0" } }, "@jest/reporters": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.6.tgz", - "integrity": "sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.1.0.tgz", + "integrity": "sha512-5T/zlPkN2HnK3Sboeg64L5eC8iiaZueLpttdktWTJsvALEtP2YMkC5BQxwjRWQACG9SwDmz+XjjkoxXUDMDgdw==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/console": "^27.1.0", + "@jest/test-result": "^27.1.0", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -11217,10 +11218,10 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-util": "^27.0.6", - "jest-worker": "^27.0.6", + "jest-haste-map": "^27.1.0", + "jest-resolve": "^27.1.0", + "jest-util": "^27.1.0", + "jest-worker": "^27.1.0", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -11240,45 +11241,45 @@ } }, "@jest/test-result": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.6.tgz", - "integrity": "sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.1.0.tgz", + "integrity": "sha512-Aoz00gpDL528ODLghat3QSy6UBTD5EmmpjrhZZMK/v1Q2/rRRqTGnFxHuEkrD4z/Py96ZdOHxIWkkCKRpmnE1A==", "dev": true, "requires": { - "@jest/console": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/console": "^27.1.0", + "@jest/types": "^27.1.0", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz", - "integrity": "sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.1.0.tgz", + "integrity": "sha512-lnCWawDr6Z1DAAK9l25o3AjmKGgcutq1iIbp+hC10s/HxnB8ZkUsYq1FzjOoxxZ5hW+1+AthBtvS4x9yno3V1A==", "dev": true, "requires": { - "@jest/test-result": "^27.0.6", + "@jest/test-result": "^27.1.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.6", - "jest-runtime": "^27.0.6" + "jest-haste-map": "^27.1.0", + "jest-runtime": "^27.1.0" } }, "@jest/transform": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.6.tgz", - "integrity": "sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.1.0.tgz", + "integrity": "sha512-ZRGCA2ZEVJ00ubrhkTG87kyLbN6n55g1Ilq0X9nJb5bX3MhMp3O6M7KG+LvYu+nZRqG5cXsQnJEdZbdpTAV8pQ==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.6", + "jest-haste-map": "^27.1.0", "jest-regex-util": "^27.0.6", - "jest-util": "^27.0.6", + "jest-util": "^27.1.0", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", @@ -11287,9 +11288,9 @@ } }, "@jest/types": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", - "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.0.tgz", + "integrity": "sha512-pRP5cLIzN7I7Vp6mHKRSaZD7YpBTK7hawx5si8trMKqk4+WOdK8NEKOTO2G8PKWD1HbKMVckVB6/XHh/olhf2g==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -11414,9 +11415,9 @@ "dev": true }, "@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "version": "7.1.15", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", + "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -11427,18 +11428,18 @@ } }, "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -11446,9 +11447,9 @@ } }, "@types/babel__traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.0.tgz", - "integrity": "sha512-IilJZ1hJBUZwMOVDNTdflOOLzJB/ZtljYVa7k3gEZN/jqIJIPkWHC6dvbX+DD2CwZDHB9wAKzZPzzqMIkW37/w==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -11574,9 +11575,9 @@ "dev": true }, "@types/prettier": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.1.tgz", - "integrity": "sha512-NVkb4p4YjI8E3O6+1m8I+8JlMpFZwfSbPGdaw0wXuyPRTEz0SLKwBUWNSO7Maoi8tQMPC8JLZNWkrcKPI7/sLA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", "dev": true }, "@types/puppeteer": { @@ -12027,13 +12028,13 @@ } }, "babel-jest": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.6.tgz", - "integrity": "sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.1.0.tgz", + "integrity": "sha512-6NrdqzaYemALGCuR97QkC/FkFIEBWP5pw5TMJoUHZTVXyOgocujp6A0JE2V6gE0HtqAAv6VKU/nI+OCR1Z4gHA==", "dev": true, "requires": { - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", "babel-preset-jest": "^27.0.6", @@ -12432,9 +12433,9 @@ "dev": true }, "cjs-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz", - "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, "clarinet": { @@ -12523,9 +12524,9 @@ } }, "comment-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.3.tgz", - "integrity": "sha512-vnqDwBSXSsdAkGS5NjwMIPelE47q+UkEgWKHvCDNhVIIaQSUFY6sNnEYGzdoPGMdpV+7KR3ZkRd7oyWIjtuvJg==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz", + "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==", "dev": true }, "commondir": { @@ -13042,9 +13043,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.2.1.tgz", - "integrity": "sha512-/K0Uw+o3+phbHtrVL6qDFVJqmeRF6EIPwVeUHEH5R8JNy13f4X3RouKjQzVyY/Os8fEqYHGFONWhD6q6g750HQ==", + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.2.3.tgz", + "integrity": "sha512-FzWhbKHjq7ZTpPQFaYiLPL64erC8/BOsu5NlNN9nQ6f7rIP8ygKlNAlQit3vbOcksQAwItDUCIw4sW0mcaRpCA==", "devOptional": true, "requires": { "@electron/get": "^1.0.1", @@ -13336,13 +13337,13 @@ } }, "eslint-plugin-jsdoc": { - "version": "36.0.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.7.tgz", - "integrity": "sha512-x73l/WCRQ1qCjLq46Ca7csuGd5o3y3vbJIa3cktg11tdf3UZleBdIXKN9Cf0xjs3tXYPEy2SoNXowT8ydnjNDQ==", + "version": "36.0.8", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.8.tgz", + "integrity": "sha512-brNjHvRuBy5CaV01mSp6WljrO/T8fHNj0DXG38odOGDnhI7HdcbLKX7DpSvg2Rfcifwh8GlnNFzx13sI05t3bg==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "0.10.7", - "comment-parser": "1.2.3", + "@es-joy/jsdoccomment": "0.10.8", + "comment-parser": "1.2.4", "debug": "^4.3.2", "esquery": "^1.4.0", "jsdoc-type-pratt-parser": "^1.1.1", @@ -13515,16 +13516,16 @@ "dev": true }, "expect": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.6.tgz", - "integrity": "sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.1.0.tgz", + "integrity": "sha512-9kJngV5hOJgkFil4F/uXm3hVBubUK2nERVfvqNNwxxuW8ZOUwSTTSysgfzckYtv/LBzj/LJXbiAF7okHCXgdug==", "dev": true, "requires": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "ansi-styles": "^5.0.0", "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", + "jest-matcher-utils": "^27.1.0", + "jest-message-util": "^27.1.0", "jest-regex-util": "^27.0.6" }, "dependencies": { @@ -14262,9 +14263,9 @@ "dev": true }, "husky": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.1.tgz", - "integrity": "sha512-gceRaITVZ+cJH9sNHqx5tFwbzlLCVxtVZcusME8JYQ8Edy5mpGDOqD8QBCdMhpyo9a+JXddnujQ4rpY2Ff9SJA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.2.tgz", + "integrity": "sha512-8yKEWNX4z2YsofXAMT7KvA1g8p+GxtB1ffV8XtpAEGuXNAbCV5wdNKH+qTpw8SM9fh4aMPDR+yQuKfgnreyZlg==", "dev": true }, "iconv-lite": { @@ -14595,113 +14596,113 @@ } }, "jest": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.6.tgz", - "integrity": "sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", + "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", "dev": true, "requires": { - "@jest/core": "^27.0.6", + "@jest/core": "^27.1.0", "import-local": "^3.0.2", - "jest-cli": "^27.0.6" + "jest-cli": "^27.1.0" } }, "jest-changed-files": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.6.tgz", - "integrity": "sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.1.0.tgz", + "integrity": "sha512-eRcb13TfQw0xiV2E98EmiEgs9a5uaBIqJChyl0G7jR9fCIvGjXovnDS6Zbku3joij4tXYcSK4SE1AXqOlUxjWg==", "dev": true, "requires": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "execa": "^5.0.0", "throat": "^6.0.1" } }, "jest-circus": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.6.tgz", - "integrity": "sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.1.0.tgz", + "integrity": "sha512-6FWtHs3nZyZlMBhRf1wvAC5CirnflbGJAY1xssSAnERLiiXQRH+wY2ptBVtXjX4gz4AA2EwRV57b038LmifRbA==", "dev": true, "requires": { - "@jest/environment": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/environment": "^27.1.0", + "@jest/test-result": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.0.6", + "expect": "^27.1.0", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "pretty-format": "^27.0.6", + "jest-each": "^27.1.0", + "jest-matcher-utils": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-runtime": "^27.1.0", + "jest-snapshot": "^27.1.0", + "jest-util": "^27.1.0", + "pretty-format": "^27.1.0", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" } }, "jest-cli": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.6.tgz", - "integrity": "sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.1.0.tgz", + "integrity": "sha512-h6zPUOUu+6oLDrXz0yOWY2YXvBLk8gQinx4HbZ7SF4V3HzasQf+ncoIbKENUMwXyf54/6dBkYXvXJos+gOHYZw==", "dev": true, "requires": { - "@jest/core": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/core": "^27.1.0", + "@jest/test-result": "^27.1.0", + "@jest/types": "^27.1.0", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", - "jest-config": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", + "jest-config": "^27.1.0", + "jest-util": "^27.1.0", + "jest-validate": "^27.1.0", "prompts": "^2.0.1", "yargs": "^16.0.3" } }, "jest-config": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.6.tgz", - "integrity": "sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.1.0.tgz", + "integrity": "sha512-GMo7f76vMYUA3b3xOdlcKeKQhKcBIgurjERO2hojo0eLkKPGcw7fyIoanH+m6KOP2bLad+fGnF8aWOJYxzNPeg==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.0.6", - "@jest/types": "^27.0.6", - "babel-jest": "^27.0.6", + "@jest/test-sequencer": "^27.1.0", + "@jest/types": "^27.1.0", + "babel-jest": "^27.1.0", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", - "jest-circus": "^27.0.6", - "jest-environment-jsdom": "^27.0.6", - "jest-environment-node": "^27.0.6", + "jest-circus": "^27.1.0", + "jest-environment-jsdom": "^27.1.0", + "jest-environment-node": "^27.1.0", "jest-get-type": "^27.0.6", - "jest-jasmine2": "^27.0.6", + "jest-jasmine2": "^27.1.0", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-runner": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", + "jest-resolve": "^27.1.0", + "jest-runner": "^27.1.0", + "jest-util": "^27.1.0", + "jest-validate": "^27.1.0", "micromatch": "^4.0.4", - "pretty-format": "^27.0.6" + "pretty-format": "^27.1.0" } }, "jest-diff": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.6.tgz", - "integrity": "sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.1.0.tgz", + "integrity": "sha512-rjfopEYl58g/SZTsQFmspBODvMSytL16I+cirnScWTLkQVXYVZfxm78DFfdIIXc05RCYuGjxJqrdyG4PIFzcJg==", "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^27.0.6", "jest-get-type": "^27.0.6", - "pretty-format": "^27.0.6" + "pretty-format": "^27.1.0" } }, "jest-docblock": { @@ -14714,30 +14715,30 @@ } }, "jest-each": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.6.tgz", - "integrity": "sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.1.0.tgz", + "integrity": "sha512-K/cNvQlmDqQMRHF8CaQ0XPzCfjP5HMJc2bIJglrIqI9fjwpNqITle63IWE+wq4p+3v+iBgh7Wq0IdGpLx5xjDg==", "dev": true, "requires": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", - "jest-util": "^27.0.6", - "pretty-format": "^27.0.6" + "jest-util": "^27.1.0", + "pretty-format": "^27.1.0" } }, "jest-environment-jsdom": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz", - "integrity": "sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.1.0.tgz", + "integrity": "sha512-JbwOcOxh/HOtsj56ljeXQCUJr3ivnaIlM45F5NBezFLVYdT91N5UofB1ux2B1CATsQiudcHdgTaeuqGXJqjJYQ==", "dev": true, "requires": { - "@jest/environment": "^27.0.6", - "@jest/fake-timers": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/environment": "^27.1.0", + "@jest/fake-timers": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", - "jest-mock": "^27.0.6", - "jest-util": "^27.0.6", + "jest-mock": "^27.1.0", + "jest-util": "^27.1.0", "jsdom": "^16.6.0" }, "dependencies": { @@ -14824,17 +14825,17 @@ } }, "jest-environment-node": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.6.tgz", - "integrity": "sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.1.0.tgz", + "integrity": "sha512-JIyJ8H3wVyM4YCXp7njbjs0dIT87yhGlrXCXhDKNIg1OjurXr6X38yocnnbXvvNyqVTqSI4M9l+YfPKueqL1lw==", "dev": true, "requires": { - "@jest/environment": "^27.0.6", - "@jest/fake-timers": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/environment": "^27.1.0", + "@jest/fake-timers": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", - "jest-mock": "^27.0.6", - "jest-util": "^27.0.6" + "jest-mock": "^27.1.0", + "jest-util": "^27.1.0" } }, "jest-get-type": { @@ -14844,12 +14845,12 @@ "dev": true }, "jest-haste-map": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.6.tgz", - "integrity": "sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.1.0.tgz", + "integrity": "sha512-7mz6LopSe+eA6cTFMf10OfLLqRoIPvmMyz5/OnSXnHO7hB0aDP1iIeLWCXzAcYU5eIJVpHr12Bk9yyq2fTW9vg==", "dev": true, "requires": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", @@ -14858,73 +14859,73 @@ "graceful-fs": "^4.2.4", "jest-regex-util": "^27.0.6", "jest-serializer": "^27.0.6", - "jest-util": "^27.0.6", - "jest-worker": "^27.0.6", + "jest-util": "^27.1.0", + "jest-worker": "^27.1.0", "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz", - "integrity": "sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.1.0.tgz", + "integrity": "sha512-Z/NIt0wBDg3przOW2FCWtYjMn3Ip68t0SL60agD/e67jlhTyV3PIF8IzT9ecwqFbeuUSO2OT8WeJgHcalDGFzQ==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.0.6", + "@jest/environment": "^27.1.0", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/test-result": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.0.6", + "expect": "^27.1.0", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "pretty-format": "^27.0.6", + "jest-each": "^27.1.0", + "jest-matcher-utils": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-runtime": "^27.1.0", + "jest-snapshot": "^27.1.0", + "jest-util": "^27.1.0", + "pretty-format": "^27.1.0", "throat": "^6.0.1" } }, "jest-leak-detector": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz", - "integrity": "sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.1.0.tgz", + "integrity": "sha512-oHvSkz1E80VyeTKBvZNnw576qU+cVqRXUD3/wKXh1zpaki47Qty2xeHg2HKie9Hqcd2l4XwircgNOWb/NiGqdA==", "dev": true, "requires": { "jest-get-type": "^27.0.6", - "pretty-format": "^27.0.6" + "pretty-format": "^27.1.0" } }, "jest-matcher-utils": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz", - "integrity": "sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.1.0.tgz", + "integrity": "sha512-VmAudus2P6Yt/JVBRdTPFhUzlIN8DYJd+et5Rd9QDsO/Z82Z4iwGjo43U8Z+PTiz8CBvKvlb6Fh3oKy39hykkQ==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.0.6", + "jest-diff": "^27.1.0", "jest-get-type": "^27.0.6", - "pretty-format": "^27.0.6" + "pretty-format": "^27.1.0" } }, "jest-message-util": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.6.tgz", - "integrity": "sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.1.0.tgz", + "integrity": "sha512-Eck8NFnJ5Sg36R9XguD65cf2D5+McC+NF5GIdEninoabcuoOfWrID5qJhufq5FB0DRKoiyxB61hS7MKoMD0trQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.0.6", + "pretty-format": "^27.1.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -14941,12 +14942,12 @@ } }, "jest-mock": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.6.tgz", - "integrity": "sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.0.tgz", + "integrity": "sha512-iT3/Yhu7DwAg/0HvvLCqLvrTKTRMyJlrrfJYWzuLSf9RCAxBoIXN3HoymZxMnYsC3eD8ewGbUa9jUknwBenx2w==", "dev": true, "requires": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "@types/node": "*" } }, @@ -14964,92 +14965,94 @@ "dev": true }, "jest-resolve": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.6.tgz", - "integrity": "sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.1.0.tgz", + "integrity": "sha512-TXvzrLyPg0vLOwcWX38ZGYeEztSEmW+cQQKqc4HKDUwun31wsBXwotRlUz4/AYU/Fq4GhbMd/ileIWZEtcdmIA==", "dev": true, "requires": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.1.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", + "jest-util": "^27.1.0", + "jest-validate": "^27.1.0", "resolve": "^1.20.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz", - "integrity": "sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.0.tgz", + "integrity": "sha512-Kq5XuDAELuBnrERrjFYEzu/A+i2W7l9HnPWqZEeKGEQ7m1R+6ndMbdXCVCx29Se1qwLZLgvoXwinB3SPIaitMQ==", "dev": true, "requires": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.0.6" + "jest-snapshot": "^27.1.0" } }, "jest-runner": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.6.tgz", - "integrity": "sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.1.0.tgz", + "integrity": "sha512-ZWPKr9M5w5gDplz1KsJ6iRmQaDT/yyAFLf18fKbb/+BLWsR1sCNC2wMT0H7pP3gDcBz0qZ6aJraSYUNAGSJGaw==", "dev": true, "requires": { - "@jest/console": "^27.0.6", - "@jest/environment": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/console": "^27.1.0", + "@jest/environment": "^27.1.0", + "@jest/test-result": "^27.1.0", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.0.6", - "jest-environment-node": "^27.0.6", - "jest-haste-map": "^27.0.6", - "jest-leak-detector": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-util": "^27.0.6", - "jest-worker": "^27.0.6", + "jest-environment-jsdom": "^27.1.0", + "jest-environment-node": "^27.1.0", + "jest-haste-map": "^27.1.0", + "jest-leak-detector": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-resolve": "^27.1.0", + "jest-runtime": "^27.1.0", + "jest-util": "^27.1.0", + "jest-worker": "^27.1.0", "source-map-support": "^0.5.6", "throat": "^6.0.1" } }, "jest-runtime": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.6.tgz", - "integrity": "sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.1.0.tgz", + "integrity": "sha512-okiR2cpGjY0RkWmUGGado6ETpFOi9oG3yV0CioYdoktkVxy5Hv0WRLWnJFuArSYS8cHMCNcceUUMGiIfgxCO9A==", "dev": true, "requires": { - "@jest/console": "^27.0.6", - "@jest/environment": "^27.0.6", - "@jest/fake-timers": "^27.0.6", - "@jest/globals": "^27.0.6", + "@jest/console": "^27.1.0", + "@jest/environment": "^27.1.0", + "@jest/fake-timers": "^27.1.0", + "@jest/globals": "^27.1.0", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/test-result": "^27.1.0", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-mock": "^27.0.6", + "jest-haste-map": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-mock": "^27.1.0", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", + "jest-resolve": "^27.1.0", + "jest-snapshot": "^27.1.0", + "jest-util": "^27.1.0", + "jest-validate": "^27.1.0", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" @@ -15066,9 +15069,9 @@ } }, "jest-snapshot": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.6.tgz", - "integrity": "sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.1.0.tgz", + "integrity": "sha512-eaeUBoEjuuRwmiRI51oTldUsKOohB1F6fPqWKKILuDi/CStxzp2IWekVUXbuHHoz5ik33ioJhshiHpgPFbYgcA==", "dev": true, "requires": { "@babel/core": "^7.7.2", @@ -15077,23 +15080,23 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/transform": "^27.1.0", + "@jest/types": "^27.1.0", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.0.6", + "expect": "^27.1.0", "graceful-fs": "^4.2.4", - "jest-diff": "^27.0.6", + "jest-diff": "^27.1.0", "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-util": "^27.0.6", + "jest-haste-map": "^27.1.0", + "jest-matcher-utils": "^27.1.0", + "jest-message-util": "^27.1.0", + "jest-resolve": "^27.1.0", + "jest-util": "^27.1.0", "natural-compare": "^1.4.0", - "pretty-format": "^27.0.6", + "pretty-format": "^27.1.0", "semver": "^7.3.2" }, "dependencies": { @@ -15109,12 +15112,12 @@ } }, "jest-util": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.6.tgz", - "integrity": "sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.1.0.tgz", + "integrity": "sha512-edSLD2OneYDKC6gZM1yc+wY/877s/fuJNoM1k3sOEpzFyeptSmke3SLnk1dDHk9CgTA+58mnfx3ew3J11Kes/w==", "dev": true, "requires": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -15123,17 +15126,17 @@ } }, "jest-validate": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.6.tgz", - "integrity": "sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.1.0.tgz", + "integrity": "sha512-QiJ+4XuSuMsfPi9zvdO//IrSRSlG6ybJhOpuqYSsuuaABaNT84h0IoD6vvQhThBOKT+DIKvl5sTM0l6is9+SRA==", "dev": true, "requires": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "leven": "^3.1.0", - "pretty-format": "^27.0.6" + "pretty-format": "^27.1.0" }, "dependencies": { "camelcase": { @@ -15145,24 +15148,24 @@ } }, "jest-watcher": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.6.tgz", - "integrity": "sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.1.0.tgz", + "integrity": "sha512-ivaWTrA46aHWdgPDgPypSHiNQjyKnLBpUIHeBaGg11U+pDzZpkffGlcB1l1a014phmG0mHgkOHtOgiqJQM6yKQ==", "dev": true, "requires": { - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", + "@jest/test-result": "^27.1.0", + "@jest/types": "^27.1.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.0.6", + "jest-util": "^27.1.0", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", - "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.0.tgz", + "integrity": "sha512-mO4PHb2QWLn9yRXGp7rkvXLAYuxwhq1ZYUo0LoDhg8wqvv4QizP1ZWEJOeolgbEgAWZLIEU0wsku8J+lGWfBhg==", "dev": true, "requires": { "@types/node": "*", @@ -16482,12 +16485,12 @@ } }, "pretty-format": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", - "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.1.0.tgz", + "integrity": "sha512-4aGaud3w3rxAO6OXmK3fwBFQ0bctIOG3/if+jYEFGNGIs0EvuidQm3bZ9mlP2/t9epLNC/12czabfy7TZNSwVA==", "dev": true, "requires": { - "@jest/types": "^27.0.6", + "@jest/types": "^27.1.0", "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" @@ -17197,9 +17200,9 @@ "dev": true }, "simple-git": { - "version": "2.44.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.44.0.tgz", - "integrity": "sha512-wIjcAmymhzgdaM0Y/a+XxmNGlivvHQTPZDYXVmyHMShVDwdeVqu3+OOyDbYu0DnfVzqLs2EOxRTgMNbC3YquwQ==", + "version": "2.45.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.45.0.tgz", + "integrity": "sha512-wu/Ujs9IXn0HuyYm4HyRvne+EKsjJSWKEMkB3wQa3gNHSMHt7y3oeNX9zRQ3UBPk7bRRMLLHAdIZCZfHT9ehPg==", "requires": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", diff --git a/package.json b/package.json index a2a45415..dd96c7af 100644 --- a/package.json +++ b/package.json @@ -47,11 +47,11 @@ "devDependencies": { "eslint-config-prettier": "^8.3.0", "eslint-plugin-jest": "^24.4.0", - "eslint-plugin-jsdoc": "^36.0.7", + "eslint-plugin-jsdoc": "^36.0.8", "eslint-plugin-prettier": "^3.4.1", "express-basic-auth": "^1.2.0", - "husky": "^7.0.1", - "jest": "^27.0.6", + "husky": "^7.0.2", + "jest": "^27.1.0", "jsdom": "^17.0.0", "lodash": "^4.17.21", "nyc": "^15.1.0", @@ -65,7 +65,7 @@ "stylelint-prettier": "^1.2.0" }, "optionalDependencies": { - "electron": "^13.2.1" + "electron": "^13.2.3" }, "dependencies": { "colors": "^1.4.0", @@ -81,7 +81,7 @@ "moment": "^2.29.1", "node-fetch": "^2.6.1", "node-ical": "^0.13.0", - "simple-git": "^2.44.0", + "simple-git": "^2.45.0", "socket.io": "^4.1.3" }, "_moduleAliases": { From dbdff38d2e4cfbbda44a4eb875372789c41e5b33 Mon Sep 17 00:00:00 2001 From: eouia Date: Mon, 30 Aug 2021 11:32:24 +0200 Subject: [PATCH 058/134] Add custom switches for electron mainWindow --- js/electron.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/electron.js b/js/electron.js index 36b3d352..6adb87b6 100644 --- a/js/electron.js +++ b/js/electron.js @@ -19,7 +19,8 @@ let mainWindow; * */ function createWindow() { - app.commandLine.appendSwitch("autoplay-policy", "no-user-gesture-required"); + let electronSwitchesDefaults = ["autoplay-policy", "no-user-gesture-required"]; + app.commandLine.appendSwitch(...new Set(electronSwitchesDefaults, config.electronSwitches)); let electronOptionsDefaults = { width: 800, height: 600, From 45529f7de9c7c3a4622750f4ee4c8ff8b0b2aff4 Mon Sep 17 00:00:00 2001 From: eouia Date: Mon, 30 Aug 2021 11:38:40 +0200 Subject: [PATCH 059/134] Add custom switches for electron mainWindow --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5939c003..d1fee62e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ _This release is scheduled to be released on 2021-10-01._ ### Added - Added showTime parameter to clock module for enabling/disabling time display in analog clock +- Added custom electron switches from user config (`config.electronSwitches`) ### Updated From ed316e8bf3c40b2e7c6a94735958a5bb2c6d0e0f Mon Sep 17 00:00:00 2001 From: rejas Date: Mon, 30 Aug 2021 16:38:59 +0200 Subject: [PATCH 060/134] Try fixing test --- tests/e2e/modules/clock_spec.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/e2e/modules/clock_spec.js b/tests/e2e/modules/clock_spec.js index 57a2fa65..c2e03fc9 100644 --- a/tests/e2e/modules/clock_spec.js +++ b/tests/e2e/modules/clock_spec.js @@ -93,8 +93,7 @@ describe("Clock module", function () { it("should show not show the time when digital clock is shown", async function () { await app.client.waitUntilWindowLoaded(); - const digital = await app.client.$(".clock .digital"); - const time = await digital.$$(".time"); + const time = await app.client.$$(".clock .digital .time"); return expect(time.length).toBe(0); }); }); From 8879fb55deb0eb73dfe626113f4df3f09bbb6876 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sun, 29 Aug 2021 22:12:14 +0200 Subject: [PATCH 061/134] disable black cursor on start --- .github/CONTRIBUTING.md | 2 +- .github/ISSUE_TEMPLATE.md | 2 +- CHANGELOG.md | 1 + js/electron.js | 5 +++++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index d66290d4..d3912283 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -34,7 +34,7 @@ When submitting a new issue, please supply the following information: **Node Version**: Make sure it's version 12 or later (recommended is 14). -**MagicMirror Version**: Please let us now which version of MagicMirror you are running. It can be found in the `package.json` file. +**MagicMirror Version**: Please let us know which version of MagicMirror you are running. It can be found in the `package.json` file. **Description**: Provide a detailed description about the issue and include specific details to help us understand the problem. Adding screenshots will help describing the problem. diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 69e08a6c..d343534a 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -34,7 +34,7 @@ When submitting a new issue, please supply the following information: **Node Version**: Make sure it's version 12 or later (recommended is 14). -**MagicMirror Version**: Please let us now which version of MagicMirror you are running. It can be found in the `package.json` file. +**MagicMirror Version**: Please let us know which version of MagicMirror you are running. It can be found in the `package.json` file. **Description**: Provide a detailed description about the issue and include specific details to help us understand the problem. Adding screenshots will help describing the problem. diff --git a/CHANGELOG.md b/CHANGELOG.md index 5939c003..ecd019c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ _This release is scheduled to be released on 2021-10-01._ - Fix undefined error with ignoreToday option in weather module (#2620). - Fix time zone correction in calendar module when the date hour is equal to the time zone correction value (#2632). +- Fix black cursor on startup when using electron. ## [2.16.0] - 2021-07-01 diff --git a/js/electron.js b/js/electron.js index 36b3d352..3f9e53f9 100644 --- a/js/electron.js +++ b/js/electron.js @@ -71,6 +71,11 @@ function createWindow() { mainWindow.webContents.openDevTools(); } + // simulate mouse move to hide black cursor on start + mainWindow.webContents.on('dom-ready', (event)=> { + mainWindow.webContents.sendInputEvent({type: "mouseMove", x: 0, y: 0}); + }); + // Set responders for window events. mainWindow.on("closed", function () { mainWindow = null; From fbc886b21c9cf692212ff4eceede9a9d9b4ce48b Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Mon, 30 Aug 2021 19:55:26 +0200 Subject: [PATCH 062/134] run prettier ... --- js/electron.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/electron.js b/js/electron.js index 3f9e53f9..b7f84caf 100644 --- a/js/electron.js +++ b/js/electron.js @@ -72,8 +72,8 @@ function createWindow() { } // simulate mouse move to hide black cursor on start - mainWindow.webContents.on('dom-ready', (event)=> { - mainWindow.webContents.sendInputEvent({type: "mouseMove", x: 0, y: 0}); + mainWindow.webContents.on("dom-ready", (event) => { + mainWindow.webContents.sendInputEvent({ type: "mouseMove", x: 0, y: 0 }); }); // Set responders for window events. From 8949aa3bec7744c20c6b045fa08c75586bbb66f4 Mon Sep 17 00:00:00 2001 From: rejas Date: Tue, 31 Aug 2021 21:41:27 +0200 Subject: [PATCH 063/134] Add common method for updating suntimes --- .../default/weather/providers/ukmetoffice.js | 18 +----------------- .../default/weather/providers/weathergov.js | 18 +----------------- modules/default/weather/weatherobject.js | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 34 deletions(-) diff --git a/modules/default/weather/providers/ukmetoffice.js b/modules/default/weather/providers/ukmetoffice.js index 27127806..d2443866 100755 --- a/modules/default/weather/providers/ukmetoffice.js +++ b/modules/default/weather/providers/ukmetoffice.js @@ -116,9 +116,7 @@ WeatherProvider.register("ukmetoffice", { } // determine the sunrise/sunset times - not supplied in UK Met Office data - let times = this.calcAstroData(location); - currentWeather.sunrise = times[0]; - currentWeather.sunset = times[1]; + currentWeather.updateSunTime(location.lat, location.lon); return currentWeather; }, @@ -154,20 +152,6 @@ WeatherProvider.register("ukmetoffice", { return days; }, - /* - * calculate the astronomical data - */ - calcAstroData(location) { - const sunTimes = []; - - // determine the sunrise/sunset times - let times = SunCalc.getTimes(new Date(), location.lat, location.lon); - sunTimes.push(moment(times.sunrise, "X")); - sunTimes.push(moment(times.sunset, "X")); - - return sunTimes; - }, - /* * Convert the Met Office icons to a more usable name. */ diff --git a/modules/default/weather/providers/weathergov.js b/modules/default/weather/providers/weathergov.js index ab46b4ee..9dc1fddf 100755 --- a/modules/default/weather/providers/weathergov.js +++ b/modules/default/weather/providers/weathergov.js @@ -167,9 +167,7 @@ WeatherProvider.register("weathergov", { currentWeather.weatherType = this.convertWeatherType(currentWeatherData.textDescription, isDaytime); // determine the sunrise/sunset times - not supplied in weather.gov data - let times = this.calcAstroData(this.config.lat, this.config.lon); - currentWeather.sunrise = times[0]; - currentWeather.sunset = times[1]; + currentWeather.updateSunTime(this.config.lat, this.config.lon); return currentWeather; }, @@ -272,20 +270,6 @@ WeatherProvider.register("weathergov", { } }, - /* - * Calculate the astronomical data - */ - calcAstroData(lat, lon) { - const sunTimes = []; - - // determine the sunrise/sunset times - let times = SunCalc.getTimes(new Date(), lat, lon); - sunTimes.push(moment(times.sunrise, "X")); - sunTimes.push(moment(times.sunset, "X")); - - return sunTimes; - }, - /* * Convert the icons to a more usable name. */ diff --git a/modules/default/weather/weatherobject.js b/modules/default/weather/weatherobject.js index 5bd5be9a..b6a840c4 100755 --- a/modules/default/weather/weatherobject.js +++ b/modules/default/weather/weatherobject.js @@ -1,3 +1,5 @@ +/* global SunCalc */ + /* Magic Mirror * Module: Weather * @@ -113,4 +115,16 @@ class WeatherObject { return this.tempUnits === "imperial" ? feelsLike : ((feelsLike - 32) * 5) / 9; } + + /** + * Update the sunrise / sunset time depending on the location + * + * @param {number} lat latitude + * @param {number} lon longitude + */ + updateSunTime(lat, lon) { + let times = SunCalc.getTimes(new Date(), lat, lon); + this.sunrise = moment(times.sunrise, "X"); + this.sunset = moment(times.sunset, "X"); + } } From a7684e3e9f8e877a206c9398a85061cc183dd52a Mon Sep 17 00:00:00 2001 From: rejas Date: Tue, 31 Aug 2021 21:55:43 +0200 Subject: [PATCH 064/134] Add common method for determining if it is daytime --- modules/default/weather/providers/smhi.js | 21 +++++++-------------- modules/default/weather/weatherobject.js | 9 +++++++++ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/modules/default/weather/providers/smhi.js b/modules/default/weather/providers/smhi.js index 244fc1de..5018bdfc 100644 --- a/modules/default/weather/providers/smhi.js +++ b/modules/default/weather/providers/smhi.js @@ -105,7 +105,8 @@ WeatherProvider.register("smhi", { * @returns {WeatherObject} The converted weatherdata at the specified location */ convertWeatherDataToObject(weatherData, coordinates) { - let currentWeather = new WeatherObject("metric", "metric", "metric"); //Weather data is only for Sweden and nobody in Sweden would use imperial + // Weather data is only for Sweden and nobody in Sweden would use imperial + let currentWeather = new WeatherObject("metric", "metric", "metric"); currentWeather.date = moment(weatherData.validTime); let times = SunCalc.getTimes(currentWeather.date.toDate(), coordinates.lat, coordinates.lon); @@ -115,9 +116,11 @@ WeatherProvider.register("smhi", { currentWeather.temperature = this.paramValue(weatherData, "t"); currentWeather.windSpeed = this.paramValue(weatherData, "ws"); currentWeather.windDirection = this.paramValue(weatherData, "wd"); - currentWeather.weatherType = this.convertWeatherType(this.paramValue(weatherData, "Wsymb2"), this.isDayTime(currentWeather)); + currentWeather.weatherType = this.convertWeatherType(this.paramValue(weatherData, "Wsymb2"), currentWeather.isDayTime()); - //Determine the precipitation amount and category and update the weatherObject with it, the valuetype to use can be configured or uses median as default. + // Determine the precipitation amount and category and update the + // weatherObject with it, the valuetype to use can be configured or uses + // median as default. let precipitationValue = this.paramValue(weatherData, this.config.precipitationValue); switch (this.paramValue(weatherData, "pcat")) { // 0 = No precipitation @@ -171,7 +174,7 @@ WeatherProvider.register("smhi", { } //Keep track of what icons has been used for each hour of daytime and use the middle one for the forecast - if (this.isDayTime(weatherObject)) { + if (weatherObject.isDayTime()) { dayWeatherTypes.push(weatherObject.weatherType); } if (dayWeatherTypes.length > 0) { @@ -201,16 +204,6 @@ WeatherProvider.register("smhi", { return { lat: data.geometry.coordinates[0][1], lon: data.geometry.coordinates[0][0] }; }, - /** - * Checks if the weatherObject is at dayTime. - * - * @param {WeatherObject} weatherObject The weatherObject to look at - * @returns {boolean} true if it is at dayTime - */ - isDayTime(weatherObject) { - return weatherObject.date.isBetween(weatherObject.sunrise, weatherObject.sunset, undefined, "[]"); - }, - /** * The distance between the data points is increasing in the data the more distant the prediction is. * Find these gaps and fill them with the previous hours data to make the data returned a complete set. diff --git a/modules/default/weather/weatherobject.js b/modules/default/weather/weatherobject.js index b6a840c4..7495844b 100755 --- a/modules/default/weather/weatherobject.js +++ b/modules/default/weather/weatherobject.js @@ -116,6 +116,15 @@ class WeatherObject { return this.tempUnits === "imperial" ? feelsLike : ((feelsLike - 32) * 5) / 9; } + /** + * Checks if the weatherObject is at dayTime. + * + * @returns {boolean} true if it is at dayTime + */ + isDayTime() { + return this.date.isBetween(this.sunrise, this.sunset, undefined, "[]"); + } + /** * Update the sunrise / sunset time depending on the location * From 43eb760bce66d896327cd13c56cbb2b8e7053e93 Mon Sep 17 00:00:00 2001 From: rejas Date: Tue, 31 Aug 2021 22:01:30 +0200 Subject: [PATCH 065/134] Use isDayTime method --- modules/default/weather/providers/weathergov.js | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/modules/default/weather/providers/weathergov.js b/modules/default/weather/providers/weathergov.js index 9dc1fddf..65600ad3 100755 --- a/modules/default/weather/providers/weathergov.js +++ b/modules/default/weather/providers/weathergov.js @@ -158,17 +158,12 @@ WeatherProvider.register("weathergov", { currentWeather.precipitation = this.convertLength(currentWeatherData.precipitationLastHour.value); currentWeather.feelsLikeTemp = this.convertTemp(currentWeatherData.heatIndex.value); - let isDaytime = true; - if (currentWeatherData.icon.includes("day")) { - isDaytime = true; - } else { - isDaytime = false; - } - currentWeather.weatherType = this.convertWeatherType(currentWeatherData.textDescription, isDaytime); - // determine the sunrise/sunset times - not supplied in weather.gov data currentWeather.updateSunTime(this.config.lat, this.config.lon); + // update weatherType + currentWeather.weatherType = this.convertWeatherType(currentWeatherData.textDescription, currentWeather.isDayTime()); + return currentWeather; }, From f2bc10c5c0bc50e047c1880e2d06e22ed0a5568e Mon Sep 17 00:00:00 2001 From: rejas Date: Tue, 31 Aug 2021 23:26:06 +0200 Subject: [PATCH 066/134] Add tests for new methods --- modules/default/weather/weatherobject.js | 15 ++++++++++++- package-lock.json | 15 ++++++++++++- package.json | 3 ++- tests/unit/functions/weather_object_spec.js | 24 +++++++++++++++++++++ 4 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 tests/unit/functions/weather_object_spec.js diff --git a/modules/default/weather/weatherobject.js b/modules/default/weather/weatherobject.js index 7495844b..2d08f028 100755 --- a/modules/default/weather/weatherobject.js +++ b/modules/default/weather/weatherobject.js @@ -12,6 +12,13 @@ * As soon as we start implementing the forecast, mode properties will be added. */ class WeatherObject { + /** + * + * @param units + * @param tempUnits + * @param windUnits + * @param useKmh + */ constructor(units, tempUnits, windUnits, useKmh) { this.units = units; this.tempUnits = tempUnits; @@ -132,8 +139,14 @@ class WeatherObject { * @param {number} lon longitude */ updateSunTime(lat, lon) { - let times = SunCalc.getTimes(new Date(), lat, lon); + let now = !this.date ? new Date() : this.date.toDate(); + let times = SunCalc.getTimes(now, lat, lon); this.sunrise = moment(times.sunrise, "X"); this.sunset = moment(times.sunset, "X"); } } + +/*************** DO NOT EDIT THE LINE BELOW ***************/ +if (typeof module !== "undefined") { + module.exports = WeatherObject; +} diff --git a/package-lock.json b/package-lock.json index 68a80731..ae6ab35e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,8 @@ "stylelint": "^13.13.1", "stylelint-config-prettier": "^8.0.2", "stylelint-config-standard": "^22.0.0", - "stylelint-prettier": "^1.2.0" + "stylelint-prettier": "^1.2.0", + "suncalc": "^1.8.0" }, "engines": { "node": ">=12" @@ -9373,6 +9374,12 @@ "node": ">= 8.0" } }, + "node_modules/suncalc": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/suncalc/-/suncalc-1.8.0.tgz", + "integrity": "sha1-HZiYEJVjB4dQ9JlKlZ5lTYdqy/U=", + "dev": true + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -17712,6 +17719,12 @@ "debug": "^4.1.0" } }, + "suncalc": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/suncalc/-/suncalc-1.8.0.tgz", + "integrity": "sha1-HZiYEJVjB4dQ9JlKlZ5lTYdqy/U=", + "dev": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", diff --git a/package.json b/package.json index dd96c7af..6bce27aa 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,8 @@ "stylelint": "^13.13.1", "stylelint-config-prettier": "^8.0.2", "stylelint-config-standard": "^22.0.0", - "stylelint-prettier": "^1.2.0" + "stylelint-prettier": "^1.2.0", + "suncalc": "^1.8.0" }, "optionalDependencies": { "electron": "^13.2.3" diff --git a/tests/unit/functions/weather_object_spec.js b/tests/unit/functions/weather_object_spec.js new file mode 100644 index 00000000..8878f377 --- /dev/null +++ b/tests/unit/functions/weather_object_spec.js @@ -0,0 +1,24 @@ +const WeatherObject = require("../../../modules/default/weather/weatherobject.js"); + +global.moment = require("moment"); +global.SunCalc = require("suncalc"); + +describe("WeatherObject", function () { + let weatherobject; + + beforeAll(function () { + weatherobject = new WeatherObject("metric", "metric", "metric", true); + }); + + it("should return true for daytime at noon", function () { + weatherobject.date = moment(12, "HH"); + weatherobject.updateSunTime(-6.774877582342688, 37.63345667023327); + expect(weatherobject.isDayTime()).toBe(true); + }); + + it("should return false for daytime at midnight", function () { + weatherobject.date = moment(0, "HH"); + weatherobject.updateSunTime(-6.774877582342688, 37.63345667023327); + expect(weatherobject.isDayTime()).toBe(false); + }); +}); From be76d5ce9a88138924444a46a129d6a3834f3547 Mon Sep 17 00:00:00 2001 From: rejas Date: Tue, 31 Aug 2021 23:34:22 +0200 Subject: [PATCH 067/134] Use new method in smhi provider --- modules/default/weather/providers/smhi.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/default/weather/providers/smhi.js b/modules/default/weather/providers/smhi.js index 5018bdfc..2869906a 100644 --- a/modules/default/weather/providers/smhi.js +++ b/modules/default/weather/providers/smhi.js @@ -109,9 +109,7 @@ WeatherProvider.register("smhi", { let currentWeather = new WeatherObject("metric", "metric", "metric"); currentWeather.date = moment(weatherData.validTime); - let times = SunCalc.getTimes(currentWeather.date.toDate(), coordinates.lat, coordinates.lon); - currentWeather.sunrise = moment(times.sunrise, "X"); - currentWeather.sunset = moment(times.sunset, "X"); + currentWeather.updateSunTime(coordinates.lat, coordinates.lon); currentWeather.humidity = this.paramValue(weatherData, "r"); currentWeather.temperature = this.paramValue(weatherData, "t"); currentWeather.windSpeed = this.paramValue(weatherData, "ws"); From d7429a4812aa18eaf5a61cf25b6545567ee0f5ae Mon Sep 17 00:00:00 2001 From: rejas Date: Tue, 31 Aug 2021 23:39:40 +0200 Subject: [PATCH 068/134] Add eslint rule for === vs == and fix its occurence --- .eslintrc.json | 1 + modules/default/weather/providers/weathergov.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index 31aae27f..3e685a0d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -23,6 +23,7 @@ }, "rules": { "prettier/prettier": "error", + "eqeqeq": "error", "no-prototype-builtins": "off", "no-unused-vars": "off" } diff --git a/modules/default/weather/providers/weathergov.js b/modules/default/weather/providers/weathergov.js index 65600ad3..4ae25f56 100755 --- a/modules/default/weather/providers/weathergov.js +++ b/modules/default/weather/providers/weathergov.js @@ -130,7 +130,7 @@ WeatherProvider.register("weathergov", { // excellent, let's fetch some actual wx data this.configURLs = true; // handle 'forecast' config, fall back to 'current' - if (config.type == "forecast") { + if (config.type === "forecast") { this.fetchWeatherForecast(); } else { this.fetchCurrentWeather(); From a9f69f07e68ea1b0e90bdbf4311e514c9286c06b Mon Sep 17 00:00:00 2001 From: rejas Date: Tue, 31 Aug 2021 23:43:33 +0200 Subject: [PATCH 069/134] Update CHANGELOG --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06693572..d2c00f61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,9 +20,10 @@ _This release is scheduled to be released on 2021-10-01._ - Refactor test configs, use default test config for all tests. - Updated github templates. - Actually test all js and css files when lint script is run. -- Update jsdocs and print warnings during testing too +- Update jsdocs and print warnings during testing too. - Update weathergov provider to try fetching not just current, but also foreacst, when API URLs available. -- Refactored clock layout +- Refactored clock layout. +- Refactored methods from weatherproviders into weatherobject (isDaytime, updateSunTime). ### Fixed From f49312ed13edb06cd3f67d510b14294b25327710 Mon Sep 17 00:00:00 2001 From: rejas Date: Wed, 1 Sep 2021 11:02:06 +0200 Subject: [PATCH 070/134] Update dependencies --- package-lock.json | 239 ++++++++++++++++++++++++++++++++-------------- package.json | 8 +- 2 files changed, 172 insertions(+), 75 deletions(-) diff --git a/package-lock.json b/package-lock.json index ae6ab35e..b19e6a0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,16 +21,16 @@ "iconv-lite": "^0.6.3", "module-alias": "^2.2.2", "moment": "^2.29.1", - "node-fetch": "^2.6.1", + "node-fetch": "^3.0.0", "node-ical": "^0.13.0", "simple-git": "^2.45.0", - "socket.io": "^4.1.3" + "socket.io": "^4.2.0" }, "devDependencies": { "eslint-config-prettier": "^8.3.0", "eslint-plugin-jest": "^24.4.0", "eslint-plugin-jsdoc": "^36.0.8", - "eslint-plugin-prettier": "^3.4.1", + "eslint-plugin-prettier": "^4.0.0", "express-basic-auth": "^1.2.0", "husky": "^7.0.2", "jest": "^27.1.0", @@ -51,7 +51,7 @@ "node": ">=12" }, "optionalDependencies": { - "electron": "^13.2.3" + "electron": "^13.3.0" } }, "node_modules/@babel/code-frame": { @@ -1227,14 +1227,14 @@ "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" }, "node_modules/@types/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "node_modules/@types/cors": { - "version": "2.8.10", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", - "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==" + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" }, "node_modules/@types/graceful-fs": { "version": "4.1.5", @@ -2889,6 +2889,14 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, + "node_modules/data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "engines": { + "node": ">= 6" + } + }, "node_modules/data-urls": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.0.tgz", @@ -3244,9 +3252,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.2.3.tgz", - "integrity": "sha512-FzWhbKHjq7ZTpPQFaYiLPL64erC8/BOsu5NlNN9nQ6f7rIP8ygKlNAlQit3vbOcksQAwItDUCIw4sW0mcaRpCA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.3.0.tgz", + "integrity": "sha512-d/BvOLDjI4i7yf9tqCuLL2fFGA2TrM/D9PyRpua+rJolG0qrwp/FohP02L0m+44kmPpofIo4l3NPwLmzyKKimA==", "devOptional": true, "hasInstallScript": true, "dependencies": { @@ -3354,9 +3362,9 @@ } }, "node_modules/engine.io": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.1.1.tgz", - "integrity": "sha512-aMWot7H5aC8L4/T8qMYbLdvKlZOdJTH54FxfdFunTGvhMx1BHkJOntWArsVfgAZVwAO9LC2sryPWRcEeUzCe5w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.2.0.tgz", + "integrity": "sha512-d1DexkQx87IFr1FLuV+0f5kAm1Hk1uOVijLOb+D1sDO2QMb7YjE02VHtZtxo7xIXMgcWLb+vl3HRT0rI9tr4jQ==", "dependencies": { "accepts": "~1.3.4", "base64id": "2.0.0", @@ -3371,9 +3379,9 @@ } }, "node_modules/engine.io-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", - "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz", + "integrity": "sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==", "dependencies": { "base64-arraybuffer": "0.1.4" }, @@ -3685,9 +3693,9 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", + "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0" @@ -3696,8 +3704,8 @@ "node": ">=6.0.0" }, "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" }, "peerDependenciesMeta": { "eslint-config-prettier": { @@ -4144,6 +4152,27 @@ "node": ">=10" } }, + "node_modules/fetch-blob": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.2.tgz", + "integrity": "sha512-hunJbvy/6OLjCD0uuhLdp0mMPzP/yd2ssd1t2FCJsaA7wkWhpbp9xfuNVpv7Ll4jFhzp6T4LAupSiV9uOeg0VQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -6962,11 +6991,19 @@ } }, "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0.tgz", + "integrity": "sha512-bKMI+C7/T/SPU1lKnbQbwxptpCrG9ashG+VkytmXCPZyuM9jB6VU+hY0oi4lC8LxTtAeWdckNCTa3nrGsAdA3Q==", + "dependencies": { + "data-uri-to-buffer": "^3.0.1", + "fetch-blob": "^3.1.2" + }, "engines": { - "node": "4.x || >=6.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, "node_modules/node-ical": { @@ -6980,6 +7017,14 @@ "uuid": "^8.3.1" } }, + "node_modules/node-ical/node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -8076,6 +8121,15 @@ "node": ">= 6.0.0" } }, + "node_modules/puppeteer-core/node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true, + "engines": { + "node": "4.x || >=6.0.0" + } + }, "node_modules/qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", @@ -8767,18 +8821,18 @@ } }, "node_modules/socket.io": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.3.tgz", - "integrity": "sha512-tLkaY13RcO4nIRh1K2hT5iuotfTaIQw7cVIe0FUykN3SuQi0cm7ALxuyT5/CtDswOMWUzMGTibxYNx/gU7In+Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.2.0.tgz", + "integrity": "sha512-sjlGfMmnaWvTRVxGRGWyhd9ctpg4APxWAxu85O/SxekkxHhfxmePWZbaYCkeX5QQX0z1YEnKOlNt6w82E4Nzug==", "dependencies": { - "@types/cookie": "^0.4.0", - "@types/cors": "^2.8.10", + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "~2.0.0", - "debug": "~4.3.1", - "engine.io": "~5.1.1", - "socket.io-adapter": "~2.3.1", + "debug": "~4.3.2", + "engine.io": "~5.2.0", + "socket.io-adapter": "~2.3.2", "socket.io-parser": "~4.0.4" }, "engines": { @@ -8786,9 +8840,9 @@ } }, "node_modules/socket.io-adapter": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.1.tgz", - "integrity": "sha512-8cVkRxI8Nt2wadkY6u60Y4rpW3ejA1rxgcK2JuyIhmF+RMNpTy1QRtkHIDUOf3B4HlQwakMsWbKftMv/71VMmw==" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.2.tgz", + "integrity": "sha512-PBZpxUPYjmoogY0aoaTmo1643JelsaS1CiAwNjRVdrI0X9Seuc19Y2Wife8k88avW6haG8cznvwbubAZwH4Mtg==" }, "node_modules/socket.io-parser": { "version": "4.0.4", @@ -10034,6 +10088,14 @@ "makeerror": "1.0.x" } }, + "node_modules/web-streams-polyfill": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.1.0.tgz", + "integrity": "sha512-wO9r1YnYe7kFBLHyyVEhV1H8VRWoNiNnuP+v/HUUmSTaRF8F93Kmd3JMrETx0f11GXxRek6OcL2QtjFIdc5WYw==", + "engines": { + "node": ">= 8" + } + }, "node_modules/webdriver": { "version": "6.12.1", "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-6.12.1.tgz", @@ -11480,14 +11542,14 @@ "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" }, "@types/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "@types/cors": { - "version": "2.8.10", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", - "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==" + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" }, "@types/graceful-fs": { "version": "4.1.5", @@ -12763,6 +12825,11 @@ } } }, + "data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" + }, "data-urls": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.0.tgz", @@ -13050,9 +13117,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.2.3.tgz", - "integrity": "sha512-FzWhbKHjq7ZTpPQFaYiLPL64erC8/BOsu5NlNN9nQ6f7rIP8ygKlNAlQit3vbOcksQAwItDUCIw4sW0mcaRpCA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.3.0.tgz", + "integrity": "sha512-d/BvOLDjI4i7yf9tqCuLL2fFGA2TrM/D9PyRpua+rJolG0qrwp/FohP02L0m+44kmPpofIo4l3NPwLmzyKKimA==", "devOptional": true, "requires": { "@electron/get": "^1.0.1", @@ -13125,9 +13192,9 @@ } }, "engine.io": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.1.1.tgz", - "integrity": "sha512-aMWot7H5aC8L4/T8qMYbLdvKlZOdJTH54FxfdFunTGvhMx1BHkJOntWArsVfgAZVwAO9LC2sryPWRcEeUzCe5w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.2.0.tgz", + "integrity": "sha512-d1DexkQx87IFr1FLuV+0f5kAm1Hk1uOVijLOb+D1sDO2QMb7YjE02VHtZtxo7xIXMgcWLb+vl3HRT0rI9tr4jQ==", "requires": { "accepts": "~1.3.4", "base64id": "2.0.0", @@ -13152,9 +13219,9 @@ } }, "engine.io-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", - "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz", + "integrity": "sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==", "requires": { "base64-arraybuffer": "0.1.4" } @@ -13372,9 +13439,9 @@ } }, "eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", + "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -13727,6 +13794,14 @@ "sax": "^1.2.4" } }, + "fetch-blob": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.2.tgz", + "integrity": "sha512-hunJbvy/6OLjCD0uuhLdp0mMPzP/yd2ssd1t2FCJsaA7wkWhpbp9xfuNVpv7Ll4jFhzp6T4LAupSiV9uOeg0VQ==", + "requires": { + "web-streams-polyfill": "^3.0.3" + } + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -15864,9 +15939,13 @@ } }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0.tgz", + "integrity": "sha512-bKMI+C7/T/SPU1lKnbQbwxptpCrG9ashG+VkytmXCPZyuM9jB6VU+hY0oi4lC8LxTtAeWdckNCTa3nrGsAdA3Q==", + "requires": { + "data-uri-to-buffer": "^3.0.1", + "fetch-blob": "^3.1.2" + } }, "node-ical": { "version": "0.13.0", @@ -15877,6 +15956,13 @@ "node-fetch": "^2.6.1", "rrule": "2.6.8", "uuid": "^8.3.1" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + } } }, "node-int64": { @@ -16709,6 +16795,12 @@ "agent-base": "5", "debug": "4" } + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true } } }, @@ -17253,25 +17345,25 @@ } }, "socket.io": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.3.tgz", - "integrity": "sha512-tLkaY13RcO4nIRh1K2hT5iuotfTaIQw7cVIe0FUykN3SuQi0cm7ALxuyT5/CtDswOMWUzMGTibxYNx/gU7In+Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.2.0.tgz", + "integrity": "sha512-sjlGfMmnaWvTRVxGRGWyhd9ctpg4APxWAxu85O/SxekkxHhfxmePWZbaYCkeX5QQX0z1YEnKOlNt6w82E4Nzug==", "requires": { - "@types/cookie": "^0.4.0", - "@types/cors": "^2.8.10", + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "~2.0.0", - "debug": "~4.3.1", - "engine.io": "~5.1.1", - "socket.io-adapter": "~2.3.1", + "debug": "~4.3.2", + "engine.io": "~5.2.0", + "socket.io-adapter": "~2.3.2", "socket.io-parser": "~4.0.4" } }, "socket.io-adapter": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.1.tgz", - "integrity": "sha512-8cVkRxI8Nt2wadkY6u60Y4rpW3ejA1rxgcK2JuyIhmF+RMNpTy1QRtkHIDUOf3B4HlQwakMsWbKftMv/71VMmw==" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.2.tgz", + "integrity": "sha512-PBZpxUPYjmoogY0aoaTmo1643JelsaS1CiAwNjRVdrI0X9Seuc19Y2Wife8k88avW6haG8cznvwbubAZwH4Mtg==" }, "socket.io-parser": { "version": "4.0.4", @@ -18204,6 +18296,11 @@ "makeerror": "1.0.x" } }, + "web-streams-polyfill": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.1.0.tgz", + "integrity": "sha512-wO9r1YnYe7kFBLHyyVEhV1H8VRWoNiNnuP+v/HUUmSTaRF8F93Kmd3JMrETx0f11GXxRek6OcL2QtjFIdc5WYw==" + }, "webdriver": { "version": "6.12.1", "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-6.12.1.tgz", diff --git a/package.json b/package.json index 6bce27aa..4ffc8161 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "eslint-config-prettier": "^8.3.0", "eslint-plugin-jest": "^24.4.0", "eslint-plugin-jsdoc": "^36.0.8", - "eslint-plugin-prettier": "^3.4.1", + "eslint-plugin-prettier": "^4.0.0", "express-basic-auth": "^1.2.0", "husky": "^7.0.2", "jest": "^27.1.0", @@ -66,7 +66,7 @@ "suncalc": "^1.8.0" }, "optionalDependencies": { - "electron": "^13.2.3" + "electron": "^13.3.0" }, "dependencies": { "colors": "^1.4.0", @@ -80,10 +80,10 @@ "iconv-lite": "^0.6.3", "module-alias": "^2.2.2", "moment": "^2.29.1", - "node-fetch": "^2.6.1", + "node-fetch": "^3.0.0", "node-ical": "^0.13.0", "simple-git": "^2.45.0", - "socket.io": "^4.1.3" + "socket.io": "^4.2.0" }, "_moduleAliases": { "node_helper": "js/node_helper.js", From c132206543e937109c5423a7862ae2271da1a0fd Mon Sep 17 00:00:00 2001 From: rejas Date: Wed, 1 Sep 2021 20:02:45 +0200 Subject: [PATCH 071/134] Use new method in ukmetofficedatahub provider --- .../weather/providers/ukmetofficedatahub.js | 21 +++---------------- .../default/weather/providers/weatherbit.js | 1 - 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/modules/default/weather/providers/ukmetofficedatahub.js b/modules/default/weather/providers/ukmetofficedatahub.js index 054dce78..1a98dfa2 100644 --- a/modules/default/weather/providers/ukmetofficedatahub.js +++ b/modules/default/weather/providers/ukmetofficedatahub.js @@ -150,11 +150,9 @@ WeatherProvider.register("ukmetofficedatahub", { } // Determine the sunrise/sunset times - (still) not supplied in UK Met Office data - // Passes {longitude, latitude, height} to calcAstroData - // Could just pass lat/long from this.config, but returned data from MO also contains elevation - let times = this.calcAstroData(currentWeatherData.features[0].geometry.coordinates); - currentWeather.sunrise = times[0]; - currentWeather.sunset = times[1]; + // Passes {longitude, latitude} to SunCalc, could pass height to, but + // SunCalc.getTimes doesnt take that into account + currentWeather.updateSunTime(this.config.lat, this.config.lon); return currentWeather; }, @@ -223,7 +221,6 @@ WeatherProvider.register("ukmetofficedatahub", { // Pass on full details so they can be used in custom templates // Note the units of the supplied data when using this (see top of file) - forecastWeather.rawData = forecastDataDays[day]; dailyForecasts.push(forecastWeather); @@ -238,18 +235,6 @@ WeatherProvider.register("ukmetofficedatahub", { this.fetchedLocationName = name; }, - // Calculate sunrise/sunset times - calcAstroData(location) { - const sunTimes = []; - - // Careful to pass values to SunCalc in correct order (latitude, longitude, elevation) - let times = SunCalc.getTimes(new Date(), location[1], location[0], location[2]); - sunTimes.push(moment(times.sunrise, "X")); - sunTimes.push(moment(times.sunset, "X")); - - return sunTimes; - }, - // Convert temperatures to Fahrenheit (from degrees C), if required convertTemp(tempInC) { return this.config.tempUnits === "imperial" ? (tempInC * 9) / 5 + 32 : tempInC; diff --git a/modules/default/weather/providers/weatherbit.js b/modules/default/weather/providers/weatherbit.js index afca0c83..94b9caea 100644 --- a/modules/default/weather/providers/weatherbit.js +++ b/modules/default/weather/providers/weatherbit.js @@ -89,7 +89,6 @@ WeatherProvider.register("weatherbit", { currentWeather.windSpeed = parseFloat(currentWeatherData.data[0].wind_spd); currentWeather.windDirection = currentWeatherData.data[0].wind_dir; currentWeather.weatherType = this.convertWeatherType(currentWeatherData.data[0].weather.icon); - Log.log("Wx Icon: " + currentWeatherData.data[0].weather.icon); currentWeather.sunrise = moment(currentWeatherData.data[0].sunrise, "HH:mm").add(tzOffset, "m"); currentWeather.sunset = moment(currentWeatherData.data[0].sunset, "HH:mm").add(tzOffset, "m"); From e2158716d6c78db3724993352ab8aa53a76ad2fc Mon Sep 17 00:00:00 2001 From: rejas Date: Wed, 1 Sep 2021 11:02:06 +0200 Subject: [PATCH 072/134] Revert "Update dependencies" This reverts commit f49312ed13edb06cd3f67d510b14294b25327710. --- package-lock.json | 239 ++++++++++++++-------------------------------- package.json | 8 +- 2 files changed, 75 insertions(+), 172 deletions(-) diff --git a/package-lock.json b/package-lock.json index b19e6a0d..ae6ab35e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,16 +21,16 @@ "iconv-lite": "^0.6.3", "module-alias": "^2.2.2", "moment": "^2.29.1", - "node-fetch": "^3.0.0", + "node-fetch": "^2.6.1", "node-ical": "^0.13.0", "simple-git": "^2.45.0", - "socket.io": "^4.2.0" + "socket.io": "^4.1.3" }, "devDependencies": { "eslint-config-prettier": "^8.3.0", "eslint-plugin-jest": "^24.4.0", "eslint-plugin-jsdoc": "^36.0.8", - "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-prettier": "^3.4.1", "express-basic-auth": "^1.2.0", "husky": "^7.0.2", "jest": "^27.1.0", @@ -51,7 +51,7 @@ "node": ">=12" }, "optionalDependencies": { - "electron": "^13.3.0" + "electron": "^13.2.3" } }, "node_modules/@babel/code-frame": { @@ -1227,14 +1227,14 @@ "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" }, "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==" }, "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", + "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==" }, "node_modules/@types/graceful-fs": { "version": "4.1.5", @@ -2889,14 +2889,6 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, - "node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", - "engines": { - "node": ">= 6" - } - }, "node_modules/data-urls": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.0.tgz", @@ -3252,9 +3244,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.3.0.tgz", - "integrity": "sha512-d/BvOLDjI4i7yf9tqCuLL2fFGA2TrM/D9PyRpua+rJolG0qrwp/FohP02L0m+44kmPpofIo4l3NPwLmzyKKimA==", + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.2.3.tgz", + "integrity": "sha512-FzWhbKHjq7ZTpPQFaYiLPL64erC8/BOsu5NlNN9nQ6f7rIP8ygKlNAlQit3vbOcksQAwItDUCIw4sW0mcaRpCA==", "devOptional": true, "hasInstallScript": true, "dependencies": { @@ -3362,9 +3354,9 @@ } }, "node_modules/engine.io": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.2.0.tgz", - "integrity": "sha512-d1DexkQx87IFr1FLuV+0f5kAm1Hk1uOVijLOb+D1sDO2QMb7YjE02VHtZtxo7xIXMgcWLb+vl3HRT0rI9tr4jQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.1.1.tgz", + "integrity": "sha512-aMWot7H5aC8L4/T8qMYbLdvKlZOdJTH54FxfdFunTGvhMx1BHkJOntWArsVfgAZVwAO9LC2sryPWRcEeUzCe5w==", "dependencies": { "accepts": "~1.3.4", "base64id": "2.0.0", @@ -3379,9 +3371,9 @@ } }, "node_modules/engine.io-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz", - "integrity": "sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", + "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", "dependencies": { "base64-arraybuffer": "0.1.4" }, @@ -3693,9 +3685,9 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0" @@ -3704,8 +3696,8 @@ "node": ">=6.0.0" }, "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" }, "peerDependenciesMeta": { "eslint-config-prettier": { @@ -4152,27 +4144,6 @@ "node": ">=10" } }, - "node_modules/fetch-blob": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.2.tgz", - "integrity": "sha512-hunJbvy/6OLjCD0uuhLdp0mMPzP/yd2ssd1t2FCJsaA7wkWhpbp9xfuNVpv7Ll4jFhzp6T4LAupSiV9uOeg0VQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -6991,19 +6962,11 @@ } }, "node_modules/node-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0.tgz", - "integrity": "sha512-bKMI+C7/T/SPU1lKnbQbwxptpCrG9ashG+VkytmXCPZyuM9jB6VU+hY0oi4lC8LxTtAeWdckNCTa3nrGsAdA3Q==", - "dependencies": { - "data-uri-to-buffer": "^3.0.1", - "fetch-blob": "^3.1.2" - }, + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "node": "4.x || >=6.0.0" } }, "node_modules/node-ical": { @@ -7017,14 +6980,6 @@ "uuid": "^8.3.1" } }, - "node_modules/node-ical/node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "engines": { - "node": "4.x || >=6.0.0" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -8121,15 +8076,6 @@ "node": ">= 6.0.0" } }, - "node_modules/puppeteer-core/node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true, - "engines": { - "node": "4.x || >=6.0.0" - } - }, "node_modules/qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", @@ -8821,18 +8767,18 @@ } }, "node_modules/socket.io": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.2.0.tgz", - "integrity": "sha512-sjlGfMmnaWvTRVxGRGWyhd9ctpg4APxWAxu85O/SxekkxHhfxmePWZbaYCkeX5QQX0z1YEnKOlNt6w82E4Nzug==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.3.tgz", + "integrity": "sha512-tLkaY13RcO4nIRh1K2hT5iuotfTaIQw7cVIe0FUykN3SuQi0cm7ALxuyT5/CtDswOMWUzMGTibxYNx/gU7In+Q==", "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.10", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~5.2.0", - "socket.io-adapter": "~2.3.2", + "debug": "~4.3.1", + "engine.io": "~5.1.1", + "socket.io-adapter": "~2.3.1", "socket.io-parser": "~4.0.4" }, "engines": { @@ -8840,9 +8786,9 @@ } }, "node_modules/socket.io-adapter": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.2.tgz", - "integrity": "sha512-PBZpxUPYjmoogY0aoaTmo1643JelsaS1CiAwNjRVdrI0X9Seuc19Y2Wife8k88avW6haG8cznvwbubAZwH4Mtg==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.1.tgz", + "integrity": "sha512-8cVkRxI8Nt2wadkY6u60Y4rpW3ejA1rxgcK2JuyIhmF+RMNpTy1QRtkHIDUOf3B4HlQwakMsWbKftMv/71VMmw==" }, "node_modules/socket.io-parser": { "version": "4.0.4", @@ -10088,14 +10034,6 @@ "makeerror": "1.0.x" } }, - "node_modules/web-streams-polyfill": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.1.0.tgz", - "integrity": "sha512-wO9r1YnYe7kFBLHyyVEhV1H8VRWoNiNnuP+v/HUUmSTaRF8F93Kmd3JMrETx0f11GXxRek6OcL2QtjFIdc5WYw==", - "engines": { - "node": ">= 8" - } - }, "node_modules/webdriver": { "version": "6.12.1", "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-6.12.1.tgz", @@ -11542,14 +11480,14 @@ "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" }, "@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==" }, "@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", + "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==" }, "@types/graceful-fs": { "version": "4.1.5", @@ -12825,11 +12763,6 @@ } } }, - "data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" - }, "data-urls": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.0.tgz", @@ -13117,9 +13050,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.3.0.tgz", - "integrity": "sha512-d/BvOLDjI4i7yf9tqCuLL2fFGA2TrM/D9PyRpua+rJolG0qrwp/FohP02L0m+44kmPpofIo4l3NPwLmzyKKimA==", + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.2.3.tgz", + "integrity": "sha512-FzWhbKHjq7ZTpPQFaYiLPL64erC8/BOsu5NlNN9nQ6f7rIP8ygKlNAlQit3vbOcksQAwItDUCIw4sW0mcaRpCA==", "devOptional": true, "requires": { "@electron/get": "^1.0.1", @@ -13192,9 +13125,9 @@ } }, "engine.io": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.2.0.tgz", - "integrity": "sha512-d1DexkQx87IFr1FLuV+0f5kAm1Hk1uOVijLOb+D1sDO2QMb7YjE02VHtZtxo7xIXMgcWLb+vl3HRT0rI9tr4jQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.1.1.tgz", + "integrity": "sha512-aMWot7H5aC8L4/T8qMYbLdvKlZOdJTH54FxfdFunTGvhMx1BHkJOntWArsVfgAZVwAO9LC2sryPWRcEeUzCe5w==", "requires": { "accepts": "~1.3.4", "base64id": "2.0.0", @@ -13219,9 +13152,9 @@ } }, "engine.io-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz", - "integrity": "sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", + "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", "requires": { "base64-arraybuffer": "0.1.4" } @@ -13439,9 +13372,9 @@ } }, "eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -13794,14 +13727,6 @@ "sax": "^1.2.4" } }, - "fetch-blob": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.2.tgz", - "integrity": "sha512-hunJbvy/6OLjCD0uuhLdp0mMPzP/yd2ssd1t2FCJsaA7wkWhpbp9xfuNVpv7Ll4jFhzp6T4LAupSiV9uOeg0VQ==", - "requires": { - "web-streams-polyfill": "^3.0.3" - } - }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -15939,13 +15864,9 @@ } }, "node-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0.tgz", - "integrity": "sha512-bKMI+C7/T/SPU1lKnbQbwxptpCrG9ashG+VkytmXCPZyuM9jB6VU+hY0oi4lC8LxTtAeWdckNCTa3nrGsAdA3Q==", - "requires": { - "data-uri-to-buffer": "^3.0.1", - "fetch-blob": "^3.1.2" - } + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, "node-ical": { "version": "0.13.0", @@ -15956,13 +15877,6 @@ "node-fetch": "^2.6.1", "rrule": "2.6.8", "uuid": "^8.3.1" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - } } }, "node-int64": { @@ -16795,12 +16709,6 @@ "agent-base": "5", "debug": "4" } - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true } } }, @@ -17345,25 +17253,25 @@ } }, "socket.io": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.2.0.tgz", - "integrity": "sha512-sjlGfMmnaWvTRVxGRGWyhd9ctpg4APxWAxu85O/SxekkxHhfxmePWZbaYCkeX5QQX0z1YEnKOlNt6w82E4Nzug==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.3.tgz", + "integrity": "sha512-tLkaY13RcO4nIRh1K2hT5iuotfTaIQw7cVIe0FUykN3SuQi0cm7ALxuyT5/CtDswOMWUzMGTibxYNx/gU7In+Q==", "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.10", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~5.2.0", - "socket.io-adapter": "~2.3.2", + "debug": "~4.3.1", + "engine.io": "~5.1.1", + "socket.io-adapter": "~2.3.1", "socket.io-parser": "~4.0.4" } }, "socket.io-adapter": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.2.tgz", - "integrity": "sha512-PBZpxUPYjmoogY0aoaTmo1643JelsaS1CiAwNjRVdrI0X9Seuc19Y2Wife8k88avW6haG8cznvwbubAZwH4Mtg==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.1.tgz", + "integrity": "sha512-8cVkRxI8Nt2wadkY6u60Y4rpW3ejA1rxgcK2JuyIhmF+RMNpTy1QRtkHIDUOf3B4HlQwakMsWbKftMv/71VMmw==" }, "socket.io-parser": { "version": "4.0.4", @@ -18296,11 +18204,6 @@ "makeerror": "1.0.x" } }, - "web-streams-polyfill": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.1.0.tgz", - "integrity": "sha512-wO9r1YnYe7kFBLHyyVEhV1H8VRWoNiNnuP+v/HUUmSTaRF8F93Kmd3JMrETx0f11GXxRek6OcL2QtjFIdc5WYw==" - }, "webdriver": { "version": "6.12.1", "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-6.12.1.tgz", diff --git a/package.json b/package.json index 4ffc8161..6bce27aa 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "eslint-config-prettier": "^8.3.0", "eslint-plugin-jest": "^24.4.0", "eslint-plugin-jsdoc": "^36.0.8", - "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-prettier": "^3.4.1", "express-basic-auth": "^1.2.0", "husky": "^7.0.2", "jest": "^27.1.0", @@ -66,7 +66,7 @@ "suncalc": "^1.8.0" }, "optionalDependencies": { - "electron": "^13.3.0" + "electron": "^13.2.3" }, "dependencies": { "colors": "^1.4.0", @@ -80,10 +80,10 @@ "iconv-lite": "^0.6.3", "module-alias": "^2.2.2", "moment": "^2.29.1", - "node-fetch": "^3.0.0", + "node-fetch": "^2.6.1", "node-ical": "^0.13.0", "simple-git": "^2.45.0", - "socket.io": "^4.2.0" + "socket.io": "^4.1.3" }, "_moduleAliases": { "node_helper": "js/node_helper.js", From a273266e5ec9ef4042868baed936e4598e39412a Mon Sep 17 00:00:00 2001 From: veeck Date: Thu, 2 Sep 2021 20:35:06 +0200 Subject: [PATCH 073/134] Remove useless returns and now unused jsdoc variables --- .eslintrc.json | 3 ++- modules/default/weather/providers/envcanada.js | 4 ---- modules/default/weather/providers/smhi.js | 2 +- modules/default/weather/providers/ukmetoffice.js | 2 +- modules/default/weather/providers/ukmetofficedatahub.js | 2 +- modules/default/weather/providers/weathergov.js | 2 +- 6 files changed, 6 insertions(+), 9 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 3e685a0d..637b2eb7 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -25,6 +25,7 @@ "prettier/prettier": "error", "eqeqeq": "error", "no-prototype-builtins": "off", - "no-unused-vars": "off" + "no-unused-vars": "off", + "no-useless-return": "error" } } diff --git a/modules/default/weather/providers/envcanada.js b/modules/default/weather/providers/envcanada.js index 0f9ef21e..ea2d5980 100644 --- a/modules/default/weather/providers/envcanada.js +++ b/modules/default/weather/providers/envcanada.js @@ -513,8 +513,6 @@ WeatherProvider.register("envcanada", { weather.maxTemperature = this.convertTemp(nextTemp); } } - - return; }, // @@ -560,8 +558,6 @@ WeatherProvider.register("envcanada", { weather.precipitation = foreGroup[today].querySelector("abbreviatedForecast pop").textContent; weather.precipitationUnits = foreGroup[today].querySelector("abbreviatedForecast pop").getAttribute("units"); } - - return; }, // diff --git a/modules/default/weather/providers/smhi.js b/modules/default/weather/providers/smhi.js index 2869906a..83af249b 100644 --- a/modules/default/weather/providers/smhi.js +++ b/modules/default/weather/providers/smhi.js @@ -1,4 +1,4 @@ -/* global WeatherProvider, WeatherObject, SunCalc */ +/* global WeatherProvider, WeatherObject */ /* Magic Mirror * Module: Weather diff --git a/modules/default/weather/providers/ukmetoffice.js b/modules/default/weather/providers/ukmetoffice.js index d2443866..9166599a 100755 --- a/modules/default/weather/providers/ukmetoffice.js +++ b/modules/default/weather/providers/ukmetoffice.js @@ -1,4 +1,4 @@ -/* global WeatherProvider, WeatherObject, SunCalc */ +/* global WeatherProvider, WeatherObject */ /* Magic Mirror * Module: Weather diff --git a/modules/default/weather/providers/ukmetofficedatahub.js b/modules/default/weather/providers/ukmetofficedatahub.js index 1a98dfa2..21245a4c 100644 --- a/modules/default/weather/providers/ukmetofficedatahub.js +++ b/modules/default/weather/providers/ukmetofficedatahub.js @@ -1,4 +1,4 @@ -/* global WeatherProvider, WeatherObject, SunCalc */ +/* global WeatherProvider, WeatherObject */ /* Magic Mirror * Module: Weather diff --git a/modules/default/weather/providers/weathergov.js b/modules/default/weather/providers/weathergov.js index 4ae25f56..31934784 100755 --- a/modules/default/weather/providers/weathergov.js +++ b/modules/default/weather/providers/weathergov.js @@ -1,4 +1,4 @@ -/* global WeatherProvider, WeatherObject, SunCalc */ +/* global WeatherProvider, WeatherObject */ /* Magic Mirror * Module: Weather From 9ee11654a6fadee2fb605d29e0a877cc1224c1a4 Mon Sep 17 00:00:00 2001 From: veeck Date: Thu, 2 Sep 2021 20:35:43 +0200 Subject: [PATCH 074/134] Update jsdocs --- modules/default/weather/providers/ukmetoffice.js | 6 +++--- modules/default/weather/weatherobject.js | 9 +++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/modules/default/weather/providers/ukmetoffice.js b/modules/default/weather/providers/ukmetoffice.js index 9166599a..158592bd 100755 --- a/modules/default/weather/providers/ukmetoffice.js +++ b/modules/default/weather/providers/ukmetoffice.js @@ -232,16 +232,16 @@ WeatherProvider.register("ukmetoffice", { return windCardinals.hasOwnProperty(windDirection) ? windCardinals[windDirection] : null; }, - /* + /** * Generates an url with api parameters based on the config. * - * return String - URL params. + * @param {string} forecastType daily or 3hourly forecast + * @returns {string} url */ getParams(forecastType) { let params = "?"; params += "res=" + forecastType; params += "&key=" + this.config.apiKey; - return params; } }); diff --git a/modules/default/weather/weatherobject.js b/modules/default/weather/weatherobject.js index 2d08f028..56eeeeee 100755 --- a/modules/default/weather/weatherobject.js +++ b/modules/default/weather/weatherobject.js @@ -13,11 +13,12 @@ */ class WeatherObject { /** + * Constructor for a WeatherObject * - * @param units - * @param tempUnits - * @param windUnits - * @param useKmh + * @param {string} units what units to use, "imperial" or "metric" + * @param {string} tempUnits what tempunits to use + * @param {string} windUnits what windunits to use + * @param {boolean} useKmh use kmh if true, mps if false */ constructor(units, tempUnits, windUnits, useKmh) { this.units = units; From a7756cec13a723556c46232ea78730bb0536b1f5 Mon Sep 17 00:00:00 2001 From: veeck Date: Thu, 2 Sep 2021 20:37:41 +0200 Subject: [PATCH 075/134] Inline some functions --- modules/default/weather/providers/envcanada.js | 4 +--- modules/default/weather/providers/ukmetofficedatahub.js | 4 +--- modules/default/weather/weatherobject.js | 3 +-- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/modules/default/weather/providers/envcanada.js b/modules/default/weather/providers/envcanada.js index ea2d5980..868ee6e2 100644 --- a/modules/default/weather/providers/envcanada.js +++ b/modules/default/weather/providers/envcanada.js @@ -164,9 +164,7 @@ WeatherProvider.register("envcanada", { // CORS errors when accessing EC // getUrl() { - const path = "https://thingproxy.freeboard.io/fetch/https://dd.weather.gc.ca/citypage_weather/xml/" + this.config.provCode + "/" + this.config.siteCode + "_e.xml"; - - return path; + return "https://thingproxy.freeboard.io/fetch/https://dd.weather.gc.ca/citypage_weather/xml/" + this.config.provCode + "/" + this.config.siteCode + "_e.xml"; }, // diff --git a/modules/default/weather/providers/ukmetofficedatahub.js b/modules/default/weather/providers/ukmetofficedatahub.js index 21245a4c..9603841b 100644 --- a/modules/default/weather/providers/ukmetofficedatahub.js +++ b/modules/default/weather/providers/ukmetofficedatahub.js @@ -71,13 +71,11 @@ WeatherProvider.register("ukmetofficedatahub", { // For DataHub requests, the API key/secret are sent in the headers rather than as query strings. // Headers defined according to Data Hub API (https://metoffice.apiconnect.ibmcloud.com/metoffice/production/api) getHeaders() { - let headers = { + return { accept: "application/json", "x-ibm-client-id": this.config.apiKey, "x-ibm-client-secret": this.config.apiSecret }; - - return headers; }, // Fetch data using supplied URL and request headers diff --git a/modules/default/weather/weatherobject.js b/modules/default/weather/weatherobject.js index 56eeeeee..9224208a 100755 --- a/modules/default/weather/weatherobject.js +++ b/modules/default/weather/weatherobject.js @@ -90,8 +90,7 @@ class WeatherObject { } kmhWindSpeed() { - const windInKmh = this.windUnits === "imperial" ? this.windSpeed * 1.609344 : (this.windSpeed * 60 * 60) / 1000; - return windInKmh; + return this.windUnits === "imperial" ? this.windSpeed * 1.609344 : (this.windSpeed * 60 * 60) / 1000; } nextSunAction() { From 221b6325f62a99922c2f9b3ac410299423ae1668 Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 4 Sep 2021 12:25:43 +0200 Subject: [PATCH 076/134] Cleanup some docs in the weather modules --- modules/default/weather/providers/darksky.js | 6 +- .../weather/providers/openweathermap.js | 4 +- modules/default/weather/providers/smhi.js | 62 +++++++++---------- .../weather/providers/ukmetofficedatahub.js | 5 +- .../default/weather/providers/weatherbit.js | 3 +- modules/default/weather/weatherobject.js | 4 +- 6 files changed, 44 insertions(+), 40 deletions(-) diff --git a/modules/default/weather/providers/darksky.js b/modules/default/weather/providers/darksky.js index ea073887..451ac98b 100755 --- a/modules/default/weather/providers/darksky.js +++ b/modules/default/weather/providers/darksky.js @@ -8,7 +8,8 @@ * MIT Licensed * * This class is a provider for Dark Sky. - * Note that the Dark Sky API does not provide rainfall. Instead it provides snowfall and precipitation probability + * Note that the Dark Sky API does not provide rainfall. Instead it provides + * snowfall and precipitation probability */ WeatherProvider.register("darksky", { // Set the name of the provider. @@ -98,7 +99,8 @@ WeatherProvider.register("darksky", { weather.snow = 0; // The API will return centimeters if units is 'si' and will return inches for 'us' - // Note that the Dark Sky API does not provide rainfall. Instead it provides snowfall and precipitation probability + // Note that the Dark Sky API does not provide rainfall. + // Instead it provides snowfall and precipitation probability if (forecast.hasOwnProperty("precipAccumulation")) { if (this.config.units === "imperial" && !isNaN(forecast.precipAccumulation)) { weather.snow = forecast.precipAccumulation; diff --git a/modules/default/weather/providers/openweathermap.js b/modules/default/weather/providers/openweathermap.js index ec17904a..d6779d8d 100755 --- a/modules/default/weather/providers/openweathermap.js +++ b/modules/default/weather/providers/openweathermap.js @@ -18,10 +18,10 @@ WeatherProvider.register("openweathermap", { defaults: { apiVersion: "2.5", apiBase: "https://api.openweathermap.org/data/", - weatherEndpoint: "", + weatherEndpoint: "", // can be "onecall", "forecast" or "weather" (for current) locationID: false, location: false, - lat: 0, + lat: 0, // the onecall endpoint needs lat / lon values, it doesn'T support the locationId lon: 0, apiKey: "" }, diff --git a/modules/default/weather/providers/smhi.js b/modules/default/weather/providers/smhi.js index 83af249b..603aa814 100644 --- a/modules/default/weather/providers/smhi.js +++ b/modules/default/weather/providers/smhi.js @@ -7,9 +7,8 @@ * By BuXXi https://github.com/buxxi * MIT Licensed * - * This class is a provider for SMHI (Sweden only). - * Note that SMHI doesn't provide sunrise and sundown, use SunCalc to calculate it. - * Metric system is the only supported unit. + * This class is a provider for SMHI (Sweden only). Metric system is the only + * supported unit. */ WeatherProvider.register("smhi", { providerName: "SMHI", @@ -193,7 +192,8 @@ WeatherProvider.register("smhi", { }, /** - * Resolve coordinates from the response data (probably preferably to use this if it's not matching the config values exactly) + * Resolve coordinates from the response data (probably preferably to use + * this if it's not matching the config values exactly) * * @param {object} data Response data from the weather service * @returns {{lon, lat}} the lat/long coordinates of the data @@ -237,12 +237,12 @@ WeatherProvider.register("smhi", { }, /** - * Map the icon value from SHMI to an icon that MagicMirror understands. + * Map the icon value from SMHI to an icon that MagicMirror understands. * Uses different icons depending if its daytime or nighttime. - * SHMI's description of what the numeric value means is the comment after the case. + * SMHI's description of what the numeric value means is the comment after the case. * - * @param {number} input The smhi icon value - * @param {boolean} isDayTime True if the icon should be for daytime, false for nightime + * @param {number} input The SMHI icon value + * @param {boolean} isDayTime True if the icon should be for daytime, false for nighttime * @returns {string} The icon name for the MagicMirror */ convertWeatherType(input, isDayTime) { @@ -250,57 +250,57 @@ WeatherProvider.register("smhi", { case 1: return isDayTime ? "day-sunny" : "night-clear"; // Clear sky case 2: - return isDayTime ? "day-sunny-overcast" : "night-partly-cloudy"; //Nearly clear sky + return isDayTime ? "day-sunny-overcast" : "night-partly-cloudy"; // Nearly clear sky case 3: - return isDayTime ? "day-cloudy" : "night-cloudy"; //Variable cloudiness + return isDayTime ? "day-cloudy" : "night-cloudy"; // Variable cloudiness case 4: - return isDayTime ? "day-cloudy" : "night-cloudy"; //Halfclear sky + return isDayTime ? "day-cloudy" : "night-cloudy"; // Halfclear sky case 5: - return "cloudy"; //Cloudy sky + return "cloudy"; // Cloudy sky case 6: - return "cloudy"; //Overcast + return "cloudy"; // Overcast case 7: - return "fog"; //Fog + return "fog"; // Fog case 8: - return "showers"; //Light rain showers + return "showers"; // Light rain showers case 9: - return "showers"; //Moderate rain showers + return "showers"; // Moderate rain showers case 10: - return "showers"; //Heavy rain showers + return "showers"; // Heavy rain showers case 11: - return "thunderstorm"; //Thunderstorm + return "thunderstorm"; // Thunderstorm case 12: - return "sleet"; //Light sleet showers + return "sleet"; // Light sleet showers case 13: - return "sleet"; //Moderate sleet showers + return "sleet"; // Moderate sleet showers case 14: - return "sleet"; //Heavy sleet showers + return "sleet"; // Heavy sleet showers case 15: - return "snow"; //Light snow showers + return "snow"; // Light snow showers case 16: - return "snow"; //Moderate snow showers + return "snow"; // Moderate snow showers case 17: - return "snow"; //Heavy snow showers + return "snow"; // Heavy snow showers case 18: - return "rain"; //Light rain + return "rain"; // Light rain case 19: - return "rain"; //Moderate rain + return "rain"; // Moderate rain case 20: - return "rain"; //Heavy rain + return "rain"; // Heavy rain case 21: - return "thunderstorm"; //Thunder + return "thunderstorm"; // Thunder case 22: return "sleet"; // Light sleet case 23: - return "sleet"; //Moderate sleet + return "sleet"; // Moderate sleet case 24: return "sleet"; // Heavy sleet case 25: return "snow"; // Light snowfall case 26: - return "snow"; //Moderate snowfall + return "snow"; // Moderate snowfall case 27: - return "snow"; //Heavy snowfall + return "snow"; // Heavy snowfall default: return ""; } diff --git a/modules/default/weather/providers/ukmetofficedatahub.js b/modules/default/weather/providers/ukmetofficedatahub.js index 9603841b..bab1220d 100644 --- a/modules/default/weather/providers/ukmetofficedatahub.js +++ b/modules/default/weather/providers/ukmetofficedatahub.js @@ -13,9 +13,8 @@ * Hourly data for next 2 days ("hourly") - https://www.metoffice.gov.uk/binaries/content/assets/metofficegovuk/pdf/data/global-spot-data-hourly.pdf * 3-hourly data for the next 7 days ("3hourly") - https://www.metoffice.gov.uk/binaries/content/assets/metofficegovuk/pdf/data/global-spot-data-3-hourly.pdf * Daily data for the next 7 days ("daily") - https://www.metoffice.gov.uk/binaries/content/assets/metofficegovuk/pdf/data/global-spot-data-daily.pdf - */ - -/* NOTES + * + * NOTES * This provider requires longitude/latitude coordinates, rather than a location ID (as with the previous Met Office provider) * Provide the following in your config.js file: * weatherProvider: "ukmetofficedatahub", diff --git a/modules/default/weather/providers/weatherbit.js b/modules/default/weather/providers/weatherbit.js index 94b9caea..17f27812 100644 --- a/modules/default/weather/providers/weatherbit.js +++ b/modules/default/weather/providers/weatherbit.js @@ -7,7 +7,8 @@ * By Andrew Pometti * MIT Licensed * - * This class is a provider for Weatherbit, based on Nicholas Hubbard's class for Dark Sky & Vince Peri's class for Weather.gov. + * This class is a provider for Weatherbit, based on Nicholas Hubbard's class + * for Dark Sky & Vince Peri's class for Weather.gov. */ WeatherProvider.register("weatherbit", { // Set the name of the provider. diff --git a/modules/default/weather/weatherobject.js b/modules/default/weather/weatherobject.js index 9224208a..4501f681 100755 --- a/modules/default/weather/weatherobject.js +++ b/modules/default/weather/weatherobject.js @@ -133,7 +133,9 @@ class WeatherObject { } /** - * Update the sunrise / sunset time depending on the location + * Update the sunrise / sunset time depending on the location. This can be + * used if your provider doesnt provide that data by itself. Then SunCalc + * is used here to calculate them according to the location. * * @param {number} lat latitude * @param {number} lon longitude From 860840c367a6cd08d0b853e51d1ec395b2b56b6f Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sat, 4 Sep 2021 19:08:18 +0200 Subject: [PATCH 077/134] dirty working snapshot --- .../default/updatenotification/node_helper.js | 122 +++++++++++++----- 1 file changed, 89 insertions(+), 33 deletions(-) diff --git a/modules/default/updatenotification/node_helper.js b/modules/default/updatenotification/node_helper.js index e2e5617c..fbe363f5 100644 --- a/modules/default/updatenotification/node_helper.js +++ b/modules/default/updatenotification/node_helper.js @@ -1,5 +1,5 @@ -const SimpleGit = require("simple-git"); -const simpleGits = []; +const { exec } = require("child_process"); +const gitRepos = []; const fs = require("fs"); const path = require("path"); const defaultModules = require(__dirname + "/../defaultmodules.js"); @@ -18,7 +18,7 @@ module.exports = NodeHelper.create({ // Push MagicMirror itself , biggest chance it'll show up last in UI and isn't overwritten // others will be added in front // this method returns promises so we can't wait for every one to resolve before continuing - simpleGits.push({ module: "default", git: this.createGit(path.normalize(__dirname + "/../../../")) }); + gitRepos.push({ module: "default", folder: path.normalize(__dirname + "/../../../") }); for (let moduleName in modules) { if (!this.ignoreUpdateChecking(moduleName)) { @@ -30,9 +30,10 @@ module.exports = NodeHelper.create({ // Throws error if file doesn't exist fs.statSync(path.join(moduleFolder, ".git")); // Fetch the git or throw error if no remotes - let git = await this.resolveRemote(moduleFolder); - // Folder has .git and has at least one git remote, watch this folder - simpleGits.unshift({ module: moduleName, git: git }); + if (this.isGitRepo(moduleFolder)) { + // Folder has .git and has at least one git remote, watch this folder + gitRepos.unshift({ module: moduleName, folder: moduleFolder }); + } } catch (err) { // Error when directory .git doesn't exist or doesn't have any remotes // This module is not managed with git, skip @@ -54,35 +55,88 @@ module.exports = NodeHelper.create({ } }, - resolveRemote: async function (moduleFolder) { - let git = this.createGit(moduleFolder); - let remotes = await git.getRemotes(true); + isGitRepo: function (moduleFolder) { + exec("cd " + moduleFolder + " && git remote -v", (err, stdout, stderr) => { + if (err) { + Log.error("Failed to fetch git data for " + moduleFolder + ": " + err); + return false; + } + }); - if (remotes.length < 1 || remotes[0].name.length < 1) { - throw new Error("No valid remote for folder " + moduleFolder); - } - - return git; + return true; }, - performFetch: async function () { - for (let sg of simpleGits) { - try { - let fetchData = await sg.git.fetch(["--dry-run"]).status(); - let logData = await sg.git.log({ "-1": null }); - if (logData.latest && "hash" in logData.latest) { - this.sendSocketNotification("STATUS", { - module: sg.module, - behind: fetchData.behind, - current: fetchData.current, - hash: logData.latest.hash, - tracking: fetchData.tracking + performFetch: function () { + for (let repo of gitRepos) { + let gitInfo = { + module: repo.module, + // commits behind: + behind: 0, + // branch name: + current: "", + // current hash: + hash: "", + // remote branch: + tracking: "" + }; + exec("cd " + repo.folder + " && git rev-parse HEAD", (err, stdout, stderr) => { + if (err) { + Log.error("Failed to get current commit hash for " + repo.module + ": " + err + " " + stderr); + } else { + // console.log(stdout); + gitInfo.hash = stdout; + // console.log("hash: " + gitInfo.hash); + exec("cd " + repo.folder + " && git status -sb", (err, stdout, stderr) => { + if (err) { + Log.error("Failed to get git status for " + repo.module + ": " + err + " " + stderr); + } else { + let status = stdout.split("\n")[0]; + // console.log(repo.module); + status = status.match(/(?![.#])([^.]*)/g); + gitInfo.current = status[0].trim(); + // console.log("current: " + gitInfo.current); + status = status[1].split(" "); + gitInfo.tracking = status[0].trim(); + // console.log("tracking: " + gitInfo.tracking); + if (status[2]) { + gitInfo.behind = parseInt(status[2].substring(0, status[2].length - 1)); + // console.log("behind: " + gitInfo.behind); + this.sendSocketNotification("STATUS", gitInfo); + } else { + exec("cd " + repo.folder + " && git fetch --dry-run", (err, stdout, stderr) => { + if (err) { + Log.error("Failed to fetch git data for " + repo.module + ": " + err); + } else { + // console.log(repo.module); + // console.dir(stderr); + if (stderr !== "") { + // get behind + gitInfo.behind = 1; + let refs = stderr.split('\n')[1].match(/s*([a-z,0-9]+[\.]+[a-z,0-9]+)s*/g)[0]; + // console.dir(refs); + if (refs === "") { + this.sendSocketNotification("STATUS", gitInfo); + } else { + exec("cd " + repo.folder + " && git rev-list --ancestry-path --count " + refs, (err, stdout, stderr) => { + gitInfo.behind = parseInt(stdout); + // console.log("behind: " + gitInfo.behind); + this.sendSocketNotification("STATUS", gitInfo); + }); + } + } + } + }); + } + } }); } - } catch (err) { - Log.error("Failed to fetch git data for " + sg.module + ": " + err); - } + }); + // let gitInfo = await this.getGitData(repo); + // if (gitInfo) { + // console.dir(gitInfo); + // this.sendSocketNotification("STATUS", gitInfo); + // } } this.scheduleNextFetch(this.config.updateInterval); @@ -100,10 +154,6 @@ module.exports = NodeHelper.create({ }, delay); }, - createGit: function (folder) { - return SimpleGit({ baseDir: folder, timeout: { block: this.config.timeout } }); - }, - ignoreUpdateChecking: function (moduleName) { // Should not check for updates for default modules if (defaultModules.indexOf(moduleName) >= 0) { @@ -119,3 +169,9 @@ module.exports = NodeHelper.create({ return false; } }); + + +// [03.09.2021 23:02.36.382] [LOG] hash: e19a42879896d2d8e2406fcb3fd4fdcf15d2ed6b +// [03.09.2021 23:02.36.382] [LOG] trackingorigin/master +// [03.09.2021 23:02.36.714] [LOG] hash: e40ddd4b69424349768b7e451d9c4f52ac4efe45 +// [03.09.2021 23:02.36.714] [LOG] trackingorigin/develop From 0bf3ff9c171e7a4db6695d2907b516d5efa07458 Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 4 Sep 2021 22:49:40 +0200 Subject: [PATCH 078/134] Refer to new docs page for development documentation --- modules/default/weather/providers/README.md | 149 +------------------- 1 file changed, 2 insertions(+), 147 deletions(-) diff --git a/modules/default/weather/providers/README.md b/modules/default/weather/providers/README.md index f6e5d732..faa60a05 100755 --- a/modules/default/weather/providers/README.md +++ b/modules/default/weather/providers/README.md @@ -1,148 +1,3 @@ -# MagicMirror² Weather Module Weather Provider Development Documentation +# Weather Module Weather Provider Development Documentation -This document describes the way to develop your own MagicMirror² weather module weather provider. - -Table of Contents: - -- The weather provider file: yourprovider.js - - [Weather provider methods to implement](#weather-provider-methods-to-implement) - - [Weather Provider instance methods](#weather-provider-instance-methods) - - [WeatherObject](#weatherobject) - ---- - -## The weather provider file: yourprovider.js - -This is the script in which the weather provider will be defined. In its most simple form, the weather provider must implement the following: - -```javascript -WeatherProvider.register("yourprovider", { - providerName: "YourProvider", - - fetchCurrentWeather() {}, - - fetchWeatherForecast() {} -}); -``` - -### Weather provider methods to implement - -#### `fetchCurrentWeather()` - -This method is called when the weather module tries to fetch the current weather of your provider. The implementation of this method is required for current weather support. -The implementation can make use of the already implemented function `this.fetchData(url, method, data);`, which is returning a promise. -After the response is processed, the current weather information (as a [WeatherObject](#weatherobject)) needs to be set with `this.setCurrentWeather(currentWeather);`. -It will then automatically refresh the module DOM with the new data. - -#### `fetchWeatherForecast()` - -This method is called when the weather module tries to fetch the weather of your provider. The implementation of this method is required for forecast support. -The implementation can make use of the already implemented function `this.fetchData(url, method, data);`, which is returning a promise. -After the response is processed, the weather forecast information (as an array of [WeatherObject](#weatherobject)s) needs to be set with `this.setWeatherForecast(forecast);`. -It will then automatically refresh the module DOM with the new data. - -#### `fetchWeatherHourly()` - -This method is called when the weather module tries to fetch the weather of your provider. The implementation of this method is required for hourly support. -The implementation can make use of the already implemented function `this.fetchData(url, method, data);`, which is returning a promise. -After the response is processed, the hourly weather forecast information (as an array of [WeatherObject](#weatherobject)s) needs to be set with `this.setWeatherHourly(forecast);`. -It will then automatically refresh the module DOM with the new data. - -### Weather Provider instance methods - -#### `init()` - -Called when a weather provider is initialized. - -#### `setConfig(config)` - -Called to set the config, this config is the same as the weather module's config. - -#### `start()` - -Called when the weather provider is about to start. - -#### `currentWeather()` - -This returns a WeatherDay object for the current weather. - -#### `weatherForecast()` - -This returns an array of WeatherDay objects for the weather forecast. - -#### `weatherHourly()` - -This returns an array of WeatherDay objects for the hourly weather forecast. - -#### `fetchedLocation()` - -This returns the name of the fetched location or an empty string. - -#### `setCurrentWeather(currentWeatherObject)` - -Set the currentWeather and notify the delegate that new information is available. - -#### `setWeatherForecast(weatherForecastArray)` - -Set the weatherForecastArray and notify the delegate that new information is available. - -#### `setWeatherHourly(weatherHourlyArray)` - -Set the weatherHourlyArray and notify the delegate that new information is available. - -#### `setFetchedLocation(name)` - -Set the fetched location name. - -#### `updateAvailable()` - -Notify the delegate that new weather is available. - -#### `fetchData(url, method, data)` - -A convenience function to make requests. It returns a promise. - -### WeatherObject - -| Property | Type | Value/Unit | -| -------------- | -------- | --------------------------------------------------------------------------------------------------------------- | -| units | `string` | Gets initialized with the constructor.
Possible values: `metric`, `imperial` | -| tempUnits | `string` | Gets initialized with the constructor.
Possible values: `metric`, `imperial` | -| windUnits | `string` | Gets initialized with the constructor.
Possible values: `metric`, `imperial` | -| date | `object` | [Moment.js](https://momentjs.com/) object of the time/date. | -| windSpeed | `number` | Metric: `meter/second`
Imperial: `miles/hour` | -| windDirection | `number` | Direction of the wind in degrees. | -| sunrise | `object` | [Moment.js](https://momentjs.com/) object of sunrise. | -| sunset | `object` | [Moment.js](https://momentjs.com/) object of sunset. | -| temperature | `number` | Current temperature | -| minTemperature | `number` | Lowest temperature of the day. | -| maxTemperature | `number` | Highest temperature of the day. | -| weatherType | `string` | Icon name of the weather type.
Possible values: [WeatherIcons](https://www.npmjs.com/package/weathericons) | -| humidity | `number` | Percentage of humidity | -| rain | `number` | Metric: `millimeters`
Imperial: `inches` | -| snow | `number` | Metric: `millimeters`
Imperial: `inches` | -| precipitation | `number` | Metric: `millimeters`
Imperial: `inches`
UK Met Office provider: `percent` | - -#### Current weather - -For the current weather object the following properties are required: - -- humidity -- sunrise -- sunset -- temperature -- units -- weatherType -- windDirection -- windSpeed - -#### Weather forecast - -For the forecast weather object the following properties are required: - -- date -- maxTemperature -- minTemperature -- rain -- units -- weatherType +For how to develop your own weather provider, please check the [MagicMirror² documentation](https://docs.magicmirror.builders/development/weather-provider.html). From badce5146a443a990ff158a1dac55fa17d794e34 Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 4 Sep 2021 22:54:58 +0200 Subject: [PATCH 079/134] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d2c00f61..fc1a5c18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -438,6 +438,7 @@ Special thanks to @sdetweil for all his great contributions! - Update `ical.js` to solve various calendar issues. - Update weather city list url [#1676](https://github.com/MichMich/MagicMirror/issues/1676) - Only update clock once per minute when seconds aren't shown +- Update weatherprovider documentation. ### Fixed From 22384342dba7f17e79aee7f16a907c53935a909c Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sat, 4 Sep 2021 22:42:48 +0200 Subject: [PATCH 080/134] fix update notification, remove simple-git --- CHANGELOG.md | 1 + .../default/updatenotification/node_helper.js | 154 ++++++++---------- package-lock.json | 21 --- package.json | 1 - 4 files changed, 71 insertions(+), 106 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d2c00f61..e1365099 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ _This release is scheduled to be released on 2021-10-01._ - Fix undefined error with ignoreToday option in weather module (#2620). - Fix time zone correction in calendar module when the date hour is equal to the time zone correction value (#2632). - Fix black cursor on startup when using electron. +- Fix update notification not working for own repository (#2644). ## [2.16.0] - 2021-07-01 diff --git a/modules/default/updatenotification/node_helper.js b/modules/default/updatenotification/node_helper.js index fbe363f5..4815dd02 100644 --- a/modules/default/updatenotification/node_helper.js +++ b/modules/default/updatenotification/node_helper.js @@ -1,4 +1,5 @@ -const { exec } = require("child_process"); +const util = require("util"); +const exec = util.promisify(require("child_process").exec); const gitRepos = []; const fs = require("fs"); const path = require("path"); @@ -55,88 +56,79 @@ module.exports = NodeHelper.create({ } }, - isGitRepo: function (moduleFolder) { - exec("cd " + moduleFolder + " && git remote -v", (err, stdout, stderr) => { - if (err) { - Log.error("Failed to fetch git data for " + moduleFolder + ": " + err); - return false; - } - }); + execShell: async function (command) { + let res = { stdout: "", stderr: "" }; + const { stdout, stderr } = await exec(command); - return true; + res.stdout = stdout; + res.stderr = stderr; + return res; }, + isGitRepo: async function (moduleFolder) { + let res = await this.execShell("cd " + moduleFolder + " && git remote -v"); + if (res.stderr) { + Log.error("Failed to fetch git data for " + moduleFolder + ": " + res.stderr); + return false; + } else { + return true; + } + }, - performFetch: function () { + getRepoInfo: async function (repo) { + let gitInfo = { + module: repo.module, + // commits behind: + behind: 0, + // branch name: + current: "", + // current hash: + hash: "", + // remote branch: + tracking: "" + }; + let res = await this.execShell("cd " + repo.folder + " && git rev-parse HEAD"); + if (res.stderr) { + Log.error("Failed to get current commit hash for " + repo.module + ": " + res.stderr); + } + gitInfo.hash = res.stdout; + res = await this.execShell("cd " + repo.folder + " && git status -sb"); + if (res.stderr) { + Log.error("Failed to get git status for " + repo.module + ": " + res.stderr); + // exit without git status info + return; + } + // get branch and remote + let status = res.stdout.split("\n")[0]; + status = status.match(/(?![.#])([^.]*)/g); + gitInfo.current = status[0].trim(); + status = status[1].split(" "); + gitInfo.tracking = status[0].trim(); + if (status[2]) { + // git fetch was already called before so `git status -sb` delivers already the behind number + gitInfo.behind = parseInt(status[2].substring(0, status[2].length - 1)); + return gitInfo; + } + res = await this.execShell("cd " + repo.folder + " && git fetch --dry-run"); + // here the result is in stderr + if (res.stderr === "") return; + // set default > 0 + gitInfo.behind = 1; + let refs = res.stderr.match(/s*([a-z,0-9]+[.][.][a-z,0-9]+)s*/g)[0]; + if (refs === "") { + return gitInfo; + } + res = await this.execShell("cd " + repo.folder + " && git rev-list --ancestry-path --count " + refs); + gitInfo.behind = parseInt(res.stdout); + return gitInfo; + }, + + performFetch: async function () { for (let repo of gitRepos) { - let gitInfo = { - module: repo.module, - // commits behind: - behind: 0, - // branch name: - current: "", - // current hash: - hash: "", - // remote branch: - tracking: "" - }; - exec("cd " + repo.folder + " && git rev-parse HEAD", (err, stdout, stderr) => { - if (err) { - Log.error("Failed to get current commit hash for " + repo.module + ": " + err + " " + stderr); - } else { - // console.log(stdout); - gitInfo.hash = stdout; - // console.log("hash: " + gitInfo.hash); - exec("cd " + repo.folder + " && git status -sb", (err, stdout, stderr) => { - if (err) { - Log.error("Failed to get git status for " + repo.module + ": " + err + " " + stderr); - } else { - let status = stdout.split("\n")[0]; - // console.log(repo.module); - status = status.match(/(?![.#])([^.]*)/g); - gitInfo.current = status[0].trim(); - // console.log("current: " + gitInfo.current); - status = status[1].split(" "); - gitInfo.tracking = status[0].trim(); - // console.log("tracking: " + gitInfo.tracking); - if (status[2]) { - gitInfo.behind = parseInt(status[2].substring(0, status[2].length - 1)); - // console.log("behind: " + gitInfo.behind); - this.sendSocketNotification("STATUS", gitInfo); - } else { - exec("cd " + repo.folder + " && git fetch --dry-run", (err, stdout, stderr) => { - if (err) { - Log.error("Failed to fetch git data for " + repo.module + ": " + err); - } else { - // console.log(repo.module); - // console.dir(stderr); - if (stderr !== "") { - // get behind - gitInfo.behind = 1; - let refs = stderr.split('\n')[1].match(/s*([a-z,0-9]+[\.]+[a-z,0-9]+)s*/g)[0]; - // console.dir(refs); - if (refs === "") { - this.sendSocketNotification("STATUS", gitInfo); - } else { - exec("cd " + repo.folder + " && git rev-list --ancestry-path --count " + refs, (err, stdout, stderr) => { - gitInfo.behind = parseInt(stdout); - // console.log("behind: " + gitInfo.behind); - this.sendSocketNotification("STATUS", gitInfo); - }); - } - } - } - }); - } - } - }); - } - }); - // let gitInfo = await this.getGitData(repo); - // if (gitInfo) { - // console.dir(gitInfo); - // this.sendSocketNotification("STATUS", gitInfo); - // } + const gitInfo = await this.getRepoInfo(repo); + if (gitInfo) { + this.sendSocketNotification("STATUS", gitInfo); + } } this.scheduleNextFetch(this.config.updateInterval); @@ -169,9 +161,3 @@ module.exports = NodeHelper.create({ return false; } }); - - -// [03.09.2021 23:02.36.382] [LOG] hash: e19a42879896d2d8e2406fcb3fd4fdcf15d2ed6b -// [03.09.2021 23:02.36.382] [LOG] trackingorigin/master -// [03.09.2021 23:02.36.714] [LOG] hash: e40ddd4b69424349768b7e451d9c4f52ac4efe45 -// [03.09.2021 23:02.36.714] [LOG] trackingorigin/develop diff --git a/package-lock.json b/package-lock.json index ae6ab35e..db4615df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,6 @@ "moment": "^2.29.1", "node-fetch": "^2.6.1", "node-ical": "^0.13.0", - "simple-git": "^2.45.0", "socket.io": "^4.1.3" }, "devDependencies": { @@ -8707,16 +8706,6 @@ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, - "node_modules/simple-git": { - "version": "2.45.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.45.0.tgz", - "integrity": "sha512-wu/Ujs9IXn0HuyYm4HyRvne+EKsjJSWKEMkB3wQa3gNHSMHt7y3oeNX9zRQ3UBPk7bRRMLLHAdIZCZfHT9ehPg==", - "dependencies": { - "@kwsites/file-exists": "^1.1.1", - "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.3.1" - } - }, "node_modules/sinon": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/sinon/-/sinon-11.1.2.tgz", @@ -17206,16 +17195,6 @@ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, - "simple-git": { - "version": "2.45.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.45.0.tgz", - "integrity": "sha512-wu/Ujs9IXn0HuyYm4HyRvne+EKsjJSWKEMkB3wQa3gNHSMHt7y3oeNX9zRQ3UBPk7bRRMLLHAdIZCZfHT9ehPg==", - "requires": { - "@kwsites/file-exists": "^1.1.1", - "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.3.1" - } - }, "sinon": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/sinon/-/sinon-11.1.2.tgz", diff --git a/package.json b/package.json index 6bce27aa..dc92b908 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,6 @@ "moment": "^2.29.1", "node-fetch": "^2.6.1", "node-ical": "^0.13.0", - "simple-git": "^2.45.0", "socket.io": "^4.1.3" }, "_moduleAliases": { From b1fc76690801b6d0a6ce0206f49b826f9356fe62 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sat, 4 Sep 2021 23:17:54 +0200 Subject: [PATCH 081/134] update dependencies --- package-lock.json | 152 +++++++++++++++++++--------------------------- package.json | 6 +- 2 files changed, 66 insertions(+), 92 deletions(-) diff --git a/package-lock.json b/package-lock.json index db4615df..7346f5da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,13 +23,13 @@ "moment": "^2.29.1", "node-fetch": "^2.6.1", "node-ical": "^0.13.0", - "socket.io": "^4.1.3" + "socket.io": "^4.2.0" }, "devDependencies": { "eslint-config-prettier": "^8.3.0", "eslint-plugin-jest": "^24.4.0", "eslint-plugin-jsdoc": "^36.0.8", - "eslint-plugin-prettier": "^3.4.1", + "eslint-plugin-prettier": "^4.0.0", "express-basic-auth": "^1.2.0", "husky": "^7.0.2", "jest": "^27.1.0", @@ -50,7 +50,7 @@ "node": ">=12" }, "optionalDependencies": { - "electron": "^13.2.3" + "electron": "^13.3.0" } }, "node_modules/@babel/code-frame": { @@ -1027,19 +1027,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@kwsites/file-exists": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", - "dependencies": { - "debug": "^4.1.1" - } - }, - "node_modules/@kwsites/promise-deferred": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==" - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1226,14 +1213,14 @@ "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" }, "node_modules/@types/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "node_modules/@types/cors": { - "version": "2.8.10", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", - "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==" + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" }, "node_modules/@types/graceful-fs": { "version": "4.1.5", @@ -3243,9 +3230,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.2.3.tgz", - "integrity": "sha512-FzWhbKHjq7ZTpPQFaYiLPL64erC8/BOsu5NlNN9nQ6f7rIP8ygKlNAlQit3vbOcksQAwItDUCIw4sW0mcaRpCA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.3.0.tgz", + "integrity": "sha512-d/BvOLDjI4i7yf9tqCuLL2fFGA2TrM/D9PyRpua+rJolG0qrwp/FohP02L0m+44kmPpofIo4l3NPwLmzyKKimA==", "devOptional": true, "hasInstallScript": true, "dependencies": { @@ -3353,9 +3340,9 @@ } }, "node_modules/engine.io": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.1.1.tgz", - "integrity": "sha512-aMWot7H5aC8L4/T8qMYbLdvKlZOdJTH54FxfdFunTGvhMx1BHkJOntWArsVfgAZVwAO9LC2sryPWRcEeUzCe5w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.2.0.tgz", + "integrity": "sha512-d1DexkQx87IFr1FLuV+0f5kAm1Hk1uOVijLOb+D1sDO2QMb7YjE02VHtZtxo7xIXMgcWLb+vl3HRT0rI9tr4jQ==", "dependencies": { "accepts": "~1.3.4", "base64id": "2.0.0", @@ -3370,9 +3357,9 @@ } }, "node_modules/engine.io-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", - "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz", + "integrity": "sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==", "dependencies": { "base64-arraybuffer": "0.1.4" }, @@ -3684,9 +3671,9 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", + "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0" @@ -3695,8 +3682,8 @@ "node": ">=6.0.0" }, "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" }, "peerDependenciesMeta": { "eslint-config-prettier": { @@ -8756,18 +8743,18 @@ } }, "node_modules/socket.io": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.3.tgz", - "integrity": "sha512-tLkaY13RcO4nIRh1K2hT5iuotfTaIQw7cVIe0FUykN3SuQi0cm7ALxuyT5/CtDswOMWUzMGTibxYNx/gU7In+Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.2.0.tgz", + "integrity": "sha512-sjlGfMmnaWvTRVxGRGWyhd9ctpg4APxWAxu85O/SxekkxHhfxmePWZbaYCkeX5QQX0z1YEnKOlNt6w82E4Nzug==", "dependencies": { - "@types/cookie": "^0.4.0", - "@types/cors": "^2.8.10", + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "~2.0.0", - "debug": "~4.3.1", - "engine.io": "~5.1.1", - "socket.io-adapter": "~2.3.1", + "debug": "~4.3.2", + "engine.io": "~5.2.0", + "socket.io-adapter": "~2.3.2", "socket.io-parser": "~4.0.4" }, "engines": { @@ -8775,9 +8762,9 @@ } }, "node_modules/socket.io-adapter": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.1.tgz", - "integrity": "sha512-8cVkRxI8Nt2wadkY6u60Y4rpW3ejA1rxgcK2JuyIhmF+RMNpTy1QRtkHIDUOf3B4HlQwakMsWbKftMv/71VMmw==" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.2.tgz", + "integrity": "sha512-PBZpxUPYjmoogY0aoaTmo1643JelsaS1CiAwNjRVdrI0X9Seuc19Y2Wife8k88avW6haG8cznvwbubAZwH4Mtg==" }, "node_modules/socket.io-parser": { "version": "4.0.4", @@ -11296,19 +11283,6 @@ "chalk": "^4.0.0" } }, - "@kwsites/file-exists": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", - "requires": { - "debug": "^4.1.1" - } - }, - "@kwsites/promise-deferred": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==" - }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -11469,14 +11443,14 @@ "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" }, "@types/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "@types/cors": { - "version": "2.8.10", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", - "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==" + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" }, "@types/graceful-fs": { "version": "4.1.5", @@ -13039,9 +13013,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.2.3.tgz", - "integrity": "sha512-FzWhbKHjq7ZTpPQFaYiLPL64erC8/BOsu5NlNN9nQ6f7rIP8ygKlNAlQit3vbOcksQAwItDUCIw4sW0mcaRpCA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.3.0.tgz", + "integrity": "sha512-d/BvOLDjI4i7yf9tqCuLL2fFGA2TrM/D9PyRpua+rJolG0qrwp/FohP02L0m+44kmPpofIo4l3NPwLmzyKKimA==", "devOptional": true, "requires": { "@electron/get": "^1.0.1", @@ -13114,9 +13088,9 @@ } }, "engine.io": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.1.1.tgz", - "integrity": "sha512-aMWot7H5aC8L4/T8qMYbLdvKlZOdJTH54FxfdFunTGvhMx1BHkJOntWArsVfgAZVwAO9LC2sryPWRcEeUzCe5w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.2.0.tgz", + "integrity": "sha512-d1DexkQx87IFr1FLuV+0f5kAm1Hk1uOVijLOb+D1sDO2QMb7YjE02VHtZtxo7xIXMgcWLb+vl3HRT0rI9tr4jQ==", "requires": { "accepts": "~1.3.4", "base64id": "2.0.0", @@ -13141,9 +13115,9 @@ } }, "engine.io-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", - "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz", + "integrity": "sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==", "requires": { "base64-arraybuffer": "0.1.4" } @@ -13361,9 +13335,9 @@ } }, "eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", + "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -17232,25 +17206,25 @@ } }, "socket.io": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.3.tgz", - "integrity": "sha512-tLkaY13RcO4nIRh1K2hT5iuotfTaIQw7cVIe0FUykN3SuQi0cm7ALxuyT5/CtDswOMWUzMGTibxYNx/gU7In+Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.2.0.tgz", + "integrity": "sha512-sjlGfMmnaWvTRVxGRGWyhd9ctpg4APxWAxu85O/SxekkxHhfxmePWZbaYCkeX5QQX0z1YEnKOlNt6w82E4Nzug==", "requires": { - "@types/cookie": "^0.4.0", - "@types/cors": "^2.8.10", + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "~2.0.0", - "debug": "~4.3.1", - "engine.io": "~5.1.1", - "socket.io-adapter": "~2.3.1", + "debug": "~4.3.2", + "engine.io": "~5.2.0", + "socket.io-adapter": "~2.3.2", "socket.io-parser": "~4.0.4" } }, "socket.io-adapter": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.1.tgz", - "integrity": "sha512-8cVkRxI8Nt2wadkY6u60Y4rpW3ejA1rxgcK2JuyIhmF+RMNpTy1QRtkHIDUOf3B4HlQwakMsWbKftMv/71VMmw==" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.2.tgz", + "integrity": "sha512-PBZpxUPYjmoogY0aoaTmo1643JelsaS1CiAwNjRVdrI0X9Seuc19Y2Wife8k88avW6haG8cznvwbubAZwH4Mtg==" }, "socket.io-parser": { "version": "4.0.4", diff --git a/package.json b/package.json index dc92b908..e6c58b43 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "eslint-config-prettier": "^8.3.0", "eslint-plugin-jest": "^24.4.0", "eslint-plugin-jsdoc": "^36.0.8", - "eslint-plugin-prettier": "^3.4.1", + "eslint-plugin-prettier": "^4.0.0", "express-basic-auth": "^1.2.0", "husky": "^7.0.2", "jest": "^27.1.0", @@ -66,7 +66,7 @@ "suncalc": "^1.8.0" }, "optionalDependencies": { - "electron": "^13.2.3" + "electron": "^13.3.0" }, "dependencies": { "colors": "^1.4.0", @@ -82,7 +82,7 @@ "moment": "^2.29.1", "node-fetch": "^2.6.1", "node-ical": "^0.13.0", - "socket.io": "^4.1.3" + "socket.io": "^4.2.0" }, "_moduleAliases": { "node_helper": "js/node_helper.js", From ce13d7f98bf2a080111affd726776c80357d6300 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sun, 5 Sep 2021 23:35:49 +0200 Subject: [PATCH 082/134] added comments, get hash only for mm --- .../default/updatenotification/node_helper.js | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/modules/default/updatenotification/node_helper.js b/modules/default/updatenotification/node_helper.js index 4815dd02..5d0897e8 100644 --- a/modules/default/updatenotification/node_helper.js +++ b/modules/default/updatenotification/node_helper.js @@ -87,22 +87,35 @@ module.exports = NodeHelper.create({ // remote branch: tracking: "" }; - let res = await this.execShell("cd " + repo.folder + " && git rev-parse HEAD"); - if (res.stderr) { - Log.error("Failed to get current commit hash for " + repo.module + ": " + res.stderr); + let res; + if (module === "default") { + // the hash is only needed for the mm repo + res = await this.execShell("cd " + repo.folder + " && git rev-parse HEAD"); + if (res.stderr) { + Log.error("Failed to get current commit hash for " + repo.module + ": " + res.stderr); + } + gitInfo.hash = res.stdout; } - gitInfo.hash = res.stdout; res = await this.execShell("cd " + repo.folder + " && git status -sb"); if (res.stderr) { Log.error("Failed to get git status for " + repo.module + ": " + res.stderr); // exit without git status info return; } - // get branch and remote + // only the first line of stdout is evaluated let status = res.stdout.split("\n")[0]; + // examples for status: + // ## develop...origin/develop + // ## master...origin/master [behind 8] status = status.match(/(?![.#])([^.]*)/g); + // examples for status: + // [ ' develop', 'origin/develop', '' ] + // [ ' master', 'origin/master [behind 8]', '' ] gitInfo.current = status[0].trim(); status = status[1].split(" "); + // examples for status: + // [ 'origin/develop' ] + // [ 'origin/master', '[behind', '8]' ] gitInfo.tracking = status[0].trim(); if (status[2]) { // git fetch was already called before so `git status -sb` delivers already the behind number @@ -110,14 +123,18 @@ module.exports = NodeHelper.create({ return gitInfo; } res = await this.execShell("cd " + repo.folder + " && git fetch --dry-run"); - // here the result is in stderr + // example output: + // From https://github.com/MichMich/MagicMirror + // e40ddd4..06389e3 develop -> origin/develop + // here the result is in stderr (this is a git default, don't ask why ...) if (res.stderr === "") return; - // set default > 0 - gitInfo.behind = 1; let refs = res.stderr.match(/s*([a-z,0-9]+[.][.][a-z,0-9]+)s*/g)[0]; if (refs === "") { + // if match fails set behind to a number greater 0 and return + gitInfo.behind = 1; return gitInfo; } + // get behind with refs res = await this.execShell("cd " + repo.folder + " && git rev-list --ancestry-path --count " + refs); gitInfo.behind = parseInt(res.stdout); return gitInfo; From 087a4727657449be8cfaf348cf1dc22d2c8d8261 Mon Sep 17 00:00:00 2001 From: rejas Date: Mon, 6 Sep 2021 21:15:23 +0200 Subject: [PATCH 083/134] Fix tomezone test error as reported by @khassel --- tests/unit/functions/weather_object_spec.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/unit/functions/weather_object_spec.js b/tests/unit/functions/weather_object_spec.js index 8878f377..c8c0faa6 100644 --- a/tests/unit/functions/weather_object_spec.js +++ b/tests/unit/functions/weather_object_spec.js @@ -1,12 +1,15 @@ const WeatherObject = require("../../../modules/default/weather/weatherobject.js"); -global.moment = require("moment"); +global.moment = require("moment-timezone"); global.SunCalc = require("suncalc"); describe("WeatherObject", function () { + let originalTimeZone; let weatherobject; beforeAll(function () { + originalTimeZone = moment.tz.guess(); + moment.tz.setDefault("Africa/Dar_es_Salaam"); weatherobject = new WeatherObject("metric", "metric", "metric", true); }); @@ -21,4 +24,8 @@ describe("WeatherObject", function () { weatherobject.updateSunTime(-6.774877582342688, 37.63345667023327); expect(weatherobject.isDayTime()).toBe(false); }); + + afterAll(function () { + moment.tz.setDefault(originalTimeZone); + }); }); From 093988e13655644d32d9bc87c0e59bf331d2e7aa Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Mon, 6 Sep 2021 23:55:32 +0200 Subject: [PATCH 084/134] extract git stuff in own class --- .../default/updatenotification/git_helper.js | 132 ++++++++++++++++++ .../default/updatenotification/node_helper.js | 120 +--------------- 2 files changed, 139 insertions(+), 113 deletions(-) create mode 100644 modules/default/updatenotification/git_helper.js diff --git a/modules/default/updatenotification/git_helper.js b/modules/default/updatenotification/git_helper.js new file mode 100644 index 00000000..323565e7 --- /dev/null +++ b/modules/default/updatenotification/git_helper.js @@ -0,0 +1,132 @@ +const util = require("util"); +const exec = util.promisify(require("child_process").exec); +const fs = require("fs"); +const path = require("path"); +const Log = require("logger"); + +class gitHelper { + constructor(){ + this.gitRepos = []; + this.baseDir = path.normalize(__dirname + "/../../../"); + } + + async execShell(command) { + let res = { stdout: "", stderr: "" }; + const { stdout, stderr } = await exec(command); + + res.stdout = stdout; + res.stderr = stderr; + return res; + } + + async isGitRepo(moduleFolder) { + let res = await this.execShell("cd " + moduleFolder + " && git remote -v"); + if (res.stderr) { + Log.error("Failed to fetch git data for " + moduleFolder + ": " + res.stderr); + return false; + } else { + return true; + } + } + + add(moduleName) { + let moduleFolder = this.baseDir; + if (moduleName !== "default") { + moduleFolder = moduleFolder + 'modules/' + moduleName; + } + try { + Log.info("Checking git for module: " + moduleName); + // Throws error if file doesn't exist + fs.statSync(path.join(moduleFolder, ".git")); + // Fetch the git or throw error if no remotes + if (this.isGitRepo(moduleFolder)) { + // Folder has .git and has at least one git remote, watch this folder + this.gitRepos.unshift({ module: moduleName, folder: moduleFolder }); + } + } catch (err) { + // Error when directory .git doesn't exist or doesn't have any remotes + // This module is not managed with git, skip + } + + } + + async getRepoInfo(repo) { + let gitInfo = { + module: repo.module, + // commits behind: + behind: 0, + // branch name: + current: "", + // current hash: + hash: "", + // remote branch: + tracking: "" + }; + let res; + if (repo.module === "default") { + // the hash is only needed for the mm repo + res = await this.execShell("cd " + repo.folder + " && git rev-parse HEAD"); + if (res.stderr) { + Log.error("Failed to get current commit hash for " + repo.module + ": " + res.stderr); + } + gitInfo.hash = res.stdout; + } + res = await this.execShell("cd " + repo.folder + " && git status -sb"); + if (res.stderr) { + Log.error("Failed to get git status for " + repo.module + ": " + res.stderr); + // exit without git status info + return; + } + // only the first line of stdout is evaluated + let status = res.stdout.split("\n")[0]; + // examples for status: + // ## develop...origin/develop + // ## master...origin/master [behind 8] + status = status.match(/(?![.#])([^.]*)/g); + // examples for status: + // [ ' develop', 'origin/develop', '' ] + // [ ' master', 'origin/master [behind 8]', '' ] + gitInfo.current = status[0].trim(); + status = status[1].split(" "); + // examples for status: + // [ 'origin/develop' ] + // [ 'origin/master', '[behind', '8]' ] + gitInfo.tracking = status[0].trim(); + if (status[2]) { + // git fetch was already called before so `git status -sb` delivers already the behind number + gitInfo.behind = parseInt(status[2].substring(0, status[2].length - 1)); + return gitInfo; + } + res = await this.execShell("cd " + repo.folder + " && git fetch --dry-run"); + // example output: + // From https://github.com/MichMich/MagicMirror + // e40ddd4..06389e3 develop -> origin/develop + // here the result is in stderr (this is a git default, don't ask why ...) + if (res.stderr === "") return; + let refs = res.stderr.match(/s*([a-z,0-9]+[.][.][a-z,0-9]+)s*/g)[0]; + if (refs === "") { + // if match fails set behind to a number greater 0 and return + gitInfo.behind = 1; + return gitInfo; + } + // get behind with refs + res = await this.execShell("cd " + repo.folder + " && git rev-list --ancestry-path --count " + refs); + gitInfo.behind = parseInt(res.stdout); + return gitInfo; + } + + async getRepos() { + const gitResultList = []; + for (let repo of this.gitRepos) { + const gitInfo = await this.getRepoInfo(repo); + if (gitInfo) { + gitResultList.unshift(gitInfo); + } + } + + return gitResultList; + } + +}; + +module.exports.gitHelper = gitHelper; diff --git a/modules/default/updatenotification/node_helper.js b/modules/default/updatenotification/node_helper.js index 5d0897e8..f697aec9 100644 --- a/modules/default/updatenotification/node_helper.js +++ b/modules/default/updatenotification/node_helper.js @@ -1,10 +1,5 @@ -const util = require("util"); -const exec = util.promisify(require("child_process").exec); -const gitRepos = []; -const fs = require("fs"); -const path = require("path"); +const git_Helper = require(__dirname + "/git_helper.js"); const defaultModules = require(__dirname + "/../defaultmodules.js"); -const Log = require("logger"); const NodeHelper = require("node_helper"); module.exports = NodeHelper.create({ @@ -13,33 +8,19 @@ module.exports = NodeHelper.create({ updateTimer: null, updateProcessStarted: false, + gitHelper: new git_Helper.gitHelper(), + start: function () {}, configureModules: async function (modules) { // Push MagicMirror itself , biggest chance it'll show up last in UI and isn't overwritten // others will be added in front // this method returns promises so we can't wait for every one to resolve before continuing - gitRepos.push({ module: "default", folder: path.normalize(__dirname + "/../../../") }); + this.gitHelper.add("default"); for (let moduleName in modules) { if (!this.ignoreUpdateChecking(moduleName)) { - // Default modules are included in the main MagicMirror repo - let moduleFolder = path.normalize(__dirname + "/../../" + moduleName); - - try { - Log.info("Checking git for module: " + moduleName); - // Throws error if file doesn't exist - fs.statSync(path.join(moduleFolder, ".git")); - // Fetch the git or throw error if no remotes - if (this.isGitRepo(moduleFolder)) { - // Folder has .git and has at least one git remote, watch this folder - gitRepos.unshift({ module: moduleName, folder: moduleFolder }); - } - } catch (err) { - // Error when directory .git doesn't exist or doesn't have any remotes - // This module is not managed with git, skip - continue; - } + this.gitHelper.add(moduleName); } } }, @@ -56,96 +37,9 @@ module.exports = NodeHelper.create({ } }, - execShell: async function (command) { - let res = { stdout: "", stderr: "" }; - const { stdout, stderr } = await exec(command); - - res.stdout = stdout; - res.stderr = stderr; - return res; - }, - - isGitRepo: async function (moduleFolder) { - let res = await this.execShell("cd " + moduleFolder + " && git remote -v"); - if (res.stderr) { - Log.error("Failed to fetch git data for " + moduleFolder + ": " + res.stderr); - return false; - } else { - return true; - } - }, - - getRepoInfo: async function (repo) { - let gitInfo = { - module: repo.module, - // commits behind: - behind: 0, - // branch name: - current: "", - // current hash: - hash: "", - // remote branch: - tracking: "" - }; - let res; - if (module === "default") { - // the hash is only needed for the mm repo - res = await this.execShell("cd " + repo.folder + " && git rev-parse HEAD"); - if (res.stderr) { - Log.error("Failed to get current commit hash for " + repo.module + ": " + res.stderr); - } - gitInfo.hash = res.stdout; - } - res = await this.execShell("cd " + repo.folder + " && git status -sb"); - if (res.stderr) { - Log.error("Failed to get git status for " + repo.module + ": " + res.stderr); - // exit without git status info - return; - } - // only the first line of stdout is evaluated - let status = res.stdout.split("\n")[0]; - // examples for status: - // ## develop...origin/develop - // ## master...origin/master [behind 8] - status = status.match(/(?![.#])([^.]*)/g); - // examples for status: - // [ ' develop', 'origin/develop', '' ] - // [ ' master', 'origin/master [behind 8]', '' ] - gitInfo.current = status[0].trim(); - status = status[1].split(" "); - // examples for status: - // [ 'origin/develop' ] - // [ 'origin/master', '[behind', '8]' ] - gitInfo.tracking = status[0].trim(); - if (status[2]) { - // git fetch was already called before so `git status -sb` delivers already the behind number - gitInfo.behind = parseInt(status[2].substring(0, status[2].length - 1)); - return gitInfo; - } - res = await this.execShell("cd " + repo.folder + " && git fetch --dry-run"); - // example output: - // From https://github.com/MichMich/MagicMirror - // e40ddd4..06389e3 develop -> origin/develop - // here the result is in stderr (this is a git default, don't ask why ...) - if (res.stderr === "") return; - let refs = res.stderr.match(/s*([a-z,0-9]+[.][.][a-z,0-9]+)s*/g)[0]; - if (refs === "") { - // if match fails set behind to a number greater 0 and return - gitInfo.behind = 1; - return gitInfo; - } - // get behind with refs - res = await this.execShell("cd " + repo.folder + " && git rev-list --ancestry-path --count " + refs); - gitInfo.behind = parseInt(res.stdout); - return gitInfo; - }, - performFetch: async function () { - for (let repo of gitRepos) { - const gitInfo = await this.getRepoInfo(repo); - if (gitInfo) { - this.sendSocketNotification("STATUS", gitInfo); - } + for (let gitInfo of await this.gitHelper.getRepos()) { + this.sendSocketNotification("STATUS", gitInfo); } this.scheduleNextFetch(this.config.updateInterval); From dd43f35bbe323cc34db7c510d388793cd98a0d7a Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Tue, 7 Sep 2021 22:07:42 +0200 Subject: [PATCH 085/134] add unit tests --- .../default/updatenotification/git_helper.js | 69 +++++++++++++------ .../default/updatenotification/node_helper.js | 2 +- .../unit/functions/updatenotification_spec.js | 31 +++++++++ 3 files changed, 81 insertions(+), 21 deletions(-) create mode 100644 tests/unit/functions/updatenotification_spec.js diff --git a/modules/default/updatenotification/git_helper.js b/modules/default/updatenotification/git_helper.js index 323565e7..fbba6315 100644 --- a/modules/default/updatenotification/git_helper.js +++ b/modules/default/updatenotification/git_helper.js @@ -2,12 +2,21 @@ const util = require("util"); const exec = util.promisify(require("child_process").exec); const fs = require("fs"); const path = require("path"); -const Log = require("logger"); class gitHelper { - constructor(){ + constructor() { this.gitRepos = []; this.baseDir = path.normalize(__dirname + "/../../../"); + if (process.env.JEST_WORKER_ID === undefined) { + this.Log = require("logger"); + } else { + // if we are running with jest + this.Log = require("../../../tests/unit/mocks/logger.js"); + } + } + + getRefRegex(branch) { + return new RegExp("s*([a-z,0-9]+[.][.][a-z,0-9]+) " + branch, "g"); } async execShell(command) { @@ -22,7 +31,7 @@ class gitHelper { async isGitRepo(moduleFolder) { let res = await this.execShell("cd " + moduleFolder + " && git remote -v"); if (res.stderr) { - Log.error("Failed to fetch git data for " + moduleFolder + ": " + res.stderr); + this.Log.error("Failed to fetch git data for " + moduleFolder + ": " + res.stderr); return false; } else { return true; @@ -32,10 +41,10 @@ class gitHelper { add(moduleName) { let moduleFolder = this.baseDir; if (moduleName !== "default") { - moduleFolder = moduleFolder + 'modules/' + moduleName; + moduleFolder = moduleFolder + "modules/" + moduleName; } try { - Log.info("Checking git for module: " + moduleName); + this.Log.info("Checking git for module: " + moduleName); // Throws error if file doesn't exist fs.statSync(path.join(moduleFolder, ".git")); // Fetch the git or throw error if no remotes @@ -47,10 +56,9 @@ class gitHelper { // Error when directory .git doesn't exist or doesn't have any remotes // This module is not managed with git, skip } - } - async getRepoInfo(repo) { + async getStatusInfo(repo) { let gitInfo = { module: repo.module, // commits behind: @@ -60,20 +68,21 @@ class gitHelper { // current hash: hash: "", // remote branch: - tracking: "" + tracking: "", + isBehindInStatus: false }; let res; if (repo.module === "default") { // the hash is only needed for the mm repo res = await this.execShell("cd " + repo.folder + " && git rev-parse HEAD"); if (res.stderr) { - Log.error("Failed to get current commit hash for " + repo.module + ": " + res.stderr); + this.Log.error("Failed to get current commit hash for " + repo.module + ": " + res.stderr); } gitInfo.hash = res.stdout; } res = await this.execShell("cd " + repo.folder + " && git status -sb"); if (res.stderr) { - Log.error("Failed to get git status for " + repo.module + ": " + res.stderr); + this.Log.error("Failed to get git status for " + repo.module + ": " + res.stderr); // exit without git status info return; } @@ -95,26 +104,47 @@ class gitHelper { if (status[2]) { // git fetch was already called before so `git status -sb` delivers already the behind number gitInfo.behind = parseInt(status[2].substring(0, status[2].length - 1)); + gitInfo.isBehindInStatus = true; + } + return gitInfo; + } + + async getRepoInfo(repo) { + let gitInfo = await this.getStatusInfo(repo); + if (!gitInfo) { + return; + } + if (gitInfo.isBehindInStatus) { return gitInfo; } - res = await this.execShell("cd " + repo.folder + " && git fetch --dry-run"); + let res = await this.execShell("cd " + repo.folder + " && git fetch --dry-run"); // example output: // From https://github.com/MichMich/MagicMirror // e40ddd4..06389e3 develop -> origin/develop // here the result is in stderr (this is a git default, don't ask why ...) - if (res.stderr === "") return; - let refs = res.stderr.match(/s*([a-z,0-9]+[.][.][a-z,0-9]+)s*/g)[0]; - if (refs === "") { - // if match fails set behind to a number greater 0 and return - gitInfo.behind = 1; - return gitInfo; + const matches = res.stderr.match(this.getRefRegex(gitInfo.current)); + if (!matches || !matches[0]) { + // no refs found, nothing to do + return; } // get behind with refs - res = await this.execShell("cd " + repo.folder + " && git rev-list --ancestry-path --count " + refs); + res = await this.execShell("cd " + repo.folder + " && git rev-list --ancestry-path --count " + matches[0]); gitInfo.behind = parseInt(res.stdout); return gitInfo; } + async getStatus() { + const gitResultList = []; + for (let repo of this.gitRepos) { + const gitInfo = await this.getStatusInfo(repo); + if (gitInfo) { + gitResultList.unshift(gitInfo); + } + } + + return gitResultList; + } + async getRepos() { const gitResultList = []; for (let repo of this.gitRepos) { @@ -126,7 +156,6 @@ class gitHelper { return gitResultList; } - -}; +} module.exports.gitHelper = gitHelper; diff --git a/modules/default/updatenotification/node_helper.js b/modules/default/updatenotification/node_helper.js index f697aec9..9d836f19 100644 --- a/modules/default/updatenotification/node_helper.js +++ b/modules/default/updatenotification/node_helper.js @@ -8,7 +8,7 @@ module.exports = NodeHelper.create({ updateTimer: null, updateProcessStarted: false, - gitHelper: new git_Helper.gitHelper(), + gitHelper: new git_Helper.gitHelper(), start: function () {}, diff --git a/tests/unit/functions/updatenotification_spec.js b/tests/unit/functions/updatenotification_spec.js new file mode 100644 index 00000000..79018334 --- /dev/null +++ b/tests/unit/functions/updatenotification_spec.js @@ -0,0 +1,31 @@ +const path = require("path"); +const git_Helper = require("../../../modules/default/updatenotification/git_helper.js"); +const gitHelper = new git_Helper.gitHelper(); +gitHelper.add("default"); +let branch = ""; + +describe("Updatenotification", function () { + // it is assumed that we are at the HEAD of a branch when running this tests + // and we have no foreign modules installed. + + it("should return 0 for repo count", async function () { + const arr = await gitHelper.getRepos(); + expect(arr.length).toBe(0); + }, 15000); + + it("should return valid output for git status", async function () { + const arr = await gitHelper.getStatus(); + expect(arr.length).toBe(1); + const gitInfo = arr[0]; + branch = gitInfo.current; + expect(gitInfo.current).not.toBe(""); + expect(gitInfo.tracking).not.toBe(""); + expect(gitInfo.hash).not.toBe(""); + }, 15000); + + it("should return no refs for git fetch", async function () { + const baseDir = path.normalize(__dirname + "/../../../"); + const res = await gitHelper.execShell("cd " + baseDir + " && git fetch --dry-run"); + expect(res.stderr.match(gitHelper.getRefRegex(branch))).toBe(null); + }); +}); From 99aca932db7dedb9768364e15f2d897ecc44e931 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 9 Sep 2021 00:24:13 +0200 Subject: [PATCH 086/134] update dependencies --- .github/workflows/node-ci.js.yml | 1 + package-lock.json | 1168 +++++++++++++++--------------- package.json | 4 +- 3 files changed, 587 insertions(+), 586 deletions(-) diff --git a/.github/workflows/node-ci.js.yml b/.github/workflows/node-ci.js.yml index b5dd7aee..0919f7ae 100644 --- a/.github/workflows/node-ci.js.yml +++ b/.github/workflows/node-ci.js.yml @@ -23,6 +23,7 @@ jobs: with: node-version: ${{ matrix.node-version }} - run: | + node -v Xvfb :99 -screen 0 1024x768x16 & export DISPLAY=:99 npm install diff --git a/package-lock.json b/package-lock.json index 7346f5da..8f95a5a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,11 +28,11 @@ "devDependencies": { "eslint-config-prettier": "^8.3.0", "eslint-plugin-jest": "^24.4.0", - "eslint-plugin-jsdoc": "^36.0.8", + "eslint-plugin-jsdoc": "^36.1.0", "eslint-plugin-prettier": "^4.0.0", "express-basic-auth": "^1.2.0", "husky": "^7.0.2", - "jest": "^27.1.0", + "jest": "^27.1.1", "jsdom": "^17.0.0", "lodash": "^4.17.21", "nyc": "^15.1.0", @@ -788,16 +788,16 @@ } }, "node_modules/@jest/console": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.1.0.tgz", - "integrity": "sha512-+Vl+xmLwAXLNlqT61gmHEixeRbS4L8MUzAjtpBCOPWH+izNI/dR16IeXjkXJdRtIVWVSf9DO1gdp67B1XorZhQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.1.1.tgz", + "integrity": "sha512-VpQJRsWSeAem0zpBjeRtDbcD6DlbNoK11dNYt+PSQ+DDORh9q2/xyEpErfwgnLjWX0EKkSZmTGx/iH9Inzs6vQ==", "dev": true, "dependencies": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.1.0", - "jest-util": "^27.1.0", + "jest-message-util": "^27.1.1", + "jest-util": "^27.1.1", "slash": "^3.0.0" }, "engines": { @@ -805,35 +805,35 @@ } }, "node_modules/@jest/core": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.1.0.tgz", - "integrity": "sha512-3l9qmoknrlCFKfGdrmiQiPne+pUR4ALhKwFTYyOeKw6egfDwJkO21RJ1xf41rN8ZNFLg5W+w6+P4fUqq4EMRWA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.1.1.tgz", + "integrity": "sha512-oCkKeTgI0emznKcLoq5OCD0PhxCijA4l7ejDnWW3d5bgSi+zfVaLybVqa+EQOxpNejQWtTna7tmsAXjMN9N43Q==", "dev": true, "dependencies": { - "@jest/console": "^27.1.0", - "@jest/reporters": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.1.1", + "@jest/reporters": "^27.1.1", + "@jest/test-result": "^27.1.1", + "@jest/transform": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.1.0", - "jest-config": "^27.1.0", - "jest-haste-map": "^27.1.0", - "jest-message-util": "^27.1.0", + "jest-changed-files": "^27.1.1", + "jest-config": "^27.1.1", + "jest-haste-map": "^27.1.1", + "jest-message-util": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.0", - "jest-resolve-dependencies": "^27.1.0", - "jest-runner": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", - "jest-watcher": "^27.1.0", + "jest-resolve": "^27.1.1", + "jest-resolve-dependencies": "^27.1.1", + "jest-runner": "^27.1.1", + "jest-runtime": "^27.1.1", + "jest-snapshot": "^27.1.1", + "jest-util": "^27.1.1", + "jest-validate": "^27.1.1", + "jest-watcher": "^27.1.1", "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", @@ -853,62 +853,62 @@ } }, "node_modules/@jest/environment": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.1.0.tgz", - "integrity": "sha512-wRp50aAMY2w1U2jP1G32d6FUVBNYqmk8WaGkiIEisU48qyDV0WPtw3IBLnl7orBeggveommAkuijY+RzVnNDOQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.1.1.tgz", + "integrity": "sha512-+y882/ZdxhyqF5RzxIrNIANjHj991WH7jifdcplzMDosDUOyCACFYUyVTBGbSTocbU+s1cesroRzkwi8hZ9SHg==", "dev": true, "dependencies": { - "@jest/fake-timers": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/fake-timers": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", - "jest-mock": "^27.1.0" + "jest-mock": "^27.1.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.1.0.tgz", - "integrity": "sha512-22Zyn8il8DzpS+30jJNVbTlm7vAtnfy1aYvNeOEHloMlGy1PCYLHa4PWlSws0hvNsMM5bON6GISjkLoQUV3oMA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.1.1.tgz", + "integrity": "sha512-u8TJ5VlsVYTsGFatoyIae2l25pku4Bu15QCPTx2Gs5z+R//Ee3tHN85462Vc9yGVcdDvgADbqNkhOLxbEwPjMQ==", "dev": true, "dependencies": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^27.1.0", - "jest-mock": "^27.1.0", - "jest-util": "^27.1.0" + "jest-message-util": "^27.1.1", + "jest-mock": "^27.1.1", + "jest-util": "^27.1.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/globals": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.1.0.tgz", - "integrity": "sha512-73vLV4aNHAlAgjk0/QcSIzzCZSqVIPbmFROJJv9D3QUR7BI4f517gVdJpSrCHxuRH3VZFhe0yGG/tmttlMll9g==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.1.1.tgz", + "integrity": "sha512-Q3JcTPmY+DAEHnr4MpnBV3mwy50EGrTC6oSDTNnW7FNGGacTJAfpWNk02D7xv422T1OzK2A2BKx+26xJOvHkyw==", "dev": true, "dependencies": { - "@jest/environment": "^27.1.0", - "@jest/types": "^27.1.0", - "expect": "^27.1.0" + "@jest/environment": "^27.1.1", + "@jest/types": "^27.1.1", + "expect": "^27.1.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/reporters": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.1.0.tgz", - "integrity": "sha512-5T/zlPkN2HnK3Sboeg64L5eC8iiaZueLpttdktWTJsvALEtP2YMkC5BQxwjRWQACG9SwDmz+XjjkoxXUDMDgdw==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.1.1.tgz", + "integrity": "sha512-cEERs62n1P4Pqox9HWyNOEkP57G95aK2mBjB6D8Ruz1Yc98fKH53b58rlVEnsY5nLmkLNZk65fxNi9C0Yds/8w==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.1.1", + "@jest/test-result": "^27.1.1", + "@jest/transform": "^27.1.1", + "@jest/types": "^27.1.1", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -919,10 +919,10 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.1.0", - "jest-resolve": "^27.1.0", - "jest-util": "^27.1.0", - "jest-worker": "^27.1.0", + "jest-haste-map": "^27.1.1", + "jest-resolve": "^27.1.1", + "jest-util": "^27.1.1", + "jest-worker": "^27.1.1", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -956,13 +956,13 @@ } }, "node_modules/@jest/test-result": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.1.0.tgz", - "integrity": "sha512-Aoz00gpDL528ODLghat3QSy6UBTD5EmmpjrhZZMK/v1Q2/rRRqTGnFxHuEkrD4z/Py96ZdOHxIWkkCKRpmnE1A==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.1.1.tgz", + "integrity": "sha512-8vy75A0Jtfz9DqXFUkjC5Co/wRla+D7qRFdShUY8SbPqBS3GBx3tpba7sGKFos8mQrdbe39n+c1zgVKtarfy6A==", "dev": true, "dependencies": { - "@jest/console": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.1.1", + "@jest/types": "^27.1.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -971,36 +971,36 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.1.0.tgz", - "integrity": "sha512-lnCWawDr6Z1DAAK9l25o3AjmKGgcutq1iIbp+hC10s/HxnB8ZkUsYq1FzjOoxxZ5hW+1+AthBtvS4x9yno3V1A==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.1.1.tgz", + "integrity": "sha512-l8zD3EdeixvwmLNlJoMX3hhj8iIze95okj4sqmBzOq/zW8gZLElUveH4bpKEMuR+Nweazjlwc7L6g4C26M/y6Q==", "dev": true, "dependencies": { - "@jest/test-result": "^27.1.0", + "@jest/test-result": "^27.1.1", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", - "jest-runtime": "^27.1.0" + "jest-haste-map": "^27.1.1", + "jest-runtime": "^27.1.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/transform": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.1.0.tgz", - "integrity": "sha512-ZRGCA2ZEVJ00ubrhkTG87kyLbN6n55g1Ilq0X9nJb5bX3MhMp3O6M7KG+LvYu+nZRqG5cXsQnJEdZbdpTAV8pQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.1.1.tgz", + "integrity": "sha512-qM19Eu75U6Jc5zosXXVnq900Nl9JDpoGaZ4Mg6wZs7oqbu3heYSMOZS19DlwjlhWdfNRjF4UeAgkrCJCK3fEXg==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", + "jest-haste-map": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-util": "^27.1.0", + "jest-util": "^27.1.1", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", @@ -1012,9 +1012,9 @@ } }, "node_modules/@jest/types": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.0.tgz", - "integrity": "sha512-pRP5cLIzN7I7Vp6mHKRSaZD7YpBTK7hawx5si8trMKqk4+WOdK8NEKOTO2G8PKWD1HbKMVckVB6/XHh/olhf2g==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.1.tgz", + "integrity": "sha512-yqJPDDseb0mXgKqmNqypCsb85C22K1aY5+LUxh7syIM9n/b0AsaltxNy+o6tt29VcfGDpYEve175bm3uOhcehA==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -1155,9 +1155,9 @@ } }, "node_modules/@types/babel__core": { - "version": "7.1.15", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", - "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==", + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -1924,13 +1924,13 @@ } }, "node_modules/babel-jest": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.1.0.tgz", - "integrity": "sha512-6NrdqzaYemALGCuR97QkC/FkFIEBWP5pw5TMJoUHZTVXyOgocujp6A0JE2V6gE0HtqAAv6VKU/nI+OCR1Z4gHA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.1.1.tgz", + "integrity": "sha512-JA+dzJl4n2RBvWQEnph6HJaTHrsIPiXGQYatt/D8nR4UpX9UG4GaDzykVVPQBbrdTebZREkRb6SOxyIXJRab6Q==", "dev": true, "dependencies": { - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/transform": "^27.1.1", + "@jest/types": "^27.1.1", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", "babel-preset-jest": "^27.0.6", @@ -3633,9 +3633,9 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "36.0.8", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.8.tgz", - "integrity": "sha512-brNjHvRuBy5CaV01mSp6WljrO/T8fHNj0DXG38odOGDnhI7HdcbLKX7DpSvg2Rfcifwh8GlnNFzx13sI05t3bg==", + "version": "36.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.1.0.tgz", + "integrity": "sha512-Qpied2AJCQcScxfzTObLKRiP5QgLXjMU/ITjBagEV5p2Q/HpumD1EQtazdRYdjDSwPmXhwOl2yquwOGQ4HOJNw==", "dev": true, "dependencies": { "@es-joy/jsdoccomment": "0.10.8", @@ -3908,16 +3908,16 @@ } }, "node_modules/expect": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.1.0.tgz", - "integrity": "sha512-9kJngV5hOJgkFil4F/uXm3hVBubUK2nERVfvqNNwxxuW8ZOUwSTTSysgfzckYtv/LBzj/LJXbiAF7okHCXgdug==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.1.1.tgz", + "integrity": "sha512-JQAzp0CJoFFHF1RnOtrMUNMdsfx/Tl0+FhRzVl8q0fa23N+JyWdPXwb3T5rkHCvyo9uttnK7lVdKCBl1b/9EDw==", "dev": true, "dependencies": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "ansi-styles": "^5.0.0", "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", + "jest-matcher-utils": "^27.1.1", + "jest-message-util": "^27.1.1", "jest-regex-util": "^27.0.6" }, "engines": { @@ -5328,14 +5328,14 @@ } }, "node_modules/jest": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", - "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.1.tgz", + "integrity": "sha512-LFTEZOhoZNR/2DQM3OCaK5xC6c55c1OWhYh0njRsoHX0qd6x4nkcgenkSH0JKjsAGMTmmJAoL7/oqYHMfwhruA==", "dev": true, "dependencies": { - "@jest/core": "^27.1.0", + "@jest/core": "^27.1.1", "import-local": "^3.0.2", - "jest-cli": "^27.1.0" + "jest-cli": "^27.1.1" }, "bin": { "jest": "bin/jest.js" @@ -5353,12 +5353,12 @@ } }, "node_modules/jest-changed-files": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.1.0.tgz", - "integrity": "sha512-eRcb13TfQw0xiV2E98EmiEgs9a5uaBIqJChyl0G7jR9fCIvGjXovnDS6Zbku3joij4tXYcSK4SE1AXqOlUxjWg==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.1.1.tgz", + "integrity": "sha512-5TV9+fYlC2A6hu3qtoyGHprBwCAn0AuGA77bZdUgYvVlRMjHXo063VcWTEAyx6XAZ85DYHqp0+aHKbPlfRDRvA==", "dev": true, "dependencies": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "execa": "^5.0.0", "throat": "^6.0.1" }, @@ -5367,27 +5367,27 @@ } }, "node_modules/jest-circus": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.1.0.tgz", - "integrity": "sha512-6FWtHs3nZyZlMBhRf1wvAC5CirnflbGJAY1xssSAnERLiiXQRH+wY2ptBVtXjX4gz4AA2EwRV57b038LmifRbA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.1.1.tgz", + "integrity": "sha512-Xed1ApiMFu/yzqGMBToHr8sp2gkX/ARZf4nXoGrHJrXrTUdVIWiVYheayfcOaPdQvQEE/uyBLgW7I7YBLIrAXQ==", "dev": true, "dependencies": { - "@jest/environment": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/environment": "^27.1.1", + "@jest/test-result": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.1.0", + "expect": "^27.1.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.1.0", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "pretty-format": "^27.1.0", + "jest-each": "^27.1.1", + "jest-matcher-utils": "^27.1.1", + "jest-message-util": "^27.1.1", + "jest-runtime": "^27.1.1", + "jest-snapshot": "^27.1.1", + "jest-util": "^27.1.1", + "pretty-format": "^27.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" @@ -5397,21 +5397,21 @@ } }, "node_modules/jest-cli": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.1.0.tgz", - "integrity": "sha512-h6zPUOUu+6oLDrXz0yOWY2YXvBLk8gQinx4HbZ7SF4V3HzasQf+ncoIbKENUMwXyf54/6dBkYXvXJos+gOHYZw==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.1.1.tgz", + "integrity": "sha512-LCjfEYp9D3bcOeVUUpEol9Y1ijZYMWVqflSmtw/wX+6Fb7zP4IlO14/6s9v1pxsoM4Pn46+M2zABgKuQjyDpTw==", "dev": true, "dependencies": { - "@jest/core": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/core": "^27.1.1", + "@jest/test-result": "^27.1.1", + "@jest/types": "^27.1.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", - "jest-config": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-config": "^27.1.1", + "jest-util": "^27.1.1", + "jest-validate": "^27.1.1", "prompts": "^2.0.1", "yargs": "^16.0.3" }, @@ -5431,32 +5431,32 @@ } }, "node_modules/jest-config": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.1.0.tgz", - "integrity": "sha512-GMo7f76vMYUA3b3xOdlcKeKQhKcBIgurjERO2hojo0eLkKPGcw7fyIoanH+m6KOP2bLad+fGnF8aWOJYxzNPeg==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.1.1.tgz", + "integrity": "sha512-2iSd5zoJV4MsWPcLCGwUVUY/j6pZXm4Qd3rnbCtrd9EHNTg458iHw8PZztPQXfxKBKJxLfBk7tbZqYF8MGtxJA==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.1.0", - "@jest/types": "^27.1.0", - "babel-jest": "^27.1.0", + "@jest/test-sequencer": "^27.1.1", + "@jest/types": "^27.1.1", + "babel-jest": "^27.1.1", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", - "jest-circus": "^27.1.0", - "jest-environment-jsdom": "^27.1.0", - "jest-environment-node": "^27.1.0", + "jest-circus": "^27.1.1", + "jest-environment-jsdom": "^27.1.1", + "jest-environment-node": "^27.1.1", "jest-get-type": "^27.0.6", - "jest-jasmine2": "^27.1.0", + "jest-jasmine2": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.0", - "jest-runner": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-resolve": "^27.1.1", + "jest-runner": "^27.1.1", + "jest-util": "^27.1.1", + "jest-validate": "^27.1.1", "micromatch": "^4.0.4", - "pretty-format": "^27.1.0" + "pretty-format": "^27.1.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5471,15 +5471,15 @@ } }, "node_modules/jest-diff": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.1.0.tgz", - "integrity": "sha512-rjfopEYl58g/SZTsQFmspBODvMSytL16I+cirnScWTLkQVXYVZfxm78DFfdIIXc05RCYuGjxJqrdyG4PIFzcJg==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.1.1.tgz", + "integrity": "sha512-m/6n5158rqEriTazqHtBpOa2B/gGgXJijX6nsEgZfbJ/3pxQcdpVXBe+FP39b1dxWHyLVVmuVXddmAwtqFO4Lg==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^27.0.6", "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.0" + "pretty-format": "^27.1.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5498,33 +5498,33 @@ } }, "node_modules/jest-each": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.1.0.tgz", - "integrity": "sha512-K/cNvQlmDqQMRHF8CaQ0XPzCfjP5HMJc2bIJglrIqI9fjwpNqITle63IWE+wq4p+3v+iBgh7Wq0IdGpLx5xjDg==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.1.1.tgz", + "integrity": "sha512-r6hOsTLavUBb1xN0uDa89jdDeBmJ+K49fWpbyxeGRA2pLY46PlC4z551/cWNQzrj+IUa5/gSRsCIV/01HdNPug==", "dev": true, "dependencies": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", - "jest-util": "^27.1.0", - "pretty-format": "^27.1.0" + "jest-util": "^27.1.1", + "pretty-format": "^27.1.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.1.0.tgz", - "integrity": "sha512-JbwOcOxh/HOtsj56ljeXQCUJr3ivnaIlM45F5NBezFLVYdT91N5UofB1ux2B1CATsQiudcHdgTaeuqGXJqjJYQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.1.1.tgz", + "integrity": "sha512-6vOnoZ6IaExuw7FvnuJhA1qFYv1DDSnN0sQowzolNwxQp7bG1YhLxj2YU1sVXAYA3IR3MbH2mbnJUsLUWfyfzw==", "dev": true, "dependencies": { - "@jest/environment": "^27.1.0", - "@jest/fake-timers": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/environment": "^27.1.1", + "@jest/fake-timers": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", - "jest-mock": "^27.1.0", - "jest-util": "^27.1.0", + "jest-mock": "^27.1.1", + "jest-util": "^27.1.1", "jsdom": "^16.6.0" }, "engines": { @@ -5532,9 +5532,9 @@ } }, "node_modules/jest-environment-jsdom/node_modules/acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -5638,17 +5638,17 @@ } }, "node_modules/jest-environment-node": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.1.0.tgz", - "integrity": "sha512-JIyJ8H3wVyM4YCXp7njbjs0dIT87yhGlrXCXhDKNIg1OjurXr6X38yocnnbXvvNyqVTqSI4M9l+YfPKueqL1lw==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.1.1.tgz", + "integrity": "sha512-OEGeZh0PwzngNIYWYgWrvTcLygopV8OJbC9HNb0j70VBKgEIsdZkYhwcFnaURX83OHACMqf1pa9Tv5Pw5jemrg==", "dev": true, "dependencies": { - "@jest/environment": "^27.1.0", - "@jest/fake-timers": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/environment": "^27.1.1", + "@jest/fake-timers": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", - "jest-mock": "^27.1.0", - "jest-util": "^27.1.0" + "jest-mock": "^27.1.1", + "jest-util": "^27.1.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5664,12 +5664,12 @@ } }, "node_modules/jest-haste-map": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.1.0.tgz", - "integrity": "sha512-7mz6LopSe+eA6cTFMf10OfLLqRoIPvmMyz5/OnSXnHO7hB0aDP1iIeLWCXzAcYU5eIJVpHr12Bk9yyq2fTW9vg==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.1.1.tgz", + "integrity": "sha512-NGLYVAdh5C8Ezg5QBFzrNeYsfxptDBPlhvZNaicLiZX77F/rS27a9M6u9ripWAaaD54xnWdZNZpEkdjD5Eo5aQ==", "dev": true, "dependencies": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", @@ -5677,8 +5677,8 @@ "graceful-fs": "^4.2.4", "jest-regex-util": "^27.0.6", "jest-serializer": "^27.0.6", - "jest-util": "^27.1.0", - "jest-worker": "^27.1.0", + "jest-util": "^27.1.1", + "jest-worker": "^27.1.1", "micromatch": "^4.0.4", "walker": "^1.0.7" }, @@ -5690,28 +5690,28 @@ } }, "node_modules/jest-jasmine2": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.1.0.tgz", - "integrity": "sha512-Z/NIt0wBDg3przOW2FCWtYjMn3Ip68t0SL60agD/e67jlhTyV3PIF8IzT9ecwqFbeuUSO2OT8WeJgHcalDGFzQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.1.1.tgz", + "integrity": "sha512-0LAzUmcmvQwjIdJt0cXUVX4G5qjVXE8ELt6nbMNDzv2yAs2hYCCUtQq+Eje70GwAysWCGcS64QeYj5VPHYVxPg==", "dev": true, "dependencies": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.1.0", + "@jest/environment": "^27.1.1", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/test-result": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.1.0", + "expect": "^27.1.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.1.0", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "pretty-format": "^27.1.0", + "jest-each": "^27.1.1", + "jest-matcher-utils": "^27.1.1", + "jest-message-util": "^27.1.1", + "jest-runtime": "^27.1.1", + "jest-snapshot": "^27.1.1", + "jest-util": "^27.1.1", + "pretty-format": "^27.1.1", "throat": "^6.0.1" }, "engines": { @@ -5719,46 +5719,46 @@ } }, "node_modules/jest-leak-detector": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.1.0.tgz", - "integrity": "sha512-oHvSkz1E80VyeTKBvZNnw576qU+cVqRXUD3/wKXh1zpaki47Qty2xeHg2HKie9Hqcd2l4XwircgNOWb/NiGqdA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.1.1.tgz", + "integrity": "sha512-gwSgzmqShoeEsEVpgObymQPrM9P6557jt1EsFW5aCeJ46Cme0EdjYU7xr6llQZ5GpWDl56eOstUaPXiZOfiTKw==", "dev": true, "dependencies": { "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.0" + "pretty-format": "^27.1.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.1.0.tgz", - "integrity": "sha512-VmAudus2P6Yt/JVBRdTPFhUzlIN8DYJd+et5Rd9QDsO/Z82Z4iwGjo43U8Z+PTiz8CBvKvlb6Fh3oKy39hykkQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.1.1.tgz", + "integrity": "sha512-Q1a10w9Y4sh0wegkdP6reQOa/Dtz7nAvDqBgrat1ItZAUvk4jzXAqyhXPu/ZuEtDaXaNKpdRPRQA8bvkOh2Eaw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.1.0", + "jest-diff": "^27.1.1", "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.0" + "pretty-format": "^27.1.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-message-util": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.1.0.tgz", - "integrity": "sha512-Eck8NFnJ5Sg36R9XguD65cf2D5+McC+NF5GIdEninoabcuoOfWrID5qJhufq5FB0DRKoiyxB61hS7MKoMD0trQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.1.1.tgz", + "integrity": "sha512-b697BOJV93+AVGvzLRtVZ0cTVRbd59OaWnbB2D75GRaIMc4I+Z9W0wHxbfjW01JWO+TqqW4yevT0aN7Fd0XWng==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.1.0", + "pretty-format": "^27.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -5779,12 +5779,12 @@ } }, "node_modules/jest-mock": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.0.tgz", - "integrity": "sha512-iT3/Yhu7DwAg/0HvvLCqLvrTKTRMyJlrrfJYWzuLSf9RCAxBoIXN3HoymZxMnYsC3eD8ewGbUa9jUknwBenx2w==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.1.tgz", + "integrity": "sha512-SClsFKuYBf+6SSi8jtAYOuPw8DDMsTElUWEae3zq7vDhH01ayVSIHUSIa8UgbDOUalCFp6gNsaikN0rbxN4dbw==", "dev": true, "dependencies": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/node": "*" }, "engines": { @@ -5818,19 +5818,19 @@ } }, "node_modules/jest-resolve": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.1.0.tgz", - "integrity": "sha512-TXvzrLyPg0vLOwcWX38ZGYeEztSEmW+cQQKqc4HKDUwun31wsBXwotRlUz4/AYU/Fq4GhbMd/ileIWZEtcdmIA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.1.1.tgz", + "integrity": "sha512-M41YFmWhvDVstwe7XuV21zynOiBLJB5Sk0GrIsYYgTkjfEWNLVXDjAyq1W7PHseaYNOxIc0nOGq/r5iwcZNC1A==", "dev": true, "dependencies": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", + "jest-haste-map": "^27.1.1", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-util": "^27.1.1", + "jest-validate": "^27.1.1", "resolve": "^1.20.0", "slash": "^3.0.0" }, @@ -5839,45 +5839,45 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.0.tgz", - "integrity": "sha512-Kq5XuDAELuBnrERrjFYEzu/A+i2W7l9HnPWqZEeKGEQ7m1R+6ndMbdXCVCx29Se1qwLZLgvoXwinB3SPIaitMQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.1.tgz", + "integrity": "sha512-sYZR+uBjFDCo4VhYeazZf/T+ryYItvdLKu9vHatqkUqHGjDMrdEPOykiqC2iEpaCFTS+3iL/21CYiJuKdRbniw==", "dev": true, "dependencies": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.1.0" + "jest-snapshot": "^27.1.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-runner": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.1.0.tgz", - "integrity": "sha512-ZWPKr9M5w5gDplz1KsJ6iRmQaDT/yyAFLf18fKbb/+BLWsR1sCNC2wMT0H7pP3gDcBz0qZ6aJraSYUNAGSJGaw==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.1.1.tgz", + "integrity": "sha512-lP3MBNQhg75/sQtVkC8dsAQZumvy3lHK/YIwYPfEyqGIX1qEcnYIRxP89q0ZgC5ngvi1vN2P5UFHszQxguWdng==", "dev": true, "dependencies": { - "@jest/console": "^27.1.0", - "@jest/environment": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.1.1", + "@jest/environment": "^27.1.1", + "@jest/test-result": "^27.1.1", + "@jest/transform": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.1.0", - "jest-environment-node": "^27.1.0", - "jest-haste-map": "^27.1.0", - "jest-leak-detector": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-resolve": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-util": "^27.1.0", - "jest-worker": "^27.1.0", + "jest-environment-jsdom": "^27.1.1", + "jest-environment-node": "^27.1.1", + "jest-haste-map": "^27.1.1", + "jest-leak-detector": "^27.1.1", + "jest-message-util": "^27.1.1", + "jest-resolve": "^27.1.1", + "jest-runtime": "^27.1.1", + "jest-util": "^27.1.1", + "jest-worker": "^27.1.1", "source-map-support": "^0.5.6", "throat": "^6.0.1" }, @@ -5886,19 +5886,19 @@ } }, "node_modules/jest-runtime": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.1.0.tgz", - "integrity": "sha512-okiR2cpGjY0RkWmUGGado6ETpFOi9oG3yV0CioYdoktkVxy5Hv0WRLWnJFuArSYS8cHMCNcceUUMGiIfgxCO9A==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.1.1.tgz", + "integrity": "sha512-FEwy+tSzmsvuKaQpyYsUyk31KG5vMmA2r2BSTHgv0yNfcooQdm2Ke91LM9Ud8D3xz8CLDHJWAI24haMFTwrsPg==", "dev": true, "dependencies": { - "@jest/console": "^27.1.0", - "@jest/environment": "^27.1.0", - "@jest/fake-timers": "^27.1.0", - "@jest/globals": "^27.1.0", + "@jest/console": "^27.1.1", + "@jest/environment": "^27.1.1", + "@jest/fake-timers": "^27.1.1", + "@jest/globals": "^27.1.1", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/test-result": "^27.1.1", + "@jest/transform": "^27.1.1", + "@jest/types": "^27.1.1", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", @@ -5907,14 +5907,14 @@ "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-mock": "^27.1.0", + "jest-haste-map": "^27.1.1", + "jest-message-util": "^27.1.1", + "jest-mock": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-resolve": "^27.1.1", + "jest-snapshot": "^27.1.1", + "jest-util": "^27.1.1", + "jest-validate": "^27.1.1", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" @@ -5937,9 +5937,9 @@ } }, "node_modules/jest-snapshot": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.1.0.tgz", - "integrity": "sha512-eaeUBoEjuuRwmiRI51oTldUsKOohB1F6fPqWKKILuDi/CStxzp2IWekVUXbuHHoz5ik33ioJhshiHpgPFbYgcA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.1.1.tgz", + "integrity": "sha512-Wi3QGiuRFo3lU+EbQmZnBOks0CJyAMPHvYoG7iJk00Do10jeOyuOEO0Jfoaoun8+8TDv+Nzl7Aswir/IK9+1jg==", "dev": true, "dependencies": { "@babel/core": "^7.7.2", @@ -5948,23 +5948,23 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/transform": "^27.1.1", + "@jest/types": "^27.1.1", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.1.0", + "expect": "^27.1.1", "graceful-fs": "^4.2.4", - "jest-diff": "^27.1.0", + "jest-diff": "^27.1.1", "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.1.0", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-resolve": "^27.1.0", - "jest-util": "^27.1.0", + "jest-haste-map": "^27.1.1", + "jest-matcher-utils": "^27.1.1", + "jest-message-util": "^27.1.1", + "jest-resolve": "^27.1.1", + "jest-util": "^27.1.1", "natural-compare": "^1.4.0", - "pretty-format": "^27.1.0", + "pretty-format": "^27.1.1", "semver": "^7.3.2" }, "engines": { @@ -5987,12 +5987,12 @@ } }, "node_modules/jest-util": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.1.0.tgz", - "integrity": "sha512-edSLD2OneYDKC6gZM1yc+wY/877s/fuJNoM1k3sOEpzFyeptSmke3SLnk1dDHk9CgTA+58mnfx3ew3J11Kes/w==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.1.1.tgz", + "integrity": "sha512-zf9nEbrASWn2mC/L91nNb0K+GkhFvi4MP6XJG2HqnHzHvLYcs7ou/In68xYU1i1dSkJlrWcYfWXQE8nVR+nbOA==", "dev": true, "dependencies": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -6004,17 +6004,17 @@ } }, "node_modules/jest-validate": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.1.0.tgz", - "integrity": "sha512-QiJ+4XuSuMsfPi9zvdO//IrSRSlG6ybJhOpuqYSsuuaABaNT84h0IoD6vvQhThBOKT+DIKvl5sTM0l6is9+SRA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.1.1.tgz", + "integrity": "sha512-N5Er5FKav/8m2dJwn7BGnZwnoD1BSc8jx5T+diG2OvyeugvZDhPeAt5DrNaGkkaKCrSUvuE7A5E4uHyT7Vj0Mw==", "dev": true, "dependencies": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "leven": "^3.1.0", - "pretty-format": "^27.1.0" + "pretty-format": "^27.1.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -6033,17 +6033,17 @@ } }, "node_modules/jest-watcher": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.1.0.tgz", - "integrity": "sha512-ivaWTrA46aHWdgPDgPypSHiNQjyKnLBpUIHeBaGg11U+pDzZpkffGlcB1l1a014phmG0mHgkOHtOgiqJQM6yKQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.1.1.tgz", + "integrity": "sha512-XQzyHbxziDe+lZM6Dzs40fEt4q9akOGwitJnxQasJ9WG0bv3JGiRlsBgjw13znGapeMtFaEsyhL0Cl04IbaoWQ==", "dev": true, "dependencies": { - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/test-result": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.1.0", + "jest-util": "^27.1.1", "string-length": "^4.0.1" }, "engines": { @@ -6051,9 +6051,9 @@ } }, "node_modules/jest-worker": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.0.tgz", - "integrity": "sha512-mO4PHb2QWLn9yRXGp7rkvXLAYuxwhq1ZYUo0LoDhg8wqvv4QizP1ZWEJOeolgbEgAWZLIEU0wsku8J+lGWfBhg==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.1.tgz", + "integrity": "sha512-XJKCL7tu+362IUYTWvw8+3S75U7qMiYiRU6u5yqscB48bTvzwN6i8L/7wVTXiFLwkRsxARNM7TISnTvcgv9hxA==", "dev": true, "dependencies": { "@types/node": "*", @@ -7765,12 +7765,12 @@ } }, "node_modules/pretty-format": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.1.0.tgz", - "integrity": "sha512-4aGaud3w3rxAO6OXmK3fwBFQ0bctIOG3/if+jYEFGNGIs0EvuidQm3bZ9mlP2/t9epLNC/12czabfy7TZNSwVA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.1.1.tgz", + "integrity": "sha512-zdBi/xlstKJL42UH7goQti5Hip/B415w1Mfj+WWWYMBylAYtKESnXGUtVVcMVid9ReVjypCotUV6CEevYPHv2g==", "dev": true, "dependencies": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" @@ -9518,9 +9518,9 @@ "dev": true }, "node_modules/tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "node_modules/to-fast-properties": { @@ -11093,49 +11093,49 @@ "dev": true }, "@jest/console": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.1.0.tgz", - "integrity": "sha512-+Vl+xmLwAXLNlqT61gmHEixeRbS4L8MUzAjtpBCOPWH+izNI/dR16IeXjkXJdRtIVWVSf9DO1gdp67B1XorZhQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.1.1.tgz", + "integrity": "sha512-VpQJRsWSeAem0zpBjeRtDbcD6DlbNoK11dNYt+PSQ+DDORh9q2/xyEpErfwgnLjWX0EKkSZmTGx/iH9Inzs6vQ==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.1.0", - "jest-util": "^27.1.0", + "jest-message-util": "^27.1.1", + "jest-util": "^27.1.1", "slash": "^3.0.0" } }, "@jest/core": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.1.0.tgz", - "integrity": "sha512-3l9qmoknrlCFKfGdrmiQiPne+pUR4ALhKwFTYyOeKw6egfDwJkO21RJ1xf41rN8ZNFLg5W+w6+P4fUqq4EMRWA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.1.1.tgz", + "integrity": "sha512-oCkKeTgI0emznKcLoq5OCD0PhxCijA4l7ejDnWW3d5bgSi+zfVaLybVqa+EQOxpNejQWtTna7tmsAXjMN9N43Q==", "dev": true, "requires": { - "@jest/console": "^27.1.0", - "@jest/reporters": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.1.1", + "@jest/reporters": "^27.1.1", + "@jest/test-result": "^27.1.1", + "@jest/transform": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.1.0", - "jest-config": "^27.1.0", - "jest-haste-map": "^27.1.0", - "jest-message-util": "^27.1.0", + "jest-changed-files": "^27.1.1", + "jest-config": "^27.1.1", + "jest-haste-map": "^27.1.1", + "jest-message-util": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.0", - "jest-resolve-dependencies": "^27.1.0", - "jest-runner": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", - "jest-watcher": "^27.1.0", + "jest-resolve": "^27.1.1", + "jest-resolve-dependencies": "^27.1.1", + "jest-runner": "^27.1.1", + "jest-runtime": "^27.1.1", + "jest-snapshot": "^27.1.1", + "jest-util": "^27.1.1", + "jest-validate": "^27.1.1", + "jest-watcher": "^27.1.1", "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", @@ -11144,53 +11144,53 @@ } }, "@jest/environment": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.1.0.tgz", - "integrity": "sha512-wRp50aAMY2w1U2jP1G32d6FUVBNYqmk8WaGkiIEisU48qyDV0WPtw3IBLnl7orBeggveommAkuijY+RzVnNDOQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.1.1.tgz", + "integrity": "sha512-+y882/ZdxhyqF5RzxIrNIANjHj991WH7jifdcplzMDosDUOyCACFYUyVTBGbSTocbU+s1cesroRzkwi8hZ9SHg==", "dev": true, "requires": { - "@jest/fake-timers": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/fake-timers": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", - "jest-mock": "^27.1.0" + "jest-mock": "^27.1.1" } }, "@jest/fake-timers": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.1.0.tgz", - "integrity": "sha512-22Zyn8il8DzpS+30jJNVbTlm7vAtnfy1aYvNeOEHloMlGy1PCYLHa4PWlSws0hvNsMM5bON6GISjkLoQUV3oMA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.1.1.tgz", + "integrity": "sha512-u8TJ5VlsVYTsGFatoyIae2l25pku4Bu15QCPTx2Gs5z+R//Ee3tHN85462Vc9yGVcdDvgADbqNkhOLxbEwPjMQ==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^27.1.0", - "jest-mock": "^27.1.0", - "jest-util": "^27.1.0" + "jest-message-util": "^27.1.1", + "jest-mock": "^27.1.1", + "jest-util": "^27.1.1" } }, "@jest/globals": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.1.0.tgz", - "integrity": "sha512-73vLV4aNHAlAgjk0/QcSIzzCZSqVIPbmFROJJv9D3QUR7BI4f517gVdJpSrCHxuRH3VZFhe0yGG/tmttlMll9g==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.1.1.tgz", + "integrity": "sha512-Q3JcTPmY+DAEHnr4MpnBV3mwy50EGrTC6oSDTNnW7FNGGacTJAfpWNk02D7xv422T1OzK2A2BKx+26xJOvHkyw==", "dev": true, "requires": { - "@jest/environment": "^27.1.0", - "@jest/types": "^27.1.0", - "expect": "^27.1.0" + "@jest/environment": "^27.1.1", + "@jest/types": "^27.1.1", + "expect": "^27.1.1" } }, "@jest/reporters": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.1.0.tgz", - "integrity": "sha512-5T/zlPkN2HnK3Sboeg64L5eC8iiaZueLpttdktWTJsvALEtP2YMkC5BQxwjRWQACG9SwDmz+XjjkoxXUDMDgdw==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.1.1.tgz", + "integrity": "sha512-cEERs62n1P4Pqox9HWyNOEkP57G95aK2mBjB6D8Ruz1Yc98fKH53b58rlVEnsY5nLmkLNZk65fxNi9C0Yds/8w==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.1.1", + "@jest/test-result": "^27.1.1", + "@jest/transform": "^27.1.1", + "@jest/types": "^27.1.1", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -11201,10 +11201,10 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.1.0", - "jest-resolve": "^27.1.0", - "jest-util": "^27.1.0", - "jest-worker": "^27.1.0", + "jest-haste-map": "^27.1.1", + "jest-resolve": "^27.1.1", + "jest-util": "^27.1.1", + "jest-worker": "^27.1.1", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -11224,45 +11224,45 @@ } }, "@jest/test-result": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.1.0.tgz", - "integrity": "sha512-Aoz00gpDL528ODLghat3QSy6UBTD5EmmpjrhZZMK/v1Q2/rRRqTGnFxHuEkrD4z/Py96ZdOHxIWkkCKRpmnE1A==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.1.1.tgz", + "integrity": "sha512-8vy75A0Jtfz9DqXFUkjC5Co/wRla+D7qRFdShUY8SbPqBS3GBx3tpba7sGKFos8mQrdbe39n+c1zgVKtarfy6A==", "dev": true, "requires": { - "@jest/console": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.1.1", + "@jest/types": "^27.1.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.1.0.tgz", - "integrity": "sha512-lnCWawDr6Z1DAAK9l25o3AjmKGgcutq1iIbp+hC10s/HxnB8ZkUsYq1FzjOoxxZ5hW+1+AthBtvS4x9yno3V1A==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.1.1.tgz", + "integrity": "sha512-l8zD3EdeixvwmLNlJoMX3hhj8iIze95okj4sqmBzOq/zW8gZLElUveH4bpKEMuR+Nweazjlwc7L6g4C26M/y6Q==", "dev": true, "requires": { - "@jest/test-result": "^27.1.0", + "@jest/test-result": "^27.1.1", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", - "jest-runtime": "^27.1.0" + "jest-haste-map": "^27.1.1", + "jest-runtime": "^27.1.1" } }, "@jest/transform": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.1.0.tgz", - "integrity": "sha512-ZRGCA2ZEVJ00ubrhkTG87kyLbN6n55g1Ilq0X9nJb5bX3MhMp3O6M7KG+LvYu+nZRqG5cXsQnJEdZbdpTAV8pQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.1.1.tgz", + "integrity": "sha512-qM19Eu75U6Jc5zosXXVnq900Nl9JDpoGaZ4Mg6wZs7oqbu3heYSMOZS19DlwjlhWdfNRjF4UeAgkrCJCK3fEXg==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", + "jest-haste-map": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-util": "^27.1.0", + "jest-util": "^27.1.1", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", @@ -11271,9 +11271,9 @@ } }, "@jest/types": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.0.tgz", - "integrity": "sha512-pRP5cLIzN7I7Vp6mHKRSaZD7YpBTK7hawx5si8trMKqk4+WOdK8NEKOTO2G8PKWD1HbKMVckVB6/XHh/olhf2g==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.1.tgz", + "integrity": "sha512-yqJPDDseb0mXgKqmNqypCsb85C22K1aY5+LUxh7syIM9n/b0AsaltxNy+o6tt29VcfGDpYEve175bm3uOhcehA==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -11385,9 +11385,9 @@ "dev": true }, "@types/babel__core": { - "version": "7.1.15", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", - "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==", + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -11998,13 +11998,13 @@ } }, "babel-jest": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.1.0.tgz", - "integrity": "sha512-6NrdqzaYemALGCuR97QkC/FkFIEBWP5pw5TMJoUHZTVXyOgocujp6A0JE2V6gE0HtqAAv6VKU/nI+OCR1Z4gHA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.1.1.tgz", + "integrity": "sha512-JA+dzJl4n2RBvWQEnph6HJaTHrsIPiXGQYatt/D8nR4UpX9UG4GaDzykVVPQBbrdTebZREkRb6SOxyIXJRab6Q==", "dev": true, "requires": { - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/transform": "^27.1.1", + "@jest/types": "^27.1.1", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", "babel-preset-jest": "^27.0.6", @@ -13307,9 +13307,9 @@ } }, "eslint-plugin-jsdoc": { - "version": "36.0.8", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.8.tgz", - "integrity": "sha512-brNjHvRuBy5CaV01mSp6WljrO/T8fHNj0DXG38odOGDnhI7HdcbLKX7DpSvg2Rfcifwh8GlnNFzx13sI05t3bg==", + "version": "36.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.1.0.tgz", + "integrity": "sha512-Qpied2AJCQcScxfzTObLKRiP5QgLXjMU/ITjBagEV5p2Q/HpumD1EQtazdRYdjDSwPmXhwOl2yquwOGQ4HOJNw==", "dev": true, "requires": { "@es-joy/jsdoccomment": "0.10.8", @@ -13486,16 +13486,16 @@ "dev": true }, "expect": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.1.0.tgz", - "integrity": "sha512-9kJngV5hOJgkFil4F/uXm3hVBubUK2nERVfvqNNwxxuW8ZOUwSTTSysgfzckYtv/LBzj/LJXbiAF7okHCXgdug==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.1.1.tgz", + "integrity": "sha512-JQAzp0CJoFFHF1RnOtrMUNMdsfx/Tl0+FhRzVl8q0fa23N+JyWdPXwb3T5rkHCvyo9uttnK7lVdKCBl1b/9EDw==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "ansi-styles": "^5.0.0", "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", + "jest-matcher-utils": "^27.1.1", + "jest-message-util": "^27.1.1", "jest-regex-util": "^27.0.6" }, "dependencies": { @@ -14566,113 +14566,113 @@ } }, "jest": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", - "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.1.tgz", + "integrity": "sha512-LFTEZOhoZNR/2DQM3OCaK5xC6c55c1OWhYh0njRsoHX0qd6x4nkcgenkSH0JKjsAGMTmmJAoL7/oqYHMfwhruA==", "dev": true, "requires": { - "@jest/core": "^27.1.0", + "@jest/core": "^27.1.1", "import-local": "^3.0.2", - "jest-cli": "^27.1.0" + "jest-cli": "^27.1.1" } }, "jest-changed-files": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.1.0.tgz", - "integrity": "sha512-eRcb13TfQw0xiV2E98EmiEgs9a5uaBIqJChyl0G7jR9fCIvGjXovnDS6Zbku3joij4tXYcSK4SE1AXqOlUxjWg==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.1.1.tgz", + "integrity": "sha512-5TV9+fYlC2A6hu3qtoyGHprBwCAn0AuGA77bZdUgYvVlRMjHXo063VcWTEAyx6XAZ85DYHqp0+aHKbPlfRDRvA==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "execa": "^5.0.0", "throat": "^6.0.1" } }, "jest-circus": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.1.0.tgz", - "integrity": "sha512-6FWtHs3nZyZlMBhRf1wvAC5CirnflbGJAY1xssSAnERLiiXQRH+wY2ptBVtXjX4gz4AA2EwRV57b038LmifRbA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.1.1.tgz", + "integrity": "sha512-Xed1ApiMFu/yzqGMBToHr8sp2gkX/ARZf4nXoGrHJrXrTUdVIWiVYheayfcOaPdQvQEE/uyBLgW7I7YBLIrAXQ==", "dev": true, "requires": { - "@jest/environment": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/environment": "^27.1.1", + "@jest/test-result": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.1.0", + "expect": "^27.1.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.1.0", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "pretty-format": "^27.1.0", + "jest-each": "^27.1.1", + "jest-matcher-utils": "^27.1.1", + "jest-message-util": "^27.1.1", + "jest-runtime": "^27.1.1", + "jest-snapshot": "^27.1.1", + "jest-util": "^27.1.1", + "pretty-format": "^27.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" } }, "jest-cli": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.1.0.tgz", - "integrity": "sha512-h6zPUOUu+6oLDrXz0yOWY2YXvBLk8gQinx4HbZ7SF4V3HzasQf+ncoIbKENUMwXyf54/6dBkYXvXJos+gOHYZw==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.1.1.tgz", + "integrity": "sha512-LCjfEYp9D3bcOeVUUpEol9Y1ijZYMWVqflSmtw/wX+6Fb7zP4IlO14/6s9v1pxsoM4Pn46+M2zABgKuQjyDpTw==", "dev": true, "requires": { - "@jest/core": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/core": "^27.1.1", + "@jest/test-result": "^27.1.1", + "@jest/types": "^27.1.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", - "jest-config": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-config": "^27.1.1", + "jest-util": "^27.1.1", + "jest-validate": "^27.1.1", "prompts": "^2.0.1", "yargs": "^16.0.3" } }, "jest-config": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.1.0.tgz", - "integrity": "sha512-GMo7f76vMYUA3b3xOdlcKeKQhKcBIgurjERO2hojo0eLkKPGcw7fyIoanH+m6KOP2bLad+fGnF8aWOJYxzNPeg==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.1.1.tgz", + "integrity": "sha512-2iSd5zoJV4MsWPcLCGwUVUY/j6pZXm4Qd3rnbCtrd9EHNTg458iHw8PZztPQXfxKBKJxLfBk7tbZqYF8MGtxJA==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.1.0", - "@jest/types": "^27.1.0", - "babel-jest": "^27.1.0", + "@jest/test-sequencer": "^27.1.1", + "@jest/types": "^27.1.1", + "babel-jest": "^27.1.1", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", - "jest-circus": "^27.1.0", - "jest-environment-jsdom": "^27.1.0", - "jest-environment-node": "^27.1.0", + "jest-circus": "^27.1.1", + "jest-environment-jsdom": "^27.1.1", + "jest-environment-node": "^27.1.1", "jest-get-type": "^27.0.6", - "jest-jasmine2": "^27.1.0", + "jest-jasmine2": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.0", - "jest-runner": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-resolve": "^27.1.1", + "jest-runner": "^27.1.1", + "jest-util": "^27.1.1", + "jest-validate": "^27.1.1", "micromatch": "^4.0.4", - "pretty-format": "^27.1.0" + "pretty-format": "^27.1.1" } }, "jest-diff": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.1.0.tgz", - "integrity": "sha512-rjfopEYl58g/SZTsQFmspBODvMSytL16I+cirnScWTLkQVXYVZfxm78DFfdIIXc05RCYuGjxJqrdyG4PIFzcJg==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.1.1.tgz", + "integrity": "sha512-m/6n5158rqEriTazqHtBpOa2B/gGgXJijX6nsEgZfbJ/3pxQcdpVXBe+FP39b1dxWHyLVVmuVXddmAwtqFO4Lg==", "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^27.0.6", "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.0" + "pretty-format": "^27.1.1" } }, "jest-docblock": { @@ -14685,37 +14685,37 @@ } }, "jest-each": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.1.0.tgz", - "integrity": "sha512-K/cNvQlmDqQMRHF8CaQ0XPzCfjP5HMJc2bIJglrIqI9fjwpNqITle63IWE+wq4p+3v+iBgh7Wq0IdGpLx5xjDg==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.1.1.tgz", + "integrity": "sha512-r6hOsTLavUBb1xN0uDa89jdDeBmJ+K49fWpbyxeGRA2pLY46PlC4z551/cWNQzrj+IUa5/gSRsCIV/01HdNPug==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", - "jest-util": "^27.1.0", - "pretty-format": "^27.1.0" + "jest-util": "^27.1.1", + "pretty-format": "^27.1.1" } }, "jest-environment-jsdom": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.1.0.tgz", - "integrity": "sha512-JbwOcOxh/HOtsj56ljeXQCUJr3ivnaIlM45F5NBezFLVYdT91N5UofB1ux2B1CATsQiudcHdgTaeuqGXJqjJYQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.1.1.tgz", + "integrity": "sha512-6vOnoZ6IaExuw7FvnuJhA1qFYv1DDSnN0sQowzolNwxQp7bG1YhLxj2YU1sVXAYA3IR3MbH2mbnJUsLUWfyfzw==", "dev": true, "requires": { - "@jest/environment": "^27.1.0", - "@jest/fake-timers": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/environment": "^27.1.1", + "@jest/fake-timers": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", - "jest-mock": "^27.1.0", - "jest-util": "^27.1.0", + "jest-mock": "^27.1.1", + "jest-util": "^27.1.1", "jsdom": "^16.6.0" }, "dependencies": { "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true }, "cssom": { @@ -14795,17 +14795,17 @@ } }, "jest-environment-node": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.1.0.tgz", - "integrity": "sha512-JIyJ8H3wVyM4YCXp7njbjs0dIT87yhGlrXCXhDKNIg1OjurXr6X38yocnnbXvvNyqVTqSI4M9l+YfPKueqL1lw==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.1.1.tgz", + "integrity": "sha512-OEGeZh0PwzngNIYWYgWrvTcLygopV8OJbC9HNb0j70VBKgEIsdZkYhwcFnaURX83OHACMqf1pa9Tv5Pw5jemrg==", "dev": true, "requires": { - "@jest/environment": "^27.1.0", - "@jest/fake-timers": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/environment": "^27.1.1", + "@jest/fake-timers": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", - "jest-mock": "^27.1.0", - "jest-util": "^27.1.0" + "jest-mock": "^27.1.1", + "jest-util": "^27.1.1" } }, "jest-get-type": { @@ -14815,12 +14815,12 @@ "dev": true }, "jest-haste-map": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.1.0.tgz", - "integrity": "sha512-7mz6LopSe+eA6cTFMf10OfLLqRoIPvmMyz5/OnSXnHO7hB0aDP1iIeLWCXzAcYU5eIJVpHr12Bk9yyq2fTW9vg==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.1.1.tgz", + "integrity": "sha512-NGLYVAdh5C8Ezg5QBFzrNeYsfxptDBPlhvZNaicLiZX77F/rS27a9M6u9ripWAaaD54xnWdZNZpEkdjD5Eo5aQ==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", @@ -14829,73 +14829,73 @@ "graceful-fs": "^4.2.4", "jest-regex-util": "^27.0.6", "jest-serializer": "^27.0.6", - "jest-util": "^27.1.0", - "jest-worker": "^27.1.0", + "jest-util": "^27.1.1", + "jest-worker": "^27.1.1", "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.1.0.tgz", - "integrity": "sha512-Z/NIt0wBDg3przOW2FCWtYjMn3Ip68t0SL60agD/e67jlhTyV3PIF8IzT9ecwqFbeuUSO2OT8WeJgHcalDGFzQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.1.1.tgz", + "integrity": "sha512-0LAzUmcmvQwjIdJt0cXUVX4G5qjVXE8ELt6nbMNDzv2yAs2hYCCUtQq+Eje70GwAysWCGcS64QeYj5VPHYVxPg==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.1.0", + "@jest/environment": "^27.1.1", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/test-result": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.1.0", + "expect": "^27.1.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.1.0", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "pretty-format": "^27.1.0", + "jest-each": "^27.1.1", + "jest-matcher-utils": "^27.1.1", + "jest-message-util": "^27.1.1", + "jest-runtime": "^27.1.1", + "jest-snapshot": "^27.1.1", + "jest-util": "^27.1.1", + "pretty-format": "^27.1.1", "throat": "^6.0.1" } }, "jest-leak-detector": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.1.0.tgz", - "integrity": "sha512-oHvSkz1E80VyeTKBvZNnw576qU+cVqRXUD3/wKXh1zpaki47Qty2xeHg2HKie9Hqcd2l4XwircgNOWb/NiGqdA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.1.1.tgz", + "integrity": "sha512-gwSgzmqShoeEsEVpgObymQPrM9P6557jt1EsFW5aCeJ46Cme0EdjYU7xr6llQZ5GpWDl56eOstUaPXiZOfiTKw==", "dev": true, "requires": { "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.0" + "pretty-format": "^27.1.1" } }, "jest-matcher-utils": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.1.0.tgz", - "integrity": "sha512-VmAudus2P6Yt/JVBRdTPFhUzlIN8DYJd+et5Rd9QDsO/Z82Z4iwGjo43U8Z+PTiz8CBvKvlb6Fh3oKy39hykkQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.1.1.tgz", + "integrity": "sha512-Q1a10w9Y4sh0wegkdP6reQOa/Dtz7nAvDqBgrat1ItZAUvk4jzXAqyhXPu/ZuEtDaXaNKpdRPRQA8bvkOh2Eaw==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.1.0", + "jest-diff": "^27.1.1", "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.0" + "pretty-format": "^27.1.1" } }, "jest-message-util": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.1.0.tgz", - "integrity": "sha512-Eck8NFnJ5Sg36R9XguD65cf2D5+McC+NF5GIdEninoabcuoOfWrID5qJhufq5FB0DRKoiyxB61hS7MKoMD0trQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.1.1.tgz", + "integrity": "sha512-b697BOJV93+AVGvzLRtVZ0cTVRbd59OaWnbB2D75GRaIMc4I+Z9W0wHxbfjW01JWO+TqqW4yevT0aN7Fd0XWng==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.1.0", + "pretty-format": "^27.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -14912,12 +14912,12 @@ } }, "jest-mock": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.0.tgz", - "integrity": "sha512-iT3/Yhu7DwAg/0HvvLCqLvrTKTRMyJlrrfJYWzuLSf9RCAxBoIXN3HoymZxMnYsC3eD8ewGbUa9jUknwBenx2w==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.1.tgz", + "integrity": "sha512-SClsFKuYBf+6SSi8jtAYOuPw8DDMsTElUWEae3zq7vDhH01ayVSIHUSIa8UgbDOUalCFp6gNsaikN0rbxN4dbw==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/node": "*" } }, @@ -14935,78 +14935,78 @@ "dev": true }, "jest-resolve": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.1.0.tgz", - "integrity": "sha512-TXvzrLyPg0vLOwcWX38ZGYeEztSEmW+cQQKqc4HKDUwun31wsBXwotRlUz4/AYU/Fq4GhbMd/ileIWZEtcdmIA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.1.1.tgz", + "integrity": "sha512-M41YFmWhvDVstwe7XuV21zynOiBLJB5Sk0GrIsYYgTkjfEWNLVXDjAyq1W7PHseaYNOxIc0nOGq/r5iwcZNC1A==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", + "jest-haste-map": "^27.1.1", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-util": "^27.1.1", + "jest-validate": "^27.1.1", "resolve": "^1.20.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.0.tgz", - "integrity": "sha512-Kq5XuDAELuBnrERrjFYEzu/A+i2W7l9HnPWqZEeKGEQ7m1R+6ndMbdXCVCx29Se1qwLZLgvoXwinB3SPIaitMQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.1.tgz", + "integrity": "sha512-sYZR+uBjFDCo4VhYeazZf/T+ryYItvdLKu9vHatqkUqHGjDMrdEPOykiqC2iEpaCFTS+3iL/21CYiJuKdRbniw==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.1.0" + "jest-snapshot": "^27.1.1" } }, "jest-runner": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.1.0.tgz", - "integrity": "sha512-ZWPKr9M5w5gDplz1KsJ6iRmQaDT/yyAFLf18fKbb/+BLWsR1sCNC2wMT0H7pP3gDcBz0qZ6aJraSYUNAGSJGaw==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.1.1.tgz", + "integrity": "sha512-lP3MBNQhg75/sQtVkC8dsAQZumvy3lHK/YIwYPfEyqGIX1qEcnYIRxP89q0ZgC5ngvi1vN2P5UFHszQxguWdng==", "dev": true, "requires": { - "@jest/console": "^27.1.0", - "@jest/environment": "^27.1.0", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/console": "^27.1.1", + "@jest/environment": "^27.1.1", + "@jest/test-result": "^27.1.1", + "@jest/transform": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.1.0", - "jest-environment-node": "^27.1.0", - "jest-haste-map": "^27.1.0", - "jest-leak-detector": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-resolve": "^27.1.0", - "jest-runtime": "^27.1.0", - "jest-util": "^27.1.0", - "jest-worker": "^27.1.0", + "jest-environment-jsdom": "^27.1.1", + "jest-environment-node": "^27.1.1", + "jest-haste-map": "^27.1.1", + "jest-leak-detector": "^27.1.1", + "jest-message-util": "^27.1.1", + "jest-resolve": "^27.1.1", + "jest-runtime": "^27.1.1", + "jest-util": "^27.1.1", + "jest-worker": "^27.1.1", "source-map-support": "^0.5.6", "throat": "^6.0.1" } }, "jest-runtime": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.1.0.tgz", - "integrity": "sha512-okiR2cpGjY0RkWmUGGado6ETpFOi9oG3yV0CioYdoktkVxy5Hv0WRLWnJFuArSYS8cHMCNcceUUMGiIfgxCO9A==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.1.1.tgz", + "integrity": "sha512-FEwy+tSzmsvuKaQpyYsUyk31KG5vMmA2r2BSTHgv0yNfcooQdm2Ke91LM9Ud8D3xz8CLDHJWAI24haMFTwrsPg==", "dev": true, "requires": { - "@jest/console": "^27.1.0", - "@jest/environment": "^27.1.0", - "@jest/fake-timers": "^27.1.0", - "@jest/globals": "^27.1.0", + "@jest/console": "^27.1.1", + "@jest/environment": "^27.1.1", + "@jest/fake-timers": "^27.1.1", + "@jest/globals": "^27.1.1", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.1.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/test-result": "^27.1.1", + "@jest/transform": "^27.1.1", + "@jest/types": "^27.1.1", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", @@ -15015,14 +15015,14 @@ "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-mock": "^27.1.0", + "jest-haste-map": "^27.1.1", + "jest-message-util": "^27.1.1", + "jest-mock": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.0", - "jest-snapshot": "^27.1.0", - "jest-util": "^27.1.0", - "jest-validate": "^27.1.0", + "jest-resolve": "^27.1.1", + "jest-snapshot": "^27.1.1", + "jest-util": "^27.1.1", + "jest-validate": "^27.1.1", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" @@ -15039,9 +15039,9 @@ } }, "jest-snapshot": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.1.0.tgz", - "integrity": "sha512-eaeUBoEjuuRwmiRI51oTldUsKOohB1F6fPqWKKILuDi/CStxzp2IWekVUXbuHHoz5ik33ioJhshiHpgPFbYgcA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.1.1.tgz", + "integrity": "sha512-Wi3QGiuRFo3lU+EbQmZnBOks0CJyAMPHvYoG7iJk00Do10jeOyuOEO0Jfoaoun8+8TDv+Nzl7Aswir/IK9+1jg==", "dev": true, "requires": { "@babel/core": "^7.7.2", @@ -15050,23 +15050,23 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/transform": "^27.1.1", + "@jest/types": "^27.1.1", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.1.0", + "expect": "^27.1.1", "graceful-fs": "^4.2.4", - "jest-diff": "^27.1.0", + "jest-diff": "^27.1.1", "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.1.0", - "jest-matcher-utils": "^27.1.0", - "jest-message-util": "^27.1.0", - "jest-resolve": "^27.1.0", - "jest-util": "^27.1.0", + "jest-haste-map": "^27.1.1", + "jest-matcher-utils": "^27.1.1", + "jest-message-util": "^27.1.1", + "jest-resolve": "^27.1.1", + "jest-util": "^27.1.1", "natural-compare": "^1.4.0", - "pretty-format": "^27.1.0", + "pretty-format": "^27.1.1", "semver": "^7.3.2" }, "dependencies": { @@ -15082,12 +15082,12 @@ } }, "jest-util": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.1.0.tgz", - "integrity": "sha512-edSLD2OneYDKC6gZM1yc+wY/877s/fuJNoM1k3sOEpzFyeptSmke3SLnk1dDHk9CgTA+58mnfx3ew3J11Kes/w==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.1.1.tgz", + "integrity": "sha512-zf9nEbrASWn2mC/L91nNb0K+GkhFvi4MP6XJG2HqnHzHvLYcs7ou/In68xYU1i1dSkJlrWcYfWXQE8nVR+nbOA==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", @@ -15096,17 +15096,17 @@ } }, "jest-validate": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.1.0.tgz", - "integrity": "sha512-QiJ+4XuSuMsfPi9zvdO//IrSRSlG6ybJhOpuqYSsuuaABaNT84h0IoD6vvQhThBOKT+DIKvl5sTM0l6is9+SRA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.1.1.tgz", + "integrity": "sha512-N5Er5FKav/8m2dJwn7BGnZwnoD1BSc8jx5T+diG2OvyeugvZDhPeAt5DrNaGkkaKCrSUvuE7A5E4uHyT7Vj0Mw==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "leven": "^3.1.0", - "pretty-format": "^27.1.0" + "pretty-format": "^27.1.1" }, "dependencies": { "camelcase": { @@ -15118,24 +15118,24 @@ } }, "jest-watcher": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.1.0.tgz", - "integrity": "sha512-ivaWTrA46aHWdgPDgPypSHiNQjyKnLBpUIHeBaGg11U+pDzZpkffGlcB1l1a014phmG0mHgkOHtOgiqJQM6yKQ==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.1.1.tgz", + "integrity": "sha512-XQzyHbxziDe+lZM6Dzs40fEt4q9akOGwitJnxQasJ9WG0bv3JGiRlsBgjw13znGapeMtFaEsyhL0Cl04IbaoWQ==", "dev": true, "requires": { - "@jest/test-result": "^27.1.0", - "@jest/types": "^27.1.0", + "@jest/test-result": "^27.1.1", + "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.1.0", + "jest-util": "^27.1.1", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.0.tgz", - "integrity": "sha512-mO4PHb2QWLn9yRXGp7rkvXLAYuxwhq1ZYUo0LoDhg8wqvv4QizP1ZWEJOeolgbEgAWZLIEU0wsku8J+lGWfBhg==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.1.tgz", + "integrity": "sha512-XJKCL7tu+362IUYTWvw8+3S75U7qMiYiRU6u5yqscB48bTvzwN6i8L/7wVTXiFLwkRsxARNM7TISnTvcgv9hxA==", "dev": true, "requires": { "@types/node": "*", @@ -16455,12 +16455,12 @@ } }, "pretty-format": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.1.0.tgz", - "integrity": "sha512-4aGaud3w3rxAO6OXmK3fwBFQ0bctIOG3/if+jYEFGNGIs0EvuidQm3bZ9mlP2/t9epLNC/12czabfy7TZNSwVA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.1.1.tgz", + "integrity": "sha512-zdBi/xlstKJL42UH7goQti5Hip/B415w1Mfj+WWWYMBylAYtKESnXGUtVVcMVid9ReVjypCotUV6CEevYPHv2g==", "dev": true, "requires": { - "@jest/types": "^27.1.0", + "@jest/types": "^27.1.1", "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" @@ -17816,9 +17816,9 @@ "dev": true }, "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "to-fast-properties": { diff --git a/package.json b/package.json index e6c58b43..aa80ffc6 100644 --- a/package.json +++ b/package.json @@ -47,11 +47,11 @@ "devDependencies": { "eslint-config-prettier": "^8.3.0", "eslint-plugin-jest": "^24.4.0", - "eslint-plugin-jsdoc": "^36.0.8", + "eslint-plugin-jsdoc": "^36.1.0", "eslint-plugin-prettier": "^4.0.0", "express-basic-auth": "^1.2.0", "husky": "^7.0.2", - "jest": "^27.1.0", + "jest": "^27.1.1", "jsdom": "^17.0.0", "lodash": "^4.17.21", "nyc": "^15.1.0", From 627cfa1dff3359c3c6b26bc54123b931f7fa8455 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 9 Sep 2021 00:31:24 +0200 Subject: [PATCH 087/134] hold node v16 at v16.8 due to errors in e2e tests with v16.9 --- .github/workflows/node-ci.js.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/node-ci.js.yml b/.github/workflows/node-ci.js.yml index 0919f7ae..2a8fa086 100644 --- a/.github/workflows/node-ci.js.yml +++ b/.github/workflows/node-ci.js.yml @@ -15,7 +15,7 @@ jobs: timeout-minutes: 30 strategy: matrix: - node-version: [12.x, 14.x, 16.x] + node-version: [12.x, 14.x, 16.8] steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} From 690efc0aff6934044687a4e19703a1404a42ee51 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 9 Sep 2021 00:48:39 +0200 Subject: [PATCH 088/134] fix test --- tests/unit/functions/updatenotification_spec.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/unit/functions/updatenotification_spec.js b/tests/unit/functions/updatenotification_spec.js index 79018334..ff648177 100644 --- a/tests/unit/functions/updatenotification_spec.js +++ b/tests/unit/functions/updatenotification_spec.js @@ -19,8 +19,6 @@ describe("Updatenotification", function () { const gitInfo = arr[0]; branch = gitInfo.current; expect(gitInfo.current).not.toBe(""); - expect(gitInfo.tracking).not.toBe(""); - expect(gitInfo.hash).not.toBe(""); }, 15000); it("should return no refs for git fetch", async function () { From 98942d6f9c6f9e05fc7cbbaffacb745ff1036fd9 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 9 Sep 2021 19:51:07 +0200 Subject: [PATCH 089/134] rename to GitHelper --- modules/default/updatenotification/node_helper.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/default/updatenotification/node_helper.js b/modules/default/updatenotification/node_helper.js index 9d836f19..c24e190a 100644 --- a/modules/default/updatenotification/node_helper.js +++ b/modules/default/updatenotification/node_helper.js @@ -1,4 +1,4 @@ -const git_Helper = require(__dirname + "/git_helper.js"); +const GitHelper = require(__dirname + "/git_helper.js"); const defaultModules = require(__dirname + "/../defaultmodules.js"); const NodeHelper = require("node_helper"); @@ -8,7 +8,7 @@ module.exports = NodeHelper.create({ updateTimer: null, updateProcessStarted: false, - gitHelper: new git_Helper.gitHelper(), + gitHelper: new GitHelper.gitHelper(), start: function () {}, From 2b147bb98b27542fe76b0582bb6d494bbf58237d Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 9 Sep 2021 20:50:35 +0200 Subject: [PATCH 090/134] do logger mocking in logger.js, remove sandbox stuff from unit tests --- js/logger.js | 73 ++++++++++++------- .../unit/global_vars/defaults_modules_spec.js | 39 +--------- tests/unit/global_vars/root_path_spec.js | 44 ++--------- tests/unit/mocks/logger.js | 20 ----- 4 files changed, 53 insertions(+), 123 deletions(-) delete mode 100644 tests/unit/mocks/logger.js diff --git a/js/logger.js b/js/logger.js index 93a5bb53..5b8040ac 100644 --- a/js/logger.js +++ b/js/logger.js @@ -9,11 +9,13 @@ */ (function (root, factory) { if (typeof exports === "object") { - // add timestamps in front of log messages - require("console-stamp")(console, { - pattern: "yyyy-mm-dd HH:MM:ss.l", - include: ["debug", "log", "info", "warn", "error"] - }); + if (process.env.JEST_WORKER_ID === undefined) { + // add timestamps in front of log messages + require("console-stamp")(console, { + pattern: "yyyy-mm-dd HH:MM:ss.l", + include: ["debug", "log", "info", "warn", "error"] + }); + } // Node, CommonJS-like module.exports = factory(root.config); @@ -22,29 +24,46 @@ root.Log = factory(root.config); } })(this, function (config) { - const logLevel = { - debug: Function.prototype.bind.call(console.debug, console), - log: Function.prototype.bind.call(console.log, console), - info: Function.prototype.bind.call(console.info, console), - warn: Function.prototype.bind.call(console.warn, console), - error: Function.prototype.bind.call(console.error, console), - group: Function.prototype.bind.call(console.group, console), - groupCollapsed: Function.prototype.bind.call(console.groupCollapsed, console), - groupEnd: Function.prototype.bind.call(console.groupEnd, console), - time: Function.prototype.bind.call(console.time, console), - timeEnd: Function.prototype.bind.call(console.timeEnd, console), - timeStamp: Function.prototype.bind.call(console.timeStamp, console) - }; + let logLevel; + if (process.env.JEST_WORKER_ID === undefined) { + logLevel = { + debug: Function.prototype.bind.call(console.debug, console), + log: Function.prototype.bind.call(console.log, console), + info: Function.prototype.bind.call(console.info, console), + warn: Function.prototype.bind.call(console.warn, console), + error: Function.prototype.bind.call(console.error, console), + group: Function.prototype.bind.call(console.group, console), + groupCollapsed: Function.prototype.bind.call(console.groupCollapsed, console), + groupEnd: Function.prototype.bind.call(console.groupEnd, console), + time: Function.prototype.bind.call(console.time, console), + timeEnd: Function.prototype.bind.call(console.timeEnd, console), + timeStamp: Function.prototype.bind.call(console.timeStamp, console) + }; - logLevel.setLogLevel = function (newLevel) { - if (newLevel) { - Object.keys(logLevel).forEach(function (key, index) { - if (!newLevel.includes(key.toLocaleUpperCase())) { - logLevel[key] = function () {}; - } - }); - } - }; + logLevel.setLogLevel = function (newLevel) { + if (newLevel) { + Object.keys(logLevel).forEach(function (key, index) { + if (!newLevel.includes(key.toLocaleUpperCase())) { + logLevel[key] = function () {}; + } + }); + } + }; + } else { + logLevel = { + debug: function () {}, + log: function () {}, + info: function () {}, + warn: function () {}, + error: function () {}, + group: function () {}, + groupCollapsed: function () {}, + groupEnd: function () {}, + time: function () {}, + timeEnd: function () {}, + timeStamp: function () {} + }; + } return logLevel; }); diff --git a/tests/unit/global_vars/defaults_modules_spec.js b/tests/unit/global_vars/defaults_modules_spec.js index 03879a86..490a2510 100644 --- a/tests/unit/global_vars/defaults_modules_spec.js +++ b/tests/unit/global_vars/defaults_modules_spec.js @@ -1,49 +1,14 @@ const fs = require("fs"); const path = require("path"); -const vm = require("vm"); -const basedir = path.join(__dirname, "../../.."); +const root_path = path.join(__dirname, "../../.."); describe("Default modules set in modules/default/defaultmodules.js", function () { - let sandbox = null; - - beforeAll(function () { - const fileName = "js/app.js"; - const filePath = path.join(basedir, fileName); - const code = fs.readFileSync(filePath); - - sandbox = { - module: {}, - __dirname: path.dirname(filePath), - global: {}, - process: { - on: function () {}, - env: {} - } - }; - - sandbox.require = function (filename) { - // This modifies the global slightly, - // but supplies vm with essential code - if (filename === "logger") { - return require("../mocks/logger.js"); - } else { - try { - return require(filename); - } catch (ignore) { - // ignore - } - } - }; - - vm.runInNewContext(code, sandbox, fileName); - }); - const expectedDefaultModules = require("../../../modules/default/defaultmodules"); for (const defaultModule of expectedDefaultModules) { it(`contains a folder for modules/default/${defaultModule}"`, function () { - expect(fs.existsSync(path.join(sandbox.global.root_path, "modules/default", defaultModule))).toBe(true); + expect(fs.existsSync(path.join(root_path, "modules/default", defaultModule))).toBe(true); }); } }); diff --git a/tests/unit/global_vars/root_path_spec.js b/tests/unit/global_vars/root_path_spec.js index 9dfc3f30..1f86082b 100644 --- a/tests/unit/global_vars/root_path_spec.js +++ b/tests/unit/global_vars/root_path_spec.js @@ -1,49 +1,15 @@ const fs = require("fs"); const path = require("path"); -const vm = require("vm"); + +const root_path = path.join(__dirname, "../../.."); +const version = require(`${__dirname}/../../../package.json`).version; describe("'global.root_path' set in js/app.js", function () { - let sandbox = null; - - beforeAll(function () { - const basedir = path.join(__dirname, "../../.."); - - const fileName = "js/app.js"; - const filePath = path.join(basedir, fileName); - const code = fs.readFileSync(filePath); - - sandbox = { - module: {}, - __dirname: path.dirname(filePath), - global: {}, - process: { - on: function () {}, - env: {} - } - }; - - sandbox.require = function (filename) { - // This modifies the global slightly, - // but supplies vm with essential code - if (filename === "logger") { - return require("../mocks/logger.js"); - } else { - try { - return require(filename); - } catch (ignore) { - // ignore - } - } - }; - - vm.runInNewContext(code, sandbox, fileName); - }); - const expectedSubPaths = ["modules", "serveronly", "js", "js/app.js", "js/main.js", "js/electron.js", "config"]; expectedSubPaths.forEach((subpath) => { it(`contains a file/folder "${subpath}"`, function () { - expect(fs.existsSync(path.join(sandbox.global.root_path, subpath))).toBe(true); + expect(fs.existsSync(path.join(root_path, subpath))).toBe(true); }); }); @@ -57,6 +23,6 @@ describe("'global.root_path' set in js/app.js", function () { it("should expect the global.version equals package.json file", function () { const versionPackage = JSON.parse(fs.readFileSync("package.json", "utf8")).version; - expect(sandbox.global.version).toBe(versionPackage); + expect(version).toBe(versionPackage); }); }); diff --git a/tests/unit/mocks/logger.js b/tests/unit/mocks/logger.js deleted file mode 100644 index 56b5b123..00000000 --- a/tests/unit/mocks/logger.js +++ /dev/null @@ -1,20 +0,0 @@ -(function (root, factory) { - // Node, CommonJS-like - module.exports = factory(root.config); -})(this, function (config) { - let logLevel = { - debug: function () {}, - log: function () {}, - info: function () {}, - warn: function () {}, - error: function () {}, - group: function () {}, - groupCollapsed: function () {}, - groupEnd: function () {}, - time: function () {}, - timeEnd: function () {}, - timeStamp: function () {} - }; - - return logLevel; -}); From 3ea6544f773a590733fa75a7526103f66a4d5f4b Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 9 Sep 2021 21:12:55 +0200 Subject: [PATCH 091/134] remove logger special --- modules/default/updatenotification/git_helper.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/modules/default/updatenotification/git_helper.js b/modules/default/updatenotification/git_helper.js index fbba6315..6bda7337 100644 --- a/modules/default/updatenotification/git_helper.js +++ b/modules/default/updatenotification/git_helper.js @@ -2,17 +2,12 @@ const util = require("util"); const exec = util.promisify(require("child_process").exec); const fs = require("fs"); const path = require("path"); +const Log = require("logger"); class gitHelper { constructor() { this.gitRepos = []; this.baseDir = path.normalize(__dirname + "/../../../"); - if (process.env.JEST_WORKER_ID === undefined) { - this.Log = require("logger"); - } else { - // if we are running with jest - this.Log = require("../../../tests/unit/mocks/logger.js"); - } } getRefRegex(branch) { @@ -31,7 +26,7 @@ class gitHelper { async isGitRepo(moduleFolder) { let res = await this.execShell("cd " + moduleFolder + " && git remote -v"); if (res.stderr) { - this.Log.error("Failed to fetch git data for " + moduleFolder + ": " + res.stderr); + Log.error("Failed to fetch git data for " + moduleFolder + ": " + res.stderr); return false; } else { return true; @@ -44,7 +39,7 @@ class gitHelper { moduleFolder = moduleFolder + "modules/" + moduleName; } try { - this.Log.info("Checking git for module: " + moduleName); + Log.info("Checking git for module: " + moduleName); // Throws error if file doesn't exist fs.statSync(path.join(moduleFolder, ".git")); // Fetch the git or throw error if no remotes @@ -76,13 +71,13 @@ class gitHelper { // the hash is only needed for the mm repo res = await this.execShell("cd " + repo.folder + " && git rev-parse HEAD"); if (res.stderr) { - this.Log.error("Failed to get current commit hash for " + repo.module + ": " + res.stderr); + Log.error("Failed to get current commit hash for " + repo.module + ": " + res.stderr); } gitInfo.hash = res.stdout; } res = await this.execShell("cd " + repo.folder + " && git status -sb"); if (res.stderr) { - this.Log.error("Failed to get git status for " + repo.module + ": " + res.stderr); + Log.error("Failed to get git status for " + repo.module + ": " + res.stderr); // exit without git status info return; } From 1dcda631923441dc0d07fc4375cfbe3b377c98bf Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 9 Sep 2021 21:17:16 +0200 Subject: [PATCH 092/134] add logger.js to jests moduleNameMapper --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index aa80ffc6..65c15ac6 100644 --- a/package.json +++ b/package.json @@ -96,6 +96,9 @@ "projects": [ { "displayName": "unit", + "moduleNameMapper": { + "logger": "/js/logger.js" + }, "testMatch": [ "**/tests/unit/**/*.[jt]s?(x)" ], From eb63745664a0825d45c943f64b7056305090f5f7 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 9 Sep 2021 21:29:28 +0200 Subject: [PATCH 093/134] update tests in updatenotification_spec.js due to problems after merging PR's --- CHANGELOG.md | 1 + tests/unit/functions/updatenotification_spec.js | 17 +---------------- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eda2b25e..dbee3b6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ _This release is scheduled to be released on 2021-10-01._ - Update weathergov provider to try fetching not just current, but also foreacst, when API URLs available. - Refactored clock layout. - Refactored methods from weatherproviders into weatherobject (isDaytime, updateSunTime). +- Use of `logger.js` in jest tests. ### Fixed diff --git a/tests/unit/functions/updatenotification_spec.js b/tests/unit/functions/updatenotification_spec.js index ff648177..91715c71 100644 --- a/tests/unit/functions/updatenotification_spec.js +++ b/tests/unit/functions/updatenotification_spec.js @@ -2,28 +2,13 @@ const path = require("path"); const git_Helper = require("../../../modules/default/updatenotification/git_helper.js"); const gitHelper = new git_Helper.gitHelper(); gitHelper.add("default"); -let branch = ""; describe("Updatenotification", function () { - // it is assumed that we are at the HEAD of a branch when running this tests - // and we have no foreign modules installed. - - it("should return 0 for repo count", async function () { - const arr = await gitHelper.getRepos(); - expect(arr.length).toBe(0); - }, 15000); - it("should return valid output for git status", async function () { const arr = await gitHelper.getStatus(); expect(arr.length).toBe(1); const gitInfo = arr[0]; - branch = gitInfo.current; expect(gitInfo.current).not.toBe(""); + expect(gitInfo.hash).not.toBe(""); }, 15000); - - it("should return no refs for git fetch", async function () { - const baseDir = path.normalize(__dirname + "/../../../"); - const res = await gitHelper.execShell("cd " + baseDir + " && git fetch --dry-run"); - expect(res.stderr.match(gitHelper.getRefRegex(branch))).toBe(null); - }); }); From 53c789bff946334eb94a996af61a11fca33afe8a Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 9 Sep 2021 21:49:10 +0200 Subject: [PATCH 094/134] again logger.js due to problem with e2e test --- js/logger.js | 53 +++++++++++++++++++++++++--------------------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/js/logger.js b/js/logger.js index 5b8040ac..5567e60a 100644 --- a/js/logger.js +++ b/js/logger.js @@ -9,13 +9,11 @@ */ (function (root, factory) { if (typeof exports === "object") { - if (process.env.JEST_WORKER_ID === undefined) { - // add timestamps in front of log messages - require("console-stamp")(console, { - pattern: "yyyy-mm-dd HH:MM:ss.l", - include: ["debug", "log", "info", "warn", "error"] - }); - } + // add timestamps in front of log messages + require("console-stamp")(console, { + pattern: "yyyy-mm-dd HH:MM:ss.l", + include: ["debug", "log", "info", "warn", "error"] + }); // Node, CommonJS-like module.exports = factory(root.config); @@ -39,31 +37,30 @@ timeEnd: Function.prototype.bind.call(console.timeEnd, console), timeStamp: Function.prototype.bind.call(console.timeStamp, console) }; - - logLevel.setLogLevel = function (newLevel) { - if (newLevel) { - Object.keys(logLevel).forEach(function (key, index) { - if (!newLevel.includes(key.toLocaleUpperCase())) { - logLevel[key] = function () {}; - } - }); - } - }; } else { logLevel = { - debug: function () {}, - log: function () {}, - info: function () {}, - warn: function () {}, - error: function () {}, - group: function () {}, - groupCollapsed: function () {}, - groupEnd: function () {}, - time: function () {}, - timeEnd: function () {}, - timeStamp: function () {} + debug: Function.prototype.bind.call(console.debug, console), + log: Function.prototype.bind.call(console.log, console), + info: Function.prototype.bind.call(console.info, console), + warn: Function.prototype.bind.call(console.warn, console), + error: Function.prototype.bind.call(console.error, console), + group: Function.prototype.bind.call(console.group, console), + groupCollapsed: Function.prototype.bind.call(console.groupCollapsed, console), + groupEnd: Function.prototype.bind.call(console.groupEnd, console), + time: Function.prototype.bind.call(console.time, console), + timeEnd: Function.prototype.bind.call(console.timeEnd, console) }; } + logLevel.setLogLevel = function (newLevel) { + if (newLevel) { + Object.keys(logLevel).forEach(function (key, index) { + if (!newLevel.includes(key.toLocaleUpperCase())) { + logLevel[key] = function () {}; + } + }); + } + }; + return logLevel; }); From d7c70dc021554c375146ec4f04ebce33cf5c7a7f Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 9 Sep 2021 23:30:36 +0200 Subject: [PATCH 095/134] fix logger.js --- js/logger.js | 43 +++++++++++++++---------------------------- 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/js/logger.js b/js/logger.js index 5567e60a..38185153 100644 --- a/js/logger.js +++ b/js/logger.js @@ -22,34 +22,21 @@ root.Log = factory(root.config); } })(this, function (config) { - let logLevel; - if (process.env.JEST_WORKER_ID === undefined) { - logLevel = { - debug: Function.prototype.bind.call(console.debug, console), - log: Function.prototype.bind.call(console.log, console), - info: Function.prototype.bind.call(console.info, console), - warn: Function.prototype.bind.call(console.warn, console), - error: Function.prototype.bind.call(console.error, console), - group: Function.prototype.bind.call(console.group, console), - groupCollapsed: Function.prototype.bind.call(console.groupCollapsed, console), - groupEnd: Function.prototype.bind.call(console.groupEnd, console), - time: Function.prototype.bind.call(console.time, console), - timeEnd: Function.prototype.bind.call(console.timeEnd, console), - timeStamp: Function.prototype.bind.call(console.timeStamp, console) - }; - } else { - logLevel = { - debug: Function.prototype.bind.call(console.debug, console), - log: Function.prototype.bind.call(console.log, console), - info: Function.prototype.bind.call(console.info, console), - warn: Function.prototype.bind.call(console.warn, console), - error: Function.prototype.bind.call(console.error, console), - group: Function.prototype.bind.call(console.group, console), - groupCollapsed: Function.prototype.bind.call(console.groupCollapsed, console), - groupEnd: Function.prototype.bind.call(console.groupEnd, console), - time: Function.prototype.bind.call(console.time, console), - timeEnd: Function.prototype.bind.call(console.timeEnd, console) - }; + let logLevel = { + debug: Function.prototype.bind.call(console.debug, console), + log: Function.prototype.bind.call(console.log, console), + info: Function.prototype.bind.call(console.info, console), + warn: Function.prototype.bind.call(console.warn, console), + error: Function.prototype.bind.call(console.error, console), + group: Function.prototype.bind.call(console.group, console), + groupCollapsed: Function.prototype.bind.call(console.groupCollapsed, console), + groupEnd: Function.prototype.bind.call(console.groupEnd, console), + time: Function.prototype.bind.call(console.time, console), + timeEnd: Function.prototype.bind.call(console.timeEnd, console) + }; + + if ((typeof exports === "object" && process.env.JEST_WORKER_ID === undefined) || typeof exports !== "object") { + logLevel.timeStamp = Function.prototype.bind.call(console.timeStamp, console); } logLevel.setLogLevel = function (newLevel) { From 8901ed219d8bf5728eceef1206750ed42949af79 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 9 Sep 2021 23:56:30 +0200 Subject: [PATCH 096/134] update dependencies --- package-lock.json | 40 ++++++++++++++++++++-------------------- package.json | 4 ++-- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8f95a5a4..5a1c3fb9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "iconv-lite": "^0.6.3", "module-alias": "^2.2.2", "moment": "^2.29.1", - "node-fetch": "^2.6.1", + "node-fetch": "^2.6.2", "node-ical": "^0.13.0", "socket.io": "^4.2.0" }, @@ -36,7 +36,7 @@ "jsdom": "^17.0.0", "lodash": "^4.17.21", "nyc": "^15.1.0", - "prettier": "^2.3.2", + "prettier": "^2.4.0", "pretty-quick": "^3.1.1", "sinon": "^11.1.2", "spectron": "^15.0.0", @@ -6948,9 +6948,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-aLoxToI6RfZ+0NOjmWAgn9+LEd30YCkJKFSyWacNZdEKTit/ZMcKjGkTRo8uWEsnIb/hfKecNPEbln02PdWbcA==", "engines": { "node": "4.x || >=6.0.0" } @@ -7741,9 +7741,9 @@ } }, "node_modules/prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz", + "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -8789,9 +8789,9 @@ } }, "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", @@ -15827,9 +15827,9 @@ } }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-aLoxToI6RfZ+0NOjmWAgn9+LEd30YCkJKFSyWacNZdEKTit/ZMcKjGkTRo8uWEsnIb/hfKecNPEbln02PdWbcA==" }, "node-ical": { "version": "0.13.0", @@ -16440,9 +16440,9 @@ "devOptional": true }, "prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz", + "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==", "dev": true }, "prettier-linter-helpers": { @@ -17243,9 +17243,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "requires": { "buffer-from": "^1.0.0", diff --git a/package.json b/package.json index 65c15ac6..92350f0c 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "jsdom": "^17.0.0", "lodash": "^4.17.21", "nyc": "^15.1.0", - "prettier": "^2.3.2", + "prettier": "^2.4.0", "pretty-quick": "^3.1.1", "sinon": "^11.1.2", "spectron": "^15.0.0", @@ -80,7 +80,7 @@ "iconv-lite": "^0.6.3", "module-alias": "^2.2.2", "moment": "^2.29.1", - "node-fetch": "^2.6.1", + "node-fetch": "^2.6.2", "node-ical": "^0.13.0", "socket.io": "^4.2.0" }, From 277055f44e0d420bcbfbb1a7f7b892b0dca5882c Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Fri, 10 Sep 2021 13:21:38 +0200 Subject: [PATCH 097/134] added tests for updatenotification --- CHANGELOG.md | 5 +- .../default/updatenotification/git_helper.js | 33 +++++- .../unit/functions/updatenotification_spec.js | 112 ++++++++++++++++++ 3 files changed, 142 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dbee3b6f..5a84bdf7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,8 +11,9 @@ _This release is scheduled to be released on 2021-10-01._ ### Added -- Added showTime parameter to clock module for enabling/disabling time display in analog clock -- Added custom electron switches from user config (`config.electronSwitches`) +- Added showTime parameter to clock module for enabling/disabling time display in analog clock. +- Added custom electron switches from user config (`config.electronSwitches`). +- Added unit tests for updatenotification module. ### Updated diff --git a/modules/default/updatenotification/git_helper.js b/modules/default/updatenotification/git_helper.js index 6bda7337..b165e7bc 100644 --- a/modules/default/updatenotification/git_helper.js +++ b/modules/default/updatenotification/git_helper.js @@ -75,7 +75,12 @@ class gitHelper { } gitInfo.hash = res.stdout; } - res = await this.execShell("cd " + repo.folder + " && git status -sb"); + if (repo.res) { + // mocking + res = repo.res; + } else { + res = await this.execShell("cd " + repo.folder + " && git status -sb"); + } if (res.stderr) { Log.error("Failed to get git status for " + repo.module + ": " + res.stderr); // exit without git status info @@ -105,14 +110,26 @@ class gitHelper { } async getRepoInfo(repo) { - let gitInfo = await this.getStatusInfo(repo); + let gitInfo; + if (repo.gitInfo) { + // mocking + gitInfo = repo.gitInfo; + } else { + gitInfo = await this.getStatusInfo(repo); + } if (!gitInfo) { return; } if (gitInfo.isBehindInStatus) { return gitInfo; } - let res = await this.execShell("cd " + repo.folder + " && git fetch --dry-run"); + let res; + if (repo.res) { + // mocking + res = repo.res; + } else { + res = await this.execShell("cd " + repo.folder + " && git fetch --dry-run"); + } // example output: // From https://github.com/MichMich/MagicMirror // e40ddd4..06389e3 develop -> origin/develop @@ -123,9 +140,13 @@ class gitHelper { return; } // get behind with refs - res = await this.execShell("cd " + repo.folder + " && git rev-list --ancestry-path --count " + matches[0]); - gitInfo.behind = parseInt(res.stdout); - return gitInfo; + try { + res = await this.execShell("cd " + repo.folder + " && git rev-list --ancestry-path --count " + matches[0]); + gitInfo.behind = parseInt(res.stdout); + return gitInfo; + } catch (err) { + Log.error("Failed to get git revisions for " + repo.module + ": " + err); + } } async getStatus() { diff --git a/tests/unit/functions/updatenotification_spec.js b/tests/unit/functions/updatenotification_spec.js index 91715c71..f6214c1a 100644 --- a/tests/unit/functions/updatenotification_spec.js +++ b/tests/unit/functions/updatenotification_spec.js @@ -3,6 +3,78 @@ const git_Helper = require("../../../modules/default/updatenotification/git_help const gitHelper = new git_Helper.gitHelper(); gitHelper.add("default"); +const test1 = { + module: "test1", + folder: "", + res: { + stdout: "## master...origin/master [behind 8]", + stderr: "" + }, + gitInfo: { + module: "default", + // commits behind: + behind: 0, + // branch name: + current: "develop", + // current hash: + hash: "", + // remote branch: + tracking: "", + isBehindInStatus: false + } +}; + +const test2 = { + module: "test2", + folder: "", + res: { + stdout: "## develop...origin/develop", + stderr: "" + } +}; + +const test3 = { + module: "test3", + folder: "", + res: { + stdout: "", + stderr: "error" + }, + gitInfo: { + module: "default", + // commits behind: + behind: 2, + // branch name: + current: "develop", + // current hash: + hash: "", + // remote branch: + tracking: "", + isBehindInStatus: true + } +}; + +const test4 = { + module: "default", + folder: path.join(__dirname, "../../.."), + res: { + stdout: "", + stderr: " e40ddd4..06389e3 develop -> origin/develop" + }, + gitInfo: { + module: "default", + // commits behind: + behind: 0, + // branch name: + current: "develop", + // current hash: + hash: "", + // remote branch: + tracking: "", + isBehindInStatus: false + } +}; + describe("Updatenotification", function () { it("should return valid output for git status", async function () { const arr = await gitHelper.getStatus(); @@ -11,4 +83,44 @@ describe("Updatenotification", function () { expect(gitInfo.current).not.toBe(""); expect(gitInfo.hash).not.toBe(""); }, 15000); + + it("should return behind=8 for test1", async function () { + const gitInfo = await gitHelper.getStatusInfo(test1); + expect(gitInfo.behind).toBe(8); + expect(gitInfo.isBehindInStatus).toBe(true); + }); + + it("should return behind=0 for test2", async function () { + const gitInfo = await gitHelper.getStatusInfo(test2); + expect(gitInfo.behind).toBe(0); + expect(gitInfo.isBehindInStatus).toBe(false); + }); + + it("should return empty status object for test3", async function () { + const gitInfo = await gitHelper.getStatusInfo(test3); + expect(gitInfo).toBe(undefined); + }); + + it("should return empty repo object for test2", async function () { + // no gitInfo provided in res, so returns undefined + const gitInfo = await gitHelper.getRepoInfo(test2); + expect(gitInfo).toBe(undefined); + }); + + it("should return empty repo object for test1", async function () { + // no regex match for refs in empty string, so returns undefined + const gitInfo = await gitHelper.getRepoInfo(test1); + expect(gitInfo).toBe(undefined); + }); + + it("should return empty repo object for test4", async function () { + // git ref list throws error, so returns undefined + const gitInfo = await gitHelper.getRepoInfo(test4); + expect(gitInfo).toBe(undefined); + }); + + it("should return behind=2 for test3", async function () { + const gitInfo = await gitHelper.getRepoInfo(test3); + expect(gitInfo.behind).toBe(2); + }); }); From 68e02a528e2e43772a11a3ee05106ffc5410a179 Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 11 Sep 2021 11:15:33 +0200 Subject: [PATCH 098/134] Dont ignore everything when running prettier --- .prettierignore | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.prettierignore b/.prettierignore index eeaa248d..89696a2a 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,8 +1,4 @@ -/config /coverage -/vendor -!/vendor/vendor.js -.github .nyc_output package-lock.json *.ts From 9a8de7db803c975e1ec6c80fe01d21a44e007595 Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 11 Sep 2021 11:16:09 +0200 Subject: [PATCH 099/134] Run prettier again --- .github/FUNDING.yml | 2 +- .github/ISSUE_TEMPLATE.md | 1 + .github/PULL_REQUEST_TEMPLATE.md | 23 +++++++-------- .github/workflows/codecov-test-suites.yml | 4 +-- .github/workflows/enforce-changelog.yml | 12 ++++---- .github/workflows/node-ci.js.yml | 34 ++++++++++----------- vendor/css/font-awesome.css | 2 +- vendor/package.json | 36 +++++++++++------------ 8 files changed, 56 insertions(+), 58 deletions(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index e31c82eb..933a40f7 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1,2 @@ github: MichMich -custom: ['https://magicmirror.builders/#donate'] \ No newline at end of file +custom: ["https://magicmirror.builders/#donate"] diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index d343534a..fd922dad 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -20,6 +20,7 @@ If you are facing an issue or found a bug while trying to install MagicMirror vi ## I found a bug in the MagicMirror Docker image If you are facing an issue or found a bug while running MagicMirror inside a Docker container please create an issue in the corresponding repository: + - karsten13/magicmirror: [https://gitlab.com/khassel/magicmirror](https://gitlab.com/khassel/magicmirror) - (deprecated) bastilimbach/docker-magicmirror: [https://github.com/bastilimbach/docker-MagicMirror](https://github.com/bastilimbach/docker-MagicMirror) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index bbb09f36..b1d5833f 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -2,23 +2,20 @@ Hello and thank you for wanting to contribute to the MagicMirror project **Please make sure that you have followed these 4 rules before submitting your Pull Request:** -> 1) Base your pull requests against the `develop` branch. +> 1. Base your pull requests against the `develop` branch. > +> 2. Include these infos in the description: > -> 2) Include these infos in the description: -> * Does the pull request solve a **related** issue? -> * If so, can you reference the issue like this `Fixes #`? -> * What does the pull request accomplish? Use a list if needed. -> * If it includes major visual changes please add screenshots. +> - Does the pull request solve a **related** issue? +> - If so, can you reference the issue like this `Fixes #`? +> - What does the pull request accomplish? Use a list if needed. +> - If it includes major visual changes please add screenshots. > +> 3. Please run `npm run lint:prettier` before submitting so that +> style issues are fixed. > -> 3) Please run `npm run lint:prettier` before submitting so that -> style issues are fixed. -> -> -> 4) Don't forget to add an entry about your changes to -> the CHANGELOG.md file. - +> 4. Don't forget to add an entry about your changes to +> the CHANGELOG.md file. **Note**: Sometimes the development moves very fast. It is highly recommended that you update your branch of `develop` before creating a diff --git a/.github/workflows/codecov-test-suites.yml b/.github/workflows/codecov-test-suites.yml index 1a6d4e0e..88b7574d 100644 --- a/.github/workflows/codecov-test-suites.yml +++ b/.github/workflows/codecov-test-suites.yml @@ -4,9 +4,9 @@ name: "Run Codecov Tests" on: push: - branches: [ master, develop ] + branches: [master, develop] pull_request: - branches: [ master, develop ] + branches: [master, develop] jobs: run-and-upload-coverage-report: diff --git a/.github/workflows/enforce-changelog.yml b/.github/workflows/enforce-changelog.yml index d4a5a994..a4f5d246 100644 --- a/.github/workflows/enforce-changelog.yml +++ b/.github/workflows/enforce-changelog.yml @@ -4,15 +4,15 @@ name: "Enforce Changelog" on: pull_request: - types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled] + types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled] jobs: check: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v2 - - uses: dangoslen/changelog-enforcer@v1.6.1 - with: - changeLogPath: 'CHANGELOG.md' - skipLabels: 'Skip Changelog' + - uses: actions/checkout@v2 + - uses: dangoslen/changelog-enforcer@v1.6.1 + with: + changeLogPath: "CHANGELOG.md" + skipLabels: "Skip Changelog" diff --git a/.github/workflows/node-ci.js.yml b/.github/workflows/node-ci.js.yml index 2a8fa086..55767496 100644 --- a/.github/workflows/node-ci.js.yml +++ b/.github/workflows/node-ci.js.yml @@ -5,9 +5,9 @@ name: "Run Automated Tests" on: push: - branches: [ master, develop ] + branches: [master, develop] pull_request: - branches: [ master, develop ] + branches: [master, develop] jobs: test: @@ -17,18 +17,18 @@ jobs: matrix: node-version: [12.x, 14.x, 16.8] steps: - - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - run: | - node -v - Xvfb :99 -screen 0 1024x768x16 & - export DISPLAY=:99 - npm install - npm run test:prettier - npm run test:js - npm run test:css - npm run test:unit - npm run test:e2e + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: | + node -v + Xvfb :99 -screen 0 1024x768x16 & + export DISPLAY=:99 + npm install + npm run test:prettier + npm run test:js + npm run test:css + npm run test:unit + npm run test:e2e diff --git a/vendor/css/font-awesome.css b/vendor/css/font-awesome.css index 2ba4a708..0c52aa67 100644 --- a/vendor/css/font-awesome.css +++ b/vendor/css/font-awesome.css @@ -1,2 +1,2 @@ @import url("../node_modules/@fortawesome/fontawesome-free/css/all.min.css"); -@import url("../node_modules/@fortawesome/fontawesome-free/css/v4-shims.min.css"); \ No newline at end of file +@import url("../node_modules/@fortawesome/fontawesome-free/css/v4-shims.min.css"); diff --git a/vendor/package.json b/vendor/package.json index 570d33d7..3b0c802b 100755 --- a/vendor/package.json +++ b/vendor/package.json @@ -1,20 +1,20 @@ { - "name": "magicmirror-vendors", - "description": "Package for vendors use by MagicMirror Core.", - "repository": { - "type": "git", - "url": "git+https://github.com/MichMich/MagicMirror.git" - }, - "license": "MIT", - "bugs": { - "url": "https://github.com/MichMich/MagicMirror/issues" - }, - "dependencies": { - "@fortawesome/fontawesome-free": "^5.15.4", - "moment": "^2.29.1", - "moment-timezone": "^0.5.33", - "nunjucks": "^3.2.3", - "suncalc": "^1.8.0", - "weathericons": "^2.1.0" - } + "name": "magicmirror-vendors", + "description": "Package for vendors use by MagicMirror Core.", + "repository": { + "type": "git", + "url": "git+https://github.com/MichMich/MagicMirror.git" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/MichMich/MagicMirror/issues" + }, + "dependencies": { + "@fortawesome/fontawesome-free": "^5.15.4", + "moment": "^2.29.1", + "moment-timezone": "^0.5.33", + "nunjucks": "^3.2.3", + "suncalc": "^1.8.0", + "weathericons": "^2.1.0" + } } From 12457a87d4eab569010d4c3be4595559c9398cd7 Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 11 Sep 2021 11:17:12 +0200 Subject: [PATCH 100/134] Test on latest version of node 16 again --- .github/workflows/node-ci.js.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/node-ci.js.yml b/.github/workflows/node-ci.js.yml index 55767496..3178607d 100644 --- a/.github/workflows/node-ci.js.yml +++ b/.github/workflows/node-ci.js.yml @@ -15,7 +15,7 @@ jobs: timeout-minutes: 30 strategy: matrix: - node-version: [12.x, 14.x, 16.8] + node-version: [12.x, 14.x, 16.x] steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} From cf7fb1a3b93fc78c3bfb0fcc7b6d6cf4e9bc6c2b Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 11 Sep 2021 11:20:00 +0200 Subject: [PATCH 101/134] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dbee3b6f..a691a066 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ _This release is scheduled to be released on 2021-10-01._ - Refactored clock layout. - Refactored methods from weatherproviders into weatherobject (isDaytime, updateSunTime). - Use of `logger.js` in jest tests. +- Run prettier over all relevant files. ### Fixed From f3274977f5cdf5282d219d28f3bc9517cd56132b Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 11 Sep 2021 11:55:51 +0200 Subject: [PATCH 102/134] Ignore config dir --- .prettierignore | 2 +- config/config.js.sample | 3 ++- module-types.ts | 46 ++++++++++++++++++++--------------------- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/.prettierignore b/.prettierignore index 89696a2a..c092da9b 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,4 @@ +/config /coverage .nyc_output package-lock.json -*.ts diff --git a/config/config.js.sample b/config/config.js.sample index d02c74ef..2edef29b 100644 --- a/config/config.js.sample +++ b/config/config.js.sample @@ -57,7 +57,8 @@ let config = { calendars: [ { symbol: "calendar-check", - url: "webcal://www.calendarlabs.com/ical-calendar/ics/76/US_Holidays.ics" } + url: "webcal://www.calendarlabs.com/ical-calendar/ics/76/US_Holidays.ics" + } ] } }, diff --git a/module-types.ts b/module-types.ts index 3b8825eb..be1a2061 100644 --- a/module-types.ts +++ b/module-types.ts @@ -1,16 +1,16 @@ type ModuleProperties = { - defaults?: object, - start?(): void, - getHeader?(): string, - getTemplate?(): string, - getTemplateData?(): object, - notificationReceived?(notification: string, payload: any, sender: object): void, - socketNotificationReceived?(notification: string, payload: any): void, - suspend?(): void, - resume?(): void, - getDom?(): HTMLElement, - getStyles?(): string[], - [key: string]: any, + defaults?: object; + start?(): void; + getHeader?(): string; + getTemplate?(): string; + getTemplateData?(): object; + notificationReceived?(notification: string, payload: any, sender: object): void; + socketNotificationReceived?(notification: string, payload: any): void; + suspend?(): void; + resume?(): void; + getDom?(): HTMLElement; + getStyles?(): string[]; + [key: string]: any; }; export declare const Module: { @@ -18,14 +18,14 @@ export declare const Module: { }; export declare const Log: { - info(message?: any, ...optionalParams: any[]): void, - log(message?: any, ...optionalParams: any[]): void, - error(message?: any, ...optionalParams: any[]): void, - warn(message?: any, ...optionalParams: any[]): void, - group(groupTitle?: string, ...optionalParams: any[]): void, - groupCollapsed(groupTitle?: string, ...optionalParams: any[]): void, - groupEnd(): void, - time(timerName?: string): void, - timeEnd(timerName?: string): void, - timeStamp(timerName?: string): void, -}; \ No newline at end of file + info(message?: any, ...optionalParams: any[]): void; + log(message?: any, ...optionalParams: any[]): void; + error(message?: any, ...optionalParams: any[]): void; + warn(message?: any, ...optionalParams: any[]): void; + group(groupTitle?: string, ...optionalParams: any[]): void; + groupCollapsed(groupTitle?: string, ...optionalParams: any[]): void; + groupEnd(): void; + time(timerName?: string): void; + timeEnd(timerName?: string): void; + timeStamp(timerName?: string): void; +}; From 974de179e04b4a2c85e049a7c08a890d1038d836 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Mon, 13 Sep 2021 22:28:27 +0200 Subject: [PATCH 103/134] refactor tests in 3 categories unit, e2e and electron --- .github/workflows/node-ci.js.yml | 2 +- package.json | 20 ++++++++-- tests/e2e/env_spec.js | 37 +++-------------- tests/e2e/fonts.js | 16 ++------ tests/e2e/ipWhitelist_spec.js | 20 +++------- tests/e2e/port_config.js | 27 +++---------- tests/e2e/vendor_spec.js | 17 ++------ tests/{e2e => electron}/dev_console.js | 0 tests/electron/env_spec.js | 40 +++++++++++++++++++ tests/{e2e => electron}/global-setup.js | 0 tests/{e2e => electron}/modules/alert_spec.js | 0 .../modules}/basic-auth.js | 0 .../modules/calendar_spec.js | 2 +- .../modules/clock_es_spec.js | 0 tests/{e2e => electron}/modules/clock_spec.js | 0 .../modules/compliments_spec.js | 0 .../modules/helloworld_spec.js | 0 .../{e2e => electron}/modules/mocks/index.js | 0 .../modules/mocks/weather_current.js | 0 .../modules/mocks/weather_forecast.js | 0 .../modules/newsfeed_spec.js | 0 .../{e2e => electron}/modules/weather_spec.js | 0 .../{e2e => electron}/modules_display_spec.js | 0 .../modules_position_spec.js | 0 tests/{e2e => electron}/translations_spec.js | 0 tests/{e2e => electron}/without_modules.js | 0 26 files changed, 81 insertions(+), 100 deletions(-) rename tests/{e2e => electron}/dev_console.js (100%) create mode 100644 tests/electron/env_spec.js rename tests/{e2e => electron}/global-setup.js (100%) rename tests/{e2e => electron}/modules/alert_spec.js (100%) rename tests/{servers => electron/modules}/basic-auth.js (100%) rename tests/{e2e => electron}/modules/calendar_spec.js (98%) rename tests/{e2e => electron}/modules/clock_es_spec.js (100%) rename tests/{e2e => electron}/modules/clock_spec.js (100%) rename tests/{e2e => electron}/modules/compliments_spec.js (100%) rename tests/{e2e => electron}/modules/helloworld_spec.js (100%) rename tests/{e2e => electron}/modules/mocks/index.js (100%) rename tests/{e2e => electron}/modules/mocks/weather_current.js (100%) rename tests/{e2e => electron}/modules/mocks/weather_forecast.js (100%) rename tests/{e2e => electron}/modules/newsfeed_spec.js (100%) rename tests/{e2e => electron}/modules/weather_spec.js (100%) rename tests/{e2e => electron}/modules_display_spec.js (100%) rename tests/{e2e => electron}/modules_position_spec.js (100%) rename tests/{e2e => electron}/translations_spec.js (100%) rename tests/{e2e => electron}/without_modules.js (100%) diff --git a/.github/workflows/node-ci.js.yml b/.github/workflows/node-ci.js.yml index 3178607d..3a7391c2 100644 --- a/.github/workflows/node-ci.js.yml +++ b/.github/workflows/node-ci.js.yml @@ -23,7 +23,6 @@ jobs: with: node-version: ${{ matrix.node-version }} - run: | - node -v Xvfb :99 -screen 0 1024x768x16 & export DISPLAY=:99 npm install @@ -32,3 +31,4 @@ jobs: npm run test:css npm run test:unit npm run test:e2e + npm run test:electron diff --git a/package.json b/package.json index 92350f0c..8bda06d8 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "postinstall": "npm run install-fonts && echo \"MagicMirror installation finished successfully! \n\"", "test": "NODE_ENV=test jest -i --forceExit", "test:coverage": "NODE_ENV=test nyc --reporter=lcov --reporter=text jest -i --forceExit", + "test:electron": "NODE_ENV=test jest --selectProjects electron -i --forceExit", "test:e2e": "NODE_ENV=test jest --selectProjects e2e -i --forceExit", "test:unit": "NODE_ENV=test jest --selectProjects unit -i --forceExit", "test:prettier": "prettier . --check", @@ -106,15 +107,26 @@ "/tests/unit/mocks" ] }, + { + "displayName": "electron", + "testMatch": [ + "**/tests/electron/**/*.[jt]s?(x)" + ], + "testPathIgnorePatterns": [ + "/tests/electron/modules/mocks", + "/tests/electron/global-setup.js", + "/tests/electron/modules/basic-auth.js" + ] + }, { "displayName": "e2e", "testMatch": [ "**/tests/e2e/**/*.[jt]s?(x)" ], - "testPathIgnorePatterns": [ - "/tests/e2e/modules/mocks", - "/tests/e2e/global-setup.js" - ] + "moduleNameMapper": { + "logger": "/js/logger.js", + "node_helper": "/js/node_helper.js" + } } ] } diff --git a/tests/e2e/env_spec.js b/tests/e2e/env_spec.js index 706274a2..28a0294b 100644 --- a/tests/e2e/env_spec.js +++ b/tests/e2e/env_spec.js @@ -1,42 +1,15 @@ -const helpers = require("./global-setup"); const fetch = require("node-fetch"); +const app = require("../../js/app.js"); describe("Electron app environment", function () { - helpers.setupTimeout(this); - - let app = null; - beforeAll(function () { - // Set config sample for use in test process.env.MM_CONFIG_FILE = "tests/configs/env.js"; + + app.start(); }); - beforeEach(function () { - return helpers - .startApplication({ - args: ["js/electron.js"] - }) - .then(function (startedApp) { - app = startedApp; - }); - }); - - afterEach(function () { - return helpers.stopApplication(app); - }); - - it("should open a browserwindow", async function () { - await app.client.waitUntilWindowLoaded(); - app.browserWindow.focus(); - expect(await app.client.getWindowCount()).toBe(1); - expect(await app.browserWindow.isMinimized()).toBe(false); - expect(await app.browserWindow.isDevToolsOpened()).toBe(false); - expect(await app.browserWindow.isVisible()).toBe(true); - expect(await app.browserWindow.isFocused()).toBe(true); - const bounds = await app.browserWindow.getBounds(); - expect(bounds.width).toBeGreaterThan(0); - expect(bounds.height).toBeGreaterThan(0); - expect(await app.browserWindow.getTitle()).toBe("MagicMirror²"); + afterAll(function () { + app.stop(); }); it("get request from http://localhost:8080 should return 200", function (done) { diff --git a/tests/e2e/fonts.js b/tests/e2e/fonts.js index b1459294..d8b8e0a7 100644 --- a/tests/e2e/fonts.js +++ b/tests/e2e/fonts.js @@ -1,10 +1,7 @@ -const helpers = require("./global-setup"); const fetch = require("node-fetch"); +const app = require("../../js/app.js"); describe("All font files from roboto.css should be downloadable", function () { - helpers.setupTimeout(this); - - let app; const fontFiles = []; // Statements below filters out all 'url' lines in the CSS file const fileContent = require("fs").readFileSync(__dirname + "/../../fonts/roboto.css", "utf8"); @@ -18,20 +15,13 @@ describe("All font files from roboto.css should be downloadable", function () { } beforeAll(function () { - // Set config sample for use in test process.env.MM_CONFIG_FILE = "tests/configs/without_modules.js"; - return helpers - .startApplication({ - args: ["js/electron.js"] - }) - .then(function (startedApp) { - app = startedApp; - }); + app.start(); }); afterAll(function () { - return helpers.stopApplication(app); + app.stop(); }); test.each(fontFiles)("should return 200 HTTP code for file '%s'", (fontFile, done) => { diff --git a/tests/e2e/ipWhitelist_spec.js b/tests/e2e/ipWhitelist_spec.js index 3406e0e7..99bad61a 100644 --- a/tests/e2e/ipWhitelist_spec.js +++ b/tests/e2e/ipWhitelist_spec.js @@ -1,23 +1,13 @@ -const helpers = require("./global-setup"); const fetch = require("node-fetch"); +const app = require("../../js/app.js"); describe("ipWhitelist directive configuration", function () { - helpers.setupTimeout(this); - - let app = null; - - beforeEach(function () { - return helpers - .startApplication({ - args: ["js/electron.js"] - }) - .then(function (startedApp) { - app = startedApp; - }); + beforeAll(function () { + app.start(); }); - afterEach(function () { - return helpers.stopApplication(app); + afterAll(function () { + app.stop(); }); describe("Set ipWhitelist without access", function () { diff --git a/tests/e2e/port_config.js b/tests/e2e/port_config.js index da489414..7e960992 100644 --- a/tests/e2e/port_config.js +++ b/tests/e2e/port_config.js @@ -1,31 +1,18 @@ -const helpers = require("./global-setup"); const fetch = require("node-fetch"); +const app = require("../../js/app.js"); describe("port directive configuration", function () { - helpers.setupTimeout(this); + beforeAll(function () { + process.env.MM_CONFIG_FILE = "tests/configs/port_8090.js"; - let app = null; - - beforeEach(function () { - return helpers - .startApplication({ - args: ["js/electron.js"] - }) - .then(function (startedApp) { - app = startedApp; - }); + app.start(); }); - afterEach(function () { - return helpers.stopApplication(app); + afterAll(function () { + app.stop(); }); describe("Set port 8090", function () { - beforeAll(function () { - // Set config sample for use in this test - process.env.MM_CONFIG_FILE = "tests/configs/port_8090.js"; - }); - it("should return 200", function (done) { fetch("http://localhost:8090").then((res) => { expect(res.status).toBe(200); @@ -37,8 +24,6 @@ describe("port directive configuration", function () { describe("Set port 8100 on environment variable MM_PORT", function () { beforeAll(function () { process.env.MM_PORT = 8100; - // Set config sample for use in this test - process.env.MM_CONFIG_FILE = "tests/configs/port_8090.js"; }); afterAll(function () { diff --git a/tests/e2e/vendor_spec.js b/tests/e2e/vendor_spec.js index 9fcb9aeb..2b619dd0 100644 --- a/tests/e2e/vendor_spec.js +++ b/tests/e2e/vendor_spec.js @@ -1,24 +1,15 @@ -const helpers = require("./global-setup"); const fetch = require("node-fetch"); +const app = require("../../js/app.js"); describe("Vendors", function () { - helpers.setupTimeout(this); - - let app = null; - beforeAll(function () { process.env.MM_CONFIG_FILE = "tests/configs/env.js"; - return helpers - .startApplication({ - args: ["js/electron.js"] - }) - .then(function (startedApp) { - app = startedApp; - }); + + app.start(); }); afterAll(function () { - return helpers.stopApplication(app); + app.stop(); }); describe("Get list vendors", function () { diff --git a/tests/e2e/dev_console.js b/tests/electron/dev_console.js similarity index 100% rename from tests/e2e/dev_console.js rename to tests/electron/dev_console.js diff --git a/tests/electron/env_spec.js b/tests/electron/env_spec.js new file mode 100644 index 00000000..46efc719 --- /dev/null +++ b/tests/electron/env_spec.js @@ -0,0 +1,40 @@ +const helpers = require("./global-setup"); + +describe("Electron app environment", function () { + helpers.setupTimeout(this); + + let app = null; + + beforeAll(function () { + // Set config sample for use in test + process.env.MM_CONFIG_FILE = "tests/configs/env.js"; + }); + + beforeEach(function () { + return helpers + .startApplication({ + args: ["js/electron.js"] + }) + .then(function (startedApp) { + app = startedApp; + }); + }); + + afterEach(function () { + return helpers.stopApplication(app); + }); + + it("should open a browserwindow", async function () { + await app.client.waitUntilWindowLoaded(); + app.browserWindow.focus(); + expect(await app.client.getWindowCount()).toBe(1); + expect(await app.browserWindow.isMinimized()).toBe(false); + expect(await app.browserWindow.isDevToolsOpened()).toBe(false); + expect(await app.browserWindow.isVisible()).toBe(true); + expect(await app.browserWindow.isFocused()).toBe(true); + const bounds = await app.browserWindow.getBounds(); + expect(bounds.width).toBeGreaterThan(0); + expect(bounds.height).toBeGreaterThan(0); + expect(await app.browserWindow.getTitle()).toBe("MagicMirror²"); + }); +}); diff --git a/tests/e2e/global-setup.js b/tests/electron/global-setup.js similarity index 100% rename from tests/e2e/global-setup.js rename to tests/electron/global-setup.js diff --git a/tests/e2e/modules/alert_spec.js b/tests/electron/modules/alert_spec.js similarity index 100% rename from tests/e2e/modules/alert_spec.js rename to tests/electron/modules/alert_spec.js diff --git a/tests/servers/basic-auth.js b/tests/electron/modules/basic-auth.js similarity index 100% rename from tests/servers/basic-auth.js rename to tests/electron/modules/basic-auth.js diff --git a/tests/e2e/modules/calendar_spec.js b/tests/electron/modules/calendar_spec.js similarity index 98% rename from tests/e2e/modules/calendar_spec.js rename to tests/electron/modules/calendar_spec.js index 980eca58..b6420e83 100644 --- a/tests/e2e/modules/calendar_spec.js +++ b/tests/electron/modules/calendar_spec.js @@ -1,5 +1,5 @@ const helpers = require("../global-setup"); -const serverBasicAuth = require("../../servers/basic-auth.js"); +const serverBasicAuth = require("./basic-auth.js"); describe("Calendar module", function () { helpers.setupTimeout(this); diff --git a/tests/e2e/modules/clock_es_spec.js b/tests/electron/modules/clock_es_spec.js similarity index 100% rename from tests/e2e/modules/clock_es_spec.js rename to tests/electron/modules/clock_es_spec.js diff --git a/tests/e2e/modules/clock_spec.js b/tests/electron/modules/clock_spec.js similarity index 100% rename from tests/e2e/modules/clock_spec.js rename to tests/electron/modules/clock_spec.js diff --git a/tests/e2e/modules/compliments_spec.js b/tests/electron/modules/compliments_spec.js similarity index 100% rename from tests/e2e/modules/compliments_spec.js rename to tests/electron/modules/compliments_spec.js diff --git a/tests/e2e/modules/helloworld_spec.js b/tests/electron/modules/helloworld_spec.js similarity index 100% rename from tests/e2e/modules/helloworld_spec.js rename to tests/electron/modules/helloworld_spec.js diff --git a/tests/e2e/modules/mocks/index.js b/tests/electron/modules/mocks/index.js similarity index 100% rename from tests/e2e/modules/mocks/index.js rename to tests/electron/modules/mocks/index.js diff --git a/tests/e2e/modules/mocks/weather_current.js b/tests/electron/modules/mocks/weather_current.js similarity index 100% rename from tests/e2e/modules/mocks/weather_current.js rename to tests/electron/modules/mocks/weather_current.js diff --git a/tests/e2e/modules/mocks/weather_forecast.js b/tests/electron/modules/mocks/weather_forecast.js similarity index 100% rename from tests/e2e/modules/mocks/weather_forecast.js rename to tests/electron/modules/mocks/weather_forecast.js diff --git a/tests/e2e/modules/newsfeed_spec.js b/tests/electron/modules/newsfeed_spec.js similarity index 100% rename from tests/e2e/modules/newsfeed_spec.js rename to tests/electron/modules/newsfeed_spec.js diff --git a/tests/e2e/modules/weather_spec.js b/tests/electron/modules/weather_spec.js similarity index 100% rename from tests/e2e/modules/weather_spec.js rename to tests/electron/modules/weather_spec.js diff --git a/tests/e2e/modules_display_spec.js b/tests/electron/modules_display_spec.js similarity index 100% rename from tests/e2e/modules_display_spec.js rename to tests/electron/modules_display_spec.js diff --git a/tests/e2e/modules_position_spec.js b/tests/electron/modules_position_spec.js similarity index 100% rename from tests/e2e/modules_position_spec.js rename to tests/electron/modules_position_spec.js diff --git a/tests/e2e/translations_spec.js b/tests/electron/translations_spec.js similarity index 100% rename from tests/e2e/translations_spec.js rename to tests/electron/translations_spec.js diff --git a/tests/e2e/without_modules.js b/tests/electron/without_modules.js similarity index 100% rename from tests/e2e/without_modules.js rename to tests/electron/without_modules.js From 236bf6e0fc543cb7ce0691d420e54a69f4dd12e5 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Mon, 13 Sep 2021 23:55:41 +0200 Subject: [PATCH 104/134] silence logger for tests, use modulePaths for e2e --- js/logger.js | 61 ++++++++++++++++++++++------------- package.json | 7 ++-- tests/e2e/env_spec.js | 2 +- tests/e2e/fonts.js | 2 +- tests/e2e/ipWhitelist_spec.js | 2 +- tests/e2e/port_config.js | 2 +- tests/e2e/vendor_spec.js | 2 +- 7 files changed, 47 insertions(+), 31 deletions(-) diff --git a/js/logger.js b/js/logger.js index 38185153..7ea12a79 100644 --- a/js/logger.js +++ b/js/logger.js @@ -9,12 +9,13 @@ */ (function (root, factory) { if (typeof exports === "object") { - // add timestamps in front of log messages - require("console-stamp")(console, { - pattern: "yyyy-mm-dd HH:MM:ss.l", - include: ["debug", "log", "info", "warn", "error"] - }); - + if (process.env.JEST_WORKER_ID === undefined) { + // add timestamps in front of log messages + require("console-stamp")(console, { + pattern: "yyyy-mm-dd HH:MM:ss.l", + include: ["debug", "log", "info", "warn", "error"] + }); + } // Node, CommonJS-like module.exports = factory(root.config); } else { @@ -22,7 +23,9 @@ root.Log = factory(root.config); } })(this, function (config) { - let logLevel = { + let logLevel; + if ((typeof exports === "object" && process.env.JEST_WORKER_ID === undefined) || typeof exports !== "object") { + logLevel = { debug: Function.prototype.bind.call(console.debug, console), log: Function.prototype.bind.call(console.log, console), info: Function.prototype.bind.call(console.info, console), @@ -32,22 +35,36 @@ groupCollapsed: Function.prototype.bind.call(console.groupCollapsed, console), groupEnd: Function.prototype.bind.call(console.groupEnd, console), time: Function.prototype.bind.call(console.time, console), - timeEnd: Function.prototype.bind.call(console.timeEnd, console) - }; - - if ((typeof exports === "object" && process.env.JEST_WORKER_ID === undefined) || typeof exports !== "object") { - logLevel.timeStamp = Function.prototype.bind.call(console.timeStamp, console); - } - - logLevel.setLogLevel = function (newLevel) { - if (newLevel) { - Object.keys(logLevel).forEach(function (key, index) { - if (!newLevel.includes(key.toLocaleUpperCase())) { - logLevel[key] = function () {}; - } - }); + timeEnd: Function.prototype.bind.call(console.timeEnd, console), + timeStamp: Function.prototype.bind.call(console.timeStamp, console) } - }; + + logLevel.setLogLevel = function (newLevel) { + if (newLevel) { + Object.keys(logLevel).forEach(function (key, index) { + if (!newLevel.includes(key.toLocaleUpperCase())) { + logLevel[key] = function () {}; + } + }); + } + }; + } else { + logLevel = { + debug: function () {}, + log: function () {}, + info: function () {}, + warn: function () {}, + error: function () {}, + group: function () {}, + groupCollapsed: function () {}, + groupEnd: function () {}, + time: function () {}, + timeEnd: function () {}, + timeStamp: function () {} + }; + + logLevel.setLogLevel = function () {}; + } return logLevel; }); diff --git a/package.json b/package.json index 8bda06d8..e48f96f0 100644 --- a/package.json +++ b/package.json @@ -123,10 +123,9 @@ "testMatch": [ "**/tests/e2e/**/*.[jt]s?(x)" ], - "moduleNameMapper": { - "logger": "/js/logger.js", - "node_helper": "/js/node_helper.js" - } + "modulePaths": [ + "/js/" + ] } ] } diff --git a/tests/e2e/env_spec.js b/tests/e2e/env_spec.js index 28a0294b..91e6564a 100644 --- a/tests/e2e/env_spec.js +++ b/tests/e2e/env_spec.js @@ -1,5 +1,5 @@ const fetch = require("node-fetch"); -const app = require("../../js/app.js"); +const app = require("app.js"); describe("Electron app environment", function () { beforeAll(function () { diff --git a/tests/e2e/fonts.js b/tests/e2e/fonts.js index d8b8e0a7..81327a87 100644 --- a/tests/e2e/fonts.js +++ b/tests/e2e/fonts.js @@ -1,5 +1,5 @@ const fetch = require("node-fetch"); -const app = require("../../js/app.js"); +const app = require("app.js"); describe("All font files from roboto.css should be downloadable", function () { const fontFiles = []; diff --git a/tests/e2e/ipWhitelist_spec.js b/tests/e2e/ipWhitelist_spec.js index 99bad61a..5f90274c 100644 --- a/tests/e2e/ipWhitelist_spec.js +++ b/tests/e2e/ipWhitelist_spec.js @@ -1,5 +1,5 @@ const fetch = require("node-fetch"); -const app = require("../../js/app.js"); +const app = require("app.js"); describe("ipWhitelist directive configuration", function () { beforeAll(function () { diff --git a/tests/e2e/port_config.js b/tests/e2e/port_config.js index 7e960992..3e50d347 100644 --- a/tests/e2e/port_config.js +++ b/tests/e2e/port_config.js @@ -1,5 +1,5 @@ const fetch = require("node-fetch"); -const app = require("../../js/app.js"); +const app = require("app.js"); describe("port directive configuration", function () { beforeAll(function () { diff --git a/tests/e2e/vendor_spec.js b/tests/e2e/vendor_spec.js index 2b619dd0..1aef4de7 100644 --- a/tests/e2e/vendor_spec.js +++ b/tests/e2e/vendor_spec.js @@ -1,5 +1,5 @@ const fetch = require("node-fetch"); -const app = require("../../js/app.js"); +const app = require("app.js"); describe("Vendors", function () { beforeAll(function () { From a3a6c33b32f14dc1192caa6a27ca2d729068a692 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Mon, 13 Sep 2021 23:57:18 +0200 Subject: [PATCH 105/134] move translations_spec to e2e --- tests/{electron => e2e}/translations_spec.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tests/{electron => e2e}/translations_spec.js (100%) diff --git a/tests/electron/translations_spec.js b/tests/e2e/translations_spec.js similarity index 100% rename from tests/electron/translations_spec.js rename to tests/e2e/translations_spec.js From c15b31b374d172d99f729b174a84e7ed6f30fecc Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Wed, 15 Sep 2021 21:09:31 +0200 Subject: [PATCH 106/134] close server --- js/app.js | 4 +++- js/server.js | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/js/app.js b/js/app.js index 6315370b..9ead45b2 100644 --- a/js/app.js +++ b/js/app.js @@ -48,6 +48,7 @@ process.on("uncaughtException", function (err) { */ function App() { let nodeHelpers = []; + let httpServer; /** * Loads the config file. Combines it with the defaults, and runs the @@ -222,7 +223,7 @@ function App() { } loadModules(modules, function () { - const server = new Server(config, function (app, io) { + httpServer = new Server(config, function (app, io) { Log.log("Server started ..."); for (let nodeHelper of nodeHelpers) { @@ -253,6 +254,7 @@ function App() { nodeHelper.stop(); } } + httpServer.close(); }; /** diff --git a/js/server.js b/js/server.js index 5ce9435d..8db8b48c 100644 --- a/js/server.js +++ b/js/server.js @@ -92,6 +92,11 @@ function Server(config, callback) { if (typeof callback === "function") { callback(app, io); } + + this.close = function () { + server.close(); + } + } module.exports = Server; From 9969fede353c2a95956c02aba9a97af42a9dbb52 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 16 Sep 2021 22:36:18 +0200 Subject: [PATCH 107/134] refactor e2e --- js/logger.js | 24 ++++++++++++------------ js/server.js | 3 +-- package.json | 3 +++ tests/e2e/env_spec.js | 10 ++++------ tests/e2e/fonts.js | 10 ++++------ tests/e2e/global-setup.js | 16 ++++++++++++++++ tests/e2e/ipWhitelist_spec.js | 23 ++++++++++------------- tests/e2e/port_config.js | 25 +++++++++++-------------- tests/e2e/vendor_spec.js | 10 ++++------ 9 files changed, 65 insertions(+), 59 deletions(-) create mode 100644 tests/e2e/global-setup.js diff --git a/js/logger.js b/js/logger.js index 7ea12a79..d469e702 100644 --- a/js/logger.js +++ b/js/logger.js @@ -26,18 +26,18 @@ let logLevel; if ((typeof exports === "object" && process.env.JEST_WORKER_ID === undefined) || typeof exports !== "object") { logLevel = { - debug: Function.prototype.bind.call(console.debug, console), - log: Function.prototype.bind.call(console.log, console), - info: Function.prototype.bind.call(console.info, console), - warn: Function.prototype.bind.call(console.warn, console), - error: Function.prototype.bind.call(console.error, console), - group: Function.prototype.bind.call(console.group, console), - groupCollapsed: Function.prototype.bind.call(console.groupCollapsed, console), - groupEnd: Function.prototype.bind.call(console.groupEnd, console), - time: Function.prototype.bind.call(console.time, console), - timeEnd: Function.prototype.bind.call(console.timeEnd, console), - timeStamp: Function.prototype.bind.call(console.timeStamp, console) - } + debug: Function.prototype.bind.call(console.debug, console), + log: Function.prototype.bind.call(console.log, console), + info: Function.prototype.bind.call(console.info, console), + warn: Function.prototype.bind.call(console.warn, console), + error: Function.prototype.bind.call(console.error, console), + group: Function.prototype.bind.call(console.group, console), + groupCollapsed: Function.prototype.bind.call(console.groupCollapsed, console), + groupEnd: Function.prototype.bind.call(console.groupEnd, console), + time: Function.prototype.bind.call(console.time, console), + timeEnd: Function.prototype.bind.call(console.timeEnd, console), + timeStamp: Function.prototype.bind.call(console.timeStamp, console) + }; logLevel.setLogLevel = function (newLevel) { if (newLevel) { diff --git a/js/server.js b/js/server.js index 8db8b48c..35071091 100644 --- a/js/server.js +++ b/js/server.js @@ -95,8 +95,7 @@ function Server(config, callback) { this.close = function () { server.close(); - } - + }; } module.exports = Server; diff --git a/package.json b/package.json index e48f96f0..833010d1 100644 --- a/package.json +++ b/package.json @@ -125,6 +125,9 @@ ], "modulePaths": [ "/js/" + ], + "testPathIgnorePatterns": [ + "/tests/e2e/global-setup.js" ] } ] diff --git a/tests/e2e/env_spec.js b/tests/e2e/env_spec.js index 91e6564a..825da0e6 100644 --- a/tests/e2e/env_spec.js +++ b/tests/e2e/env_spec.js @@ -1,15 +1,13 @@ const fetch = require("node-fetch"); -const app = require("app.js"); +const helpers = require("./global-setup"); +let app = null; describe("Electron app environment", function () { beforeAll(function () { - process.env.MM_CONFIG_FILE = "tests/configs/env.js"; - - app.start(); + app = helpers.startApplication("tests/configs/env.js"); }); - afterAll(function () { - app.stop(); + helpers.stopApplication(app); }); it("get request from http://localhost:8080 should return 200", function (done) { diff --git a/tests/e2e/fonts.js b/tests/e2e/fonts.js index 81327a87..105b9977 100644 --- a/tests/e2e/fonts.js +++ b/tests/e2e/fonts.js @@ -1,5 +1,6 @@ const fetch = require("node-fetch"); -const app = require("app.js"); +const helpers = require("./global-setup"); +let app = null; describe("All font files from roboto.css should be downloadable", function () { const fontFiles = []; @@ -15,13 +16,10 @@ describe("All font files from roboto.css should be downloadable", function () { } beforeAll(function () { - process.env.MM_CONFIG_FILE = "tests/configs/without_modules.js"; - - app.start(); + app = helpers.startApplication("tests/configs/without_modules.js"); }); - afterAll(function () { - app.stop(); + helpers.stopApplication(app); }); test.each(fontFiles)("should return 200 HTTP code for file '%s'", (fontFile, done) => { diff --git a/tests/e2e/global-setup.js b/tests/e2e/global-setup.js new file mode 100644 index 00000000..1f9bce3b --- /dev/null +++ b/tests/e2e/global-setup.js @@ -0,0 +1,16 @@ +exports.startApplication = function (configFilename, exec) { + jest.resetModules(); + // Set config sample for use in test + process.env.MM_CONFIG_FILE = configFilename; + if (exec) exec; + const app = require("app.js"); + app.start(); + + return app; +}; + +exports.stopApplication = function (app) { + if (app) { + app.stop(); + } +}; diff --git a/tests/e2e/ipWhitelist_spec.js b/tests/e2e/ipWhitelist_spec.js index 5f90274c..eba92a3e 100644 --- a/tests/e2e/ipWhitelist_spec.js +++ b/tests/e2e/ipWhitelist_spec.js @@ -1,19 +1,14 @@ const fetch = require("node-fetch"); -const app = require("app.js"); +const helpers = require("./global-setup"); +let app = null; describe("ipWhitelist directive configuration", function () { - beforeAll(function () { - app.start(); - }); - - afterAll(function () { - app.stop(); - }); - describe("Set ipWhitelist without access", function () { beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/noIpWhiteList.js"; + app = helpers.startApplication("tests/configs/noIpWhiteList.js"); + }); + afterAll(function () { + helpers.stopApplication(app); }); it("should return 403", function (done) { @@ -26,8 +21,10 @@ describe("ipWhitelist directive configuration", function () { describe("Set ipWhitelist []", function () { beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/empty_ipWhiteList.js"; + app = helpers.startApplication("tests/configs/empty_ipWhiteList.js"); + }); + afterAll(function () { + helpers.stopApplication(app); }); it("should return 200", function (done) { diff --git a/tests/e2e/port_config.js b/tests/e2e/port_config.js index 3e50d347..6f6756a4 100644 --- a/tests/e2e/port_config.js +++ b/tests/e2e/port_config.js @@ -1,18 +1,16 @@ const fetch = require("node-fetch"); -const app = require("app.js"); +const helpers = require("./global-setup"); +let app = null; describe("port directive configuration", function () { - beforeAll(function () { - process.env.MM_CONFIG_FILE = "tests/configs/port_8090.js"; - - app.start(); - }); - - afterAll(function () { - app.stop(); - }); - describe("Set port 8090", function () { + beforeAll(function () { + app = helpers.startApplication("tests/configs/port_8090.js"); + }); + afterAll(function () { + helpers.stopApplication(app); + }); + it("should return 200", function (done) { fetch("http://localhost:8090").then((res) => { expect(res.status).toBe(200); @@ -23,11 +21,10 @@ describe("port directive configuration", function () { describe("Set port 8100 on environment variable MM_PORT", function () { beforeAll(function () { - process.env.MM_PORT = 8100; + app = helpers.startApplication("tests/configs/port_8090.js", (process.env.MM_PORT = 8100)); }); - afterAll(function () { - delete process.env.MM_PORT; + helpers.stopApplication(app); }); it("should return 200", function (done) { diff --git a/tests/e2e/vendor_spec.js b/tests/e2e/vendor_spec.js index 1aef4de7..e8dcde11 100644 --- a/tests/e2e/vendor_spec.js +++ b/tests/e2e/vendor_spec.js @@ -1,15 +1,13 @@ const fetch = require("node-fetch"); -const app = require("app.js"); +const helpers = require("./global-setup"); +let app = null; describe("Vendors", function () { beforeAll(function () { - process.env.MM_CONFIG_FILE = "tests/configs/env.js"; - - app.start(); + app = helpers.startApplication("tests/configs/env.js"); }); - afterAll(function () { - app.stop(); + helpers.stopApplication(app); }); describe("Get list vendors", function () { From 879d585f2e00a9e64b307d8f793268eff6b678c0 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 16 Sep 2021 23:16:38 +0200 Subject: [PATCH 108/134] update dependencies, add CHANGELOG --- CHANGELOG.md | 1 + package-lock.json | 1016 +++++++++++++++++++++++---------------------- package.json | 6 +- 3 files changed, 513 insertions(+), 510 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea963274..f8961cfd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ _This release is scheduled to be released on 2021-10-01._ - Refactored methods from weatherproviders into weatherobject (isDaytime, updateSunTime). - Use of `logger.js` in jest tests. - Run prettier over all relevant files. +- Move test needing electron in new category `electron`, use `server only` mode in `e2e` tests. ### Fixed diff --git a/package-lock.json b/package-lock.json index 5a1c3fb9..a46bed61 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,11 +32,11 @@ "eslint-plugin-prettier": "^4.0.0", "express-basic-auth": "^1.2.0", "husky": "^7.0.2", - "jest": "^27.1.1", + "jest": "^27.2.0", "jsdom": "^17.0.0", "lodash": "^4.17.21", "nyc": "^15.1.0", - "prettier": "^2.4.0", + "prettier": "^2.4.1", "pretty-quick": "^3.1.1", "sinon": "^11.1.2", "spectron": "^15.0.0", @@ -50,7 +50,7 @@ "node": ">=12" }, "optionalDependencies": { - "electron": "^13.3.0" + "electron": "^13.4.0" } }, "node_modules/@babel/code-frame": { @@ -788,16 +788,16 @@ } }, "node_modules/@jest/console": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.1.1.tgz", - "integrity": "sha512-VpQJRsWSeAem0zpBjeRtDbcD6DlbNoK11dNYt+PSQ+DDORh9q2/xyEpErfwgnLjWX0EKkSZmTGx/iH9Inzs6vQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.0.tgz", + "integrity": "sha512-35z+RqsK2CCgNxn+lWyK8X4KkaDtfL4BggT7oeZ0JffIiAiEYFYPo5B67V50ZubqDS1ehBrdCR2jduFnIrZOYw==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.1.1", - "jest-util": "^27.1.1", + "jest-message-util": "^27.2.0", + "jest-util": "^27.2.0", "slash": "^3.0.0" }, "engines": { @@ -805,15 +805,15 @@ } }, "node_modules/@jest/core": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.1.1.tgz", - "integrity": "sha512-oCkKeTgI0emznKcLoq5OCD0PhxCijA4l7ejDnWW3d5bgSi+zfVaLybVqa+EQOxpNejQWtTna7tmsAXjMN9N43Q==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.0.tgz", + "integrity": "sha512-E/2NHhq+VMo18DpKkoty8Sjey8Kps5Cqa88A8NP757s6JjYqPdioMuyUBhDiIOGCdQByEp0ou3jskkTszMS0nw==", "dev": true, "dependencies": { - "@jest/console": "^27.1.1", - "@jest/reporters": "^27.1.1", - "@jest/test-result": "^27.1.1", - "@jest/transform": "^27.1.1", + "@jest/console": "^27.2.0", + "@jest/reporters": "^27.2.0", + "@jest/test-result": "^27.2.0", + "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", @@ -822,18 +822,18 @@ "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-changed-files": "^27.1.1", - "jest-config": "^27.1.1", - "jest-haste-map": "^27.1.1", - "jest-message-util": "^27.1.1", + "jest-config": "^27.2.0", + "jest-haste-map": "^27.2.0", + "jest-message-util": "^27.2.0", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.1", - "jest-resolve-dependencies": "^27.1.1", - "jest-runner": "^27.1.1", - "jest-runtime": "^27.1.1", - "jest-snapshot": "^27.1.1", - "jest-util": "^27.1.1", - "jest-validate": "^27.1.1", - "jest-watcher": "^27.1.1", + "jest-resolve": "^27.2.0", + "jest-resolve-dependencies": "^27.2.0", + "jest-runner": "^27.2.0", + "jest-runtime": "^27.2.0", + "jest-snapshot": "^27.2.0", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", + "jest-watcher": "^27.2.0", "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", @@ -853,12 +853,12 @@ } }, "node_modules/@jest/environment": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.1.1.tgz", - "integrity": "sha512-+y882/ZdxhyqF5RzxIrNIANjHj991WH7jifdcplzMDosDUOyCACFYUyVTBGbSTocbU+s1cesroRzkwi8hZ9SHg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.0.tgz", + "integrity": "sha512-iPWmQI0wRIYSZX3wKu4FXHK4eIqkfq6n1DCDJS+v3uby7SOXrHvX4eiTBuEdSvtDRMTIH2kjrSkjHf/F9JIYyQ==", "dev": true, "dependencies": { - "@jest/fake-timers": "^27.1.1", + "@jest/fake-timers": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1" @@ -868,46 +868,46 @@ } }, "node_modules/@jest/fake-timers": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.1.1.tgz", - "integrity": "sha512-u8TJ5VlsVYTsGFatoyIae2l25pku4Bu15QCPTx2Gs5z+R//Ee3tHN85462Vc9yGVcdDvgADbqNkhOLxbEwPjMQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.0.tgz", + "integrity": "sha512-gSu3YHvQOoVaTWYGgHFB7IYFtcF2HBzX4l7s47VcjvkUgL4/FBnE20x7TNLa3W6ABERtGd5gStSwsA8bcn+c4w==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^27.1.1", + "jest-message-util": "^27.2.0", "jest-mock": "^27.1.1", - "jest-util": "^27.1.1" + "jest-util": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/globals": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.1.1.tgz", - "integrity": "sha512-Q3JcTPmY+DAEHnr4MpnBV3mwy50EGrTC6oSDTNnW7FNGGacTJAfpWNk02D7xv422T1OzK2A2BKx+26xJOvHkyw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.0.tgz", + "integrity": "sha512-raqk9Gf9WC3hlBa57rmRmJfRl9hom2b+qEE/ifheMtwn5USH5VZxzrHHOZg0Zsd/qC2WJ8UtyTwHKQAnNlDMdg==", "dev": true, "dependencies": { - "@jest/environment": "^27.1.1", + "@jest/environment": "^27.2.0", "@jest/types": "^27.1.1", - "expect": "^27.1.1" + "expect": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/reporters": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.1.1.tgz", - "integrity": "sha512-cEERs62n1P4Pqox9HWyNOEkP57G95aK2mBjB6D8Ruz1Yc98fKH53b58rlVEnsY5nLmkLNZk65fxNi9C0Yds/8w==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.0.tgz", + "integrity": "sha512-7wfkE3iRTLaT0F51h1mnxH3nQVwDCdbfgXiLuCcNkF1FnxXLH9utHqkSLIiwOTV1AtmiE0YagHbOvx4rnMP/GA==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.1.1", - "@jest/test-result": "^27.1.1", - "@jest/transform": "^27.1.1", + "@jest/console": "^27.2.0", + "@jest/test-result": "^27.2.0", + "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", @@ -919,10 +919,10 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.1.1", - "jest-resolve": "^27.1.1", - "jest-util": "^27.1.1", - "jest-worker": "^27.1.1", + "jest-haste-map": "^27.2.0", + "jest-resolve": "^27.2.0", + "jest-util": "^27.2.0", + "jest-worker": "^27.2.0", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -956,12 +956,12 @@ } }, "node_modules/@jest/test-result": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.1.1.tgz", - "integrity": "sha512-8vy75A0Jtfz9DqXFUkjC5Co/wRla+D7qRFdShUY8SbPqBS3GBx3tpba7sGKFos8mQrdbe39n+c1zgVKtarfy6A==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.0.tgz", + "integrity": "sha512-JPPqn8h0RGr4HyeY1Km+FivDIjTFzDROU46iAvzVjD42ooGwYoqYO/MQTilhfajdz6jpVnnphFrKZI5OYrBONA==", "dev": true, "dependencies": { - "@jest/console": "^27.1.1", + "@jest/console": "^27.2.0", "@jest/types": "^27.1.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" @@ -971,24 +971,24 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.1.1.tgz", - "integrity": "sha512-l8zD3EdeixvwmLNlJoMX3hhj8iIze95okj4sqmBzOq/zW8gZLElUveH4bpKEMuR+Nweazjlwc7L6g4C26M/y6Q==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.0.tgz", + "integrity": "sha512-PrqarcpzOU1KSAK7aPwfL8nnpaqTMwPe7JBPnaOYRDSe/C6AoJiL5Kbnonqf1+DregxZIRAoDg69R9/DXMGqXA==", "dev": true, "dependencies": { - "@jest/test-result": "^27.1.1", + "@jest/test-result": "^27.2.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.1", - "jest-runtime": "^27.1.1" + "jest-haste-map": "^27.2.0", + "jest-runtime": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/transform": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.1.1.tgz", - "integrity": "sha512-qM19Eu75U6Jc5zosXXVnq900Nl9JDpoGaZ4Mg6wZs7oqbu3heYSMOZS19DlwjlhWdfNRjF4UeAgkrCJCK3fEXg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.0.tgz", + "integrity": "sha512-Q8Q/8xXIZYllk1AF7Ou5sV3egOZsdY/Wlv09CSbcexBRcC1Qt6lVZ7jRFAZtbHsEEzvOCyFEC4PcrwKwyjXtCg==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", @@ -998,9 +998,9 @@ "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.1", + "jest-haste-map": "^27.2.0", "jest-regex-util": "^27.0.6", - "jest-util": "^27.1.1", + "jest-util": "^27.2.0", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", @@ -1924,16 +1924,16 @@ } }, "node_modules/babel-jest": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.1.1.tgz", - "integrity": "sha512-JA+dzJl4n2RBvWQEnph6HJaTHrsIPiXGQYatt/D8nR4UpX9UG4GaDzykVVPQBbrdTebZREkRb6SOxyIXJRab6Q==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.0.tgz", + "integrity": "sha512-bS2p+KGGVVmWXBa8+i6SO/xzpiz2Q/2LnqLbQknPKefWXVZ67YIjA4iXup/jMOEZplga9PpWn+wrdb3UdDwRaA==", "dev": true, "dependencies": { - "@jest/transform": "^27.1.1", + "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.6", + "babel-preset-jest": "^27.2.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" @@ -1962,9 +1962,9 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz", - "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", + "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", @@ -2000,12 +2000,12 @@ } }, "node_modules/babel-preset-jest": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz", - "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", + "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^27.0.6", + "babel-plugin-jest-hoist": "^27.2.0", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -3230,9 +3230,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.3.0.tgz", - "integrity": "sha512-d/BvOLDjI4i7yf9tqCuLL2fFGA2TrM/D9PyRpua+rJolG0qrwp/FohP02L0m+44kmPpofIo4l3NPwLmzyKKimA==", + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.4.0.tgz", + "integrity": "sha512-KJGWS2qa0xZXIMPMDUNkRVO8/JxRd4+M0ejYYOzu2LIQ5ijecPzNuNR9nvDkml9XyyRBzu975FkhJcwD17ietQ==", "devOptional": true, "hasInstallScript": true, "dependencies": { @@ -3908,16 +3908,16 @@ } }, "node_modules/expect": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.1.1.tgz", - "integrity": "sha512-JQAzp0CJoFFHF1RnOtrMUNMdsfx/Tl0+FhRzVl8q0fa23N+JyWdPXwb3T5rkHCvyo9uttnK7lVdKCBl1b/9EDw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.0.tgz", + "integrity": "sha512-oOTbawMQv7AK1FZURbPTgGSzmhxkjFzoARSvDjOMnOpeWuYQx1tP6rXu9MIX5mrACmyCAM7fSNP8IJO2f1p0CQ==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "ansi-styles": "^5.0.0", "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.1.1", - "jest-message-util": "^27.1.1", + "jest-matcher-utils": "^27.2.0", + "jest-message-util": "^27.2.0", "jest-regex-util": "^27.0.6" }, "engines": { @@ -5328,14 +5328,14 @@ } }, "node_modules/jest": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.1.tgz", - "integrity": "sha512-LFTEZOhoZNR/2DQM3OCaK5xC6c55c1OWhYh0njRsoHX0qd6x4nkcgenkSH0JKjsAGMTmmJAoL7/oqYHMfwhruA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.0.tgz", + "integrity": "sha512-oUqVXyvh5YwEWl263KWdPUAqEzBFzGHdFLQ05hUnITr1tH+9SscEI9A/GH9eBClA+Nw1ct+KNuuOV6wlnmBPcg==", "dev": true, "dependencies": { - "@jest/core": "^27.1.1", + "@jest/core": "^27.2.0", "import-local": "^3.0.2", - "jest-cli": "^27.1.1" + "jest-cli": "^27.2.0" }, "bin": { "jest": "bin/jest.js" @@ -5367,27 +5367,27 @@ } }, "node_modules/jest-circus": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.1.1.tgz", - "integrity": "sha512-Xed1ApiMFu/yzqGMBToHr8sp2gkX/ARZf4nXoGrHJrXrTUdVIWiVYheayfcOaPdQvQEE/uyBLgW7I7YBLIrAXQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.0.tgz", + "integrity": "sha512-WwENhaZwOARB1nmcboYPSv/PwHBUGRpA4MEgszjr9DLCl97MYw0qZprBwLb7rNzvMwfIvNGG7pefQ5rxyBlzIA==", "dev": true, "dependencies": { - "@jest/environment": "^27.1.1", - "@jest/test-result": "^27.1.1", + "@jest/environment": "^27.2.0", + "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.1.1", + "expect": "^27.2.0", "is-generator-fn": "^2.0.0", - "jest-each": "^27.1.1", - "jest-matcher-utils": "^27.1.1", - "jest-message-util": "^27.1.1", - "jest-runtime": "^27.1.1", - "jest-snapshot": "^27.1.1", - "jest-util": "^27.1.1", - "pretty-format": "^27.1.1", + "jest-each": "^27.2.0", + "jest-matcher-utils": "^27.2.0", + "jest-message-util": "^27.2.0", + "jest-runtime": "^27.2.0", + "jest-snapshot": "^27.2.0", + "jest-util": "^27.2.0", + "pretty-format": "^27.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" @@ -5397,21 +5397,21 @@ } }, "node_modules/jest-cli": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.1.1.tgz", - "integrity": "sha512-LCjfEYp9D3bcOeVUUpEol9Y1ijZYMWVqflSmtw/wX+6Fb7zP4IlO14/6s9v1pxsoM4Pn46+M2zABgKuQjyDpTw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.0.tgz", + "integrity": "sha512-bq1X/B/b1kT9y1zIFMEW3GFRX1HEhFybiqKdbxM+j11XMMYSbU9WezfyWIhrSOmPT+iODLATVjfsCnbQs7cfIA==", "dev": true, "dependencies": { - "@jest/core": "^27.1.1", - "@jest/test-result": "^27.1.1", + "@jest/core": "^27.2.0", + "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", - "jest-config": "^27.1.1", - "jest-util": "^27.1.1", - "jest-validate": "^27.1.1", + "jest-config": "^27.2.0", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", "prompts": "^2.0.1", "yargs": "^16.0.3" }, @@ -5431,32 +5431,32 @@ } }, "node_modules/jest-config": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.1.1.tgz", - "integrity": "sha512-2iSd5zoJV4MsWPcLCGwUVUY/j6pZXm4Qd3rnbCtrd9EHNTg458iHw8PZztPQXfxKBKJxLfBk7tbZqYF8MGtxJA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.0.tgz", + "integrity": "sha512-Z1romHpxeNwLxQtouQ4xt07bY6HSFGKTo0xJcvOK3u6uJHveA4LB2P+ty9ArBLpTh3AqqPxsyw9l9GMnWBYS9A==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.1.1", + "@jest/test-sequencer": "^27.2.0", "@jest/types": "^27.1.1", - "babel-jest": "^27.1.1", + "babel-jest": "^27.2.0", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", - "jest-circus": "^27.1.1", - "jest-environment-jsdom": "^27.1.1", - "jest-environment-node": "^27.1.1", + "jest-circus": "^27.2.0", + "jest-environment-jsdom": "^27.2.0", + "jest-environment-node": "^27.2.0", "jest-get-type": "^27.0.6", - "jest-jasmine2": "^27.1.1", + "jest-jasmine2": "^27.2.0", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.1", - "jest-runner": "^27.1.1", - "jest-util": "^27.1.1", - "jest-validate": "^27.1.1", + "jest-resolve": "^27.2.0", + "jest-runner": "^27.2.0", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", "micromatch": "^4.0.4", - "pretty-format": "^27.1.1" + "pretty-format": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5471,15 +5471,15 @@ } }, "node_modules/jest-diff": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.1.1.tgz", - "integrity": "sha512-m/6n5158rqEriTazqHtBpOa2B/gGgXJijX6nsEgZfbJ/3pxQcdpVXBe+FP39b1dxWHyLVVmuVXddmAwtqFO4Lg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.0.tgz", + "integrity": "sha512-QSO9WC6btFYWtRJ3Hac0sRrkspf7B01mGrrQEiCW6TobtViJ9RWL0EmOs/WnBsZDsI/Y2IoSHZA2x6offu0sYw==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^27.0.6", "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.1" + "pretty-format": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5498,33 +5498,33 @@ } }, "node_modules/jest-each": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.1.1.tgz", - "integrity": "sha512-r6hOsTLavUBb1xN0uDa89jdDeBmJ+K49fWpbyxeGRA2pLY46PlC4z551/cWNQzrj+IUa5/gSRsCIV/01HdNPug==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.0.tgz", + "integrity": "sha512-biDmmUQjg+HZOB7MfY2RHSFL3j418nMoC3TK3pGAj880fQQSxvQe1y2Wy23JJJNUlk6YXiGU0yWy86Le1HBPmA==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", - "jest-util": "^27.1.1", - "pretty-format": "^27.1.1" + "jest-util": "^27.2.0", + "pretty-format": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.1.1.tgz", - "integrity": "sha512-6vOnoZ6IaExuw7FvnuJhA1qFYv1DDSnN0sQowzolNwxQp7bG1YhLxj2YU1sVXAYA3IR3MbH2mbnJUsLUWfyfzw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.0.tgz", + "integrity": "sha512-wNQJi6Rd/AkUWqTc4gWhuTIFPo7tlMK0RPZXeM6AqRHZA3D3vwvTa9ktAktyVyWYmUoXdYstOfyYMG3w4jt7eA==", "dev": true, "dependencies": { - "@jest/environment": "^27.1.1", - "@jest/fake-timers": "^27.1.1", + "@jest/environment": "^27.2.0", + "@jest/fake-timers": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1", - "jest-util": "^27.1.1", + "jest-util": "^27.2.0", "jsdom": "^16.6.0" }, "engines": { @@ -5638,17 +5638,17 @@ } }, "node_modules/jest-environment-node": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.1.1.tgz", - "integrity": "sha512-OEGeZh0PwzngNIYWYgWrvTcLygopV8OJbC9HNb0j70VBKgEIsdZkYhwcFnaURX83OHACMqf1pa9Tv5Pw5jemrg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.0.tgz", + "integrity": "sha512-WbW+vdM4u88iy6Q3ftUEQOSgMPtSgjm3qixYYK2AKEuqmFO2zmACTw1vFUB0qI/QN88X6hA6ZkVKIdIWWzz+yg==", "dev": true, "dependencies": { - "@jest/environment": "^27.1.1", - "@jest/fake-timers": "^27.1.1", + "@jest/environment": "^27.2.0", + "@jest/fake-timers": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1", - "jest-util": "^27.1.1" + "jest-util": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5664,9 +5664,9 @@ } }, "node_modules/jest-haste-map": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.1.1.tgz", - "integrity": "sha512-NGLYVAdh5C8Ezg5QBFzrNeYsfxptDBPlhvZNaicLiZX77F/rS27a9M6u9ripWAaaD54xnWdZNZpEkdjD5Eo5aQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.0.tgz", + "integrity": "sha512-laFet7QkNlWjwZtMGHCucLvF8o9PAh2cgePRck1+uadSM4E4XH9J4gnx4do+a6do8ZV5XHNEAXEkIoNg5XUH2Q==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", @@ -5677,8 +5677,8 @@ "graceful-fs": "^4.2.4", "jest-regex-util": "^27.0.6", "jest-serializer": "^27.0.6", - "jest-util": "^27.1.1", - "jest-worker": "^27.1.1", + "jest-util": "^27.2.0", + "jest-worker": "^27.2.0", "micromatch": "^4.0.4", "walker": "^1.0.7" }, @@ -5690,28 +5690,28 @@ } }, "node_modules/jest-jasmine2": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.1.1.tgz", - "integrity": "sha512-0LAzUmcmvQwjIdJt0cXUVX4G5qjVXE8ELt6nbMNDzv2yAs2hYCCUtQq+Eje70GwAysWCGcS64QeYj5VPHYVxPg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.0.tgz", + "integrity": "sha512-NcPzZBk6IkDW3Z2V8orGueheGJJYfT5P0zI/vTO/Jp+R9KluUdgFrgwfvZ0A34Kw6HKgiWFILZmh3oQ/eS+UxA==", "dev": true, "dependencies": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.1.1", + "@jest/environment": "^27.2.0", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.1.1", + "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.1.1", + "expect": "^27.2.0", "is-generator-fn": "^2.0.0", - "jest-each": "^27.1.1", - "jest-matcher-utils": "^27.1.1", - "jest-message-util": "^27.1.1", - "jest-runtime": "^27.1.1", - "jest-snapshot": "^27.1.1", - "jest-util": "^27.1.1", - "pretty-format": "^27.1.1", + "jest-each": "^27.2.0", + "jest-matcher-utils": "^27.2.0", + "jest-message-util": "^27.2.0", + "jest-runtime": "^27.2.0", + "jest-snapshot": "^27.2.0", + "jest-util": "^27.2.0", + "pretty-format": "^27.2.0", "throat": "^6.0.1" }, "engines": { @@ -5719,37 +5719,37 @@ } }, "node_modules/jest-leak-detector": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.1.1.tgz", - "integrity": "sha512-gwSgzmqShoeEsEVpgObymQPrM9P6557jt1EsFW5aCeJ46Cme0EdjYU7xr6llQZ5GpWDl56eOstUaPXiZOfiTKw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.0.tgz", + "integrity": "sha512-e91BIEmbZw5+MHkB4Hnrq7S86coTxUMCkz4n7DLmQYvl9pEKmRx9H/JFH87bBqbIU5B2Ju1soKxRWX6/eGFGpA==", "dev": true, "dependencies": { "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.1" + "pretty-format": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.1.1.tgz", - "integrity": "sha512-Q1a10w9Y4sh0wegkdP6reQOa/Dtz7nAvDqBgrat1ItZAUvk4jzXAqyhXPu/ZuEtDaXaNKpdRPRQA8bvkOh2Eaw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.0.tgz", + "integrity": "sha512-F+LG3iTwJ0gPjxBX6HCyrARFXq6jjiqhwBQeskkJQgSLeF1j6ui1RTV08SR7O51XTUhtc8zqpDj8iCG4RGmdKw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.1.1", + "jest-diff": "^27.2.0", "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.1" + "pretty-format": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-message-util": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.1.1.tgz", - "integrity": "sha512-b697BOJV93+AVGvzLRtVZ0cTVRbd59OaWnbB2D75GRaIMc4I+Z9W0wHxbfjW01JWO+TqqW4yevT0aN7Fd0XWng==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.0.tgz", + "integrity": "sha512-y+sfT/94CiP8rKXgwCOzO1mUazIEdEhrLjuiu+RKmCP+8O/TJTSne9dqQRbFIHBtlR2+q7cddJlWGir8UATu5w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", @@ -5758,7 +5758,7 @@ "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.1.1", + "pretty-format": "^27.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -5818,19 +5818,19 @@ } }, "node_modules/jest-resolve": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.1.1.tgz", - "integrity": "sha512-M41YFmWhvDVstwe7XuV21zynOiBLJB5Sk0GrIsYYgTkjfEWNLVXDjAyq1W7PHseaYNOxIc0nOGq/r5iwcZNC1A==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.0.tgz", + "integrity": "sha512-v09p9Ib/VtpHM6Cz+i9lEAv1Z/M5NVxsyghRHRMEUOqwPQs3zwTdwp1xS3O/k5LocjKiGS0OTaJoBSpjbM2Jlw==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.1", + "jest-haste-map": "^27.2.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.1.1", - "jest-validate": "^27.1.1", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", "resolve": "^1.20.0", "slash": "^3.0.0" }, @@ -5839,29 +5839,29 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.1.tgz", - "integrity": "sha512-sYZR+uBjFDCo4VhYeazZf/T+ryYItvdLKu9vHatqkUqHGjDMrdEPOykiqC2iEpaCFTS+3iL/21CYiJuKdRbniw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.0.tgz", + "integrity": "sha512-EY5jc/Y0oxn+oVEEldTidmmdVoZaknKPyDORA012JUdqPyqPL+lNdRyI3pGti0RCydds6coaw6xt4JQY54dKsg==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.1.1" + "jest-snapshot": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-runner": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.1.1.tgz", - "integrity": "sha512-lP3MBNQhg75/sQtVkC8dsAQZumvy3lHK/YIwYPfEyqGIX1qEcnYIRxP89q0ZgC5ngvi1vN2P5UFHszQxguWdng==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.0.tgz", + "integrity": "sha512-Cl+BHpduIc0cIVTjwoyx0pQk4Br8gn+wkr35PmKCmzEdOUnQ2wN7QVXA8vXnMQXSlFkN/+KWnk20TAVBmhgrww==", "dev": true, "dependencies": { - "@jest/console": "^27.1.1", - "@jest/environment": "^27.1.1", - "@jest/test-result": "^27.1.1", - "@jest/transform": "^27.1.1", + "@jest/console": "^27.2.0", + "@jest/environment": "^27.2.0", + "@jest/test-result": "^27.2.0", + "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", @@ -5869,15 +5869,15 @@ "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.1.1", - "jest-environment-node": "^27.1.1", - "jest-haste-map": "^27.1.1", - "jest-leak-detector": "^27.1.1", - "jest-message-util": "^27.1.1", - "jest-resolve": "^27.1.1", - "jest-runtime": "^27.1.1", - "jest-util": "^27.1.1", - "jest-worker": "^27.1.1", + "jest-environment-jsdom": "^27.2.0", + "jest-environment-node": "^27.2.0", + "jest-haste-map": "^27.2.0", + "jest-leak-detector": "^27.2.0", + "jest-message-util": "^27.2.0", + "jest-resolve": "^27.2.0", + "jest-runtime": "^27.2.0", + "jest-util": "^27.2.0", + "jest-worker": "^27.2.0", "source-map-support": "^0.5.6", "throat": "^6.0.1" }, @@ -5886,18 +5886,18 @@ } }, "node_modules/jest-runtime": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.1.1.tgz", - "integrity": "sha512-FEwy+tSzmsvuKaQpyYsUyk31KG5vMmA2r2BSTHgv0yNfcooQdm2Ke91LM9Ud8D3xz8CLDHJWAI24haMFTwrsPg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.0.tgz", + "integrity": "sha512-6gRE9AVVX49hgBbWQ9PcNDeM4upMUXzTpBs0kmbrjyotyUyIJixLPsYjpeTFwAA07PVLDei1iAm2chmWycdGdQ==", "dev": true, "dependencies": { - "@jest/console": "^27.1.1", - "@jest/environment": "^27.1.1", - "@jest/fake-timers": "^27.1.1", - "@jest/globals": "^27.1.1", + "@jest/console": "^27.2.0", + "@jest/environment": "^27.2.0", + "@jest/fake-timers": "^27.2.0", + "@jest/globals": "^27.2.0", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.1.1", - "@jest/transform": "^27.1.1", + "@jest/test-result": "^27.2.0", + "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", @@ -5907,14 +5907,14 @@ "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.1", - "jest-message-util": "^27.1.1", + "jest-haste-map": "^27.2.0", + "jest-message-util": "^27.2.0", "jest-mock": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.1", - "jest-snapshot": "^27.1.1", - "jest-util": "^27.1.1", - "jest-validate": "^27.1.1", + "jest-resolve": "^27.2.0", + "jest-snapshot": "^27.2.0", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" @@ -5937,9 +5937,9 @@ } }, "node_modules/jest-snapshot": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.1.1.tgz", - "integrity": "sha512-Wi3QGiuRFo3lU+EbQmZnBOks0CJyAMPHvYoG7iJk00Do10jeOyuOEO0Jfoaoun8+8TDv+Nzl7Aswir/IK9+1jg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.0.tgz", + "integrity": "sha512-MukJvy3KEqemCT2FoT3Gum37CQqso/62PKTfIzWmZVTsLsuyxQmJd2PI5KPcBYFqLlA8LgZLHM8ZlazkVt8LsQ==", "dev": true, "dependencies": { "@babel/core": "^7.7.2", @@ -5948,23 +5948,23 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.1.1", + "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.1.1", + "expect": "^27.2.0", "graceful-fs": "^4.2.4", - "jest-diff": "^27.1.1", + "jest-diff": "^27.2.0", "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.1.1", - "jest-matcher-utils": "^27.1.1", - "jest-message-util": "^27.1.1", - "jest-resolve": "^27.1.1", - "jest-util": "^27.1.1", + "jest-haste-map": "^27.2.0", + "jest-matcher-utils": "^27.2.0", + "jest-message-util": "^27.2.0", + "jest-resolve": "^27.2.0", + "jest-util": "^27.2.0", "natural-compare": "^1.4.0", - "pretty-format": "^27.1.1", + "pretty-format": "^27.2.0", "semver": "^7.3.2" }, "engines": { @@ -5987,9 +5987,9 @@ } }, "node_modules/jest-util": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.1.1.tgz", - "integrity": "sha512-zf9nEbrASWn2mC/L91nNb0K+GkhFvi4MP6XJG2HqnHzHvLYcs7ou/In68xYU1i1dSkJlrWcYfWXQE8nVR+nbOA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.0.tgz", + "integrity": "sha512-T5ZJCNeFpqcLBpx+Hl9r9KoxBCUqeWlJ1Htli+vryigZVJ1vuLB9j35grEBASp4R13KFkV7jM52bBGnArpJN6A==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", @@ -6004,9 +6004,9 @@ } }, "node_modules/jest-validate": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.1.1.tgz", - "integrity": "sha512-N5Er5FKav/8m2dJwn7BGnZwnoD1BSc8jx5T+diG2OvyeugvZDhPeAt5DrNaGkkaKCrSUvuE7A5E4uHyT7Vj0Mw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.0.tgz", + "integrity": "sha512-uIEZGkFKk3+4liA81Xu0maG5aGDyPLdp+4ed244c+Ql0k3aLWQYcMbaMLXOIFcb83LPHzYzqQ8hwNnIxTqfAGQ==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", @@ -6014,7 +6014,7 @@ "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "leven": "^3.1.0", - "pretty-format": "^27.1.1" + "pretty-format": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -6033,17 +6033,17 @@ } }, "node_modules/jest-watcher": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.1.1.tgz", - "integrity": "sha512-XQzyHbxziDe+lZM6Dzs40fEt4q9akOGwitJnxQasJ9WG0bv3JGiRlsBgjw13znGapeMtFaEsyhL0Cl04IbaoWQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.0.tgz", + "integrity": "sha512-SjRWhnr+qO8aBsrcnYIyF+qRxNZk6MZH8TIDgvi+VlsyrvOyqg0d+Rm/v9KHiTtC9mGGeFi9BFqgavyWib6xLg==", "dev": true, "dependencies": { - "@jest/test-result": "^27.1.1", + "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.1.1", + "jest-util": "^27.2.0", "string-length": "^4.0.1" }, "engines": { @@ -6051,9 +6051,9 @@ } }, "node_modules/jest-worker": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.1.tgz", - "integrity": "sha512-XJKCL7tu+362IUYTWvw8+3S75U7qMiYiRU6u5yqscB48bTvzwN6i8L/7wVTXiFLwkRsxARNM7TISnTvcgv9hxA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.0.tgz", + "integrity": "sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA==", "dev": true, "dependencies": { "@types/node": "*", @@ -7741,9 +7741,9 @@ } }, "node_modules/prettier": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz", - "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -7765,9 +7765,9 @@ } }, "node_modules/pretty-format": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.1.1.tgz", - "integrity": "sha512-zdBi/xlstKJL42UH7goQti5Hip/B415w1Mfj+WWWYMBylAYtKESnXGUtVVcMVid9ReVjypCotUV6CEevYPHv2g==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.0.tgz", + "integrity": "sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", @@ -9064,12 +9064,13 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "node_modules/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.4.tgz", + "integrity": "sha512-ERg+H//lSSYlZhBIUu+wJnqg30AbyBbpZlIhcshpn7BNzpoRODZgfyr9J+8ERf3ooC6af3u7Lcl01nleau7MrA==", "dev": true, "dependencies": { - "escape-string-regexp": "^2.0.0" + "escape-string-regexp": "^2.0.0", + "source-map-support": "^0.5.20" }, "engines": { "node": ">=10" @@ -11093,29 +11094,29 @@ "dev": true }, "@jest/console": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.1.1.tgz", - "integrity": "sha512-VpQJRsWSeAem0zpBjeRtDbcD6DlbNoK11dNYt+PSQ+DDORh9q2/xyEpErfwgnLjWX0EKkSZmTGx/iH9Inzs6vQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.0.tgz", + "integrity": "sha512-35z+RqsK2CCgNxn+lWyK8X4KkaDtfL4BggT7oeZ0JffIiAiEYFYPo5B67V50ZubqDS1ehBrdCR2jduFnIrZOYw==", "dev": true, "requires": { "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.1.1", - "jest-util": "^27.1.1", + "jest-message-util": "^27.2.0", + "jest-util": "^27.2.0", "slash": "^3.0.0" } }, "@jest/core": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.1.1.tgz", - "integrity": "sha512-oCkKeTgI0emznKcLoq5OCD0PhxCijA4l7ejDnWW3d5bgSi+zfVaLybVqa+EQOxpNejQWtTna7tmsAXjMN9N43Q==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.0.tgz", + "integrity": "sha512-E/2NHhq+VMo18DpKkoty8Sjey8Kps5Cqa88A8NP757s6JjYqPdioMuyUBhDiIOGCdQByEp0ou3jskkTszMS0nw==", "dev": true, "requires": { - "@jest/console": "^27.1.1", - "@jest/reporters": "^27.1.1", - "@jest/test-result": "^27.1.1", - "@jest/transform": "^27.1.1", + "@jest/console": "^27.2.0", + "@jest/reporters": "^27.2.0", + "@jest/test-result": "^27.2.0", + "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", @@ -11124,18 +11125,18 @@ "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-changed-files": "^27.1.1", - "jest-config": "^27.1.1", - "jest-haste-map": "^27.1.1", - "jest-message-util": "^27.1.1", + "jest-config": "^27.2.0", + "jest-haste-map": "^27.2.0", + "jest-message-util": "^27.2.0", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.1", - "jest-resolve-dependencies": "^27.1.1", - "jest-runner": "^27.1.1", - "jest-runtime": "^27.1.1", - "jest-snapshot": "^27.1.1", - "jest-util": "^27.1.1", - "jest-validate": "^27.1.1", - "jest-watcher": "^27.1.1", + "jest-resolve": "^27.2.0", + "jest-resolve-dependencies": "^27.2.0", + "jest-runner": "^27.2.0", + "jest-runtime": "^27.2.0", + "jest-snapshot": "^27.2.0", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", + "jest-watcher": "^27.2.0", "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", @@ -11144,52 +11145,52 @@ } }, "@jest/environment": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.1.1.tgz", - "integrity": "sha512-+y882/ZdxhyqF5RzxIrNIANjHj991WH7jifdcplzMDosDUOyCACFYUyVTBGbSTocbU+s1cesroRzkwi8hZ9SHg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.0.tgz", + "integrity": "sha512-iPWmQI0wRIYSZX3wKu4FXHK4eIqkfq6n1DCDJS+v3uby7SOXrHvX4eiTBuEdSvtDRMTIH2kjrSkjHf/F9JIYyQ==", "dev": true, "requires": { - "@jest/fake-timers": "^27.1.1", + "@jest/fake-timers": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1" } }, "@jest/fake-timers": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.1.1.tgz", - "integrity": "sha512-u8TJ5VlsVYTsGFatoyIae2l25pku4Bu15QCPTx2Gs5z+R//Ee3tHN85462Vc9yGVcdDvgADbqNkhOLxbEwPjMQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.0.tgz", + "integrity": "sha512-gSu3YHvQOoVaTWYGgHFB7IYFtcF2HBzX4l7s47VcjvkUgL4/FBnE20x7TNLa3W6ABERtGd5gStSwsA8bcn+c4w==", "dev": true, "requires": { "@jest/types": "^27.1.1", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^27.1.1", + "jest-message-util": "^27.2.0", "jest-mock": "^27.1.1", - "jest-util": "^27.1.1" + "jest-util": "^27.2.0" } }, "@jest/globals": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.1.1.tgz", - "integrity": "sha512-Q3JcTPmY+DAEHnr4MpnBV3mwy50EGrTC6oSDTNnW7FNGGacTJAfpWNk02D7xv422T1OzK2A2BKx+26xJOvHkyw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.0.tgz", + "integrity": "sha512-raqk9Gf9WC3hlBa57rmRmJfRl9hom2b+qEE/ifheMtwn5USH5VZxzrHHOZg0Zsd/qC2WJ8UtyTwHKQAnNlDMdg==", "dev": true, "requires": { - "@jest/environment": "^27.1.1", + "@jest/environment": "^27.2.0", "@jest/types": "^27.1.1", - "expect": "^27.1.1" + "expect": "^27.2.0" } }, "@jest/reporters": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.1.1.tgz", - "integrity": "sha512-cEERs62n1P4Pqox9HWyNOEkP57G95aK2mBjB6D8Ruz1Yc98fKH53b58rlVEnsY5nLmkLNZk65fxNi9C0Yds/8w==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.0.tgz", + "integrity": "sha512-7wfkE3iRTLaT0F51h1mnxH3nQVwDCdbfgXiLuCcNkF1FnxXLH9utHqkSLIiwOTV1AtmiE0YagHbOvx4rnMP/GA==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.1.1", - "@jest/test-result": "^27.1.1", - "@jest/transform": "^27.1.1", + "@jest/console": "^27.2.0", + "@jest/test-result": "^27.2.0", + "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", @@ -11201,10 +11202,10 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.1.1", - "jest-resolve": "^27.1.1", - "jest-util": "^27.1.1", - "jest-worker": "^27.1.1", + "jest-haste-map": "^27.2.0", + "jest-resolve": "^27.2.0", + "jest-util": "^27.2.0", + "jest-worker": "^27.2.0", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -11224,33 +11225,33 @@ } }, "@jest/test-result": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.1.1.tgz", - "integrity": "sha512-8vy75A0Jtfz9DqXFUkjC5Co/wRla+D7qRFdShUY8SbPqBS3GBx3tpba7sGKFos8mQrdbe39n+c1zgVKtarfy6A==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.0.tgz", + "integrity": "sha512-JPPqn8h0RGr4HyeY1Km+FivDIjTFzDROU46iAvzVjD42ooGwYoqYO/MQTilhfajdz6jpVnnphFrKZI5OYrBONA==", "dev": true, "requires": { - "@jest/console": "^27.1.1", + "@jest/console": "^27.2.0", "@jest/types": "^27.1.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.1.1.tgz", - "integrity": "sha512-l8zD3EdeixvwmLNlJoMX3hhj8iIze95okj4sqmBzOq/zW8gZLElUveH4bpKEMuR+Nweazjlwc7L6g4C26M/y6Q==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.0.tgz", + "integrity": "sha512-PrqarcpzOU1KSAK7aPwfL8nnpaqTMwPe7JBPnaOYRDSe/C6AoJiL5Kbnonqf1+DregxZIRAoDg69R9/DXMGqXA==", "dev": true, "requires": { - "@jest/test-result": "^27.1.1", + "@jest/test-result": "^27.2.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.1", - "jest-runtime": "^27.1.1" + "jest-haste-map": "^27.2.0", + "jest-runtime": "^27.2.0" } }, "@jest/transform": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.1.1.tgz", - "integrity": "sha512-qM19Eu75U6Jc5zosXXVnq900Nl9JDpoGaZ4Mg6wZs7oqbu3heYSMOZS19DlwjlhWdfNRjF4UeAgkrCJCK3fEXg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.0.tgz", + "integrity": "sha512-Q8Q/8xXIZYllk1AF7Ou5sV3egOZsdY/Wlv09CSbcexBRcC1Qt6lVZ7jRFAZtbHsEEzvOCyFEC4PcrwKwyjXtCg==", "dev": true, "requires": { "@babel/core": "^7.1.0", @@ -11260,9 +11261,9 @@ "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.1", + "jest-haste-map": "^27.2.0", "jest-regex-util": "^27.0.6", - "jest-util": "^27.1.1", + "jest-util": "^27.2.0", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", @@ -11998,16 +11999,16 @@ } }, "babel-jest": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.1.1.tgz", - "integrity": "sha512-JA+dzJl4n2RBvWQEnph6HJaTHrsIPiXGQYatt/D8nR4UpX9UG4GaDzykVVPQBbrdTebZREkRb6SOxyIXJRab6Q==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.0.tgz", + "integrity": "sha512-bS2p+KGGVVmWXBa8+i6SO/xzpiz2Q/2LnqLbQknPKefWXVZ67YIjA4iXup/jMOEZplga9PpWn+wrdb3UdDwRaA==", "dev": true, "requires": { - "@jest/transform": "^27.1.1", + "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.6", + "babel-preset-jest": "^27.2.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" @@ -12027,9 +12028,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz", - "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", + "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", "dev": true, "requires": { "@babel/template": "^7.3.3", @@ -12059,12 +12060,12 @@ } }, "babel-preset-jest": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz", - "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", + "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^27.0.6", + "babel-plugin-jest-hoist": "^27.2.0", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -13013,9 +13014,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.3.0.tgz", - "integrity": "sha512-d/BvOLDjI4i7yf9tqCuLL2fFGA2TrM/D9PyRpua+rJolG0qrwp/FohP02L0m+44kmPpofIo4l3NPwLmzyKKimA==", + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.4.0.tgz", + "integrity": "sha512-KJGWS2qa0xZXIMPMDUNkRVO8/JxRd4+M0ejYYOzu2LIQ5ijecPzNuNR9nvDkml9XyyRBzu975FkhJcwD17ietQ==", "devOptional": true, "requires": { "@electron/get": "^1.0.1", @@ -13486,16 +13487,16 @@ "dev": true }, "expect": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.1.1.tgz", - "integrity": "sha512-JQAzp0CJoFFHF1RnOtrMUNMdsfx/Tl0+FhRzVl8q0fa23N+JyWdPXwb3T5rkHCvyo9uttnK7lVdKCBl1b/9EDw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.0.tgz", + "integrity": "sha512-oOTbawMQv7AK1FZURbPTgGSzmhxkjFzoARSvDjOMnOpeWuYQx1tP6rXu9MIX5mrACmyCAM7fSNP8IJO2f1p0CQ==", "dev": true, "requires": { "@jest/types": "^27.1.1", "ansi-styles": "^5.0.0", "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.1.1", - "jest-message-util": "^27.1.1", + "jest-matcher-utils": "^27.2.0", + "jest-message-util": "^27.2.0", "jest-regex-util": "^27.0.6" }, "dependencies": { @@ -14566,14 +14567,14 @@ } }, "jest": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.1.tgz", - "integrity": "sha512-LFTEZOhoZNR/2DQM3OCaK5xC6c55c1OWhYh0njRsoHX0qd6x4nkcgenkSH0JKjsAGMTmmJAoL7/oqYHMfwhruA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.0.tgz", + "integrity": "sha512-oUqVXyvh5YwEWl263KWdPUAqEzBFzGHdFLQ05hUnITr1tH+9SscEI9A/GH9eBClA+Nw1ct+KNuuOV6wlnmBPcg==", "dev": true, "requires": { - "@jest/core": "^27.1.1", + "@jest/core": "^27.2.0", "import-local": "^3.0.2", - "jest-cli": "^27.1.1" + "jest-cli": "^27.2.0" } }, "jest-changed-files": { @@ -14588,91 +14589,91 @@ } }, "jest-circus": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.1.1.tgz", - "integrity": "sha512-Xed1ApiMFu/yzqGMBToHr8sp2gkX/ARZf4nXoGrHJrXrTUdVIWiVYheayfcOaPdQvQEE/uyBLgW7I7YBLIrAXQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.0.tgz", + "integrity": "sha512-WwENhaZwOARB1nmcboYPSv/PwHBUGRpA4MEgszjr9DLCl97MYw0qZprBwLb7rNzvMwfIvNGG7pefQ5rxyBlzIA==", "dev": true, "requires": { - "@jest/environment": "^27.1.1", - "@jest/test-result": "^27.1.1", + "@jest/environment": "^27.2.0", + "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.1.1", + "expect": "^27.2.0", "is-generator-fn": "^2.0.0", - "jest-each": "^27.1.1", - "jest-matcher-utils": "^27.1.1", - "jest-message-util": "^27.1.1", - "jest-runtime": "^27.1.1", - "jest-snapshot": "^27.1.1", - "jest-util": "^27.1.1", - "pretty-format": "^27.1.1", + "jest-each": "^27.2.0", + "jest-matcher-utils": "^27.2.0", + "jest-message-util": "^27.2.0", + "jest-runtime": "^27.2.0", + "jest-snapshot": "^27.2.0", + "jest-util": "^27.2.0", + "pretty-format": "^27.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" } }, "jest-cli": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.1.1.tgz", - "integrity": "sha512-LCjfEYp9D3bcOeVUUpEol9Y1ijZYMWVqflSmtw/wX+6Fb7zP4IlO14/6s9v1pxsoM4Pn46+M2zABgKuQjyDpTw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.0.tgz", + "integrity": "sha512-bq1X/B/b1kT9y1zIFMEW3GFRX1HEhFybiqKdbxM+j11XMMYSbU9WezfyWIhrSOmPT+iODLATVjfsCnbQs7cfIA==", "dev": true, "requires": { - "@jest/core": "^27.1.1", - "@jest/test-result": "^27.1.1", + "@jest/core": "^27.2.0", + "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", - "jest-config": "^27.1.1", - "jest-util": "^27.1.1", - "jest-validate": "^27.1.1", + "jest-config": "^27.2.0", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", "prompts": "^2.0.1", "yargs": "^16.0.3" } }, "jest-config": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.1.1.tgz", - "integrity": "sha512-2iSd5zoJV4MsWPcLCGwUVUY/j6pZXm4Qd3rnbCtrd9EHNTg458iHw8PZztPQXfxKBKJxLfBk7tbZqYF8MGtxJA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.0.tgz", + "integrity": "sha512-Z1romHpxeNwLxQtouQ4xt07bY6HSFGKTo0xJcvOK3u6uJHveA4LB2P+ty9ArBLpTh3AqqPxsyw9l9GMnWBYS9A==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.1.1", + "@jest/test-sequencer": "^27.2.0", "@jest/types": "^27.1.1", - "babel-jest": "^27.1.1", + "babel-jest": "^27.2.0", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", - "jest-circus": "^27.1.1", - "jest-environment-jsdom": "^27.1.1", - "jest-environment-node": "^27.1.1", + "jest-circus": "^27.2.0", + "jest-environment-jsdom": "^27.2.0", + "jest-environment-node": "^27.2.0", "jest-get-type": "^27.0.6", - "jest-jasmine2": "^27.1.1", + "jest-jasmine2": "^27.2.0", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.1", - "jest-runner": "^27.1.1", - "jest-util": "^27.1.1", - "jest-validate": "^27.1.1", + "jest-resolve": "^27.2.0", + "jest-runner": "^27.2.0", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", "micromatch": "^4.0.4", - "pretty-format": "^27.1.1" + "pretty-format": "^27.2.0" } }, "jest-diff": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.1.1.tgz", - "integrity": "sha512-m/6n5158rqEriTazqHtBpOa2B/gGgXJijX6nsEgZfbJ/3pxQcdpVXBe+FP39b1dxWHyLVVmuVXddmAwtqFO4Lg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.0.tgz", + "integrity": "sha512-QSO9WC6btFYWtRJ3Hac0sRrkspf7B01mGrrQEiCW6TobtViJ9RWL0EmOs/WnBsZDsI/Y2IoSHZA2x6offu0sYw==", "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^27.0.6", "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.1" + "pretty-format": "^27.2.0" } }, "jest-docblock": { @@ -14685,30 +14686,30 @@ } }, "jest-each": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.1.1.tgz", - "integrity": "sha512-r6hOsTLavUBb1xN0uDa89jdDeBmJ+K49fWpbyxeGRA2pLY46PlC4z551/cWNQzrj+IUa5/gSRsCIV/01HdNPug==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.0.tgz", + "integrity": "sha512-biDmmUQjg+HZOB7MfY2RHSFL3j418nMoC3TK3pGAj880fQQSxvQe1y2Wy23JJJNUlk6YXiGU0yWy86Le1HBPmA==", "dev": true, "requires": { "@jest/types": "^27.1.1", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", - "jest-util": "^27.1.1", - "pretty-format": "^27.1.1" + "jest-util": "^27.2.0", + "pretty-format": "^27.2.0" } }, "jest-environment-jsdom": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.1.1.tgz", - "integrity": "sha512-6vOnoZ6IaExuw7FvnuJhA1qFYv1DDSnN0sQowzolNwxQp7bG1YhLxj2YU1sVXAYA3IR3MbH2mbnJUsLUWfyfzw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.0.tgz", + "integrity": "sha512-wNQJi6Rd/AkUWqTc4gWhuTIFPo7tlMK0RPZXeM6AqRHZA3D3vwvTa9ktAktyVyWYmUoXdYstOfyYMG3w4jt7eA==", "dev": true, "requires": { - "@jest/environment": "^27.1.1", - "@jest/fake-timers": "^27.1.1", + "@jest/environment": "^27.2.0", + "@jest/fake-timers": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1", - "jest-util": "^27.1.1", + "jest-util": "^27.2.0", "jsdom": "^16.6.0" }, "dependencies": { @@ -14795,17 +14796,17 @@ } }, "jest-environment-node": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.1.1.tgz", - "integrity": "sha512-OEGeZh0PwzngNIYWYgWrvTcLygopV8OJbC9HNb0j70VBKgEIsdZkYhwcFnaURX83OHACMqf1pa9Tv5Pw5jemrg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.0.tgz", + "integrity": "sha512-WbW+vdM4u88iy6Q3ftUEQOSgMPtSgjm3qixYYK2AKEuqmFO2zmACTw1vFUB0qI/QN88X6hA6ZkVKIdIWWzz+yg==", "dev": true, "requires": { - "@jest/environment": "^27.1.1", - "@jest/fake-timers": "^27.1.1", + "@jest/environment": "^27.2.0", + "@jest/fake-timers": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1", - "jest-util": "^27.1.1" + "jest-util": "^27.2.0" } }, "jest-get-type": { @@ -14815,9 +14816,9 @@ "dev": true }, "jest-haste-map": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.1.1.tgz", - "integrity": "sha512-NGLYVAdh5C8Ezg5QBFzrNeYsfxptDBPlhvZNaicLiZX77F/rS27a9M6u9ripWAaaD54xnWdZNZpEkdjD5Eo5aQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.0.tgz", + "integrity": "sha512-laFet7QkNlWjwZtMGHCucLvF8o9PAh2cgePRck1+uadSM4E4XH9J4gnx4do+a6do8ZV5XHNEAXEkIoNg5XUH2Q==", "dev": true, "requires": { "@jest/types": "^27.1.1", @@ -14829,64 +14830,64 @@ "graceful-fs": "^4.2.4", "jest-regex-util": "^27.0.6", "jest-serializer": "^27.0.6", - "jest-util": "^27.1.1", - "jest-worker": "^27.1.1", + "jest-util": "^27.2.0", + "jest-worker": "^27.2.0", "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.1.1.tgz", - "integrity": "sha512-0LAzUmcmvQwjIdJt0cXUVX4G5qjVXE8ELt6nbMNDzv2yAs2hYCCUtQq+Eje70GwAysWCGcS64QeYj5VPHYVxPg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.0.tgz", + "integrity": "sha512-NcPzZBk6IkDW3Z2V8orGueheGJJYfT5P0zI/vTO/Jp+R9KluUdgFrgwfvZ0A34Kw6HKgiWFILZmh3oQ/eS+UxA==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.1.1", + "@jest/environment": "^27.2.0", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.1.1", + "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.1.1", + "expect": "^27.2.0", "is-generator-fn": "^2.0.0", - "jest-each": "^27.1.1", - "jest-matcher-utils": "^27.1.1", - "jest-message-util": "^27.1.1", - "jest-runtime": "^27.1.1", - "jest-snapshot": "^27.1.1", - "jest-util": "^27.1.1", - "pretty-format": "^27.1.1", + "jest-each": "^27.2.0", + "jest-matcher-utils": "^27.2.0", + "jest-message-util": "^27.2.0", + "jest-runtime": "^27.2.0", + "jest-snapshot": "^27.2.0", + "jest-util": "^27.2.0", + "pretty-format": "^27.2.0", "throat": "^6.0.1" } }, "jest-leak-detector": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.1.1.tgz", - "integrity": "sha512-gwSgzmqShoeEsEVpgObymQPrM9P6557jt1EsFW5aCeJ46Cme0EdjYU7xr6llQZ5GpWDl56eOstUaPXiZOfiTKw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.0.tgz", + "integrity": "sha512-e91BIEmbZw5+MHkB4Hnrq7S86coTxUMCkz4n7DLmQYvl9pEKmRx9H/JFH87bBqbIU5B2Ju1soKxRWX6/eGFGpA==", "dev": true, "requires": { "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.1" + "pretty-format": "^27.2.0" } }, "jest-matcher-utils": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.1.1.tgz", - "integrity": "sha512-Q1a10w9Y4sh0wegkdP6reQOa/Dtz7nAvDqBgrat1ItZAUvk4jzXAqyhXPu/ZuEtDaXaNKpdRPRQA8bvkOh2Eaw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.0.tgz", + "integrity": "sha512-F+LG3iTwJ0gPjxBX6HCyrARFXq6jjiqhwBQeskkJQgSLeF1j6ui1RTV08SR7O51XTUhtc8zqpDj8iCG4RGmdKw==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.1.1", + "jest-diff": "^27.2.0", "jest-get-type": "^27.0.6", - "pretty-format": "^27.1.1" + "pretty-format": "^27.2.0" } }, "jest-message-util": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.1.1.tgz", - "integrity": "sha512-b697BOJV93+AVGvzLRtVZ0cTVRbd59OaWnbB2D75GRaIMc4I+Z9W0wHxbfjW01JWO+TqqW4yevT0aN7Fd0XWng==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.0.tgz", + "integrity": "sha512-y+sfT/94CiP8rKXgwCOzO1mUazIEdEhrLjuiu+RKmCP+8O/TJTSne9dqQRbFIHBtlR2+q7cddJlWGir8UATu5w==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", @@ -14895,7 +14896,7 @@ "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.1.1", + "pretty-format": "^27.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -14935,44 +14936,44 @@ "dev": true }, "jest-resolve": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.1.1.tgz", - "integrity": "sha512-M41YFmWhvDVstwe7XuV21zynOiBLJB5Sk0GrIsYYgTkjfEWNLVXDjAyq1W7PHseaYNOxIc0nOGq/r5iwcZNC1A==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.0.tgz", + "integrity": "sha512-v09p9Ib/VtpHM6Cz+i9lEAv1Z/M5NVxsyghRHRMEUOqwPQs3zwTdwp1xS3O/k5LocjKiGS0OTaJoBSpjbM2Jlw==", "dev": true, "requires": { "@jest/types": "^27.1.1", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.1", + "jest-haste-map": "^27.2.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.1.1", - "jest-validate": "^27.1.1", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", "resolve": "^1.20.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.1.tgz", - "integrity": "sha512-sYZR+uBjFDCo4VhYeazZf/T+ryYItvdLKu9vHatqkUqHGjDMrdEPOykiqC2iEpaCFTS+3iL/21CYiJuKdRbniw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.0.tgz", + "integrity": "sha512-EY5jc/Y0oxn+oVEEldTidmmdVoZaknKPyDORA012JUdqPyqPL+lNdRyI3pGti0RCydds6coaw6xt4JQY54dKsg==", "dev": true, "requires": { "@jest/types": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.1.1" + "jest-snapshot": "^27.2.0" } }, "jest-runner": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.1.1.tgz", - "integrity": "sha512-lP3MBNQhg75/sQtVkC8dsAQZumvy3lHK/YIwYPfEyqGIX1qEcnYIRxP89q0ZgC5ngvi1vN2P5UFHszQxguWdng==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.0.tgz", + "integrity": "sha512-Cl+BHpduIc0cIVTjwoyx0pQk4Br8gn+wkr35PmKCmzEdOUnQ2wN7QVXA8vXnMQXSlFkN/+KWnk20TAVBmhgrww==", "dev": true, "requires": { - "@jest/console": "^27.1.1", - "@jest/environment": "^27.1.1", - "@jest/test-result": "^27.1.1", - "@jest/transform": "^27.1.1", + "@jest/console": "^27.2.0", + "@jest/environment": "^27.2.0", + "@jest/test-result": "^27.2.0", + "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", @@ -14980,32 +14981,32 @@ "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.1.1", - "jest-environment-node": "^27.1.1", - "jest-haste-map": "^27.1.1", - "jest-leak-detector": "^27.1.1", - "jest-message-util": "^27.1.1", - "jest-resolve": "^27.1.1", - "jest-runtime": "^27.1.1", - "jest-util": "^27.1.1", - "jest-worker": "^27.1.1", + "jest-environment-jsdom": "^27.2.0", + "jest-environment-node": "^27.2.0", + "jest-haste-map": "^27.2.0", + "jest-leak-detector": "^27.2.0", + "jest-message-util": "^27.2.0", + "jest-resolve": "^27.2.0", + "jest-runtime": "^27.2.0", + "jest-util": "^27.2.0", + "jest-worker": "^27.2.0", "source-map-support": "^0.5.6", "throat": "^6.0.1" } }, "jest-runtime": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.1.1.tgz", - "integrity": "sha512-FEwy+tSzmsvuKaQpyYsUyk31KG5vMmA2r2BSTHgv0yNfcooQdm2Ke91LM9Ud8D3xz8CLDHJWAI24haMFTwrsPg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.0.tgz", + "integrity": "sha512-6gRE9AVVX49hgBbWQ9PcNDeM4upMUXzTpBs0kmbrjyotyUyIJixLPsYjpeTFwAA07PVLDei1iAm2chmWycdGdQ==", "dev": true, "requires": { - "@jest/console": "^27.1.1", - "@jest/environment": "^27.1.1", - "@jest/fake-timers": "^27.1.1", - "@jest/globals": "^27.1.1", + "@jest/console": "^27.2.0", + "@jest/environment": "^27.2.0", + "@jest/fake-timers": "^27.2.0", + "@jest/globals": "^27.2.0", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.1.1", - "@jest/transform": "^27.1.1", + "@jest/test-result": "^27.2.0", + "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", @@ -15015,14 +15016,14 @@ "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.1.1", - "jest-message-util": "^27.1.1", + "jest-haste-map": "^27.2.0", + "jest-message-util": "^27.2.0", "jest-mock": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.1.1", - "jest-snapshot": "^27.1.1", - "jest-util": "^27.1.1", - "jest-validate": "^27.1.1", + "jest-resolve": "^27.2.0", + "jest-snapshot": "^27.2.0", + "jest-util": "^27.2.0", + "jest-validate": "^27.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" @@ -15039,9 +15040,9 @@ } }, "jest-snapshot": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.1.1.tgz", - "integrity": "sha512-Wi3QGiuRFo3lU+EbQmZnBOks0CJyAMPHvYoG7iJk00Do10jeOyuOEO0Jfoaoun8+8TDv+Nzl7Aswir/IK9+1jg==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.0.tgz", + "integrity": "sha512-MukJvy3KEqemCT2FoT3Gum37CQqso/62PKTfIzWmZVTsLsuyxQmJd2PI5KPcBYFqLlA8LgZLHM8ZlazkVt8LsQ==", "dev": true, "requires": { "@babel/core": "^7.7.2", @@ -15050,23 +15051,23 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.1.1", + "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.1.1", + "expect": "^27.2.0", "graceful-fs": "^4.2.4", - "jest-diff": "^27.1.1", + "jest-diff": "^27.2.0", "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.1.1", - "jest-matcher-utils": "^27.1.1", - "jest-message-util": "^27.1.1", - "jest-resolve": "^27.1.1", - "jest-util": "^27.1.1", + "jest-haste-map": "^27.2.0", + "jest-matcher-utils": "^27.2.0", + "jest-message-util": "^27.2.0", + "jest-resolve": "^27.2.0", + "jest-util": "^27.2.0", "natural-compare": "^1.4.0", - "pretty-format": "^27.1.1", + "pretty-format": "^27.2.0", "semver": "^7.3.2" }, "dependencies": { @@ -15082,9 +15083,9 @@ } }, "jest-util": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.1.1.tgz", - "integrity": "sha512-zf9nEbrASWn2mC/L91nNb0K+GkhFvi4MP6XJG2HqnHzHvLYcs7ou/In68xYU1i1dSkJlrWcYfWXQE8nVR+nbOA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.0.tgz", + "integrity": "sha512-T5ZJCNeFpqcLBpx+Hl9r9KoxBCUqeWlJ1Htli+vryigZVJ1vuLB9j35grEBASp4R13KFkV7jM52bBGnArpJN6A==", "dev": true, "requires": { "@jest/types": "^27.1.1", @@ -15096,9 +15097,9 @@ } }, "jest-validate": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.1.1.tgz", - "integrity": "sha512-N5Er5FKav/8m2dJwn7BGnZwnoD1BSc8jx5T+diG2OvyeugvZDhPeAt5DrNaGkkaKCrSUvuE7A5E4uHyT7Vj0Mw==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.0.tgz", + "integrity": "sha512-uIEZGkFKk3+4liA81Xu0maG5aGDyPLdp+4ed244c+Ql0k3aLWQYcMbaMLXOIFcb83LPHzYzqQ8hwNnIxTqfAGQ==", "dev": true, "requires": { "@jest/types": "^27.1.1", @@ -15106,7 +15107,7 @@ "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "leven": "^3.1.0", - "pretty-format": "^27.1.1" + "pretty-format": "^27.2.0" }, "dependencies": { "camelcase": { @@ -15118,24 +15119,24 @@ } }, "jest-watcher": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.1.1.tgz", - "integrity": "sha512-XQzyHbxziDe+lZM6Dzs40fEt4q9akOGwitJnxQasJ9WG0bv3JGiRlsBgjw13znGapeMtFaEsyhL0Cl04IbaoWQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.0.tgz", + "integrity": "sha512-SjRWhnr+qO8aBsrcnYIyF+qRxNZk6MZH8TIDgvi+VlsyrvOyqg0d+Rm/v9KHiTtC9mGGeFi9BFqgavyWib6xLg==", "dev": true, "requires": { - "@jest/test-result": "^27.1.1", + "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.1.1", + "jest-util": "^27.2.0", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.1.tgz", - "integrity": "sha512-XJKCL7tu+362IUYTWvw8+3S75U7qMiYiRU6u5yqscB48bTvzwN6i8L/7wVTXiFLwkRsxARNM7TISnTvcgv9hxA==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.0.tgz", + "integrity": "sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA==", "dev": true, "requires": { "@types/node": "*", @@ -16440,9 +16441,9 @@ "devOptional": true }, "prettier": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz", - "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", "dev": true }, "prettier-linter-helpers": { @@ -16455,9 +16456,9 @@ } }, "pretty-format": { - "version": "27.1.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.1.1.tgz", - "integrity": "sha512-zdBi/xlstKJL42UH7goQti5Hip/B415w1Mfj+WWWYMBylAYtKESnXGUtVVcMVid9ReVjypCotUV6CEevYPHv2g==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.0.tgz", + "integrity": "sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA==", "dev": true, "requires": { "@jest/types": "^27.1.1", @@ -17456,12 +17457,13 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.4.tgz", + "integrity": "sha512-ERg+H//lSSYlZhBIUu+wJnqg30AbyBbpZlIhcshpn7BNzpoRODZgfyr9J+8ERf3ooC6af3u7Lcl01nleau7MrA==", "dev": true, "requires": { - "escape-string-regexp": "^2.0.0" + "escape-string-regexp": "^2.0.0", + "source-map-support": "^0.5.20" }, "dependencies": { "escape-string-regexp": { diff --git a/package.json b/package.json index 833010d1..5d15a245 100644 --- a/package.json +++ b/package.json @@ -52,11 +52,11 @@ "eslint-plugin-prettier": "^4.0.0", "express-basic-auth": "^1.2.0", "husky": "^7.0.2", - "jest": "^27.1.1", + "jest": "^27.2.0", "jsdom": "^17.0.0", "lodash": "^4.17.21", "nyc": "^15.1.0", - "prettier": "^2.4.0", + "prettier": "^2.4.1", "pretty-quick": "^3.1.1", "sinon": "^11.1.2", "spectron": "^15.0.0", @@ -67,7 +67,7 @@ "suncalc": "^1.8.0" }, "optionalDependencies": { - "electron": "^13.3.0" + "electron": "^13.4.0" }, "dependencies": { "colors": "^1.4.0", From c3c5307624232c2b539cb985233c63b4af6aa741 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Fri, 17 Sep 2021 20:03:57 +0200 Subject: [PATCH 109/134] fix basic-auth.js --- tests/electron/modules/basic-auth.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/electron/modules/basic-auth.js b/tests/electron/modules/basic-auth.js index a8b5b6d6..fc08ae40 100644 --- a/tests/electron/modules/basic-auth.js +++ b/tests/electron/modules/basic-auth.js @@ -12,7 +12,7 @@ app.use(basicAuth); // Set available directories const directories = ["/tests/configs"]; -const rootPath = path.resolve(__dirname + "/../../"); +const rootPath = path.resolve(__dirname + "/../../../"); for (let directory of directories) { app.use(directory, express.static(path.resolve(rootPath + directory))); From b4350278a073c364bb6f1af2f35a06e2c740e4dd Mon Sep 17 00:00:00 2001 From: karsten13 Date: Tue, 21 Sep 2021 23:48:29 +0200 Subject: [PATCH 110/134] first tests --- js/logger.js | 4 ++-- package.json | 3 +++ tests/configs/modules/display.js | 14 ++++++------ tests/e2e/mock-console.js | 9 ++++++++ tests/e2e/modules.js | 37 ++++++++++++++++++++++++++++++++ 5 files changed, 59 insertions(+), 8 deletions(-) create mode 100644 tests/e2e/mock-console.js create mode 100644 tests/e2e/modules.js diff --git a/js/logger.js b/js/logger.js index d469e702..16e310e8 100644 --- a/js/logger.js +++ b/js/logger.js @@ -35,8 +35,8 @@ groupCollapsed: Function.prototype.bind.call(console.groupCollapsed, console), groupEnd: Function.prototype.bind.call(console.groupEnd, console), time: Function.prototype.bind.call(console.time, console), - timeEnd: Function.prototype.bind.call(console.timeEnd, console), - timeStamp: Function.prototype.bind.call(console.timeStamp, console) + timeEnd: Function.prototype.bind.call(console.timeEnd, console) + // timeStamp: Function.prototype.bind.call(console.timeStamp, console) }; logLevel.setLogLevel = function (newLevel) { diff --git a/package.json b/package.json index 5d15a245..601fe53b 100644 --- a/package.json +++ b/package.json @@ -120,6 +120,9 @@ }, { "displayName": "e2e", + "setupFilesAfterEnv": [ + "/tests/e2e/mock-console.js" + ], "testMatch": [ "**/tests/e2e/**/*.[jt]s?(x)" ], diff --git a/tests/configs/modules/display.js b/tests/configs/modules/display.js index 070dc9e5..b9facce3 100644 --- a/tests/configs/modules/display.js +++ b/tests/configs/modules/display.js @@ -3,7 +3,13 @@ * By Rejas * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", + timeFormat: 24, + units: "metric", + modules: [ { module: "helloworld", @@ -21,11 +27,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); - -config.electronOptions.fullscreen = false; -config.electronOptions.width = 800; -config.electronOptions.height = 600; +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/e2e/mock-console.js b/tests/e2e/mock-console.js new file mode 100644 index 00000000..2d6751cd --- /dev/null +++ b/tests/e2e/mock-console.js @@ -0,0 +1,9 @@ +global.console = { + log: console.log, + dir: console.dir, + // error: jest.fn(), + error: console.error, + warn: console.warn, + info: console.info, + debug: console.debug +}; diff --git a/tests/e2e/modules.js b/tests/e2e/modules.js new file mode 100644 index 00000000..e4856a52 --- /dev/null +++ b/tests/e2e/modules.js @@ -0,0 +1,37 @@ +const jsdom = require("jsdom"); +const fetch = require("node-fetch"); +const helpers = require("./global-setup"); +let app = null; + +describe("test headers", function () { + beforeAll(function () { + // todo: require is not defined ... + // jest.mock("logger"); + app = helpers.startApplication("tests/configs/modules/display.js"); + // app = helpers.startApplication("config/config.js"); + }); + afterAll(function () { + helpers.stopApplication(app); + }); + + it("test", function (done) { + jsdom.JSDOM.fromURL("http://localhost:8080", { resources: "usable", runScripts: "dangerously" }).then((dom) => { + // console.log(dom.serialize()); + dom.window.onload = function () { + const doc = dom.window.document; + console.log(doc.querySelector("title").textContent); + const children = doc.body.getElementsByTagName("*"); + for (var i = 0, length = children.length; i < length; i++) { + child = children[i]; + if (child.id !== "") console.dir(child.id); + } + console.log(doc.querySelector("#module_0_helloworld .module-header").textContent); + // result ist leider lowercase wegen fehlendem css, siehe https://stackoverflow.com/questions/10318330/how-do-you-add-stylesheets-to-jsdom + // const elem = doc.getElementById("module_0_helloworld"); + // console.dir(elem); + done(); + }; + }); + // done(); + }); +}); From 60f8de282db9726f02105f0f3a99ec7a9592359b Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 23 Sep 2021 00:05:30 +0200 Subject: [PATCH 111/134] snapshot --- tests/e2e/mock-console.js | 21 +++++++----- tests/e2e/modules.js | 70 ++++++++++++++++++++++----------------- 2 files changed, 52 insertions(+), 39 deletions(-) diff --git a/tests/e2e/mock-console.js b/tests/e2e/mock-console.js index 2d6751cd..8cc246f8 100644 --- a/tests/e2e/mock-console.js +++ b/tests/e2e/mock-console.js @@ -1,9 +1,14 @@ -global.console = { - log: console.log, - dir: console.dir, - // error: jest.fn(), - error: console.error, - warn: console.warn, - info: console.info, - debug: console.debug +function myError(err) { + //console.dir(err); + if (err.includes("ECONNREFUSED")) { jest.fn() } else { console.dir(err) }; +}; + +global.console = { + log: jest.fn(), + dir: console.dir, + error: myError, +// error: console.error, + warn: console.warn, + info: jest.fn(), + debug: console.debug }; diff --git a/tests/e2e/modules.js b/tests/e2e/modules.js index e4856a52..227fd98f 100644 --- a/tests/e2e/modules.js +++ b/tests/e2e/modules.js @@ -1,37 +1,45 @@ const jsdom = require("jsdom"); -const fetch = require("node-fetch"); +// const fetch = require("node-fetch"); const helpers = require("./global-setup"); let app = null; -describe("test headers", function () { - beforeAll(function () { - // todo: require is not defined ... - // jest.mock("logger"); - app = helpers.startApplication("tests/configs/modules/display.js"); - // app = helpers.startApplication("config/config.js"); - }); - afterAll(function () { - helpers.stopApplication(app); - }); +describe("Display of modules", function () { + beforeAll(function () { + // todo: require is not defined ... + // jest.mock("logger"); + app = helpers.startApplication("tests/configs/modules/display.js"); + // app = helpers.startApplication("config/config.js"); + }); + afterAll(function () { + helpers.stopApplication(app); + }); - it("test", function (done) { - jsdom.JSDOM.fromURL("http://localhost:8080", { resources: "usable", runScripts: "dangerously" }).then((dom) => { - // console.log(dom.serialize()); - dom.window.onload = function () { - const doc = dom.window.document; - console.log(doc.querySelector("title").textContent); - const children = doc.body.getElementsByTagName("*"); - for (var i = 0, length = children.length; i < length; i++) { - child = children[i]; - if (child.id !== "") console.dir(child.id); - } - console.log(doc.querySelector("#module_0_helloworld .module-header").textContent); - // result ist leider lowercase wegen fehlendem css, siehe https://stackoverflow.com/questions/10318330/how-do-you-add-stylesheets-to-jsdom - // const elem = doc.getElementById("module_0_helloworld"); - // console.dir(elem); - done(); - }; - }); - // done(); - }); + it("should show the test header", function (done) { + jsdom.JSDOM.fromURL("http://localhost:8080", { resources: "usable", runScripts: "dangerously" }).then((dom) => { + // console.log(dom.serialize()); + dom.window.onload = function () { + const doc = dom.window.document; + let elem = doc.querySelector("title"); + expect(elem).not.toBe(null); + expect(elem.textContent).toBe("MagicMirror²"); +/* + const children = doc.body.getElementsByTagName("*"); + for (var i = 0, length = children.length; i < length; i++) { + child = children[i]; + if (child.id !== "") console.dir(child.id); + } +*/ + elem = doc.querySelector("#module_0_helloworld .module-header"); + expect(elem).not.toBe(null); + expect(elem.textContent).toBe("test_header"); + //result ist leider lowercase wegen fehlendem css, siehe https://stackoverflow.com/questions/10318330/how-do-you-add-stylesheets-to-jsdom + elem = doc.querySelector("#module_1_helloworld .module-header"); + expect(elem).not.toBe(null); + expect(elem.textContent).toBe("undefined"); + + //dom.window.close(); + done(); + }; + }); + }); }); From 54b04962a8e3c72d3b9ca2ef422e704a2cd04743 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 23 Sep 2021 22:52:32 +0200 Subject: [PATCH 112/134] snapshot --- .github/workflows/node-ci.js.yml | 1 + tests/e2e/global-setup.js | 11 ++++++++ tests/e2e/mock-console.js | 22 ++++++++------- tests/e2e/modules.js | 45 ------------------------------- tests/e2e/modules_display_spec.js | 25 +++++++++++++++++ 5 files changed, 49 insertions(+), 55 deletions(-) delete mode 100644 tests/e2e/modules.js create mode 100644 tests/e2e/modules_display_spec.js diff --git a/.github/workflows/node-ci.js.yml b/.github/workflows/node-ci.js.yml index 3a7391c2..258cf83d 100644 --- a/.github/workflows/node-ci.js.yml +++ b/.github/workflows/node-ci.js.yml @@ -26,6 +26,7 @@ jobs: Xvfb :99 -screen 0 1024x768x16 & export DISPLAY=:99 npm install + touch css/custom.css npm run test:prettier npm run test:js npm run test:css diff --git a/tests/e2e/global-setup.js b/tests/e2e/global-setup.js index 1f9bce3b..a8b0278f 100644 --- a/tests/e2e/global-setup.js +++ b/tests/e2e/global-setup.js @@ -1,3 +1,5 @@ +const jsdom = require("jsdom"); + exports.startApplication = function (configFilename, exec) { jest.resetModules(); // Set config sample for use in test @@ -14,3 +16,12 @@ exports.stopApplication = function (app) { app.stop(); } }; + +exports.getDocument = function (url, callback) { + jsdom.JSDOM.fromURL(url, { resources: "usable", runScripts: "dangerously" }).then((dom) => { + dom.window.onload = function () { + global.document = dom.window.document; + callback(); + }; + }); +}; diff --git a/tests/e2e/mock-console.js b/tests/e2e/mock-console.js index 8cc246f8..a1ccfa55 100644 --- a/tests/e2e/mock-console.js +++ b/tests/e2e/mock-console.js @@ -1,14 +1,16 @@ function myError(err) { - //console.dir(err); - if (err.includes("ECONNREFUSED")) { jest.fn() } else { console.dir(err) }; -}; + if (err.includes("ECONNREFUSED")) { + jest.fn(); + } else { + console.dir(err); + } +} global.console = { - log: jest.fn(), - dir: console.dir, - error: myError, -// error: console.error, - warn: console.warn, - info: jest.fn(), - debug: console.debug + log: jest.fn(), + dir: console.dir, + error: myError, + warn: console.warn, + info: jest.fn(), + debug: console.debug }; diff --git a/tests/e2e/modules.js b/tests/e2e/modules.js deleted file mode 100644 index 227fd98f..00000000 --- a/tests/e2e/modules.js +++ /dev/null @@ -1,45 +0,0 @@ -const jsdom = require("jsdom"); -// const fetch = require("node-fetch"); -const helpers = require("./global-setup"); -let app = null; - -describe("Display of modules", function () { - beforeAll(function () { - // todo: require is not defined ... - // jest.mock("logger"); - app = helpers.startApplication("tests/configs/modules/display.js"); - // app = helpers.startApplication("config/config.js"); - }); - afterAll(function () { - helpers.stopApplication(app); - }); - - it("should show the test header", function (done) { - jsdom.JSDOM.fromURL("http://localhost:8080", { resources: "usable", runScripts: "dangerously" }).then((dom) => { - // console.log(dom.serialize()); - dom.window.onload = function () { - const doc = dom.window.document; - let elem = doc.querySelector("title"); - expect(elem).not.toBe(null); - expect(elem.textContent).toBe("MagicMirror²"); -/* - const children = doc.body.getElementsByTagName("*"); - for (var i = 0, length = children.length; i < length; i++) { - child = children[i]; - if (child.id !== "") console.dir(child.id); - } -*/ - elem = doc.querySelector("#module_0_helloworld .module-header"); - expect(elem).not.toBe(null); - expect(elem.textContent).toBe("test_header"); - //result ist leider lowercase wegen fehlendem css, siehe https://stackoverflow.com/questions/10318330/how-do-you-add-stylesheets-to-jsdom - elem = doc.querySelector("#module_1_helloworld .module-header"); - expect(elem).not.toBe(null); - expect(elem.textContent).toBe("undefined"); - - //dom.window.close(); - done(); - }; - }); - }); -}); diff --git a/tests/e2e/modules_display_spec.js b/tests/e2e/modules_display_spec.js new file mode 100644 index 00000000..1264ad5a --- /dev/null +++ b/tests/e2e/modules_display_spec.js @@ -0,0 +1,25 @@ +const helpers = require("./global-setup"); +let app = null; + +describe("Display of modules", function () { + beforeAll(function (done) { + app = helpers.startApplication("tests/configs/modules/display.js"); + helpers.getDocument("http://localhost:8080", done); + }); + afterAll(function () { + helpers.stopApplication(app); + }); + + it("should show the test header", function () { + elem = document.querySelector("#module_0_helloworld .module-header"); + expect(elem).not.toBe(null); + expect(elem.textContent).toBe("test_header"); + //result ist leider lowercase wegen fehlendem css, siehe https://stackoverflow.com/questions/10318330/how-do-you-add-stylesheets-to-jsdom + }); + + it("should show no header if no header text is specified", function () { + elem = document.querySelector("#module_1_helloworld .module-header"); + expect(elem).not.toBe(null); + expect(elem.textContent).toBe("undefined"); + }); +}); From 0ef6f89d441f65002dc592a6c9a97faeb3b9d743 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Fri, 24 Sep 2021 00:30:00 +0200 Subject: [PATCH 113/134] fix server.close() issue --- js/server.js | 11 +++++++++++ tests/e2e/modules_display_spec.js | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/js/server.js b/js/server.js index 35071091..92607d39 100644 --- a/js/server.js +++ b/js/server.js @@ -23,6 +23,7 @@ const Utils = require("./utils.js"); */ function Server(config, callback) { const port = process.env.MM_PORT || config.port; + const serverSockets = new Set(); let server = null; if (config.useHttps) { @@ -42,6 +43,13 @@ function Server(config, callback) { allowEIO3: true }); + server.on("connection", (socket) => { + serverSockets.add(socket); + socket.on("close", () => { + serverSockets.delete(socket); + }); + }); + Log.log(`Starting server on port ${port} ... `); server.listen(port, config.address || "localhost"); @@ -94,6 +102,9 @@ function Server(config, callback) { } this.close = function () { + for (const socket of serverSockets.values()) { + socket.destroy(); + } server.close(); }; } diff --git a/tests/e2e/modules_display_spec.js b/tests/e2e/modules_display_spec.js index 1264ad5a..865748cd 100644 --- a/tests/e2e/modules_display_spec.js +++ b/tests/e2e/modules_display_spec.js @@ -13,8 +13,8 @@ describe("Display of modules", function () { it("should show the test header", function () { elem = document.querySelector("#module_0_helloworld .module-header"); expect(elem).not.toBe(null); + // textContent gibt hier lowercase zurück, das uppercase wird durch css realisiert, was daher nicht in textContent landet expect(elem.textContent).toBe("test_header"); - //result ist leider lowercase wegen fehlendem css, siehe https://stackoverflow.com/questions/10318330/how-do-you-add-stylesheets-to-jsdom }); it("should show no header if no header text is specified", function () { From a1c7f2099021fd3c587cff35dadeea23dc727a7e Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Fri, 24 Sep 2021 21:30:51 +0200 Subject: [PATCH 114/134] fix logger.js, move jsdom in startApplication --- js/logger.js | 15 ++++++++++++--- package.json | 3 ++- tests/e2e/global-setup.js | 22 ++++++++++++---------- tests/e2e/modules_display_spec.js | 3 +-- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/js/logger.js b/js/logger.js index 16e310e8..7434ccd2 100644 --- a/js/logger.js +++ b/js/logger.js @@ -24,7 +24,16 @@ } })(this, function (config) { let logLevel; - if ((typeof exports === "object" && process.env.JEST_WORKER_ID === undefined) || typeof exports !== "object") { + let enableLog; + if (typeof exports === "object") { + // in nodejs and not running with jest + enableLog = (process.env.JEST_WORKER_ID === undefined); + } else { + // in browser and not running with jsdom + enableLog = (typeof window === 'object' && window.name === 'nodejs'); + }; + + if (enableLog) { logLevel = { debug: Function.prototype.bind.call(console.debug, console), log: Function.prototype.bind.call(console.log, console), @@ -35,8 +44,8 @@ groupCollapsed: Function.prototype.bind.call(console.groupCollapsed, console), groupEnd: Function.prototype.bind.call(console.groupEnd, console), time: Function.prototype.bind.call(console.time, console), - timeEnd: Function.prototype.bind.call(console.timeEnd, console) - // timeStamp: Function.prototype.bind.call(console.timeStamp, console) + timeEnd: Function.prototype.bind.call(console.timeEnd, console), + timeStamp: Function.prototype.bind.call(console.timeStamp, console) }; logLevel.setLogLevel = function (newLevel) { diff --git a/package.json b/package.json index 601fe53b..01d7ee42 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,8 @@ "/js/" ], "testPathIgnorePatterns": [ - "/tests/e2e/global-setup.js" + "/tests/e2e/global-setup.js", + "/tests/e2e/mock-console.js" ] } ] diff --git a/tests/e2e/global-setup.js b/tests/e2e/global-setup.js index a8b0278f..415e946d 100644 --- a/tests/e2e/global-setup.js +++ b/tests/e2e/global-setup.js @@ -1,6 +1,7 @@ const jsdom = require("jsdom"); +const config = require("../configs/empty_ipWhiteList"); -exports.startApplication = function (configFilename, exec) { +exports.startApplication = function (configFilename, exec, callback) { jest.resetModules(); // Set config sample for use in test process.env.MM_CONFIG_FILE = configFilename; @@ -8,6 +9,16 @@ exports.startApplication = function (configFilename, exec) { const app = require("app.js"); app.start(); + if (callback) { + const url = "http://" + (config.address || "localhost") + ":" + (config.port || "8080"); + jsdom.JSDOM.fromURL(url, { resources: "usable", runScripts: "dangerously" }).then((dom) => { + dom.window.onload = function () { + global.document = dom.window.document; + callback(); + }; + }); + }; + return app; }; @@ -16,12 +27,3 @@ exports.stopApplication = function (app) { app.stop(); } }; - -exports.getDocument = function (url, callback) { - jsdom.JSDOM.fromURL(url, { resources: "usable", runScripts: "dangerously" }).then((dom) => { - dom.window.onload = function () { - global.document = dom.window.document; - callback(); - }; - }); -}; diff --git a/tests/e2e/modules_display_spec.js b/tests/e2e/modules_display_spec.js index 865748cd..5e07ae19 100644 --- a/tests/e2e/modules_display_spec.js +++ b/tests/e2e/modules_display_spec.js @@ -3,8 +3,7 @@ let app = null; describe("Display of modules", function () { beforeAll(function (done) { - app = helpers.startApplication("tests/configs/modules/display.js"); - helpers.getDocument("http://localhost:8080", done); + app = helpers.startApplication("tests/configs/modules/display.js", null, done); }); afterAll(function () { helpers.stopApplication(app); From c0ce52abe3de3686d448dbace9f0a73fae96cacc Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Fri, 24 Sep 2021 23:39:12 +0200 Subject: [PATCH 115/134] change getDocument, delay needed, now 2 tests moved --- js/logger.js | 6 ++-- tests/configs/modules/positions.js | 10 +++++-- tests/e2e/global-setup.js | 24 +++++++++------- tests/e2e/mock-console.js | 7 ++++- tests/e2e/modules_display_spec.js | 7 +++-- tests/e2e/modules_position_spec.js | 23 +++++++++++++++ tests/electron/modules_display_spec.js | 38 ------------------------- tests/electron/modules_position_spec.js | 38 ------------------------- 8 files changed, 57 insertions(+), 96 deletions(-) create mode 100644 tests/e2e/modules_position_spec.js delete mode 100644 tests/electron/modules_display_spec.js delete mode 100644 tests/electron/modules_position_spec.js diff --git a/js/logger.js b/js/logger.js index 7434ccd2..a42db925 100644 --- a/js/logger.js +++ b/js/logger.js @@ -27,11 +27,11 @@ let enableLog; if (typeof exports === "object") { // in nodejs and not running with jest - enableLog = (process.env.JEST_WORKER_ID === undefined); + enableLog = process.env.JEST_WORKER_ID === undefined; } else { // in browser and not running with jsdom - enableLog = (typeof window === 'object' && window.name === 'nodejs'); - }; + enableLog = typeof window === "object" && window.name === "nodejs"; + } if (enableLog) { logLevel = { diff --git a/tests/configs/modules/positions.js b/tests/configs/modules/positions.js index 479775c8..f4f5c453 100644 --- a/tests/configs/modules/positions.js +++ b/tests/configs/modules/positions.js @@ -3,7 +3,13 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", + timeFormat: 24, + units: "metric", + modules: // Using exotic content. This is why don't accept go to JSON configuration file (function () { @@ -20,7 +26,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } return modules; })() -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/e2e/global-setup.js b/tests/e2e/global-setup.js index 415e946d..72bee653 100644 --- a/tests/e2e/global-setup.js +++ b/tests/e2e/global-setup.js @@ -1,7 +1,7 @@ const jsdom = require("jsdom"); const config = require("../configs/empty_ipWhiteList"); -exports.startApplication = function (configFilename, exec, callback) { +exports.startApplication = function (configFilename, exec) { jest.resetModules(); // Set config sample for use in test process.env.MM_CONFIG_FILE = configFilename; @@ -9,16 +9,6 @@ exports.startApplication = function (configFilename, exec, callback) { const app = require("app.js"); app.start(); - if (callback) { - const url = "http://" + (config.address || "localhost") + ":" + (config.port || "8080"); - jsdom.JSDOM.fromURL(url, { resources: "usable", runScripts: "dangerously" }).then((dom) => { - dom.window.onload = function () { - global.document = dom.window.document; - callback(); - }; - }); - }; - return app; }; @@ -27,3 +17,15 @@ exports.stopApplication = function (app) { app.stop(); } }; + +exports.getDocument = function (callback, ms) { + const url = "http://" + (config.address || "localhost") + ":" + (config.port || "8080"); + jsdom.JSDOM.fromURL(url, { resources: "usable", runScripts: "dangerously" }).then((dom) => { + dom.window.onload = function () { + global.document = dom.window.document; + setTimeout(() => { + callback(); + }, ms); + }; + }); +}; diff --git a/tests/e2e/mock-console.js b/tests/e2e/mock-console.js index a1ccfa55..745a8fbb 100644 --- a/tests/e2e/mock-console.js +++ b/tests/e2e/mock-console.js @@ -1,5 +1,10 @@ +/** + * Suppresses errors concerning web server already shut down. + * + * @param {string} err The error message. + */ function myError(err) { - if (err.includes("ECONNREFUSED")) { + if (err.includes("ECONNREFUSED") || err.includes("ECONNRESET") || err.includes("socket hang up")) { jest.fn(); } else { console.dir(err); diff --git a/tests/e2e/modules_display_spec.js b/tests/e2e/modules_display_spec.js index 5e07ae19..055ff8c1 100644 --- a/tests/e2e/modules_display_spec.js +++ b/tests/e2e/modules_display_spec.js @@ -3,21 +3,22 @@ let app = null; describe("Display of modules", function () { beforeAll(function (done) { - app = helpers.startApplication("tests/configs/modules/display.js", null, done); + app = helpers.startApplication("tests/configs/modules/display.js"); + helpers.getDocument(done); }); afterAll(function () { helpers.stopApplication(app); }); it("should show the test header", function () { - elem = document.querySelector("#module_0_helloworld .module-header"); + const elem = document.querySelector("#module_0_helloworld .module-header"); expect(elem).not.toBe(null); // textContent gibt hier lowercase zurück, das uppercase wird durch css realisiert, was daher nicht in textContent landet expect(elem.textContent).toBe("test_header"); }); it("should show no header if no header text is specified", function () { - elem = document.querySelector("#module_1_helloworld .module-header"); + const elem = document.querySelector("#module_1_helloworld .module-header"); expect(elem).not.toBe(null); expect(elem.textContent).toBe("undefined"); }); diff --git a/tests/e2e/modules_position_spec.js b/tests/e2e/modules_position_spec.js new file mode 100644 index 00000000..c23933b0 --- /dev/null +++ b/tests/e2e/modules_position_spec.js @@ -0,0 +1,23 @@ +const helpers = require("./global-setup"); +let app = null; + +describe("Position of modules", function () { + beforeAll(function (done) { + app = helpers.startApplication("tests/configs/modules/positions.js"); + helpers.getDocument(done, 1000); + }); + afterAll(function () { + helpers.stopApplication(app); + }); + + const positions = ["top_bar", "top_left", "top_center", "top_right", "upper_third", "middle_center", "lower_third", "bottom_left", "bottom_center", "bottom_right", "bottom_bar", "fullscreen_above", "fullscreen_below"]; + + for (const position of positions) { + const className = position.replace("_", "."); + it("should show text in " + position, function () { + const elem = document.querySelector("." + className); + expect(elem).not.toBe(null); + expect(elem.textContent).toContain("Text in " + position); + }); + } +}); diff --git a/tests/electron/modules_display_spec.js b/tests/electron/modules_display_spec.js deleted file mode 100644 index 6132c62f..00000000 --- a/tests/electron/modules_display_spec.js +++ /dev/null @@ -1,38 +0,0 @@ -const helpers = require("./global-setup"); - -describe("Display of modules", function () { - helpers.setupTimeout(this); - - let app = null; - - beforeEach(function () { - return helpers - .startApplication({ - args: ["js/electron.js"] - }) - .then(function (startedApp) { - app = startedApp; - }); - }); - - afterEach(function () { - return helpers.stopApplication(app); - }); - - describe("Using helloworld", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/display.js"; - }); - - it("should show the test header", async () => { - const elem = await app.client.$("#module_0_helloworld .module-header", 10000); - return expect(await elem.getText("#module_0_helloworld .module-header")).toBe("TEST_HEADER"); - }); - - it("should show no header if no header text is specified", async () => { - const elem = await app.client.$("#module_1_helloworld .module-header", 10000); - return expect(await elem.getText("#module_1_helloworld .module-header")).toBe(""); - }); - }); -}); diff --git a/tests/electron/modules_position_spec.js b/tests/electron/modules_position_spec.js deleted file mode 100644 index 7ac1cadd..00000000 --- a/tests/electron/modules_position_spec.js +++ /dev/null @@ -1,38 +0,0 @@ -const helpers = require("./global-setup"); - -describe("Position of modules", function () { - helpers.setupTimeout(this); - - let app = null; - - describe("Using helloworld", function () { - afterAll(function () { - return helpers.stopApplication(app); - }); - - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/positions.js"; - return helpers - .startApplication({ - args: ["js/electron.js"] - }) - .then(function (startedApp) { - app = startedApp; - }); - }); - - const positions = ["top_bar", "top_left", "top_center", "top_right", "upper_third", "middle_center", "lower_third", "bottom_left", "bottom_center", "bottom_right", "bottom_bar", "fullscreen_above", "fullscreen_below"]; - - for (const position of positions) { - const className = position.replace("_", "."); - it("should show text in " + position, function () { - return app.client.$("." + className).then((result) => { - return result.getText("." + className).then((text) => { - return expect(text).toContain("Text in " + position); - }); - }); - }); - } - }); -}); From 89e803ee426d386796990fb0db958fd5f16c292d Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sat, 25 Sep 2021 22:12:53 +0200 Subject: [PATCH 116/134] update without_modules.js and env_spec.js --- tests/configs/without_modules.js | 11 ++++++---- tests/e2e/env_spec.js | 11 ++++++++-- tests/e2e/vendor_spec.js | 2 +- tests/e2e/without_modules.js | 24 +++++++++++++++++++++ tests/electron/without_modules.js | 36 ------------------------------- 5 files changed, 41 insertions(+), 43 deletions(-) create mode 100644 tests/e2e/without_modules.js delete mode 100644 tests/electron/without_modules.js diff --git a/tests/configs/without_modules.js b/tests/configs/without_modules.js index 02b767c0..d84f63b7 100644 --- a/tests/configs/without_modules.js +++ b/tests/configs/without_modules.js @@ -3,10 +3,13 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.10.1"] -}); -delete config.modules; +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.10.1"], + language: "en", + timeFormat: 24, + units: "metric", +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/e2e/env_spec.js b/tests/e2e/env_spec.js index 825da0e6..65dce883 100644 --- a/tests/e2e/env_spec.js +++ b/tests/e2e/env_spec.js @@ -3,8 +3,9 @@ const helpers = require("./global-setup"); let app = null; describe("Electron app environment", function () { - beforeAll(function () { - app = helpers.startApplication("tests/configs/env.js"); + beforeAll(function (done) { + app = helpers.startApplication("tests/configs/default.js"); + helpers.getDocument(done); }); afterAll(function () { helpers.stopApplication(app); @@ -23,4 +24,10 @@ describe("Electron app environment", function () { done(); }); }); + + it("should show the title MagicMirror²", function () { + const elem = document.querySelector("title"); + expect(elem).not.toBe(null); + expect(elem.textContent).toBe("MagicMirror²"); + }); }); diff --git a/tests/e2e/vendor_spec.js b/tests/e2e/vendor_spec.js index e8dcde11..e28f2d84 100644 --- a/tests/e2e/vendor_spec.js +++ b/tests/e2e/vendor_spec.js @@ -4,7 +4,7 @@ let app = null; describe("Vendors", function () { beforeAll(function () { - app = helpers.startApplication("tests/configs/env.js"); + app = helpers.startApplication("tests/configs/default.js"); }); afterAll(function () { helpers.stopApplication(app); diff --git a/tests/e2e/without_modules.js b/tests/e2e/without_modules.js new file mode 100644 index 00000000..dce6c0b2 --- /dev/null +++ b/tests/e2e/without_modules.js @@ -0,0 +1,24 @@ +const helpers = require("./global-setup"); +let app = null; + +describe("Check configuration without modules", function () { + beforeAll(function (done) { + app = helpers.startApplication("tests/configs/without_modules.js"); + helpers.getDocument(done, 1000); + }); + afterAll(function () { + helpers.stopApplication(app); + }); + + it("Show the message MagicMirror title", function () { + const elem = document.querySelector("#module_1_helloworld .module-content"); + expect(elem).not.toBe(null); + expect(elem.textContent).toContain("Magic Mirror2"); + }); + + it("Show the text Michael's website", function () { + const elem = document.querySelector("#module_5_helloworld .module-content"); + expect(elem).not.toBe(null); + expect(elem.textContent).toContain("www.michaelteeuw.nl"); + }); +}); diff --git a/tests/electron/without_modules.js b/tests/electron/without_modules.js deleted file mode 100644 index 0214aed7..00000000 --- a/tests/electron/without_modules.js +++ /dev/null @@ -1,36 +0,0 @@ -const helpers = require("./global-setup"); - -describe("Check configuration without modules", function () { - helpers.setupTimeout(this); - - let app = null; - - beforeEach(function () { - return helpers - .startApplication({ - args: ["js/electron.js"] - }) - .then(function (startedApp) { - app = startedApp; - }); - }); - - afterEach(function () { - return helpers.stopApplication(app); - }); - - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/without_modules.js"; - }); - - it("Show the message MagicMirror title", async function () { - const elem = await app.client.$("#module_1_helloworld .module-content"); - return expect(await elem.getText("#module_1_helloworld .module-content")).toBe("Magic Mirror2"); - }); - - it("Show the text Michael's website", async function () { - const elem = await app.client.$("#module_5_helloworld .module-content"); - return expect(await elem.getText("#module_5_helloworld .module-content")).toBe("www.michaelteeuw.nl"); - }); -}); From 0183d7a0809238d6ceafcb9b4dd577f74b8f1316 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sat, 25 Sep 2021 23:37:37 +0200 Subject: [PATCH 117/134] update modules alert and compliments --- tests/configs/modules/alert/default.js | 10 +- .../compliments/compliments_anytime.js | 8 +- .../modules/compliments/compliments_date.js | 8 +- .../compliments/compliments_only_anytime.js | 8 +- .../compliments/compliments_parts_day.js | 8 +- tests/e2e/compliments_spec.js | 84 ++++++++++++++ tests/e2e/global-setup.js | 8 +- tests/e2e/mock-console.js | 2 +- tests/e2e/modules/alert_spec.js | 18 +++ tests/electron/modules/alert_spec.js | 32 ------ tests/electron/modules/compliments_spec.js | 107 ------------------ 11 files changed, 141 insertions(+), 152 deletions(-) create mode 100644 tests/e2e/compliments_spec.js create mode 100644 tests/e2e/modules/alert_spec.js delete mode 100644 tests/electron/modules/alert_spec.js delete mode 100644 tests/electron/modules/compliments_spec.js diff --git a/tests/configs/modules/alert/default.js b/tests/configs/modules/alert/default.js index b75a41f8..d9c5c968 100644 --- a/tests/configs/modules/alert/default.js +++ b/tests/configs/modules/alert/default.js @@ -3,7 +3,13 @@ * By rejas * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", + timeFormat: 24, + units: "metric", + modules: [ { module: "alert", @@ -13,7 +19,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/compliments/compliments_anytime.js b/tests/configs/modules/compliments/compliments_anytime.js index f6731edf..813bd32c 100644 --- a/tests/configs/modules/compliments/compliments_anytime.js +++ b/tests/configs/modules/compliments/compliments_anytime.js @@ -3,8 +3,12 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", timeFormat: 12, + units: "metric", modules: [ { @@ -20,7 +24,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/compliments/compliments_date.js b/tests/configs/modules/compliments/compliments_date.js index c9549816..bf0ae2da 100644 --- a/tests/configs/modules/compliments/compliments_date.js +++ b/tests/configs/modules/compliments/compliments_date.js @@ -3,8 +3,12 @@ * By Rejas * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", timeFormat: 12, + units: "metric", modules: [ { @@ -21,7 +25,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/compliments/compliments_only_anytime.js b/tests/configs/modules/compliments/compliments_only_anytime.js index d65bc67d..6e52f57e 100644 --- a/tests/configs/modules/compliments/compliments_only_anytime.js +++ b/tests/configs/modules/compliments/compliments_only_anytime.js @@ -3,8 +3,12 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", timeFormat: 12, + units: "metric", modules: [ { @@ -17,7 +21,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/compliments/compliments_parts_day.js b/tests/configs/modules/compliments/compliments_parts_day.js index e490a710..89b06814 100644 --- a/tests/configs/modules/compliments/compliments_parts_day.js +++ b/tests/configs/modules/compliments/compliments_parts_day.js @@ -3,8 +3,12 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", timeFormat: 12, + units: "metric", modules: [ { @@ -19,7 +23,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/e2e/compliments_spec.js b/tests/e2e/compliments_spec.js new file mode 100644 index 00000000..aefb273e --- /dev/null +++ b/tests/e2e/compliments_spec.js @@ -0,0 +1,84 @@ +const helpers = require("../global-setup"); +let app = null; + +doTest = function (complimentsArray) { + let elem = document.querySelector(".compliments"); + expect(elem).not.toBe(null); + elem = document.querySelector(".module-content"); + expect(elem).not.toBe(null); + expect(complimentsArray).toContain(elem.textContent); +}; + +describe("Compliments module", function () { + afterAll(function () { + helpers.stopApplication(app); + }); + + describe("parts of days", function () { + beforeAll(function (done) { + app = helpers.startApplication("tests/configs/modules/compliments/compliments_parts_day.js"); + helpers.getDocument(done, 1000); + }); + + it("if Morning compliments for that part of day", function () { + const hour = new Date().getHours(); + if (hour >= 3 && hour < 12) { + // if morning check + doTest(["Hi", "Good Morning", "Morning test"]); + } + }); + + it("if Afternoon show Compliments for that part of day", function () { + const hour = new Date().getHours(); + if (hour >= 12 && hour < 17) { + // if afternoon check + doTest(["Hello", "Good Afternoon", "Afternoon test"]); + } + }); + + it("if Evening show Compliments for that part of day", function () { + const hour = new Date().getHours(); + if (!(hour >= 3 && hour < 12) && !(hour >= 12 && hour < 17)) { + // if evening check + doTest(["Hello There", "Good Evening", "Evening test"]); + } + }); + }); + + describe("Feature anytime in compliments module", function () { + describe("Set anytime and empty compliments for morning, evening and afternoon ", function () { + beforeAll(function (done) { + app = helpers.startApplication("tests/configs/modules/compliments/compliments_anytime.js"); + helpers.getDocument(done, 1000); + }); + + it("Show anytime because if configure empty parts of day compliments and set anytime compliments", async function () { + doTest(["Anytime here"]); + }); + }); + + describe("Only anytime present in configuration compliments", function () { + beforeAll(function (done) { + app = helpers.startApplication("tests/configs/modules/compliments/compliments_only_anytime.js"); + helpers.getDocument(done, 1000); + }); + + it("Show anytime compliments", async function () { + doTest(["Anytime here"]); + }); + }); + }); + + describe("Feature date in compliments module", function () { + describe("Set date and empty compliments for anytime, morning, evening and afternoon", function () { + beforeAll(function (done) { + app = helpers.startApplication("tests/configs/modules/compliments/compliments_date.js"); + helpers.getDocument(done, 1000); + }); + + it("Show happy new year compliment on new years day", async function () { + doTest(["Happy new year!"]); + }); + }); + }); +}); diff --git a/tests/e2e/global-setup.js b/tests/e2e/global-setup.js index 72bee653..918047fe 100644 --- a/tests/e2e/global-setup.js +++ b/tests/e2e/global-setup.js @@ -3,12 +3,16 @@ const config = require("../configs/empty_ipWhiteList"); exports.startApplication = function (configFilename, exec) { jest.resetModules(); + let app = global.app; + if (app) { + app.stop(); + } // Set config sample for use in test process.env.MM_CONFIG_FILE = configFilename; if (exec) exec; - const app = require("app.js"); + app = require("app.js"); app.start(); - + global.app = app; return app; }; diff --git a/tests/e2e/mock-console.js b/tests/e2e/mock-console.js index 745a8fbb..03402a05 100644 --- a/tests/e2e/mock-console.js +++ b/tests/e2e/mock-console.js @@ -4,7 +4,7 @@ * @param {string} err The error message. */ function myError(err) { - if (err.includes("ECONNREFUSED") || err.includes("ECONNRESET") || err.includes("socket hang up")) { + if (err.includes("ECONNREFUSED") || err.includes("ECONNRESET") || err.includes("socket hang up") || err.includes("exports is not defined")) { jest.fn(); } else { console.dir(err); diff --git a/tests/e2e/modules/alert_spec.js b/tests/e2e/modules/alert_spec.js new file mode 100644 index 00000000..19f657a2 --- /dev/null +++ b/tests/e2e/modules/alert_spec.js @@ -0,0 +1,18 @@ +const helpers = require("../global-setup"); +let app = null; + +describe("Alert module", function () { + beforeAll(function (done) { + app = helpers.startApplication("tests/configs/modules/alert/default.js"); + helpers.getDocument(done, 1000); + }); + afterAll(function () { + helpers.stopApplication(app); + }); + + it("should show the welcome message", function () { + const elem = document.querySelector(".ns-box .ns-box-inner .light.bright.small"); + expect(elem).not.toBe(null); + expect(elem.textContent).toContain("Welcome, start was successful!"); + }); +}); diff --git a/tests/electron/modules/alert_spec.js b/tests/electron/modules/alert_spec.js deleted file mode 100644 index 12e724f0..00000000 --- a/tests/electron/modules/alert_spec.js +++ /dev/null @@ -1,32 +0,0 @@ -const helpers = require("../global-setup"); - -describe("Alert module", function () { - helpers.setupTimeout(this); - - let app = null; - - beforeEach(function () { - return helpers - .startApplication({ - args: ["js/electron.js"] - }) - .then(function (startedApp) { - app = startedApp; - }); - }); - - afterEach(function () { - return helpers.stopApplication(app); - }); - - describe("Default configuration", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/alert/default.js"; - }); - - it("should show the welcome message", function () { - return app.client.waitUntilTextExists(".ns-box .ns-box-inner .light.bright.small", "Welcome, start was successful!", 10000); - }); - }); -}); diff --git a/tests/electron/modules/compliments_spec.js b/tests/electron/modules/compliments_spec.js deleted file mode 100644 index 81c6e982..00000000 --- a/tests/electron/modules/compliments_spec.js +++ /dev/null @@ -1,107 +0,0 @@ -const helpers = require("../global-setup"); - -describe("Compliments module", function () { - helpers.setupTimeout(this); - - let app = null; - - beforeEach(function () { - return helpers - .startApplication({ - args: ["js/electron.js"] - }) - .then(function (startedApp) { - app = startedApp; - }); - }); - - afterEach(function () { - return helpers.stopApplication(app); - }); - - describe("parts of days", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_parts_day.js"; - }); - - it("if Morning compliments for that part of day", async function () { - const hour = new Date().getHours(); - if (hour >= 3 && hour < 12) { - // if morning check - const elem = await app.client.$(".compliments"); - return elem.getText(".compliments").then(function (text) { - expect(["Hi", "Good Morning", "Morning test"]).toContain(text); - }); - } - }); - - it("if Afternoon show Compliments for that part of day", async function () { - const hour = new Date().getHours(); - if (hour >= 12 && hour < 17) { - // if afternoon check - const elem = await app.client.$(".compliments"); - return elem.getText(".compliments").then(function (text) { - expect(["Hello", "Good Afternoon", "Afternoon test"]).toContain(text); - }); - } - }); - - it("if Evening show Compliments for that part of day", async function () { - const hour = new Date().getHours(); - if (!(hour >= 3 && hour < 12) && !(hour >= 12 && hour < 17)) { - // if evening check - const elem = await app.client.$(".compliments"); - return elem.getText(".compliments").then(function (text) { - expect(["Hello There", "Good Evening", "Evening test"]).toContain(text); - }); - } - }); - }); - - describe("Feature anytime in compliments module", function () { - describe("Set anytime and empty compliments for morning, evening and afternoon ", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_anytime.js"; - }); - - it("Show anytime because if configure empty parts of day compliments and set anytime compliments", async function () { - const elem = await app.client.$(".compliments"); - return elem.getText(".compliments").then(function (text) { - expect(["Anytime here"]).toContain(text); - }); - }); - }); - - describe("Only anytime present in configuration compliments", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_only_anytime.js"; - }); - - it("Show anytime compliments", async function () { - const elem = await app.client.$(".compliments"); - return elem.getText(".compliments").then(function (text) { - expect(["Anytime here"]).toContain(text); - }); - }); - }); - }); - - describe("Feature date in compliments module", function () { - describe("Set date and empty compliments for anytime, morning, evening and afternoon", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/compliments/compliments_date.js"; - }); - - it("Show happy new year compliment on new years day", async function () { - const elem = await app.client.$(".compliments"); - return elem.getText(".compliments").then(function (text) { - expect(["Happy new year!"]).toContain(text); - }); - }); - }); - }); -}); From 6595b6a44f92ed7c2bc26dcd423869c4f6115119 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sat, 25 Sep 2021 23:45:34 +0200 Subject: [PATCH 118/134] refactor global-setup.js --- tests/e2e/env_spec.js | 5 ++--- tests/e2e/fonts.js | 5 ++--- tests/e2e/global-setup.js | 17 +++++++---------- tests/e2e/ipWhitelist_spec.js | 9 ++++----- tests/e2e/modules/alert_spec.js | 5 ++--- tests/e2e/{ => modules}/compliments_spec.js | 11 +++++------ tests/e2e/modules_display_spec.js | 5 ++--- tests/e2e/modules_position_spec.js | 5 ++--- tests/e2e/port_config.js | 9 ++++----- tests/e2e/vendor_spec.js | 5 ++--- tests/e2e/without_modules.js | 5 ++--- 11 files changed, 34 insertions(+), 47 deletions(-) rename tests/e2e/{ => modules}/compliments_spec.js (83%) diff --git a/tests/e2e/env_spec.js b/tests/e2e/env_spec.js index 65dce883..b2a7238a 100644 --- a/tests/e2e/env_spec.js +++ b/tests/e2e/env_spec.js @@ -1,14 +1,13 @@ const fetch = require("node-fetch"); const helpers = require("./global-setup"); -let app = null; describe("Electron app environment", function () { beforeAll(function (done) { - app = helpers.startApplication("tests/configs/default.js"); + helpers.startApplication("tests/configs/default.js"); helpers.getDocument(done); }); afterAll(function () { - helpers.stopApplication(app); + helpers.stopApplication(); }); it("get request from http://localhost:8080 should return 200", function (done) { diff --git a/tests/e2e/fonts.js b/tests/e2e/fonts.js index 105b9977..54cd2d87 100644 --- a/tests/e2e/fonts.js +++ b/tests/e2e/fonts.js @@ -1,6 +1,5 @@ const fetch = require("node-fetch"); const helpers = require("./global-setup"); -let app = null; describe("All font files from roboto.css should be downloadable", function () { const fontFiles = []; @@ -16,10 +15,10 @@ describe("All font files from roboto.css should be downloadable", function () { } beforeAll(function () { - app = helpers.startApplication("tests/configs/without_modules.js"); + helpers.startApplication("tests/configs/without_modules.js"); }); afterAll(function () { - helpers.stopApplication(app); + helpers.stopApplication(); }); test.each(fontFiles)("should return 200 HTTP code for file '%s'", (fontFile, done) => { diff --git a/tests/e2e/global-setup.js b/tests/e2e/global-setup.js index 918047fe..e524d47c 100644 --- a/tests/e2e/global-setup.js +++ b/tests/e2e/global-setup.js @@ -3,22 +3,19 @@ const config = require("../configs/empty_ipWhiteList"); exports.startApplication = function (configFilename, exec) { jest.resetModules(); - let app = global.app; - if (app) { - app.stop(); + if (global.app) { + global.app.stop(); } // Set config sample for use in test process.env.MM_CONFIG_FILE = configFilename; if (exec) exec; - app = require("app.js"); - app.start(); - global.app = app; - return app; + global.app = require("app.js"); + global.app.start(); }; -exports.stopApplication = function (app) { - if (app) { - app.stop(); +exports.stopApplication = function () { + if (global.app) { + global.app.stop(); } }; diff --git a/tests/e2e/ipWhitelist_spec.js b/tests/e2e/ipWhitelist_spec.js index eba92a3e..b518cfff 100644 --- a/tests/e2e/ipWhitelist_spec.js +++ b/tests/e2e/ipWhitelist_spec.js @@ -1,14 +1,13 @@ const fetch = require("node-fetch"); const helpers = require("./global-setup"); -let app = null; describe("ipWhitelist directive configuration", function () { describe("Set ipWhitelist without access", function () { beforeAll(function () { - app = helpers.startApplication("tests/configs/noIpWhiteList.js"); + helpers.startApplication("tests/configs/noIpWhiteList.js"); }); afterAll(function () { - helpers.stopApplication(app); + helpers.stopApplication(); }); it("should return 403", function (done) { @@ -21,10 +20,10 @@ describe("ipWhitelist directive configuration", function () { describe("Set ipWhitelist []", function () { beforeAll(function () { - app = helpers.startApplication("tests/configs/empty_ipWhiteList.js"); + helpers.startApplication("tests/configs/empty_ipWhiteList.js"); }); afterAll(function () { - helpers.stopApplication(app); + helpers.stopApplication(); }); it("should return 200", function (done) { diff --git a/tests/e2e/modules/alert_spec.js b/tests/e2e/modules/alert_spec.js index 19f657a2..a557acc5 100644 --- a/tests/e2e/modules/alert_spec.js +++ b/tests/e2e/modules/alert_spec.js @@ -1,13 +1,12 @@ const helpers = require("../global-setup"); -let app = null; describe("Alert module", function () { beforeAll(function (done) { - app = helpers.startApplication("tests/configs/modules/alert/default.js"); + helpers.startApplication("tests/configs/modules/alert/default.js"); helpers.getDocument(done, 1000); }); afterAll(function () { - helpers.stopApplication(app); + helpers.stopApplication(); }); it("should show the welcome message", function () { diff --git a/tests/e2e/compliments_spec.js b/tests/e2e/modules/compliments_spec.js similarity index 83% rename from tests/e2e/compliments_spec.js rename to tests/e2e/modules/compliments_spec.js index aefb273e..6c0a2211 100644 --- a/tests/e2e/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -1,5 +1,4 @@ const helpers = require("../global-setup"); -let app = null; doTest = function (complimentsArray) { let elem = document.querySelector(".compliments"); @@ -11,12 +10,12 @@ doTest = function (complimentsArray) { describe("Compliments module", function () { afterAll(function () { - helpers.stopApplication(app); + helpers.stopApplication(); }); describe("parts of days", function () { beforeAll(function (done) { - app = helpers.startApplication("tests/configs/modules/compliments/compliments_parts_day.js"); + helpers.startApplication("tests/configs/modules/compliments/compliments_parts_day.js"); helpers.getDocument(done, 1000); }); @@ -48,7 +47,7 @@ describe("Compliments module", function () { describe("Feature anytime in compliments module", function () { describe("Set anytime and empty compliments for morning, evening and afternoon ", function () { beforeAll(function (done) { - app = helpers.startApplication("tests/configs/modules/compliments/compliments_anytime.js"); + helpers.startApplication("tests/configs/modules/compliments/compliments_anytime.js"); helpers.getDocument(done, 1000); }); @@ -59,7 +58,7 @@ describe("Compliments module", function () { describe("Only anytime present in configuration compliments", function () { beforeAll(function (done) { - app = helpers.startApplication("tests/configs/modules/compliments/compliments_only_anytime.js"); + helpers.startApplication("tests/configs/modules/compliments/compliments_only_anytime.js"); helpers.getDocument(done, 1000); }); @@ -72,7 +71,7 @@ describe("Compliments module", function () { describe("Feature date in compliments module", function () { describe("Set date and empty compliments for anytime, morning, evening and afternoon", function () { beforeAll(function (done) { - app = helpers.startApplication("tests/configs/modules/compliments/compliments_date.js"); + helpers.startApplication("tests/configs/modules/compliments/compliments_date.js"); helpers.getDocument(done, 1000); }); diff --git a/tests/e2e/modules_display_spec.js b/tests/e2e/modules_display_spec.js index 055ff8c1..4042e810 100644 --- a/tests/e2e/modules_display_spec.js +++ b/tests/e2e/modules_display_spec.js @@ -1,13 +1,12 @@ const helpers = require("./global-setup"); -let app = null; describe("Display of modules", function () { beforeAll(function (done) { - app = helpers.startApplication("tests/configs/modules/display.js"); + helpers.startApplication("tests/configs/modules/display.js"); helpers.getDocument(done); }); afterAll(function () { - helpers.stopApplication(app); + helpers.stopApplication(); }); it("should show the test header", function () { diff --git a/tests/e2e/modules_position_spec.js b/tests/e2e/modules_position_spec.js index c23933b0..79b9b96f 100644 --- a/tests/e2e/modules_position_spec.js +++ b/tests/e2e/modules_position_spec.js @@ -1,13 +1,12 @@ const helpers = require("./global-setup"); -let app = null; describe("Position of modules", function () { beforeAll(function (done) { - app = helpers.startApplication("tests/configs/modules/positions.js"); + helpers.startApplication("tests/configs/modules/positions.js"); helpers.getDocument(done, 1000); }); afterAll(function () { - helpers.stopApplication(app); + helpers.stopApplication(); }); const positions = ["top_bar", "top_left", "top_center", "top_right", "upper_third", "middle_center", "lower_third", "bottom_left", "bottom_center", "bottom_right", "bottom_bar", "fullscreen_above", "fullscreen_below"]; diff --git a/tests/e2e/port_config.js b/tests/e2e/port_config.js index 6f6756a4..329acab6 100644 --- a/tests/e2e/port_config.js +++ b/tests/e2e/port_config.js @@ -1,14 +1,13 @@ const fetch = require("node-fetch"); const helpers = require("./global-setup"); -let app = null; describe("port directive configuration", function () { describe("Set port 8090", function () { beforeAll(function () { - app = helpers.startApplication("tests/configs/port_8090.js"); + helpers.startApplication("tests/configs/port_8090.js"); }); afterAll(function () { - helpers.stopApplication(app); + helpers.stopApplication(); }); it("should return 200", function (done) { @@ -21,10 +20,10 @@ describe("port directive configuration", function () { describe("Set port 8100 on environment variable MM_PORT", function () { beforeAll(function () { - app = helpers.startApplication("tests/configs/port_8090.js", (process.env.MM_PORT = 8100)); + helpers.startApplication("tests/configs/port_8090.js", (process.env.MM_PORT = 8100)); }); afterAll(function () { - helpers.stopApplication(app); + helpers.stopApplication(); }); it("should return 200", function (done) { diff --git a/tests/e2e/vendor_spec.js b/tests/e2e/vendor_spec.js index e28f2d84..f6917c0d 100644 --- a/tests/e2e/vendor_spec.js +++ b/tests/e2e/vendor_spec.js @@ -1,13 +1,12 @@ const fetch = require("node-fetch"); const helpers = require("./global-setup"); -let app = null; describe("Vendors", function () { beforeAll(function () { - app = helpers.startApplication("tests/configs/default.js"); + helpers.startApplication("tests/configs/default.js"); }); afterAll(function () { - helpers.stopApplication(app); + helpers.stopApplication(); }); describe("Get list vendors", function () { diff --git a/tests/e2e/without_modules.js b/tests/e2e/without_modules.js index dce6c0b2..8aeeee28 100644 --- a/tests/e2e/without_modules.js +++ b/tests/e2e/without_modules.js @@ -1,13 +1,12 @@ const helpers = require("./global-setup"); -let app = null; describe("Check configuration without modules", function () { beforeAll(function (done) { - app = helpers.startApplication("tests/configs/without_modules.js"); + helpers.startApplication("tests/configs/without_modules.js"); helpers.getDocument(done, 1000); }); afterAll(function () { - helpers.stopApplication(app); + helpers.stopApplication(); }); it("Show the message MagicMirror title", function () { From e0906f3462b34e70fc3ae6d7f763e387484ac3d9 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sat, 25 Sep 2021 23:51:32 +0200 Subject: [PATCH 119/134] update module helloworld --- .../configs/modules/helloworld/helloworld.js | 10 ++++- .../modules/helloworld/helloworld_default.js | 10 ++++- tests/e2e/modules/helloworld_spec.js | 33 ++++++++++++++ tests/electron/modules/helloworld_spec.js | 45 ------------------- 4 files changed, 49 insertions(+), 49 deletions(-) create mode 100644 tests/e2e/modules/helloworld_spec.js delete mode 100644 tests/electron/modules/helloworld_spec.js diff --git a/tests/configs/modules/helloworld/helloworld.js b/tests/configs/modules/helloworld/helloworld.js index 9845e4b8..a1d48278 100644 --- a/tests/configs/modules/helloworld/helloworld.js +++ b/tests/configs/modules/helloworld/helloworld.js @@ -3,7 +3,13 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", + timeFormat: 24, + units: "metric", + modules: [ { module: "helloworld", @@ -13,7 +19,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/helloworld/helloworld_default.js b/tests/configs/modules/helloworld/helloworld_default.js index 6400c9f7..5678488d 100644 --- a/tests/configs/modules/helloworld/helloworld_default.js +++ b/tests/configs/modules/helloworld/helloworld_default.js @@ -3,14 +3,20 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", + timeFormat: 24, + units: "metric", + modules: [ { module: "helloworld", position: "bottom_bar" } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/e2e/modules/helloworld_spec.js b/tests/e2e/modules/helloworld_spec.js new file mode 100644 index 00000000..8c11575a --- /dev/null +++ b/tests/e2e/modules/helloworld_spec.js @@ -0,0 +1,33 @@ +const helpers = require("../global-setup"); + +describe("Test helloworld module", function () { + afterAll(function () { + helpers.stopApplication(); + }); + + describe("helloworld set config text", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/helloworld/helloworld.js"); + helpers.getDocument(done, 1000); + }); + + it("Test message helloworld module", async function () { + const elem = document.querySelector(".helloworld"); + expect(elem).not.toBe(null); + expect(elem.textContent).toContain("Test HelloWorld Module"); + }); + }); + + describe("helloworld default config text", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/helloworld/helloworld_default.js"); + helpers.getDocument(done, 1000); + }); + + it("Test message helloworld module", async function () { + const elem = document.querySelector(".helloworld"); + expect(elem).not.toBe(null); + expect(elem.textContent).toContain("Hello World!"); + }); + }); +}); diff --git a/tests/electron/modules/helloworld_spec.js b/tests/electron/modules/helloworld_spec.js deleted file mode 100644 index 95ee1a2d..00000000 --- a/tests/electron/modules/helloworld_spec.js +++ /dev/null @@ -1,45 +0,0 @@ -const helpers = require("../global-setup"); - -describe("Test helloworld module", function () { - helpers.setupTimeout(this); - - let app = null; - - beforeEach(function () { - return helpers - .startApplication({ - args: ["js/electron.js"] - }) - .then(function (startedApp) { - app = startedApp; - }); - }); - - afterEach(function () { - return helpers.stopApplication(app); - }); - - describe("helloworld set config text", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/helloworld/helloworld.js"; - }); - - it("Test message helloworld module", async function () { - const elem = await app.client.$(".helloworld"); - return expect(await elem.getText(".helloworld")).toBe("Test HelloWorld Module"); - }); - }); - - describe("helloworld default config text", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/helloworld/helloworld_default.js"; - }); - - it("Test message helloworld module", async function () { - const elem = await app.client.$(".helloworld"); - return expect(await elem.getText(".helloworld")).toBe("Hello World!"); - }); - }); -}); From d831315e20262334af3dc145a954c0fb6bc46e12 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sun, 26 Sep 2021 00:06:06 +0200 Subject: [PATCH 120/134] update module newsfeed --- tests/configs/modules/newsfeed/default.js | 8 ++- .../configs/modules/newsfeed/incorrect_url.js | 8 ++- .../modules/newsfeed/prohibited_words.js | 8 ++- tests/e2e/modules/newsfeed_spec.js | 63 +++++++++++++++++ tests/electron/modules/newsfeed_spec.js | 67 ------------------- 5 files changed, 81 insertions(+), 73 deletions(-) create mode 100644 tests/e2e/modules/newsfeed_spec.js delete mode 100644 tests/electron/modules/newsfeed_spec.js diff --git a/tests/configs/modules/newsfeed/default.js b/tests/configs/modules/newsfeed/default.js index 1a112566..160212f1 100644 --- a/tests/configs/modules/newsfeed/default.js +++ b/tests/configs/modules/newsfeed/default.js @@ -3,8 +3,12 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", timeFormat: 12, + units: "metric", modules: [ { @@ -20,7 +24,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/newsfeed/incorrect_url.js b/tests/configs/modules/newsfeed/incorrect_url.js index ab126aa4..bdaa0341 100644 --- a/tests/configs/modules/newsfeed/incorrect_url.js +++ b/tests/configs/modules/newsfeed/incorrect_url.js @@ -2,8 +2,12 @@ * * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", timeFormat: 12, + units: "metric", modules: [ { @@ -19,7 +23,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/newsfeed/prohibited_words.js b/tests/configs/modules/newsfeed/prohibited_words.js index f4040557..55c71e29 100644 --- a/tests/configs/modules/newsfeed/prohibited_words.js +++ b/tests/configs/modules/newsfeed/prohibited_words.js @@ -2,8 +2,12 @@ * * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", timeFormat: 12, + units: "metric", modules: [ { @@ -21,7 +25,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/e2e/modules/newsfeed_spec.js b/tests/e2e/modules/newsfeed_spec.js new file mode 100644 index 00000000..0b2869e2 --- /dev/null +++ b/tests/e2e/modules/newsfeed_spec.js @@ -0,0 +1,63 @@ +const helpers = require("../global-setup"); + +describe("Newsfeed module", function () { + afterAll(function () { + helpers.stopApplication(); + }); + + describe("Default configuration", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/newsfeed/default.js"); + helpers.getDocument(done, 3000); + }); + + it("should show the newsfeed title", function () { + const elem = document.querySelector(".newsfeed .newsfeed-source"); + expect(elem).not.toBe(null); + expect(elem.textContent).toContain("Rodrigo Ramirez Blog"); + }); + + it("should show the newsfeed article", function () { + const elem = document.querySelector(".newsfeed .newsfeed-title"); + expect(elem).not.toBe(null); + expect(elem.textContent).toContain("QPanel"); + }); + + it("should NOT show the newsfeed description", async () => { + const elem = document.querySelector(".newsfeed .newsfeed-desc"); + expect(elem).toBe(null); + }); + }); + + describe("Custom configuration", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/newsfeed/prohibited_words.js"); + helpers.getDocument(done, 3000); + }); + + it("should not show articles with prohibited words", function () { + const elem = document.querySelector(".newsfeed .newsfeed-title"); + expect(elem).not.toBe(null); + expect(elem.textContent).toContain("Problema VirtualBox"); + }); + + it("should show the newsfeed description", async () => { + const elem = document.querySelector(".newsfeed .newsfeed-desc"); + expect(elem).not.toBe(null); + expect(elem.textContent.length).not.toBe(0); + }); + }); + + describe("Invalid configuration", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/newsfeed/incorrect_url.js"); + helpers.getDocument(done, 3000); + }); + + it("should show malformed url warning", function () { + const elem = document.querySelector(".newsfeed .small"); + expect(elem).not.toBe(null); + expect(elem.textContent).toContain("Error in the Newsfeed module. Malformed url."); + }); + }); +}); diff --git a/tests/electron/modules/newsfeed_spec.js b/tests/electron/modules/newsfeed_spec.js deleted file mode 100644 index fe544a0b..00000000 --- a/tests/electron/modules/newsfeed_spec.js +++ /dev/null @@ -1,67 +0,0 @@ -const helpers = require("../global-setup"); - -describe("Newsfeed module", function () { - helpers.setupTimeout(this); - - let app = null; - - beforeEach(function () { - return helpers - .startApplication({ - args: ["js/electron.js"] - }) - .then(function (startedApp) { - app = startedApp; - }); - }); - - afterEach(function () { - return helpers.stopApplication(app); - }); - - describe("Default configuration", function () { - beforeAll(function () { - process.env.MM_CONFIG_FILE = "tests/configs/modules/newsfeed/default.js"; - }); - - it("should show the newsfeed title", function () { - return app.client.waitUntilTextExists(".newsfeed .newsfeed-source", "Rodrigo Ramirez Blog", 10000); - }); - - it("should show the newsfeed article", function () { - return app.client.waitUntilTextExists(".newsfeed .newsfeed-title", "QPanel", 10000); - }); - - it("should NOT show the newsfeed description", async () => { - await app.client.waitUntilTextExists(".newsfeed .newsfeed-title", "QPanel", 10000); - const events = await app.client.$$(".newsfeed .newsfeed-desc"); - return expect(events.length).toBe(0); - }); - }); - - describe("Custom configuration", function () { - beforeAll(function () { - process.env.MM_CONFIG_FILE = "tests/configs/modules/newsfeed/prohibited_words.js"; - }); - - it("should not show articles with prohibited words", function () { - return app.client.waitUntilTextExists(".newsfeed .newsfeed-title", "Problema VirtualBox", 10000); - }); - - it("should show the newsfeed description", async () => { - await app.client.waitUntilTextExists(".newsfeed .newsfeed-title", "Problema VirtualBox", 10000); - const events = await app.client.$$(".newsfeed .newsfeed-desc"); - return expect(events.length).toBe(1); - }); - }); - - describe("Invalid configuration", function () { - beforeAll(function () { - process.env.MM_CONFIG_FILE = "tests/configs/modules/newsfeed/incorrect_url.js"; - }); - - it("should show malformed url warning", function () { - return app.client.waitUntilTextExists(".newsfeed .small", "Error in the Newsfeed module. Malformed url.", 10000); - }); - }); -}); From 385e5aabaaf59ff9750eb938bf68ef6bbb709427 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sun, 26 Sep 2021 00:29:03 +0200 Subject: [PATCH 121/134] prettier --- tests/configs/without_modules.js | 2 +- tests/e2e/modules/compliments_spec.js | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/configs/without_modules.js b/tests/configs/without_modules.js index d84f63b7..9cc097ae 100644 --- a/tests/configs/without_modules.js +++ b/tests/configs/without_modules.js @@ -8,7 +8,7 @@ let config = { ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.10.1"], language: "en", timeFormat: 24, - units: "metric", + units: "metric" }; /*************** DO NOT EDIT THE LINE BELOW ***************/ diff --git a/tests/e2e/modules/compliments_spec.js b/tests/e2e/modules/compliments_spec.js index 6c0a2211..0f3b74e8 100644 --- a/tests/e2e/modules/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -1,12 +1,17 @@ const helpers = require("../global-setup"); -doTest = function (complimentsArray) { +/** + * move similar tests in function doTest + * + * @param {Array} complimentsArray The array of compliments. + */ +function doTest(complimentsArray) { let elem = document.querySelector(".compliments"); expect(elem).not.toBe(null); elem = document.querySelector(".module-content"); expect(elem).not.toBe(null); expect(complimentsArray).toContain(elem.textContent); -}; +} describe("Compliments module", function () { afterAll(function () { From a4a8504558132259c886d641cbd202203da22863 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sun, 26 Sep 2021 21:58:59 +0200 Subject: [PATCH 122/134] update module clock --- tests/configs/modules/clock/clock_12hr.js | 8 +- tests/configs/modules/clock/clock_24hr.js | 10 +- tests/configs/modules/clock/clock_analog.js | 10 +- .../clock/clock_displaySeconds_false.js | 8 +- .../modules/clock/clock_showPeriodUpper.js | 8 +- tests/configs/modules/clock/clock_showTime.js | 8 +- tests/configs/modules/clock/clock_showWeek.js | 8 +- tests/e2e/modules/clock_spec.js | 116 +++++++++++++++ tests/e2e/modules/compliments_spec.js | 6 +- tests/e2e/modules/helloworld_spec.js | 4 +- tests/e2e/modules/newsfeed_spec.js | 4 +- tests/electron/modules/clock_spec.js | 134 ------------------ 12 files changed, 169 insertions(+), 155 deletions(-) create mode 100644 tests/e2e/modules/clock_spec.js delete mode 100644 tests/electron/modules/clock_spec.js diff --git a/tests/configs/modules/clock/clock_12hr.js b/tests/configs/modules/clock/clock_12hr.js index 35b45914..cb3563c7 100644 --- a/tests/configs/modules/clock/clock_12hr.js +++ b/tests/configs/modules/clock/clock_12hr.js @@ -3,8 +3,12 @@ * By Sergey Morozov * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", timeFormat: 12, + units: "metric", modules: [ { @@ -12,7 +16,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( position: "middle_center" } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/clock_24hr.js b/tests/configs/modules/clock/clock_24hr.js index 01b2a36b..f77a600d 100644 --- a/tests/configs/modules/clock/clock_24hr.js +++ b/tests/configs/modules/clock/clock_24hr.js @@ -3,14 +3,20 @@ * By Sergey Morozov * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", + timeFormat: 24, + units: "metric", + modules: [ { module: "clock", position: "middle_center" } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/clock_analog.js b/tests/configs/modules/clock/clock_analog.js index b33bd051..7f1353c6 100644 --- a/tests/configs/modules/clock/clock_analog.js +++ b/tests/configs/modules/clock/clock_analog.js @@ -2,7 +2,13 @@ * * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", + timeFormat: 24, + units: "metric", + modules: [ { module: "clock", @@ -13,7 +19,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/clock_displaySeconds_false.js b/tests/configs/modules/clock/clock_displaySeconds_false.js index 1caef7e3..4e872377 100644 --- a/tests/configs/modules/clock/clock_displaySeconds_false.js +++ b/tests/configs/modules/clock/clock_displaySeconds_false.js @@ -3,8 +3,12 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", timeFormat: 12, + units: "metric", modules: [ { @@ -15,7 +19,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/clock_showPeriodUpper.js b/tests/configs/modules/clock/clock_showPeriodUpper.js index b069c438..7ff7f20a 100644 --- a/tests/configs/modules/clock/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/clock_showPeriodUpper.js @@ -3,8 +3,12 @@ * By Sergey Morozov * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", timeFormat: 12, + units: "metric", modules: [ { @@ -15,7 +19,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/clock_showTime.js b/tests/configs/modules/clock/clock_showTime.js index 93dd83de..2c130fb2 100644 --- a/tests/configs/modules/clock/clock_showTime.js +++ b/tests/configs/modules/clock/clock_showTime.js @@ -3,8 +3,12 @@ * By Johan Hammar * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", timeFormat: 12, + units: "metric", modules: [ { @@ -15,7 +19,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/clock_showWeek.js b/tests/configs/modules/clock/clock_showWeek.js index b595ba70..1db31cb6 100644 --- a/tests/configs/modules/clock/clock_showWeek.js +++ b/tests/configs/modules/clock/clock_showWeek.js @@ -3,8 +3,12 @@ * By Johan Hammar * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], + language: "en", timeFormat: 12, + units: "metric", modules: [ { @@ -15,7 +19,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/e2e/modules/clock_spec.js b/tests/e2e/modules/clock_spec.js new file mode 100644 index 00000000..79e26f47 --- /dev/null +++ b/tests/e2e/modules/clock_spec.js @@ -0,0 +1,116 @@ +const helpers = require("../global-setup"); +const moment = require("moment"); + +describe("Clock module", function () { + afterAll(function () { + helpers.stopApplication(); + }); + + const testMatch = function (element, regex) { + const elem = document.querySelector(element); + expect(elem).not.toBe(null); + expect(elem.textContent).toMatch(regex); + }; + + describe("with default 24hr clock config", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/clock/clock_24hr.js"); + helpers.getDocument(done, 1000); + }); + + it("should show the date in the correct format", function () { + const dateRegex = /^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, \d{4}$/; + testMatch(".clock .date", dateRegex); + }); + + it("should show the time in 24hr format", function () { + const timeRegex = /^(?:2[0-3]|[01]\d):[0-5]\d[0-5]\d$/; + testMatch(".clock .time", timeRegex); + }); + }); + + describe("with default 12hr clock config", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/clock/clock_12hr.js"); + helpers.getDocument(done, 1000); + }); + + it("should show the date in the correct format", function () { + const dateRegex = /^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, \d{4}$/; + testMatch(".clock .date", dateRegex); + }); + + it("should show the time in 12hr format", function () { + const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[ap]m$/; + testMatch(".clock .time", timeRegex); + }); + }); + + describe("with showPeriodUpper config enabled", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/clock/clock_showPeriodUpper.js"); + helpers.getDocument(done, 1000); + }); + + it("should show 12hr time with upper case AM/PM", function () { + const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[AP]M$/; + testMatch(".clock .time", timeRegex); + }); + }); + + describe("with displaySeconds config disabled", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/clock/clock_displaySeconds_false.js"); + helpers.getDocument(done, 1000); + }); + + it("should show 12hr time without seconds am/pm", function () { + const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[ap]m$/; + testMatch(".clock .time", timeRegex); + }); + }); + + describe("with showTime config disabled", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/clock/clock_showTime.js"); + helpers.getDocument(done, 1000); + }); + + it("should show not show the time when digital clock is shown", function () { + const elem = document.querySelector(".clock .digital .time"); + expect(elem).toBe(null); + }); + }); + + describe("with showWeek config enabled", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/clock/clock_showWeek.js"); + helpers.getDocument(done, 1000); + }); + + it("should show the week in the correct format", function () { + const weekRegex = /^Week [0-9]{1,2}$/; + testMatch(".clock .week", weekRegex); + }); + + it("should show the week with the correct number of week of year", function () { + const currentWeekNumber = moment().week(); + const weekToShow = "Week " + currentWeekNumber; + const elem = document.querySelector(".clock .week"); + expect(elem).not.toBe(null); + expect(elem.textContent).toBe(weekToShow); + }); + }); + + describe("with analog clock face enabled", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/clock/clock_analog.js"); + helpers.getDocument(done, 1000); + }); + + it("should show the analog clock face", () => { + const elem = document.querySelector(".clockCircle"); + expect(elem).not.toBe(null); + }); + }); +}); diff --git a/tests/e2e/modules/compliments_spec.js b/tests/e2e/modules/compliments_spec.js index 0f3b74e8..73f851c5 100644 --- a/tests/e2e/modules/compliments_spec.js +++ b/tests/e2e/modules/compliments_spec.js @@ -56,7 +56,7 @@ describe("Compliments module", function () { helpers.getDocument(done, 1000); }); - it("Show anytime because if configure empty parts of day compliments and set anytime compliments", async function () { + it("Show anytime because if configure empty parts of day compliments and set anytime compliments", function () { doTest(["Anytime here"]); }); }); @@ -67,7 +67,7 @@ describe("Compliments module", function () { helpers.getDocument(done, 1000); }); - it("Show anytime compliments", async function () { + it("Show anytime compliments", function () { doTest(["Anytime here"]); }); }); @@ -80,7 +80,7 @@ describe("Compliments module", function () { helpers.getDocument(done, 1000); }); - it("Show happy new year compliment on new years day", async function () { + it("Show happy new year compliment on new years day", function () { doTest(["Happy new year!"]); }); }); diff --git a/tests/e2e/modules/helloworld_spec.js b/tests/e2e/modules/helloworld_spec.js index 8c11575a..d8f1a3c6 100644 --- a/tests/e2e/modules/helloworld_spec.js +++ b/tests/e2e/modules/helloworld_spec.js @@ -11,7 +11,7 @@ describe("Test helloworld module", function () { helpers.getDocument(done, 1000); }); - it("Test message helloworld module", async function () { + it("Test message helloworld module", function () { const elem = document.querySelector(".helloworld"); expect(elem).not.toBe(null); expect(elem.textContent).toContain("Test HelloWorld Module"); @@ -24,7 +24,7 @@ describe("Test helloworld module", function () { helpers.getDocument(done, 1000); }); - it("Test message helloworld module", async function () { + it("Test message helloworld module", function () { const elem = document.querySelector(".helloworld"); expect(elem).not.toBe(null); expect(elem.textContent).toContain("Hello World!"); diff --git a/tests/e2e/modules/newsfeed_spec.js b/tests/e2e/modules/newsfeed_spec.js index 0b2869e2..d7a3b9fe 100644 --- a/tests/e2e/modules/newsfeed_spec.js +++ b/tests/e2e/modules/newsfeed_spec.js @@ -23,7 +23,7 @@ describe("Newsfeed module", function () { expect(elem.textContent).toContain("QPanel"); }); - it("should NOT show the newsfeed description", async () => { + it("should NOT show the newsfeed description", () => { const elem = document.querySelector(".newsfeed .newsfeed-desc"); expect(elem).toBe(null); }); @@ -41,7 +41,7 @@ describe("Newsfeed module", function () { expect(elem.textContent).toContain("Problema VirtualBox"); }); - it("should show the newsfeed description", async () => { + it("should show the newsfeed description", () => { const elem = document.querySelector(".newsfeed .newsfeed-desc"); expect(elem).not.toBe(null); expect(elem.textContent.length).not.toBe(0); diff --git a/tests/electron/modules/clock_spec.js b/tests/electron/modules/clock_spec.js deleted file mode 100644 index c2e03fc9..00000000 --- a/tests/electron/modules/clock_spec.js +++ /dev/null @@ -1,134 +0,0 @@ -const helpers = require("../global-setup"); -const moment = require("moment"); - -describe("Clock module", function () { - helpers.setupTimeout(this); - - let app = null; - - const testMatch = async function (element, regex) { - await app.client.waitUntilWindowLoaded(); - const elem = await app.client.$(element); - const txt = await elem.getText(element); - return expect(txt).toMatch(regex); - }; - - beforeEach(function () { - return helpers - .startApplication({ - args: ["js/electron.js"] - }) - .then(function (startedApp) { - app = startedApp; - }); - }); - - afterEach(function () { - return helpers.stopApplication(app); - }); - - describe("with default 24hr clock config", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_24hr.js"; - }); - - it("should show the date in the correct format", async function () { - const dateRegex = /^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, \d{4}$/; - return testMatch(".clock .date", dateRegex); - }); - - it("should show the time in 24hr format", async function () { - const timeRegex = /^(?:2[0-3]|[01]\d):[0-5]\d[0-5]\d$/; - return testMatch(".clock .time", timeRegex); - }); - }); - - describe("with default 12hr clock config", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_12hr.js"; - }); - - it("should show the date in the correct format", async function () { - const dateRegex = /^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, \d{4}$/; - return testMatch(".clock .date", dateRegex); - }); - - it("should show the time in 12hr format", async function () { - const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[ap]m$/; - return testMatch(".clock .time", timeRegex); - }); - }); - - describe("with showPeriodUpper config enabled", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_showPeriodUpper.js"; - }); - - it("should show 12hr time with upper case AM/PM", async function () { - const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[AP]M$/; - return testMatch(".clock .time", timeRegex); - }); - }); - - describe("with displaySeconds config disabled", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_displaySeconds_false.js"; - }); - - it("should show 12hr time without seconds am/pm", async function () { - const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[ap]m$/; - return testMatch(".clock .time", timeRegex); - }); - }); - - describe("with showTime config disabled", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_showTime.js"; - }); - - it("should show not show the time when digital clock is shown", async function () { - await app.client.waitUntilWindowLoaded(); - const time = await app.client.$$(".clock .digital .time"); - return expect(time.length).toBe(0); - }); - }); - - describe("with showWeek config enabled", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_showWeek.js"; - }); - - it("should show the week in the correct format", async function () { - const weekRegex = /^Week [0-9]{1,2}$/; - return testMatch(".clock .week", weekRegex); - }); - - it("should show the week with the correct number of week of year", async function () { - const currentWeekNumber = moment().week(); - const weekToShow = "Week " + currentWeekNumber; - await app.client.waitUntilWindowLoaded(); - const elem = await app.client.$(".clock .week"); - const txt = await elem.getText(".clock .week"); - return expect(txt).toBe(weekToShow); - }); - }); - - describe("with analog clock face enabled", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/clock_analog.js"; - }); - - it("should show the analog clock face", async () => { - await app.client.waitUntilWindowLoaded(); - const clock = await app.client.$$(".clockCircle"); - return expect(clock.length).toBe(1); - }); - }); -}); From f750436b64c54a090767d2c88a36e87da3138356 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sun, 26 Sep 2021 22:09:41 +0200 Subject: [PATCH 123/134] update module clock_es --- tests/configs/modules/clock/es/clock_12hr.js | 7 +- tests/configs/modules/clock/es/clock_24hr.js | 8 +- .../modules/clock/es/clock_showPeriodUpper.js | 7 +- .../modules/clock/es/clock_showWeek.js | 7 +- tests/e2e/modules/clock_es_spec.js | 71 +++++++++++++++ tests/electron/modules/clock_es_spec.js | 86 ------------------- 6 files changed, 92 insertions(+), 94 deletions(-) create mode 100644 tests/e2e/modules/clock_es_spec.js delete mode 100644 tests/electron/modules/clock_es_spec.js diff --git a/tests/configs/modules/clock/es/clock_12hr.js b/tests/configs/modules/clock/es/clock_12hr.js index addbeb9f..57d1c7a9 100644 --- a/tests/configs/modules/clock/es/clock_12hr.js +++ b/tests/configs/modules/clock/es/clock_12hr.js @@ -3,9 +3,12 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], language: "es", timeFormat: 12, + units: "metric", modules: [ { @@ -13,7 +16,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( position: "middle_center" } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/es/clock_24hr.js b/tests/configs/modules/clock/es/clock_24hr.js index a5fe49ca..60cfa109 100644 --- a/tests/configs/modules/clock/es/clock_24hr.js +++ b/tests/configs/modules/clock/es/clock_24hr.js @@ -3,8 +3,12 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], language: "es", + timeFormat: 24, + units: "metric", modules: [ { @@ -12,7 +16,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( position: "middle_center" } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/es/clock_showPeriodUpper.js b/tests/configs/modules/clock/es/clock_showPeriodUpper.js index 4a5ab636..5d0c28bb 100644 --- a/tests/configs/modules/clock/es/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/es/clock_showPeriodUpper.js @@ -3,9 +3,12 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], language: "es", timeFormat: 12, + units: "metric", modules: [ { @@ -16,7 +19,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/configs/modules/clock/es/clock_showWeek.js b/tests/configs/modules/clock/es/clock_showWeek.js index b4a436a6..f8f71982 100644 --- a/tests/configs/modules/clock/es/clock_showWeek.js +++ b/tests/configs/modules/clock/es/clock_showWeek.js @@ -4,9 +4,12 @@ * By Rodrigo Ramírez Norambuena https://rodrigoramirez.com * MIT Licensed. */ -let config = require(process.cwd() + "/tests/configs/default.js").configFactory({ +let config = { + port: 8080, + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], language: "es", timeFormat: 12, + units: "metric", modules: [ { @@ -17,7 +20,7 @@ let config = require(process.cwd() + "/tests/configs/default.js").configFactory( } } ] -}); +}; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") { diff --git a/tests/e2e/modules/clock_es_spec.js b/tests/e2e/modules/clock_es_spec.js new file mode 100644 index 00000000..78818014 --- /dev/null +++ b/tests/e2e/modules/clock_es_spec.js @@ -0,0 +1,71 @@ +const helpers = require("../global-setup"); + +describe("Clock set to spanish language module", function () { + afterAll(function () { + helpers.stopApplication(); + }); + + const testMatch = function (element, regex) { + const elem = document.querySelector(element); + expect(elem).not.toBe(null); + expect(elem.textContent).toMatch(regex); + }; + + describe("with default 24hr clock config", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/clock/es/clock_24hr.js"); + helpers.getDocument(done, 1000); + }); + + it("shows date with correct format", function () { + const dateRegex = /^(?:lunes|martes|miércoles|jueves|viernes|sábado|domingo), \d{1,2} de (?:enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre) de \d{4}$/; + testMatch(".clock .date", dateRegex); + }); + + it("shows time in 24hr format", function () { + const timeRegex = /^(?:2[0-3]|[01]\d):[0-5]\d[0-5]\d$/; + testMatch(".clock .time", timeRegex); + }); + }); + + describe("with default 12hr clock config", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/clock/es/clock_12hr.js"); + helpers.getDocument(done, 1000); + }); + + it("shows date with correct format", function () { + const dateRegex = /^(?:lunes|martes|miércoles|jueves|viernes|sábado|domingo), \d{1,2} de (?:enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre) de \d{4}$/; + testMatch(".clock .date", dateRegex); + }); + + it("shows time in 12hr format", function () { + const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[ap]m$/; + testMatch(".clock .time", timeRegex); + }); + }); + + describe("with showPeriodUpper config enabled", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/clock/es/clock_showPeriodUpper.js"); + helpers.getDocument(done, 1000); + }); + + it("shows 12hr time with upper case AM/PM", function () { + const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[AP]M$/; + testMatch(".clock .time", timeRegex); + }); + }); + + describe("with showWeek config enabled", function () { + beforeAll(function (done) { + helpers.startApplication("tests/configs/modules/clock/es/clock_showWeek.js"); + helpers.getDocument(done, 1000); + }); + + it("shows week with correct format", function () { + const weekRegex = /^Semana [0-9]{1,2}$/; + testMatch(".clock .week", weekRegex); + }); + }); +}); diff --git a/tests/electron/modules/clock_es_spec.js b/tests/electron/modules/clock_es_spec.js deleted file mode 100644 index 4c39a241..00000000 --- a/tests/electron/modules/clock_es_spec.js +++ /dev/null @@ -1,86 +0,0 @@ -const helpers = require("../global-setup"); - -describe("Clock set to spanish language module", function () { - helpers.setupTimeout(this); - - let app = null; - - const testMatch = async function (element, regex) { - await app.client.waitUntilWindowLoaded(); - const elem = await app.client.$(element); - const txt = await elem.getText(element); - return expect(txt).toMatch(regex); - }; - - beforeEach(function () { - return helpers - .startApplication({ - args: ["js/electron.js"] - }) - .then(function (startedApp) { - app = startedApp; - }); - }); - - afterEach(function () { - return helpers.stopApplication(app); - }); - - describe("with default 24hr clock config", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/es/clock_24hr.js"; - }); - - it("shows date with correct format", async function () { - const dateRegex = /^(?:lunes|martes|miércoles|jueves|viernes|sábado|domingo), \d{1,2} de (?:enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre) de \d{4}$/; - return testMatch(".clock .date", dateRegex); - }); - - it("shows time in 24hr format", async function () { - const timeRegex = /^(?:2[0-3]|[01]\d):[0-5]\d[0-5]\d$/; - return testMatch(".clock .time", timeRegex); - }); - }); - - describe("with default 12hr clock config", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/es/clock_12hr.js"; - }); - - it("shows date with correct format", async function () { - const dateRegex = /^(?:lunes|martes|miércoles|jueves|viernes|sábado|domingo), \d{1,2} de (?:enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre) de \d{4}$/; - return testMatch(".clock .date", dateRegex); - }); - - it("shows time in 12hr format", async function () { - const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[ap]m$/; - return testMatch(".clock .time", timeRegex); - }); - }); - - describe("with showPeriodUpper config enabled", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/es/clock_showPeriodUpper.js"; - }); - - it("shows 12hr time with upper case AM/PM", async function () { - const timeRegex = /^(?:1[0-2]|[1-9]):[0-5]\d[0-5]\d[AP]M$/; - return testMatch(".clock .time", timeRegex); - }); - }); - - describe("with showWeek config enabled", function () { - beforeAll(function () { - // Set config sample for use in test - process.env.MM_CONFIG_FILE = "tests/configs/modules/clock/es/clock_showWeek.js"; - }); - - it("shows week with correct format", async function () { - const weekRegex = /^Semana [0-9]{1,2}$/; - return testMatch(".clock .week", weekRegex); - }); - }); -}); From eb6d8d4f83c5652ceb1f426818bac63c01e22653 Mon Sep 17 00:00:00 2001 From: veeck Date: Tue, 28 Sep 2021 12:14:16 +0200 Subject: [PATCH 124/134] Remove unused file --- .github/header.psd | Bin 225118 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .github/header.psd diff --git a/.github/header.psd b/.github/header.psd deleted file mode 100644 index 6b97142ef77693635efd2f09c14c35198340400e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225118 zcmeEv2Yggj+WwgoAk?AR%M~d$$b_LQFmxhq1Oybzgk%VjlraSn7a3Pq*Rlq&BI;mU z3u42_y4}{cL~Y8bIyC7^PKm*r@!~k zfZ@(5!XmVPF+x}_69ShOB3cW&Zq0v{B1QPNTdcbVRI zf^C9lgnLff*ag|{DGMe}O;P@_z6v>@CxXUm`C^IHFl@VFlZl!Opem#>D5)zdD1A8U(9boU>_cEooEun9` zZD4$Yt*0$vP=akxZ=0h3>oTMz?yksAnLTLo$kBRs_%yi7oZMW`p!oP(Zn>q`E%shn z*{Sgf0|yR_xAl(i-Mc3wdgk1knVU4fXJ*cY8i;{2(w&o>o#x3+%gR)Un=~scFL!X4 zF3c$SPcK)7Czw%YPA^%;UddS*@$-{B@d>?b@%1H2Ne-s*<)oMr6B_aTnvj&7mdQ*m zz9PPMqEH=#@Z2Mla@|8(PWbZwwckfGWy$9KBVIZ1hEsP1U$CRYp zq)3#6sR@0Ncu=4I;V2QZwQ;gi(q`Y5>59nzhFtC5p?0yN!vr>9XB~6$Rp1cn9$gJc%S}35k#+;Is4EP|gK?7#@v#0dy zW9!++*4N%MA))`ko&#su2KIEjXStKy19~S6=s(cNC=9GlMw7DB(AOlThsm%kDafpM z@<6w}Z|{Vj_TIDYJ^LgK7|=5*dBCimeeJg1vr}dz&+6CTZe&ppOr5O8rscpMZw<3k zSgY(!rnqm83^gLs(`2vUNy^S~v(XIhVzioIHxle6m_|0fK}pH1&LPQc0Pd74;v+&s zw1O%1WNCG)vuP^O@WYZfoX0J5+?kCv9}P-MH4KuIH9Pl~q-^)FR9HyU+O~!pnXq;S zSH!aiPEY$UR7FnGygybE{rcGLv-{7o^|UATnccHb-z0laSbN`|_JITYBqXP}-2(>% zEBbd-1bQGj*7XVYWB)%ZB4o+QbCNPs-6=!j4I?%J{x{WK)B42U-H7Ur9{(rmPHT;k zJ)_av*6m5J2#pLQveL7%CuF6#hoE<^FF0g7VW|>FjBsXW%}z^q56PK4X1J0#YDB+; zf&KdR?A88$cD_I_QrlL(6m5i*E zy!51OB_|^(J6Fk&#a2A&Nx7WY^iuwq0{&=bzd=Wu<{}LvoP1q-(o%#i9HdEUp;(q+ zMHC-g64kM`V8#ELH?^(d&%_R5nVAGt(UcogT}{zaP{veOP!&zNG1b)+Ed^yvbp=(? zlp9lBP0>*jWfmSOl@f`Wxo&r6UIrt0&+CZvY<_Mh(@sg7Pl@4a zxlF@o4bz>?hZ?4inlTkYZA5|?D0+)txb_nRaJAvLH~#XU283r*vSv?l=jM4P&AKTW z!L5Z;WQ#2P%od86BHSWZV($W)@#%IZNczSN8&b0NcytMS(v`h(!_&6y&V!}1! zv?sMMCq`6H{0V8ILzpHe$)}Zb5Pv!)M|g5Gjl!Yuv$BI9Ca3012!0rmojD@(Au~7h zVf?K0oM6nv)ZBT&52G^DM+QGYzai-1$#YY6MQBwe@XXE#u#pd>Pfk&kl&rj2j;sf$LXVwWDo?cgOcy`Lvt21*)UpP6PbsqdTJUvCJFMM)Ndaew2&QEtt4vM#&=T64M zo_InRPju_n;!Jhs7}mmj3gb%JV!V5{22(5Bsac+Svz?Nhu7x|ZlO5L(LH@HQXJ>h) z;~7gQEjKMQ)lgqsMob2$;aR!4SsCeBnW=h`);!Y8Mt&IylbWki5mP@Zil z`k=-^jK$T0NB{M!Y+v1FTw6U;T!wnJHv>c;l3{IHPt8us%)yhc?#$#{HB0O)W6s0h zHexEQJxOGW9N2gg?%lXg7Psne7w9V`+v6|HK~?1^AyO^Uc|?A0NlE_G zG1>&B=1azB20x!CQyrC`5UkRxE6m68J5N(*aGzsiFq8K1zWhry7u4bJ&dj$s(t<=aZ(qA=F1#p>0Ovp(!21re&SyFoL)TGo1skX^(q{B0di8*7ZP8e@=wJnU`2;sOnS=kGQ zrKhDDBVjwO@MDc&l)QP0dv;Qu?E2&8xwCWY5uauRM~b(al`5Y+4O4D=4S)EUU<8tg ziCLM{bzE+i2UCk2cX;30G98_8ozT{^WT#yxycMc_PHl17+Ad;7m?OZPhnC8Ft(~@$ z!RVJ;j~$^>J32w5>A%X6!& z6Xl}hixs>AW`Hu*eM`DKH@Bw~Z?;LwPQiO;GCWC{7`L=CGnMF2=ZRw(to>;;GEAfAlI@XO`2x35A7HhQhL*Ltl(hEP8P$Y}QgCR{u?iGd739x-Q2I^)4Y+6^E7Q zG}=qpD{<1?$-Su1;J;G}1SK233Cph+^9w$$t&G%~utKX&#>3!wcuE*A7IG^+Ya8+J zP8dcjjK^h@-Lu`CzqplYurf@)P~Dj+Y4YtpX_*nvl!qbw&SYT-yw&U)HyvN75uI-A zC9K7rMD)RLL`=t4BKo>#5Mv3}+xWO?SU(6c{rugU-Qynd@^8eSsC;~k%1M*Mf*3J* zs*;?SJx>#f;UyMxpLU{?I8&S_E)*AG*3w(_7nci%7$vS0lQ3_)M%;jz+8mLAS=%k* zFX9eyx42&{7LST2g-^U7UJ-AIe~H!NL-DcrTzoCoi49_lC=olweo-pQ#R<$Rnp@gf zI$F-OoNwu7xzy6zGQcv#GRiXEGTCyC#brsgWLokpf3e(Yx!QE$>-A zwtQvz&hnFGn`N)%h@~njI;wS4r>JwIx<|!F4Tu^RH7;su)b&xRQ8z~|h`KB4!Kf#q zo{M@dYE{(7QC~-Gh$@NNA5|7DqFY6u7JWf<&*%ZsBcdloUmHC;Iy?II==-7{i+(Qp zjp+BIzli=mx+MBQbY)Dln2s?@OwX9hW5&i@9g`e$bIk2A55znf^K#6pm``KAkJ%Pe z8dDS7Cia}zOJfJcCdST)O^v-J_U_onV*eTYPV8r~8)A3HmN#qG?6hV*n)Posw%Ik! zZfbU0vj>_z-K?NlQM2!w?Pylkym|98n_t>|aPvvclbYu?zq|R;=C3s`Y`(tv&gREk zv}$pFi{33px45=NW{bbJc&x>%E!MPH-(q)*6LHqKZgGR+CdH-1-5Qr4_d?wJam8^v z<4&|}-?B%`!7Zn@ys70KEuU!lM$6Ay{@n6tt5&VLv>Mpzs#a;Oyse&SwX)Tht+utQ zY~7*tC9OxazOHp%>jzuE)ViqkPpyx(Y15{A8%LXK+vK)+u+1xNK56qyo8xUew(Zq6 zv29A*MQxY0UDbAd+e7W*+I4F;tlbUm7PNb;-COO7+a0jRS-V?DSd*-`TbEhivu?7M zweQ$Iq5Y)x8SNiv|7!cM+VAPmyhHa6qdKH?xU0kS9X{!>qhoZ(3p-wa3|Y3ZlspZ2fQ zHl9{>`njhMJKcTyy{Er%`ufu=&N%xF#~JQ3?mMI4j16a0ovEBT>dd)kK6K{lGq;`< zbJitiU3JziXFYS)XJ;KayVKd1pPhX6eP{pc?9JyyopZ@Klh3*BoafK^=A5!~&pUU_ zxt?>Ep8LtU2hKa~JjZ!Ao%hIjYtGwye#i5NoS%07Bj*>Mzfb9`3{%pTCzMZ>(hJVH zVC)5X7d(5xw-=n~(xc1OUH;mopv%?^TV6Qe!r2!-a^czwOS_)mbwby_bY0PPbGNu| z1G>%W_IS51x>a=V(S3UNd%CagzNg0-Jra8?=&_>5&lk11Xy`>ZU-aBXKV01G;sF=W zz4+;i*Ig2IN#9H6T(azv;!C40?RRO~rB7e_-DRY@8sUgdjDW= zV;^l_WPjIwxX-11+>hUUu$zXxHtf)F+wkn+?+mXPF=)iX5k(`T zM~)eJ-^g!Abr^N^s3%ALGP=v?)X^(OmyYQ>=C(0KV`ImT8~f1MO^N3wCMUjA2S8ri^=X-1hO8jL#nb{)DIrS5A0%!p{@CP0XCQdXkuwIO*X@Tb(_eH#-L&hby)vz0`pD@^ zrkBi!pRsVp*VmkNP1-f@UfcZIY1jVq+OnCWWgONpoMCtENv+FUV+-;mUX~vqR?G z%uln<%bK6{o##@|-JX)02i^SW&86Anvj3T5$+`Wc=kj}e ze~dxvf2a@6e(>A;e)-QVZnijc z@y3USKJ@aE_DdEl+41m%hgUtKJaXS7#~!`$(XSrs^O*1PmXGH>Uh>5FC*ED!b?M@z zC!d`2Ph?;IxAKSBjN+EBC$WdUNBy#{FyUTLa#DckWwdS#|5G($#ZT zm%Mw;yWhQc<$G)2zx@4oKIrwqOCMhF;j)i9f0Vzb<(j+JsD%p(%ZfZj2R=^yc*ois z*KYY_#wR~~dex`jem3s2FFzms`6pit`=ap6!C!v()u6B5`}crti`^`K5 z>HD8|zU}wzs^b2|@2(rT?)~qs_-@Vmq3b{Xe&qL`|B(2@*Bd5o_-^CX8-Lt%-KLTs zQ-0j@Q~FPbH_zLAVvG0Z*q`s)YTf$SFX#O7od05fK}o-okG756_RaPw+qdjU-m(AJ zoL^7wylYpRU61WPfA=eUdhhvg@94ej_RZY4bH8W*i34{ZY=7{nLl+%-JKzX>Q#zw` z=i%(b>X8SIo_X}8V||XTEpwLrQl3$MqT;^eXC8mKazN!5Rnx0>pSa~@^OH|hUtIlu z&A6JM)eKdYYmH8FHo(b1bNQJwXwiamYR)H?<2N3+B|^+l5dO0`Ls--w)q|q7d@0|J zBPQVUA<54VQ1O2 z+4Jsx?4PSX-?*#1|Cs5ix7_piORK-ww7a6ch>8N+7|E%5v)I0p!UYK(V!+_$E*)cg z-|^_z-p5O>t@2MBcckYl4|-0Y{*O_Wt7lzd z-&<9d{Lw#Dao5cE7EbAS_6u7!++RKZ%9rO&ET8-S%HkPksp5^|(|$Q{mxJGKKkrG1;=uKojKv!!ecW6@03lydQsUsFaE9U@$)b3{oy#z zQQM6VeQ==Q>zBUIc=6ed1K(M^`~43FU*gYte#y_bty*+v;>5M%F1&nyukPJ*N^ko7 z-^FVld#5tFZNXIMrV}epjCs%Z!kfMqW)B{+YWhnxmbQo9TL1n_qcRuXa>LL4-5bXB zTK?oOyH{WG;pmK#A(*5nGrCwe2{Ow~Bzgpd4OXl;ZZ#aAJ`}be}@aS$E zelGrQ>x8%8Q^kt~su=ZAx52~54PCx_%MS}i51DZAr-$F(@W_|{SiOFC@@#w6YhS&( zbw$U01y_Bu@7zTzcK&qRfwf<~asSGTf8H_k;*9s+y=>J#hi>+-THXBMGyY@WBu<*P zWOwQNsu;c3KfNmRn!@hiT(-L9n}IL=d53cTw%We2CVTfsH4neKVzw$4JwIX2%z5JVTPh7Kb zWdDtus}^1U!wUa|N8dZPwWj5#kL-Qn%>|3D-&=kAOI4jy`p3TJE}Z+X!io2f`F`PL z|N5kA+NSfKne^6oRe4qSsbZolW72JB@7*x>>%A-f@!AE;ZyRdguw{SMqS99`UbQ5# z>r3i7X?+8p_C#-7QxN^d=71`;T(;pJN8a1ptH=N4-R-IGfAGn(N56k_@Q|18zOns* zf30}`#!0saj^}Oq)wLrfB{}8V^%-k#du{nw*4=L&FTQ-t`s&Ub7j`@C*f*z@^)H+D zL$i!WR-aojxBII1Hoo)FvD=p|nez4aombtve$AU(AG+`7T{S;0O#key%rCYizj@JT z8PB|&b4KyoKTX=(ujc;BPj7#5()Fp%J?-`_ow4bit-}hR{rroCGjA-vZtJLxJ5#D2 zUG1-FR(PQ2^JR-(_@LwEE&n}ueCA8ZhrWLOP|lq`*PPpy_1Zf9X!^10p3gk2ip0sU zkJ&Kf(d&Qsb@R!mK74BCs2?lO9C+FmcS>{n_pg)>{b}50ReZlm6*n#P%_&=W$&xAU zR@|`s>;2n*DjRy!6(8?T`{I*hi{9FE;F?rbbiC&LszpOjUUSo%8-M!l(*37hzij%H zkJo(u!zQ=ufrqBe91V>xJ9quU=?mVisZzy^*+V84?^-ncwd(8lytC*(o8RpH=ER=U zQVRRMW$(8+~1@6^cP*T{l6~Q z(WB1dvsv$c?A=9-?I9apVoYRa?@KiAMAVm!I#PwMZa>x zH>=-2kpAxl*N&=u zFl+qRmu(&TUG~CWFU~7I@$jtmdk4I|ZDI0PYrlwnd)Bcvz6le$k9E(>JL|_DRj*&W zbZ~t0OZ#^mQnmWmV@H$UOkdLP?3sJ7KiGWk>bEMsJM(W3ezPU#$?wbWU-8DWbGx^? zByZK!t%YMYA6Pbd%4fMNH!ZxT>XCCS=V!e9@usUr=Paw4`&eM6Dn1*tq4-jJi{sT# z?<*S|{o;4`-f_?MnVoV!h<*1Tzihv@eAU07yl(r!jkm?WwfFg7a}SJv>YMAfTsz@- zx83J{{He&udOmYkp960lTeN1$Q>zv%I=XNB;i?hqUp*FA{oO;0Hm_Rr^ga7jvGM8~ zmQOnP?MHhbTA6#(!t38Wx$Dq#bNwd^6VuCXxc|-#qb7b?c4^@mk01&v zqh+TRx?iiASFr1KRkZl@$EVx9v^~jx@5~#@civgPBIC{S>(g=;o<8KjvUB!76&RnM zRd{Ss$@Z_D2~v)jd8mn2S7zthGI++TUst)8^YIvgr` zrR$Q#3o4p@_3ZZv;?8Za-tf-4xEH>9+H%&&MH?=BVaeiFZ`eCM(>3wI?aj9@+w?(o z^qSJwkl^e$yra6F81eUqUMOB&^;PxUlJiII|MKUqbJ{OS9NT7-STuaL7sx5W_4q622kpc# zk%FVzSva;*u<wC%8yEapXB-gVBfGeyc|=42y2W>#vZ_W9Pd6n@69h4IPhv(ovQ)x^(fnX~8X@$&QB%(+?N zpVMw zUrtTSaP#zi*oL)x#6=fqWt}}gn`X|mwg2(_^Dg{;1*QK*#88LBsTa{5D+T!%+V6e_ znP}Q4*=|2m0{@z<{np{{$3#NnO}%x>9BlXBB`l8ij&o0cZ^%C+X4oG+{6WX{8?rWR zkH6KCQsx?LnY$PbFiqFRJx-mUtLO($ZNvoBYpO^?-A=&YY+1Y6GBwT?cy2Hz zJ1r#zTgArdU3eIY=*LB3QZ^h+bYBzRGj445f=phAW#$eu;)Z2valXjIC)A{iL8Fhs<2Z?1hUJJ)DQ0!SD<3)I&upd6Yfs8ep)p_ZY|EBcT+uQvUXMsi&TSdT0EA#SKPww|@?%^)@sx{d)CTLh&BYKN zGK6WJN!dxM*-4%`lk+k|2>NLS!bkw&I&_%)lsRrU7=)tY;`LNha&Jv{%V@(Dcw+Q_>c=m3~H?Guy32E4_n3Svk42!*Fzz<4(@YO`E5S=O_aV`D<~8tl0a7 ziYRjdN1i#&RC*1N^_I}fZZ|3~E`B_YA>G+5pC)8fWT-M>qhr!hoRAD_-}u$7ATFMz z9`8>!-RFK0mRreoX<|o%b0~1b~k8Onz+%Q{qNT(s&jZ!jyoM~ zO4=;dhyL^T>A9b#=ZMQ6(sM%%E=il4Gx-2@@P{GgZuPsI67pej!esjn<)jgCLBLvPFi{jydtz& zfiW$>s7!?L(SlPKc*V&~^yVMWqSczn#Kkv|6N(ke%NX}G#WN}^Yi^o81nHC!>NLI* z2<7CzU`##yD2}dPww*c?A*79GqtbE0fa*m;=S6o{zN}ti+QOz>M(Y7$q)>vMYtX7B z!W69!5BDfG_$;xoVuPvpQJ4 z-WF$TWou(=XKQb(w$<34wmoBuwGFe4u#K{fu_fA)ZFk!KX1mAspzT@P^R^dlFWFwP zePY{T+iBZvJ7g=fmD`rtp29)H1>(Ak#r0yLxD5XFgT&<*L|+gmo>OBLo52ZFLNZd$ zP|i_X*gC0~t21paY%OiAZEbB!3z!DaX0p9+|MS(oG97 zCO&%kkl|&FkV^ioikkuj&K9`_$wm}+Dy10^jh0gr`fWv`1;tOux+!fOT`aC{wHGf31Uel;=3m%@~gShL-P#T zlg0-lg6qi8!mrjMt5yXB6+aP5&W3uEM7mJKWHCkzXXXtqCu=Px_0F;06R`HFjtb&6?hO?uC-{9bz&?}LfIH0`fSITSWlUgHaoNlAh|*FZB4d)TG?JY%F*}TtNKTMI|H>%m3G|SK;CVmROrF4!PJY;me zbCu9RRw8nm2kaa%TISj)zSKuk@F(Dzu56$tfxGsEV^0iJZj>MogBB)`+JIGmDH_a0 z>%{V~F{*vts_bfd;TvB$ZJ81ZhyFEhZS0)sakJ`8p@-I$$H1MAhOTAMU!P1HUoL5U zc_UUdvJ*6V<%T*{b4IOVAz;p^%^5XLSn4*0hE@&cj9Lzy=8RgNU1+llb4G2>sP$H1 z&Zv2mjeoyudT!3B%^5Y!=l|=BddLvzfkba2cnINN489JWz8|spjpMys%jzyMp#a3T zV65>7Ht*%BA^nvQY5Z%)2qzW`9v)@jtGgqkJJpJwghf+!Et!^-nVbce65~;O>A}Ms z46hv{H|p!ZRcd>M$u~6o0k1I4Gwr|a6_$2|%*XHwD_U~r zxt(`!eW_?!iwnAcKK&t-e+R0zJFZoD{PZWyE3D&Usi{4(&i6=9#XXT;Vcp-B62HMK z?0oF1Huk;3Auq9RF~TzR@P}(&UAum!o=fnehfi~4-_Y^an|`!9JQv)&`^B}lH_=PX zhNoobNY~ITyx)UwHc{lENgh_h$uc|xE9?|w1uSE^iJOfzzan?b4Zku4>A6bI#d(3Y z)!Pda{P*AXHKRY;pXF;d`0)55a>l<1|E~GFO0`gU2!{EZ6`g6nuSkmscPaZ#zGg#z z^=b(C8{zkMc>}&?^A~k0(o;lmIsfRpdT`kHP2?Y?IJU28Et)*=sBGm>z4t%MVj7cpHJyUl{?$N+YvBa zt-*7v|Aks@pp7LcefrmJWu}uF4itZzlNwcKI;nA!26`}^)Tjp8RG7F$JdxC}$D4Vi zW*(_wc#+eSFlRK=NzHuh!+h+6^R9UFv5%zm$WsZqDQ7WtfkBKy6dJY{}-LqH19C&y=8ny zSp0w6bLkY`Zt}Z@{>OW}-TZBYx0_?eGnIXAueiDB_WaK#Tyyyw@Mp7{Kc)u$d=1>8 znm?unObwVCFg0Lmz|?@L0aF8}222f@8Zb3rYQWThsR2_1rUw4!YQWqX{qy$(O+;$o zf3D4&%uEfK8Zb3rYQWThsR2_1rUpz6m>MuOU~0hBfT;mf1EvN{4cwucJEP`4=6^>6 zX6rIFU~0hBfT;mf1EvN{4VW4*HDGGM)PSi0Qv;?3ObwVCFg5T$Sp(P^?I6w+r;E<` z=_&e%EAf+v?s7}rM-_mo(MpQYkS+&zh(r}6uQ{PYaczbKx=&kOi@3HL9G=YjgHM0pzbuOgR1 zaj&>f{9W8H9uWD!94jtCc{|~kKb`a+?d}Y5hB#OLoG19Bhzp^a&f+xv=M3uU4q^QG zgixv-rNPg4Aj>GlQ&^=&2MS!)vapC3g+=ilQ=P;aC54X*i#JdMMDIh;l*Qw( zk$E1Jsf6z&K6$N`!s0-B;XENkVYw=lA|X7udVhvkr4T;g`JNL9@mGsagebtBV=t&8 zyqHk0LjI&`DOSoLjGKVc6YhHQ}U<}n! z@~c%*cnF2UwOB_fhB9rCl!XG95K6v8@zgYY%6cYv( z2+M@2=s3klZ>@!s4`F`@$70QgdFET66Gvc(U!YjHI`D;9UZ}$2v(lJf7bn&IFx4hXDGOBro2ha5h~PtbJ`r|_8i%m%m#LA?kMz_rOj8sh-u5M^8tETm$^cUOnerPW zO(D_*HGr6WqzQ!590uR7pjupInkA9ae#AKuCmB8@aOXovewZ}v&Ots1bN(BAD#3ys z1sge2pw%LneMbOMMkZ3JOonhj!hMiIGK-%9dRhb{nMHMd4T6+0(mxDUQ5`f@i030b z02yZ`>L4Y;w@n0H?SB0*dhQdj=%|3Mg1d|^a3Ibg9c_Z zFkFc6{RhM<)hNHD6)c6t;gcXPL`#lAkVjxCEC@TJDmBV0H5Y&w(4st%D5^t(6d)Fg zu-L*uSP7mW2=(OrRu(5pi3EvqATt$T+G|BT3IwV_oJS=Yy_1z}s4!o#EK@Wt5t;!K zY#vB1#6U0#U5lX`Ad!)m{XPaMFS0_Eb)76%v`4dspn8C0lSqX?0(WqB7)Xzy=Fx%z z)({j+=K>TeE6OVK3?fB409~yjYvns(v7&sW9S&AVTIhvzS~g%6e1~%LT0{O3SRRSx zfq<)0CGQ~A6{v*7biUXYr+oRh(XgL8!Q}0AX8LE;iBP z8Wls1^1ZB3d0SLO)Dgqs~tI~T=Ks{az^?>*KIVm_M5yL}viYQw?I(Jo# z3izB`nBH3<&@Ri=omx!>6oWh(v{d>JT1`4N^1q;td?K(9y}4rpa|#>;7UwwRBH2R$ ze#rqsg^m(~yj7Af26@yw>oQ2buu_%eK^apeZ-ApDxC4(i$~+jdTUcC$rKmY(_Y1n` zN)^&JjApxVq20KkLblBUP?yFB>c#jRI7trP5)p0nsp@XkQlR`OEY84QG$lfggId?ldS{C1pP-qt1{;{hSf% z41`g}XBR$Weq*uu_p3Df?UFE<`2y-5h@-7L%XA$hlnU{HuOF7-KOuAfl~r*<-2uLS z>SP=F!ayNv@I}-1ZDsH-nF5+BK%ENPreI~&r{Nl+h0~?g9|GNj)bu{J47O+mw6~Je zP2V9E)*`#Wd{hZdxe$b{AY6=m*p=jKgm)6RN=23XU?0|iUyUio7yuZ9FPgJ&3;FIg z_&UiqA2@6psHnPpW4y>L0D2zHAoy9~XU>RSd(>mZ12D2dIXnl!7E^5o8f;-DY}{yG zvg5XCY|%cIKqXpHbYZ^NS>uRydGk4KbD^ftM)XkCYbnGeI=UdD9J^2sh!p$09wc;n z*?Wm%tx(7fN)UdONj7tQb|807T!T%MgKi-fcMh#c{8-G70hCC?1tFO=akav!&^2TN zSU5>*w;k0h0~xrGfd|Et)>9>QD;x50OaY<_oLGcLIedX~)e=xpuUI%(d@w$S$(amP zXVehd64oC~gB7RM#kG@fj|45}P0BrWpSj`nccMjOIPdO}u(1vYcrA0&3VnN2iMX+ptiN#)1G?G^XHOXoLzPyeO>?iEKzD@`J_52NtIYtoD3h zgGyx6vgBh;AbW6GL>9wmWxq~!*h&TZNUIOneytps1|!_XksAhvc&$Dv^+t@GSQ-y< zf>u}xa*sl{hUDChu;PkEGfIIQtaFVL>_hdCIZCM&LD??|03cHL0hmRx)mH?85(pnS zbM@)NFe()numuF9$(=M<@BnvRY~aqu;X&siZ3*0^E&Z%rVM`i!s98CVP75s)TyZNr zz`;@-W`bHr0}PRuHN?i_r1lN!7HK^JaFw3t!TBIfvnc>JKYQ8RfdV=LmZUl8a+@USS!%5^Ps?tllk~G&cX$N0$92q8xI;~2uL*` zf;Qp`qYP8VvYwQoW=-#+fb$P@3}KADz(*59Fw=(!EBJ^xiY%{EmoWOX0J;#_bp@=N zo`v@S7;82MQxjfx+w&PcLjQJMsQ}) z3XrFVSA#NpY}8r+8B!(1P>mPyVPhUU!4gSXIH_Y`W51*VIJkp>2`{=#KWETbZL%;@ z#{^2|>sj5sO4m|QqUked&=6jlVa3?LiJA$wdzW3vZ;VHTjwWKMKo z4qQETDWkJ1W-P9S0Hrz{`vvEikPm2-1$qwjxv*sJguKI(CHGBx+vU7x(?(51G*ecE`HYztuwP?}VH0DUylg|YQPj{PHX z6m<8Ht-^#sTT%m;M&JW(9lo-Rq?-@bvYldb0J>}e`8r*N7Eg;+f^?|{4v)O%htX9k zy}}Vemjx-TLzf+#0=kUFB7!oKt_ycA;5u=2)=QV82Prd zV!TFbvba(un^5b~(Kw|gN1Toz4b1U`R@u}5E87ormN2ZcHEgZ6pf3m0NtV0=j=|E8 zR60LdYL4(gEC!-i!=RQCqIHTex_bCI5bCP(3Rf6ET7?2Lw=%y|@?+jup+Sq3=b0FD zcWe^|KN>1n6aY~{3|IU0@hhyuk9x5d3ZhEA*_awAE?jM=&(AMIGGzwzsWwu5zriwFnKk>m!)+b8aczrSthvWshdRbAUE_8|#7kG79IUpge zKf>OC7sg7~A}n8_>?v81GwK}Lf~^~@*60=^nQ(s28gTsvMpE-(oXCZ16AyE13a4FU z#PVZ}B(DyQlT6JLa*ZjkO=pEvg$5_g!HZdY;3Tiyhd_M8tr4+7PTbWYH-nP{9Hfnc z6YH)(=Z>BN!-MUxL*~I2;y|i8^{4SVu40Qo*AOOaQe%IN6;ew}0-CJ95G#4G;VZ-r zv~0Iz<*D5YBUq6Q=k&7vPQ?nc#SQC9XQ5y=l8>c)z#5`OCyNq|k{2NCqM&wTTB3DS zYXlXA$ug^r2eiBvaIbR0YBD27eTAPRRujb~H9z zU4M)cQ-ew|&}eJif0A0_Rys=DR4r+X<9wjxQ`flu0X2bxEFrF}IX}=OCv2EI1C?r( z8e8b|Ivh4OY{UnL@`l?Vx-|pIj}*Q?%um`W_^}#UYRQj7eg!wY{rOI`^rmy8=GkUg zpUywV4XLHU0!`MZ!41wPHta`7sdBrxiPSKIly(X*S*@_!KTxfpBC8eECMyGIQf+c$ z7OPvo++1!tHG%{{P1eC5qoy~=d<=}NS!0UrWi!XNt&i)8rW2FZ2q;+rf0&rm70{?V z#n2f>ZkSq>O9WR*i19$e)o>%gywOkN2bRP{pVqY6WG&Shgpi*sA5dv<#`2T3c^6R};aKdWLbTAw%0G6AHIyoP% z+J;skXmc!JF?_X~0Sg}_CozDYnT_xUQEU7Q;uSeAk4X;sfNs_F5d}uVks*w0xn}DSY zp>&~>x@?@KA8EK10ghgz!gfrg29cWF3VNsvc2el#%_hSgk~qyyo;NRp5WNV5!tDC$$yVo;P-qcz%w z3=#W|%r9Tt90f{1H?UxbhZ4#ngCYC){6-j3&R>UN0YXvz_=_rHHG`oOpA_thE4VsO z$&k`GqsG`w9dPfRoP!LJz5vYV_+>-5ts#bbN677N=+LEw@AOTNGi%AAY5%g>b)1(W*Jh`F{TtSY2qo**aiu}eo!d6gBdAiAy z7V4okNdQ0taNnjLbiW*_NDuP#RSBrp$x}&?LBJ*@J< ziYG*}O2LXw1)h_Fexh(8L?=$o^Jp&88wXtBG=pGj4yzT?VwrUBz(y()v}n#gY==S~ zsSEXyB3xH|bcd&F1}jBoR}GuNjt?25Bt&s>uK=#ihN%Gx`mzKZa(hE>cse&e^W))! z2#RcA61^D~LT&+^c0pyhHHNVuIRK!xxfmo&9U z5ZxleJupfq`WoTfXDE-)Hpz_zBYEAO;LXSasV&9u9;90`DH;PrI7L2L7J$(h6yYoo z9dHWF?dXO`Cu=$#N|H9|85raa?HE+i@puqfh{4#R6d)&@q)?YAGW?uG0q`5qyNN|IDYy)@Jo#rikIG!0W3cw*#d+9hCG>;dIeiNH5X0a z(v#TNcDQ{0a{2U%j3uXIYK-(eJt?9ccpg%2&_vLdO+N+?Ogi9)Lx_AoeW@@!>x$-+ ziS!_Ag#0G7&7*2GoKuyPD84hF2C6kqS;uSi)IfpDp$Oo#UJ^uGftl=u`fKFefYk%f zphQ(-`RQ&au0f|RyLgpI{|0oOf~?1FI~t3HofM8OpveuP0(gAL7ib_ z-4A;?fugd5McbwKIEaPukbdy+%J-va)N2t1Ao=<>p>ZEM6`fWx)|`ba!d<+Xh(;PhX}PyPZAxky!fC8BK} zA37~O7~oR)jOStztssQ`KolMTdjLTyGCJXSUz~7g-o_jNJ`q(8Vf_NJ_oJ~^IaEBY zeg~d**I=~=&GisYkP43=mOok;>g6|wJgGH(UpNxNXh9f3Lg)x%rMPN^$sxB^7~0L@ zu$0TFP*oJy3d=`Wet1|B1|>|}+3Iix6UzBx5#CmH{7qGhVP@z( zkqD=Fp+svjX7IUp8c#k)`|!w5P!>8&JJ2sV5s8DXP|8nXiD-DjD?3BPx*}ucw4+eL z1jvPI7k)l{%pX$v6u{_c^0A$a7K1ShLwG0_*&+;2w%ITpkb|A@@rh$2H8^9k7hRn1 zfIn`u)#2rMQVgt+$j1;VRZrkKGZgJWSOk>kkz)lPLN)*k*^T}}QNAX?2weki-Vzm_ z@q5EUKV$>^6|z_fg=F7nDEb^9rmCUPcR}Cd$Afi#FZ#bw_&aDD9t^&C-GRrpEiB?q z5OGv_qnr-w)?l!(2z-&0{&R*n2QOl%`*V@FNGS5<3)(9fx`^(O;)^GYpDTq+%!>H= zikXFfmn^k# zB36iMyASA;+l71WMFxgksr^fYQx2~QkTTj!3+j&-_OC?1PKhNlms0uJNL@QNVE;Fy zjaXHF3Z<g~VacRSmx{S(~%3Jo0BktkP<`=7;LXybsr0{5KgF=QXoF~4v; ztzTlfjw9D&NX_d``$TeCuNz8`%*m}HLaq}uwCs(-beJji9*X|-Zl18*^Z9b4@1jZzI%{{ zp=^Qm=X(I0_Cs?=?0h`-h}4Gw_if1KFj7?^hs}B}dsrse%Q4jaG1O{6&t)%iU?}$T zB%7b~bVj>B1o?xo(_>)9`NJN3@<-rn`QTUxOv}N6Scik?We6?P(JRoFSmu!C0$_hg zqVs9eV?Ym}&2tWNT=p9wdDh4t;IkamjHV;bMt0*D+qe=pB+uDY4S4K8Eo=ueANVAf zQi&gs_!a2$G(N;pB|h2iLOBimaxg5{@o5w6aVx`0a0KXwq46@?{F}*reRg z`jxXbK6uHpm&3}A={f92nqLuut$UP!qtI6T*3RLG%z?Y~<;dX(WV9UE>l*U=kdDtu zRzRX$>QpNO4oC2*u^f&9ojFJu@Y#>@GY8~{-o66m(HIe_TCg?pZaXB694e5yLN5bH zZsXI+e{6rR7 z4x9sUEMy9!4CRn6lbm=kNPTi7uUg8sNjd7cu^bK}o|+HkV5F#>1M@7C`edF}OBv6x z$&hE6LS-PPR)(hKP%g{KgJPDJpQ@I!_hh|rtm2j0&~hLqTS<5hoRPDpIeHr@j54r{ zTFup;!w#hRZ8;bzYUfaao<=JJYp!Z3M>LMFhCCnaqP8RXYkh>qpR)+g7Fe4GI%is% zCD3VtC8Z@)E#){tIgYiw)`w16_CN-D1$w87CZL~KN~T0LlNan`8f!dAKO9?{i$JX*NcsGVkgbK;%)YzN}7}5=47ea=QLp6@eah;{q z^g-?H(OGD?h6W6M9JjBLxY``xIL7e$bx|L#CVeVg;#Hgymn@ivA^ZDLk7MLKf*b?* zU8CpBQHdpM9F=PX))iCNuCw}4HCaC9vs-GNt)jMOIf`;bX$mSeV95TAey8M5Le+XY zGWZ$u`i5+P<2d`=!%ZkZu{ds0){k{gW2o$ZE1HDL`Jy4qb7yXh98G7)M0vttrT4V90X5U4x#iVPuYov>xVsD$dN^C_h&W0zJl`gG_rc zMkFG$1{=}^$Ec7j?T&i`9F;jEi|oU~akW)KW5`?^b3|cFI+ZTSj`Eb%RtJ9;GTRZ$ zNMvo!-Z-*0YBz;*Br@mfjUiJLv<}YoPNfazPV1*EXXd9u)@H)>A#;>wA4yx|D8#;! zvt|w1m~}Q}8?*~Ux;AGGS+lE#k*TBl+BWT;y&OlGQzLUdq{&h<^oQ2^$8h8dyEZdn zX^pY&RLJZj4B0=9Y_uY3Lqk3eTh=Vk;2b_Xrq(si>@hg%Q@TFRk;vLk$*GX38*OIH z-i!0Ky69Yih34Jl&DE75%etdyx7I2{s}jRneh)fZi8i}x2;Hz44V|OK2|Y!mW(@8c zJB@o&(6t&c(2YIO+IrW}jr9)EnY*@s${IB^!**1AMQE(oIC50umowkm+{+OXiLULJ zQ&vOg`1t$Kf06k$j86M8&?&3U6q(mAV9VU;XUvlXZPp&i{TK8{#)@3)Q#c+PvRW(R z2+V$qTC5M9+UL%QwgbdGjWMS_bnR4yvLST#8x8GOG>p!*GIvDCPUFs1EO)X(=p5rY zPH>0C;La7cRxefJ5cd4)@-~pQIX3Nud-fqzj>1F@-zVZHtw*L8Z2)6!Z9Bn?o=owV z<<(F%IqoFTBUU>B4c|d)3Thc^83^nVh`I|qfrdrUm6a!(;rnvhC#_d&i0c-lppPnd z{c59f1UrDeK<@U1? zQ8yz6okO`xtD$n=n7MNYk}ja!-KQOt>NddoV?Nr>aQ$32qc-Tz$(>sRm8S(nJqCL} zjQwfuFb7~6nq{HyMd`HjZaQRY(vceY38D18JSwe;wY5{1W9=VBYVMPA7x*Yn3^ZJf z`M5iR+^B>4aesuy;9!Kmv{K^IipZ9@)u^#j*{W&BCxOLQVxS*H2v1lVM&Be;)!2Dj zWuTYIy&`II4|L2HQr{T{JrfPd@Sb6#elik?#+u$M`{i8`r#d^uPso}4>POq4pX6w0 z+!5wJ7W=Jza{SvBaSHV-m~tGXk094>wXO6AoID+q2-G8yD8rKPM;g{x2a$k6d_*IUHT5W6tHg^RZ;{RnuW4Pwm@@IU061>9ke*0&x z1w(w60k5&oML196`9-+Q$IuE#QNurnV`a;T~jbQG=DJsqnCm#YT);p>h}D{4>&zY%}_pQ2ZL~ z1?>&{{2}(6BE80TfOAOxU07_SpV&d@BNYE8%3}J3)#Du&?hj_%n|@(vA({u7=@-T` zV$&}y((}vo3)6hgiZKdtrfK?xag}WPg>8T>a4*O73p4$~xPM~$g_(X~TsLx`fP2ri zy|zrhFw-wgJ5y}TYm57`T<>bT(A*{BDI`-E`w*sIn0Dg9odWF?!}JT|xj;kbQzsE; z_<0#NRKM4m=@+J*`g0%DIB_)mw@kkrVcIFY=D}t9g*EIIMgMK~N<4dy>~%Pv zMS9gxhCMmGqfEaro|>3`VWwZ0cEV)(g@t=>u}3le!e|pbXXRSK^b0ezK@Smn&zpW> znopayN}`=mBd7K{GyTF$zcAA;%=8O0{lZMYFnYmp<`dH|jJunrUzp+TWxg+rPpUWU8Ao64-}6>4(=W_?Us&ip zR;FK==@(|ar7m(jHvPgv-upbmHvPgPpY|~Q!fJb@{{ky%>}_PGUzq6^X8MJheqp9x znCTbB9mU9RF*5za_~t44Gnsy2|3}^z)>XudLBb|%mYXg2S^jQGw~VrkwG6imvJ9{! zTGA}Jmf0dlwAX%);hQ^)7K@L0Im$oZi-+;Wl|{BA_>!GyXOZf`S7^H`ilSY@t4cYq z3OTR(JzjAaWi4HfZ-#ZKjw5&-WsFxXUF?9kquQ&MRC}Wxb&~9o(7Ty%v6k?tfFqp? z-y&X8x)Cp*REzMP=e09JDrE7d{0n*c^}`l*-jhdA8lJ% zgs)%LbFLB55OOk=u*P^+7A+^5r>4l_wbqE%4zG1ND$~1MUG8;Mi8lB`Z*cG;9~QS- zSiKJL^Mb}=?XtWkRPq>A@$m5D-s>J}L+U3`#lP*5GylPyL*ClW*@_LOJsGyUc zb7V=YgjS&~ysAenDN#!S3FWIrMd~_yscUl=ZdYod>N97ib)=Wo3dO($EP_acNrRq9VLI<4$DjSF>km^_$ zqpm|FQi63+sak|u@B*&HBZ`ngkqgYEkOT>(Mx3RhN*s_XU2I%X0;;718UiBj zt3-2TyN)0=qP?UA#grh6#X>ADQahHQ4siv0ArM2AEv^xrQ8Q`@On^l$MUg>CRTrPo zYoa5vk?L~64%8wWEJO8Fi57~w4#7@!CDfpvjYw;es!*+7E7~V-RduCRC?zG8qJxVN zHnjv&rKK+1mX_423kTY0hoVxzE9**`6VY9&w@P%=2za0@MOar7*(G^+s1pbxKZjbk zHdd-mWTzsd=puEUQYkt*RAjA?1>}*|p_Z1kbO`HWO1h|v7DcL!Whix23tIAV6r!~( zMJdxtndVwj)dOJQ;G*lor7ou~EX!f2QALDny_~6JO+YVb4eL~E4HUyKL$|2jYSDJN zx?B-rrKVxpYCEs4ZkARlQqfqo77^uD7sF;`U8+j8u&gVp5>bnJ+ibZC9Y`y+sU9Ip zSHend%v!b-%VM=sSXP!oa3#Jo+rc#IdfYM zFyx6+s=@|gr|JmPwH00Jx+17(9jaqtm;1RP@+@5N?;VxDTGuZ^y@%by_yQWx(Z{grDzl=cu~m-O}lk< z2wEXjO@E=jSYo@N@|E?e5303!yxtabe0R9s%~a;@S{$Y>~@ z=Auc4sgda%vI*G^mAvMAft;AT^rF zni=JcW~O?oCa0&ntGlZ1e!jnRZ@wz)(VD@?>#Nq(y?M_$zw`Y)&hPxrx#!%Yb^sn~ zP6$qupmN2nsTPyHi8o)N6LhrC!=xut2g+`$;n8r+@llCX zbAuod*-;VoCzfYEv8;YmPsP%4O>e*CzEV~dQ(5)|Ulqxja^&|`pk5kE?uI*6h^{)f z0%mK`Q=09LI}zmZi3i9Icamt)`@H*N{ElwBW%|+cKE2!4`k3I%qqWqToVqu`?U&nq za%@Iq%Q_KmC*@Xx{T2X@wz$m77QE6=;Q%U9w#>};4AJsXc5-JG5>`+d*|;mI`!)%d zydkLb$VbXl!hu5Z#ydWrVmKyFOnfJ*l`&EYSPnmQ{nM zk8Ob2OItY#RiFls-ub<5y%kH+x*uSS3zBF9L9Smqjvxs(La>(#bay3-rE=@*G%1UJ zPlpmM(c`XTd^Bjw+r&R$T1TjP>-mWaWS@Dgq?JfDas-3~3&che#4_=K>Ifwg+1%;C z=PcoY3W^*GitMsEdBE%?#dG(ye2ye3@WCiD*fPQ`qBDq$Nw{@YuJo$9!dS%Nk==_# zpqjTRi@T!tCt9WYKrx@8+-hMZbf1CAna;>}SS^hpP)+%0L4&Flt(1b5XqhmA+n~HI za#3`0z06Z8xWBNqRSC*h6Kl>W?m+`r!^$N^!1(D_sbsG1{vg^4%dI$~g^D{}imsL^ zt9-5KQYl!DE{#h2^~MLnT@ET+f^Bdr>k{cCwfo6czO;2!Cf91+vQgAB7+NNcMBL_5 zi6qO*>sJ+!DdL)8uoV!d9oC)ijIwXyep4%g@er>Ni+cr0tw6PexG!b5Las*gbU_)H zH4H;I7Q*>X>9lbdDtwA(Ep$V!+{#{*-CAbgV7Hm|67ZvCo@QD(%)W4yyY+-VL@}0d zi)SmOo(#7lD%^4RmAP53B$f@`^7>xnmLZT^-c{yNQD*@|mV8T<6qJX%?8-8+x(oNB z)2#ua`wPe)^^0(;b<<@kRDEj2iy@ISoMVeCAi0!_F2!;V8D||S=ON1`=BQ;1trzxO zYz-}lE~7`p9AvjlVCuUw0o=jVbSYP&Qjez0#8Z%uJEQ>lW^+OAS-37RwBx@_kh|$1 zl_vy<3Qy>_bP(Lq-3=GzpI2I+6Lc7}l92y1(c468#I=R|%RCYlS71^s7j)g9$^!nK zd$0S~WO>?s>Ua-Y<+#YQia_o)_ww((RsH*v{r%7Bn({ea%m3Nx)7k$X`p)m2Exr9c z@6iw4zwIBt=d5!Nyfy#khabv++qdQ4T*zO@fBU!Vs$XZ~XFn8Q_3Yt?^KX93yWaJV zxBX1zk?(rfJKvM!E#&_;{_F?cyWIcEfA8VHxA5OP-H*CQ_`AU0A9dgAzTf?X`!V<9 z?mgdtZo~Q|5Plm(e+ohi?g#k$k4!i}1;KYx&0F29d)uTCe#B&dc8b(Z zy5AD>_9N0vq7%dA3lVKE}-$3|%u=!J5-wMX}xN~57Fs4(; zzqyz{J58Wo*~h0^oTPg0)u4KIl4|kQpn7JK>QpQB5|~4qKWXxlslUs8k7@TO{nLA( z^WB)>yU@bh(ZB-q?uqUpTpvaEe?jN(gahMZ67L~8n#6Y~oe>M#Z@IqRn~43b<@UG6 zn7=hF{`NsB+25WY-kRI;&EVXD&EN+R@;lulBaGs+_;p6Ui|g6=T8yvf@>5&=LDv6$ zv?95>cbQGd7T)cCbi6Y6P40)k#r+-k0I&4^uKOR|kGTKSeK7yk`LE4?W4`cBGvD;u zLZ*-{oGiSya9`ndg|8@lW#MZI-%)r=;qMi`yYRh*e^~h0!v9tHxxz0LK2Z2qh5x7U zuM59i_)wu<_(^x3E*#Ef9i5C!^O!_eXDtzApOu=)a2o zhv-KVe%%lMZTCa&|8O62AIZNd{|$xLP~rWBHxzP(Hx|A+nu$(CuZi-}-;I7K>LsE9 z=r`y8TYi~<1XZN@eQvrdKc1l8iooWrM@SqG+K@!1$U;2djX67juL)+p8a80!7%Ys~ zsW&hGSKV5wOCkaZ;>%E1ugs@-mysA=(y0zLFPHId^UUvXd3x~gcHfC9osV72S^17L zXCI)aJe!|?`#TmMQQL@b&gI|p?w{ttgZY9ooX?-p<$}LFgll>8!#?FqA-+Njf@hU< zrf7fVf!=%u3j959e=o#&ABw4;c{r)>Y+-PBW^gxvb#{R3?72begM+*CgS!iZyN3pM zgF1>pg~b8=;(&f}K)*PkUwn}8;mt*Wi}T_I`(>OLVI8+IKz#0u(#{#{=aM+)0dw_l zK6lR2jMlmH1gLL5hY_=jN<@S+`OhpvvG9YwL;2Fnd+QpO|IT+j^3ET9HN9;ISKfDVrl1Lhh}m9LVPtroi~wRFa=&XlRt+kLPg~+U~6_A zDDJ|*FfI%X4gN}g@>&f3>iCEuo7+};DKNt8gTWHarMyId{H+1WvJKWlb}EAchp zNyLUJ=Pd2=oj>soehw_=>_f?;fg$5RyqM)fJYHN#^2iv$eLxD=0cl)^CyMXT&w)o8 z_>V(6?e8Q2TOcI+hdAz%1!He#O!sc?D(=T|;;&dCv7i6{sYdAWWn6!y-J2;n?${Eq zGS;ERb~b8&vD9DH{_H`uHmnO9`|Iv4&KnBcwA%kvH;s=|vsLdwYgV)HE#`P_1xJ?* zYL4OLl3AfqC+FuU)W=xIYkx$_&la8IsXUig)4-vQIp8mqf_J>W*C|lHcjo@DqSK$W z`5VnNJ;I1WgE8IzfDO^FNfF8buUx(F_xUA#V^8Ey$|L9AoC7BgCUM>51(M+D7tn%_ZjH6_x;COZI z=jdMQvY2qpn*7LQy6(Rd-M_=M{GLN~VlxR)J+w)9_Dp^L_K*pRL6DQop^nOi1~Qz$ zli}tuKbwSb%svg6Q_AZHDd#6rUOPxBjHl#(_*(`^4~{3fnS)XaZjdqw;nxQ#Oyil1 z_@fwxzTVsqVFn=^lK?~)Tpx^o6Moq53;74=&=dErD8tKw^2T%i8>qmhUh?0_oy{%e z-^ATH4LS2)JHmnqP7jrFvIrTc6tO-`lKi!#i2Ggc4yy$oyfThoglO9H^0$&&j4NNu z*A0Nd)j+!n&5Xh07g6A6!|-Xq9v;;4-;dOS}+3qz}WEke|E&&cRv z?!8Q60QX{Mi3Qw)ot+t&!0{zbsDAJKBt~#A*uDfSV2E(RP|v^)hGmX&QH+W9VH=hix`I)+#t7;VSx;}+471{Tj&E-oqur}F&>+s2nI?k+ zd~RX~g@Ky^=yzH@?%R@%$bI{WPMPbwXMUI!JXqET)ibbzp}ii( z4>OK2Hszd*E2i5Uvyum6%TI5!=kCc46pJQv6bfLzhgepxmo(-erZw4WRydi4&=iS} z%#sMp$5|>nt1*s^e`fjnZvJUn`>chRNgd;*24#_m&+)LI^-&efWveP*8}m=x95yL7 zP76aw=FZF}{4~&DuJ6J81)B)F*U|U`XA6bGnf&-=5Qh7C&#~#ji4iK=B))(Xk9PDg z5;Q5?3v#4__1?p5!UN|${;|uw;kTj5phzs4@eW-;7lf_WqPBTzk3?-Gv^_Fh8dNS8Xg1!?+lm?XOf#a zZOyT8e<2S({lBQcAW3FOhft?cV+MAZK{K&QO`1A2fhVE^pkGv@iHiZLZ#{G7frk-; zZ#@I?oVoD8!w;V0MZlQ?_I#o6VE(}e&Oda434M@>114h6B`Al)20}k`;o%1!K3jYU zMVx)$Z1F4_p`cChCL$SX=*&Y8Kk(qg4--&~X2t@%=o9l%@GaA^!Jhqrq`jJ9_RMpk z7h32c=A2|PbT(n`OfoNhq|8hjhyR&qr}A-cW9H=%=6c^{9`c>s=~ets+x(24{}jJ| z)aC>9VqU45-*`9kKuQ~W#XRM;?&m$sA^Deo50FCx@mK08d1Lig;VJ(*T+JveHa9=8 z7y93`gPuaobkYx*lf^iW>4)S+H4{DB+K=yt&e9Ohouwto4<(Ig=!XUkO@1gz2HR+5 zqkagskMu*sh9ja!weaG@4?S?MSma&bNcC#sycy)>8}H`MnNwnp7uTd_k5iSGdRUGM z@8xrx(KBA?=`k;DEYW8@6aT`?@PPc|u8wE?-xql(e}Q}RfMjF@$cx3q%NQ>MX%10; z>-h(Yg@S*rBnLB|?_A-b2hJ28re7Y-H?S4&TkgrL#QnjS=8N$4a-n9GqwZ*626Ewv z9tJM_a8G2Z)~vA%j}B}7t9@^hE(@URNtXqr%K{W{;0BW*%dhV^=CS~W`M$X-W--4d z*N)33!7k|=`LXwl_x48K)|Y?R?7~m7)ck(-ow3o&{&$wG1-btO|Ne&iM)&pZYx#G^ zJ;Xb}A7Bjp_gU=xy_}6lm-EX_! zz!W=iH~=Rrd+^J3RS!?zb$h;eNw4NdHau5%+K0zjeRLzZJHb{NH?q=U=*i z#lH`@D*xWkfB({b*nQCc{j#fBt{T6Tdxh(-Q2y7f{J-Ju*SY^S_fe>R#Ay67DgTyQ z|IjVDW%mo5P4kQHebh3`deXn)-o$_U_on!tzxxLF4J@f$C+QuEM*olvzdR8`TLo-WWFO)%Dgl4PcrXv|HL#PEqp08 zd^wg$?JBjazY4od?JBja)UMKg@KvyZ_eSZzR0634jw68&M6SQv+n8uEwJ6)a_OUzF zncC&f_KOpVzZ_-y%^THh?UUOtO(cCVa_y~Zrq;bNk?<=~X8ZE>s%yVINa#n|PP_9< z(fgxpuibfp=XEk&ybIyW?Y&;M^T`k2p}@^Sfg4e#8tfG_LG^u6HOkay_lntIu`hV_ z$TfE;*xufbGCgRx?ky{~8@c(LMb~3Xe4T4`ou@DJjk7yN7k)6}$!s%n3tZdJMy|@! zIg$HthGZ*`0g>I&{eS4Hz9cpt4wVRP^+%CH2hoYB@uJa!dC)f6K2!f~8KIJ}w zylT6ULtG-~nq$=FDAS{iVT0Nn<>rjqA}NiSTFBGDQ*%v-eHgX4k3kHMrDrip*52>K zXhQ53U~U$T)GVYHVp72^07`SeN;(vJTmE`&j8Yv+vm=z+64I~0WTx2p0}$UZF7+@b z^~v3;``8O`$o1kFsX6j@$Zs41YJ}7xN%eiCke2H~s=HGi5+Yac6OmgSAq01>?=j6n zXwDOI0|q||PDp)tBXUOa&OlV;T!h$cLJYajBH>vHD}tvhlzhoJbPI{(q1J}lC!zK+ zuGhw>%~GO6iA0OCiAGE-eKgvs zJ`Yp-z|E4sO@3n)lkV@eYo1a_%AzPe9qqMUf795c{D+|fqe%`!t{N#7@@#RWl+3p`#7Ro? zkHNW3^Fs+EB{M;vgjpU2BpP5UH6;v-lR8UkNKT4pX6J`Ac#H?z!A$-H+{%=YS&H1Y zq&BpDN-dHakh8gs>c+_|8kq$Wm5B@<4P>OePmYqwR2P(`jW>W!XN=BFJ17?K(xONe z*dQ9ABwO7Wr_>-h{8RM5UCho#6Qn{T)gajb4@mLhufBL2y1+ZdY&DW>12RK1TOX$t zwIiWgAQcH^I-{hdtZNgbB*x~ajKOSgoYYJ^nk`aOpJZwT^?=wvGhAby-hhGLg=@y- z%v`jO+@i=eNGD%*ag3a>wTHdXo#ITDj}1Ytf7SS$sYj8lCpM|=BIr6IHxD_O0DPO= zW>~)%xec6tZF`cQm~B80ZD#vc{V2Iew%7YJ`X9Iz{857PVR7%O&coxA9WMMCtyR}O zNoR~+odrgcibxAyd0RSRz@(Z7cOH6s_K;P04PK-!Wgk=tQT!Fi*@eGq=#_KhDqU@aL08Z()Ac*Rj~3TRhQk zF3!)9KbT)^f5G%$2n!};suT0!ZY<>8DBEu=Y!zE_>V6 zn*=S}RoD1@lx;80ZjrLsdptpJN`ai(BO>3_znwVALGMcG~$JVyu8{;Vntu0yig z-!@3b0><4nC}f&%uO}SfLEIc1$Ty+W0SEKjMdJY6#C6p`y)_I-J=Hr_gPuHtwB~OV zZ(C)L6UJ>9$=#WMsrYo1*-*#d@o{Rbf(5Q-j^J0v8tlX>$n?WrF|*M7%P7+fp2Yz+ z?~FlT7lx-n-g#0bkaZ>!4>nI4#FRSewUDRPJLAZod+E~XgrIUxw&b`*9|!} z)?X~b(zbe%%j(*Fa3{wAeQPk(XSU;kKS2=}JO$pyqcocZcnJGDW5}PRqS+^b@RYGC z;Ift~gv@HD1K$B>pzbmO&Vz;?w4bM*aI1KO9<5FFNc=87YYW_tFc3dAjvFvCnBJeq zJ(S1&6dGJ8uG0n{lR#i#uJ3^)w(=C5b&+?!H-IfunFThAqXV9fo2Sjq5!n20@VmW1 zHM5&Vsp3fk4X$vr_(cmeUDuCu$gHkxo-~Q34rY1j*}Dee3(-t}u2}2>x-02CA<$SX zSrgDS`|vS6emVxts~=fO=Pw3Yn`R~Gq!WyyRy%kB)Ym2S7m6=pnSE#@YaoU%6fqtR zE8Hiy#%u)KlF=Nsb+|5i+&xj>D?SeHCny(miznvjFCdn{rmcsM3idNY*i8|DkXlO< z!uyQ-1YKGmaK!MIs^2~RZohy`Hi}y!2xaPlo%(e^D?(x@G!7c;v4-@Q-atAYG|jh1 zJbJ4*Grw4E?zLwc)x~+W8?;BWiJwN*%sdhQ%)%HuPs0vb=E7>7g3aopLgu-IH^3<3 zn1wg<0Mx&aH+9$Z*I~u8rk`{Axd~^UGLWotQT9xt>JE7VhJV%$HWUI6+b`9aO~Izw z6wVo2q_OwscIf%D3r$9x*>)J*#JGDXo54;dZ2D&w8I356w#LXwWo|}v9UA?GUyOAJ ze~Jt`o!I22@ki9vxK+GwHf*%9gnqkO?Ric~s4HR75_(G5lKH%B9nu|!nwe&Z;|-B9 zc;K1dV`jeE?(9V~op!xJ#NK0EX=C~^=FKp{)DhbW^KRiTQ7~?I3pT16yDcEhHUrJD z_o6+bsdq*gr@i`AP_;F>Z$3L@+f0@!WU`piezj(+eS)yed{bnQY5cQI3+YSlbHr>o z=>8(|tRrJ8&ZwQxll5pi+iG&n>tkxgXPdM?=dG8~gZP7f{SM=+Od!Y8Lq-}Gx!GHC znl$R(++ARd@TCT=)VU6WI5dENdoE^-7Ha(6BS0#7Qc%0lA--e&kO1$}Y+~BECeATH>G~vfW?V{YC&Ajv>#!LX*NPjO4IC)OK z$aCvi={-NxjaUdFEtWddSaERTLa=Mx9MT*2p#>8!MNB-12LX`)0$M`Qfd@69YtN6F z89bPoecoR&GtUEJ?-^oL&yA}?i|GfW>K$!c9q=^|kO$1bA^V8D!vdM0#% zg99`(JzVMTp#sRhO{D3z2jwcBO2B;sx%}KDa!Gp;is1-hR~h zz5r)qZZ7D1iM#3+u)Pstdo*eALxPD)xAE+lxPdLgG9wvG9DqBU%`y3@|5OIZNd7&3 zH^+dBy9Mf%7hOnj-=&o7gi2*6b5t{7CvusDv3O_Kl(3;ayBWO%9qzCgxM(;}++X%5@&1k_p{>-=cUIc-#)plG*++-v49I3~+B3Z+T$^6j#^Y7y*qV zW41!ZM?w{Nk_Uqx8DV1EJe8^#71@=JgLxe-bbjB>G(k=5kz9n>HvLP zfw(GZjsfP&!#r185@ZRpgP!Jw-6o_}O3j-}M*xd?wM(;!{eaEs3$bvaACYcckC@*# zjm3zov@jc8e(Ve5h|MUlS2GGYNbD9h6B7!vjf@~890A@Og^!3?sN_mThv|F%VitHe z8`eWttvZD6gjoPqoZ8GdVpbzYxPV@S!eR`%2RqEDWoq;SV`3H*^{l!sj(}#?B-9~H1fRGq}ivss(7swX&c3+5`JWlDqgKH)+|yvajJ5%rCT5lp~cpD~(p zFEX!T(+)$<1QOafD}N;xKv zu1tnL0;DnmRO6A-T0V*Dn@{s1WOoEDp@+2xVl!(eP}h}d){*u#w_OyfVe5*iDqa@W z#RMxpKn9@Urwm{g>f%)IhPWn^X9-rMC(QGPR(H@z&~|aT6F5x@;FSL7pezlH;p8_4 zIR$5%rw!iTHb!vDR(eF)($(UTI88H#Q~BxH4#G)vVNC$a(!M4lrs165hf{LuH>Euq zJaX))w8k=A8C@J9N7X?f0xpyPq4>=5HJqS~#@G}1C@bVs5q>e1aU?rC6W(jp)<>Af1* zpkWpU%?>p+hS==oO*qfYy0vp*t4~_n7&c+jXu>cag^j#(N69V5qIdC&%rXSLQBMTN zYnfhso=NI~3pyAYP20Lkpy|30N45v5R7@E(HNgW^3KCO+0!3(s(2P|&6ZIQ&j~y47 zc{Rck5o;V9m~?RfFldxV~bMfyB7wDorw#;6=uJfhO+-ZWd3@ht+nQ znJ7OniQTq>59&?^CO!oDcqGS0&V-V+rdJ7NAGs}pQi_!X%-$4A+%0OA!D17SU_+;4 zA(R%>oTTCAtAP+2X3o$w4JQa$@6%yok|{@<4L>GAsF(qBHBH0QE7mlKOw);eVmT$# z%}k=tYVQ2_2&Ls9Myeq96(fX(X&2WZZ6{&A=53+Pe0ZpN>f-}6eiyGb9$!WN=Yq*#w^aBkzh2Y9&~*wGK!bN!;M^1n6{qJ?hT}O06LRE)4E{r z8HdaZs-bBz|8RWDjiLK)oYIDOTzb$D&mlAo=LkME!NpO0GPQluGnxZ@h6`HO)Q-d_ zcYs8&JJr2#AVOXS>o{D!6t)Edi3D|RjvF>icj?!#3Z7E`~Vuv;obAjRB7WY9enArYJiH zLN)exV1&wMX@-eVC!v}ljYCCvftjoNrWh!$!5lY0O-;UGAJo8^N>zP}e%4o}2TeVh zaFB3o?1NL?!{Q-0m2Y+*PMfCvd?XQi#e>uOzuj0#N8(iOS(`(bBzR9V4JTC0~$W?ES$N)wlS>(I2u$z<3e%?XL}I+}Gp$t#Nbfk;jB zdp=$ntWqGiX`YBj#+$sg(u{oMPmRg|sp%f1ru)N@@+L@pgoYG566WbL^?j`t zk4pJkx*`*)dZ=2G30OT5SixC#$ts9E$bDZT6c1YR4GbRW$MLV z2*#!`4J>33fmVA-gS`o;?Y)Ti?LDCpR=si6n7NF{5%$df#H zkteBw6mnY3EmbWZjuh*GS)^)jv-Pq{b6l!^qWMDxX|VKOGKrTxnf~QJIdPS@Kux{2 z1*%sQT>hC&6oF!F{$(k1APv7)3*Pnzl+iL?nkM$a0}lV4R$2a5VLbCQVOCMb*S zRE;Iri)@`EKxZj!I>K;yt)JlJX=w5oHa_9Ri6Bf<)2xP>&^jPq!tH6e(%wo|H7I_W z4pU5PNV5RN1SM@I+lV42F#2;ZYvG7#hn0SaZw#egf-VA5PzY9Ikn|v?_4<(@8MCm^ zLJM7dW0<9`DKMd<-8PK`BE~U?#bR8xDDj3M%4+8I7I3&Cho|#AZSYj~!P~DGV2{PY zytqG1f{%I$&cDbkGg1(l1F>l@krpwT_`t@(j7&Y!v<0g3kUumzwRqaUnYu*u3pTiPUO^Kthw(ON{CwNQHFm_WnWsFZbXO>Ilky8%(s3hzD( z(G&ZF9D-v-piRA)B@Xauhgkh^e4oQ$gzqKZS0OuYlm2f4AY`-|POmTxAVw;M1&&v$ zENxT+QZqFp7eUr@cQAw@Ost0IbymGK@kp-uTp~s7inE!Hr1<`~jGvvx%Wj{{sRtzwt1ShL4Sa`n~X)UN0qiE%)0qxl0%*_NpYE0mwTsC*Iq2L9qT>|2@ zk(7>m(4NNys2`&A4yvMbz$S}35NC;!n~xpKeze-C8763bGhps#o;NRSqCir#ZsDz~ zTVfU0eA6cwBO{3A3oTijU_%LOmgST&W^MUY(>et6U(yy>jyqdtZP!ke?Nx2Xu+}h| zw8lqAkkZ0Wy~#Hr1DlqyTb$9--yQa>v>PFNLuOdwVd(;QqjK4aKuyw->`A9k=2|2f!f{d&-e8_|R@ zz*-+TiwPVwPRGPMtVMz|^+xn0RIKd{;2XhX^XhC6kc*PW!6R4EJRHwwA%9()00OO+ zoFX2IYo}@_!GjiAjQb3xbeC%6m1*K^0b#?@C>nJ=bL_F0g-xM>S#{(=-1i*N4Sog) zFR+n=e~ezV8}5d9!e~-t3rDnVm$QN zw*2%EZGD=R;K5e$B~8P|RqhAWhmQJG14QjjHbgu}{mg2Jv=$LnpV3S+BdZZWtS4;G zv!^C#KA9j=@WC%Dc7TMg!5!O5X%n+ro;O8dl*eFf@ueZsiy(GQZfM;*lQ(*X7Bao? zdFp2W(Cu4K`n02J2p1C_T70~ zXxHF3)3TY~qSKDE*(&ZF$HB@y?efwdw0hr*&iwGaTYN0S3C_M?+XNWMv#bJGb;#9$ zW#nnITx}8x;sjG2Rq`o$Fgy_b;eu8ZspgLNVege+sLtbA*-}^Sd?I2ihy9ves0)wj z=?dEp>LEUk?H-Mub`Jl1G}GgWmfx#f^Pk$%g7<1!W#=xIakp*nxvX?Ey2BEkKOx7@ z(WH0UQTu1(-0zF&YrWa#}>o3nlOqZxmXY+J><^X!ufc=0-#^xgpiJFwDj25zmQwJ0Awlc#sqTIg_Uf~2;+(Cr z8)7`|H)!j1!i1S%p-$H^p7`qkY~QJ7n{Bi`o|OLj@|M7-P+jAS@@M{(^Y*a%5K-_ASu_YGUITfU9DZ|jTP+e zwxjxPo7ths!Y!-p8Iib>kbrK3I5ShPtqyAc^C%*;p}z6DDNdbN;<_nVCC1HEFMp{8 z+mi)Px2uGzjmsN5(aG-RM&k;b^5dJ`=v2F>XV<85yS>-o0}Oi9ztU)QZbzr0ezVcI z+@s(IH%-=sMr3$nUmNgx?f&Hk?|Cdsmn=P_y&b)wN0&sg4fg0Y8tv^Jqz>h4>dW>T z*>0O{_9Ao2$h51w_#3EaE_X$KX5(^W<4$za*USbza&`9_r&+do?Q)|jYS;D}nfCTx zbbqhC-E3Tm*znhEv%Bc^?H+|2ETT4cccUCj+yMcMEB?Z3ivj0ZIFA~4$b3?zu0T+V zU|XvR;u`cj?P{aliR{8e-9SQL9alWg=%*(%{hD_5TD4xU)}V|Is*OhV;`VlQy2I^d z|Fn9Mr}gR;GHhS0)|&My)ts(2Yqg8jYKOd0y?T+`E>FAFYW;Gpwt?^(yU|wxmCp}U zN$*4(wd&;t1<2)z*SGIPZ)jJW)r(ZWQLmE7ruS1#E*Gm8ccar+s&&DsdSa(yVtdgE zNYxn<>gCDFM!izCN-IDm1!zMHNJ}Tntt^nkGs{&h@<-TByKmV zSa`eI-bUEEtyV8@NBue*w%*tgiH&NVT(uf`H)_m`N+qvJRDun?u~CD1|6)xQiFl{V z2XnsJ*MAL}^`q^}BHS?;*CZM;QeCgQUn!T_0fBpAXK=)p;*0dqf2&ue>b_7=z~owE zE@u0Ra&{z=*ED#W4GT4fsLK z{Y@2%S;R`S7prJ3c2@1(=nXVN__^!_EQ|e$MB3uE->7bXc0wK5cJ&G-WSXtwTQV0> zfA)%QF;!$?M!QkH7Dcto8104-Si{L&AvtroM#jrkF(Y?kifN#T(=o~pD7USOE~u`F zZgi0vuo7faS6e@&l&DePVICb3cdGcHOmm+GFidDgN zx=8fWC2yP2@2S30B@nYWvFw>{|Iq1o*s%)HVD5_ zBg0#{>IwT9%TeJ8JsQnTftAU4njk&7sX{~~`1dKcNKZ%~P;F%Cokjj8rXANcF2}v- zzAIIFyo>iH$m$e9s$rNxo=zxEk>p70Iff)7LgLsYaiU(1GpZz3wV9*5ev>|voEHxf zqi7u{#Hp5u5b=vNHfz>V<3{vaDU6DSrkIl}>8N+r!+WvCDI)wz*;!2Hil_K$icn6( z9AuM9x}zeb(Qi~QM)>{%1<0gxuaDC_K#2Goq%>lQ_r-jum&dUsGVIe0*6O1Yw2p)z zg)ZgZBq+m}Xw3J?^%<3#^)}p22vC83gZg8v$FRXnvj)%fYj}ujQoekQ??S3qMunJZ zTq8k!D%rT}s=K!aZT?#W1>UhJPZtLZ!5jPRv3?OvT&~3w20hGuF#++`ku0yozR_1n z&nu>5=jeU4oNZj{n9ebKxdw};2{XiE>>Xc6Fzp3u{S*|((oUxs-9#LscGY$jauzmuX8c6Y?C%>xY)jSSy433ywTM(1R->nQn?z{%iZ3U>g7?9zuuTZ!dH6NY65RyuGJ;iaawpIEo?jUg&RXRN=dgpNNG{{NHUt76X~NTx)YN zk{Ap5u4p)iXw1QRr;!*`=W`Ro0?VfGBeUJy;~TkGwh4xGo2hqk0o5zIZ73q#xM&YY z?HoT@<6)EJlkHlSx_6@cI^5KWoV}H0I`zG(!@x7!SJ)j=l-cGk z+q{DFaqYe8=|)UOLuC|EKix4UHHZ*0*Qoha)5{|kI3mC@>GW!sx2u<9fio^@A1Uxr zj=eWAe(G3yY!?_3vQY&yJsW~k8S?GH9ZXFZ_qA$wC~h@k=9_x`xYOz(=N*(RQD2H}-hTLT(H%v%%+~ zGTR%x9ok@F$9C_x2de&vtm85Jsk}e`$`TrUk3iFukh(G?_2oTrnW9T2kV+txKq`SR zcL{tTN{<{!j~uY02d)jjD9&=R`tP%}f-4K5->WZjjGPnD`2$uRu%eNJ74%A8ul0Y` zzOk7eIpD>`);rc*q(=^57$1%JLePh`0G#V5@9@Nbgp_r;>5&8JkpnF1VmWSlI`p&t8v0N7vz|9Sa=@{CII$JPlpZM-EKbiKY$pS!1qE>_mJ1`A#6;2CH+I9yuU+q(=^eh&7@PXCz$bndT@mIjcrjHJk+5zA6g@#6# zeE8DlCDS7Z?7-#p$N~Eh4Bw2?=PmdogBsw$&6Bj_eA~ZHK7DgrpL9u&9MH$MZT5Hi z*O>W)x4w**9yu_0fAo1TFS>){*cZC^w#51n< zF2dN|rAH3jnXo@=mFbZKI_yf{aHFXy4%4B3>K^C#lINja?pQ>8Kx{|%t*=(;WJdcQ zbo^OcwvDAn4lt(BH}j7EsQ)6`(CM!VUij#`p912_=eg1&2ht-4tb>5&5rd*ZLCb3TMthonaiq(=@YF7aO-XEnbC{rY@)dgMTQ5&73W$BRv zN{<}y=OhfyDoBqU;2X9&VIe(ofbZ|8M-Eu;;E(%Aj~vjs3F(mo>5&6`4>Ub;Ad0^) zYhP-$?--{?4)8T=|4se$$bt080sBU?HwZqYe9+hO_08q<$bt08fn>BfI9g4g7U#Ru z>5&8a*m-*7KzigrdgMTQX1q z!Ym~^l&}*T(jy0=y|(Lbn$XfC2iV~G$F?6mGpjY|W+M8=yi1Q9pz)+f4$w@}BL|8z znvvH^FX}D9J#=jWA^JH5OW#hTLXET9yyR6 zIS}@XGjm}zJ#rvDa$uw@NzNE(e$jkK^0VF3uGyQ#%v}3cbeH=@eLtI>qij*nMEuDH z)gH$ZZ`T;lG_Mn)_@N*1{QMpNRT0jYwhyOq#x+h#`?l+MihH=JHal{Ab8MGtKg}?c zEp@Z)>w0pxn3;$2&FE#@53ilyN}cO4!en<9{_Q!Vw5LI)eGR@7U#W4Q-;1ia#MvfQ zkd&$NJsIkG3eGteuu2V4rZdNF2VCMwo6Iu{eLhK$9yyRL&ZS2Vq(=^9KD_IZhk#sq6HrgAsWm$;fttnw}K_%ovm2&hU*gB;g(_^$NRgQmD$y~#fq7T()4ja(4#tqF0bB@snZ!`XK z*xYsD74p75U&D3w@hG#QpnwP>2@2Gw+eeWCh^vz37~u5CfibUv5Yr((*Z4efYGelj6D7(<2AyoDiEes)NOL!v}q{h|Ru; zdF&79EB-v-YrcryR6uNNUkZk%P@vM8sNa}-?6|-bg?8dlxN&S?3bGFX1`RPuKy0CS zGXbU$oztNoJuWcC^NSEkj~qCLh2i#1k%UDZWq8PIJEVqM-F%iH0{U>eGR89gfZnO?u>jwKSw>1FXBT zzDJ}{bs*q@( zR~8JWiTE{Yt;bX+K9Nglb0B-Ef&FXG>}Mx z59}Y(1N|j2#mmL)Y@K1$PQ*vev~o4j8pbKzJEXMmvzeUhKwro5nBC&cY}jb;L?`;~ zMmT%3I8)_AJ_HF>b$&OBCzRUX;fo%PMOLL|8_`H~@(fE==g1Q*RNEa-VsZ9mAh5br z5fvo*aM3@Ui@%@`d8s%vUv2kxqZ54CbP<}+U6zwek%|-pqSHg{?=w{LLb0#4%5i=B z(I{-4g^Zy=rQuHTSruU2m1<~c!S&o1u(zEtK$KW~LMxNMkl+c)9UhJ+J#qk{-bLP; z=RjNsybwx{9KiLZM-GgCi{kx$ESw%W;Kh<2Ibh3JC5-gQf$^5|U&62S$bt08fo8SY zW)s`%+r5p;jYc~?a-hC_CwfD>njSfjc);|?f!hq0@4uWLIdCV+(lGdrcD>r$i%xa* zIp9W}uOl;+p6yh-yL=iQSIH1GMB5QH<^LxRmsW2 zYkSe@?JB;fS?zP%@kN=g&==fqN7-s^o5JntWh%G`wNuLL3;VxUs(c;bbhFCGy~#@z z4c_nEzg@emYyxQnt_gJ}{zyKgM2~u#!YQuWRX!RYRow=a!P{pCv5{{9q;Ky=CoiT) z4pe*FrkbHNkyv`x9u_kG+gPHmD_c$$!7=hE$1p+!*!m%OlBz8KInMT zZ92EgHFy^2JY5sH50jf{ZY{5@+-&A&Flqyi_j!+6Dq+fx_OjP&- z3b4N(F7+@bwZvMc<_mDhb#08)8u<(4Hx21f4B6wnn)gM zTCcSPHD;q-WsF*v5(P>mT9i$cV`??hDls)##gg<0wNXJ?-`am)kTpDc^;T6tOg9l3a!V2m=Y7 zMNeT93SCjSnv`u)c0xd;FHv@Lv@Fz1e}oG7@`088g=wX_JfvzBOO~}Cn;DdzR zFJd7y%+1^+JuzE`9@@<2tol)MW_$TRbD1363jQd;rttaRRh@^&SAgE?pCJof_r%T^ zy$TO1B$q)8`~kUN!ogXmG)m8fdvHjJ+%=N9miH4>J!=pI|4e>_;6L|$rYre)!2>jc zOCkipH4#n-Zo3mfWvNMjc(U7UhLzxt^q|&+$CH~pDCO4OC)~+=DdZWM)|#t4dsO@d zfE2C#r%lOjjo&d}J$Ir|S#1(?%&ZXyJH=9er z7kod_^s&$g3npZ$6Z5rQfk4Q+E}JW_ZbsSF3I>uXuf7;%*UBiIY^dpFw;j6j=Up~f z>TZ#;lz%)yZ%Tn&8A6EIqo;EyZ-+0sJ1Q64hIrUj$a2HzjXvqQY+-3l-&xLX)=H16 zJZ75-YA;7Uuhz}{I18|1(*KNCYbjwNa@l-s^Eo<@;Ipc5lhr#Gk_nQrfN^&X3YnV0 zdcr{t%vX-)-V7y^_QwaPo8m^a`Q&SduS?q9KXL!)PQe$ zDSDa<9hxiqI5k$mDpxZ{@UPL{Hg|*r6=ZTX)00x^pP-1_d^|lT0r&Tc61k?wFPdsWPWNKH(;!Z{dwF&dE8H-!PSV* zqtzahKww}k=Yb>we+tgJ$UD~?z?P|WfsNvDhtqNMw8ReZ0c?Jk`Aw*mDRejW`K|Ct z0}Za)X7oj}(+!vWIETz~@=ektnhKb^{O;a02w!kBxwR-_+i9&U>F^QqHCZfK6VNpK z+GBeBbPPK3hF$oJf!3y32|6ikj-pmOVE=k>T|(EFSu?9SXouSo5Nj_)7>|Y(ZfR@G zM!;>&iP{R_U-GznqP`cgS+e#7y4&nVC)VgMAeO+Ut=AqE>}Q6sOCkWF3fB^Z1FmDn zeIlebz!Ae+s($D7ThV)YgH5>*gfjKOPUSkF9d^ybanM+g+CDAMLYRUFP4g9px1yQm zQdrsxX3F7GQ|$)r(QM+UQJ85G@z1P|vGX+SkY%kFRw!5smlQIuCAN0GoRUyc!jdKAm9QoAc{x&tbjR(wOo{Qot080X zz%#waOfw7$dv2x>RLVr`f#OBpEi!vvEI69?{@cdK`af^oZBun}tPwu&$V2AZ|} zi}r}7UKnAV_UcnX6=-x{dUnXRnJiVvWHF=tYR!f@M44%pLL*fBeUt|2x z9c9Tr4_%{JVN)aD5r&qar*K2Yz`#(T#+^%MX;TuC|9~SK>(+AW5+s_!4R;$XHKf}0 z9O+;Uy1>Vwgz+K6QRCZ=8$9)iFUIah6Mihzj^y@i<|PL)W&+?w`g>`hoaa!OIDlKv zO8$8VA+H;;P=mBsDokU=!HKJZUE}5&y>Sj&F!7RO;z2wJhy<{y*`@+Kr~y@;pX9;J z?DK}%VP>8O#GW_AsGb{Fffmybm=6zVsEK_^JtV7jm86S=0UW!GY7+*`xRBL^E^u&w zW~PTL-91zQ*|&)_-R7Yj;;952&J?#iH;G&tTmreQX_XrEJEYtaNDA_F{9Xn48ox{Y zX0j^5jXTLvO;^1i+2Cu#sq~%$xsa9~^H#(J)+BOJt>pwAf7Jwf9$C}T#F3 z2&~cyx|r~&)!dFHLb9x;Jc1h|S2QJoLquX0f z8sE2xvoSZfne!57Vinll2(dkyv?swtr7Ju;3EM0YGm^nDL+Hg#DJ&KFssALQzyrxY z&+pP0aB;Uvy%k*(+;=G@I{~-sWDV&^`Xd2>T;{sLb|ncL+TBg}5_Gu3-WYF6$lxk~ zI{e}&YLQbrS|YBJi(%ev2%CB`OAeRvmj>7Nt296<1bbMZWSxx z>H@CJ7fj;DEv_k*YZIc93Eg}j^5oz2xE-Da|BP`rpBdoZj&6BjY*M^T=JE(=3Nu?F z<0Byip5zfgA0td`o2OD0qawSO3^N07Fz0zrkm*%86>|_{7EK9+*;g&lN zw-Jem0bCPcOBZAbvw)sxk%?76TBYP6sB{Fdm{+?L6ip3;Tt@_KPG5+H3;l?6`MTTk zcNmu;4%NceWXN9_M_eI$341l8fP;YFvfF~fB*WaqTo9lsVH0oO9K$SBa;2h^f5Gt= zv%vYRawnf7v#3FLA8O-NpqCJ{8Zp8Jv|7ee3_1@xHC(j9;-OtYOd?Uws_W7S==^q= z4aPu=o#sB!h~4D@tyHX0c?@)!yE1f3TuW0ytJ@Li0-(h*77XYDcUXxrDW_7#mP=2K zV179kFtk-iA;G*ZqeuiCk`hj0`gaSPVgpk+#fwn~nf1XKc^$wNsIl?_J& z-{daG7)`kmy0_q^C&yuyNmO6FhTgi67MXAirZiLvFdpldS$K* zzb1vMQZZH<6Tj#qKw9Ar)%e^flea7kl0qiDN6->_h$F>j%CA?9x{k|rZ95XGVe5*i zDqa@Wr9`gy02zRWpE7_h)WzwD0f=^j73oR7yix(J?x2&PWlAHMz-dwdr}V!D2lsyd-y3zvp zOwVwAxSmxNp0y6 zbho2D4eU%>1cZ6fdo{2@!z>J%rqLlbdwEl9GP7>&T-YkpB^P58CXFTx<5AeiyLOb^ zVk~)Loh6%B9)jbw3@c%nq#n4SgQ3y1rAoc+)^#|0xMIfKv*JT-h13x;>r(1=js=T$v?@gc%i0knYSQ#R6Oa-pxR|A-60B8-Gvcp0GOs@=Bpm1DZe$c)Il_g1?>nj!+NQ_&q(j-#} zUX#2RC^6!?8J%p_!XRKK%E!%!HiQEOAJm-;rhEwUaVO_N&V-T_TYHsInhk?eij@R} zf@ytMz8h(k!BPp2&?M~`J_Ll)f|`>wTzWMSLc`1%nx^3dA?tk#OiVK6XtUwRL+Eku|2W=)um;^madYb(59vXNRamWf3n+0aN z;%Iy>XJZKqA*P#O5Wmd z;<&_glW5nVY3MLRJ@4)vh0Y|4+VGC!gNEUPrr{jH zSEBUNC_b6mKIs|F0Y1Y8tuke?tRv(XkPC@mcdC2!K!m&uX4(zzb;a$e&M-F-M$Mf3BHzbH+L2WN?2 zOn!PL9f?!9S*lO}E=lM$!xWrQSp}b#+7-yfo6qU;r1q|AXO12@Cu4z_X2?^O4m?tt zxa3=brZr9`!zgozM01+;AH1SSVucBbf~*V`tqxm)`e2m;7)+d9gY<1fmz=8+uQ6w(wGhv zGDw4^_mWAx?8%^3sJXW1cneh0Yg?f51cG!0tXmlx0LX=rHw=<)et@+=?mT~7;Yg%< ztIFtEqj~bHD#>fYR-uCWGixQ)!jD9x0lzo*oUL;NXqVEaBMg_<`Uy^+)(rlz@ySwY zst7ZZnz|Zhs#>0Los5@odm63;TaMvJg*(MB(_xC~CKOkpn4qN1WXsMmfstE#nXuYx zhgX`2ZwzHYvH+x@ls8-qk{%?I)+umzwRqaUnYu*u46wzNsmnp84fY})Ik zH;xIkyj9A4MQKx@VM&zAn!sQodLlR(l`;l4^A6IT+7)Lr z9ZB*1ZRB%QLFtUPPqId@Ae>?Br}yL3ZpBRuDZ$BV3l`pQI;{oOVic|XG@u1roVl6c zM~w+wXje#V(w%4WtJKD8BPkvCz%nwo3iU&j-a%EA-ei--9f-3;Nh^G&sU2zNwdyKC z>ze^{KTY1eu!#am(Yl4VB6eBD)hzi0V`Ky|^jWVJ$s_oZltmBR#yCtRVl z1Wn&`P3hxznNe?8ez%j^1 zv}WWGY<~_mTfe?ph#S#_=>jJQnWY2{8mD989o7=TS%3}DlQ6xi?G4}?k)6$}Kj!(2 z@yJ!MM&vL&pN0H&Z35UV#Cn{-L-AEwY9Yac7FmqT*$?Hrur04l6K4wu8;(ZNsOwo{ zk3|@zltz<)?>e>(ee1Y;Hv_MNGrSRqh9rgO2)C14Qj5HbijzM#!v& zNXsBX&eG@xjI2fgv7Rt!vZrQ~rBN}W64|v->JUWN;Ervjw25v&P^3C15K$h3vBj5$ zNH2oeHOc8swLFtIdWIG<`P%c;9WvA(!Ndx#^4ha_$B;lwps)!oG42wU9RiAdWqDeh z+>I8tje}a+Zn^@Xg1b#yXjkTUSpb%tcARxXEmbMpZm#2RY6v^KR$*KG09Dg1J?3zN z-4{qHv#$Jh(_mE~R{@rhr_FM;pbFvyQw3G>DS0qF5dGn*Ruie_f^Yoqb@+v_iDzX? zU0C>pV=IUK>aJFV$7FKF%@is%d>q?7%6aV^{&_c(=ZTizt6b@y+R}peYFTCBE_%2d z*n2K3-E?;Xm-`cP{2WbsCy0WdjdQ;*rmyv8!+$(g4AvZen82sK&!Mqb^z>hN$5ET4 z%yU^B9n=to?szU0mZvLl0oGn3 z1MfPz~DKXB@1j% zv94FI<;RhHoIE$M$EAQCdL|cy>e<$Eli7ZcY+KRYroNfMi`Q`)2)bhZmfu7)O#EHB z^2b%g@30xB{0^AI^@vRqemlo7<+s)JIbUY8;x`oxQ+`V+_`MoI>+q@WeiQa8T{dxc z!<=8MJxu=%+IodBfiHwq=sJc8y8Cqi26w`2DL~ufN$IaIZwY*gcG3DR_W@mA(jV>l zzmBq7h3DN&sTEZk1C26VD&K0&lwBBEi7=u>$mZJ*xomE0%a z!)SdsoC)?7Zdql|h{SS20=lg-yHD4*RtL5JxrOT@h=OP5-$W!_cAH@ogs80cArDs$mpOFL_MlwWSO%D3GqmtSeME(H`U zaI=!%brBifm=E*L1!4YDtBh||mJ(S4qrL6k5QHw|S;6JGgt;B04&@4c8P{wnr27|{ zQ${9a`g=w+GMCtw9hGMams*5eCwvCZLz7QD8{<5++o>Zx22ucxbYc)YI-F1IC zj9OvY*(FR8K>pQn#p8^A+9fT;Yx*@|REgHtqb(?-gQ(StuHsxzm$|*W$Ux~~GN!xTv`6B{`Z!IsS4CydeY4?0GV9c_?A$V0QKem4j_*>K$d>oq*MzXRjwOiYEm#Ip z6fJ*dLL*;AbtbhkW)Zb`Nm-66cie08(N!LoqDzP)`g#&`ttc<)hB@c#Hi|CgTz-9h z+r6-q_lLdj9H`DiZNByB*y(`}!-$EbnrcR7crh zR3sWQQe6=3SIVWR)x;ut>m4%*T2}lE3W-j5j04a&IAVxQ%HY|CrM0sn6(8Yk5>NNf_U!J>Oe7s%Wk6y8Clmmtv{6A78Z@@fmFuj2DpBBqdZ=LI3UC(#Eo*G-7Hm%*zp61|kj8%E^K zD@Bq%6?jP-6D0`eT7f4VLYT?|N{bJlFkPz+qYbpsbPG*G2cGylv|%I`L}l1(T@}Lo zpyJk5BezeOCJa%7#hozIf@RT%*Amr*@QR!Rm=3)t!&sCja$B?&B+y#F>!rL;mVg@) z^>Q3KY9n2Sr%Thsh-3B&tMVgUQCX+oqYqz{N%+19#=@g}An*EKH3J$K)7M2~m%-UKN-nG~cN27quL z3B@Ur9BDnrkYq$i9GfIgRCW`!W>iV6>Wo^Qy#5M(rlaK^B1X|VP>5445h3Ci>A9>~ zN39#~wNe-rfgm*TZMdBfV2Re;qW&1`F>ElivIWodYj}u?lrJCSyO3ykREU{Yg@hGUNH*?D z>h4XDC2twHjeMj$B^)dSZ|t+j^{Z&&(pF3%lk_n6#RSA#S+ZP?eWS0Eo>xrA^7OvC zW!0eZV;f}l(pHYXxT2_T;2mGL-iifk{S-LH~l|+RgFB_f}wR}o41I8U_#cK$7ot!xM*@+3nvJuB#mXF2-Ofu zF7nu?1D~&ie<~>6C@3nVZbX^Aq*(C2md}wS1wN9!McqcYMMwvcQ8Bl!Dr&l_{xX(x zcw{Fe{#Ef7WwR#eETJyd2l6$Ba;rr^OD7vh*mzpst+g}=!34|4mp15H(Ml;;iI#~y zxDCqdq8ddf*ULPmp8E@1Ta}=EHL>iBq>UP`hLuZ-qH*S}Qpw`O`-5mJEVtsQm=2)C z;Ej^X)ru~ag5~JasK{S$%pl?Apt2?K2BxwuxsKDq(~_%v>GalBnP01Q%f@5NKxmmv zVxgP2B?c`ouU}ORrzmZPQCmP{cUadC)*tqI|yuKH?Wymz(yGavgzA4DZotCD4v$=rP zjFLcs_>TWF0h7R)JP|`w(3>SwMxgKQ;eTap`c_cD%R8onGdX>`G05L`iVca23%v5k z)gO^{JZ3+Y_vc?(LW{*{8t6c3c}OZ5`lQ!X0;vSXCGh_NOTgb} From 9eb08420b6814eb2de5be1495eefa98f02e659c3 Mon Sep 17 00:00:00 2001 From: veeck Date: Tue, 28 Sep 2021 12:14:39 +0200 Subject: [PATCH 125/134] Add proper names to github action steps --- .../workflows/{node-ci.js.yml => automated-tests.yml} | 6 ++++-- .github/workflows/codecov-test-suites.yml | 9 ++++++--- .github/workflows/enforce-changelog.yml | 6 ++++-- 3 files changed, 14 insertions(+), 7 deletions(-) rename .github/workflows/{node-ci.js.yml => automated-tests.yml} (88%) diff --git a/.github/workflows/node-ci.js.yml b/.github/workflows/automated-tests.yml similarity index 88% rename from .github/workflows/node-ci.js.yml rename to .github/workflows/automated-tests.yml index 3a7391c2..33f9c833 100644 --- a/.github/workflows/node-ci.js.yml +++ b/.github/workflows/automated-tests.yml @@ -17,12 +17,14 @@ jobs: matrix: node-version: [12.x, 14.x, 16.x] steps: - - uses: actions/checkout@v2 + - name: Checkout code + uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - - run: | + - name: Install dependencies and run tests + run: | Xvfb :99 -screen 0 1024x768x16 & export DISPLAY=:99 npm install diff --git a/.github/workflows/codecov-test-suites.yml b/.github/workflows/codecov-test-suites.yml index 88b7574d..f2d210eb 100644 --- a/.github/workflows/codecov-test-suites.yml +++ b/.github/workflows/codecov-test-suites.yml @@ -13,13 +13,16 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 30 steps: - - uses: actions/checkout@v2 - - run: | + - name: Checkout code + uses: actions/checkout@v2 + - name: Install dependencies and run coverage + run: | Xvfb :99 -screen 0 1024x768x16 & export DISPLAY=:99 npm ci npm run test:coverage - - uses: codecov/codecov-action@v1 + - name: Upload coverage results to codecov + uses: codecov/codecov-action@v1 with: file: ./coverage/lcov.info fail_ci_if_error: true diff --git a/.github/workflows/enforce-changelog.yml b/.github/workflows/enforce-changelog.yml index a4f5d246..e1c2856d 100644 --- a/.github/workflows/enforce-changelog.yml +++ b/.github/workflows/enforce-changelog.yml @@ -11,8 +11,10 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v2 - - uses: dangoslen/changelog-enforcer@v1.6.1 + - name: Checkout code + uses: actions/checkout@v2 + - name: Enforce changelog️ + uses: dangoslen/changelog-enforcer@v1.6.1 with: changeLogPath: "CHANGELOG.md" skipLabels: "Skip Changelog" From 31ec848aec3e40f27e05f94f8c0f184d94f77a30 Mon Sep 17 00:00:00 2001 From: veeck Date: Tue, 28 Sep 2021 12:14:47 +0200 Subject: [PATCH 126/134] Update dependencies --- package-lock.json | 1000 +++++++++++++++++++++++---------------------- package.json | 8 +- 2 files changed, 526 insertions(+), 482 deletions(-) diff --git a/package-lock.json b/package-lock.json index a46bed61..bb78f731 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,18 +21,18 @@ "iconv-lite": "^0.6.3", "module-alias": "^2.2.2", "moment": "^2.29.1", - "node-fetch": "^2.6.2", + "node-fetch": "^2.6.5", "node-ical": "^0.13.0", "socket.io": "^4.2.0" }, "devDependencies": { "eslint-config-prettier": "^8.3.0", - "eslint-plugin-jest": "^24.4.0", + "eslint-plugin-jest": "^24.4.2", "eslint-plugin-jsdoc": "^36.1.0", "eslint-plugin-prettier": "^4.0.0", "express-basic-auth": "^1.2.0", "husky": "^7.0.2", - "jest": "^27.2.0", + "jest": "^27.2.2", "jsdom": "^17.0.0", "lodash": "^4.17.21", "nyc": "^15.1.0", @@ -50,7 +50,7 @@ "node": ">=12" }, "optionalDependencies": { - "electron": "^13.4.0" + "electron": "^13.5.0" } }, "node_modules/@babel/code-frame": { @@ -788,15 +788,15 @@ } }, "node_modules/@jest/console": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.0.tgz", - "integrity": "sha512-35z+RqsK2CCgNxn+lWyK8X4KkaDtfL4BggT7oeZ0JffIiAiEYFYPo5B67V50ZubqDS1ehBrdCR2jduFnIrZOYw==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.2.tgz", + "integrity": "sha512-m7tbzPWyvSFfoanTknJoDnaeruDARsUe555tkVjG/qeaRDKwyPqqbgs4yFx583gmoETiAts1deeYozR5sVRhNA==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.2.0", + "jest-message-util": "^27.2.2", "jest-util": "^27.2.0", "slash": "^3.0.0" }, @@ -805,15 +805,15 @@ } }, "node_modules/@jest/core": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.0.tgz", - "integrity": "sha512-E/2NHhq+VMo18DpKkoty8Sjey8Kps5Cqa88A8NP757s6JjYqPdioMuyUBhDiIOGCdQByEp0ou3jskkTszMS0nw==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.2.tgz", + "integrity": "sha512-4b9km/h9pAGdCkwWYtbfoeiOtajOlGmr5rL1Eq6JCAVbOevOqxWHxJ6daWxRJW9eF6keXJoJ1H+uVAVcdZu8Bg==", "dev": true, "dependencies": { - "@jest/console": "^27.2.0", - "@jest/reporters": "^27.2.0", - "@jest/test-result": "^27.2.0", - "@jest/transform": "^27.2.0", + "@jest/console": "^27.2.2", + "@jest/reporters": "^27.2.2", + "@jest/test-result": "^27.2.2", + "@jest/transform": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", @@ -822,18 +822,18 @@ "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-changed-files": "^27.1.1", - "jest-config": "^27.2.0", - "jest-haste-map": "^27.2.0", - "jest-message-util": "^27.2.0", + "jest-config": "^27.2.2", + "jest-haste-map": "^27.2.2", + "jest-message-util": "^27.2.2", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.2.0", - "jest-resolve-dependencies": "^27.2.0", - "jest-runner": "^27.2.0", - "jest-runtime": "^27.2.0", - "jest-snapshot": "^27.2.0", + "jest-resolve": "^27.2.2", + "jest-resolve-dependencies": "^27.2.2", + "jest-runner": "^27.2.2", + "jest-runtime": "^27.2.2", + "jest-snapshot": "^27.2.2", "jest-util": "^27.2.0", - "jest-validate": "^27.2.0", - "jest-watcher": "^27.2.0", + "jest-validate": "^27.2.2", + "jest-watcher": "^27.2.2", "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", @@ -853,12 +853,12 @@ } }, "node_modules/@jest/environment": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.0.tgz", - "integrity": "sha512-iPWmQI0wRIYSZX3wKu4FXHK4eIqkfq6n1DCDJS+v3uby7SOXrHvX4eiTBuEdSvtDRMTIH2kjrSkjHf/F9JIYyQ==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.2.tgz", + "integrity": "sha512-gO9gVnZfn5ldeOJ5q+35Kru9QWGHEqZCB7W/M+8mD6uCwOGC9HR6mzpLSNRuDsxY/KhaGBYHpgFqtpe4Rl1gDQ==", "dev": true, "dependencies": { - "@jest/fake-timers": "^27.2.0", + "@jest/fake-timers": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1" @@ -868,15 +868,15 @@ } }, "node_modules/@jest/fake-timers": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.0.tgz", - "integrity": "sha512-gSu3YHvQOoVaTWYGgHFB7IYFtcF2HBzX4l7s47VcjvkUgL4/FBnE20x7TNLa3W6ABERtGd5gStSwsA8bcn+c4w==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.2.tgz", + "integrity": "sha512-gDIIqs0yxyjyxEI9HlJ8SEJ4uCc8qr8BupG1Hcx7tvyk/SLocyXE63rFxL+HQ0ZLMvSyEcJUmYnvvHH1osWiGA==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^27.2.0", + "jest-message-util": "^27.2.2", "jest-mock": "^27.1.1", "jest-util": "^27.2.0" }, @@ -885,29 +885,29 @@ } }, "node_modules/@jest/globals": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.0.tgz", - "integrity": "sha512-raqk9Gf9WC3hlBa57rmRmJfRl9hom2b+qEE/ifheMtwn5USH5VZxzrHHOZg0Zsd/qC2WJ8UtyTwHKQAnNlDMdg==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.2.tgz", + "integrity": "sha512-fWa/Luwod1hyehnuep+zCnOTqTVvyc4HLUU/1VpFNOEu0tCWNSODyvKSSOjtb1bGOpCNjgaDcyjzo5f7rl6a7g==", "dev": true, "dependencies": { - "@jest/environment": "^27.2.0", + "@jest/environment": "^27.2.2", "@jest/types": "^27.1.1", - "expect": "^27.2.0" + "expect": "^27.2.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/reporters": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.0.tgz", - "integrity": "sha512-7wfkE3iRTLaT0F51h1mnxH3nQVwDCdbfgXiLuCcNkF1FnxXLH9utHqkSLIiwOTV1AtmiE0YagHbOvx4rnMP/GA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.2.tgz", + "integrity": "sha512-ufwZ8XoLChEfPffDeVGroYbhbcYPom3zKDiv4Flhe97rr/o2IfUXoWkDUDoyJ3/V36RFIMjokSu0IJ/pbFtbHg==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.2.0", - "@jest/test-result": "^27.2.0", - "@jest/transform": "^27.2.0", + "@jest/console": "^27.2.2", + "@jest/test-result": "^27.2.2", + "@jest/transform": "^27.2.2", "@jest/types": "^27.1.1", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", @@ -919,10 +919,10 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.2.0", - "jest-resolve": "^27.2.0", + "jest-haste-map": "^27.2.2", + "jest-resolve": "^27.2.2", "jest-util": "^27.2.0", - "jest-worker": "^27.2.0", + "jest-worker": "^27.2.2", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -956,12 +956,12 @@ } }, "node_modules/@jest/test-result": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.0.tgz", - "integrity": "sha512-JPPqn8h0RGr4HyeY1Km+FivDIjTFzDROU46iAvzVjD42ooGwYoqYO/MQTilhfajdz6jpVnnphFrKZI5OYrBONA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.2.tgz", + "integrity": "sha512-yENoDEoWlEFI7l5z7UYyJb/y5Q8RqbPd4neAVhKr6l+vVaQOPKf8V/IseSMJI9+urDUIxgssA7RGNyCRhGjZvw==", "dev": true, "dependencies": { - "@jest/console": "^27.2.0", + "@jest/console": "^27.2.2", "@jest/types": "^27.1.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" @@ -971,24 +971,24 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.0.tgz", - "integrity": "sha512-PrqarcpzOU1KSAK7aPwfL8nnpaqTMwPe7JBPnaOYRDSe/C6AoJiL5Kbnonqf1+DregxZIRAoDg69R9/DXMGqXA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.2.tgz", + "integrity": "sha512-YnJqwNQP2Zeu0S4TMqkxg6NN7Y1EFq715n/nThNKrvIS9wmRZjDt2XYqsHbuvhAFjshi0iKDQ813NewFITBH+Q==", "dev": true, "dependencies": { - "@jest/test-result": "^27.2.0", + "@jest/test-result": "^27.2.2", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.0", - "jest-runtime": "^27.2.0" + "jest-haste-map": "^27.2.2", + "jest-runtime": "^27.2.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/transform": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.0.tgz", - "integrity": "sha512-Q8Q/8xXIZYllk1AF7Ou5sV3egOZsdY/Wlv09CSbcexBRcC1Qt6lVZ7jRFAZtbHsEEzvOCyFEC4PcrwKwyjXtCg==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.2.tgz", + "integrity": "sha512-l4Z/7PpajrOjCiXLWLfMY7fgljY0H8EwW7qdzPXXuv2aQF8kY2+Uyj3O+9Popnaw1V7JCw32L8EeI/thqFDkPA==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", @@ -998,7 +998,7 @@ "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.0", + "jest-haste-map": "^27.2.2", "jest-regex-util": "^27.0.6", "jest-util": "^27.2.0", "micromatch": "^4.0.4", @@ -1315,9 +1315,9 @@ "dev": true }, "node_modules/@types/prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", "dev": true }, "node_modules/@types/puppeteer": { @@ -1715,9 +1715,9 @@ } }, "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { "node": ">=8" } @@ -1924,12 +1924,12 @@ } }, "node_modules/babel-jest": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.0.tgz", - "integrity": "sha512-bS2p+KGGVVmWXBa8+i6SO/xzpiz2Q/2LnqLbQknPKefWXVZ67YIjA4iXup/jMOEZplga9PpWn+wrdb3UdDwRaA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.2.tgz", + "integrity": "sha512-XNFNNfGKnZXzhej7TleVP4s9ktH5JjRW8Rmcbb223JJwKB/gmTyeWN0JfiPtSgnjIjDXtKNoixiy0QUHtv3vFA==", "dev": true, "dependencies": { - "@jest/transform": "^27.2.0", + "@jest/transform": "^27.2.2", "@jest/types": "^27.1.1", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", @@ -3230,9 +3230,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.4.0.tgz", - "integrity": "sha512-KJGWS2qa0xZXIMPMDUNkRVO8/JxRd4+M0ejYYOzu2LIQ5ijecPzNuNR9nvDkml9XyyRBzu975FkhJcwD17ietQ==", + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.5.0.tgz", + "integrity": "sha512-s4+b1RFWkNKWp7WWrv2q60MuFljHUCbO7XAupBSCUz/NP1Hz4OenWbMPUt0H+fa8YZeN8CX3JDIA8Bet5uAJvw==", "devOptional": true, "hasInstallScript": true, "dependencies": { @@ -3612,9 +3612,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.4.0.tgz", - "integrity": "sha512-8qnt/hgtZ94E9dA6viqfViKBfkJwFHXgJmTWlMGDgunw1XJEGqm3eiPjDsTanM3/u/3Az82nyQM9GX7PM/QGmg==", + "version": "24.4.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.4.2.tgz", + "integrity": "sha512-jNMnqwX75z0RXRMXkxwb/+9ylKJYJLJ8nT8nBT0XFM5qx4IQGxP4edMawa0qGkSbHae0BDPBmi8I2QF0/F04XQ==", "dev": true, "dependencies": { "@typescript-eslint/experimental-utils": "^4.0.1" @@ -3908,16 +3908,16 @@ } }, "node_modules/expect": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.0.tgz", - "integrity": "sha512-oOTbawMQv7AK1FZURbPTgGSzmhxkjFzoARSvDjOMnOpeWuYQx1tP6rXu9MIX5mrACmyCAM7fSNP8IJO2f1p0CQ==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.2.tgz", + "integrity": "sha512-sjHBeEk47/eshN9oLbvPJZMgHQihOXXQzSMPCJ4MqKShbU9HOVFSNHEEU4dp4ujzxFSiNvPFzB2AMOFmkizhvA==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "ansi-styles": "^5.0.0", "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.2.0", - "jest-message-util": "^27.2.0", + "jest-matcher-utils": "^27.2.2", + "jest-message-util": "^27.2.2", "jest-regex-util": "^27.0.6" }, "engines": { @@ -5328,14 +5328,14 @@ } }, "node_modules/jest": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.0.tgz", - "integrity": "sha512-oUqVXyvh5YwEWl263KWdPUAqEzBFzGHdFLQ05hUnITr1tH+9SscEI9A/GH9eBClA+Nw1ct+KNuuOV6wlnmBPcg==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.2.tgz", + "integrity": "sha512-XAB/9akDTe3/V0wPNKWfP9Y/NT1QPiCqyRBYGbC66EA9EvgAzdaFEqhFGLaDJ5UP2yIyXUMtju9a9IMrlYbZTQ==", "dev": true, "dependencies": { - "@jest/core": "^27.2.0", + "@jest/core": "^27.2.2", "import-local": "^3.0.2", - "jest-cli": "^27.2.0" + "jest-cli": "^27.2.2" }, "bin": { "jest": "bin/jest.js" @@ -5367,27 +5367,27 @@ } }, "node_modules/jest-circus": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.0.tgz", - "integrity": "sha512-WwENhaZwOARB1nmcboYPSv/PwHBUGRpA4MEgszjr9DLCl97MYw0qZprBwLb7rNzvMwfIvNGG7pefQ5rxyBlzIA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.2.tgz", + "integrity": "sha512-8txlqs0EDrvPasCgwfLMkG0l3F4FxqQa6lxOsvYfOl04eSJjRw3F4gk9shakuC00nMD+VT+SMtFYXxe64f0VZw==", "dev": true, "dependencies": { - "@jest/environment": "^27.2.0", - "@jest/test-result": "^27.2.0", + "@jest/environment": "^27.2.2", + "@jest/test-result": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.2.0", + "expect": "^27.2.2", "is-generator-fn": "^2.0.0", - "jest-each": "^27.2.0", - "jest-matcher-utils": "^27.2.0", - "jest-message-util": "^27.2.0", - "jest-runtime": "^27.2.0", - "jest-snapshot": "^27.2.0", + "jest-each": "^27.2.2", + "jest-matcher-utils": "^27.2.2", + "jest-message-util": "^27.2.2", + "jest-runtime": "^27.2.2", + "jest-snapshot": "^27.2.2", "jest-util": "^27.2.0", - "pretty-format": "^27.2.0", + "pretty-format": "^27.2.2", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" @@ -5397,21 +5397,21 @@ } }, "node_modules/jest-cli": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.0.tgz", - "integrity": "sha512-bq1X/B/b1kT9y1zIFMEW3GFRX1HEhFybiqKdbxM+j11XMMYSbU9WezfyWIhrSOmPT+iODLATVjfsCnbQs7cfIA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.2.tgz", + "integrity": "sha512-jbEythw22LR/IHYgNrjWdO74wO9wyujCxTMjbky0GLav4rC4y6qDQr4TqQ2JPP51eDYJ2awVn83advEVSs5Brg==", "dev": true, "dependencies": { - "@jest/core": "^27.2.0", - "@jest/test-result": "^27.2.0", + "@jest/core": "^27.2.2", + "@jest/test-result": "^27.2.2", "@jest/types": "^27.1.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", - "jest-config": "^27.2.0", + "jest-config": "^27.2.2", "jest-util": "^27.2.0", - "jest-validate": "^27.2.0", + "jest-validate": "^27.2.2", "prompts": "^2.0.1", "yargs": "^16.0.3" }, @@ -5431,32 +5431,32 @@ } }, "node_modules/jest-config": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.0.tgz", - "integrity": "sha512-Z1romHpxeNwLxQtouQ4xt07bY6HSFGKTo0xJcvOK3u6uJHveA4LB2P+ty9ArBLpTh3AqqPxsyw9l9GMnWBYS9A==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.2.tgz", + "integrity": "sha512-2nhms3lp52ZpU0636bB6zIFHjDVtYxzFQIOHZjBFUeXcb6b41sEkWojbHaJ4FEIO44UbccTLa7tvNpiFCgPE7w==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.2.0", + "@jest/test-sequencer": "^27.2.2", "@jest/types": "^27.1.1", - "babel-jest": "^27.2.0", + "babel-jest": "^27.2.2", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", - "jest-circus": "^27.2.0", - "jest-environment-jsdom": "^27.2.0", - "jest-environment-node": "^27.2.0", + "jest-circus": "^27.2.2", + "jest-environment-jsdom": "^27.2.2", + "jest-environment-node": "^27.2.2", "jest-get-type": "^27.0.6", - "jest-jasmine2": "^27.2.0", + "jest-jasmine2": "^27.2.2", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.2.0", - "jest-runner": "^27.2.0", + "jest-resolve": "^27.2.2", + "jest-runner": "^27.2.2", "jest-util": "^27.2.0", - "jest-validate": "^27.2.0", + "jest-validate": "^27.2.2", "micromatch": "^4.0.4", - "pretty-format": "^27.2.0" + "pretty-format": "^27.2.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5471,15 +5471,15 @@ } }, "node_modules/jest-diff": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.0.tgz", - "integrity": "sha512-QSO9WC6btFYWtRJ3Hac0sRrkspf7B01mGrrQEiCW6TobtViJ9RWL0EmOs/WnBsZDsI/Y2IoSHZA2x6offu0sYw==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.2.tgz", + "integrity": "sha512-o3LaDbQDSaMJif4yztJAULI4xVatxbBasbKLbEw3K8CiRdDdbxMrLArS9EKDHQFYh6Tgfrm1PC2mIYR1xhu0hQ==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^27.0.6", "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.0" + "pretty-format": "^27.2.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -5498,29 +5498,29 @@ } }, "node_modules/jest-each": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.0.tgz", - "integrity": "sha512-biDmmUQjg+HZOB7MfY2RHSFL3j418nMoC3TK3pGAj880fQQSxvQe1y2Wy23JJJNUlk6YXiGU0yWy86Le1HBPmA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.2.tgz", + "integrity": "sha512-ZCDhkvwHeXHsxoFxvW43fabL18iLiVDxaipG5XWG7dSd+XWXXpzMQvBWYT9Wvzhg5x4hvrLQ24LtiOKw3I09xA==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "jest-util": "^27.2.0", - "pretty-format": "^27.2.0" + "pretty-format": "^27.2.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.0.tgz", - "integrity": "sha512-wNQJi6Rd/AkUWqTc4gWhuTIFPo7tlMK0RPZXeM6AqRHZA3D3vwvTa9ktAktyVyWYmUoXdYstOfyYMG3w4jt7eA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.2.tgz", + "integrity": "sha512-mzCLEdnpGWDJmNB6WIPLlZM+hpXdeiya9TryiByqcUdpliNV1O+LGC2SewzjmB4IblabGfvr3KcPN0Nme2wnDw==", "dev": true, "dependencies": { - "@jest/environment": "^27.2.0", - "@jest/fake-timers": "^27.2.0", + "@jest/environment": "^27.2.2", + "@jest/fake-timers": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1", @@ -5638,13 +5638,13 @@ } }, "node_modules/jest-environment-node": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.0.tgz", - "integrity": "sha512-WbW+vdM4u88iy6Q3ftUEQOSgMPtSgjm3qixYYK2AKEuqmFO2zmACTw1vFUB0qI/QN88X6hA6ZkVKIdIWWzz+yg==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.2.tgz", + "integrity": "sha512-XgUscWs6H6UNqC96/QJjmUGZzzpql/JyprLSXVu7wkgM8tjbJdEkSqwrVAvJPm1yu526ImrmsIoh2BTHxkwL/g==", "dev": true, "dependencies": { - "@jest/environment": "^27.2.0", - "@jest/fake-timers": "^27.2.0", + "@jest/environment": "^27.2.2", + "@jest/fake-timers": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1", @@ -5664,9 +5664,9 @@ } }, "node_modules/jest-haste-map": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.0.tgz", - "integrity": "sha512-laFet7QkNlWjwZtMGHCucLvF8o9PAh2cgePRck1+uadSM4E4XH9J4gnx4do+a6do8ZV5XHNEAXEkIoNg5XUH2Q==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.2.tgz", + "integrity": "sha512-kaKiq+GbAvk6/sq++Ymor4Vzk6+lr0vbKs2HDVPdkKsHX2lIJRyvhypZG/QsNfQnROKWIZSpUpGuv2HySSosvA==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", @@ -5678,7 +5678,7 @@ "jest-regex-util": "^27.0.6", "jest-serializer": "^27.0.6", "jest-util": "^27.2.0", - "jest-worker": "^27.2.0", + "jest-worker": "^27.2.2", "micromatch": "^4.0.4", "walker": "^1.0.7" }, @@ -5690,28 +5690,28 @@ } }, "node_modules/jest-jasmine2": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.0.tgz", - "integrity": "sha512-NcPzZBk6IkDW3Z2V8orGueheGJJYfT5P0zI/vTO/Jp+R9KluUdgFrgwfvZ0A34Kw6HKgiWFILZmh3oQ/eS+UxA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.2.tgz", + "integrity": "sha512-SczhZNfmZID9HbJ1GHhO4EzeL/PMRGeAUw23ddPUdd6kFijEZpT2yOxyNCBUKAsVQ/14OB60kjgnbuFOboZUNg==", "dev": true, "dependencies": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.2.0", + "@jest/environment": "^27.2.2", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.2.0", + "@jest/test-result": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.2.0", + "expect": "^27.2.2", "is-generator-fn": "^2.0.0", - "jest-each": "^27.2.0", - "jest-matcher-utils": "^27.2.0", - "jest-message-util": "^27.2.0", - "jest-runtime": "^27.2.0", - "jest-snapshot": "^27.2.0", + "jest-each": "^27.2.2", + "jest-matcher-utils": "^27.2.2", + "jest-message-util": "^27.2.2", + "jest-runtime": "^27.2.2", + "jest-snapshot": "^27.2.2", "jest-util": "^27.2.0", - "pretty-format": "^27.2.0", + "pretty-format": "^27.2.2", "throat": "^6.0.1" }, "engines": { @@ -5719,37 +5719,37 @@ } }, "node_modules/jest-leak-detector": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.0.tgz", - "integrity": "sha512-e91BIEmbZw5+MHkB4Hnrq7S86coTxUMCkz4n7DLmQYvl9pEKmRx9H/JFH87bBqbIU5B2Ju1soKxRWX6/eGFGpA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.2.tgz", + "integrity": "sha512-fQIYKkhXUs/4EpE4wO1AVsv7aNH3o0km1BGq3vxvSfYdwG9GLMf+b0z/ghLmBYNxb+tVpm/zv2caoKm3GfTazg==", "dev": true, "dependencies": { "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.0" + "pretty-format": "^27.2.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.0.tgz", - "integrity": "sha512-F+LG3iTwJ0gPjxBX6HCyrARFXq6jjiqhwBQeskkJQgSLeF1j6ui1RTV08SR7O51XTUhtc8zqpDj8iCG4RGmdKw==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.2.tgz", + "integrity": "sha512-xN3wT4p2i9DGB6zmL3XxYp5lJmq9Q6ff8XKlMtVVBS2SAshmgsPBALJFQ8dWRd2G/xf5q/N0SD0Mipt8QBA26A==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.2.0", + "jest-diff": "^27.2.2", "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.0" + "pretty-format": "^27.2.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-message-util": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.0.tgz", - "integrity": "sha512-y+sfT/94CiP8rKXgwCOzO1mUazIEdEhrLjuiu+RKmCP+8O/TJTSne9dqQRbFIHBtlR2+q7cddJlWGir8UATu5w==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.2.tgz", + "integrity": "sha512-/iS5/m2FSF7Nn6APFoxFymJpyhB/gPf0CJa7uFSkbYaWvrADUfQ9NTsuyjpszKErOS2/huFs44ysWhlQTKvL8Q==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", @@ -5758,7 +5758,7 @@ "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.2.0", + "pretty-format": "^27.2.2", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -5818,19 +5818,19 @@ } }, "node_modules/jest-resolve": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.0.tgz", - "integrity": "sha512-v09p9Ib/VtpHM6Cz+i9lEAv1Z/M5NVxsyghRHRMEUOqwPQs3zwTdwp1xS3O/k5LocjKiGS0OTaJoBSpjbM2Jlw==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.2.tgz", + "integrity": "sha512-tfbHcBs/hJTb3fPQ/3hLWR+TsLNTzzK98TU+zIAsrL9nNzWfWROwopUOmiSUqmHMZW5t9au/433kSF2/Af+tTw==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.0", + "jest-haste-map": "^27.2.2", "jest-pnp-resolver": "^1.2.2", "jest-util": "^27.2.0", - "jest-validate": "^27.2.0", + "jest-validate": "^27.2.2", "resolve": "^1.20.0", "slash": "^3.0.0" }, @@ -5839,29 +5839,29 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.0.tgz", - "integrity": "sha512-EY5jc/Y0oxn+oVEEldTidmmdVoZaknKPyDORA012JUdqPyqPL+lNdRyI3pGti0RCydds6coaw6xt4JQY54dKsg==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.2.tgz", + "integrity": "sha512-nvJS+DyY51HHdZnMIwXg7fimQ5ylFx4+quQXspQXde2rXYy+4v75UYoX/J65Ln8mKCNc6YF8HEhfGaRBOrxxHg==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.2.0" + "jest-snapshot": "^27.2.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-runner": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.0.tgz", - "integrity": "sha512-Cl+BHpduIc0cIVTjwoyx0pQk4Br8gn+wkr35PmKCmzEdOUnQ2wN7QVXA8vXnMQXSlFkN/+KWnk20TAVBmhgrww==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.2.tgz", + "integrity": "sha512-+bUFwBq+yTnvsOFuxetoQtkuOnqdAk2YuIGjlLmc7xLAXn/V1vjhXrLencgij0BUTTUvG9Aul3+5XDss4Wa8Eg==", "dev": true, "dependencies": { - "@jest/console": "^27.2.0", - "@jest/environment": "^27.2.0", - "@jest/test-result": "^27.2.0", - "@jest/transform": "^27.2.0", + "@jest/console": "^27.2.2", + "@jest/environment": "^27.2.2", + "@jest/test-result": "^27.2.2", + "@jest/transform": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", @@ -5869,15 +5869,15 @@ "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.2.0", - "jest-environment-node": "^27.2.0", - "jest-haste-map": "^27.2.0", - "jest-leak-detector": "^27.2.0", - "jest-message-util": "^27.2.0", - "jest-resolve": "^27.2.0", - "jest-runtime": "^27.2.0", + "jest-environment-jsdom": "^27.2.2", + "jest-environment-node": "^27.2.2", + "jest-haste-map": "^27.2.2", + "jest-leak-detector": "^27.2.2", + "jest-message-util": "^27.2.2", + "jest-resolve": "^27.2.2", + "jest-runtime": "^27.2.2", "jest-util": "^27.2.0", - "jest-worker": "^27.2.0", + "jest-worker": "^27.2.2", "source-map-support": "^0.5.6", "throat": "^6.0.1" }, @@ -5886,18 +5886,18 @@ } }, "node_modules/jest-runtime": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.0.tgz", - "integrity": "sha512-6gRE9AVVX49hgBbWQ9PcNDeM4upMUXzTpBs0kmbrjyotyUyIJixLPsYjpeTFwAA07PVLDei1iAm2chmWycdGdQ==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.2.tgz", + "integrity": "sha512-PtTHCK5jT+KrIpKpjJsltu/dK5uGhBtTNLOk1Z+ZD2Jrxam2qQsOqDFYLszcK0jc2TLTNsrVpclqSftn7y3aXA==", "dev": true, "dependencies": { - "@jest/console": "^27.2.0", - "@jest/environment": "^27.2.0", - "@jest/fake-timers": "^27.2.0", - "@jest/globals": "^27.2.0", + "@jest/console": "^27.2.2", + "@jest/environment": "^27.2.2", + "@jest/fake-timers": "^27.2.2", + "@jest/globals": "^27.2.2", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.2.0", - "@jest/transform": "^27.2.0", + "@jest/test-result": "^27.2.2", + "@jest/transform": "^27.2.2", "@jest/types": "^27.1.1", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", @@ -5907,14 +5907,14 @@ "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.0", - "jest-message-util": "^27.2.0", + "jest-haste-map": "^27.2.2", + "jest-message-util": "^27.2.2", "jest-mock": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.2.0", - "jest-snapshot": "^27.2.0", + "jest-resolve": "^27.2.2", + "jest-snapshot": "^27.2.2", "jest-util": "^27.2.0", - "jest-validate": "^27.2.0", + "jest-validate": "^27.2.2", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" @@ -5937,9 +5937,9 @@ } }, "node_modules/jest-snapshot": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.0.tgz", - "integrity": "sha512-MukJvy3KEqemCT2FoT3Gum37CQqso/62PKTfIzWmZVTsLsuyxQmJd2PI5KPcBYFqLlA8LgZLHM8ZlazkVt8LsQ==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.2.tgz", + "integrity": "sha512-7ODSvULMiiOVuuLvLZpDlpqqTqX9hDfdmijho5auVu9qRYREolvrvgH4kSNOKfcqV3EZOTuLKNdqsz1PM20PQA==", "dev": true, "dependencies": { "@babel/core": "^7.7.2", @@ -5948,23 +5948,23 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.2.0", + "@jest/transform": "^27.2.2", "@jest/types": "^27.1.1", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.2.0", + "expect": "^27.2.2", "graceful-fs": "^4.2.4", - "jest-diff": "^27.2.0", + "jest-diff": "^27.2.2", "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.2.0", - "jest-matcher-utils": "^27.2.0", - "jest-message-util": "^27.2.0", - "jest-resolve": "^27.2.0", + "jest-haste-map": "^27.2.2", + "jest-matcher-utils": "^27.2.2", + "jest-message-util": "^27.2.2", + "jest-resolve": "^27.2.2", "jest-util": "^27.2.0", "natural-compare": "^1.4.0", - "pretty-format": "^27.2.0", + "pretty-format": "^27.2.2", "semver": "^7.3.2" }, "engines": { @@ -6004,9 +6004,9 @@ } }, "node_modules/jest-validate": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.0.tgz", - "integrity": "sha512-uIEZGkFKk3+4liA81Xu0maG5aGDyPLdp+4ed244c+Ql0k3aLWQYcMbaMLXOIFcb83LPHzYzqQ8hwNnIxTqfAGQ==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.2.tgz", + "integrity": "sha512-01mwTAs2kgDuX98Ua3Xhdhp5lXsLU4eyg6k56adTtrXnU/GbLd9uAsh5nc4MWVtUXMeNmHUyEiD4ibLqE8MuNw==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", @@ -6014,7 +6014,7 @@ "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "leven": "^3.1.0", - "pretty-format": "^27.2.0" + "pretty-format": "^27.2.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -6033,12 +6033,12 @@ } }, "node_modules/jest-watcher": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.0.tgz", - "integrity": "sha512-SjRWhnr+qO8aBsrcnYIyF+qRxNZk6MZH8TIDgvi+VlsyrvOyqg0d+Rm/v9KHiTtC9mGGeFi9BFqgavyWib6xLg==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.2.tgz", + "integrity": "sha512-7HJwZq06BCfM99RacCVzXO90B20/dNJvq+Ouiu/VrFdFRCpbnnqlQUEk4KAhBSllgDrTPgKu422SCF5KKBHDRA==", "dev": true, "dependencies": { - "@jest/test-result": "^27.2.0", + "@jest/test-result": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", @@ -6051,9 +6051,9 @@ } }, "node_modules/jest-worker": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.0.tgz", - "integrity": "sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.2.tgz", + "integrity": "sha512-aG1xq9KgWB2CPC8YdMIlI8uZgga2LFNcGbHJxO8ctfXAydSaThR4EewKQGg3tBOC+kS3vhPGgymsBdi9VINjPw==", "dev": true, "dependencies": { "@types/node": "*", @@ -6948,13 +6948,35 @@ } }, "node_modules/node-fetch": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.2.tgz", - "integrity": "sha512-aLoxToI6RfZ+0NOjmWAgn9+LEd30YCkJKFSyWacNZdEKTit/ZMcKjGkTRo8uWEsnIb/hfKecNPEbln02PdWbcA==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, "engines": { "node": "4.x || >=6.0.0" } }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-ical": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/node-ical/-/node-ical-0.13.0.tgz", @@ -7765,13 +7787,13 @@ } }, "node_modules/pretty-format": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.0.tgz", - "integrity": "sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.2.tgz", + "integrity": "sha512-+DdLh+rtaElc2SQOE/YPH8k2g3Rf2OXWEpy06p8Szs3hdVSYD87QOOlYRHWAeb/59XTmeVmRKvDD0svHqf6ycA==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", - "ansi-regex": "^5.0.0", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, @@ -9064,13 +9086,12 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "node_modules/stack-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.4.tgz", - "integrity": "sha512-ERg+H//lSSYlZhBIUu+wJnqg30AbyBbpZlIhcshpn7BNzpoRODZgfyr9J+8ERf3ooC6af3u7Lcl01nleau7MrA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "dependencies": { - "escape-string-regexp": "^2.0.0", - "source-map-support": "^0.5.20" + "escape-string-regexp": "^2.0.0" }, "engines": { "node": ">=10" @@ -9888,9 +9909,9 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "node_modules/v8-to-istanbul": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", - "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -11094,29 +11115,29 @@ "dev": true }, "@jest/console": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.0.tgz", - "integrity": "sha512-35z+RqsK2CCgNxn+lWyK8X4KkaDtfL4BggT7oeZ0JffIiAiEYFYPo5B67V50ZubqDS1ehBrdCR2jduFnIrZOYw==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.2.tgz", + "integrity": "sha512-m7tbzPWyvSFfoanTknJoDnaeruDARsUe555tkVjG/qeaRDKwyPqqbgs4yFx583gmoETiAts1deeYozR5sVRhNA==", "dev": true, "requires": { "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.2.0", + "jest-message-util": "^27.2.2", "jest-util": "^27.2.0", "slash": "^3.0.0" } }, "@jest/core": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.0.tgz", - "integrity": "sha512-E/2NHhq+VMo18DpKkoty8Sjey8Kps5Cqa88A8NP757s6JjYqPdioMuyUBhDiIOGCdQByEp0ou3jskkTszMS0nw==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.2.tgz", + "integrity": "sha512-4b9km/h9pAGdCkwWYtbfoeiOtajOlGmr5rL1Eq6JCAVbOevOqxWHxJ6daWxRJW9eF6keXJoJ1H+uVAVcdZu8Bg==", "dev": true, "requires": { - "@jest/console": "^27.2.0", - "@jest/reporters": "^27.2.0", - "@jest/test-result": "^27.2.0", - "@jest/transform": "^27.2.0", + "@jest/console": "^27.2.2", + "@jest/reporters": "^27.2.2", + "@jest/test-result": "^27.2.2", + "@jest/transform": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", @@ -11125,18 +11146,18 @@ "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-changed-files": "^27.1.1", - "jest-config": "^27.2.0", - "jest-haste-map": "^27.2.0", - "jest-message-util": "^27.2.0", + "jest-config": "^27.2.2", + "jest-haste-map": "^27.2.2", + "jest-message-util": "^27.2.2", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.2.0", - "jest-resolve-dependencies": "^27.2.0", - "jest-runner": "^27.2.0", - "jest-runtime": "^27.2.0", - "jest-snapshot": "^27.2.0", + "jest-resolve": "^27.2.2", + "jest-resolve-dependencies": "^27.2.2", + "jest-runner": "^27.2.2", + "jest-runtime": "^27.2.2", + "jest-snapshot": "^27.2.2", "jest-util": "^27.2.0", - "jest-validate": "^27.2.0", - "jest-watcher": "^27.2.0", + "jest-validate": "^27.2.2", + "jest-watcher": "^27.2.2", "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", @@ -11145,52 +11166,52 @@ } }, "@jest/environment": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.0.tgz", - "integrity": "sha512-iPWmQI0wRIYSZX3wKu4FXHK4eIqkfq6n1DCDJS+v3uby7SOXrHvX4eiTBuEdSvtDRMTIH2kjrSkjHf/F9JIYyQ==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.2.tgz", + "integrity": "sha512-gO9gVnZfn5ldeOJ5q+35Kru9QWGHEqZCB7W/M+8mD6uCwOGC9HR6mzpLSNRuDsxY/KhaGBYHpgFqtpe4Rl1gDQ==", "dev": true, "requires": { - "@jest/fake-timers": "^27.2.0", + "@jest/fake-timers": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1" } }, "@jest/fake-timers": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.0.tgz", - "integrity": "sha512-gSu3YHvQOoVaTWYGgHFB7IYFtcF2HBzX4l7s47VcjvkUgL4/FBnE20x7TNLa3W6ABERtGd5gStSwsA8bcn+c4w==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.2.tgz", + "integrity": "sha512-gDIIqs0yxyjyxEI9HlJ8SEJ4uCc8qr8BupG1Hcx7tvyk/SLocyXE63rFxL+HQ0ZLMvSyEcJUmYnvvHH1osWiGA==", "dev": true, "requires": { "@jest/types": "^27.1.1", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", - "jest-message-util": "^27.2.0", + "jest-message-util": "^27.2.2", "jest-mock": "^27.1.1", "jest-util": "^27.2.0" } }, "@jest/globals": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.0.tgz", - "integrity": "sha512-raqk9Gf9WC3hlBa57rmRmJfRl9hom2b+qEE/ifheMtwn5USH5VZxzrHHOZg0Zsd/qC2WJ8UtyTwHKQAnNlDMdg==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.2.tgz", + "integrity": "sha512-fWa/Luwod1hyehnuep+zCnOTqTVvyc4HLUU/1VpFNOEu0tCWNSODyvKSSOjtb1bGOpCNjgaDcyjzo5f7rl6a7g==", "dev": true, "requires": { - "@jest/environment": "^27.2.0", + "@jest/environment": "^27.2.2", "@jest/types": "^27.1.1", - "expect": "^27.2.0" + "expect": "^27.2.2" } }, "@jest/reporters": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.0.tgz", - "integrity": "sha512-7wfkE3iRTLaT0F51h1mnxH3nQVwDCdbfgXiLuCcNkF1FnxXLH9utHqkSLIiwOTV1AtmiE0YagHbOvx4rnMP/GA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.2.tgz", + "integrity": "sha512-ufwZ8XoLChEfPffDeVGroYbhbcYPom3zKDiv4Flhe97rr/o2IfUXoWkDUDoyJ3/V36RFIMjokSu0IJ/pbFtbHg==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.2.0", - "@jest/test-result": "^27.2.0", - "@jest/transform": "^27.2.0", + "@jest/console": "^27.2.2", + "@jest/test-result": "^27.2.2", + "@jest/transform": "^27.2.2", "@jest/types": "^27.1.1", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", @@ -11202,10 +11223,10 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.2.0", - "jest-resolve": "^27.2.0", + "jest-haste-map": "^27.2.2", + "jest-resolve": "^27.2.2", "jest-util": "^27.2.0", - "jest-worker": "^27.2.0", + "jest-worker": "^27.2.2", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -11225,33 +11246,33 @@ } }, "@jest/test-result": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.0.tgz", - "integrity": "sha512-JPPqn8h0RGr4HyeY1Km+FivDIjTFzDROU46iAvzVjD42ooGwYoqYO/MQTilhfajdz6jpVnnphFrKZI5OYrBONA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.2.tgz", + "integrity": "sha512-yENoDEoWlEFI7l5z7UYyJb/y5Q8RqbPd4neAVhKr6l+vVaQOPKf8V/IseSMJI9+urDUIxgssA7RGNyCRhGjZvw==", "dev": true, "requires": { - "@jest/console": "^27.2.0", + "@jest/console": "^27.2.2", "@jest/types": "^27.1.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.0.tgz", - "integrity": "sha512-PrqarcpzOU1KSAK7aPwfL8nnpaqTMwPe7JBPnaOYRDSe/C6AoJiL5Kbnonqf1+DregxZIRAoDg69R9/DXMGqXA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.2.tgz", + "integrity": "sha512-YnJqwNQP2Zeu0S4TMqkxg6NN7Y1EFq715n/nThNKrvIS9wmRZjDt2XYqsHbuvhAFjshi0iKDQ813NewFITBH+Q==", "dev": true, "requires": { - "@jest/test-result": "^27.2.0", + "@jest/test-result": "^27.2.2", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.0", - "jest-runtime": "^27.2.0" + "jest-haste-map": "^27.2.2", + "jest-runtime": "^27.2.2" } }, "@jest/transform": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.0.tgz", - "integrity": "sha512-Q8Q/8xXIZYllk1AF7Ou5sV3egOZsdY/Wlv09CSbcexBRcC1Qt6lVZ7jRFAZtbHsEEzvOCyFEC4PcrwKwyjXtCg==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.2.tgz", + "integrity": "sha512-l4Z/7PpajrOjCiXLWLfMY7fgljY0H8EwW7qdzPXXuv2aQF8kY2+Uyj3O+9Popnaw1V7JCw32L8EeI/thqFDkPA==", "dev": true, "requires": { "@babel/core": "^7.1.0", @@ -11261,7 +11282,7 @@ "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.0", + "jest-haste-map": "^27.2.2", "jest-regex-util": "^27.0.6", "jest-util": "^27.2.0", "micromatch": "^4.0.4", @@ -11546,9 +11567,9 @@ "dev": true }, "@types/prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", "dev": true }, "@types/puppeteer": { @@ -11840,9 +11861,9 @@ } }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", @@ -11999,12 +12020,12 @@ } }, "babel-jest": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.0.tgz", - "integrity": "sha512-bS2p+KGGVVmWXBa8+i6SO/xzpiz2Q/2LnqLbQknPKefWXVZ67YIjA4iXup/jMOEZplga9PpWn+wrdb3UdDwRaA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.2.tgz", + "integrity": "sha512-XNFNNfGKnZXzhej7TleVP4s9ktH5JjRW8Rmcbb223JJwKB/gmTyeWN0JfiPtSgnjIjDXtKNoixiy0QUHtv3vFA==", "dev": true, "requires": { - "@jest/transform": "^27.2.0", + "@jest/transform": "^27.2.2", "@jest/types": "^27.1.1", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", @@ -13014,9 +13035,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.4.0.tgz", - "integrity": "sha512-KJGWS2qa0xZXIMPMDUNkRVO8/JxRd4+M0ejYYOzu2LIQ5ijecPzNuNR9nvDkml9XyyRBzu975FkhJcwD17ietQ==", + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.5.0.tgz", + "integrity": "sha512-s4+b1RFWkNKWp7WWrv2q60MuFljHUCbO7XAupBSCUz/NP1Hz4OenWbMPUt0H+fa8YZeN8CX3JDIA8Bet5uAJvw==", "devOptional": true, "requires": { "@electron/get": "^1.0.1", @@ -13299,9 +13320,9 @@ "requires": {} }, "eslint-plugin-jest": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.4.0.tgz", - "integrity": "sha512-8qnt/hgtZ94E9dA6viqfViKBfkJwFHXgJmTWlMGDgunw1XJEGqm3eiPjDsTanM3/u/3Az82nyQM9GX7PM/QGmg==", + "version": "24.4.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.4.2.tgz", + "integrity": "sha512-jNMnqwX75z0RXRMXkxwb/+9ylKJYJLJ8nT8nBT0XFM5qx4IQGxP4edMawa0qGkSbHae0BDPBmi8I2QF0/F04XQ==", "dev": true, "requires": { "@typescript-eslint/experimental-utils": "^4.0.1" @@ -13487,16 +13508,16 @@ "dev": true }, "expect": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.0.tgz", - "integrity": "sha512-oOTbawMQv7AK1FZURbPTgGSzmhxkjFzoARSvDjOMnOpeWuYQx1tP6rXu9MIX5mrACmyCAM7fSNP8IJO2f1p0CQ==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.2.tgz", + "integrity": "sha512-sjHBeEk47/eshN9oLbvPJZMgHQihOXXQzSMPCJ4MqKShbU9HOVFSNHEEU4dp4ujzxFSiNvPFzB2AMOFmkizhvA==", "dev": true, "requires": { "@jest/types": "^27.1.1", "ansi-styles": "^5.0.0", "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.2.0", - "jest-message-util": "^27.2.0", + "jest-matcher-utils": "^27.2.2", + "jest-message-util": "^27.2.2", "jest-regex-util": "^27.0.6" }, "dependencies": { @@ -14567,14 +14588,14 @@ } }, "jest": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.0.tgz", - "integrity": "sha512-oUqVXyvh5YwEWl263KWdPUAqEzBFzGHdFLQ05hUnITr1tH+9SscEI9A/GH9eBClA+Nw1ct+KNuuOV6wlnmBPcg==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.2.tgz", + "integrity": "sha512-XAB/9akDTe3/V0wPNKWfP9Y/NT1QPiCqyRBYGbC66EA9EvgAzdaFEqhFGLaDJ5UP2yIyXUMtju9a9IMrlYbZTQ==", "dev": true, "requires": { - "@jest/core": "^27.2.0", + "@jest/core": "^27.2.2", "import-local": "^3.0.2", - "jest-cli": "^27.2.0" + "jest-cli": "^27.2.2" } }, "jest-changed-files": { @@ -14589,91 +14610,91 @@ } }, "jest-circus": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.0.tgz", - "integrity": "sha512-WwENhaZwOARB1nmcboYPSv/PwHBUGRpA4MEgszjr9DLCl97MYw0qZprBwLb7rNzvMwfIvNGG7pefQ5rxyBlzIA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.2.tgz", + "integrity": "sha512-8txlqs0EDrvPasCgwfLMkG0l3F4FxqQa6lxOsvYfOl04eSJjRw3F4gk9shakuC00nMD+VT+SMtFYXxe64f0VZw==", "dev": true, "requires": { - "@jest/environment": "^27.2.0", - "@jest/test-result": "^27.2.0", + "@jest/environment": "^27.2.2", + "@jest/test-result": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.2.0", + "expect": "^27.2.2", "is-generator-fn": "^2.0.0", - "jest-each": "^27.2.0", - "jest-matcher-utils": "^27.2.0", - "jest-message-util": "^27.2.0", - "jest-runtime": "^27.2.0", - "jest-snapshot": "^27.2.0", + "jest-each": "^27.2.2", + "jest-matcher-utils": "^27.2.2", + "jest-message-util": "^27.2.2", + "jest-runtime": "^27.2.2", + "jest-snapshot": "^27.2.2", "jest-util": "^27.2.0", - "pretty-format": "^27.2.0", + "pretty-format": "^27.2.2", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" } }, "jest-cli": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.0.tgz", - "integrity": "sha512-bq1X/B/b1kT9y1zIFMEW3GFRX1HEhFybiqKdbxM+j11XMMYSbU9WezfyWIhrSOmPT+iODLATVjfsCnbQs7cfIA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.2.tgz", + "integrity": "sha512-jbEythw22LR/IHYgNrjWdO74wO9wyujCxTMjbky0GLav4rC4y6qDQr4TqQ2JPP51eDYJ2awVn83advEVSs5Brg==", "dev": true, "requires": { - "@jest/core": "^27.2.0", - "@jest/test-result": "^27.2.0", + "@jest/core": "^27.2.2", + "@jest/test-result": "^27.2.2", "@jest/types": "^27.1.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", - "jest-config": "^27.2.0", + "jest-config": "^27.2.2", "jest-util": "^27.2.0", - "jest-validate": "^27.2.0", + "jest-validate": "^27.2.2", "prompts": "^2.0.1", "yargs": "^16.0.3" } }, "jest-config": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.0.tgz", - "integrity": "sha512-Z1romHpxeNwLxQtouQ4xt07bY6HSFGKTo0xJcvOK3u6uJHveA4LB2P+ty9ArBLpTh3AqqPxsyw9l9GMnWBYS9A==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.2.tgz", + "integrity": "sha512-2nhms3lp52ZpU0636bB6zIFHjDVtYxzFQIOHZjBFUeXcb6b41sEkWojbHaJ4FEIO44UbccTLa7tvNpiFCgPE7w==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.2.0", + "@jest/test-sequencer": "^27.2.2", "@jest/types": "^27.1.1", - "babel-jest": "^27.2.0", + "babel-jest": "^27.2.2", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", - "jest-circus": "^27.2.0", - "jest-environment-jsdom": "^27.2.0", - "jest-environment-node": "^27.2.0", + "jest-circus": "^27.2.2", + "jest-environment-jsdom": "^27.2.2", + "jest-environment-node": "^27.2.2", "jest-get-type": "^27.0.6", - "jest-jasmine2": "^27.2.0", + "jest-jasmine2": "^27.2.2", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.2.0", - "jest-runner": "^27.2.0", + "jest-resolve": "^27.2.2", + "jest-runner": "^27.2.2", "jest-util": "^27.2.0", - "jest-validate": "^27.2.0", + "jest-validate": "^27.2.2", "micromatch": "^4.0.4", - "pretty-format": "^27.2.0" + "pretty-format": "^27.2.2" } }, "jest-diff": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.0.tgz", - "integrity": "sha512-QSO9WC6btFYWtRJ3Hac0sRrkspf7B01mGrrQEiCW6TobtViJ9RWL0EmOs/WnBsZDsI/Y2IoSHZA2x6offu0sYw==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.2.tgz", + "integrity": "sha512-o3LaDbQDSaMJif4yztJAULI4xVatxbBasbKLbEw3K8CiRdDdbxMrLArS9EKDHQFYh6Tgfrm1PC2mIYR1xhu0hQ==", "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^27.0.6", "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.0" + "pretty-format": "^27.2.2" } }, "jest-docblock": { @@ -14686,26 +14707,26 @@ } }, "jest-each": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.0.tgz", - "integrity": "sha512-biDmmUQjg+HZOB7MfY2RHSFL3j418nMoC3TK3pGAj880fQQSxvQe1y2Wy23JJJNUlk6YXiGU0yWy86Le1HBPmA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.2.tgz", + "integrity": "sha512-ZCDhkvwHeXHsxoFxvW43fabL18iLiVDxaipG5XWG7dSd+XWXXpzMQvBWYT9Wvzhg5x4hvrLQ24LtiOKw3I09xA==", "dev": true, "requires": { "@jest/types": "^27.1.1", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "jest-util": "^27.2.0", - "pretty-format": "^27.2.0" + "pretty-format": "^27.2.2" } }, "jest-environment-jsdom": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.0.tgz", - "integrity": "sha512-wNQJi6Rd/AkUWqTc4gWhuTIFPo7tlMK0RPZXeM6AqRHZA3D3vwvTa9ktAktyVyWYmUoXdYstOfyYMG3w4jt7eA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.2.tgz", + "integrity": "sha512-mzCLEdnpGWDJmNB6WIPLlZM+hpXdeiya9TryiByqcUdpliNV1O+LGC2SewzjmB4IblabGfvr3KcPN0Nme2wnDw==", "dev": true, "requires": { - "@jest/environment": "^27.2.0", - "@jest/fake-timers": "^27.2.0", + "@jest/environment": "^27.2.2", + "@jest/fake-timers": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1", @@ -14796,13 +14817,13 @@ } }, "jest-environment-node": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.0.tgz", - "integrity": "sha512-WbW+vdM4u88iy6Q3ftUEQOSgMPtSgjm3qixYYK2AKEuqmFO2zmACTw1vFUB0qI/QN88X6hA6ZkVKIdIWWzz+yg==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.2.tgz", + "integrity": "sha512-XgUscWs6H6UNqC96/QJjmUGZzzpql/JyprLSXVu7wkgM8tjbJdEkSqwrVAvJPm1yu526ImrmsIoh2BTHxkwL/g==", "dev": true, "requires": { - "@jest/environment": "^27.2.0", - "@jest/fake-timers": "^27.2.0", + "@jest/environment": "^27.2.2", + "@jest/fake-timers": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1", @@ -14816,9 +14837,9 @@ "dev": true }, "jest-haste-map": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.0.tgz", - "integrity": "sha512-laFet7QkNlWjwZtMGHCucLvF8o9PAh2cgePRck1+uadSM4E4XH9J4gnx4do+a6do8ZV5XHNEAXEkIoNg5XUH2Q==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.2.tgz", + "integrity": "sha512-kaKiq+GbAvk6/sq++Ymor4Vzk6+lr0vbKs2HDVPdkKsHX2lIJRyvhypZG/QsNfQnROKWIZSpUpGuv2HySSosvA==", "dev": true, "requires": { "@jest/types": "^27.1.1", @@ -14831,63 +14852,63 @@ "jest-regex-util": "^27.0.6", "jest-serializer": "^27.0.6", "jest-util": "^27.2.0", - "jest-worker": "^27.2.0", + "jest-worker": "^27.2.2", "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.0.tgz", - "integrity": "sha512-NcPzZBk6IkDW3Z2V8orGueheGJJYfT5P0zI/vTO/Jp+R9KluUdgFrgwfvZ0A34Kw6HKgiWFILZmh3oQ/eS+UxA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.2.tgz", + "integrity": "sha512-SczhZNfmZID9HbJ1GHhO4EzeL/PMRGeAUw23ddPUdd6kFijEZpT2yOxyNCBUKAsVQ/14OB60kjgnbuFOboZUNg==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.2.0", + "@jest/environment": "^27.2.2", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.2.0", + "@jest/test-result": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.2.0", + "expect": "^27.2.2", "is-generator-fn": "^2.0.0", - "jest-each": "^27.2.0", - "jest-matcher-utils": "^27.2.0", - "jest-message-util": "^27.2.0", - "jest-runtime": "^27.2.0", - "jest-snapshot": "^27.2.0", + "jest-each": "^27.2.2", + "jest-matcher-utils": "^27.2.2", + "jest-message-util": "^27.2.2", + "jest-runtime": "^27.2.2", + "jest-snapshot": "^27.2.2", "jest-util": "^27.2.0", - "pretty-format": "^27.2.0", + "pretty-format": "^27.2.2", "throat": "^6.0.1" } }, "jest-leak-detector": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.0.tgz", - "integrity": "sha512-e91BIEmbZw5+MHkB4Hnrq7S86coTxUMCkz4n7DLmQYvl9pEKmRx9H/JFH87bBqbIU5B2Ju1soKxRWX6/eGFGpA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.2.tgz", + "integrity": "sha512-fQIYKkhXUs/4EpE4wO1AVsv7aNH3o0km1BGq3vxvSfYdwG9GLMf+b0z/ghLmBYNxb+tVpm/zv2caoKm3GfTazg==", "dev": true, "requires": { "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.0" + "pretty-format": "^27.2.2" } }, "jest-matcher-utils": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.0.tgz", - "integrity": "sha512-F+LG3iTwJ0gPjxBX6HCyrARFXq6jjiqhwBQeskkJQgSLeF1j6ui1RTV08SR7O51XTUhtc8zqpDj8iCG4RGmdKw==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.2.tgz", + "integrity": "sha512-xN3wT4p2i9DGB6zmL3XxYp5lJmq9Q6ff8XKlMtVVBS2SAshmgsPBALJFQ8dWRd2G/xf5q/N0SD0Mipt8QBA26A==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.2.0", + "jest-diff": "^27.2.2", "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.0" + "pretty-format": "^27.2.2" } }, "jest-message-util": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.0.tgz", - "integrity": "sha512-y+sfT/94CiP8rKXgwCOzO1mUazIEdEhrLjuiu+RKmCP+8O/TJTSne9dqQRbFIHBtlR2+q7cddJlWGir8UATu5w==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.2.tgz", + "integrity": "sha512-/iS5/m2FSF7Nn6APFoxFymJpyhB/gPf0CJa7uFSkbYaWvrADUfQ9NTsuyjpszKErOS2/huFs44ysWhlQTKvL8Q==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", @@ -14896,7 +14917,7 @@ "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.2.0", + "pretty-format": "^27.2.2", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -14936,44 +14957,44 @@ "dev": true }, "jest-resolve": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.0.tgz", - "integrity": "sha512-v09p9Ib/VtpHM6Cz+i9lEAv1Z/M5NVxsyghRHRMEUOqwPQs3zwTdwp1xS3O/k5LocjKiGS0OTaJoBSpjbM2Jlw==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.2.tgz", + "integrity": "sha512-tfbHcBs/hJTb3fPQ/3hLWR+TsLNTzzK98TU+zIAsrL9nNzWfWROwopUOmiSUqmHMZW5t9au/433kSF2/Af+tTw==", "dev": true, "requires": { "@jest/types": "^27.1.1", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.0", + "jest-haste-map": "^27.2.2", "jest-pnp-resolver": "^1.2.2", "jest-util": "^27.2.0", - "jest-validate": "^27.2.0", + "jest-validate": "^27.2.2", "resolve": "^1.20.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.0.tgz", - "integrity": "sha512-EY5jc/Y0oxn+oVEEldTidmmdVoZaknKPyDORA012JUdqPyqPL+lNdRyI3pGti0RCydds6coaw6xt4JQY54dKsg==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.2.tgz", + "integrity": "sha512-nvJS+DyY51HHdZnMIwXg7fimQ5ylFx4+quQXspQXde2rXYy+4v75UYoX/J65Ln8mKCNc6YF8HEhfGaRBOrxxHg==", "dev": true, "requires": { "@jest/types": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.2.0" + "jest-snapshot": "^27.2.2" } }, "jest-runner": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.0.tgz", - "integrity": "sha512-Cl+BHpduIc0cIVTjwoyx0pQk4Br8gn+wkr35PmKCmzEdOUnQ2wN7QVXA8vXnMQXSlFkN/+KWnk20TAVBmhgrww==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.2.tgz", + "integrity": "sha512-+bUFwBq+yTnvsOFuxetoQtkuOnqdAk2YuIGjlLmc7xLAXn/V1vjhXrLencgij0BUTTUvG9Aul3+5XDss4Wa8Eg==", "dev": true, "requires": { - "@jest/console": "^27.2.0", - "@jest/environment": "^27.2.0", - "@jest/test-result": "^27.2.0", - "@jest/transform": "^27.2.0", + "@jest/console": "^27.2.2", + "@jest/environment": "^27.2.2", + "@jest/test-result": "^27.2.2", + "@jest/transform": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", @@ -14981,32 +15002,32 @@ "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.2.0", - "jest-environment-node": "^27.2.0", - "jest-haste-map": "^27.2.0", - "jest-leak-detector": "^27.2.0", - "jest-message-util": "^27.2.0", - "jest-resolve": "^27.2.0", - "jest-runtime": "^27.2.0", + "jest-environment-jsdom": "^27.2.2", + "jest-environment-node": "^27.2.2", + "jest-haste-map": "^27.2.2", + "jest-leak-detector": "^27.2.2", + "jest-message-util": "^27.2.2", + "jest-resolve": "^27.2.2", + "jest-runtime": "^27.2.2", "jest-util": "^27.2.0", - "jest-worker": "^27.2.0", + "jest-worker": "^27.2.2", "source-map-support": "^0.5.6", "throat": "^6.0.1" } }, "jest-runtime": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.0.tgz", - "integrity": "sha512-6gRE9AVVX49hgBbWQ9PcNDeM4upMUXzTpBs0kmbrjyotyUyIJixLPsYjpeTFwAA07PVLDei1iAm2chmWycdGdQ==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.2.tgz", + "integrity": "sha512-PtTHCK5jT+KrIpKpjJsltu/dK5uGhBtTNLOk1Z+ZD2Jrxam2qQsOqDFYLszcK0jc2TLTNsrVpclqSftn7y3aXA==", "dev": true, "requires": { - "@jest/console": "^27.2.0", - "@jest/environment": "^27.2.0", - "@jest/fake-timers": "^27.2.0", - "@jest/globals": "^27.2.0", + "@jest/console": "^27.2.2", + "@jest/environment": "^27.2.2", + "@jest/fake-timers": "^27.2.2", + "@jest/globals": "^27.2.2", "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.2.0", - "@jest/transform": "^27.2.0", + "@jest/test-result": "^27.2.2", + "@jest/transform": "^27.2.2", "@jest/types": "^27.1.1", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", @@ -15016,14 +15037,14 @@ "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.0", - "jest-message-util": "^27.2.0", + "jest-haste-map": "^27.2.2", + "jest-message-util": "^27.2.2", "jest-mock": "^27.1.1", "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.2.0", - "jest-snapshot": "^27.2.0", + "jest-resolve": "^27.2.2", + "jest-snapshot": "^27.2.2", "jest-util": "^27.2.0", - "jest-validate": "^27.2.0", + "jest-validate": "^27.2.2", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" @@ -15040,9 +15061,9 @@ } }, "jest-snapshot": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.0.tgz", - "integrity": "sha512-MukJvy3KEqemCT2FoT3Gum37CQqso/62PKTfIzWmZVTsLsuyxQmJd2PI5KPcBYFqLlA8LgZLHM8ZlazkVt8LsQ==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.2.tgz", + "integrity": "sha512-7ODSvULMiiOVuuLvLZpDlpqqTqX9hDfdmijho5auVu9qRYREolvrvgH4kSNOKfcqV3EZOTuLKNdqsz1PM20PQA==", "dev": true, "requires": { "@babel/core": "^7.7.2", @@ -15051,23 +15072,23 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.2.0", + "@jest/transform": "^27.2.2", "@jest/types": "^27.1.1", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.2.0", + "expect": "^27.2.2", "graceful-fs": "^4.2.4", - "jest-diff": "^27.2.0", + "jest-diff": "^27.2.2", "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.2.0", - "jest-matcher-utils": "^27.2.0", - "jest-message-util": "^27.2.0", - "jest-resolve": "^27.2.0", + "jest-haste-map": "^27.2.2", + "jest-matcher-utils": "^27.2.2", + "jest-message-util": "^27.2.2", + "jest-resolve": "^27.2.2", "jest-util": "^27.2.0", "natural-compare": "^1.4.0", - "pretty-format": "^27.2.0", + "pretty-format": "^27.2.2", "semver": "^7.3.2" }, "dependencies": { @@ -15097,9 +15118,9 @@ } }, "jest-validate": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.0.tgz", - "integrity": "sha512-uIEZGkFKk3+4liA81Xu0maG5aGDyPLdp+4ed244c+Ql0k3aLWQYcMbaMLXOIFcb83LPHzYzqQ8hwNnIxTqfAGQ==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.2.tgz", + "integrity": "sha512-01mwTAs2kgDuX98Ua3Xhdhp5lXsLU4eyg6k56adTtrXnU/GbLd9uAsh5nc4MWVtUXMeNmHUyEiD4ibLqE8MuNw==", "dev": true, "requires": { "@jest/types": "^27.1.1", @@ -15107,7 +15128,7 @@ "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "leven": "^3.1.0", - "pretty-format": "^27.2.0" + "pretty-format": "^27.2.2" }, "dependencies": { "camelcase": { @@ -15119,12 +15140,12 @@ } }, "jest-watcher": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.0.tgz", - "integrity": "sha512-SjRWhnr+qO8aBsrcnYIyF+qRxNZk6MZH8TIDgvi+VlsyrvOyqg0d+Rm/v9KHiTtC9mGGeFi9BFqgavyWib6xLg==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.2.tgz", + "integrity": "sha512-7HJwZq06BCfM99RacCVzXO90B20/dNJvq+Ouiu/VrFdFRCpbnnqlQUEk4KAhBSllgDrTPgKu422SCF5KKBHDRA==", "dev": true, "requires": { - "@jest/test-result": "^27.2.0", + "@jest/test-result": "^27.2.2", "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", @@ -15134,9 +15155,9 @@ } }, "jest-worker": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.0.tgz", - "integrity": "sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.2.tgz", + "integrity": "sha512-aG1xq9KgWB2CPC8YdMIlI8uZgga2LFNcGbHJxO8ctfXAydSaThR4EewKQGg3tBOC+kS3vhPGgymsBdi9VINjPw==", "dev": true, "requires": { "@types/node": "*", @@ -15828,9 +15849,33 @@ } }, "node-fetch": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.2.tgz", - "integrity": "sha512-aLoxToI6RfZ+0NOjmWAgn9+LEd30YCkJKFSyWacNZdEKTit/ZMcKjGkTRo8uWEsnIb/hfKecNPEbln02PdWbcA==" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } }, "node-ical": { "version": "0.13.0", @@ -16456,13 +16501,13 @@ } }, "pretty-format": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.0.tgz", - "integrity": "sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA==", + "version": "27.2.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.2.tgz", + "integrity": "sha512-+DdLh+rtaElc2SQOE/YPH8k2g3Rf2OXWEpy06p8Szs3hdVSYD87QOOlYRHWAeb/59XTmeVmRKvDD0svHqf6ycA==", "dev": true, "requires": { "@jest/types": "^27.1.1", - "ansi-regex": "^5.0.0", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, @@ -17457,13 +17502,12 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "stack-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.4.tgz", - "integrity": "sha512-ERg+H//lSSYlZhBIUu+wJnqg30AbyBbpZlIhcshpn7BNzpoRODZgfyr9J+8ERf3ooC6af3u7Lcl01nleau7MrA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "requires": { - "escape-string-regexp": "^2.0.0", - "source-map-support": "^0.5.20" + "escape-string-regexp": "^2.0.0" }, "dependencies": { "escape-string-regexp": { @@ -18069,9 +18113,9 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "v8-to-istanbul": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", - "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", diff --git a/package.json b/package.json index 5d15a245..2e1a3229 100644 --- a/package.json +++ b/package.json @@ -47,12 +47,12 @@ "homepage": "https://magicmirror.builders", "devDependencies": { "eslint-config-prettier": "^8.3.0", - "eslint-plugin-jest": "^24.4.0", + "eslint-plugin-jest": "^24.4.2", "eslint-plugin-jsdoc": "^36.1.0", "eslint-plugin-prettier": "^4.0.0", "express-basic-auth": "^1.2.0", "husky": "^7.0.2", - "jest": "^27.2.0", + "jest": "^27.2.2", "jsdom": "^17.0.0", "lodash": "^4.17.21", "nyc": "^15.1.0", @@ -67,7 +67,7 @@ "suncalc": "^1.8.0" }, "optionalDependencies": { - "electron": "^13.4.0" + "electron": "^13.5.0" }, "dependencies": { "colors": "^1.4.0", @@ -81,7 +81,7 @@ "iconv-lite": "^0.6.3", "module-alias": "^2.2.2", "moment": "^2.29.1", - "node-fetch": "^2.6.2", + "node-fetch": "^2.6.5", "node-ical": "^0.13.0", "socket.io": "^4.2.0" }, From f7f24dbdfec44d861a8534f8a6b2e582964c5b9a Mon Sep 17 00:00:00 2001 From: veeck Date: Tue, 28 Sep 2021 12:15:07 +0200 Subject: [PATCH 127/134] Update CHANGELOGE --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8961cfd..7bc44f70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ _This release is scheduled to be released on 2021-10-01._ - Use of `logger.js` in jest tests. - Run prettier over all relevant files. - Move test needing electron in new category `electron`, use `server only` mode in `e2e` tests. +- Update dependencies in package.json. ### Fixed From 1034171e91e4f650c3a38469ad40fba5dfd9edc4 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Tue, 28 Sep 2021 21:10:24 +0200 Subject: [PATCH 128/134] add CHANGELOG --- CHANGELOG.md | 2 +- tests/e2e/mock-console.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8961cfd..7530e579 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,7 +27,7 @@ _This release is scheduled to be released on 2021-10-01._ - Refactored methods from weatherproviders into weatherobject (isDaytime, updateSunTime). - Use of `logger.js` in jest tests. - Run prettier over all relevant files. -- Move test needing electron in new category `electron`, use `server only` mode in `e2e` tests. +- Move tests needing electron in new category `electron`, use `server only` mode in `e2e` tests. ### Fixed diff --git a/tests/e2e/mock-console.js b/tests/e2e/mock-console.js index 03402a05..90b70f12 100644 --- a/tests/e2e/mock-console.js +++ b/tests/e2e/mock-console.js @@ -3,7 +3,7 @@ * * @param {string} err The error message. */ -function myError(err) { +function mockError(err) { if (err.includes("ECONNREFUSED") || err.includes("ECONNRESET") || err.includes("socket hang up") || err.includes("exports is not defined")) { jest.fn(); } else { @@ -14,7 +14,7 @@ function myError(err) { global.console = { log: jest.fn(), dir: console.dir, - error: myError, + error: mockError, warn: console.warn, info: jest.fn(), debug: console.debug From abcee8aa5600fe2dc1c27d799107a5ab3e510ce6 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Tue, 28 Sep 2021 21:23:59 +0200 Subject: [PATCH 129/134] fix global-setup.js --- tests/e2e/global-setup.js | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/e2e/global-setup.js b/tests/e2e/global-setup.js index e524d47c..8e940d9b 100644 --- a/tests/e2e/global-setup.js +++ b/tests/e2e/global-setup.js @@ -1,5 +1,4 @@ const jsdom = require("jsdom"); -const config = require("../configs/empty_ipWhiteList"); exports.startApplication = function (configFilename, exec) { jest.resetModules(); From 8224a6ac35dfffdfc9a7e859de4b12502c30a887 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Tue, 28 Sep 2021 21:38:30 +0200 Subject: [PATCH 130/134] add custom.css before testing --- .github/workflows/codecov-test-suites.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/codecov-test-suites.yml b/.github/workflows/codecov-test-suites.yml index f2d210eb..8c2be8da 100644 --- a/.github/workflows/codecov-test-suites.yml +++ b/.github/workflows/codecov-test-suites.yml @@ -20,6 +20,7 @@ jobs: Xvfb :99 -screen 0 1024x768x16 & export DISPLAY=:99 npm ci + touch css/custom.css npm run test:coverage - name: Upload coverage results to codecov uses: codecov/codecov-action@v1 From c67320f1852a1fbd8f4b95120b3cebb72891047f Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Tue, 28 Sep 2021 22:08:21 +0200 Subject: [PATCH 131/134] fix logger.js --- js/logger.js | 2 +- tests/e2e/global-setup.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/js/logger.js b/js/logger.js index a42db925..0ea523d7 100644 --- a/js/logger.js +++ b/js/logger.js @@ -30,7 +30,7 @@ enableLog = process.env.JEST_WORKER_ID === undefined; } else { // in browser and not running with jsdom - enableLog = typeof window === "object" && window.name === "nodejs"; + enableLog = typeof window === "object" && window.name !== "jsdom"; } if (enableLog) { diff --git a/tests/e2e/global-setup.js b/tests/e2e/global-setup.js index 8e940d9b..45726493 100644 --- a/tests/e2e/global-setup.js +++ b/tests/e2e/global-setup.js @@ -21,6 +21,7 @@ exports.stopApplication = function () { exports.getDocument = function (callback, ms) { const url = "http://" + (config.address || "localhost") + ":" + (config.port || "8080"); jsdom.JSDOM.fromURL(url, { resources: "usable", runScripts: "dangerously" }).then((dom) => { + dom.window.name = "jsdom"; dom.window.onload = function () { global.document = dom.window.document; setTimeout(() => { From 997aec8cc22b5af4a4559feb2a095d04b48104b9 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Wed, 29 Sep 2021 21:02:52 +0200 Subject: [PATCH 132/134] remove default values from test configs --- tests/configs/default.js | 6 ------ tests/configs/modules/alert/default.js | 6 ------ tests/configs/modules/clock/clock_12hr.js | 4 ---- tests/configs/modules/clock/clock_24hr.js | 6 ------ tests/configs/modules/clock/clock_analog.js | 6 ------ tests/configs/modules/clock/clock_displaySeconds_false.js | 4 ---- tests/configs/modules/clock/clock_showPeriodUpper.js | 4 ---- tests/configs/modules/clock/clock_showTime.js | 4 ---- tests/configs/modules/clock/clock_showWeek.js | 4 ---- tests/configs/modules/clock/es/clock_12hr.js | 3 --- tests/configs/modules/clock/es/clock_24hr.js | 4 ---- tests/configs/modules/clock/es/clock_showPeriodUpper.js | 3 --- tests/configs/modules/clock/es/clock_showWeek.js | 3 --- tests/configs/modules/compliments/compliments_anytime.js | 4 ---- tests/configs/modules/compliments/compliments_date.js | 4 ---- .../configs/modules/compliments/compliments_only_anytime.js | 4 ---- tests/configs/modules/compliments/compliments_parts_day.js | 4 ---- tests/configs/modules/display.js | 6 ------ tests/configs/modules/helloworld/helloworld.js | 6 ------ tests/configs/modules/helloworld/helloworld_default.js | 6 ------ tests/configs/modules/newsfeed/default.js | 4 ---- tests/configs/modules/newsfeed/incorrect_url.js | 4 ---- tests/configs/modules/newsfeed/prohibited_words.js | 4 ---- tests/configs/modules/positions.js | 6 ------ tests/configs/without_modules.js | 4 +--- 25 files changed, 1 insertion(+), 112 deletions(-) diff --git a/tests/configs/default.js b/tests/configs/default.js index e3236318..5568e5e0 100644 --- a/tests/configs/default.js +++ b/tests/configs/default.js @@ -6,12 +6,6 @@ exports.configFactory = function (options) { return Object.assign( { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - - language: "en", - timeFormat: 24, - units: "metric", electronOptions: { webPreferences: { nodeIntegration: true, diff --git a/tests/configs/modules/alert/default.js b/tests/configs/modules/alert/default.js index d9c5c968..423260c7 100644 --- a/tests/configs/modules/alert/default.js +++ b/tests/configs/modules/alert/default.js @@ -4,12 +4,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", - timeFormat: 24, - units: "metric", - modules: [ { module: "alert", diff --git a/tests/configs/modules/clock/clock_12hr.js b/tests/configs/modules/clock/clock_12hr.js index cb3563c7..6b8917bd 100644 --- a/tests/configs/modules/clock/clock_12hr.js +++ b/tests/configs/modules/clock/clock_12hr.js @@ -4,11 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", timeFormat: 12, - units: "metric", modules: [ { diff --git a/tests/configs/modules/clock/clock_24hr.js b/tests/configs/modules/clock/clock_24hr.js index f77a600d..27f89d0c 100644 --- a/tests/configs/modules/clock/clock_24hr.js +++ b/tests/configs/modules/clock/clock_24hr.js @@ -4,12 +4,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", - timeFormat: 24, - units: "metric", - modules: [ { module: "clock", diff --git a/tests/configs/modules/clock/clock_analog.js b/tests/configs/modules/clock/clock_analog.js index 7f1353c6..cbe3fecc 100644 --- a/tests/configs/modules/clock/clock_analog.js +++ b/tests/configs/modules/clock/clock_analog.js @@ -3,12 +3,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", - timeFormat: 24, - units: "metric", - modules: [ { module: "clock", diff --git a/tests/configs/modules/clock/clock_displaySeconds_false.js b/tests/configs/modules/clock/clock_displaySeconds_false.js index 4e872377..57bf006a 100644 --- a/tests/configs/modules/clock/clock_displaySeconds_false.js +++ b/tests/configs/modules/clock/clock_displaySeconds_false.js @@ -4,11 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", timeFormat: 12, - units: "metric", modules: [ { diff --git a/tests/configs/modules/clock/clock_showPeriodUpper.js b/tests/configs/modules/clock/clock_showPeriodUpper.js index 7ff7f20a..1e01644f 100644 --- a/tests/configs/modules/clock/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/clock_showPeriodUpper.js @@ -4,11 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", timeFormat: 12, - units: "metric", modules: [ { diff --git a/tests/configs/modules/clock/clock_showTime.js b/tests/configs/modules/clock/clock_showTime.js index 2c130fb2..37bdc5cc 100644 --- a/tests/configs/modules/clock/clock_showTime.js +++ b/tests/configs/modules/clock/clock_showTime.js @@ -4,11 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", timeFormat: 12, - units: "metric", modules: [ { diff --git a/tests/configs/modules/clock/clock_showWeek.js b/tests/configs/modules/clock/clock_showWeek.js index 1db31cb6..2c421e85 100644 --- a/tests/configs/modules/clock/clock_showWeek.js +++ b/tests/configs/modules/clock/clock_showWeek.js @@ -4,11 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", timeFormat: 12, - units: "metric", modules: [ { diff --git a/tests/configs/modules/clock/es/clock_12hr.js b/tests/configs/modules/clock/es/clock_12hr.js index 57d1c7a9..07e5206a 100644 --- a/tests/configs/modules/clock/es/clock_12hr.js +++ b/tests/configs/modules/clock/es/clock_12hr.js @@ -4,11 +4,8 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], language: "es", timeFormat: 12, - units: "metric", modules: [ { diff --git a/tests/configs/modules/clock/es/clock_24hr.js b/tests/configs/modules/clock/es/clock_24hr.js index 60cfa109..469f4e3b 100644 --- a/tests/configs/modules/clock/es/clock_24hr.js +++ b/tests/configs/modules/clock/es/clock_24hr.js @@ -4,11 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], language: "es", - timeFormat: 24, - units: "metric", modules: [ { diff --git a/tests/configs/modules/clock/es/clock_showPeriodUpper.js b/tests/configs/modules/clock/es/clock_showPeriodUpper.js index 5d0c28bb..0253c28c 100644 --- a/tests/configs/modules/clock/es/clock_showPeriodUpper.js +++ b/tests/configs/modules/clock/es/clock_showPeriodUpper.js @@ -4,11 +4,8 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], language: "es", timeFormat: 12, - units: "metric", modules: [ { diff --git a/tests/configs/modules/clock/es/clock_showWeek.js b/tests/configs/modules/clock/es/clock_showWeek.js index f8f71982..dd8f6cd2 100644 --- a/tests/configs/modules/clock/es/clock_showWeek.js +++ b/tests/configs/modules/clock/es/clock_showWeek.js @@ -5,11 +5,8 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], language: "es", timeFormat: 12, - units: "metric", modules: [ { diff --git a/tests/configs/modules/compliments/compliments_anytime.js b/tests/configs/modules/compliments/compliments_anytime.js index 813bd32c..2034b379 100644 --- a/tests/configs/modules/compliments/compliments_anytime.js +++ b/tests/configs/modules/compliments/compliments_anytime.js @@ -4,11 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", timeFormat: 12, - units: "metric", modules: [ { diff --git a/tests/configs/modules/compliments/compliments_date.js b/tests/configs/modules/compliments/compliments_date.js index bf0ae2da..a89dd7de 100644 --- a/tests/configs/modules/compliments/compliments_date.js +++ b/tests/configs/modules/compliments/compliments_date.js @@ -4,11 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", timeFormat: 12, - units: "metric", modules: [ { diff --git a/tests/configs/modules/compliments/compliments_only_anytime.js b/tests/configs/modules/compliments/compliments_only_anytime.js index 6e52f57e..5261e58b 100644 --- a/tests/configs/modules/compliments/compliments_only_anytime.js +++ b/tests/configs/modules/compliments/compliments_only_anytime.js @@ -4,11 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", timeFormat: 12, - units: "metric", modules: [ { diff --git a/tests/configs/modules/compliments/compliments_parts_day.js b/tests/configs/modules/compliments/compliments_parts_day.js index 89b06814..08c9d94e 100644 --- a/tests/configs/modules/compliments/compliments_parts_day.js +++ b/tests/configs/modules/compliments/compliments_parts_day.js @@ -4,11 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", timeFormat: 12, - units: "metric", modules: [ { diff --git a/tests/configs/modules/display.js b/tests/configs/modules/display.js index b9facce3..03aa4f19 100644 --- a/tests/configs/modules/display.js +++ b/tests/configs/modules/display.js @@ -4,12 +4,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", - timeFormat: 24, - units: "metric", - modules: [ { module: "helloworld", diff --git a/tests/configs/modules/helloworld/helloworld.js b/tests/configs/modules/helloworld/helloworld.js index a1d48278..39480bc1 100644 --- a/tests/configs/modules/helloworld/helloworld.js +++ b/tests/configs/modules/helloworld/helloworld.js @@ -4,12 +4,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", - timeFormat: 24, - units: "metric", - modules: [ { module: "helloworld", diff --git a/tests/configs/modules/helloworld/helloworld_default.js b/tests/configs/modules/helloworld/helloworld_default.js index 5678488d..ea95ad83 100644 --- a/tests/configs/modules/helloworld/helloworld_default.js +++ b/tests/configs/modules/helloworld/helloworld_default.js @@ -4,12 +4,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", - timeFormat: 24, - units: "metric", - modules: [ { module: "helloworld", diff --git a/tests/configs/modules/newsfeed/default.js b/tests/configs/modules/newsfeed/default.js index 160212f1..7758da0c 100644 --- a/tests/configs/modules/newsfeed/default.js +++ b/tests/configs/modules/newsfeed/default.js @@ -4,11 +4,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", timeFormat: 12, - units: "metric", modules: [ { diff --git a/tests/configs/modules/newsfeed/incorrect_url.js b/tests/configs/modules/newsfeed/incorrect_url.js index bdaa0341..522fa2d1 100644 --- a/tests/configs/modules/newsfeed/incorrect_url.js +++ b/tests/configs/modules/newsfeed/incorrect_url.js @@ -3,11 +3,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", timeFormat: 12, - units: "metric", modules: [ { diff --git a/tests/configs/modules/newsfeed/prohibited_words.js b/tests/configs/modules/newsfeed/prohibited_words.js index 55c71e29..68d22f54 100644 --- a/tests/configs/modules/newsfeed/prohibited_words.js +++ b/tests/configs/modules/newsfeed/prohibited_words.js @@ -3,11 +3,7 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", timeFormat: 12, - units: "metric", modules: [ { diff --git a/tests/configs/modules/positions.js b/tests/configs/modules/positions.js index f4f5c453..186c25f9 100644 --- a/tests/configs/modules/positions.js +++ b/tests/configs/modules/positions.js @@ -4,12 +4,6 @@ * MIT Licensed. */ let config = { - port: 8080, - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], - language: "en", - timeFormat: 24, - units: "metric", - modules: // Using exotic content. This is why don't accept go to JSON configuration file (function () { diff --git a/tests/configs/without_modules.js b/tests/configs/without_modules.js index 9cc097ae..a90115d4 100644 --- a/tests/configs/without_modules.js +++ b/tests/configs/without_modules.js @@ -4,10 +4,8 @@ * MIT Licensed. */ let config = { - port: 8080, ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.10.1"], - language: "en", - timeFormat: 24, + units: "metric" }; From b3bddb2c990cc0adfd64851428781ba3f4691daa Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Wed, 29 Sep 2021 21:59:22 +0200 Subject: [PATCH 133/134] fix without_modules.js --- tests/configs/without_modules.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/configs/without_modules.js b/tests/configs/without_modules.js index a90115d4..50ff521e 100644 --- a/tests/configs/without_modules.js +++ b/tests/configs/without_modules.js @@ -4,9 +4,7 @@ * MIT Licensed. */ let config = { - ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.10.1"], - - units: "metric" + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.10.1"] }; /*************** DO NOT EDIT THE LINE BELOW ***************/ From f7465679c0cb60f7d50e5995356763c5aea6a7e8 Mon Sep 17 00:00:00 2001 From: Michael Teeuw Date: Fri, 1 Oct 2021 15:06:26 +0200 Subject: [PATCH 134/134] Prepare 2.17.0 Release --- CHANGELOG.md | 4 +- package-lock.json | 4 +- package.json | 2 +- vendor/package-lock.json | 304 +++++++++++++++++++-------------------- 4 files changed, 157 insertions(+), 157 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7baddc79..e468b929 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,9 +5,9 @@ This project adheres to [Semantic Versioning](https://semver.org/). ❤️ **Donate:** Enjoying MagicMirror²? [Please consider a donation!](https://magicmirror.builders/donate) With your help we can continue to improve the MagicMirror² -## [2.17.0] - Unreleased (Develop Branch) +## [2.17.0] - 2021-10-01 -_This release is scheduled to be released on 2021-10-01._ +Special thanks to the following contributors: @apiontek, @eouia, @jupadin, @khassel and @rejas. ### Added diff --git a/package-lock.json b/package-lock.json index bb78f731..c42d4b2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "magicmirror", - "version": "2.17.0-develop", + "version": "2.17.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "magicmirror", - "version": "2.17.0-develop", + "version": "2.17.0", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 1a272935..3b8a42d7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "magicmirror", - "version": "2.17.0-develop", + "version": "2.17.0", "description": "The open source modular smart mirror platform.", "main": "js/electron.js", "scripts": { diff --git a/vendor/package-lock.json b/vendor/package-lock.json index 7aaf2391..8654c60b 100644 --- a/vendor/package-lock.json +++ b/vendor/package-lock.json @@ -1,154 +1,154 @@ { - "name": "magicmirror-vendors", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "magicmirror-vendors", - "license": "MIT", - "dependencies": { - "@fortawesome/fontawesome-free": "^5.15.4", - "moment": "^2.29.1", - "moment-timezone": "^0.5.33", - "nunjucks": "^3.2.3", - "suncalc": "^1.8.0", - "weathericons": "^2.1.0" - } - }, - "node_modules/@fortawesome/fontawesome-free": { - "version": "5.15.4", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz", - "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==", - "hasInstallScript": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/a-sync-waterfall": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", - "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==" - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "engines": { - "node": "*" - } - }, - "node_modules/moment-timezone": { - "version": "0.5.33", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", - "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", - "dependencies": { - "moment": ">= 2.9.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nunjucks": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.3.tgz", - "integrity": "sha512-psb6xjLj47+fE76JdZwskvwG4MYsQKXUtMsPh6U0YMvmyjRtKRFcxnlXGWglNybtNTNVmGdp94K62/+NjF5FDQ==", - "dependencies": { - "a-sync-waterfall": "^1.0.0", - "asap": "^2.0.3", - "commander": "^5.1.0" - }, - "bin": { - "nunjucks-precompile": "bin/precompile" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "chokidar": "^3.3.0" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/suncalc": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/suncalc/-/suncalc-1.8.0.tgz", - "integrity": "sha1-HZiYEJVjB4dQ9JlKlZ5lTYdqy/U=" - }, - "node_modules/weathericons": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/weathericons/-/weathericons-2.1.0.tgz", - "integrity": "sha1-dFOho14gAkXjiftQd9Un7/MLc7Q=" - } - }, - "dependencies": { - "@fortawesome/fontawesome-free": { - "version": "5.15.4", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz", - "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==" - }, - "a-sync-waterfall": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", - "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" - }, - "moment-timezone": { - "version": "0.5.33", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", - "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", - "requires": { - "moment": ">= 2.9.0" - } - }, - "nunjucks": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.3.tgz", - "integrity": "sha512-psb6xjLj47+fE76JdZwskvwG4MYsQKXUtMsPh6U0YMvmyjRtKRFcxnlXGWglNybtNTNVmGdp94K62/+NjF5FDQ==", - "requires": { - "a-sync-waterfall": "^1.0.0", - "asap": "^2.0.3", - "commander": "^5.1.0" - } - }, - "suncalc": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/suncalc/-/suncalc-1.8.0.tgz", - "integrity": "sha1-HZiYEJVjB4dQ9JlKlZ5lTYdqy/U=" - }, - "weathericons": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/weathericons/-/weathericons-2.1.0.tgz", - "integrity": "sha1-dFOho14gAkXjiftQd9Un7/MLc7Q=" - } - } + "name": "magicmirror-vendors", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "magicmirror-vendors", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-free": "^5.15.4", + "moment": "^2.29.1", + "moment-timezone": "^0.5.33", + "nunjucks": "^3.2.3", + "suncalc": "^1.8.0", + "weathericons": "^2.1.0" + } + }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz", + "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.33", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", + "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", + "dependencies": { + "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nunjucks": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.3.tgz", + "integrity": "sha512-psb6xjLj47+fE76JdZwskvwG4MYsQKXUtMsPh6U0YMvmyjRtKRFcxnlXGWglNybtNTNVmGdp94K62/+NjF5FDQ==", + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "bin": { + "nunjucks-precompile": "bin/precompile" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "chokidar": "^3.3.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/suncalc": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/suncalc/-/suncalc-1.8.0.tgz", + "integrity": "sha1-HZiYEJVjB4dQ9JlKlZ5lTYdqy/U=" + }, + "node_modules/weathericons": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/weathericons/-/weathericons-2.1.0.tgz", + "integrity": "sha1-dFOho14gAkXjiftQd9Un7/MLc7Q=" + } + }, + "dependencies": { + "@fortawesome/fontawesome-free": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz", + "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==" + }, + "a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "moment-timezone": { + "version": "0.5.33", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", + "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "nunjucks": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.3.tgz", + "integrity": "sha512-psb6xjLj47+fE76JdZwskvwG4MYsQKXUtMsPh6U0YMvmyjRtKRFcxnlXGWglNybtNTNVmGdp94K62/+NjF5FDQ==", + "requires": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + } + }, + "suncalc": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/suncalc/-/suncalc-1.8.0.tgz", + "integrity": "sha1-HZiYEJVjB4dQ9JlKlZ5lTYdqy/U=" + }, + "weathericons": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/weathericons/-/weathericons-2.1.0.tgz", + "integrity": "sha1-dFOho14gAkXjiftQd9Un7/MLc7Q=" + } + } }