diff --git a/.eslintrc.json b/.eslintrc.json
index 637b2eb7..751bf56d 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -16,7 +16,7 @@
},
"parserOptions": {
"sourceType": "module",
- "ecmaVersion": 2017,
+ "ecmaVersion": 2018,
"ecmaFeatures": {
"globalReturn": true
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d1388bce..ce6b6b80 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ _This release is scheduled to be released on 2022-01-01._
### Added
+
### Updated
- Update missed translation for Korean language.
@@ -18,6 +19,10 @@ _This release is scheduled to be released on 2022-01-01._
### Fixed
- Fixed wrong filename `kr.json` to `ko.json`.
+- ESLint version supports now ECMAScript 2018
+- Cleaned up `updatenotification` module and switched to nunjuck template.
+- Move calendar tests from category `electron` to `e2e`.
+- Fix feels_like data from openweathermaps current weather being ignored (#2678).
## [2.17.1] - 2021-10-01
diff --git a/modules/default/updatenotification/git_helper.js b/modules/default/updatenotification/git_helper.js
index b165e7bc..b42b7d5c 100644
--- a/modules/default/updatenotification/git_helper.js
+++ b/modules/default/updatenotification/git_helper.js
@@ -4,48 +4,53 @@ const fs = require("fs");
const path = require("path");
const Log = require("logger");
-class gitHelper {
+const BASE_DIR = path.normalize(`${__dirname}/../../../`);
+
+class GitHelper {
constructor() {
this.gitRepos = [];
- this.baseDir = path.normalize(__dirname + "/../../../");
}
getRefRegex(branch) {
- return new RegExp("s*([a-z,0-9]+[.][.][a-z,0-9]+) " + branch, "g");
+ return new RegExp(`s*([a-z,0-9]+[.][.][a-z,0-9]+) ${branch}`, "g");
}
async execShell(command) {
- let res = { stdout: "", stderr: "" };
- const { stdout, stderr } = await exec(command);
+ const { stdout = "", stderr = "" } = await exec(command);
- res.stdout = stdout;
- res.stderr = stderr;
- return res;
+ return { stdout, stderr };
}
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);
+ const { stderr } = await this.execShell(`cd ${moduleFolder} && git remote -v`);
+
+ if (stderr) {
+ Log.error(`Failed to fetch git data for ${moduleFolder}: ${stderr}`);
+
return false;
- } else {
- return true;
}
+
+ return true;
}
- add(moduleName) {
- let moduleFolder = this.baseDir;
+ async add(moduleName) {
+ let moduleFolder = BASE_DIR;
+
if (moduleName !== "default") {
- moduleFolder = moduleFolder + "modules/" + moduleName;
+ moduleFolder = `${moduleFolder}modules/${moduleName}`;
}
+
try {
- 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
- if (this.isGitRepo(moduleFolder)) {
+ const isGitRepo = await this.isGitRepo(moduleFolder);
+
+ if (isGitRepo) {
// Folder has .git and has at least one git remote, watch this folder
- this.gitRepos.unshift({ module: moduleName, folder: moduleFolder });
+ this.gitRepos.push({ module: moduleName, folder: moduleFolder });
}
} catch (err) {
// Error when directory .git doesn't exist or doesn't have any remotes
@@ -56,38 +61,34 @@ class gitHelper {
async getStatusInfo(repo) {
let gitInfo = {
module: repo.module,
- // commits behind:
- behind: 0,
- // branch name:
- current: "",
- // current hash:
- hash: "",
- // remote branch:
- tracking: "",
+ behind: 0, // commits behind
+ current: "", // branch name
+ hash: "", // current hash
+ tracking: "", // remote branch
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);
+ const { stderr, stdout } = await this.execShell(`cd ${repo.folder} && git rev-parse HEAD`);
+
+ if (stderr) {
+ Log.error(`Failed to get current commit hash for ${repo.module}: ${stderr}`);
}
- gitInfo.hash = res.stdout;
+
+ gitInfo.hash = stdout;
}
- 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);
+
+ const { stderr, stdout } = await this.execShell(`cd ${repo.folder} && git status -sb`);
+
+ if (stderr) {
+ Log.error(`Failed to get git status for ${repo.module}: ${stderr}`);
// exit without git status info
return;
}
+
// only the first line of stdout is evaluated
- let status = res.stdout.split("\n")[0];
+ let status = stdout.split("\n")[0];
// examples for status:
// ## develop...origin/develop
// ## master...origin/master [behind 8]
@@ -101,72 +102,63 @@ class gitHelper {
// [ '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));
gitInfo.isBehindInStatus = true;
}
+
return gitInfo;
}
async getRepoInfo(repo) {
- let gitInfo;
- if (repo.gitInfo) {
- // mocking
- gitInfo = repo.gitInfo;
- } else {
- gitInfo = await this.getStatusInfo(repo);
- }
+ const gitInfo = await this.getStatusInfo(repo);
+
if (!gitInfo) {
return;
}
+
if (gitInfo.isBehindInStatus) {
return gitInfo;
}
- let res;
- if (repo.res) {
- // mocking
- res = repo.res;
- } else {
- res = await this.execShell("cd " + repo.folder + " && git fetch --dry-run");
- }
+
+ const { stderr } = 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 ...)
- const matches = res.stderr.match(this.getRefRegex(gitInfo.current));
+ const matches = stderr.match(this.getRefRegex(gitInfo.current));
+
if (!matches || !matches[0]) {
// no refs found, nothing to do
return;
}
+
// get behind with refs
try {
- res = await this.execShell("cd " + repo.folder + " && git rev-list --ancestry-path --count " + matches[0]);
- gitInfo.behind = parseInt(res.stdout);
+ const { stdout } = await this.execShell(`cd ${repo.folder} && git rev-list --ancestry-path --count ${matches[0]}`);
+ gitInfo.behind = parseInt(stdout);
+
return gitInfo;
} catch (err) {
- Log.error("Failed to get git revisions for " + repo.module + ": " + err);
+ Log.error(`Failed to get git revisions for ${repo.module}: ${err}`);
}
}
- 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) {
- const gitInfo = await this.getRepoInfo(repo);
- if (gitInfo) {
- gitResultList.unshift(gitInfo);
+
+ for (const repo of this.gitRepos) {
+ try {
+ const gitInfo = await this.getRepoInfo(repo);
+
+ if (gitInfo) {
+ gitResultList.push(gitInfo);
+ }
+ } catch (e) {
+ Log.error(`Failed to retrieve repo info for ${repo.module}: ${e}`);
}
}
@@ -174,4 +166,4 @@ class gitHelper {
}
}
-module.exports.gitHelper = gitHelper;
+module.exports = GitHelper;
diff --git a/modules/default/updatenotification/node_helper.js b/modules/default/updatenotification/node_helper.js
index c24e190a..a0e68305 100644
--- a/modules/default/updatenotification/node_helper.js
+++ b/modules/default/updatenotification/node_helper.js
@@ -1,70 +1,66 @@
-const GitHelper = require(__dirname + "/git_helper.js");
-const defaultModules = require(__dirname + "/../defaultmodules.js");
+const GitHelper = require("./git_helper");
+const defaultModules = require("../defaultmodules");
const NodeHelper = require("node_helper");
+const ONE_MINUTE = 60 * 1000;
+
module.exports = NodeHelper.create({
config: {},
updateTimer: null,
updateProcessStarted: false,
- gitHelper: new GitHelper.gitHelper(),
+ gitHelper: new 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
- this.gitHelper.add("default");
-
- for (let moduleName in modules) {
+ async configureModules(modules) {
+ for (const moduleName of modules) {
if (!this.ignoreUpdateChecking(moduleName)) {
- this.gitHelper.add(moduleName);
+ await this.gitHelper.add(moduleName);
}
}
+
+ await this.gitHelper.add("default");
},
- socketNotificationReceived: function (notification, payload) {
+ async socketNotificationReceived(notification, payload) {
if (notification === "CONFIG") {
this.config = payload;
} else if (notification === "MODULES") {
// if this is the 1st time thru the update check process
if (!this.updateProcessStarted) {
this.updateProcessStarted = true;
- this.configureModules(payload).then(() => this.performFetch());
+ await this.configureModules(payload);
+ await this.performFetch();
}
}
},
- performFetch: async function () {
- for (let gitInfo of await this.gitHelper.getRepos()) {
- this.sendSocketNotification("STATUS", gitInfo);
+ async performFetch() {
+ const repos = await this.gitHelper.getRepos();
+
+ for (const repo of repos) {
+ this.sendSocketNotification("STATUS", repo);
}
this.scheduleNextFetch(this.config.updateInterval);
},
- scheduleNextFetch: function (delay) {
- if (delay < 60 * 1000) {
- delay = 60 * 1000;
- }
-
- let self = this;
+ scheduleNextFetch(delay) {
clearTimeout(this.updateTimer);
- this.updateTimer = setTimeout(function () {
- self.performFetch();
- }, delay);
+
+ this.updateTimer = setTimeout(() => {
+ this.performFetch();
+ }, Math.max(delay, ONE_MINUTE));
},
- ignoreUpdateChecking: function (moduleName) {
+ ignoreUpdateChecking(moduleName) {
// Should not check for updates for default modules
- if (defaultModules.indexOf(moduleName) >= 0) {
+ if (defaultModules.includes(moduleName)) {
return true;
}
// Should not check for updates for ignored modules
- if (this.config.ignoreModules.indexOf(moduleName) >= 0) {
+ if (this.config.ignoreModules.includes(moduleName)) {
return true;
}
diff --git a/modules/default/updatenotification/updatenotification.css b/modules/default/updatenotification/updatenotification.css
new file mode 100644
index 00000000..deed9e64
--- /dev/null
+++ b/modules/default/updatenotification/updatenotification.css
@@ -0,0 +1,3 @@
+.module.updatenotification a.difflink {
+ text-decoration: none;
+}
diff --git a/modules/default/updatenotification/updatenotification.js b/modules/default/updatenotification/updatenotification.js
index 7d416852..8c3bb6af 100644
--- a/modules/default/updatenotification/updatenotification.js
+++ b/modules/default/updatenotification/updatenotification.js
@@ -5,42 +5,59 @@
* MIT Licensed.
*/
Module.register("updatenotification", {
- // Define module defaults
defaults: {
updateInterval: 10 * 60 * 1000, // every 10 minutes
refreshInterval: 24 * 60 * 60 * 1000, // one day
- ignoreModules: [],
- timeout: 5000
+ ignoreModules: []
},
suspended: false,
moduleList: {},
- // Override start method.
- start: function () {
- Log.info("Starting module: " + this.name);
+ start() {
+ Log.info(`Starting module: ${this.name}`);
+ this.addFilters();
setInterval(() => {
this.moduleList = {};
this.updateDom(2);
}, this.config.refreshInterval);
},
- notificationReceived: function (notification, payload, sender) {
+ suspend() {
+ this.suspended = true;
+ },
+
+ resume() {
+ this.suspended = false;
+ this.updateDom(2);
+ },
+
+ notificationReceived(notification) {
if (notification === "DOM_OBJECTS_CREATED") {
this.sendSocketNotification("CONFIG", this.config);
- this.sendSocketNotification("MODULES", Module.definitions);
- //this.hide(0, { lockString: this.identifier });
+ this.sendSocketNotification("MODULES", Object.keys(Module.definitions));
}
},
- // Override socket notification handler.
- socketNotificationReceived: function (notification, payload) {
+ socketNotificationReceived(notification, payload) {
if (notification === "STATUS") {
this.updateUI(payload);
}
},
- updateUI: function (payload) {
+ getStyles() {
+ return [`${this.name}.css`];
+ },
+
+ getTemplate() {
+ return `${this.name}.njk`;
+ },
+
+ getTemplateData() {
+ return { moduleList: this.moduleList, suspended: this.suspended };
+ },
+
+ updateUI(payload) {
if (payload && payload.behind > 0) {
// if we haven't seen info for this module
if (this.moduleList[payload.module] === undefined) {
@@ -48,7 +65,6 @@ Module.register("updatenotification", {
this.moduleList[payload.module] = payload;
this.updateDom(2);
}
- //self.show(1000, { lockString: self.identifier });
} else if (payload && payload.behind === 0) {
// if the module WAS in the list, but shouldn't be
if (this.moduleList[payload.module] !== undefined) {
@@ -59,62 +75,15 @@ Module.register("updatenotification", {
}
},
- diffLink: function (module, text) {
- const localRef = module.hash;
- const remoteRef = module.tracking.replace(/.*\//, "");
- return '' + text + "";
- },
-
- // Override dom generator.
- getDom: function () {
- const wrapper = document.createElement("div");
- if (this.suspended === false) {
- // process the hash of module info found
- for (const key of Object.keys(this.moduleList)) {
- let m = this.moduleList[key];
-
- const message = document.createElement("div");
- message.className = "small bright";
-
- const icon = document.createElement("i");
- icon.className = "fa fa-exclamation-circle";
- icon.innerHTML = " ";
- message.appendChild(icon);
-
- const updateInfoKeyName = m.behind === 1 ? "UPDATE_INFO_SINGLE" : "UPDATE_INFO_MULTIPLE";
-
- let subtextHtml = this.translate(updateInfoKeyName, {
- COMMIT_COUNT: m.behind,
- BRANCH_NAME: m.current
- });
-
- const text = document.createElement("span");
- if (m.module === "default") {
- text.innerHTML = this.translate("UPDATE_NOTIFICATION");
- subtextHtml = this.diffLink(m, subtextHtml);
- } else {
- text.innerHTML = this.translate("UPDATE_NOTIFICATION_MODULE", {
- MODULE_NAME: m.module
- });
- }
- message.appendChild(text);
-
- wrapper.appendChild(message);
-
- const subtext = document.createElement("div");
- subtext.innerHTML = subtextHtml;
- subtext.className = "xsmall dimmed";
- wrapper.appendChild(subtext);
+ addFilters() {
+ this.nunjucksEnvironment().addFilter("diffLink", (text, status) => {
+ if (status.module !== "default") {
+ return text;
}
- }
- return wrapper;
- },
- suspend: function () {
- this.suspended = true;
- },
- resume: function () {
- this.suspended = false;
- this.updateDom(2);
+ const localRef = status.hash;
+ const remoteRef = status.tracking.replace(/.*\//, "");
+ return `${text}`;
+ });
}
});
diff --git a/modules/default/updatenotification/updatenotification.njk b/modules/default/updatenotification/updatenotification.njk
new file mode 100644
index 00000000..aa4a5250
--- /dev/null
+++ b/modules/default/updatenotification/updatenotification.njk
@@ -0,0 +1,15 @@
+{% if not suspended %}
+ {% for name, status in moduleList %}
+
+
+
+ {% set mainTextLabel = "UPDATE_NOTIFICATION" if name === "default" else "UPDATE_NOTIFICATION_MODULE" %}
+ {{ mainTextLabel | translate({MODULE_NAME: name}) }}
+
+
+
+ {% set subTextLabel = "UPDATE_INFO_SINGLE" if status.behind === 1 else "UPDATE_INFO_MULTIPLE" %}
+ {{ subTextLabel | translate({COMMIT_COUNT: status.behind, BRANCH_NAME: status.current}) | diffLink(status) | safe }}
+
+ {% endfor %}
+{% endif %}
diff --git a/modules/default/weather/providers/openweathermap.js b/modules/default/weather/providers/openweathermap.js
index d6779d8d..c1258d3c 100755
--- a/modules/default/weather/providers/openweathermap.js
+++ b/modules/default/weather/providers/openweathermap.js
@@ -127,6 +127,8 @@ WeatherProvider.register("openweathermap", {
currentWeather.humidity = currentWeatherData.main.humidity;
currentWeather.temperature = currentWeatherData.main.temp;
+ currentWeather.feelsLikeTemp = currentWeatherData.main.feels_like;
+
if (this.config.windUnits === "metric") {
currentWeather.windSpeed = this.config.useKmh ? currentWeatherData.wind.speed * 3.6 : currentWeatherData.wind.speed;
} else {
diff --git a/package-lock.json b/package-lock.json
index e0d35515..d56358c9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -27,12 +27,12 @@
},
"devDependencies": {
"eslint-config-prettier": "^8.3.0",
- "eslint-plugin-jest": "^24.4.2",
+ "eslint-plugin-jest": "^24.5.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.2",
+ "jest": "^27.2.4",
"jsdom": "^17.0.0",
"lodash": "^4.17.21",
"nyc": "^15.1.0",
@@ -788,16 +788,16 @@
}
},
"node_modules/@jest/console": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.2.tgz",
- "integrity": "sha512-m7tbzPWyvSFfoanTknJoDnaeruDARsUe555tkVjG/qeaRDKwyPqqbgs4yFx583gmoETiAts1deeYozR5sVRhNA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.4.tgz",
+ "integrity": "sha512-94znCKynPZpDpYHQ6esRJSc11AmONrVkBOBZiD7S+bSubHhrUfbS95EY5HIOxhm4PQO7cnvZkL3oJcY0oMA+Wg==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^27.2.2",
- "jest-util": "^27.2.0",
+ "jest-message-util": "^27.2.4",
+ "jest-util": "^27.2.4",
"slash": "^3.0.0"
},
"engines": {
@@ -805,37 +805,36 @@
}
},
"node_modules/@jest/core": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.2.tgz",
- "integrity": "sha512-4b9km/h9pAGdCkwWYtbfoeiOtajOlGmr5rL1Eq6JCAVbOevOqxWHxJ6daWxRJW9eF6keXJoJ1H+uVAVcdZu8Bg==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.4.tgz",
+ "integrity": "sha512-UNQLyy+rXoojNm2MGlapgzWhZD1CT1zcHZQYeiD0xE7MtJfC19Q6J5D/Lm2l7i4V97T30usKDoEtjI8vKwWcLg==",
"dev": true,
"dependencies": {
- "@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",
+ "@jest/console": "^27.2.4",
+ "@jest/reporters": "^27.2.4",
+ "@jest/test-result": "^27.2.4",
+ "@jest/transform": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@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.1",
- "jest-config": "^27.2.2",
- "jest-haste-map": "^27.2.2",
- "jest-message-util": "^27.2.2",
+ "jest-changed-files": "^27.2.4",
+ "jest-config": "^27.2.4",
+ "jest-haste-map": "^27.2.4",
+ "jest-message-util": "^27.2.4",
"jest-regex-util": "^27.0.6",
- "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.2",
- "jest-watcher": "^27.2.2",
+ "jest-resolve": "^27.2.4",
+ "jest-resolve-dependencies": "^27.2.4",
+ "jest-runner": "^27.2.4",
+ "jest-runtime": "^27.2.4",
+ "jest-snapshot": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "jest-validate": "^27.2.4",
+ "jest-watcher": "^27.2.4",
"micromatch": "^4.0.4",
- "p-each-series": "^2.1.0",
"rimraf": "^3.0.0",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
@@ -853,62 +852,71 @@
}
},
"node_modules/@jest/environment": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.2.tgz",
- "integrity": "sha512-gO9gVnZfn5ldeOJ5q+35Kru9QWGHEqZCB7W/M+8mD6uCwOGC9HR6mzpLSNRuDsxY/KhaGBYHpgFqtpe4Rl1gDQ==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.4.tgz",
+ "integrity": "sha512-wkuui5yr3SSQW0XD0Qm3TATUbL/WE3LDEM3ulC+RCQhMf2yxhci8x7svGkZ4ivJ6Pc94oOzpZ6cdHBAMSYd1ew==",
"dev": true,
"dependencies": {
- "@jest/fake-timers": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/fake-timers": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
- "jest-mock": "^27.1.1"
+ "jest-mock": "^27.2.4"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/@jest/fake-timers": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.2.tgz",
- "integrity": "sha512-gDIIqs0yxyjyxEI9HlJ8SEJ4uCc8qr8BupG1Hcx7tvyk/SLocyXE63rFxL+HQ0ZLMvSyEcJUmYnvvHH1osWiGA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.4.tgz",
+ "integrity": "sha512-cs/TzvwWUM7kAA6Qm/890SK6JJ2pD5RfDNM3SSEom6BmdyV6OiWP1qf/pqo6ts6xwpcM36oN0wSEzcZWc6/B6w==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.1.1",
- "@sinonjs/fake-timers": "^7.0.2",
+ "@jest/types": "^27.2.4",
+ "@sinonjs/fake-timers": "^8.0.1",
"@types/node": "*",
- "jest-message-util": "^27.2.2",
- "jest-mock": "^27.1.1",
- "jest-util": "^27.2.0"
+ "jest-message-util": "^27.2.4",
+ "jest-mock": "^27.2.4",
+ "jest-util": "^27.2.4"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
- "node_modules/@jest/globals": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.2.tgz",
- "integrity": "sha512-fWa/Luwod1hyehnuep+zCnOTqTVvyc4HLUU/1VpFNOEu0tCWNSODyvKSSOjtb1bGOpCNjgaDcyjzo5f7rl6a7g==",
+ "node_modules/@jest/fake-timers/node_modules/@sinonjs/fake-timers": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz",
+ "integrity": "sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.2.2",
- "@jest/types": "^27.1.1",
- "expect": "^27.2.2"
+ "@sinonjs/commons": "^1.7.0"
+ }
+ },
+ "node_modules/@jest/globals": {
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.4.tgz",
+ "integrity": "sha512-DRsRs5dh0i+fA9mGHylTU19+8fhzNJoEzrgsu+zgJoZth3x8/0juCQ8nVVdW1er4Cqifb/ET7/hACYVPD0dBEA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^27.2.4",
+ "@jest/types": "^27.2.4",
+ "expect": "^27.2.4"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/@jest/reporters": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.2.tgz",
- "integrity": "sha512-ufwZ8XoLChEfPffDeVGroYbhbcYPom3zKDiv4Flhe97rr/o2IfUXoWkDUDoyJ3/V36RFIMjokSu0IJ/pbFtbHg==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.4.tgz",
+ "integrity": "sha512-LHeSdDnDZkDnJ8kvnjcqV8P1Yv/32yL4d4XfR5gBiy3xGO0onwll1QEbvtW96fIwhx2nejug0GTaEdNDoyr3fQ==",
"dev": true,
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^27.2.2",
- "@jest/test-result": "^27.2.2",
- "@jest/transform": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/console": "^27.2.4",
+ "@jest/test-result": "^27.2.4",
+ "@jest/transform": "^27.2.4",
+ "@jest/types": "^27.2.4",
"chalk": "^4.0.0",
"collect-v8-coverage": "^1.0.0",
"exit": "^0.1.2",
@@ -919,15 +927,15 @@
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
- "jest-haste-map": "^27.2.2",
- "jest-resolve": "^27.2.2",
- "jest-util": "^27.2.0",
- "jest-worker": "^27.2.2",
+ "jest-haste-map": "^27.2.4",
+ "jest-resolve": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "jest-worker": "^27.2.4",
"slash": "^3.0.0",
"source-map": "^0.6.0",
"string-length": "^4.0.1",
"terminal-link": "^2.0.0",
- "v8-to-istanbul": "^8.0.0"
+ "v8-to-istanbul": "^8.1.0"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -956,13 +964,13 @@
}
},
"node_modules/@jest/test-result": {
- "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==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.4.tgz",
+ "integrity": "sha512-eU+PRo0+lIS01b0dTmMdVZ0TtcRSxEaYquZTRFMQz6CvsehGhx9bRzi9Zdw6VROviJyv7rstU+qAMX5pNBmnfQ==",
"dev": true,
"dependencies": {
- "@jest/console": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/console": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
},
@@ -971,36 +979,36 @@
}
},
"node_modules/@jest/test-sequencer": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.2.tgz",
- "integrity": "sha512-YnJqwNQP2Zeu0S4TMqkxg6NN7Y1EFq715n/nThNKrvIS9wmRZjDt2XYqsHbuvhAFjshi0iKDQ813NewFITBH+Q==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.4.tgz",
+ "integrity": "sha512-fpk5eknU3/DXE2QCCG1wv/a468+cfPo3Asu6d6yUtM9LOPh709ubZqrhuUOYfM8hXMrIpIdrv1CdCrWWabX0rQ==",
"dev": true,
"dependencies": {
- "@jest/test-result": "^27.2.2",
+ "@jest/test-result": "^27.2.4",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.2",
- "jest-runtime": "^27.2.2"
+ "jest-haste-map": "^27.2.4",
+ "jest-runtime": "^27.2.4"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/@jest/transform": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.2.tgz",
- "integrity": "sha512-l4Z/7PpajrOjCiXLWLfMY7fgljY0H8EwW7qdzPXXuv2aQF8kY2+Uyj3O+9Popnaw1V7JCw32L8EeI/thqFDkPA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.4.tgz",
+ "integrity": "sha512-n5FlX2TH0oQGwyVDKPxdJ5nI2sO7TJBFe3u3KaAtt7TOiV4yL+Y+rSFDl+Ic5MpbiA/eqXmLAQxjnBmWgS2rEA==",
"dev": true,
"dependencies": {
"@babel/core": "^7.1.0",
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"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.2.2",
+ "jest-haste-map": "^27.2.4",
"jest-regex-util": "^27.0.6",
- "jest-util": "^27.2.0",
+ "jest-util": "^27.2.4",
"micromatch": "^4.0.4",
"pirates": "^4.0.1",
"slash": "^3.0.0",
@@ -1012,9 +1020,9 @@
}
},
"node_modules/@jest/types": {
- "version": "27.1.1",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.1.tgz",
- "integrity": "sha512-yqJPDDseb0mXgKqmNqypCsb85C22K1aY5+LUxh7syIM9n/b0AsaltxNy+o6tt29VcfGDpYEve175bm3uOhcehA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.4.tgz",
+ "integrity": "sha512-IDO2ezTxeMvQAHxzG/ZvEyA47q0aVfzT95rGFl7bZs/Go0aIucvfDbS2rmnoEdXxlLQhcolmoG/wvL/uKx4tKA==",
"dev": true,
"dependencies": {
"@types/istanbul-lib-coverage": "^2.0.0",
@@ -1924,13 +1932,13 @@
}
},
"node_modules/babel-jest": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.2.tgz",
- "integrity": "sha512-XNFNNfGKnZXzhej7TleVP4s9ktH5JjRW8Rmcbb223JJwKB/gmTyeWN0JfiPtSgnjIjDXtKNoixiy0QUHtv3vFA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.4.tgz",
+ "integrity": "sha512-f24OmxyWymk5jfgLdlCMu4fTs4ldxFBIdn5sJdhvGC1m08rSkJ5hYbWkNmfBSvE/DjhCVNSHXepxsI6THGfGsg==",
"dev": true,
"dependencies": {
- "@jest/transform": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/transform": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.0.0",
"babel-preset-jest": "^27.2.0",
@@ -3612,9 +3620,9 @@
}
},
"node_modules/eslint-plugin-jest": {
- "version": "24.4.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.4.2.tgz",
- "integrity": "sha512-jNMnqwX75z0RXRMXkxwb/+9ylKJYJLJ8nT8nBT0XFM5qx4IQGxP4edMawa0qGkSbHae0BDPBmi8I2QF0/F04XQ==",
+ "version": "24.5.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.5.2.tgz",
+ "integrity": "sha512-lrI3sGAyZi513RRmP08sIW241Ti/zMnn/6wbE4ZBhb3M2pJ9ztaZMnSKSKKBUfotVdwqU8W1KtD8ao2/FR8DIg==",
"dev": true,
"dependencies": {
"@typescript-eslint/experimental-utils": "^4.0.1"
@@ -3908,16 +3916,16 @@
}
},
"node_modules/expect": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.2.tgz",
- "integrity": "sha512-sjHBeEk47/eshN9oLbvPJZMgHQihOXXQzSMPCJ4MqKShbU9HOVFSNHEEU4dp4ujzxFSiNvPFzB2AMOFmkizhvA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.4.tgz",
+ "integrity": "sha512-gOtuonQ8TCnbNNCSw2fhVzRf8EFYDII4nB5NmG4IEV0rbUnW1I5zXvoTntU4iicB/Uh0oZr20NGlOLdJiwsOZA==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"ansi-styles": "^5.0.0",
"jest-get-type": "^27.0.6",
- "jest-matcher-utils": "^27.2.2",
- "jest-message-util": "^27.2.2",
+ "jest-matcher-utils": "^27.2.4",
+ "jest-message-util": "^27.2.4",
"jest-regex-util": "^27.0.6"
},
"engines": {
@@ -4930,9 +4938,9 @@
}
},
"node_modules/import-local": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
- "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz",
+ "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==",
"dev": true,
"dependencies": {
"pkg-dir": "^4.2.0",
@@ -5328,14 +5336,14 @@
}
},
"node_modules/jest": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.2.tgz",
- "integrity": "sha512-XAB/9akDTe3/V0wPNKWfP9Y/NT1QPiCqyRBYGbC66EA9EvgAzdaFEqhFGLaDJ5UP2yIyXUMtju9a9IMrlYbZTQ==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.4.tgz",
+ "integrity": "sha512-h4uqb1EQLfPulWyUFFWv9e9Nn8sCqsJ/j3wk/KCY0p4s4s0ICCfP3iMf6hRf5hEhsDyvyrCgKiZXma63gMz16A==",
"dev": true,
"dependencies": {
- "@jest/core": "^27.2.2",
+ "@jest/core": "^27.2.4",
"import-local": "^3.0.2",
- "jest-cli": "^27.2.2"
+ "jest-cli": "^27.2.4"
},
"bin": {
"jest": "bin/jest.js"
@@ -5353,12 +5361,12 @@
}
},
"node_modules/jest-changed-files": {
- "version": "27.1.1",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.1.1.tgz",
- "integrity": "sha512-5TV9+fYlC2A6hu3qtoyGHprBwCAn0AuGA77bZdUgYvVlRMjHXo063VcWTEAyx6XAZ85DYHqp0+aHKbPlfRDRvA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.2.4.tgz",
+ "integrity": "sha512-eeO1C1u4ex7pdTroYXezr+rbr957myyVoKGjcY4R1TJi3A+9v+4fu1Iv9J4eLq1bgFyT3O3iRWU9lZsEE7J72Q==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"execa": "^5.0.0",
"throat": "^6.0.1"
},
@@ -5367,27 +5375,27 @@
}
},
"node_modules/jest-circus": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.2.tgz",
- "integrity": "sha512-8txlqs0EDrvPasCgwfLMkG0l3F4FxqQa6lxOsvYfOl04eSJjRw3F4gk9shakuC00nMD+VT+SMtFYXxe64f0VZw==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.4.tgz",
+ "integrity": "sha512-TtheheTElrGjlsY9VxkzUU1qwIx05ItIusMVKnvNkMt4o/PeegLRcjq3Db2Jz0GGdBalJdbzLZBgeulZAJxJWA==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.2.2",
- "@jest/test-result": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/environment": "^27.2.4",
+ "@jest/test-result": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
"dedent": "^0.7.0",
- "expect": "^27.2.2",
+ "expect": "^27.2.4",
"is-generator-fn": "^2.0.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.2",
+ "jest-each": "^27.2.4",
+ "jest-matcher-utils": "^27.2.4",
+ "jest-message-util": "^27.2.4",
+ "jest-runtime": "^27.2.4",
+ "jest-snapshot": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "pretty-format": "^27.2.4",
"slash": "^3.0.0",
"stack-utils": "^2.0.3",
"throat": "^6.0.1"
@@ -5397,23 +5405,23 @@
}
},
"node_modules/jest-cli": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.2.tgz",
- "integrity": "sha512-jbEythw22LR/IHYgNrjWdO74wO9wyujCxTMjbky0GLav4rC4y6qDQr4TqQ2JPP51eDYJ2awVn83advEVSs5Brg==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.4.tgz",
+ "integrity": "sha512-4kpQQkg74HYLaXo3nzwtg4PYxSLgL7puz1LXHj5Tu85KmlIpxQFjRkXlx4V47CYFFIDoyl3rHA/cXOxUWyMpNg==",
"dev": true,
"dependencies": {
- "@jest/core": "^27.2.2",
- "@jest/test-result": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/core": "^27.2.4",
+ "@jest/test-result": "^27.2.4",
+ "@jest/types": "^27.2.4",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"import-local": "^3.0.2",
- "jest-config": "^27.2.2",
- "jest-util": "^27.2.0",
- "jest-validate": "^27.2.2",
+ "jest-config": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "jest-validate": "^27.2.4",
"prompts": "^2.0.1",
- "yargs": "^16.0.3"
+ "yargs": "^16.2.0"
},
"bin": {
"jest": "bin/jest.js"
@@ -5431,32 +5439,32 @@
}
},
"node_modules/jest-config": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.2.tgz",
- "integrity": "sha512-2nhms3lp52ZpU0636bB6zIFHjDVtYxzFQIOHZjBFUeXcb6b41sEkWojbHaJ4FEIO44UbccTLa7tvNpiFCgPE7w==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.4.tgz",
+ "integrity": "sha512-tWy0UxhdzqiKyp4l5Vq4HxLyD+gH5td+GCF3c22/DJ0bYAOsMo+qi2XtbJI6oYMH5JOJQs9nLW/r34nvFCehjA==",
"dev": true,
"dependencies": {
"@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.2.2",
- "@jest/types": "^27.1.1",
- "babel-jest": "^27.2.2",
+ "@jest/test-sequencer": "^27.2.4",
+ "@jest/types": "^27.2.4",
+ "babel-jest": "^27.2.4",
"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.2",
- "jest-environment-jsdom": "^27.2.2",
- "jest-environment-node": "^27.2.2",
+ "jest-circus": "^27.2.4",
+ "jest-environment-jsdom": "^27.2.4",
+ "jest-environment-node": "^27.2.4",
"jest-get-type": "^27.0.6",
- "jest-jasmine2": "^27.2.2",
+ "jest-jasmine2": "^27.2.4",
"jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.2",
- "jest-runner": "^27.2.2",
- "jest-util": "^27.2.0",
- "jest-validate": "^27.2.2",
+ "jest-resolve": "^27.2.4",
+ "jest-runner": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "jest-validate": "^27.2.4",
"micromatch": "^4.0.4",
- "pretty-format": "^27.2.2"
+ "pretty-format": "^27.2.4"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -5471,15 +5479,15 @@
}
},
"node_modules/jest-diff": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.2.tgz",
- "integrity": "sha512-o3LaDbQDSaMJif4yztJAULI4xVatxbBasbKLbEw3K8CiRdDdbxMrLArS9EKDHQFYh6Tgfrm1PC2mIYR1xhu0hQ==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.4.tgz",
+ "integrity": "sha512-bLAVlDSCR3gqUPGv+4nzVpEXGsHh98HjUL7Vb2hVyyuBDoQmja8eJb0imUABsuxBeUVmf47taJSAd9nDrwWKEg==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
"diff-sequences": "^27.0.6",
"jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.2"
+ "pretty-format": "^27.2.4"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -5498,33 +5506,33 @@
}
},
"node_modules/jest-each": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.2.tgz",
- "integrity": "sha512-ZCDhkvwHeXHsxoFxvW43fabL18iLiVDxaipG5XWG7dSd+XWXXpzMQvBWYT9Wvzhg5x4hvrLQ24LtiOKw3I09xA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.4.tgz",
+ "integrity": "sha512-w9XVc+0EDBUTJS4xBNJ7N2JCcWItFd006lFjz77OarAQcQ10eFDBMrfDv2GBJMKlXe9aq0HrIIF51AXcZrRJyg==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"chalk": "^4.0.0",
"jest-get-type": "^27.0.6",
- "jest-util": "^27.2.0",
- "pretty-format": "^27.2.2"
+ "jest-util": "^27.2.4",
+ "pretty-format": "^27.2.4"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/jest-environment-jsdom": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.2.tgz",
- "integrity": "sha512-mzCLEdnpGWDJmNB6WIPLlZM+hpXdeiya9TryiByqcUdpliNV1O+LGC2SewzjmB4IblabGfvr3KcPN0Nme2wnDw==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.4.tgz",
+ "integrity": "sha512-X70pTXFSypD7AIzKT1mLnDi5hP9w9mdTRcOGOmoDoBrNyNEg4rYm6d4LQWFLc9ps1VnMuDOkFSG0wjSNYGjkng==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.2.2",
- "@jest/fake-timers": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/environment": "^27.2.4",
+ "@jest/fake-timers": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
- "jest-mock": "^27.1.1",
- "jest-util": "^27.2.0",
+ "jest-mock": "^27.2.4",
+ "jest-util": "^27.2.4",
"jsdom": "^16.6.0"
},
"engines": {
@@ -5638,17 +5646,17 @@
}
},
"node_modules/jest-environment-node": {
- "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==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.4.tgz",
+ "integrity": "sha512-ZbVbFSnbzTvhLOIkqh5lcLuGCCFvtG4xTXIRPK99rV2KzQT3kNg16KZwfTnLNlIiWCE8do960eToeDfcqmpSAw==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.2.2",
- "@jest/fake-timers": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/environment": "^27.2.4",
+ "@jest/fake-timers": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
- "jest-mock": "^27.1.1",
- "jest-util": "^27.2.0"
+ "jest-mock": "^27.2.4",
+ "jest-util": "^27.2.4"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -5664,12 +5672,12 @@
}
},
"node_modules/jest-haste-map": {
- "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==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.4.tgz",
+ "integrity": "sha512-bkJ4bT00T2K+1NZXbRcyKnbJ42I6QBvoDNMTAQQDBhaGNnZreiQKUNqax0e6hLTx7E75pKDeltVu3V1HAdu+YA==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"@types/graceful-fs": "^4.1.2",
"@types/node": "*",
"anymatch": "^3.0.3",
@@ -5677,8 +5685,8 @@
"graceful-fs": "^4.2.4",
"jest-regex-util": "^27.0.6",
"jest-serializer": "^27.0.6",
- "jest-util": "^27.2.0",
- "jest-worker": "^27.2.2",
+ "jest-util": "^27.2.4",
+ "jest-worker": "^27.2.4",
"micromatch": "^4.0.4",
"walker": "^1.0.7"
},
@@ -5690,28 +5698,28 @@
}
},
"node_modules/jest-jasmine2": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.2.tgz",
- "integrity": "sha512-SczhZNfmZID9HbJ1GHhO4EzeL/PMRGeAUw23ddPUdd6kFijEZpT2yOxyNCBUKAsVQ/14OB60kjgnbuFOboZUNg==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.4.tgz",
+ "integrity": "sha512-fcffjO/xLWLVnW2ct3No4EksxM5RyPwHDYu9QU+90cC+/eSMLkFAxS55vkqsxexOO5zSsZ3foVpMQcg/amSeIQ==",
"dev": true,
"dependencies": {
"@babel/traverse": "^7.1.0",
- "@jest/environment": "^27.2.2",
+ "@jest/environment": "^27.2.4",
"@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/test-result": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
- "expect": "^27.2.2",
+ "expect": "^27.2.4",
"is-generator-fn": "^2.0.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.2",
+ "jest-each": "^27.2.4",
+ "jest-matcher-utils": "^27.2.4",
+ "jest-message-util": "^27.2.4",
+ "jest-runtime": "^27.2.4",
+ "jest-snapshot": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "pretty-format": "^27.2.4",
"throat": "^6.0.1"
},
"engines": {
@@ -5719,46 +5727,46 @@
}
},
"node_modules/jest-leak-detector": {
- "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==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.4.tgz",
+ "integrity": "sha512-SrcHWbe0EHg/bw2uBjVoHacTo5xosl068x2Q0aWsjr2yYuW2XwqrSkZV4lurUop0jhv1709ymG4or+8E4sH27Q==",
"dev": true,
"dependencies": {
"jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.2"
+ "pretty-format": "^27.2.4"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/jest-matcher-utils": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.2.tgz",
- "integrity": "sha512-xN3wT4p2i9DGB6zmL3XxYp5lJmq9Q6ff8XKlMtVVBS2SAshmgsPBALJFQ8dWRd2G/xf5q/N0SD0Mipt8QBA26A==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.4.tgz",
+ "integrity": "sha512-nQeLfFAIPPkyhkDfifAPfP/U5wm1x0fLtAzqXZSSKckXDNuk2aaOfQiDYv1Mgf5GY6yOsxfUnvNm3dDjXM+BXw==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
- "jest-diff": "^27.2.2",
+ "jest-diff": "^27.2.4",
"jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.2"
+ "pretty-format": "^27.2.4"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/jest-message-util": {
- "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==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.4.tgz",
+ "integrity": "sha512-wbKT/BNGnBVB9nzi+IoaLkXt6fbSvqUxx+IYY66YFh96J3goY33BAaNG3uPqaw/Sh/FR9YpXGVDfd5DJdbh4nA==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"micromatch": "^4.0.4",
- "pretty-format": "^27.2.2",
+ "pretty-format": "^27.2.4",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
@@ -5779,12 +5787,12 @@
}
},
"node_modules/jest-mock": {
- "version": "27.1.1",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.1.tgz",
- "integrity": "sha512-SClsFKuYBf+6SSi8jtAYOuPw8DDMsTElUWEae3zq7vDhH01ayVSIHUSIa8UgbDOUalCFp6gNsaikN0rbxN4dbw==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.2.4.tgz",
+ "integrity": "sha512-iVRU905rutaAoUcrt5Tm1JoHHWi24YabqEGXjPJI4tAyA6wZ7mzDi3GrZ+M7ebgWBqUkZE93GAx1STk7yCMIQA==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"@types/node": "*"
},
"engines": {
@@ -5818,19 +5826,19 @@
}
},
"node_modules/jest-resolve": {
- "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==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.4.tgz",
+ "integrity": "sha512-IsAO/3+3BZnKjI2I4f3835TBK/90dxR7Otgufn3mnrDFTByOSXclDi3G2XJsawGV4/18IMLARJ+V7Wm7t+J89Q==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"chalk": "^4.0.0",
"escalade": "^3.1.1",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.2",
+ "jest-haste-map": "^27.2.4",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^27.2.0",
- "jest-validate": "^27.2.2",
+ "jest-util": "^27.2.4",
+ "jest-validate": "^27.2.4",
"resolve": "^1.20.0",
"slash": "^3.0.0"
},
@@ -5839,45 +5847,45 @@
}
},
"node_modules/jest-resolve-dependencies": {
- "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==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.4.tgz",
+ "integrity": "sha512-i5s7Uh9B3Q6uwxLpMhNKlgBf6pcemvWaORxsW1zNF/YCY3jd5EftvnGBI+fxVwJ1CBxkVfxqCvm1lpZkbaoGmg==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"jest-regex-util": "^27.0.6",
- "jest-snapshot": "^27.2.2"
+ "jest-snapshot": "^27.2.4"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/jest-runner": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.2.tgz",
- "integrity": "sha512-+bUFwBq+yTnvsOFuxetoQtkuOnqdAk2YuIGjlLmc7xLAXn/V1vjhXrLencgij0BUTTUvG9Aul3+5XDss4Wa8Eg==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.4.tgz",
+ "integrity": "sha512-hIo5PPuNUyVDidZS8EetntuuJbQ+4IHWxmHgYZz9FIDbG2wcZjrP6b52uMDjAEQiHAn8yn8ynNe+TL8UuGFYKg==",
"dev": true,
"dependencies": {
- "@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",
+ "@jest/console": "^27.2.4",
+ "@jest/environment": "^27.2.4",
+ "@jest/test-result": "^27.2.4",
+ "@jest/transform": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@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.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.2",
+ "jest-environment-jsdom": "^27.2.4",
+ "jest-environment-node": "^27.2.4",
+ "jest-haste-map": "^27.2.4",
+ "jest-leak-detector": "^27.2.4",
+ "jest-message-util": "^27.2.4",
+ "jest-resolve": "^27.2.4",
+ "jest-runtime": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "jest-worker": "^27.2.4",
"source-map-support": "^0.5.6",
"throat": "^6.0.1"
},
@@ -5886,19 +5894,19 @@
}
},
"node_modules/jest-runtime": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.2.tgz",
- "integrity": "sha512-PtTHCK5jT+KrIpKpjJsltu/dK5uGhBtTNLOk1Z+ZD2Jrxam2qQsOqDFYLszcK0jc2TLTNsrVpclqSftn7y3aXA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.4.tgz",
+ "integrity": "sha512-ICKzzYdjIi70P17MZsLLIgIQFCQmIjMFf+xYww3aUySiUA/QBPUTdUqo5B2eg4HOn9/KkUsV0z6GVgaqAPBJvg==",
"dev": true,
"dependencies": {
- "@jest/console": "^27.2.2",
- "@jest/environment": "^27.2.2",
- "@jest/fake-timers": "^27.2.2",
- "@jest/globals": "^27.2.2",
+ "@jest/console": "^27.2.4",
+ "@jest/environment": "^27.2.4",
+ "@jest/fake-timers": "^27.2.4",
+ "@jest/globals": "^27.2.4",
"@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.2.2",
- "@jest/transform": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/test-result": "^27.2.4",
+ "@jest/transform": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/yargs": "^16.0.0",
"chalk": "^4.0.0",
"cjs-module-lexer": "^1.0.0",
@@ -5907,17 +5915,17 @@
"exit": "^0.1.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.2",
- "jest-message-util": "^27.2.2",
- "jest-mock": "^27.1.1",
+ "jest-haste-map": "^27.2.4",
+ "jest-message-util": "^27.2.4",
+ "jest-mock": "^27.2.4",
"jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.2",
- "jest-snapshot": "^27.2.2",
- "jest-util": "^27.2.0",
- "jest-validate": "^27.2.2",
+ "jest-resolve": "^27.2.4",
+ "jest-snapshot": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "jest-validate": "^27.2.4",
"slash": "^3.0.0",
"strip-bom": "^4.0.0",
- "yargs": "^16.0.3"
+ "yargs": "^16.2.0"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -5937,9 +5945,9 @@
}
},
"node_modules/jest-snapshot": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.2.tgz",
- "integrity": "sha512-7ODSvULMiiOVuuLvLZpDlpqqTqX9hDfdmijho5auVu9qRYREolvrvgH4kSNOKfcqV3EZOTuLKNdqsz1PM20PQA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.4.tgz",
+ "integrity": "sha512-5DFxK31rYS8X8C6WXsFx8XxrxW3PGa6+9IrUcZdTLg1aEyXDGIeiBh4jbwvh655bg/9vTETbEj/njfZicHTZZw==",
"dev": true,
"dependencies": {
"@babel/core": "^7.7.2",
@@ -5948,23 +5956,23 @@
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.0.0",
- "@jest/transform": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/transform": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@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.2",
+ "expect": "^27.2.4",
"graceful-fs": "^4.2.4",
- "jest-diff": "^27.2.2",
+ "jest-diff": "^27.2.4",
"jest-get-type": "^27.0.6",
- "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",
+ "jest-haste-map": "^27.2.4",
+ "jest-matcher-utils": "^27.2.4",
+ "jest-message-util": "^27.2.4",
+ "jest-resolve": "^27.2.4",
+ "jest-util": "^27.2.4",
"natural-compare": "^1.4.0",
- "pretty-format": "^27.2.2",
+ "pretty-format": "^27.2.4",
"semver": "^7.3.2"
},
"engines": {
@@ -5987,12 +5995,12 @@
}
},
"node_modules/jest-util": {
- "version": "27.2.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.0.tgz",
- "integrity": "sha512-T5ZJCNeFpqcLBpx+Hl9r9KoxBCUqeWlJ1Htli+vryigZVJ1vuLB9j35grEBASp4R13KFkV7jM52bBGnArpJN6A==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.4.tgz",
+ "integrity": "sha512-mW++4u+fSvAt3YBWm5IpbmRAceUqa2B++JlUZTiuEt2AmNYn0Yw5oay4cP17TGsMINRNPSGiJ2zNnX60g+VbFg==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
@@ -6004,17 +6012,17 @@
}
},
"node_modules/jest-validate": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.2.tgz",
- "integrity": "sha512-01mwTAs2kgDuX98Ua3Xhdhp5lXsLU4eyg6k56adTtrXnU/GbLd9uAsh5nc4MWVtUXMeNmHUyEiD4ibLqE8MuNw==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.4.tgz",
+ "integrity": "sha512-VMtbxbkd7LHnIH7PChdDtrluCFRJ4b1YV2YJzNwwsASMWftq/HgqiqjvptBOWyWOtevgO3f14wPxkPcLlVBRog==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
"jest-get-type": "^27.0.6",
"leven": "^3.1.0",
- "pretty-format": "^27.2.2"
+ "pretty-format": "^27.2.4"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -6033,17 +6041,17 @@
}
},
"node_modules/jest-watcher": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.2.tgz",
- "integrity": "sha512-7HJwZq06BCfM99RacCVzXO90B20/dNJvq+Ouiu/VrFdFRCpbnnqlQUEk4KAhBSllgDrTPgKu422SCF5KKBHDRA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.4.tgz",
+ "integrity": "sha512-LXC/0+dKxhK7cfF7reflRYlzDIaQE+fL4ynhKhzg8IMILNMuI4xcjXXfUJady7OR4/TZeMg7X8eHx8uan9vqaQ==",
"dev": true,
"dependencies": {
- "@jest/test-result": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/test-result": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
- "jest-util": "^27.2.0",
+ "jest-util": "^27.2.4",
"string-length": "^4.0.1"
},
"engines": {
@@ -6051,9 +6059,9 @@
}
},
"node_modules/jest-worker": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.2.tgz",
- "integrity": "sha512-aG1xq9KgWB2CPC8YdMIlI8uZgga2LFNcGbHJxO8ctfXAydSaThR4EewKQGg3tBOC+kS3vhPGgymsBdi9VINjPw==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.4.tgz",
+ "integrity": "sha512-Zq9A2Pw59KkVjBBKD1i3iE2e22oSjXhUKKuAK1HGX8flGwkm6NMozyEYzKd41hXc64dbd/0eWFeEEuxqXyhM+g==",
"dev": true,
"dependencies": {
"@types/node": "*",
@@ -7313,18 +7321,6 @@
"node": ">=6"
}
},
- "node_modules/p-each-series": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz",
- "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -7787,12 +7783,12 @@
}
},
"node_modules/pretty-format": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.2.tgz",
- "integrity": "sha512-+DdLh+rtaElc2SQOE/YPH8k2g3Rf2OXWEpy06p8Szs3hdVSYD87QOOlYRHWAeb/59XTmeVmRKvDD0svHqf6ycA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.4.tgz",
+ "integrity": "sha512-NUjw22WJHldzxyps2YjLZkUj6q1HvjqFezkB9Y2cklN8NtVZN/kZEXGZdFw4uny3oENzV5EEMESrkI0YDUH8vg==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"ansi-regex": "^5.0.1",
"ansi-styles": "^5.0.0",
"react-is": "^17.0.1"
@@ -11115,104 +11111,114 @@
"dev": true
},
"@jest/console": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.2.tgz",
- "integrity": "sha512-m7tbzPWyvSFfoanTknJoDnaeruDARsUe555tkVjG/qeaRDKwyPqqbgs4yFx583gmoETiAts1deeYozR5sVRhNA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.4.tgz",
+ "integrity": "sha512-94znCKynPZpDpYHQ6esRJSc11AmONrVkBOBZiD7S+bSubHhrUfbS95EY5HIOxhm4PQO7cnvZkL3oJcY0oMA+Wg==",
"dev": true,
"requires": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^27.2.2",
- "jest-util": "^27.2.0",
+ "jest-message-util": "^27.2.4",
+ "jest-util": "^27.2.4",
"slash": "^3.0.0"
}
},
"@jest/core": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.2.tgz",
- "integrity": "sha512-4b9km/h9pAGdCkwWYtbfoeiOtajOlGmr5rL1Eq6JCAVbOevOqxWHxJ6daWxRJW9eF6keXJoJ1H+uVAVcdZu8Bg==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.4.tgz",
+ "integrity": "sha512-UNQLyy+rXoojNm2MGlapgzWhZD1CT1zcHZQYeiD0xE7MtJfC19Q6J5D/Lm2l7i4V97T30usKDoEtjI8vKwWcLg==",
"dev": true,
"requires": {
- "@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",
+ "@jest/console": "^27.2.4",
+ "@jest/reporters": "^27.2.4",
+ "@jest/test-result": "^27.2.4",
+ "@jest/transform": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@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.1",
- "jest-config": "^27.2.2",
- "jest-haste-map": "^27.2.2",
- "jest-message-util": "^27.2.2",
+ "jest-changed-files": "^27.2.4",
+ "jest-config": "^27.2.4",
+ "jest-haste-map": "^27.2.4",
+ "jest-message-util": "^27.2.4",
"jest-regex-util": "^27.0.6",
- "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.2",
- "jest-watcher": "^27.2.2",
+ "jest-resolve": "^27.2.4",
+ "jest-resolve-dependencies": "^27.2.4",
+ "jest-runner": "^27.2.4",
+ "jest-runtime": "^27.2.4",
+ "jest-snapshot": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "jest-validate": "^27.2.4",
+ "jest-watcher": "^27.2.4",
"micromatch": "^4.0.4",
- "p-each-series": "^2.1.0",
"rimraf": "^3.0.0",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
}
},
"@jest/environment": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.2.tgz",
- "integrity": "sha512-gO9gVnZfn5ldeOJ5q+35Kru9QWGHEqZCB7W/M+8mD6uCwOGC9HR6mzpLSNRuDsxY/KhaGBYHpgFqtpe4Rl1gDQ==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.4.tgz",
+ "integrity": "sha512-wkuui5yr3SSQW0XD0Qm3TATUbL/WE3LDEM3ulC+RCQhMf2yxhci8x7svGkZ4ivJ6Pc94oOzpZ6cdHBAMSYd1ew==",
"dev": true,
"requires": {
- "@jest/fake-timers": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/fake-timers": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
- "jest-mock": "^27.1.1"
+ "jest-mock": "^27.2.4"
}
},
"@jest/fake-timers": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.2.tgz",
- "integrity": "sha512-gDIIqs0yxyjyxEI9HlJ8SEJ4uCc8qr8BupG1Hcx7tvyk/SLocyXE63rFxL+HQ0ZLMvSyEcJUmYnvvHH1osWiGA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.4.tgz",
+ "integrity": "sha512-cs/TzvwWUM7kAA6Qm/890SK6JJ2pD5RfDNM3SSEom6BmdyV6OiWP1qf/pqo6ts6xwpcM36oN0wSEzcZWc6/B6w==",
"dev": true,
"requires": {
- "@jest/types": "^27.1.1",
- "@sinonjs/fake-timers": "^7.0.2",
+ "@jest/types": "^27.2.4",
+ "@sinonjs/fake-timers": "^8.0.1",
"@types/node": "*",
- "jest-message-util": "^27.2.2",
- "jest-mock": "^27.1.1",
- "jest-util": "^27.2.0"
+ "jest-message-util": "^27.2.4",
+ "jest-mock": "^27.2.4",
+ "jest-util": "^27.2.4"
+ },
+ "dependencies": {
+ "@sinonjs/fake-timers": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz",
+ "integrity": "sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ }
}
},
"@jest/globals": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.2.tgz",
- "integrity": "sha512-fWa/Luwod1hyehnuep+zCnOTqTVvyc4HLUU/1VpFNOEu0tCWNSODyvKSSOjtb1bGOpCNjgaDcyjzo5f7rl6a7g==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.4.tgz",
+ "integrity": "sha512-DRsRs5dh0i+fA9mGHylTU19+8fhzNJoEzrgsu+zgJoZth3x8/0juCQ8nVVdW1er4Cqifb/ET7/hACYVPD0dBEA==",
"dev": true,
"requires": {
- "@jest/environment": "^27.2.2",
- "@jest/types": "^27.1.1",
- "expect": "^27.2.2"
+ "@jest/environment": "^27.2.4",
+ "@jest/types": "^27.2.4",
+ "expect": "^27.2.4"
}
},
"@jest/reporters": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.2.tgz",
- "integrity": "sha512-ufwZ8XoLChEfPffDeVGroYbhbcYPom3zKDiv4Flhe97rr/o2IfUXoWkDUDoyJ3/V36RFIMjokSu0IJ/pbFtbHg==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.4.tgz",
+ "integrity": "sha512-LHeSdDnDZkDnJ8kvnjcqV8P1Yv/32yL4d4XfR5gBiy3xGO0onwll1QEbvtW96fIwhx2nejug0GTaEdNDoyr3fQ==",
"dev": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^27.2.2",
- "@jest/test-result": "^27.2.2",
- "@jest/transform": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/console": "^27.2.4",
+ "@jest/test-result": "^27.2.4",
+ "@jest/transform": "^27.2.4",
+ "@jest/types": "^27.2.4",
"chalk": "^4.0.0",
"collect-v8-coverage": "^1.0.0",
"exit": "^0.1.2",
@@ -11223,15 +11229,15 @@
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
- "jest-haste-map": "^27.2.2",
- "jest-resolve": "^27.2.2",
- "jest-util": "^27.2.0",
- "jest-worker": "^27.2.2",
+ "jest-haste-map": "^27.2.4",
+ "jest-resolve": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "jest-worker": "^27.2.4",
"slash": "^3.0.0",
"source-map": "^0.6.0",
"string-length": "^4.0.1",
"terminal-link": "^2.0.0",
- "v8-to-istanbul": "^8.0.0"
+ "v8-to-istanbul": "^8.1.0"
}
},
"@jest/source-map": {
@@ -11246,45 +11252,45 @@
}
},
"@jest/test-result": {
- "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==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.4.tgz",
+ "integrity": "sha512-eU+PRo0+lIS01b0dTmMdVZ0TtcRSxEaYquZTRFMQz6CvsehGhx9bRzi9Zdw6VROviJyv7rstU+qAMX5pNBmnfQ==",
"dev": true,
"requires": {
- "@jest/console": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/console": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
}
},
"@jest/test-sequencer": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.2.tgz",
- "integrity": "sha512-YnJqwNQP2Zeu0S4TMqkxg6NN7Y1EFq715n/nThNKrvIS9wmRZjDt2XYqsHbuvhAFjshi0iKDQ813NewFITBH+Q==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.4.tgz",
+ "integrity": "sha512-fpk5eknU3/DXE2QCCG1wv/a468+cfPo3Asu6d6yUtM9LOPh709ubZqrhuUOYfM8hXMrIpIdrv1CdCrWWabX0rQ==",
"dev": true,
"requires": {
- "@jest/test-result": "^27.2.2",
+ "@jest/test-result": "^27.2.4",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.2",
- "jest-runtime": "^27.2.2"
+ "jest-haste-map": "^27.2.4",
+ "jest-runtime": "^27.2.4"
}
},
"@jest/transform": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.2.tgz",
- "integrity": "sha512-l4Z/7PpajrOjCiXLWLfMY7fgljY0H8EwW7qdzPXXuv2aQF8kY2+Uyj3O+9Popnaw1V7JCw32L8EeI/thqFDkPA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.4.tgz",
+ "integrity": "sha512-n5FlX2TH0oQGwyVDKPxdJ5nI2sO7TJBFe3u3KaAtt7TOiV4yL+Y+rSFDl+Ic5MpbiA/eqXmLAQxjnBmWgS2rEA==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"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.2.2",
+ "jest-haste-map": "^27.2.4",
"jest-regex-util": "^27.0.6",
- "jest-util": "^27.2.0",
+ "jest-util": "^27.2.4",
"micromatch": "^4.0.4",
"pirates": "^4.0.1",
"slash": "^3.0.0",
@@ -11293,9 +11299,9 @@
}
},
"@jest/types": {
- "version": "27.1.1",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.1.tgz",
- "integrity": "sha512-yqJPDDseb0mXgKqmNqypCsb85C22K1aY5+LUxh7syIM9n/b0AsaltxNy+o6tt29VcfGDpYEve175bm3uOhcehA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.4.tgz",
+ "integrity": "sha512-IDO2ezTxeMvQAHxzG/ZvEyA47q0aVfzT95rGFl7bZs/Go0aIucvfDbS2rmnoEdXxlLQhcolmoG/wvL/uKx4tKA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
@@ -12020,13 +12026,13 @@
}
},
"babel-jest": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.2.tgz",
- "integrity": "sha512-XNFNNfGKnZXzhej7TleVP4s9ktH5JjRW8Rmcbb223JJwKB/gmTyeWN0JfiPtSgnjIjDXtKNoixiy0QUHtv3vFA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.4.tgz",
+ "integrity": "sha512-f24OmxyWymk5jfgLdlCMu4fTs4ldxFBIdn5sJdhvGC1m08rSkJ5hYbWkNmfBSvE/DjhCVNSHXepxsI6THGfGsg==",
"dev": true,
"requires": {
- "@jest/transform": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/transform": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.0.0",
"babel-preset-jest": "^27.2.0",
@@ -13320,9 +13326,9 @@
"requires": {}
},
"eslint-plugin-jest": {
- "version": "24.4.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.4.2.tgz",
- "integrity": "sha512-jNMnqwX75z0RXRMXkxwb/+9ylKJYJLJ8nT8nBT0XFM5qx4IQGxP4edMawa0qGkSbHae0BDPBmi8I2QF0/F04XQ==",
+ "version": "24.5.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.5.2.tgz",
+ "integrity": "sha512-lrI3sGAyZi513RRmP08sIW241Ti/zMnn/6wbE4ZBhb3M2pJ9ztaZMnSKSKKBUfotVdwqU8W1KtD8ao2/FR8DIg==",
"dev": true,
"requires": {
"@typescript-eslint/experimental-utils": "^4.0.1"
@@ -13508,16 +13514,16 @@
"dev": true
},
"expect": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.2.tgz",
- "integrity": "sha512-sjHBeEk47/eshN9oLbvPJZMgHQihOXXQzSMPCJ4MqKShbU9HOVFSNHEEU4dp4ujzxFSiNvPFzB2AMOFmkizhvA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.4.tgz",
+ "integrity": "sha512-gOtuonQ8TCnbNNCSw2fhVzRf8EFYDII4nB5NmG4IEV0rbUnW1I5zXvoTntU4iicB/Uh0oZr20NGlOLdJiwsOZA==",
"dev": true,
"requires": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"ansi-styles": "^5.0.0",
"jest-get-type": "^27.0.6",
- "jest-matcher-utils": "^27.2.2",
- "jest-message-util": "^27.2.2",
+ "jest-matcher-utils": "^27.2.4",
+ "jest-message-util": "^27.2.4",
"jest-regex-util": "^27.0.6"
},
"dependencies": {
@@ -14295,9 +14301,9 @@
"dev": true
},
"import-local": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
- "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz",
+ "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==",
"dev": true,
"requires": {
"pkg-dir": "^4.2.0",
@@ -14588,113 +14594,113 @@
}
},
"jest": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.2.tgz",
- "integrity": "sha512-XAB/9akDTe3/V0wPNKWfP9Y/NT1QPiCqyRBYGbC66EA9EvgAzdaFEqhFGLaDJ5UP2yIyXUMtju9a9IMrlYbZTQ==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.4.tgz",
+ "integrity": "sha512-h4uqb1EQLfPulWyUFFWv9e9Nn8sCqsJ/j3wk/KCY0p4s4s0ICCfP3iMf6hRf5hEhsDyvyrCgKiZXma63gMz16A==",
"dev": true,
"requires": {
- "@jest/core": "^27.2.2",
+ "@jest/core": "^27.2.4",
"import-local": "^3.0.2",
- "jest-cli": "^27.2.2"
+ "jest-cli": "^27.2.4"
}
},
"jest-changed-files": {
- "version": "27.1.1",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.1.1.tgz",
- "integrity": "sha512-5TV9+fYlC2A6hu3qtoyGHprBwCAn0AuGA77bZdUgYvVlRMjHXo063VcWTEAyx6XAZ85DYHqp0+aHKbPlfRDRvA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.2.4.tgz",
+ "integrity": "sha512-eeO1C1u4ex7pdTroYXezr+rbr957myyVoKGjcY4R1TJi3A+9v+4fu1Iv9J4eLq1bgFyT3O3iRWU9lZsEE7J72Q==",
"dev": true,
"requires": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"execa": "^5.0.0",
"throat": "^6.0.1"
}
},
"jest-circus": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.2.tgz",
- "integrity": "sha512-8txlqs0EDrvPasCgwfLMkG0l3F4FxqQa6lxOsvYfOl04eSJjRw3F4gk9shakuC00nMD+VT+SMtFYXxe64f0VZw==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.4.tgz",
+ "integrity": "sha512-TtheheTElrGjlsY9VxkzUU1qwIx05ItIusMVKnvNkMt4o/PeegLRcjq3Db2Jz0GGdBalJdbzLZBgeulZAJxJWA==",
"dev": true,
"requires": {
- "@jest/environment": "^27.2.2",
- "@jest/test-result": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/environment": "^27.2.4",
+ "@jest/test-result": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
"dedent": "^0.7.0",
- "expect": "^27.2.2",
+ "expect": "^27.2.4",
"is-generator-fn": "^2.0.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.2",
+ "jest-each": "^27.2.4",
+ "jest-matcher-utils": "^27.2.4",
+ "jest-message-util": "^27.2.4",
+ "jest-runtime": "^27.2.4",
+ "jest-snapshot": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "pretty-format": "^27.2.4",
"slash": "^3.0.0",
"stack-utils": "^2.0.3",
"throat": "^6.0.1"
}
},
"jest-cli": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.2.tgz",
- "integrity": "sha512-jbEythw22LR/IHYgNrjWdO74wO9wyujCxTMjbky0GLav4rC4y6qDQr4TqQ2JPP51eDYJ2awVn83advEVSs5Brg==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.4.tgz",
+ "integrity": "sha512-4kpQQkg74HYLaXo3nzwtg4PYxSLgL7puz1LXHj5Tu85KmlIpxQFjRkXlx4V47CYFFIDoyl3rHA/cXOxUWyMpNg==",
"dev": true,
"requires": {
- "@jest/core": "^27.2.2",
- "@jest/test-result": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/core": "^27.2.4",
+ "@jest/test-result": "^27.2.4",
+ "@jest/types": "^27.2.4",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"import-local": "^3.0.2",
- "jest-config": "^27.2.2",
- "jest-util": "^27.2.0",
- "jest-validate": "^27.2.2",
+ "jest-config": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "jest-validate": "^27.2.4",
"prompts": "^2.0.1",
- "yargs": "^16.0.3"
+ "yargs": "^16.2.0"
}
},
"jest-config": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.2.tgz",
- "integrity": "sha512-2nhms3lp52ZpU0636bB6zIFHjDVtYxzFQIOHZjBFUeXcb6b41sEkWojbHaJ4FEIO44UbccTLa7tvNpiFCgPE7w==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.4.tgz",
+ "integrity": "sha512-tWy0UxhdzqiKyp4l5Vq4HxLyD+gH5td+GCF3c22/DJ0bYAOsMo+qi2XtbJI6oYMH5JOJQs9nLW/r34nvFCehjA==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.2.2",
- "@jest/types": "^27.1.1",
- "babel-jest": "^27.2.2",
+ "@jest/test-sequencer": "^27.2.4",
+ "@jest/types": "^27.2.4",
+ "babel-jest": "^27.2.4",
"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.2",
- "jest-environment-jsdom": "^27.2.2",
- "jest-environment-node": "^27.2.2",
+ "jest-circus": "^27.2.4",
+ "jest-environment-jsdom": "^27.2.4",
+ "jest-environment-node": "^27.2.4",
"jest-get-type": "^27.0.6",
- "jest-jasmine2": "^27.2.2",
+ "jest-jasmine2": "^27.2.4",
"jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.2",
- "jest-runner": "^27.2.2",
- "jest-util": "^27.2.0",
- "jest-validate": "^27.2.2",
+ "jest-resolve": "^27.2.4",
+ "jest-runner": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "jest-validate": "^27.2.4",
"micromatch": "^4.0.4",
- "pretty-format": "^27.2.2"
+ "pretty-format": "^27.2.4"
}
},
"jest-diff": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.2.tgz",
- "integrity": "sha512-o3LaDbQDSaMJif4yztJAULI4xVatxbBasbKLbEw3K8CiRdDdbxMrLArS9EKDHQFYh6Tgfrm1PC2mIYR1xhu0hQ==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.4.tgz",
+ "integrity": "sha512-bLAVlDSCR3gqUPGv+4nzVpEXGsHh98HjUL7Vb2hVyyuBDoQmja8eJb0imUABsuxBeUVmf47taJSAd9nDrwWKEg==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
"diff-sequences": "^27.0.6",
"jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.2"
+ "pretty-format": "^27.2.4"
}
},
"jest-docblock": {
@@ -14707,30 +14713,30 @@
}
},
"jest-each": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.2.tgz",
- "integrity": "sha512-ZCDhkvwHeXHsxoFxvW43fabL18iLiVDxaipG5XWG7dSd+XWXXpzMQvBWYT9Wvzhg5x4hvrLQ24LtiOKw3I09xA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.4.tgz",
+ "integrity": "sha512-w9XVc+0EDBUTJS4xBNJ7N2JCcWItFd006lFjz77OarAQcQ10eFDBMrfDv2GBJMKlXe9aq0HrIIF51AXcZrRJyg==",
"dev": true,
"requires": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"chalk": "^4.0.0",
"jest-get-type": "^27.0.6",
- "jest-util": "^27.2.0",
- "pretty-format": "^27.2.2"
+ "jest-util": "^27.2.4",
+ "pretty-format": "^27.2.4"
}
},
"jest-environment-jsdom": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.2.tgz",
- "integrity": "sha512-mzCLEdnpGWDJmNB6WIPLlZM+hpXdeiya9TryiByqcUdpliNV1O+LGC2SewzjmB4IblabGfvr3KcPN0Nme2wnDw==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.4.tgz",
+ "integrity": "sha512-X70pTXFSypD7AIzKT1mLnDi5hP9w9mdTRcOGOmoDoBrNyNEg4rYm6d4LQWFLc9ps1VnMuDOkFSG0wjSNYGjkng==",
"dev": true,
"requires": {
- "@jest/environment": "^27.2.2",
- "@jest/fake-timers": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/environment": "^27.2.4",
+ "@jest/fake-timers": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
- "jest-mock": "^27.1.1",
- "jest-util": "^27.2.0",
+ "jest-mock": "^27.2.4",
+ "jest-util": "^27.2.4",
"jsdom": "^16.6.0"
},
"dependencies": {
@@ -14817,17 +14823,17 @@
}
},
"jest-environment-node": {
- "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==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.4.tgz",
+ "integrity": "sha512-ZbVbFSnbzTvhLOIkqh5lcLuGCCFvtG4xTXIRPK99rV2KzQT3kNg16KZwfTnLNlIiWCE8do960eToeDfcqmpSAw==",
"dev": true,
"requires": {
- "@jest/environment": "^27.2.2",
- "@jest/fake-timers": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/environment": "^27.2.4",
+ "@jest/fake-timers": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
- "jest-mock": "^27.1.1",
- "jest-util": "^27.2.0"
+ "jest-mock": "^27.2.4",
+ "jest-util": "^27.2.4"
}
},
"jest-get-type": {
@@ -14837,12 +14843,12 @@
"dev": true
},
"jest-haste-map": {
- "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==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.4.tgz",
+ "integrity": "sha512-bkJ4bT00T2K+1NZXbRcyKnbJ42I6QBvoDNMTAQQDBhaGNnZreiQKUNqax0e6hLTx7E75pKDeltVu3V1HAdu+YA==",
"dev": true,
"requires": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"@types/graceful-fs": "^4.1.2",
"@types/node": "*",
"anymatch": "^3.0.3",
@@ -14851,73 +14857,73 @@
"graceful-fs": "^4.2.4",
"jest-regex-util": "^27.0.6",
"jest-serializer": "^27.0.6",
- "jest-util": "^27.2.0",
- "jest-worker": "^27.2.2",
+ "jest-util": "^27.2.4",
+ "jest-worker": "^27.2.4",
"micromatch": "^4.0.4",
"walker": "^1.0.7"
}
},
"jest-jasmine2": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.2.tgz",
- "integrity": "sha512-SczhZNfmZID9HbJ1GHhO4EzeL/PMRGeAUw23ddPUdd6kFijEZpT2yOxyNCBUKAsVQ/14OB60kjgnbuFOboZUNg==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.4.tgz",
+ "integrity": "sha512-fcffjO/xLWLVnW2ct3No4EksxM5RyPwHDYu9QU+90cC+/eSMLkFAxS55vkqsxexOO5zSsZ3foVpMQcg/amSeIQ==",
"dev": true,
"requires": {
"@babel/traverse": "^7.1.0",
- "@jest/environment": "^27.2.2",
+ "@jest/environment": "^27.2.4",
"@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/test-result": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
- "expect": "^27.2.2",
+ "expect": "^27.2.4",
"is-generator-fn": "^2.0.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.2",
+ "jest-each": "^27.2.4",
+ "jest-matcher-utils": "^27.2.4",
+ "jest-message-util": "^27.2.4",
+ "jest-runtime": "^27.2.4",
+ "jest-snapshot": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "pretty-format": "^27.2.4",
"throat": "^6.0.1"
}
},
"jest-leak-detector": {
- "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==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.4.tgz",
+ "integrity": "sha512-SrcHWbe0EHg/bw2uBjVoHacTo5xosl068x2Q0aWsjr2yYuW2XwqrSkZV4lurUop0jhv1709ymG4or+8E4sH27Q==",
"dev": true,
"requires": {
"jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.2"
+ "pretty-format": "^27.2.4"
}
},
"jest-matcher-utils": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.2.tgz",
- "integrity": "sha512-xN3wT4p2i9DGB6zmL3XxYp5lJmq9Q6ff8XKlMtVVBS2SAshmgsPBALJFQ8dWRd2G/xf5q/N0SD0Mipt8QBA26A==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.4.tgz",
+ "integrity": "sha512-nQeLfFAIPPkyhkDfifAPfP/U5wm1x0fLtAzqXZSSKckXDNuk2aaOfQiDYv1Mgf5GY6yOsxfUnvNm3dDjXM+BXw==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
- "jest-diff": "^27.2.2",
+ "jest-diff": "^27.2.4",
"jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.2"
+ "pretty-format": "^27.2.4"
}
},
"jest-message-util": {
- "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==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.4.tgz",
+ "integrity": "sha512-wbKT/BNGnBVB9nzi+IoaLkXt6fbSvqUxx+IYY66YFh96J3goY33BAaNG3uPqaw/Sh/FR9YpXGVDfd5DJdbh4nA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"micromatch": "^4.0.4",
- "pretty-format": "^27.2.2",
+ "pretty-format": "^27.2.4",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
@@ -14934,12 +14940,12 @@
}
},
"jest-mock": {
- "version": "27.1.1",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.1.tgz",
- "integrity": "sha512-SClsFKuYBf+6SSi8jtAYOuPw8DDMsTElUWEae3zq7vDhH01ayVSIHUSIa8UgbDOUalCFp6gNsaikN0rbxN4dbw==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.2.4.tgz",
+ "integrity": "sha512-iVRU905rutaAoUcrt5Tm1JoHHWi24YabqEGXjPJI4tAyA6wZ7mzDi3GrZ+M7ebgWBqUkZE93GAx1STk7yCMIQA==",
"dev": true,
"requires": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"@types/node": "*"
}
},
@@ -14957,78 +14963,78 @@
"dev": true
},
"jest-resolve": {
- "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==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.4.tgz",
+ "integrity": "sha512-IsAO/3+3BZnKjI2I4f3835TBK/90dxR7Otgufn3mnrDFTByOSXclDi3G2XJsawGV4/18IMLARJ+V7Wm7t+J89Q==",
"dev": true,
"requires": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"chalk": "^4.0.0",
"escalade": "^3.1.1",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.2",
+ "jest-haste-map": "^27.2.4",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^27.2.0",
- "jest-validate": "^27.2.2",
+ "jest-util": "^27.2.4",
+ "jest-validate": "^27.2.4",
"resolve": "^1.20.0",
"slash": "^3.0.0"
}
},
"jest-resolve-dependencies": {
- "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==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.4.tgz",
+ "integrity": "sha512-i5s7Uh9B3Q6uwxLpMhNKlgBf6pcemvWaORxsW1zNF/YCY3jd5EftvnGBI+fxVwJ1CBxkVfxqCvm1lpZkbaoGmg==",
"dev": true,
"requires": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"jest-regex-util": "^27.0.6",
- "jest-snapshot": "^27.2.2"
+ "jest-snapshot": "^27.2.4"
}
},
"jest-runner": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.2.tgz",
- "integrity": "sha512-+bUFwBq+yTnvsOFuxetoQtkuOnqdAk2YuIGjlLmc7xLAXn/V1vjhXrLencgij0BUTTUvG9Aul3+5XDss4Wa8Eg==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.4.tgz",
+ "integrity": "sha512-hIo5PPuNUyVDidZS8EetntuuJbQ+4IHWxmHgYZz9FIDbG2wcZjrP6b52uMDjAEQiHAn8yn8ynNe+TL8UuGFYKg==",
"dev": true,
"requires": {
- "@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",
+ "@jest/console": "^27.2.4",
+ "@jest/environment": "^27.2.4",
+ "@jest/test-result": "^27.2.4",
+ "@jest/transform": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@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.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.2",
+ "jest-environment-jsdom": "^27.2.4",
+ "jest-environment-node": "^27.2.4",
+ "jest-haste-map": "^27.2.4",
+ "jest-leak-detector": "^27.2.4",
+ "jest-message-util": "^27.2.4",
+ "jest-resolve": "^27.2.4",
+ "jest-runtime": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "jest-worker": "^27.2.4",
"source-map-support": "^0.5.6",
"throat": "^6.0.1"
}
},
"jest-runtime": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.2.tgz",
- "integrity": "sha512-PtTHCK5jT+KrIpKpjJsltu/dK5uGhBtTNLOk1Z+ZD2Jrxam2qQsOqDFYLszcK0jc2TLTNsrVpclqSftn7y3aXA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.4.tgz",
+ "integrity": "sha512-ICKzzYdjIi70P17MZsLLIgIQFCQmIjMFf+xYww3aUySiUA/QBPUTdUqo5B2eg4HOn9/KkUsV0z6GVgaqAPBJvg==",
"dev": true,
"requires": {
- "@jest/console": "^27.2.2",
- "@jest/environment": "^27.2.2",
- "@jest/fake-timers": "^27.2.2",
- "@jest/globals": "^27.2.2",
+ "@jest/console": "^27.2.4",
+ "@jest/environment": "^27.2.4",
+ "@jest/fake-timers": "^27.2.4",
+ "@jest/globals": "^27.2.4",
"@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.2.2",
- "@jest/transform": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/test-result": "^27.2.4",
+ "@jest/transform": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/yargs": "^16.0.0",
"chalk": "^4.0.0",
"cjs-module-lexer": "^1.0.0",
@@ -15037,17 +15043,17 @@
"exit": "^0.1.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.2",
- "jest-message-util": "^27.2.2",
- "jest-mock": "^27.1.1",
+ "jest-haste-map": "^27.2.4",
+ "jest-message-util": "^27.2.4",
+ "jest-mock": "^27.2.4",
"jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.2",
- "jest-snapshot": "^27.2.2",
- "jest-util": "^27.2.0",
- "jest-validate": "^27.2.2",
+ "jest-resolve": "^27.2.4",
+ "jest-snapshot": "^27.2.4",
+ "jest-util": "^27.2.4",
+ "jest-validate": "^27.2.4",
"slash": "^3.0.0",
"strip-bom": "^4.0.0",
- "yargs": "^16.0.3"
+ "yargs": "^16.2.0"
}
},
"jest-serializer": {
@@ -15061,9 +15067,9 @@
}
},
"jest-snapshot": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.2.tgz",
- "integrity": "sha512-7ODSvULMiiOVuuLvLZpDlpqqTqX9hDfdmijho5auVu9qRYREolvrvgH4kSNOKfcqV3EZOTuLKNdqsz1PM20PQA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.4.tgz",
+ "integrity": "sha512-5DFxK31rYS8X8C6WXsFx8XxrxW3PGa6+9IrUcZdTLg1aEyXDGIeiBh4jbwvh655bg/9vTETbEj/njfZicHTZZw==",
"dev": true,
"requires": {
"@babel/core": "^7.7.2",
@@ -15072,23 +15078,23 @@
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.0.0",
- "@jest/transform": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/transform": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@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.2",
+ "expect": "^27.2.4",
"graceful-fs": "^4.2.4",
- "jest-diff": "^27.2.2",
+ "jest-diff": "^27.2.4",
"jest-get-type": "^27.0.6",
- "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",
+ "jest-haste-map": "^27.2.4",
+ "jest-matcher-utils": "^27.2.4",
+ "jest-message-util": "^27.2.4",
+ "jest-resolve": "^27.2.4",
+ "jest-util": "^27.2.4",
"natural-compare": "^1.4.0",
- "pretty-format": "^27.2.2",
+ "pretty-format": "^27.2.4",
"semver": "^7.3.2"
},
"dependencies": {
@@ -15104,12 +15110,12 @@
}
},
"jest-util": {
- "version": "27.2.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.0.tgz",
- "integrity": "sha512-T5ZJCNeFpqcLBpx+Hl9r9KoxBCUqeWlJ1Htli+vryigZVJ1vuLB9j35grEBASp4R13KFkV7jM52bBGnArpJN6A==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.4.tgz",
+ "integrity": "sha512-mW++4u+fSvAt3YBWm5IpbmRAceUqa2B++JlUZTiuEt2AmNYn0Yw5oay4cP17TGsMINRNPSGiJ2zNnX60g+VbFg==",
"dev": true,
"requires": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
@@ -15118,17 +15124,17 @@
}
},
"jest-validate": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.2.tgz",
- "integrity": "sha512-01mwTAs2kgDuX98Ua3Xhdhp5lXsLU4eyg6k56adTtrXnU/GbLd9uAsh5nc4MWVtUXMeNmHUyEiD4ibLqE8MuNw==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.4.tgz",
+ "integrity": "sha512-VMtbxbkd7LHnIH7PChdDtrluCFRJ4b1YV2YJzNwwsASMWftq/HgqiqjvptBOWyWOtevgO3f14wPxkPcLlVBRog==",
"dev": true,
"requires": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
"jest-get-type": "^27.0.6",
"leven": "^3.1.0",
- "pretty-format": "^27.2.2"
+ "pretty-format": "^27.2.4"
},
"dependencies": {
"camelcase": {
@@ -15140,24 +15146,24 @@
}
},
"jest-watcher": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.2.tgz",
- "integrity": "sha512-7HJwZq06BCfM99RacCVzXO90B20/dNJvq+Ouiu/VrFdFRCpbnnqlQUEk4KAhBSllgDrTPgKu422SCF5KKBHDRA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.4.tgz",
+ "integrity": "sha512-LXC/0+dKxhK7cfF7reflRYlzDIaQE+fL4ynhKhzg8IMILNMuI4xcjXXfUJady7OR4/TZeMg7X8eHx8uan9vqaQ==",
"dev": true,
"requires": {
- "@jest/test-result": "^27.2.2",
- "@jest/types": "^27.1.1",
+ "@jest/test-result": "^27.2.4",
+ "@jest/types": "^27.2.4",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
- "jest-util": "^27.2.0",
+ "jest-util": "^27.2.4",
"string-length": "^4.0.1"
}
},
"jest-worker": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.2.tgz",
- "integrity": "sha512-aG1xq9KgWB2CPC8YdMIlI8uZgga2LFNcGbHJxO8ctfXAydSaThR4EewKQGg3tBOC+kS3vhPGgymsBdi9VINjPw==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.4.tgz",
+ "integrity": "sha512-Zq9A2Pw59KkVjBBKD1i3iE2e22oSjXhUKKuAK1HGX8flGwkm6NMozyEYzKd41hXc64dbd/0eWFeEEuxqXyhM+g==",
"dev": true,
"requires": {
"@types/node": "*",
@@ -16148,12 +16154,6 @@
"integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
"devOptional": true
},
- "p-each-series": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz",
- "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==",
- "dev": true
- },
"p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -16501,12 +16501,12 @@
}
},
"pretty-format": {
- "version": "27.2.2",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.2.tgz",
- "integrity": "sha512-+DdLh+rtaElc2SQOE/YPH8k2g3Rf2OXWEpy06p8Szs3hdVSYD87QOOlYRHWAeb/59XTmeVmRKvDD0svHqf6ycA==",
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.4.tgz",
+ "integrity": "sha512-NUjw22WJHldzxyps2YjLZkUj6q1HvjqFezkB9Y2cklN8NtVZN/kZEXGZdFw4uny3oENzV5EEMESrkI0YDUH8vg==",
"dev": true,
"requires": {
- "@jest/types": "^27.1.1",
+ "@jest/types": "^27.2.4",
"ansi-regex": "^5.0.1",
"ansi-styles": "^5.0.0",
"react-is": "^17.0.1"
diff --git a/package.json b/package.json
index 2a0107df..4fa33cd0 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.2",
+ "eslint-plugin-jest": "^24.5.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.2",
+ "jest": "^27.2.4",
"jsdom": "^17.0.0",
"lodash": "^4.17.21",
"nyc": "^15.1.0",
@@ -114,8 +114,7 @@
],
"testPathIgnorePatterns": [
"/tests/electron/modules/mocks",
- "/tests/electron/global-setup.js",
- "/tests/electron/modules/basic-auth.js"
+ "/tests/electron/global-setup.js"
]
},
{
@@ -131,7 +130,8 @@
],
"testPathIgnorePatterns": [
"/tests/e2e/global-setup.js",
- "/tests/e2e/mock-console.js"
+ "/tests/e2e/mock-console.js",
+ "/tests/e2e/modules/basic-auth.js"
]
}
]
diff --git a/tests/configs/modules/calendar/auth-default.js b/tests/configs/modules/calendar/auth-default.js
index 8375bfcd..a120c7ca 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.
*/
-let config = require(process.cwd() + "/tests/configs/default.js").configFactory({
+let config = {
timeFormat: 12,
modules: [
@@ -24,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/calendar/basic-auth.js b/tests/configs/modules/calendar/basic-auth.js
index a1150281..ebca135a 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.
*/
-let config = require(process.cwd() + "/tests/configs/default.js").configFactory({
+let config = {
timeFormat: 12,
modules: [
@@ -25,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/calendar/changed-port.js b/tests/configs/modules/calendar/changed-port.js
index e43feafa..05d6d1ff 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.
*/
-let config = require(process.cwd() + "/tests/configs/default.js").configFactory({
+let config = {
timeFormat: 12,
modules: [
@@ -24,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/calendar/custom.js b/tests/configs/modules/calendar/custom.js
index 16f82ea0..068db9be 100644
--- a/tests/configs/modules/calendar/custom.js
+++ b/tests/configs/modules/calendar/custom.js
@@ -3,7 +3,7 @@
* By Rejas
* MIT Licensed.
*/
-let config = require(process.cwd() + "/tests/configs/default.js").configFactory({
+let config = {
timeFormat: 12,
modules: [
@@ -24,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/calendar/default.js b/tests/configs/modules/calendar/default.js
index 5964b294..0c9b8151 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.
*/
-let config = require(process.cwd() + "/tests/configs/default.js").configFactory({
+let config = {
timeFormat: 12,
modules: [
@@ -20,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/configs/modules/calendar/fail-basic-auth.js b/tests/configs/modules/calendar/fail-basic-auth.js
index 54d04064..1d2f8c76 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.
*/
-let config = require(process.cwd() + "/tests/configs/default.js").configFactory({
+let config = {
timeFormat: 12,
modules: [
@@ -27,7 +27,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/calendar/old-basic-auth.js b/tests/configs/modules/calendar/old-basic-auth.js
index 06570eb1..743ff04d 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.
*/
-let config = require(process.cwd() + "/tests/configs/default.js").configFactory({
+let config = {
timeFormat: 12,
modules: [
@@ -22,7 +22,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/calendar/recurring.js b/tests/configs/modules/calendar/recurring.js
index 879b966e..567a366c 100644
--- a/tests/configs/modules/calendar/recurring.js
+++ b/tests/configs/modules/calendar/recurring.js
@@ -3,7 +3,7 @@
* By Rejas
* MIT Licensed.
*/
-let config = require(process.cwd() + "/tests/configs/default.js").configFactory({
+let config = {
timeFormat: 12,
modules: [
@@ -21,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/e2e/mock-console.js b/tests/e2e/mock-console.js
index 90b70f12..454a8e46 100644
--- a/tests/e2e/mock-console.js
+++ b/tests/e2e/mock-console.js
@@ -4,7 +4,7 @@
* @param {string} err The error message.
*/
function mockError(err) {
- if (err.includes("ECONNREFUSED") || err.includes("ECONNRESET") || err.includes("socket hang up") || err.includes("exports is not defined")) {
+ if (err.includes("ECONNREFUSED") || err.includes("ECONNRESET") || err.includes("socket hang up") || err.includes("exports is not defined") || err.includes("write EPIPE")) {
jest.fn();
} else {
console.dir(err);
diff --git a/tests/electron/modules/basic-auth.js b/tests/e2e/modules/basic-auth.js
similarity index 100%
rename from tests/electron/modules/basic-auth.js
rename to tests/e2e/modules/basic-auth.js
diff --git a/tests/e2e/modules/calendar_spec.js b/tests/e2e/modules/calendar_spec.js
new file mode 100644
index 00000000..4ccd3e08
--- /dev/null
+++ b/tests/e2e/modules/calendar_spec.js
@@ -0,0 +1,139 @@
+const helpers = require("../global-setup");
+const serverBasicAuth = require("./basic-auth.js");
+
+describe("Calendar module", function () {
+ /**
+ * @param {string} element css selector
+ * @param {string} result expected number
+ * @param {string} not reverse result
+ */
+ function testElementLength(element, result, not) {
+ const elem = document.querySelectorAll(element);
+ expect(elem).not.toBe(null);
+ if (not === "not") {
+ expect(elem.length).not.toBe(result);
+ } else {
+ expect(elem.length).toBe(result);
+ }
+ }
+
+ afterAll(function () {
+ helpers.stopApplication();
+ });
+
+ describe("Default configuration", function () {
+ beforeAll(function (done) {
+ helpers.startApplication("tests/configs/modules/calendar/default.js");
+ helpers.getDocument(done, 3000);
+ });
+
+ it("should show the default maximumEntries of 10", () => {
+ testElementLength(".calendar .event", 10);
+ });
+
+ it("should show the default calendar symbol in each event", () => {
+ testElementLength(".calendar .event .fa-calendar", 0, "not");
+ });
+ });
+
+ describe("Custom configuration", function () {
+ beforeAll(function (done) {
+ helpers.startApplication("tests/configs/modules/calendar/custom.js");
+ helpers.getDocument(done, 3000);
+ });
+
+ it("should show the custom maximumEntries of 4", () => {
+ testElementLength(".calendar .event", 4);
+ });
+
+ it("should show the custom calendar symbol in each event", () => {
+ testElementLength(".calendar .event .fa-birthday-cake", 4);
+ });
+
+ it("should show two custom icons for repeating events", () => {
+ testElementLength(".calendar .event .fa-undo", 2);
+ });
+
+ it("should show two custom icons for day events", () => {
+ testElementLength(".calendar .event .fa-calendar-day", 2);
+ });
+ });
+
+ describe("Recurring event", function () {
+ beforeAll(function (done) {
+ helpers.startApplication("tests/configs/modules/calendar/recurring.js");
+ helpers.getDocument(done, 3000);
+ });
+
+ it("should show the recurring birthday event 6 times", () => {
+ testElementLength(".calendar .event", 6);
+ });
+ });
+
+ describe("Changed port", function () {
+ beforeAll(function (done) {
+ helpers.startApplication("tests/configs/modules/calendar/changed-port.js");
+ serverBasicAuth.listen(8010);
+ helpers.getDocument(done, 3000);
+ });
+
+ afterAll(function (done) {
+ serverBasicAuth.close(done());
+ });
+
+ it("should return TestEvents", function () {
+ testElementLength(".calendar .event", 0, "not");
+ });
+ });
+
+ describe("Basic auth", function () {
+ beforeAll(function (done) {
+ helpers.startApplication("tests/configs/modules/calendar/basic-auth.js");
+ helpers.getDocument(done, 3000);
+ });
+
+ it("should return TestEvents", function () {
+ testElementLength(".calendar .event", 0, "not");
+ });
+ });
+
+ describe("Basic auth by default", function () {
+ beforeAll(function (done) {
+ helpers.startApplication("tests/configs/modules/calendar/auth-default.js");
+ helpers.getDocument(done, 3000);
+ });
+
+ it("should return TestEvents", function () {
+ testElementLength(".calendar .event", 0, "not");
+ });
+ });
+
+ describe("Basic auth backward compatibility configuration: DEPRECATED", function () {
+ beforeAll(function (done) {
+ helpers.startApplication("tests/configs/modules/calendar/old-basic-auth.js");
+ helpers.getDocument(done, 3000);
+ });
+
+ it("should return TestEvents", function () {
+ testElementLength(".calendar .event", 0, "not");
+ });
+ });
+
+ describe("Fail Basic auth", function () {
+ beforeAll(function (done) {
+ helpers.startApplication("tests/configs/modules/calendar/fail-basic-auth.js");
+ serverBasicAuth.listen(8020);
+ helpers.getDocument(done, 3000);
+ });
+
+ afterAll(function (done) {
+ serverBasicAuth.close(done());
+ });
+
+ it("should show Unauthorized error", function () {
+ const elem = document.querySelector(".calendar");
+ expect(elem).not.toBe(null);
+ expect(elem.textContent).toContain("Error in the calendar module. Authorization failed");
+ });
+ });
+});
diff --git a/tests/electron/modules/calendar_spec.js b/tests/electron/modules/calendar_spec.js
deleted file mode 100644
index b6420e83..00000000
--- a/tests/electron/modules/calendar_spec.js
+++ /dev/null
@@ -1,150 +0,0 @@
-const helpers = require("../global-setup");
-const serverBasicAuth = require("./basic-auth.js");
-
-describe("Calendar 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/calendar/default.js";
- });
-
- it("should show the default maximumEntries of 10", async () => {
- await app.client.waitUntilTextExists(".calendar", "TestEvent", 10000);
- const events = await app.client.$$(".calendar .event");
- return expect(events.length).toBe(10);
- });
-
- it("should show the default calendar symbol in each event", async () => {
- await app.client.waitUntilTextExists(".calendar", "TestEvent", 10000);
- const icons = await app.client.$$(".calendar .event .fa-calendar");
- return expect(icons.length).not.toBe(0);
- });
- });
-
- describe("Custom configuration", function () {
- beforeAll(function () {
- // Set config sample for use in test
- process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/custom.js";
- });
-
- it("should show the custom maximumEntries of 4", async () => {
- await app.client.waitUntilTextExists(".calendar", "TestEvent", 10000);
- const events = await app.client.$$(".calendar .event");
- return expect(events.length).toBe(4);
- });
-
- it("should show the custom calendar symbol in each event", async () => {
- await app.client.waitUntilTextExists(".calendar", "TestEvent", 10000);
- const icons = await app.client.$$(".calendar .event .fa-birthday-cake");
- return expect(icons.length).toBe(4);
- });
-
- it("should show two custom icons for repeating events", async () => {
- await app.client.waitUntilTextExists(".calendar", "TestEventRepeat", 10000);
- const icons = await app.client.$$(".calendar .event .fa-undo");
- return expect(icons.length).toBe(2);
- });
-
- it("should show two custom icons for day events", async () => {
- await app.client.waitUntilTextExists(".calendar", "TestEventDay", 10000);
- const icons = await app.client.$$(".calendar .event .fa-calendar-day");
- return expect(icons.length).toBe(2);
- });
- });
-
- describe("Recurring event", function () {
- beforeAll(function () {
- // Set config sample for use in test
- process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/recurring.js";
- });
-
- it("should show the recurring birthday event 6 times", async () => {
- await app.client.waitUntilTextExists(".calendar", "Mar 25th", 10000);
- const events = await app.client.$$(".calendar .event");
- return expect(events.length).toBe(6);
- });
- });
-
- describe("Changed port", function () {
- beforeAll(function () {
- serverBasicAuth.listen(8010);
- // Set config sample for use in test
- process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/changed-port.js";
- });
-
- afterAll(function (done) {
- serverBasicAuth.close(done());
- });
-
- it("should return TestEvents", function () {
- return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000);
- });
- });
-
- describe("Basic auth", function () {
- beforeAll(function () {
- // Set config sample for use in test
- process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/basic-auth.js";
- });
-
- it("should return TestEvents", function () {
- return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000);
- });
- });
-
- describe("Basic auth by default", function () {
- beforeAll(function () {
- // Set config sample for use in test
- process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/auth-default.js";
- });
-
- it("should return TestEvents", function () {
- return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000);
- });
- });
-
- describe("Basic auth backward compatibility configuration: DEPRECATED", function () {
- beforeAll(function () {
- // Set config sample for use in test
- process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/old-basic-auth.js";
- });
-
- it("should return TestEvents", function () {
- return app.client.waitUntilTextExists(".calendar", "TestEvent", 10000);
- });
- });
-
- describe("Fail Basic auth", function () {
- beforeAll(function () {
- serverBasicAuth.listen(8020);
- // Set config sample for use in test
- process.env.MM_CONFIG_FILE = "tests/configs/modules/calendar/fail-basic-auth.js";
- });
-
- afterAll(function (done) {
- serverBasicAuth.close(done());
- });
-
- it("should show Unauthorized error", function () {
- return app.client.waitUntilTextExists(".calendar", "Error in the calendar module. Authorization failed", 10000);
- });
- });
-});
diff --git a/tests/unit/functions/__snapshots__/updatenotification_spec.js.snap b/tests/unit/functions/__snapshots__/updatenotification_spec.js.snap
new file mode 100644
index 00000000..c5dd59a1
--- /dev/null
+++ b/tests/unit/functions/__snapshots__/updatenotification_spec.js.snap
@@ -0,0 +1,34 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Updatenotification custom module returns status information without hash 1`] = `
+Object {
+ "behind": 7,
+ "current": "master",
+ "hash": "",
+ "isBehindInStatus": false,
+ "module": "MMM-Fuel",
+ "tracking": "origin/master",
+}
+`;
+
+exports[`Updatenotification default returns status information 1`] = `
+Object {
+ "behind": 5,
+ "current": "develop",
+ "hash": "332e429a41f1a2339afd4f0ae96dd125da6beada",
+ "isBehindInStatus": false,
+ "module": "default",
+ "tracking": "origin/develop",
+}
+`;
+
+exports[`Updatenotification default returns status information early if isBehindInStatus 1`] = `
+Object {
+ "behind": 5,
+ "current": "develop",
+ "hash": "332e429a41f1a2339afd4f0ae96dd125da6beada",
+ "isBehindInStatus": true,
+ "module": "default",
+ "tracking": "origin/develop",
+}
+`;
diff --git a/tests/unit/functions/updatenotification_spec.js b/tests/unit/functions/updatenotification_spec.js
index f6214c1a..f5c5f396 100644
--- a/tests/unit/functions/updatenotification_spec.js
+++ b/tests/unit/functions/updatenotification_spec.js
@@ -1,126 +1,139 @@
-const path = require("path");
-const git_Helper = require("../../../modules/default/updatenotification/git_helper.js");
-const gitHelper = new git_Helper.gitHelper();
-gitHelper.add("default");
+jest.mock("util", () => ({
+ ...jest.requireActual("util"),
+ promisify: jest.fn()
+}));
-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
- }
-};
+jest.mock("fs", () => ({
+ ...jest.requireActual("fs"),
+ statSync: jest.fn()
+}));
-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
- }
-};
+jest.mock("logger", () => ({
+ ...jest.requireActual("logger"),
+ error: jest.fn(),
+ info: jest.fn()
+}));
describe("Updatenotification", function () {
- it("should return valid output for git status", async function () {
- const arr = await gitHelper.getStatus();
- expect(arr.length).toBe(1);
- const gitInfo = arr[0];
- expect(gitInfo.current).not.toBe("");
- expect(gitInfo.hash).not.toBe("");
- }, 15000);
+ const execMock = jest.fn();
- 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);
+ let gitHelper;
+
+ let gitRemoteOut;
+ let gitRevParseOut;
+ let gitStatusOut;
+ let gitFetchOut;
+ let gitRevListOut;
+ let gitRemoteErr;
+ let gitRevParseErr;
+ let gitStatusErr;
+ let gitFetchErr;
+ let gitRevListErr;
+
+ beforeAll(async function () {
+ const { promisify } = require("util");
+ promisify.mockReturnValue(execMock);
+
+ const GitHelper = require(`../../../modules/default/updatenotification/git_helper`);
+ gitHelper = new GitHelper();
});
- 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);
+ beforeEach(function () {
+ gitRemoteOut = "";
+ gitRevParseOut = "";
+ gitStatusOut = "";
+ gitFetchOut = "";
+ gitRevListOut = "";
+ gitRemoteErr = "";
+ gitRevParseErr = "";
+ gitStatusErr = "";
+ gitFetchErr = "";
+ gitRevListErr = "";
+
+ execMock.mockImplementation(function (command) {
+ if (command.includes("git remote -v")) {
+ return { stdout: gitRemoteOut, stderr: gitRemoteErr };
+ } else if (command.includes("git rev-parse HEAD")) {
+ return { stdout: gitRevParseOut, stderr: gitRevParseErr };
+ } else if (command.includes("git status -sb")) {
+ return { stdout: gitStatusOut, stderr: gitStatusErr };
+ } else if (command.includes("git fetch --dry-run")) {
+ return { stdout: gitFetchOut, stderr: gitFetchErr };
+ } else if (command.includes("git rev-list --ancestry-path --count")) {
+ return { stdout: gitRevListOut, stderr: gitRevListErr };
+ }
+ });
});
- it("should return empty status object for test3", async function () {
- const gitInfo = await gitHelper.getStatusInfo(test3);
- expect(gitInfo).toBe(undefined);
+ afterEach(async function () {
+ gitHelper.gitRepos = [];
+
+ jest.clearAllMocks();
});
- 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);
+ describe("default", () => {
+ const moduleName = "default";
+
+ beforeEach(async function () {
+ gitRemoteOut = "origin\tgit@github.com:MichMich/MagicMirror.git (fetch)\norigin\tgit@github.com:MichMich/MagicMirror.git (push)\n";
+ gitRevParseOut = "332e429a41f1a2339afd4f0ae96dd125da6beada";
+ gitStatusOut = "## develop...origin/develop\n M tests/unit/functions/updatenotification_spec.js\n";
+ gitFetchErr = "From github.com:MichMich/MagicMirror\n60e0377..332e429 develop -> origin/develop\n";
+ gitRevListOut = "5";
+
+ await gitHelper.add(moduleName);
+ });
+
+ it("returns status information", async function () {
+ const repos = await gitHelper.getRepos();
+ expect(repos[0]).toMatchSnapshot();
+ expect(execMock).toHaveBeenCalledTimes(5);
+ });
+
+ it("returns status information early if isBehindInStatus", async function () {
+ gitStatusOut = "## develop...origin/develop [behind 5]";
+
+ const repos = await gitHelper.getRepos();
+ expect(repos[0]).toMatchSnapshot();
+ expect(execMock).toHaveBeenCalledTimes(3);
+ });
+
+ it("excludes repo if status can't be retrieved", async function () {
+ const errorMessage = "Failed to retrieve status";
+ execMock.mockRejectedValueOnce(errorMessage);
+
+ const repos = await gitHelper.getRepos();
+ expect(repos.length).toBe(0);
+
+ const { error } = require("logger");
+ expect(error).toHaveBeenCalledWith(`Failed to retrieve repo info for ${moduleName}: Failed to retrieve status`);
+ });
+
+ it("excludes repo if refs don't match regex", async function () {
+ gitFetchErr = "";
+
+ const repos = await gitHelper.getRepos();
+ expect(repos.length).toBe(0);
+ });
});
- 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);
- });
+ describe("custom module", () => {
+ const moduleName = "MMM-Fuel";
- 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);
- });
+ beforeEach(async function () {
+ gitRemoteOut = `origin\thttps://github.com/fewieden/${moduleName}.git (fetch)\norigin\thttps://github.com/fewieden/${moduleName}.git (push)\n`;
+ gitRevParseOut = "9d8310163da94441073a93cead711ba43e8888d0";
+ gitStatusOut = "## master...origin/master";
+ gitFetchErr = `From https://github.com/fewieden/${moduleName}\n19f7faf..9d83101 master -> origin/master`;
+ gitRevListOut = "7";
- it("should return behind=2 for test3", async function () {
- const gitInfo = await gitHelper.getRepoInfo(test3);
- expect(gitInfo.behind).toBe(2);
+ await gitHelper.add(moduleName);
+ });
+
+ it("returns status information without hash", async function () {
+ const repos = await gitHelper.getRepos();
+ expect(repos[0]).toMatchSnapshot();
+ expect(execMock).toHaveBeenCalledTimes(4);
+ });
});
});