From ae4de9589eb28897aca6b1c4bd714a94d3c86978 Mon Sep 17 00:00:00 2001
From: Weslley Campos <30299972+weslley543@users.noreply.github.com>
Date: Wed, 27 Jul 2022 23:00:54 -0300
Subject: [PATCH] Chore: add playwright ee coverage (#26293)

Co-authored-by: souzaramon <25514401+souzaramon@users.noreply.github.com>
Co-authored-by: Kevin Aleman <11577696+KevLehman@users.noreply.github.com>
Co-authored-by: Guilherme Gazzo <5263975+ggazzo@users.noreply.github.com>
Co-authored-by: Murtaza Patrawala <34130764+murtaza98@users.noreply.github.com>
Co-authored-by: Rodrigo Nascimento <234261+rodrigok@users.noreply.github.com>
---
 .github/workflows/build_and_test.yml          |  22 +-
 apps/meteor/.babelrc                          |   3 +
 apps/meteor/package.json                      |   3 +
 .../tests/e2e/01-forgot-password.spec.ts      |   3 +-
 apps/meteor/tests/e2e/02-register.spec.ts     |   2 +-
 apps/meteor/tests/e2e/03-login.spec.ts        |   2 +-
 .../tests/e2e/05-channel-creation.spec.ts     |   2 +-
 apps/meteor/tests/e2e/06-messaging.spec.ts    |   3 +-
 apps/meteor/tests/e2e/07-emoji.spec.ts        |   3 +-
 apps/meteor/tests/e2e/09-channel.spec.ts      |   3 +-
 .../tests/e2e/10-user-preferences.spec.ts     |   2 +-
 apps/meteor/tests/e2e/11-admin.spec.ts        |   3 +-
 apps/meteor/tests/e2e/12-settings.spec.ts     |   3 +-
 apps/meteor/tests/e2e/13-permissions.spec.ts  |   2 +-
 .../tests/e2e/14-setting-permissions.spec.ts  |   4 +-
 .../meteor/tests/e2e/15-message-popup.spec.ts |   3 +-
 apps/meteor/tests/e2e/16-discussion.spec.ts   |   2 +-
 .../tests/e2e/omnichannel-agents.spec.ts      |   3 +-
 .../e2e/omnichannel-departaments.spec.ts      |   3 +-
 .../tests/e2e/page-objects/administration.ts  |   3 +-
 .../tests/e2e/page-objects/home-discussion.ts |   3 +-
 .../e2e/page-objects/omnichannel-agents.ts    |   4 +-
 apps/meteor/tests/e2e/utils/test.ts           |  41 +++
 yarn.lock                                     | 250 +++++++++++++++++-
 24 files changed, 341 insertions(+), 31 deletions(-)
 create mode 100644 apps/meteor/tests/e2e/utils/test.ts

diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml
index 335cf9a25ee..c6de51e6210 100644
--- a/.github/workflows/build_and_test.yml
+++ b/.github/workflows/build_and_test.yml
@@ -681,13 +681,31 @@ jobs:
           docker logs presence --tail=50
 
           cd ./apps/meteor
-          IS_EE=true npm run test:e2e
+
+          E2E_COVERAGE=true IS_EE=true npm run test:e2e
+
+      - name: Extract e2e:ee:coverage
+        run: |
+          cd ./apps/meteor
+          yarn test:e2e:nyc
+
+      - uses: codecov/codecov-action@v3
+        with:
+          directory: ./apps/meteor
+          flags: e2e
+          verbose: true
+
+      - name: Store e2e-ee-coverage
+        uses: actions/upload-artifact@v2
+        with:
+          name: e2e-ee-coverage
+          path: ./apps/meteor/coverage*
 
       - name: Store playwright test trace
         uses: actions/upload-artifact@v2
         if: failure()
         with:
-          name: playwright-test-trace
+          name: e2e-ee-testtrace
           path: ./apps/meteor/tests/e2e/test-failures*
 
   deploy:
diff --git a/apps/meteor/.babelrc b/apps/meteor/.babelrc
index b9359fe771b..a8c20b400ca 100644
--- a/apps/meteor/.babelrc
+++ b/apps/meteor/.babelrc
@@ -2,5 +2,8 @@
 	"presets": [
 		"@babel/preset-env",
 		"@babel/preset-react"
+	],
+	"plugins": [
+		"babel-plugin-istanbul"
 	]
 }
diff --git a/apps/meteor/package.json b/apps/meteor/package.json
index c214041a5d9..d41ec6c6f62 100644
--- a/apps/meteor/package.json
+++ b/apps/meteor/package.json
@@ -33,6 +33,7 @@
 		"deploy": "npm run build && pm2 startOrRestart pm2.json",
 		"coverage": "nyc -r html mocha --config ./.mocharc.js",
 		"test:e2e": "playwright test",
+		"test:e2e:nyc": "nyc report --reporter=text-summary --reporter=lcov",
 		"testapi": "mocha --config ./.mocharc.api.js",
 		"testunit": "npm run .testunit:definition && npm run .testunit:client && npm run .testunit:server",
 		".testunit:server": "mocha --config ./.mocharc.js",
@@ -141,6 +142,7 @@
 		"autoprefixer": "^9.8.8",
 		"babel-loader": "^8.2.5",
 		"babel-plugin-array-includes": "^2.0.3",
+		"babel-plugin-istanbul": "^6.1.1",
 		"chai": "^4.3.6",
 		"chai-datetime": "^1.8.0",
 		"chai-dom": "^1.11.0",
@@ -159,6 +161,7 @@
 		"jsdom-global": "^3.0.2",
 		"mocha": "^9.2.2",
 		"mock-require": "^3.0.3",
+		"nyc": "^15.1.0",
 		"outdent": "~0.8.0",
 		"pino-pretty": "^7.6.1",
 		"postcss": "~8.4.14",
diff --git a/apps/meteor/tests/e2e/01-forgot-password.spec.ts b/apps/meteor/tests/e2e/01-forgot-password.spec.ts
index 6cc07166180..bee803b1d5e 100644
--- a/apps/meteor/tests/e2e/01-forgot-password.spec.ts
+++ b/apps/meteor/tests/e2e/01-forgot-password.spec.ts
@@ -1,5 +1,4 @@
-import { test, expect } from '@playwright/test';
-
+import { test, expect } from './utils/test';
 import { Auth } from './page-objects';
 
 test.describe('Forgot Password', () => {
diff --git a/apps/meteor/tests/e2e/02-register.spec.ts b/apps/meteor/tests/e2e/02-register.spec.ts
index a46399d7e5b..06e5d8db7c0 100644
--- a/apps/meteor/tests/e2e/02-register.spec.ts
+++ b/apps/meteor/tests/e2e/02-register.spec.ts
@@ -1,6 +1,6 @@
-import { test, expect } from '@playwright/test';
 import { faker } from '@faker-js/faker';
 
+import { test, expect } from './utils/test';
 import { Auth } from './page-objects';
 
 test.describe('Register', () => {
diff --git a/apps/meteor/tests/e2e/03-login.spec.ts b/apps/meteor/tests/e2e/03-login.spec.ts
index b9b686c87e8..298b9e1fbdb 100644
--- a/apps/meteor/tests/e2e/03-login.spec.ts
+++ b/apps/meteor/tests/e2e/03-login.spec.ts
@@ -1,6 +1,6 @@
-import { test, expect } from '@playwright/test';
 import { faker } from '@faker-js/faker';
 
+import { test, expect } from './utils/test';
 import { Auth } from './page-objects';
 
 test.describe('Login', () => {
diff --git a/apps/meteor/tests/e2e/05-channel-creation.spec.ts b/apps/meteor/tests/e2e/05-channel-creation.spec.ts
index b56616f0db1..075c6a2020b 100644
--- a/apps/meteor/tests/e2e/05-channel-creation.spec.ts
+++ b/apps/meteor/tests/e2e/05-channel-creation.spec.ts
@@ -1,6 +1,6 @@
-import { test, expect } from '@playwright/test';
 import { faker } from '@faker-js/faker';
 
+import { test, expect } from './utils/test';
 import { HomeChannel, Auth } from './page-objects';
 
 test.describe('Channel Creation', () => {
diff --git a/apps/meteor/tests/e2e/06-messaging.spec.ts b/apps/meteor/tests/e2e/06-messaging.spec.ts
index 7fc307b5291..6cc135e2178 100644
--- a/apps/meteor/tests/e2e/06-messaging.spec.ts
+++ b/apps/meteor/tests/e2e/06-messaging.spec.ts
@@ -1,5 +1,6 @@
-import { expect, test, Browser, Page } from '@playwright/test';
+import { Browser, Page } from '@playwright/test';
 
+import { test, expect } from './utils/test';
 import { validUserInserted } from './utils/mocks/userAndPasswordMock';
 import { Auth, HomeChannel } from './page-objects';
 
diff --git a/apps/meteor/tests/e2e/07-emoji.spec.ts b/apps/meteor/tests/e2e/07-emoji.spec.ts
index 1ea5c1e5fe5..0281c4562af 100644
--- a/apps/meteor/tests/e2e/07-emoji.spec.ts
+++ b/apps/meteor/tests/e2e/07-emoji.spec.ts
@@ -1,5 +1,4 @@
-import { test, expect } from '@playwright/test';
-
+import { test, expect } from './utils/test';
 import { Auth, HomeChannel } from './page-objects';
 
 test.describe('Emoji', () => {
diff --git a/apps/meteor/tests/e2e/09-channel.spec.ts b/apps/meteor/tests/e2e/09-channel.spec.ts
index 009fd71b25e..fb983cbae07 100644
--- a/apps/meteor/tests/e2e/09-channel.spec.ts
+++ b/apps/meteor/tests/e2e/09-channel.spec.ts
@@ -1,5 +1,4 @@
-import { test, expect } from '@playwright/test';
-
+import { test, expect } from './utils/test';
 import { publicChannelCreated, setPublicChannelCreated } from './utils/mocks/checks';
 import { Auth, HomeChannel } from './page-objects';
 
diff --git a/apps/meteor/tests/e2e/10-user-preferences.spec.ts b/apps/meteor/tests/e2e/10-user-preferences.spec.ts
index ea93752a042..ee267802566 100644
--- a/apps/meteor/tests/e2e/10-user-preferences.spec.ts
+++ b/apps/meteor/tests/e2e/10-user-preferences.spec.ts
@@ -1,6 +1,6 @@
-import { test, expect } from '@playwright/test';
 import { faker } from '@faker-js/faker';
 
+import { test, expect } from './utils/test';
 import { Auth, HomeChannel, AccountProfile } from './page-objects';
 
 test.describe('User preferences', () => {
diff --git a/apps/meteor/tests/e2e/11-admin.spec.ts b/apps/meteor/tests/e2e/11-admin.spec.ts
index f9bff836e22..a80e0d627a8 100644
--- a/apps/meteor/tests/e2e/11-admin.spec.ts
+++ b/apps/meteor/tests/e2e/11-admin.spec.ts
@@ -1,5 +1,4 @@
-import { test, expect } from '@playwright/test';
-
+import { test, expect } from './utils/test';
 import { Auth, Administration } from './page-objects';
 
 test.describe('Administration', () => {
diff --git a/apps/meteor/tests/e2e/12-settings.spec.ts b/apps/meteor/tests/e2e/12-settings.spec.ts
index e8a3f5fa30a..cc7512b22eb 100644
--- a/apps/meteor/tests/e2e/12-settings.spec.ts
+++ b/apps/meteor/tests/e2e/12-settings.spec.ts
@@ -1,6 +1,7 @@
-import { test, expect, Page } from '@playwright/test';
+import { Page } from '@playwright/test';
 import { v4 as uuid } from 'uuid';
 
+import { test, expect } from './utils/test';
 import { BASE_API_URL } from './utils/constants';
 import { adminLogin, validUserInserted, registerUser } from './utils/mocks/userAndPasswordMock';
 import { Auth, HomeChannel, AccountProfile, Administration } from './page-objects';
diff --git a/apps/meteor/tests/e2e/13-permissions.spec.ts b/apps/meteor/tests/e2e/13-permissions.spec.ts
index 90722bf51a0..d9448514eb6 100644
--- a/apps/meteor/tests/e2e/13-permissions.spec.ts
+++ b/apps/meteor/tests/e2e/13-permissions.spec.ts
@@ -1,7 +1,7 @@
-import { test, expect } from '@playwright/test';
 import { v4 as uuid } from 'uuid';
 import faker from '@faker-js/faker';
 
+import { test, expect } from './utils/test';
 import { Auth, Administration, HomeChannel } from './page-objects';
 
 test.describe('Permissions', () => {
diff --git a/apps/meteor/tests/e2e/14-setting-permissions.spec.ts b/apps/meteor/tests/e2e/14-setting-permissions.spec.ts
index a0681424caf..e8324267756 100644
--- a/apps/meteor/tests/e2e/14-setting-permissions.spec.ts
+++ b/apps/meteor/tests/e2e/14-setting-permissions.spec.ts
@@ -1,8 +1,8 @@
-import { test, expect } from '@playwright/test';
 import faker from '@faker-js/faker';
 
-import { validUserInserted } from './utils/mocks/userAndPasswordMock';
+import { test, expect } from './utils/test';
 import { Auth, Administration, HomeChannel } from './page-objects';
+import { validUserInserted } from './utils/mocks/userAndPasswordMock';
 
 test.describe('Settings Permissions', () => {
 	let pageAuth: Auth;
diff --git a/apps/meteor/tests/e2e/15-message-popup.spec.ts b/apps/meteor/tests/e2e/15-message-popup.spec.ts
index 4a874fb62a4..0b41d23eecf 100644
--- a/apps/meteor/tests/e2e/15-message-popup.spec.ts
+++ b/apps/meteor/tests/e2e/15-message-popup.spec.ts
@@ -1,5 +1,4 @@
-import { test, expect } from '@playwright/test';
-
+import { test, expect } from './utils/test';
 import { Auth, HomeChannel } from './page-objects';
 
 test.describe('Message Popup', () => {
diff --git a/apps/meteor/tests/e2e/16-discussion.spec.ts b/apps/meteor/tests/e2e/16-discussion.spec.ts
index 3df9254963d..4a2668a58d8 100644
--- a/apps/meteor/tests/e2e/16-discussion.spec.ts
+++ b/apps/meteor/tests/e2e/16-discussion.spec.ts
@@ -1,7 +1,7 @@
-import { test } from '@playwright/test';
 import { faker } from '@faker-js/faker';
 import { v4 as uuid } from 'uuid';
 
+import { test } from './utils/test';
 import { Auth, HomeDiscussion } from './page-objects';
 
 test.describe('[Discussion]', () => {
diff --git a/apps/meteor/tests/e2e/omnichannel-agents.spec.ts b/apps/meteor/tests/e2e/omnichannel-agents.spec.ts
index 8421a185507..73b7c3a979c 100644
--- a/apps/meteor/tests/e2e/omnichannel-agents.spec.ts
+++ b/apps/meteor/tests/e2e/omnichannel-agents.spec.ts
@@ -1,5 +1,4 @@
-import { test, expect } from '@playwright/test';
-
+import { test, expect } from './utils/test';
 import { Auth, OmnichannelAgents } from './page-objects';
 
 test.describe('Agents', () => {
diff --git a/apps/meteor/tests/e2e/omnichannel-departaments.spec.ts b/apps/meteor/tests/e2e/omnichannel-departaments.spec.ts
index 67cb2c09ea6..722822884ff 100644
--- a/apps/meteor/tests/e2e/omnichannel-departaments.spec.ts
+++ b/apps/meteor/tests/e2e/omnichannel-departaments.spec.ts
@@ -1,5 +1,4 @@
-import { test, expect } from '@playwright/test';
-
+import { test, expect } from './utils/test';
 import { Auth, OmnichannelDepartaments } from './page-objects';
 
 test.describe('Department', () => {
diff --git a/apps/meteor/tests/e2e/page-objects/administration.ts b/apps/meteor/tests/e2e/page-objects/administration.ts
index 541f1fcf281..73d9605cc53 100644
--- a/apps/meteor/tests/e2e/page-objects/administration.ts
+++ b/apps/meteor/tests/e2e/page-objects/administration.ts
@@ -1,5 +1,6 @@
-import { Locator, expect, Page } from '@playwright/test';
+import { Locator, Page } from '@playwright/test';
 
+import { expect } from '../utils/test';
 import { AdminFlextab, AdminSidenav } from './fragments';
 
 export class Administration {
diff --git a/apps/meteor/tests/e2e/page-objects/home-discussion.ts b/apps/meteor/tests/e2e/page-objects/home-discussion.ts
index 11d3a9cde2f..9e3b90bc87e 100644
--- a/apps/meteor/tests/e2e/page-objects/home-discussion.ts
+++ b/apps/meteor/tests/e2e/page-objects/home-discussion.ts
@@ -1,5 +1,6 @@
-import { Locator, Page, expect } from '@playwright/test';
+import { Locator, Page } from '@playwright/test';
 
+import { expect } from '../utils/test';
 import { HomeContent, HomeSidenav, HomeFlextab } from './fragments';
 
 export class HomeDiscussion {
diff --git a/apps/meteor/tests/e2e/page-objects/omnichannel-agents.ts b/apps/meteor/tests/e2e/page-objects/omnichannel-agents.ts
index 9026b2e6bd8..06c6031cd75 100644
--- a/apps/meteor/tests/e2e/page-objects/omnichannel-agents.ts
+++ b/apps/meteor/tests/e2e/page-objects/omnichannel-agents.ts
@@ -1,4 +1,6 @@
-import { Locator, expect, Page } from '@playwright/test';
+import { Locator, Page } from '@playwright/test';
+
+import { expect } from '../utils/test';
 
 export class OmnichannelAgents {
 	private readonly page: Page;
diff --git a/apps/meteor/tests/e2e/utils/test.ts b/apps/meteor/tests/e2e/utils/test.ts
new file mode 100644
index 00000000000..8809ce92599
--- /dev/null
+++ b/apps/meteor/tests/e2e/utils/test.ts
@@ -0,0 +1,41 @@
+import * as fs from 'fs';
+import * as path from 'path';
+
+import { v4 as uuid } from 'uuid';
+import { test as baseTest } from '@playwright/test';
+
+const PATH_NYC_OUTPUT = path.join(process.cwd(), '.nyc_output');
+// @ts-ignore
+export const test = baseTest.extend({
+	context: async ({ context }, use) => {
+		if (!process.env.E2E_COVERAGE) {
+			await use(context);
+			await context.close();
+
+			return;
+		}
+
+		await context.addInitScript(() =>
+			window.addEventListener('beforeunload', () => (window as any).collectIstanbulCoverage(JSON.stringify((window as any).__coverage__))),
+		);
+
+		await fs.promises.mkdir(PATH_NYC_OUTPUT, { recursive: true });
+
+		await context.exposeFunction('collectIstanbulCoverage', (coverageJSON: string) => {
+			if (coverageJSON) {
+				fs.writeFileSync(path.join(PATH_NYC_OUTPUT, `playwright_coverage_${uuid()}.json`), coverageJSON);
+			}
+		});
+
+		await use(context);
+
+		await Promise.all(
+			context.pages().map(async (page) => {
+				await page.evaluate(() => (window as any).collectIstanbulCoverage(JSON.stringify((window as any).__coverage__)));
+				await page.close();
+			}),
+		);
+	},
+});
+
+export const { expect } = test;
diff --git a/yarn.lock b/yarn.lock
index ae1b441ea51..04fe6bb2c94 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4448,6 +4448,7 @@ __metadata:
     aws-sdk: ^2.1160.0
     babel-loader: ^8.2.5
     babel-plugin-array-includes: ^2.0.3
+    babel-plugin-istanbul: ^6.1.1
     bad-words: ^3.0.4
     bcrypt: ^5.0.1
     body-parser: 1.20.0
@@ -4547,6 +4548,7 @@ __metadata:
     node-gcm: 1.0.5
     node-rsa: ^1.1.1
     nodemailer: ^6.7.5
+    nyc: ^15.1.0
     object-path: ^0.11.8
     outdent: ~0.8.0
     path: ^0.12.7
@@ -8562,6 +8564,15 @@ __metadata:
   languageName: node
   linkType: hard
 
+"append-transform@npm:^2.0.0":
+  version: 2.0.0
+  resolution: "append-transform@npm:2.0.0"
+  dependencies:
+    default-require-extensions: ^3.0.0
+  checksum: f26f393bf7a428fd1bb18f2758a819830a582243310c5170edb3f98fdc5a535333d02b952f7c2d9b14522bd8ead5b132a0b15000eca18fa9f49172963ebbc231
+  languageName: node
+  linkType: hard
+
 "application-config-path@npm:^0.1.0":
   version: 0.1.0
   resolution: "application-config-path@npm:0.1.0"
@@ -8642,6 +8653,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"archy@npm:^1.0.0":
+  version: 1.0.0
+  resolution: "archy@npm:1.0.0"
+  checksum: 504ae7af655130bab9f471343cfdb054feaec7d8e300e13348bc9fe9e660f83d422e473069584f73233c701ae37d1c8452ff2522f2a20c38849e0f406f1732ac
+  languageName: node
+  linkType: hard
+
 "are-we-there-yet@npm:^2.0.0":
   version: 2.0.0
   resolution: "are-we-there-yet@npm:2.0.0"
@@ -10412,6 +10430,18 @@ __metadata:
   languageName: node
   linkType: hard
 
+"caching-transform@npm:^4.0.0":
+  version: 4.0.0
+  resolution: "caching-transform@npm:4.0.0"
+  dependencies:
+    hasha: ^5.0.0
+    make-dir: ^3.0.0
+    package-hash: ^4.0.0
+    write-file-atomic: ^3.0.0
+  checksum: c4db6939533b677866808de67c32f0aaf8bf4fd3e3b8dc957e5d630c007c06b7f11512d44c38a38287fb068e931067e8da9019c34d787259a44121c9a6b87a1f
+  languageName: node
+  linkType: hard
+
 "call-bind@npm:^1.0.0, call-bind@npm:^1.0.2":
   version: 1.0.2
   resolution: "call-bind@npm:1.0.2"
@@ -11080,6 +11110,17 @@ __metadata:
   languageName: node
   linkType: hard
 
+"cliui@npm:^6.0.0":
+  version: 6.0.0
+  resolution: "cliui@npm:6.0.0"
+  dependencies:
+    string-width: ^4.2.0
+    strip-ansi: ^6.0.0
+    wrap-ansi: ^6.2.0
+  checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42
+  languageName: node
+  linkType: hard
+
 "cliui@npm:^7.0.2":
   version: 7.0.4
   resolution: "cliui@npm:7.0.4"
@@ -12848,6 +12889,15 @@ __metadata:
   languageName: node
   linkType: hard
 
+"default-require-extensions@npm:^3.0.0":
+  version: 3.0.0
+  resolution: "default-require-extensions@npm:3.0.0"
+  dependencies:
+    strip-bom: ^4.0.0
+  checksum: 0b5bdb6786ebb0ff6ef55386f37c8d221963fbbd3009588fe71032c85ca16da05eff2ad01bfe9bfc8bac5ce95a18f66b38c50d454482e3e9d2de1142424a3e7c
+  languageName: node
+  linkType: hard
+
 "define-lazy-prop@npm:^2.0.0":
   version: 2.0.0
   resolution: "define-lazy-prop@npm:2.0.0"
@@ -13882,6 +13932,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"es6-error@npm:^4.0.1":
+  version: 4.1.1
+  resolution: "es6-error@npm:4.1.1"
+  checksum: ae41332a51ec1323da6bbc5d75b7803ccdeddfae17c41b6166ebbafc8e8beb7a7b80b884b7fab1cc80df485860ac3c59d78605e860bb4f8cd816b3d6ade0d010
+  languageName: node
+  linkType: hard
+
 "es6-object-assign@npm:^1.1.0":
   version: 1.1.0
   resolution: "es6-object-assign@npm:1.1.0"
@@ -15241,7 +15298,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"find-cache-dir@npm:^3.3.1, find-cache-dir@npm:^3.3.2":
+"find-cache-dir@npm:^3.2.0, find-cache-dir@npm:^3.3.1, find-cache-dir@npm:^3.3.2":
   version: 3.3.2
   resolution: "find-cache-dir@npm:3.3.2"
   dependencies:
@@ -15600,6 +15657,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"fromentries@npm:^1.2.0":
+  version: 1.3.2
+  resolution: "fromentries@npm:1.3.2"
+  checksum: 33729c529ce19f5494f846f0dd4945078f4e37f4e8955f4ae8cc7385c218f600e9d93a7d225d17636c20d1889106fd87061f911550861b7072f53bf891e6b341
+  languageName: node
+  linkType: hard
+
 "fs-constants@npm:^1.0.0":
   version: 1.0.0
   resolution: "fs-constants@npm:1.0.0"
@@ -16831,6 +16895,16 @@ __metadata:
   languageName: node
   linkType: hard
 
+"hasha@npm:^5.0.0":
+  version: 5.2.2
+  resolution: "hasha@npm:5.2.2"
+  dependencies:
+    is-stream: ^2.0.0
+    type-fest: ^0.8.0
+  checksum: 06cc474bed246761ff61c19d629977eb5f53fa817be4313a255a64ae0f433e831a29e83acb6555e3f4592b348497596f1d1653751008dda4f21c9c21ca60ac5a
+  languageName: node
+  linkType: hard
+
 "hast-to-hyperscript@npm:^9.0.0":
   version: 9.0.1
   resolution: "hast-to-hyperscript@npm:9.0.1"
@@ -18952,6 +19026,27 @@ __metadata:
   languageName: node
   linkType: hard
 
+"istanbul-lib-hook@npm:^3.0.0":
+  version: 3.0.0
+  resolution: "istanbul-lib-hook@npm:3.0.0"
+  dependencies:
+    append-transform: ^2.0.0
+  checksum: ac4d0a0751e959cfe4c95d817df5f1f573f9b0cf892552e60d81785654291391fac1ceb667f13bb17fcc2ef23b74c89ed8cf1c6148c833c8596a2b920b079101
+  languageName: node
+  linkType: hard
+
+"istanbul-lib-instrument@npm:^4.0.0":
+  version: 4.0.3
+  resolution: "istanbul-lib-instrument@npm:4.0.3"
+  dependencies:
+    "@babel/core": ^7.7.5
+    "@istanbuljs/schema": ^0.1.2
+    istanbul-lib-coverage: ^3.0.0
+    semver: ^6.3.0
+  checksum: fa1171d3022b1bb8f6a734042620ac5d9ee7dc80f3065a0bb12863e9f0494d0eefa3d86608fcc0254ab2765d29d7dad8bdc42e5f8df2f9a1fbe85ccc59d76cb9
+  languageName: node
+  linkType: hard
+
 "istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0":
   version: 5.1.0
   resolution: "istanbul-lib-instrument@npm:5.1.0"
@@ -18965,6 +19060,20 @@ __metadata:
   languageName: node
   linkType: hard
 
+"istanbul-lib-processinfo@npm:^2.0.2":
+  version: 2.0.3
+  resolution: "istanbul-lib-processinfo@npm:2.0.3"
+  dependencies:
+    archy: ^1.0.0
+    cross-spawn: ^7.0.3
+    istanbul-lib-coverage: ^3.2.0
+    p-map: ^3.0.0
+    rimraf: ^3.0.0
+    uuid: ^8.3.2
+  checksum: 501729e809a4e98bbb9f62f89cae924be81655a7ff8118661f8834a10bb89ed5d3a5099ea0b6555e1a8ee15a0099cb64f7170b89aae155ab2afacfe8dd94421a
+  languageName: node
+  linkType: hard
+
 "istanbul-lib-report@npm:^3.0.0":
   version: 3.0.0
   resolution: "istanbul-lib-report@npm:3.0.0"
@@ -20588,6 +20697,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"lodash.flattendeep@npm:^4.4.0":
+  version: 4.4.0
+  resolution: "lodash.flattendeep@npm:4.4.0"
+  checksum: 8521c919acac3d4bcf0aaf040c1ca9cb35d6c617e2d72e9b4d51c9a58b4366622cd6077441a18be626c3f7b28227502b3bf042903d447b056ee7e0b11d45c722
+  languageName: node
+  linkType: hard
+
 "lodash.get@npm:^4.4.2":
   version: 4.4.2
   resolution: "lodash.get@npm:4.4.2"
@@ -22723,6 +22839,15 @@ __metadata:
   languageName: node
   linkType: hard
 
+"node-preload@npm:^0.2.1":
+  version: 0.2.1
+  resolution: "node-preload@npm:0.2.1"
+  dependencies:
+    process-on-spawn: ^1.0.0
+  checksum: 4586f91ac7417b33accce0ac629fb60f642d0c8d212b3c536dc3dda37fe54f8a3b858273380e1036e41a65d85470332c358315d2288e6584260d620fb4b00fb3
+  languageName: node
+  linkType: hard
+
 "node-releases@npm:^2.0.5":
   version: 2.0.5
   resolution: "node-releases@npm:2.0.5"
@@ -23036,6 +23161,43 @@ __metadata:
   languageName: node
   linkType: hard
 
+"nyc@npm:^15.1.0":
+  version: 15.1.0
+  resolution: "nyc@npm:15.1.0"
+  dependencies:
+    "@istanbuljs/load-nyc-config": ^1.0.0
+    "@istanbuljs/schema": ^0.1.2
+    caching-transform: ^4.0.0
+    convert-source-map: ^1.7.0
+    decamelize: ^1.2.0
+    find-cache-dir: ^3.2.0
+    find-up: ^4.1.0
+    foreground-child: ^2.0.0
+    get-package-type: ^0.1.0
+    glob: ^7.1.6
+    istanbul-lib-coverage: ^3.0.0
+    istanbul-lib-hook: ^3.0.0
+    istanbul-lib-instrument: ^4.0.0
+    istanbul-lib-processinfo: ^2.0.2
+    istanbul-lib-report: ^3.0.0
+    istanbul-lib-source-maps: ^4.0.0
+    istanbul-reports: ^3.0.2
+    make-dir: ^3.0.0
+    node-preload: ^0.2.1
+    p-map: ^3.0.0
+    process-on-spawn: ^1.0.0
+    resolve-from: ^5.0.0
+    rimraf: ^3.0.0
+    signal-exit: ^3.0.2
+    spawn-wrap: ^2.0.0
+    test-exclude: ^6.0.0
+    yargs: ^15.0.2
+  bin:
+    nyc: bin/nyc.js
+  checksum: 82a7031982df2fd6ab185c9f1b5d032b6221846268007b45b5773c6582e776ab33e96cd22b4231520345942fcef69b4339bd967675b8483f3fa255b56326faef
+  languageName: node
+  linkType: hard
+
 "oauth-sign@npm:~0.9.0":
   version: 0.9.0
   resolution: "oauth-sign@npm:0.9.0"
@@ -23750,6 +23912,18 @@ __metadata:
   languageName: node
   linkType: hard
 
+"package-hash@npm:^4.0.0":
+  version: 4.0.0
+  resolution: "package-hash@npm:4.0.0"
+  dependencies:
+    graceful-fs: ^4.1.15
+    hasha: ^5.0.0
+    lodash.flattendeep: ^4.4.0
+    release-zalgo: ^1.0.0
+  checksum: 32c49e3a0e1c4a33b086a04cdd6d6e570aee019cb8402ec16476d9b3564a40e38f91ce1a1f9bc88b08f8ef2917a11e0b786c08140373bdf609ea90749031e6fc
+  languageName: node
+  linkType: hard
+
 "package-json@npm:^4.0.0":
   version: 4.0.1
   resolution: "package-json@npm:4.0.1"
@@ -25393,6 +25567,15 @@ __metadata:
   languageName: node
   linkType: hard
 
+"process-on-spawn@npm:^1.0.0":
+  version: 1.0.0
+  resolution: "process-on-spawn@npm:1.0.0"
+  dependencies:
+    fromentries: ^1.2.0
+  checksum: 597769e3db6a8e2cb1cd64a952bbc150220588debac31c7cf1a9f620ce981e25583d8d70848d8a14953577608512984a8808c3be77e09af8ebdcdc14ec23a295
+  languageName: node
+  linkType: hard
+
 "process-warning@npm:^1.0.0":
   version: 1.0.0
   resolution: "process-warning@npm:1.0.0"
@@ -26796,6 +26979,15 @@ __metadata:
   languageName: node
   linkType: hard
 
+"release-zalgo@npm:^1.0.0":
+  version: 1.0.0
+  resolution: "release-zalgo@npm:1.0.0"
+  dependencies:
+    es6-error: ^4.0.1
+  checksum: b59849dc310f6c426f34e308c48ba83df3d034ddef75189951723bb2aac99d29d15f5e127edad951c4095fc9025aa582053907154d68fe0c5380cd6a75365e53
+  languageName: node
+  linkType: hard
+
 "remark-external-links@npm:^8.0.0":
   version: 8.0.0
   resolution: "remark-external-links@npm:8.0.0"
@@ -28415,6 +28607,20 @@ __metadata:
   languageName: node
   linkType: hard
 
+"spawn-wrap@npm:^2.0.0":
+  version: 2.0.0
+  resolution: "spawn-wrap@npm:2.0.0"
+  dependencies:
+    foreground-child: ^2.0.0
+    is-windows: ^1.0.2
+    make-dir: ^3.0.0
+    rimraf: ^3.0.0
+    signal-exit: ^3.0.2
+    which: ^2.0.1
+  checksum: 5a518e37620def6d516b86207482a4f76bcf3c37c57d8d886d9fa399b04e5668d11fd12817b178029b02002a5ebbd09010374307effa821ba39594042f0a2d96
+  languageName: node
+  linkType: hard
+
 "spdx-correct@npm:^3.0.0":
   version: 3.1.1
   resolution: "spdx-correct@npm:3.1.1"
@@ -30575,7 +30781,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"type-fest@npm:^0.8.1":
+"type-fest@npm:^0.8.0, type-fest@npm:^0.8.1":
   version: 0.8.1
   resolution: "type-fest@npm:0.8.1"
   checksum: d61c4b2eba24009033ae4500d7d818a94fd6d1b481a8111612ee141400d5f1db46f199c014766b9fa9b31a6a7374d96fc748c6d688a78a3ce5a33123839becb7
@@ -32144,6 +32350,17 @@ __metadata:
   languageName: node
   linkType: hard
 
+"wrap-ansi@npm:^6.2.0":
+  version: 6.2.0
+  resolution: "wrap-ansi@npm:6.2.0"
+  dependencies:
+    ansi-styles: ^4.0.0
+    string-width: ^4.1.0
+    strip-ansi: ^6.0.0
+  checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a
+  languageName: node
+  linkType: hard
+
 "wrap-ansi@npm:^7.0.0":
   version: 7.0.0
   resolution: "wrap-ansi@npm:7.0.0"
@@ -32510,6 +32727,16 @@ __metadata:
   languageName: node
   linkType: hard
 
+"yargs-parser@npm:^18.1.2":
+  version: 18.1.3
+  resolution: "yargs-parser@npm:18.1.3"
+  dependencies:
+    camelcase: ^5.0.0
+    decamelize: ^1.2.0
+  checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9
+  languageName: node
+  linkType: hard
+
 "yargs-unparser@npm:2.0.0":
   version: 2.0.0
   resolution: "yargs-unparser@npm:2.0.0"
@@ -32555,6 +32782,25 @@ __metadata:
   languageName: node
   linkType: hard
 
+"yargs@npm:^15.0.2":
+  version: 15.4.1
+  resolution: "yargs@npm:15.4.1"
+  dependencies:
+    cliui: ^6.0.0
+    decamelize: ^1.2.0
+    find-up: ^4.1.0
+    get-caller-file: ^2.0.1
+    require-directory: ^2.1.1
+    require-main-filename: ^2.0.0
+    set-blocking: ^2.0.0
+    string-width: ^4.2.0
+    which-module: ^2.0.0
+    y18n: ^4.0.0
+    yargs-parser: ^18.1.2
+  checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373
+  languageName: node
+  linkType: hard
+
 "yargs@npm:^2.1.1":
   version: 2.3.0
   resolution: "yargs@npm:2.3.0"
-- 
GitLab