git: 6caf783eef95 - main - net-im/signal-desktop: Update to 6.3.0

From: Mikael Urankar <mikael_at_FreeBSD.org>
Date: Fri, 27 Jan 2023 16:12:46 UTC
The branch main has been updated by mikael:

URL: https://cgit.FreeBSD.org/ports/commit/?id=6caf783eef95f9dbe1f4e39a016a5d30cdb6ecfd

commit 6caf783eef95f9dbe1f4e39a016a5d30cdb6ecfd
Author:     Mikael Urankar <mikael@FreeBSD.org>
AuthorDate: 2023-01-27 11:13:34 +0000
Commit:     Mikael Urankar <mikael@FreeBSD.org>
CommitDate: 2023-01-27 16:12:29 +0000

    net-im/signal-desktop: Update to 6.3.0
    
    Changes:
      https://github.com/signalapp/Signal-Desktop/releases/tag/v6.3.0
---
 net-im/signal-desktop/Makefile                 |    86 +-
 net-im/signal-desktop/distinfo                 |    20 +-
 net-im/signal-desktop/files/download.js        |    62 +
 net-im/signal-desktop/files/fetch-prebuild.js  |    87 +
 net-im/signal-desktop/files/package.json       |   494 +
 net-im/signal-desktop/files/patch-package.json |    19 -
 net-im/signal-desktop/files/sqlite3.gyp.diff   |     4 +-
 net-im/signal-desktop/files/yarn.lock          | 18401 +++++++++++++++++++++++
 net-im/signal-desktop/get_deps.sh              |    13 +-
 net-im/signal-desktop/pkg-plist                |     2 +-
 10 files changed, 19131 insertions(+), 57 deletions(-)

diff --git a/net-im/signal-desktop/Makefile b/net-im/signal-desktop/Makefile
index 33def16c5f00..70cafe14339e 100644
--- a/net-im/signal-desktop/Makefile
+++ b/net-im/signal-desktop/Makefile
@@ -1,16 +1,17 @@
 PORTNAME=	signal-desktop
 DISTVERSIONPREFIX=	v
-DISTVERSION=	6.2.0
+DISTVERSION=	6.3.0
 CATEGORIES=	net-im
-MASTER_SITES=	LOCAL/mikael/signal-desktop/:yarn \
-		LOCAL/mikael/signal-desktop/:electron_gyp \
-		LOCAL/mikael/signal-desktop/:npm \
+MASTER_SITES=	LOCAL/mikael/signal-desktop/:npm \
+		LOCAL/mikael/signal-desktop/:sqlite \
+		https://nodejs.org/download/release/v${NODE_VERSION}/:node \
+		https://electronjs.org/headers/v${ELECTRON_GYP_VERSION}/:electron_gyp \
 		https://build-artifacts.signal.org/desktop/:sqlcipher
-DISTFILES=	signal-desktop-${DISTVERSION}-yarn-cache.tar.gz:yarn \
-		signal-desktop-${DISTVERSION}-electron-gyp-cache.tar.gz:electron_gyp \
+DISTFILES=	signal-desktop-${DISTVERSION}-yarn-cache.tar.gz:prefetch \
 		signal-desktop-${DISTVERSION}-npm-cache.tar.gz:npm \
-		sqlcipher-4.5.2--3.0.7-4587e88a4219cb76fd595a5b73f82bfd919b235d75626f40783525f4f58a7503.tar.gz:sqlcipher
-		
+		node-v${NODE_VERSION}-headers.tar.gz:node \
+		node-v${ELECTRON_GYP_VERSION}-headers.tar.gz:electron_gyp \
+		${SQLCIPHER}.tar.gz:sqlcipher
 
 MAINTAINER=	mikael@FreeBSD.org
 COMMENT=	Cross-platform centralized encrypted messaging service
@@ -21,6 +22,8 @@ LICENSE_FILE=	${WRKSRC}/LICENSE
 
 ONLY_FOR_ARCHS=	aarch64 amd64
 
+FETCH_DEPENDS=	yarn-node16>0:www/yarn-node16
+EXTRACT_DEPENDS=yarn-node16>0:www/yarn-node16
 BUILD_DEPENDS=	${LOCALBASE}/lib/libringrtc.so:multimedia/ringrtc \
 		${LOCALBASE}/lib/libsignal_node.so:net-im/libsignal-node \
 		app-builder>0:devel/app-builder \
@@ -79,14 +82,19 @@ MAKE_ENV+=	ESBUILD_BINARY_PATH=${WRKDIR}/esbuild-freebsd-64/package/bin/esbuild
 
 _BUILD_DATE=	$$(date +'%s')
 
-ELECTRON_VER_MAJOR=	21
+ELECTRON_VER_MAJOR=	22
+# keep NODE_VERSION in sync with www/node16 DISTVERSION
+NODE_VERSION=		16.19.0
+# bump ELECTRON_GYP_VERSION when ELECTRON_VER_MAJOR is changed
+ELECTRON_GYP_VERSION=	22.0.0
 
-# ll work/.cache/yarn/v6 | egrep "ringrtc|signal-client|npm-better-sqlite3|esbuild-freebsd-64"
+# ll work/.cache/yarn/v6 | egrep "@signalapp|esbuild-freebsd-64"
 NPM_SIGNAL_DIR=		npm-@signalapp-libsignal-client-0.21.1-381d6162ae0e7719dc625780c1d6c3f9f558c33d-integrity
-NPM_RINGRTC_DIR=	npm-ringrtc-2.22.0-9a9d9fbc1ca43e7a0707a960ce9642dbf82dc64a/
-NPM_SQLITE3_DIR=	npm-@signalapp-better-sqlite3-8.0.3-c279ca3f1d1e7f6554d2a629d717e96e1ec45809-integrity/
+NPM_RINGRTC_DIR=	npm-@signalapp-ringrtc-2.23.0-982fb6268eab2eb35a61624149b5f9ce9af28907-integrity
+NPM_SQLITE3_DIR=	npm-@signalapp-better-sqlite3-8.0.4-53ed2074634b69e83116573b26ae1d927c4aab22-integrity
 NPM_PLAYWRITE_DIR=	npm-playwright-core-1.17.1-a16e0f89284a0ed8ae6d77e1c905c84b8a2ba022-integrity
 NPM_ESBUILD_VERS=	0.15.8
+SQLCIPHER=		sqlcipher-4.5.2--3.0.7-4587e88a4219cb76fd595a5b73f82bfd919b235d75626f40783525f4f58a7503
 
 ESBUILD_ARCH=		${ARCH:S/aarch64/arm/:S/amd64//}
 NODE_ARCH=		${ARCH:S/aarch64/arm64/:S/amd64/x64/}
@@ -95,11 +103,49 @@ APP_OUT_DIR=		linux-${ARCH:S/aarch64/arm64-/:S/amd64//}unpacked
 PLIST_SUB=		NODE_ARCH=${NODE_ARCH} \
 			SHARP_ARCH=${ARCH:S/aarch64/arm64v8/:S/amd64/x64/}
 
+YARN_TIMESTAMP=	1661146515
+
+pre-fetch:
+	if [ ! -f ${DISTDIR}/signal-desktop-${DISTVERSION}-yarn-cache.tar.gz ]; \
+		then ${MKDIR} ${WRKDIR}; \
+		${ECHO_CMD} 'yarn-offline-mirror "./yarn-offline-cache"' >> \
+			${WRKDIR}/.yarnrc; \
+		${CP} ${FILESDIR}/package.json ${FILESDIR}/yarn.lock ${WRKDIR}; \
+		cd ${WRKDIR} && ${SETENV} HOME=${WRKDIR} XDG_CACHE_HOME=${WRKDIR}/.cache \
+			yarn --frozen-lockfile --ignore-scripts; \
+		${MTREE_CMD} -cbnSp yarn-offline-cache | ${MTREE_CMD} -C | ${SED} \
+			-e 's:time=[0-9.]*:time=${YARN_TIMESTAMP}.000000000:' \
+			-e 's:\([gu]id\)=[0-9]*:\1=0:g' \
+			-e 's:flags=.*:flags=none:' \
+			-e 's:^\.:./yarn-offline-cache:' > yarn-offline-cache.mtree; \
+		${TAR} cJf ${DISTDIR}/signal-desktop-${DISTVERSION}-yarn-cache.tar.gz  \
+			@yarn-offline-cache.mtree; \
+		${RM} -r ${WRKDIR}; \
+	fi
+
+post-patch:
+	${REINPLACE_CMD} "s#%%EPOCH%%#${_BUILD_DATE}#" \
+		${WRKSRC}/ts/scripts/get-expire-time.ts
+
+post-extract:
+	${MKDIR} ${WRKDIR}/.cache/node-gyp/${NODE_VERSION} \
+		 ${WRKDIR}/.electron-gyp/${ELECTRON_GYP_VERSION}
+	${MV} ${WRKDIR}/node-v${NODE_VERSION}/include ${WRKDIR}/.cache/node-gyp/${NODE_VERSION}
+	${MV} ${WRKDIR}/node_headers/include ${WRKDIR}/.electron-gyp/${ELECTRON_GYP_VERSION}
+	${ECHO_CMD} '9' > ${WRKDIR}/.cache/node-gyp/${NODE_VERSION}/installVersion
+	${ECHO_CMD} '9' > ${WRKDIR}/.electron-gyp/${ELECTRON_GYP_VERSION}/installVersion
+
+	# install yarn modules and fail silently
+	${CP} ${FILESDIR}/package.json ${WRKSRC}/
+	${ECHO_CMD} 'yarn-offline-mirror "../yarn-offline-cache"' > ${WRKSRC}/.yarnrc
+	cd ${WRKSRC} && \
+		${SETENV} ${MAKE_ENV} yarn install --frozen-lockfile --ignore-optional --offline || ${TRUE}
+
 do-build:
 	${ECHO_CMD} 'yarn-offline-mirror "../yarn-cache"' > ${WRKSRC}/.yarnrc
 
-# electron-builder is stupid and tries to open ${LOCALBASE}/share/electron21/electron with WRITE priv
-# copy ${LOCALBASE}/share/electron21 in WRKDIR
+# electron-builder is stupid and tries to open ${LOCALBASE}/share/electron22/electron with WRITE priv
+# copy ${LOCALBASE}/share/electron22 in WRKDIR
 # it's needed for the do-install phase, it's here because of this issue
 # https://github.com/MikaelUrankar/signal-desktop/issues/6 (I don't know why it fails though)
 	@${RM} -r ${WRKDIR}/electron${ELECTRON_VER_MAJOR}
@@ -108,25 +154,29 @@ do-build:
 
 	# Install libsignal_node.so and libringrtc.so binaries in the yarn cache
 	${MKDIR} ${WRKDIR}/.cache/yarn/v6/${NPM_SIGNAL_DIR}/node_modules/@signalapp/libsignal-client/prebuilds/freebsd-${NODE_ARCH} \
-		 ${WRKDIR}/.cache/yarn/v6/${NPM_RINGRTC_DIR}/node_modules/ringrtc/build/freebsd
+		 ${WRKDIR}/.cache/yarn/v6/${NPM_RINGRTC_DIR}/node_modules/@signalapp/ringrtc/build/freebsd
 	${CP} ${LOCALBASE}/lib/libsignal_node.so \
 		${WRKDIR}/.cache/yarn/v6/${NPM_SIGNAL_DIR}/node_modules/@signalapp/libsignal-client/prebuilds/freebsd-${NODE_ARCH}/node.napi.node
 	${CP} ${LOCALBASE}/lib/libringrtc.so \
-		${WRKDIR}/.cache/yarn/v6/${NPM_RINGRTC_DIR}/node_modules/ringrtc/build/freebsd/libringrtc-${NODE_ARCH}.node
+		${WRKDIR}/.cache/yarn/v6/${NPM_RINGRTC_DIR}/node_modules/@signalapp/ringrtc/build/freebsd/libringrtc-${NODE_ARCH}.node
 
 	${MKDIR} ${WRKDIR}/.cache/yarn/v6/${NPM_SQLITE3_DIR}/node_modules/@signalapp/better-sqlite3/deps
-	${CP} ${DISTDIR}/sqlcipher-4.5.2--3.0.7-4587e88a4219cb76fd595a5b73f82bfd919b235d75626f40783525f4f58a7503.tar.gz \
+	${CP} ${DISTDIR}/${SQLCIPHER}.tar.gz \
 		${WRKDIR}/.cache/yarn/v6/${NPM_SQLITE3_DIR}/node_modules/@signalapp/better-sqlite3/deps/sqlcipher.tar.gz
 
 	# patch-package can't patch playwright-core, patch the yarn cache instead
 	${CP} ${FILESDIR}/playwrigth-registry.js \
 	 	${WRKDIR}/.cache/yarn/v6/${NPM_PLAYWRITE_DIR}/node_modules/playwright-core/lib/utils/registry.js
+	${CP} ${FILESDIR}/fetch-prebuild.js \
+		${WRKDIR}/.cache/yarn/v6/${NPM_RINGRTC_DIR}/node_modules/@signalapp/ringrtc/scripts/fetch-prebuild.js
+	${CP} ${FILESDIR}/download.js \
+		${WRKDIR}/.cache/yarn/v6/${NPM_SQLITE3_DIR}/node_modules/@signalapp/better-sqlite3/deps/download.js
 
 	# patch-package can't patch sqlite3 on aarch64, patch the yarn cache instead
 	cd ${WRKDIR}/.cache/yarn/v6 && ${PATCH} -s -N -i ${FILESDIR}/sqlite3.gyp.diff
 
 	${MKDIR} ${WRKDIR}/esbuild-freebsd-64
-	${TAR} -xf ${WRKDIR}/yarn-cache/esbuild-freebsd-${ESBUILD_ARCH}64-${NPM_ESBUILD_VERS}.tgz -C ${WRKDIR}/esbuild-freebsd-64
+	${TAR} -xf ${WRKDIR}/yarn-offline-cache/esbuild-freebsd-${ESBUILD_ARCH}64-${NPM_ESBUILD_VERS}.tgz -C ${WRKDIR}/esbuild-freebsd-64
 
 # 	# For online build
 #	${RM} ${WRKDIR}/.npmrc
diff --git a/net-im/signal-desktop/distinfo b/net-im/signal-desktop/distinfo
index 2b75cc2e82e4..d595af42f78f 100644
--- a/net-im/signal-desktop/distinfo
+++ b/net-im/signal-desktop/distinfo
@@ -1,11 +1,13 @@
-TIMESTAMP = 1673792962
-SHA256 (signal-desktop-6.2.0-yarn-cache.tar.gz) = 60a52b9f048f90144129643aa012b97c00317e217e2c1ab218ed2f21036040d6
-SIZE (signal-desktop-6.2.0-yarn-cache.tar.gz) = 1051289021
-SHA256 (signal-desktop-6.2.0-electron-gyp-cache.tar.gz) = 9515098bca084289d8a356e70e95f139d2451c9a62914d510286984937cf298d
-SIZE (signal-desktop-6.2.0-electron-gyp-cache.tar.gz) = 266707
-SHA256 (signal-desktop-6.2.0-npm-cache.tar.gz) = a4bfca0df78ccff27b27b0f84a9bc523667b83e6da12b6b4316c98580d25cf9b
-SIZE (signal-desktop-6.2.0-npm-cache.tar.gz) = 4433937
+TIMESTAMP = 1674809857
+SHA256 (signal-desktop-6.3.0-yarn-cache.tar.gz) = dd0e69be2b74356302311825621540452123cd4f6a6a5a7be6a8cf8bd8e388cf
+SIZE (signal-desktop-6.3.0-yarn-cache.tar.gz) = 361729096
+SHA256 (signal-desktop-6.3.0-npm-cache.tar.gz) = 8acc503a579760faf8ea660d504f3b3ffadc495bf09584228da4cc9af20e33fe
+SIZE (signal-desktop-6.3.0-npm-cache.tar.gz) = 4466353
+SHA256 (node-v16.19.0-headers.tar.gz) = d0b02ce3d1198d41127daf64f204195252abff6a22da70830aaed846ba6ad864
+SIZE (node-v16.19.0-headers.tar.gz) = 568145
+SHA256 (node-v22.0.0-headers.tar.gz) = 190aa8035756ea448870547c8123b959031657f739843e6950013df04c0dd119
+SIZE (node-v22.0.0-headers.tar.gz) = 263326
 SHA256 (sqlcipher-4.5.2--3.0.7-4587e88a4219cb76fd595a5b73f82bfd919b235d75626f40783525f4f58a7503.tar.gz) = 4587e88a4219cb76fd595a5b73f82bfd919b235d75626f40783525f4f58a7503
 SIZE (sqlcipher-4.5.2--3.0.7-4587e88a4219cb76fd595a5b73f82bfd919b235d75626f40783525f4f58a7503.tar.gz) = 41118646
-SHA256 (signalapp-Signal-Desktop-v6.2.0_GH0.tar.gz) = dcb6967c5a72eada96ddf1fc0fa5ac122b9280cc5c08bfc28d3b93ba1ce40e79
-SIZE (signalapp-Signal-Desktop-v6.2.0_GH0.tar.gz) = 38307325
+SHA256 (signalapp-Signal-Desktop-v6.3.0_GH0.tar.gz) = 07c71bd31157873d5d1f57830a636fe61ad551bacf4a87a4f13336f16e524a1a
+SIZE (signalapp-Signal-Desktop-v6.3.0_GH0.tar.gz) = 38400291
diff --git a/net-im/signal-desktop/files/download.js b/net-im/signal-desktop/files/download.js
new file mode 100644
index 000000000000..e959cd40ef89
--- /dev/null
+++ b/net-im/signal-desktop/files/download.js
@@ -0,0 +1,62 @@
+const https = require('https');
+const fs = require('fs');
+const path = require('path');
+const crypto = require('crypto');
+const { Transform } = require('stream');
+const { pipeline } = require('stream/promises');
+
+const BASE_URI = `https://build-artifacts.signal.org/desktop`;
+const HASH = '4587e88a4219cb76fd595a5b73f82bfd919b235d75626f40783525f4f58a7503';
+const SQLCIPHER_VERSION = '4.5.2';
+const OPENSSL_VERSION = '3.0.7';
+const URL = `${BASE_URI}/sqlcipher-${SQLCIPHER_VERSION}--${OPENSSL_VERSION}-` +
+  `${HASH}.tar.gz`;
+
+const tmpFile = path.join(__dirname, 'unverified.tmp');
+const finalFile = path.join(__dirname, 'sqlcipher.tar.gz');
+
+async function main() {
+  return;
+  if (fs.statSync(finalFile, { throwIfNoEntry: false })) {
+    const hash = crypto.createHash('sha256');
+    const existingHash = await pipeline(
+      fs.createReadStream(finalFile),
+      hash,
+    );
+    if (hash.digest('hex') === HASH) {
+      console.log('local build artifact is up-to-date');
+      return;
+    }
+
+    console.log('local build artifact is outdated');
+  }
+  download();
+}
+
+function download() {
+  console.log(`downloading ${URL}`);
+  https.get(URL, async (res) => {
+    const out = fs.createWriteStream(tmpFile);
+
+    const hash = crypto.createHash('sha256');
+
+    const t = new Transform({
+      transform(chunk, encoding, callback) {
+        hash.write(chunk, encoding);
+        callback(null, chunk);
+      }
+    });
+
+    await pipeline(res, t, out);
+
+    const actualDigest = hash.digest('hex');
+    if (actualDigest !== HASH) {
+      fs.unlinkSync(tmpFile);
+      throw new Error(`Digest mismatch. Expected ${HASH} got ${actualDigest}`);
+    }
+
+    fs.renameSync(tmpFile, finalFile);
+  })
+}
+
+main();
diff --git a/net-im/signal-desktop/files/fetch-prebuild.js b/net-im/signal-desktop/files/fetch-prebuild.js
new file mode 100644
index 000000000000..93a713c55407
--- /dev/null
+++ b/net-im/signal-desktop/files/fetch-prebuild.js
@@ -0,0 +1,87 @@
+//
+// Copyright 2022 Signal Messenger, LLC
+// SPDX-License-Identifier: AGPL-3.0-only
+//
+
+/* eslint-disable no-console */
+
+const https = require('https');
+const fs = require('fs');
+const path = require('path');
+const crypto = require('crypto');
+const tar = require('tar');
+const { Transform } = require('stream');
+const { pipeline } = require('stream/promises');
+
+const VERSION = process.env.npm_package_version;
+const URL = process.env.npm_package_config_prebuildUrl.replace(
+  '${npm_package_version}', // eslint-disable-line no-template-curly-in-string
+  VERSION
+);
+const HASH = process.env.npm_package_config_prebuildChecksum;
+
+const tmpFile = path.join(__dirname, 'unverified-prebuild.tmp');
+const finalFile = path.join(__dirname, 'prebuild.tar.gz');
+
+async function main() {
+  return;
+  if (!HASH) {
+    console.log('(no checksum provided; assuming local build)');
+    process.exit(0);
+  }
+
+  await downloadIfNeeded();
+  console.log('extracting...');
+  await tar.extract({ file: finalFile, onwarn: process.emitWarning });
+}
+
+async function downloadIfNeeded() {
+  if (fs.statSync(finalFile, { throwIfNoEntry: false })) {
+    const hash = crypto.createHash('sha256');
+    await pipeline(fs.createReadStream(finalFile), hash);
+    if (hash.digest('hex') === HASH) {
+      console.log('local build artifact is up-to-date');
+      return;
+    }
+
+    console.log('local build artifact is outdated');
+  }
+  await download();
+}
+
+function download() {
+  console.log(`downloading ${URL}`);
+  return new Promise((resolve, reject) => {
+    https.get(URL, async res => {
+      try {
+        const out = fs.createWriteStream(tmpFile);
+
+        const hash = crypto.createHash('sha256');
+
+        const t = new Transform({
+          transform(chunk, encoding, callback) {
+            hash.write(chunk, encoding);
+            callback(null, chunk);
+          },
+        });
+
+        await pipeline(res, t, out);
+
+        const actualDigest = hash.digest('hex');
+        if (actualDigest !== HASH) {
+          fs.unlinkSync(tmpFile);
+          throw new Error(
+            `Digest mismatch. Expected ${HASH} got ${actualDigest}`
+          );
+        }
+
+        fs.renameSync(tmpFile, finalFile);
+        resolve();
+      } catch (error) {
+        reject(error);
+      }
+    });
+  });
+}
+
+main();
diff --git a/net-im/signal-desktop/files/package.json b/net-im/signal-desktop/files/package.json
new file mode 100644
index 000000000000..1877efcb47c1
--- /dev/null
+++ b/net-im/signal-desktop/files/package.json
@@ -0,0 +1,494 @@
+{
+  "name": "signal-desktop",
+  "productName": "Signal",
+  "description": "Private messaging from your desktop",
+  "desktopName": "signal.desktop",
+  "repository": "https://github.com/signalapp/Signal-Desktop.git",
+  "version": "6.3.0",
+  "license": "AGPL-3.0-only",
+  "author": {
+    "name": "Signal Messenger, LLC",
+    "email": "support@signal.org"
+  },
+  "main": "app/main.js",
+  "scripts": {
+    "postinstall": "yarn build:acknowledgments && patch-package && yarn electron:install-app-deps && rimraf node_modules/dtrace-provider",
+    "postuninstall": "yarn build:acknowledgments",
+    "start": "electron .",
+    "generate": "npm-run-all build-protobuf build:esbuild sass get-expire-time copy-and-concat",
+    "build-release": "yarn run build",
+    "sign-release": "node ts/updater/generateSignature.js",
+    "notarize": "echo 'No longer necessary'",
+    "get-strings": "node ts/scripts/get-strings.js",
+    "push-strings": "node ts/scripts/push-strings.js",
+    "get-expire-time": "node ts/scripts/get-expire-time.js",
+    "copy-and-concat": "node ts/scripts/copy-and-concat.js",
+    "sass": "sass stylesheets/manifest.scss:stylesheets/manifest.css stylesheets/manifest_bridge.scss:stylesheets/manifest_bridge.css",
+    "build-module-protobuf": "pbjs --target static-module --force-long --no-verify --no-create --wrap commonjs --out ts/protobuf/compiled.js protos/*.proto && pbts --out ts/protobuf/compiled.d.ts ts/protobuf/compiled.js",
+    "clean-module-protobuf": "rm -f ts/protobuf/compiled.d.ts ts/protobuf/compiled.js",
+    "build-protobuf": "yarn build-module-protobuf",
+    "clean-protobuf": "yarn clean-module-protobuf",
+    "prepare-beta-build": "node scripts/prepare_beta_build.js",
+    "prepare-alpha-build": "node scripts/prepare_alpha_build.js",
+    "prepare-alpha-version": "node scripts/prepare_alpha_version.js",
+    "prepare-staging-build": "node scripts/prepare_staging_build.js",
+    "prepare-windows-cert": "node scripts/prepare_windows_cert.js",
+    "publish-to-apt": "NAME=$npm_package_name VERSION=$npm_package_version ./aptly.sh",
+    "test": "yarn test-node && yarn test-electron && yarn test-lint-intl && yarn test-eslint",
+    "test-electron": "node ts/scripts/test-electron.js",
+    "test-release": "node ts/scripts/test-release.js",
+    "test-node": "electron-mocha --timeout 10000 --file test/setup-test-node.js --recursive test/modules ts/test-node ts/test-both",
+    "test-mock": "mocha ts/test-mock/**/*_test.js",
+    "test-eslint": "mocha .eslint/rules/**/*.test.js",
+    "test-node-coverage": "nyc --reporter=lcov --reporter=text mocha --recursive test/modules ts/test-node ts/test-both",
+    "test-lint-intl": "ts-node ./build/intl-linter/linter.ts --test",
+    "eslint": "eslint --cache . --max-warnings 0",
+    "lint": "run-s --print-label lint-prettier check:types eslint",
+    "lint-deps": "node ts/util/lint/linter.js",
+    "lint-license-comments": "ts-node ts/util/lint/license_comments.ts",
+    "lint-prettier": "pprettier --check '**/*.{ts,tsx,d.ts,js,json,html,scss,md,yml,yaml}' '!node_modules/**'",
+    "lint-intl": "ts-node ./build/intl-linter/linter.ts",
+    "danger:local": "./danger/danger.sh local --base main",
+    "danger:ci": "./danger/danger.sh ci --base origin/main",
+    "format": "pprettier --write '**/*.{ts,tsx,d.ts,js,json,html,scss,md,yml,yaml}' '!node_modules/**'",
+    "transpile": "run-p check:types build:esbuild",
+    "check:types": "tsc --noEmit",
+    "clean-transpile-once": "rimraf app/**/*.js app/*.js sticker-creator/**/*.js sticker-creator/*.js ts/**/*.js ts/*.js tsconfig.tsbuildinfo",
+    "clean-transpile": "yarn run clean-transpile-once && yarn run clean-transpile-once",
+    "open-coverage": "open coverage/lcov-report/index.html",
+    "ready": "npm-run-all --print-label clean-transpile generate --parallel lint lint-deps lint-intl test-node test-electron",
+    "dev": "run-p --print-label dev:*",
+    "dev:transpile": "run-p \"check:types --watch\" dev:esbuild",
+    "dev:webpack": "run-p dev:esbuild dev:webpack:sticker-creator",
+    "dev:webpack:sticker-creator": "cross-env NODE_ENV=development webpack serve --mode development",
+    "dev:esbuild": "node scripts/esbuild.js --watch",
+    "dev:typed-scss": "yarn build:typed-scss -w",
+    "dev:storybook": "cross-env SIGNAL_ENV=storybook start-storybook -p 6006 -s ./",
+    "dev:sass": "yarn sass --watch",
+    "build": "run-s --print-label generate build:typed-scss build:webpack build:release",
+    "build:acknowledgments": "node scripts/generate-acknowledgments.js",
+    "build:dev": "run-s --print-label generate build:typed-scss build:webpack",
+    "build:typed-scss": "tsm sticker-creator",
+    "build:webpack": "run-p build:webpack:sticker-creator \"build:esbuild --prod\"",
+    "build:webpack:sticker-creator": "cross-env NODE_ENV=production webpack",
+    "build:esbuild": "node scripts/esbuild.js",
+    "build:electron": "electron-builder --config.extraMetadata.environment=$SIGNAL_ENV",
+    "build:release": "cross-env SIGNAL_ENV=production yarn build:electron -- --config.directories.output=release",
+    "preverify:ts": "yarn build:typed-scss",
+    "verify": "run-p --print-label verify:*",
+    "verify:ts": "tsc --noEmit",
+    "electron:install-app-deps": "electron-builder install-app-deps"
+  },
+  "optionalDependencies": {
+    "fs-xattr": "0.3.0"
+  },
+  "dependencies": {
+    "@formatjs/fast-memoize": "1.2.6",
+    "@indutny/frameless-titlebar": "2.3.5",
+    "@indutny/sneequals": "3.2.0",
+    "@popperjs/core": "2.11.6",
+    "@react-spring/web": "9.5.5",
+    "@signalapp/better-sqlite3": "8.0.4",
+    "@signalapp/libsignal-client": "0.21.1",
+    "@signalapp/ringrtc": "2.23.0",
+    "@sindresorhus/is": "0.8.0",
+    "@types/fabric": "4.5.3",
+    "array-move": "2.1.0",
+    "backbone": "1.4.0",
+    "bezier-easing": "2.1.0",
+    "blob-util": "2.0.2",
+    "blueimp-load-image": "5.14.0",
+    "blurhash": "1.1.3",
+    "classnames": "2.2.5",
+    "config": "1.28.1",
+    "copy-text-to-clipboard": "2.1.0",
+    "dashdash": "1.14.1",
+    "dicer": "0.3.1",
+    "direction": "1.0.4",
+    "emoji-datasource": "14.0.0",
+    "emoji-datasource-apple": "14.0.0",
+    "emoji-regex": "10.1.0",
+    "encoding": "0.1.13",
+    "fabric": "4.6.0",
+    "fast-glob": "3.2.1",
+    "filesize": "3.6.1",
+    "firstline": "1.2.1",
+    "focus-trap-react": "8.8.1",
+    "form-data": "4.0.0",
+    "fs-extra": "5.0.0",
+    "fuse.js": "6.5.3",
+    "glob": "7.1.6",
+    "google-libphonenumber": "3.2.27",
+    "got": "11.8.5",
+    "heic-convert": "1.2.4",
+    "history": "4.9.0",
+    "humanize-duration": "3.27.1",
+    "intl-tel-input": "17.0.13",
+    "js-yaml": "3.13.1",
+    "linkify-it": "2.2.0",
+    "lodash": "4.17.21",
+    "long": "4.0.0",
+    "lru-cache": "6.0.0",
+    "mac-screen-capture-permissions": "2.0.0",
+    "memoizee": "0.4.14",
+    "moment": "2.29.4",
+    "mp4box": "0.5.2",
+    "node-fetch": "2.6.7",
+    "normalize-path": "3.0.0",
+    "p-map": "2.1.0",
+    "p-props": "4.0.0",
+    "p-queue": "6.6.2",
+    "p-timeout": "4.1.0",
+    "parchment": "1.1.4",
+    "pify": "3.0.0",
+    "pino": "8.6.1",
+    "protobufjs": "6.11.3",
+    "proxy-agent": "5.0.0",
+    "qrcode-generator": "1.4.4",
+    "quill": "1.3.7",
+    "quill-delta": "4.0.1",
+    "react": "17.0.2",
+    "react-blurhash": "0.1.2",
+    "react-contextmenu": "2.11.0",
+    "react-dom": "17.0.2",
+    "react-dropzone": "10.2.2",
+    "react-hot-loader": "4.13.0",
+    "react-intl": "6.1.1",
+    "react-measure": "2.3.0",
+    "react-popper": "2.3.0",
+    "react-quill": "2.0.0-beta.4",
+    "react-redux": "7.2.8",
+    "react-router-dom": "5.0.1",
+    "react-sortable-hoc": "2.0.0",
+    "react-textarea-autosize": "8.3.4",
+    "react-virtualized": "9.22.3",
+    "read-last-lines": "1.8.0",
+    "redux": "4.1.2",
+    "redux-logger": "3.0.6",
+    "redux-promise-middleware": "6.1.0",
+    "redux-thunk": "2.3.0",
+    "redux-ts-utils": "3.2.2",
+    "reselect": "4.1.2",
+    "rimraf": "2.6.2",
+    "sanitize.css": "11.0.0",
+    "semver": "5.4.1",
+    "split2": "4.0.0",
+    "testcheck": "1.0.0-rc.2",
+    "typeface-inter": "3.18.1",
+    "uuid": "3.3.2",
+    "websocket": "1.0.34",
+    "zod": "3.5.1"
+  },
+  "devDependencies": {
+    "@babel/core": "7.14.3",
+    "@babel/plugin-proposal-class-properties": "7.17.12",
+    "@babel/plugin-proposal-nullish-coalescing-operator": "7.17.12",
+    "@babel/plugin-proposal-optional-chaining": "7.17.12",
+    "@babel/plugin-transform-runtime": "7.18.2",
+    "@babel/plugin-transform-typescript": "7.18.4",
+    "@babel/preset-react": "7.17.12",
+    "@babel/preset-typescript": "7.17.12",
+    "@electron/fuses": "1.5.0",
+    "@mixer/parallel-prettier": "2.0.1",
+    "@storybook/addon-a11y": "6.5.6",
+    "@storybook/addon-actions": "6.5.6",
+    "@storybook/addon-controls": "6.5.6",
+    "@storybook/addon-interactions": "6.5.9",
+    "@storybook/addon-knobs": "6.4.0",
+    "@storybook/addon-measure": "6.5.6",
+    "@storybook/addon-toolbars": "6.5.6",
+    "@storybook/addon-viewport": "6.5.6",
+    "@storybook/addons": "6.5.6",
+    "@storybook/jest": "0.0.10",
+    "@storybook/react": "6.5.6",
+    "@storybook/testing-library": "0.0.13",
+    "@types/backbone": "1.4.5",
+    "@types/blueimp-load-image": "5.14.1",
+    "@types/chai": "4.2.18",
+    "@types/chai-as-promised": "7.1.4",
+    "@types/classnames": "2.2.3",
+    "@types/config": "0.0.39",
+    "@types/dashdash": "1.14.0",
+    "@types/debug": "4.1.7",
+    "@types/dicer": "0.2.2",
+    "@types/direction": "1.0.0",
+    "@types/filesize": "3.6.0",
+    "@types/fs-extra": "5.0.5",
+    "@types/google-libphonenumber": "7.4.23",
+    "@types/history": "4.7.2",
+    "@types/humanize-duration": "3.18.1",
+    "@types/intl-tel-input": "17.0.4",
+    "@types/js-yaml": "3.12.0",
+    "@types/json-to-ast": "2.1.2",
+    "@types/linkify-it": "2.1.0",
+    "@types/lodash": "4.14.106",
+    "@types/long": "4.0.1",
+    "@types/lru-cache": "5.1.0",
+    "@types/memoizee": "0.4.2",
+    "@types/mocha": "9.0.0",
+    "@types/mustache": "4.1.2",
+    "@types/node": "16.18.3",
+    "@types/node-fetch": "2.6.2",
+    "@types/normalize-path": "3.0.0",
+    "@types/pify": "3.0.2",
+    "@types/quill": "1.3.10",
+    "@types/react": "17.0.45",
+    "@types/react-dom": "17.0.17",
+    "@types/react-measure": "2.0.5",
+    "@types/react-redux": "7.1.24",
+    "@types/react-router-dom": "4.3.4",
+    "@types/react-sortable-hoc": "0.6.5",
+    "@types/react-virtualized": "9.18.12",
+    "@types/redux-logger": "3.0.7",
+    "@types/rimraf": "2.0.2",
+    "@types/semver": "5.5.0",
+    "@types/sinon": "10.0.2",
+    "@types/split2": "3.2.1",
+    "@types/terser-webpack-plugin": "5.0.3",
+    "@types/uuid": "3.4.4",
+    "@types/webpack-dev-server": "3.11.3",
+    "@types/websocket": "1.0.0",
+    "@types/yargs": "17.0.7",
+    "@typescript-eslint/eslint-plugin": "5.47.0",
+    "@typescript-eslint/parser": "5.47.0",
+    "arraybuffer-loader": "1.0.3",
+    "asar": "3.1.0",
+    "axe-core": "4.1.4",
+    "babel-core": "7.0.0-bridge.0",
+    "babel-loader": "8.0.6",
+    "babel-plugin-lodash": "3.3.4",
+    "casual": "1.6.2",
+    "chai": "4.3.4",
+    "chai-as-promised": "7.1.1",
+    "chalk": "4.1.2",
+    "core-js": "2.6.9",
+    "cross-env": "5.2.0",
+    "css-loader": "3.2.0",
+    "danger": "11.1.2",
+    "debug": "4.3.3",
+    "electron": "22.0.0",
+    "electron-builder": "23.0.8",
+    "electron-mocha": "11.0.2",
+    "electron-notarize": "1.2.1",
+    "endanger": "7.0.4",
+    "esbuild": "0.15.8",
+    "eslint": "8.30.0",
+    "eslint-config-airbnb-typescript-prettier": "5.0.0",
+    "eslint-config-prettier": "8.5.0",
+    "eslint-plugin-import": "2.26.0",
+    "eslint-plugin-local-rules": "1.3.2",
+    "eslint-plugin-mocha": "10.1.0",
+    "eslint-plugin-more": "1.0.5",
+    "eslint-plugin-react": "7.31.10",
+    "file-loader": "4.2.0",
+    "html-webpack-plugin": "5.3.1",
+    "json-to-ast": "2.1.0",
+    "mocha": "9.1.3",
+    "mocha-testcheck": "1.0.0-rc.0",
+    "node-gyp": "9.0.0",
+    "npm-run-all": "4.1.5",
+    "nyc": "11.4.1",
+    "patch-package": "6.4.7",
+    "playwright": "1.17.1",
+    "prettier": "2.7.1",
+    "sass": "1.49.7",
+    "sass-loader": "10.2.0",
+    "sinon": "11.1.1",
+    "style-loader": "1.0.0",
+    "terser-webpack-plugin": "5.1.1",
+    "ts-loader": "4.1.0",
+    "ts-node": "8.3.0",
+    "typed-scss-modules": "4.1.1",
+    "typescript": "4.9.3",
+    "webpack": "5.30.0",
+    "webpack-cli": "4.9.2",
+    "webpack-dev-server": "4.7.4"
+  },
+  "resolutions": {
+    "@storybook/react/@storybook/core/node-fetch": "2.6.1",
+    "@types/react": "17.0.45",
+    "@types/react-dom": "17.0.17",
+    "dmg-license": "https://registry.yarnpkg.com/nop/-/nop-1.0.0.tgz",
+    "fabric/canvas": "https://registry.yarnpkg.com/nop/-/nop-1.0.0.tgz",
+    "fabric/jsdom": "https://registry.yarnpkg.com/nop/-/nop-1.0.0.tgz",
+    "fast-glob/glob-parent": "5.1.2",
+    "read-last-lines/mz/thenify-all/thenify": "3.3.1"
+  },
+  "engines": {
+    "node": "16.19.0"
+  },
+  "build": {
+    "appId": "org.whispersystems.signal-desktop",
+    "mac": {
+      "artifactName": "${name}-mac-${arch}-${version}.${ext}",
+      "category": "public.app-category.social-networking",
+      "darkModeSupport": true,
+      "hardenedRuntime": true,
+      "entitlements": "./build/entitlements.mac.plist",
+      "icon": "build/icons/mac/icon.icns",
+      "publish": [
+        {
+          "provider": "generic",
+          "url": "https://updates.signal.org/desktop"
+        }
+      ],
+      "mergeASARs": true,
+      "singleArchFiles": "node_modules/@signalapp/{libsignal-client/prebuilds/**,ringrtc/build/**}",
+      "target": [
+        {
+          "target": "zip",
+          "arch": [
+            "x64",
+            "arm64"
+          ]
+        },
+        {
+          "target": "dmg",
+          "arch": [
+            "x64",
+            "arm64",
+            "universal"
+          ]
+        }
+      ],
+      "bundleVersion": "1"
+    },
+    "win": {
+      "artifactName": "${name}-win-${version}.${ext}",
+      "certificateSubjectName": "Signal Messenger, LLC",
+      "certificateSha1": "8C9A0B5C852EC703D83EF7BFBCEB54B796073759",
+      "signingHashAlgorithms": [
+        "sha256"
+      ],
+      "publisherName": "Signal Messenger, LLC",
+      "icon": "build/icons/win/icon.ico",
+      "publish": [
+        {
+          "provider": "generic",
+          "url": "https://updates.signal.org/desktop"
+        }
+      ],
+      "target": [
+        "nsis"
+      ]
+    },
+    "nsis": {
+      "deleteAppDataOnUninstall": true
+    },
+    "linux": {
+      "category": "Network;InstantMessaging;Chat",
+      "desktop": {
+        "StartupWMClass": "Signal"
+      },
+      "target": [
+        "deb"
+      ],
+      "icon": "build/icons/png"
+    },
+    "deb": {
+      "depends": [
+        "libnotify4",
+        "libxtst6",
+        "libnss3",
+        "libasound2",
+        "libxss1"
+      ]
+    },
+    "protocols": {
+      "name": "sgnl-url-scheme",
+      "schemes": [
+        "sgnl",
+        "signalcaptcha"
+      ]
+    },
+    "afterPack": "ts/scripts/after-pack.js",
+    "afterSign": "ts/scripts/after-sign.js",
+    "afterAllArtifactBuild": "ts/scripts/after-all-artifact-build.js",
+    "asar": {
+      "smartUnpack": false
+    },
+    "asarUnpack": [
+      "**/*.node"
+    ],
+    "files": [
+      "package.json",
+      "config/default.json",
+      "config/${env.SIGNAL_ENV}.json",
+      "config/local-${env.SIGNAL_ENV}.json",
+      "background.html",
+      "about.html",
+      "screenShare.html",
+      "settings.html",
+      "permissions_popup.html",
+      "debug_log.html",
+      "loading.html",
+      "_locales/**",
+      "js/**",
+      "libtextsecure/**",
+      "ts/**/*.js",
+      "ts/*.js",
+      "!build",
+      "!ts/{storybook,test-node,test-mock,test-both,test-electron}",
+      "!**/{tsconfig,bower,component}.json",
+      "!**/.{github,husky,grenrc,npmrc,nycrc,taprc,bithoundrc}",
+      "!**/.testem.json",
+      "!**/.babelrc*",
+      "!**/.eslintrc*",
+      "!**/.prettier*",
+      "!**/.jscs*",
+      "!**/*travis*.yml",
+      "!**/{CHANGES,TODO,CHANGES.md~,README.md~}",
+      "!**/*.stories.js",
+      "!**/*.jest.js",
+      "!**/*.{bak,bnf,flow,patch,markdown,bnf,mli,ts,map}",
+      "!node_modules/intl-tel-input/composer.json",
+      "!js/register.js",
+      "stylesheets/*.css",
+      "app/*",
+      "preload.bundle.js",
+      "preload_utils.js",
+      "main.js",
+      "images/**",
+      "fonts/**",
+      "sounds/*",
+      "build/icons",
+      "node_modules/**",
+      "sticker-creator/preload.js",
+      "sticker-creator/window/*.js",
+      "sticker-creator/dist/**",
+      "!node_modules/underscore/**",
+      "!node_modules/emoji-datasource/emoji_pretty.json",
+      "!node_modules/emoji-datasource/**/*.png",
+      "!node_modules/emoji-datasource-apple/emoji_pretty.json",
+      "!node_modules/emoji-datasource-apple/img/apple/sheets*",
+      "!node_modules/spellchecker/vendor/hunspell/**/*",
+      "!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme,test,__tests__,tests,powered-test,example,examples,*.d.ts,.snyk-*.flag,benchmark}",
+      "!**/node_modules/.bin",
+      "!**/node_modules/**/build/**",
+      "node_modules/intl-tel-input/build/**",
+      "!**/node_modules/**/prebuilds/**",
+      "!**/*.{o,hprof,orig,pyc,pyo,rbc,c,h,m}",
+      "!**/._*",
+      "!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,__pycache__,thumbs.db,.gitignore,.gitattributes,.flowconfig,.yarn-metadata.json,.idea,appveyor.yml,.travis.yml,circle.yml,npm-debug.log,.nyc_output,yarn.lock,.yarn-integrity}",
+      "node_modules/spellchecker/build/Release/*.node",
+      "node_modules/websocket/build/Release/*.node",
+      "!node_modules/websocket/builderror.log",
+      "node_modules/socks/build/*.js",
+      "node_modules/socks/build/common/*.js",
+      "node_modules/socks/build/client/*.js",
+      "node_modules/smart-buffer/build/*.js",
+      "!node_modules/@signalapp/better-sqlite3/deps/*",
+      "!node_modules/@signalapp/better-sqlite3/src/*",
+      "node_modules/@signalapp/better-sqlite3/build/Release/better_sqlite3.node",
+      "node_modules/@signalapp/libsignal-client/prebuilds/${platform}-${arch}/*.node",
+      "!node_modules/@signalapp/ringrtc/scripts/*",
+      "node_modules/@signalapp/ringrtc/build/${platform}/*${arch}*.node",
+      "node_modules/mac-screen-capture-permissions/build/Release/*.node",
+      "!**/node_modules/react-dom/*/*.development.js",
+      "!node_modules/mp4box/**",
+      "node_modules/mp4box/package.json",
+      "node_modules/mp4box/dist/mp4box.all.js",
+      "!node_modules/.cache"
+    ]
+  }
+}
diff --git a/net-im/signal-desktop/files/patch-package.json b/net-im/signal-desktop/files/patch-package.json
deleted file mode 100644
index df02f10d522d..000000000000
--- a/net-im/signal-desktop/files/patch-package.json
+++ /dev/null
@@ -1,19 +0,0 @@
---- package.json.orig	2022-08-05 12:53:58 UTC
-+++ package.json
-@@ -192,7 +192,6 @@
-     "@babel/preset-typescript": "7.17.12",
-     "@electron/fuses": "1.5.0",
-     "@mixer/parallel-prettier": "2.0.1",
--    "@signalapp/mock-server": "2.11.0",
-     "@storybook/addon-a11y": "6.5.6",
-     "@storybook/addon-actions": "6.5.6",
-     "@storybook/addon-controls": "6.5.6",
-@@ -319,7 +318,7 @@
-     "read-last-lines/mz/thenify-all/thenify": "3.3.1"
-   },
-   "engines": {
--    "node": "16.16.0"
-+    "node": "16.19.0"
-   },
-   "build": {
-     "appId": "org.whispersystems.signal-desktop",
diff --git a/net-im/signal-desktop/files/sqlite3.gyp.diff b/net-im/signal-desktop/files/sqlite3.gyp.diff
index 5e78830a21ca..dcc74e32def1 100644
--- a/net-im/signal-desktop/files/sqlite3.gyp.diff
+++ b/net-im/signal-desktop/files/sqlite3.gyp.diff
@@ -1,5 +1,5 @@
---- npm-@signalapp-better-sqlite3-8.0.3-c279ca3f1d1e7f6554d2a629d717e96e1ec45809-integrity/node_modules/@signalapp/better-sqlite3/deps/sqlite3.gyp.orig	2022-07-02 14:34:04 UTC
-+++ npm-@signalapp-better-sqlite3-8.0.3-c279ca3f1d1e7f6554d2a629d717e96e1ec45809-integrity/node_modules/@signalapp/better-sqlite3/deps/sqlite3.gyp
+--- npm-@signalapp-better-sqlite3-8.0.4-53ed2074634b69e83116573b26ae1d927c4aab22-integrity/node_modules/@signalapp/better-sqlite3/deps/sqlite3.gyp.orig	2022-07-02 14:34:04 UTC
++++ npm-@signalapp-better-sqlite3-8.0.4-53ed2074634b69e83116573b26ae1d927c4aab22-integrity/node_modules/@signalapp/better-sqlite3/deps/sqlite3.gyp
 @@ -92,6 +92,14 @@
              'libraries': [
                # This statically links libcrypto, whereas -lcrypto would dynamically link it
diff --git a/net-im/signal-desktop/files/yarn.lock b/net-im/signal-desktop/files/yarn.lock
new file mode 100644
index 000000000000..2d0a382c7c31
--- /dev/null
+++ b/net-im/signal-desktop/files/yarn.lock
@@ -0,0 +1,18401 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"7zip-bin@~5.1.1":
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.1.1.tgz#9274ec7460652f9c632c59addf24efb1684ef876"
+  integrity sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==
+
+"@ampproject/remapping@^2.1.0":
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
+  integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.1.0"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@babel/code-frame@^7.0.0":
+  version "7.16.0"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431"
+  integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==
+  dependencies:
+    "@babel/highlight" "^7.16.0"
+
+"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3":
+  version "7.16.7"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789"
+  integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==
+  dependencies:
+    "@babel/highlight" "^7.16.7"
+
+"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.10":
+  version "7.17.10"
+  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.10.tgz#711dc726a492dfc8be8220028b1b92482362baab"
+  integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==
+
+"@babel/core@7.12.9":
+  version "7.12.9"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8"
+  integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==
+  dependencies:
+    "@babel/code-frame" "^7.10.4"
+    "@babel/generator" "^7.12.5"
+    "@babel/helper-module-transforms" "^7.12.1"
+    "@babel/helpers" "^7.12.5"
+    "@babel/parser" "^7.12.7"
+    "@babel/template" "^7.12.7"
+    "@babel/traverse" "^7.12.9"
+    "@babel/types" "^7.12.7"
+    convert-source-map "^1.7.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.1"
+    json5 "^2.1.2"
+    lodash "^4.17.19"
+    resolve "^1.3.2"
+    semver "^5.4.1"
+    source-map "^0.5.0"
+
+"@babel/core@7.14.3":
+  version "7.14.3"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.3.tgz#5395e30405f0776067fbd9cf0884f15bfb770a38"
+  integrity sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==
+  dependencies:
+    "@babel/code-frame" "^7.12.13"
+    "@babel/generator" "^7.14.3"
+    "@babel/helper-compilation-targets" "^7.13.16"
+    "@babel/helper-module-transforms" "^7.14.2"
+    "@babel/helpers" "^7.14.0"
+    "@babel/parser" "^7.14.3"
+    "@babel/template" "^7.12.13"
+    "@babel/traverse" "^7.14.2"
+    "@babel/types" "^7.14.2"
+    convert-source-map "^1.7.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.2"
+    json5 "^2.1.2"
+    semver "^6.3.0"
+    source-map "^0.5.0"
+
+"@babel/core@^7.12.10", "@babel/core@^7.7.5":
*** 18358 LINES SKIPPED ***