From 4bec354b474c0e966c4b432e6c4f72f67ddcac0a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 22 Aug 2022 16:17:59 +0100 Subject: [PATCH 001/239] test: New Electron versions (#538) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 208c2acd..dfe4831d 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.8","19.0.12","20.0.2"] +["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.9","19.0.13","20.0.3"] From 6f227e9be98bab8e7f5870d2306346dc6d84c0b3 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 22 Aug 2022 16:18:18 +0100 Subject: [PATCH 002/239] Pass attachments from renderer to main (#536) --- src/main/ipc.ts | 4 ++++ src/renderer/integrations/scope-to-main.ts | 1 + test/e2e/test-apps/other/scope-breadcrumbs/event.json | 3 ++- test/e2e/test-apps/other/scope-breadcrumbs/src/index.html | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/ipc.ts b/src/main/ipc.ts index f801c96f..b252172e 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -56,6 +56,10 @@ export function handleScope(options: ElectronMainOptionsInternal, jsonScope: str scope.setExtras(sentScope._extra); } + for (const attachment of sentScope._attachments || []) { + scope.addAttachment(attachment); + } + const breadcrumb = sentScope._breadcrumbs.pop(); if (breadcrumb) { scope.addBreadcrumb(breadcrumb, options?.maxBreadcrumbs || 100); diff --git a/src/renderer/integrations/scope-to-main.ts b/src/renderer/integrations/scope-to-main.ts index c7dc60a9..ba93bba8 100644 --- a/src/renderer/integrations/scope-to-main.ts +++ b/src/renderer/integrations/scope-to-main.ts @@ -30,6 +30,7 @@ export class ScopeToMain implements Integration { scope.addScopeListener((updatedScope) => { ipc.sendScope(JSON.stringify(normalize(updatedScope, 20, 2_000))); scope.clearBreadcrumbs(); + scope.clearAttachments(); }); } } diff --git a/test/e2e/test-apps/other/scope-breadcrumbs/event.json b/test/e2e/test-apps/other/scope-breadcrumbs/event.json index bef23dd3..6133b621 100644 --- a/test/e2e/test-apps/other/scope-breadcrumbs/event.json +++ b/test/e2e/test-apps/other/scope-breadcrumbs/event.json @@ -118,5 +118,6 @@ "extra": { "some-extra": "extra-value" } - } + }, + "attachments": [ { "type": "attachment", "length": 12, "filename": "attachment.txt" } ] } diff --git a/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html b/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html index 859adff2..3cf5b517 100644 --- a/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html +++ b/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html @@ -13,6 +13,7 @@ configureScope((scope) => { scope.setTag('renderer-tag', 'another-value'); + scope.addAttachment({ filename: 'attachment.txt', data: 'Some content' }); }); console.log('Some logging from the renderer process'); From 0f9e948951b9c37ae02605fab3d7cb96c9c792bb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 29 Aug 2022 20:01:24 +0100 Subject: [PATCH 003/239] test: New Electron versions (#540) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index dfe4831d..4da28821 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.9","19.0.13","20.0.3"] +["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.9","19.0.14","20.1.0"] From a3d177fc4e0d6cfa3f79f6c309d57a60cc4149fd Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 31 Aug 2022 15:58:21 +0100 Subject: [PATCH 004/239] Update to v7.11.1 of JavaScript SDKs (#543) --- package.json | 18 +-- .../other/browser-tracing/package.json | 2 +- .../other/custom-tracing/package.json | 2 +- .../net-breadcrumbs-tracing/package.json | 2 +- .../other/net-breadcrumbs/package.json | 2 +- yarn.lock | 116 +++++++++--------- 6 files changed, 71 insertions(+), 71 deletions(-) diff --git a/package.json b/package.json index 7f66e1bb..a89e87ca 100644 --- a/package.json +++ b/package.json @@ -57,19 +57,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.8.1", - "@sentry/core": "7.8.1", - "@sentry/hub": "7.8.1", - "@sentry/node": "7.8.1", - "@sentry/types": "7.8.1", - "@sentry/utils": "7.8.1", + "@sentry/browser": "7.11.1", + "@sentry/core": "7.11.1", + "@sentry/hub": "7.11.1", + "@sentry/node": "7.11.1", + "@sentry/types": "7.11.1", + "@sentry/utils": "7.11.1", "deepmerge": "^4.2.2", "tslib": "^2.3.1" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.8.1", - "@sentry-internal/typescript": "7.8.1", - "@sentry/tracing": "7.8.1", + "@sentry-internal/eslint-config-sdk": "7.11.1", + "@sentry-internal/typescript": "7.11.1", + "@sentry/tracing": "7.11.1", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/test/e2e/test-apps/other/browser-tracing/package.json b/test/e2e/test-apps/other/browser-tracing/package.json index 1e7794bb..03e84a31 100644 --- a/test/e2e/test-apps/other/browser-tracing/package.json +++ b/test/e2e/test-apps/other/browser-tracing/package.json @@ -4,6 +4,6 @@ "main": "src/main.js", "dependencies": { "@sentry/electron": "3.0.0", - "@sentry/tracing": "7.8.1" + "@sentry/tracing": "7.11.1" } } diff --git a/test/e2e/test-apps/other/custom-tracing/package.json b/test/e2e/test-apps/other/custom-tracing/package.json index a10e9d49..d7d484ab 100644 --- a/test/e2e/test-apps/other/custom-tracing/package.json +++ b/test/e2e/test-apps/other/custom-tracing/package.json @@ -4,6 +4,6 @@ "main": "src/main.js", "dependencies": { "@sentry/electron": "3.0.0", - "@sentry/tracing": "7.8.1" + "@sentry/tracing": "7.11.1" } } diff --git a/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json b/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json index 5d0750e5..2c4d1575 100644 --- a/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json +++ b/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json @@ -4,7 +4,7 @@ "main": "src/main.js", "dependencies": { "@sentry/electron": "3.0.0", - "@sentry/tracing": "7.8.1", + "@sentry/tracing": "7.11.1", "electron-fetch": "1.7.4" } } diff --git a/test/e2e/test-apps/other/net-breadcrumbs/package.json b/test/e2e/test-apps/other/net-breadcrumbs/package.json index 7ed7e688..2d92c651 100644 --- a/test/e2e/test-apps/other/net-breadcrumbs/package.json +++ b/test/e2e/test-apps/other/net-breadcrumbs/package.json @@ -4,7 +4,7 @@ "main": "src/main.js", "dependencies": { "@sentry/electron": "3.0.0", - "@sentry/tracing": "7.8.1", + "@sentry/tracing": "7.11.1", "electron-fetch": "1.7.4" } } diff --git a/yarn.lock b/yarn.lock index 689f9d62..906872bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -100,13 +100,13 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@sentry-internal/eslint-config-sdk@7.8.1": - version "7.8.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.8.1.tgz#e26d8721cfd289591a9fb4c864c9655956d31118" - integrity sha512-p1n/KZw1usK4dONInADFgVMG5Jb2fhSnwDfUzx2EG2rUClTFataoRb53girY/8z1RZrh92dhtQVHElS9sdz/iQ== +"@sentry-internal/eslint-config-sdk@7.11.1": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.11.1.tgz#b6f4048815d35606e9111ea6604707155055e2cb" + integrity sha512-iZmJGHMcsLk+ovihIII1VReAhZvAUKLtesM7pCjOmcDM7TaPVPj4HAgRCwL3oPPryTljmYEgnr0XeqDhrUhoyA== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.8.1" - "@sentry-internal/typescript" "7.8.1" + "@sentry-internal/eslint-plugin-sdk" "7.11.1" + "@sentry-internal/typescript" "7.11.1" "@typescript-eslint/eslint-plugin" "^3.9.0" "@typescript-eslint/parser" "^3.9.0" eslint-config-prettier "^6.11.0" @@ -115,82 +115,82 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.8.1": - version "7.8.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.8.1.tgz#01df570c17bc57efb126aba7635b3da2da4e3087" - integrity sha512-w0o7MkHixrLsCvcKiXejqY/TbsYFrzYBIRvX9zj60Wn3corjC/jNB0VC5CmXrsI71O6B1zvkw2gKfVYDdQ7Dug== +"@sentry-internal/eslint-plugin-sdk@7.11.1": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.11.1.tgz#b179bca47e31df3d5202ac36dd360f7d08b850a8" + integrity sha512-RcibkVAcRnvEj0G8Pj9sDva1KgzO6BvbXLEHCg2i/vF761OHGrn1WLhtasALRPD4xZjqr0+YPt8RoDeXlYEhVw== dependencies: requireindex "~1.1.0" -"@sentry-internal/typescript@7.8.1": - version "7.8.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.8.1.tgz#886e446b3a8fc54f52e84824ab16fd6b839d489e" - integrity sha512-3newTQXCuM4/rt51lo/ASd0+/dksi6wSmQt42914rfQf4dMxAwNeKyf3k6stcar1RdQQXXGv0lZfbtDOQ0wvzA== +"@sentry-internal/typescript@7.11.1": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.11.1.tgz#651ce17e5d1a8fa95f9b8d59edcf428e17748b6e" + integrity sha512-vTqJiEuj4MFbVOxvTj0rMQOE4HEwnx/zkEoDCuZnb05OCeba8UzKc7xDBhnE+CuyYeEg7bjhA/o6iNMjPjMxQw== -"@sentry/browser@7.8.1": - version "7.8.1" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.8.1.tgz#ca91c80a5da745e1b5379bc215100ba4660bac29" - integrity sha512-9JuagYqHyaZu/4RqyxrAgEHo71oV592XBuUKC33gajCVKWbyG3mNqudSMoHtdM1DrV9REZ4Elha7zFaE2cJX6g== +"@sentry/browser@7.11.1": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.11.1.tgz#377d417e833ef54c78a93ef720a742bda5022625" + integrity sha512-k2XHuzPfnm8VJPK5eWd1+Y5VCgN42sLveb8Qxc3prb5PSL416NWMLZaoB7RMIhy430fKrSFiosnm6QDk2M6pbA== dependencies: - "@sentry/core" "7.8.1" - "@sentry/types" "7.8.1" - "@sentry/utils" "7.8.1" + "@sentry/core" "7.11.1" + "@sentry/types" "7.11.1" + "@sentry/utils" "7.11.1" tslib "^1.9.3" -"@sentry/core@7.8.1": - version "7.8.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.8.1.tgz#d11ba7c97766d1e47edf697dbfd47fe4041477d9" - integrity sha512-PRivbdIzApi/gSixAxozhOBTylSVdw/9VxaStYHd7JJGhs36KXkV8ylpbCmYO4ap7/Ue9/slzwpvPOJJzmzAgA== +"@sentry/core@7.11.1": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.11.1.tgz#d68e796f3b6428aefd6086a1db00118df7a9a9e4" + integrity sha512-kaDSZ6VNuO4ZZdqUOOX6XM6x+kjo2bMnDQ3IJG51FPvVjr8lXYhXj1Ccxcot3pBYAIWPPby2+vNDOXllmXqoBA== dependencies: - "@sentry/hub" "7.8.1" - "@sentry/types" "7.8.1" - "@sentry/utils" "7.8.1" + "@sentry/hub" "7.11.1" + "@sentry/types" "7.11.1" + "@sentry/utils" "7.11.1" tslib "^1.9.3" -"@sentry/hub@7.8.1": - version "7.8.1" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.8.1.tgz#bc255c6b8e99a3333e737f189c984c715df504aa" - integrity sha512-AxwyGyS9Lp4XsURu4t8opa5vZ+NAB6I/n+B/Uix3YZea9z8jdWYAu9vsXSizOrtxekc/i7ZN4bnlNgXVHix0iA== +"@sentry/hub@7.11.1": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.11.1.tgz#1749b2b102ea1892ff388d65d66d3b402b393958" + integrity sha512-M6ClgdXdptS0lUBKB5KpXXe2qMQhsoiEN2pEGRI6+auqhfHCUQB1ZXsfjiOYexKC9fwx7TyFyZ9Jcaf2DTxEhw== dependencies: - "@sentry/types" "7.8.1" - "@sentry/utils" "7.8.1" + "@sentry/types" "7.11.1" + "@sentry/utils" "7.11.1" tslib "^1.9.3" -"@sentry/node@7.8.1": - version "7.8.1" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.8.1.tgz#9dca7afee2d9ad38fd9756e13439ce09d2f01934" - integrity sha512-gQHeIip7QudeK1YWrLyZPc7nfirhbVDJ3gfCfL9mLT724Sk8gKd1kcpU1niI+wwIwY7SOpJqX4Oh/F0lRKjzDQ== +"@sentry/node@7.11.1": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.11.1.tgz#97fd26de26e8203a3c34e26b38f3c2a5ba46828b" + integrity sha512-EAAHou/eHSzwRK0Z5qnQiwXNbkpnjWjloaG979gftA+MS/kM0AxQHdOrSJQbOEaqRf3F7/eC4Hj+1tfglAuaLQ== dependencies: - "@sentry/core" "7.8.1" - "@sentry/hub" "7.8.1" - "@sentry/types" "7.8.1" - "@sentry/utils" "7.8.1" + "@sentry/core" "7.11.1" + "@sentry/hub" "7.11.1" + "@sentry/types" "7.11.1" + "@sentry/utils" "7.11.1" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/tracing@7.8.1": - version "7.8.1" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.8.1.tgz#6368e7e90a43389cd583e77de7e28d5ca6f88bf9" - integrity sha512-orNVCsMtQUKhvh7GmyJzjOhU6oT7lC7TRT7tTRlyXQVrUmfJZsthmBtyfrTC7QWJ9vXQ0mB4jab8kMT3xE4ltg== +"@sentry/tracing@7.11.1": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.11.1.tgz#50cbe82dd5b9a1307b31761cdd4b0d71132cf5c7" + integrity sha512-ilgnHfpdYUWKG/5yAXIfIbPVsCfrC4ONFBR/wN25/hdAyVfXMa3AJx7NCCXxZBOPDWH3hMW8rl4La5yuDbXofg== dependencies: - "@sentry/hub" "7.8.1" - "@sentry/types" "7.8.1" - "@sentry/utils" "7.8.1" + "@sentry/hub" "7.11.1" + "@sentry/types" "7.11.1" + "@sentry/utils" "7.11.1" tslib "^1.9.3" -"@sentry/types@7.8.1": - version "7.8.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.8.1.tgz#c00a1ed02ad8f69d3b94fcda91e2d24e0bb3492a" - integrity sha512-LOoaeBXVI23Kh5SpIbxSRiJ6+eYZXVOFyPFH1T1mGBj95LPwRMqOdg0lUTmFJGBKbDGDB/YNjNnu1kQ7GrXBXw== +"@sentry/types@7.11.1": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.11.1.tgz#06e2827f6ba37159c33644208a0453b86d25e232" + integrity sha512-gIEhOPxC2cjrxQ0+K2SFJ1P6e/an5osSxVc9OOtekN28eHtVsXFCLB8XVWeNQnS7N2VkrVrkqORMBz1kvIcvVQ== -"@sentry/utils@7.8.1": - version "7.8.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.8.1.tgz#5d8a7e1c8d834de608ad834cf648d5291c62ba39" - integrity sha512-isUZjft4HWTOk1Z58KFJ/zzXeFtIJgP82CkYQlW464ZR2WCqPHYlXXXRWZpOHOfMnrf+gWeX9WAGS9rTAdhiSg== +"@sentry/utils@7.11.1": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.11.1.tgz#1635c5b223369d9428bc83c9b8908c9c3287ee10" + integrity sha512-tRVXNT5O9ilkV31pyHeTqA1PcPQfMV/2OR6yUYM4ah+QVISovC0f0ybhByuH5nYg6x/Gsnx1o7pc8L1GE3+O7A== dependencies: - "@sentry/types" "7.8.1" + "@sentry/types" "7.11.1" tslib "^1.9.3" "@sindresorhus/is@^0.14.0": From 0caa941de4b15107f373bc580db8811bfa695517 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 17:12:22 +0100 Subject: [PATCH 005/239] test: New Electron versions (#544) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 4da28821..9e26d6f5 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.9","19.0.14","20.1.0"] +["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.11","19.0.15","20.1.1"] From 14aafd56f09808abc525fe591914d4b6a2336732 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 8 Sep 2022 19:48:51 +0100 Subject: [PATCH 006/239] Make the store completely async (#542) --- src/main/integrations/electron-minidump.ts | 7 ++-- src/main/integrations/main-process-session.ts | 2 +- .../integrations/sentry-minidump/index.ts | 8 ++-- src/main/sessions.ts | 32 ++++++++-------- src/main/store.ts | 37 ++++++++++--------- src/main/transports/queue.ts | 4 +- 6 files changed, 47 insertions(+), 43 deletions(-) diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts index f30294c7..7891050c 100644 --- a/src/main/integrations/electron-minidump.ts +++ b/src/main/integrations/electron-minidump.ts @@ -96,9 +96,10 @@ export class ElectronMinidump implements Integration { } // Check if last crash report was likely to have been unreported in the last session - const previousSessionCrashed = unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date); - // Check if a previous session was not closed - checkPreviousSession(previousSessionCrashed).catch((error) => logger.error(error)); + void unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date).then((crashed) => { + // Check if a previous session was not closed + checkPreviousSession(crashed).catch((error) => logger.error(error)); + }); } /** diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts index a780d742..b165c64b 100644 --- a/src/main/integrations/main-process-session.ts +++ b/src/main/integrations/main-process-session.ts @@ -14,7 +14,7 @@ export class MainProcessSession implements Integration { /** @inheritDoc */ public setupOnce(): void { - startSession(); + void startSession(); // We track sessions via the 'will-quit' event which is the last event emitted before close. // diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts index 03967f89..34c551a1 100644 --- a/src/main/integrations/sentry-minidump/index.ts +++ b/src/main/integrations/sentry-minidump/index.ts @@ -26,7 +26,7 @@ export class SentryMinidump implements Integration { private _scopeStore?: Store<Scope>; /** Temp store for the scope of last run */ - private _scopeLastRun?: Scope; + private _scopeLastRun?: Promise<Scope>; private _minidumpLoader?: MinidumpLoader; @@ -170,14 +170,14 @@ export class SentryMinidump implements Integration { private _setupScopeListener(): void { const hubScope = getCurrentHub().getScope(); if (hubScope) { - hubScope.addScopeListener((updatedScope) => { + hubScope.addScopeListener(async (updatedScope) => { const scope = Scope.clone(updatedScope); // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access (scope as any)._eventProcessors = []; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access (scope as any)._scopeListeners = []; - this._scopeStore?.set(scope); + await this._scopeStore?.set(scope); }); } } @@ -224,7 +224,7 @@ export class SentryMinidump implements Integration { return false; } - const storedScope = Scope.clone(this._scopeLastRun); + const storedScope = Scope.clone(await this._scopeLastRun); let newEvent = await storedScope.applyToEvent(event); const hubScope = hub.getScope(); diff --git a/src/main/sessions.ts b/src/main/sessions.ts index 583b215e..547d1c36 100644 --- a/src/main/sessions.ts +++ b/src/main/sessions.ts @@ -1,7 +1,7 @@ import { getCurrentHub } from '@sentry/core'; import { makeSession, updateSession } from '@sentry/hub'; import { flush, NodeClient } from '@sentry/node'; -import { SerializedSession, SessionContext, SessionStatus } from '@sentry/types'; +import { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types'; import { logger } from '@sentry/utils'; import { sentryCachePath } from './fs'; @@ -13,22 +13,21 @@ const PERSIST_INTERVAL_MS = 60_000; const sessionStore = new Store<SessionContext | undefined>(sentryCachePath, 'session', undefined); /** Previous session that did not exit cleanly */ -let previousSession = sessionStore.get(); -const previousSessionModified = sessionStore.getModifiedDate(); +let previousSession: Promise<Partial<Session> | undefined> | undefined = sessionStore.get(); let persistTimer: NodeJS.Timer | undefined; /** Starts a session */ -export function startSession(): void { +export async function startSession(): Promise<void> { const hub = getCurrentHub(); - sessionStore.set(hub.startSession()); + await sessionStore.set(hub.startSession(), true); // Every PERSIST_INTERVAL, write the session to disk - persistTimer = setInterval(() => { + persistTimer = setInterval(async () => { const currentSession = hub.getScope()?.getSession(); // Only bother saving if it hasn't already ended if (currentSession && currentSession.status === 'ok') { - sessionStore.set(currentSession); + await sessionStore.set(currentSession); } }, PERSIST_INTERVAL_MS); } @@ -54,19 +53,20 @@ export async function endSession(): Promise<void> { logger.log('No session'); } - sessionStore.set(undefined, true); + await sessionStore.set(undefined, true); await flush(); } /** Determines if a Date is likely to have occurred in the previous uncompleted session */ -export function unreportedDuringLastSession(crashDate: Date | undefined): boolean { +export async function unreportedDuringLastSession(crashDate: Date | undefined): Promise<boolean> { if (!crashDate) { return false; } + const previousSessionModified = await sessionStore.getModifiedDate(); // There is no previous session - if (!previousSessionModified) { + if (previousSessionModified == undefined) { return false; } @@ -87,9 +87,11 @@ export function unreportedDuringLastSession(crashDate: Date | undefined): boolea export async function checkPreviousSession(crashed: boolean): Promise<void> { const client = getCurrentHub().getClient<NodeClient>(); - if (previousSession && client) { + const previous = await previousSession; + + if (previous && client) { // Ignore if the previous session is already ended - if (previousSession.status !== 'ok') { + if (previous.status !== 'ok') { previousSession = undefined; return; } @@ -98,13 +100,13 @@ export async function checkPreviousSession(crashed: boolean): Promise<void> { logger.log(`Found previous ${status} session`); - const sesh = makeSession(previousSession); + const sesh = makeSession(previous); updateSession(sesh, { status, errors: (sesh.errors || 0) + 1, - release: (previousSession as unknown as SerializedSession).attrs?.release, - environment: (previousSession as unknown as SerializedSession).attrs?.environment, + release: (previous as unknown as SerializedSession).attrs?.release, + environment: (previous as unknown as SerializedSession).attrs?.environment, }); await client.sendSession(sesh); diff --git a/src/main/store.ts b/src/main/store.ts index f34d101f..be009a79 100644 --- a/src/main/store.ts +++ b/src/main/store.ts @@ -1,8 +1,7 @@ import { logger } from '@sentry/utils'; -import { existsSync, readFileSync, statSync, unlinkSync, writeFileSync } from 'fs'; import { dirname, join } from 'path'; -import { mkdirpSync } from './fs'; +import { mkdirpSync, readFileAsync, statAsync, unlinkAsync, writeFileAsync } from './fs'; const dateFormat = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.*\d{0,10}Z$/; @@ -48,16 +47,16 @@ export class Store<T> { * @param next New data to replace the previous one. * @param forceFlush Forces the write to be flushed to disk immediately */ - public set(next: T, forceFlush: boolean = false): void { + public async set(next: T, forceFlush: boolean = false): Promise<void> { this._data = next; if (!this._flushing) { this._flushing = true; if (forceFlush) { - this._flush(); + await this._flush(); } else { setImmediate(() => { - this._flush(); + void this._flush(); }); } } @@ -67,8 +66,8 @@ export class Store<T> { * Updates data by passing it through the given function. * @param fn A function receiving the current data and returning new one. */ - public update(fn: (current: T) => T): void { - this.set(fn(this.get())); + public async update(fn: (current: T) => T): Promise<void> { + await this.set(fn(await this.get())); } /** @@ -78,12 +77,10 @@ export class Store<T> { * from disk. If the file does not exist, the initial value provided to the * constructor is used. */ - public get(): T { + public async get(): Promise<T> { if (this._data === undefined) { try { - this._data = existsSync(this._path) - ? (JSON.parse(readFileSync(this._path, 'utf8'), dateReviver) as T) - : this._initial; + this._data = JSON.parse(await readFileAsync(this._path, 'utf8'), dateReviver) as T; } catch (e) { this._data = this._initial; } @@ -93,27 +90,31 @@ export class Store<T> { } /** Returns store to its initial state */ - public clear(): void { - this.set(this._initial); + public async clear(): Promise<void> { + await this.set(this._initial); } /** Gets the Date that the file was last modified */ - public getModifiedDate(): Date | undefined { + public async getModifiedDate(): Promise<Date | undefined> { try { - return statSync(this._path)?.mtime; + return (await statAsync(this._path))?.mtime; } catch (_) { return undefined; } } /** Serializes the current data into the JSON file. */ - private _flush(): void { + private async _flush(): Promise<void> { try { if (this._data === undefined) { - unlinkSync(this._path); + try { + await unlinkAsync(this._path); + } catch (_) { + // + } } else { mkdirpSync(dirname(this._path)); - writeFileSync(this._path, JSON.stringify(this._data)); + await writeFileAsync(this._path, JSON.stringify(this._data)); } } catch (e) { logger.warn('Failed to flush store', e); diff --git a/src/main/transports/queue.ts b/src/main/transports/queue.ts index 93618935..f224cd59 100644 --- a/src/main/transports/queue.ts +++ b/src/main/transports/queue.ts @@ -33,7 +33,7 @@ export class PersistedRequestQueue { public async add(request: QueuedTransportRequest): Promise<void> { const bodyPath = uuid4(); - this._queue.update((queue) => { + await this._queue.update((queue) => { queue.push({ bodyPath, date: request.date || new Date(), @@ -60,7 +60,7 @@ export class PersistedRequestQueue { let found: PersistedRequest | undefined; const cutOff = Date.now() - MILLISECONDS_PER_DAY * this._maxAgeDays; - this._queue.update((queue) => { + await this._queue.update((queue) => { while ((found = queue.shift())) { // We drop events created in v3 of the SDK or before the cut-off if ('type' in found || found.date.getTime() < cutOff) { From d37dc0d49a0f40bae5ba498e0607817a62105fcd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 8 Sep 2022 19:49:19 +0100 Subject: [PATCH 007/239] test: New Electron versions (#545) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 9e26d6f5..3fc04a45 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.11","19.0.15","20.1.1"] +["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.11","19.0.16","20.1.2"] From 3470537694fc0dac3a63152978d7882d28d1a6c4 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 9 Sep 2022 12:59:38 +0100 Subject: [PATCH 008/239] Update to v7.12.1 of JavaScript SDKs (#548) --- package.json | 18 +-- src/main/integrations/additional-context.ts | 23 +--- src/main/sdk.ts | 4 +- .../other/browser-tracing/package.json | 2 +- .../other/custom-tracing/package.json | 2 +- .../net-breadcrumbs-tracing/package.json | 2 +- .../other/net-breadcrumbs/package.json | 2 +- yarn.lock | 116 +++++++++--------- 8 files changed, 78 insertions(+), 91 deletions(-) diff --git a/package.json b/package.json index a89e87ca..2c1d5fd0 100644 --- a/package.json +++ b/package.json @@ -57,19 +57,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.11.1", - "@sentry/core": "7.11.1", - "@sentry/hub": "7.11.1", - "@sentry/node": "7.11.1", - "@sentry/types": "7.11.1", - "@sentry/utils": "7.11.1", + "@sentry/browser": "7.12.1", + "@sentry/core": "7.12.1", + "@sentry/hub": "7.12.1", + "@sentry/node": "7.12.1", + "@sentry/types": "7.12.1", + "@sentry/utils": "7.12.1", "deepmerge": "^4.2.2", "tslib": "^2.3.1" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.11.1", - "@sentry-internal/typescript": "7.11.1", - "@sentry/tracing": "7.11.1", + "@sentry-internal/eslint-config-sdk": "7.12.1", + "@sentry-internal/typescript": "7.12.1", + "@sentry/tracing": "7.12.1", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/main/integrations/additional-context.ts b/src/main/integrations/additional-context.ts index a20f35c6..9ad63f81 100644 --- a/src/main/integrations/additional-context.ts +++ b/src/main/integrations/additional-context.ts @@ -1,4 +1,4 @@ -import { Event, EventProcessor, Integration } from '@sentry/types'; +import { DeviceContext, Event, EventProcessor, Integration } from '@sentry/types'; import { app, screen as electronScreen } from 'electron'; import { CpuInfo, cpus } from 'os'; @@ -19,21 +19,6 @@ const DEFAULT_OPTIONS: AdditionalContextOptions = { language: true, }; -interface LazyDeviceContext { - language?: string; - screen_resolution?: string; - screen_density?: number; -} - -interface AdditionalDeviceContext extends LazyDeviceContext { - memory_size?: number; - free_memory?: number; - processor_count?: number; - cpu_description?: string; - processor_frequency?: number; - machine_arch?: string; -} - /** Adds Electron context to events and normalises paths. */ export class AdditionalContext implements Integration { /** @inheritDoc */ @@ -43,7 +28,7 @@ export class AdditionalContext implements Integration { public name: string = AdditionalContext.id; private readonly _options: AdditionalContextOptions; - private _lazyDeviceContext: LazyDeviceContext = {}; + private _lazyDeviceContext: DeviceContext = {}; public constructor(options: Partial<AdditionalContextOptions> = {}) { this._options = { @@ -76,7 +61,7 @@ export class AdditionalContext implements Integration { /** Adds additional context to event */ private _addAdditionalContext(event: Event): Event { - const device: AdditionalDeviceContext = this._lazyDeviceContext; + const device: DeviceContext = this._lazyDeviceContext; const { memory, cpu } = this._options; @@ -101,7 +86,7 @@ export class AdditionalContext implements Integration { } } - return mergeEvents(event, { contexts: { device: device as Record<string, string | number> } }); + return mergeEvents(event, { contexts: { device } }); } /** Sets the display info */ diff --git a/src/main/sdk.ts b/src/main/sdk.ts index 1cd9ea58..e1db482a 100644 --- a/src/main/sdk.ts +++ b/src/main/sdk.ts @@ -32,7 +32,9 @@ export const defaultIntegrations: Integration[] = [ new PreloadInjection(), new AdditionalContext(), new Screenshots(), - ...defaultNodeIntegrations.filter((integration) => integration.name !== 'OnUncaughtException'), + ...defaultNodeIntegrations.filter( + (integration) => integration.name !== 'OnUncaughtException' && integration.name !== 'Context', + ), ]; export interface ElectronMainOptionsInternal extends Options<ElectronOfflineTransportOptions> { diff --git a/test/e2e/test-apps/other/browser-tracing/package.json b/test/e2e/test-apps/other/browser-tracing/package.json index 03e84a31..2bc9ff1f 100644 --- a/test/e2e/test-apps/other/browser-tracing/package.json +++ b/test/e2e/test-apps/other/browser-tracing/package.json @@ -4,6 +4,6 @@ "main": "src/main.js", "dependencies": { "@sentry/electron": "3.0.0", - "@sentry/tracing": "7.11.1" + "@sentry/tracing": "7.12.1" } } diff --git a/test/e2e/test-apps/other/custom-tracing/package.json b/test/e2e/test-apps/other/custom-tracing/package.json index d7d484ab..223d8ef3 100644 --- a/test/e2e/test-apps/other/custom-tracing/package.json +++ b/test/e2e/test-apps/other/custom-tracing/package.json @@ -4,6 +4,6 @@ "main": "src/main.js", "dependencies": { "@sentry/electron": "3.0.0", - "@sentry/tracing": "7.11.1" + "@sentry/tracing": "7.12.1" } } diff --git a/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json b/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json index 2c4d1575..f8991b67 100644 --- a/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json +++ b/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json @@ -4,7 +4,7 @@ "main": "src/main.js", "dependencies": { "@sentry/electron": "3.0.0", - "@sentry/tracing": "7.11.1", + "@sentry/tracing": "7.12.1", "electron-fetch": "1.7.4" } } diff --git a/test/e2e/test-apps/other/net-breadcrumbs/package.json b/test/e2e/test-apps/other/net-breadcrumbs/package.json index 2d92c651..b77f256e 100644 --- a/test/e2e/test-apps/other/net-breadcrumbs/package.json +++ b/test/e2e/test-apps/other/net-breadcrumbs/package.json @@ -4,7 +4,7 @@ "main": "src/main.js", "dependencies": { "@sentry/electron": "3.0.0", - "@sentry/tracing": "7.11.1", + "@sentry/tracing": "7.12.1", "electron-fetch": "1.7.4" } } diff --git a/yarn.lock b/yarn.lock index 906872bb..27aab6e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -100,13 +100,13 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@sentry-internal/eslint-config-sdk@7.11.1": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.11.1.tgz#b6f4048815d35606e9111ea6604707155055e2cb" - integrity sha512-iZmJGHMcsLk+ovihIII1VReAhZvAUKLtesM7pCjOmcDM7TaPVPj4HAgRCwL3oPPryTljmYEgnr0XeqDhrUhoyA== +"@sentry-internal/eslint-config-sdk@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.12.1.tgz#2eea4ca6ad3013ddb274031f1cc377be7a2adb07" + integrity sha512-a8vrOTQAmnU7jECSy7wiXf3/Z156lSud1tWZmKI8FPakvmidISPu7m96TlAY/fSysv2UoiKMjpfpBizjttnIGA== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.11.1" - "@sentry-internal/typescript" "7.11.1" + "@sentry-internal/eslint-plugin-sdk" "7.12.1" + "@sentry-internal/typescript" "7.12.1" "@typescript-eslint/eslint-plugin" "^3.9.0" "@typescript-eslint/parser" "^3.9.0" eslint-config-prettier "^6.11.0" @@ -115,82 +115,82 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.11.1": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.11.1.tgz#b179bca47e31df3d5202ac36dd360f7d08b850a8" - integrity sha512-RcibkVAcRnvEj0G8Pj9sDva1KgzO6BvbXLEHCg2i/vF761OHGrn1WLhtasALRPD4xZjqr0+YPt8RoDeXlYEhVw== +"@sentry-internal/eslint-plugin-sdk@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.12.1.tgz#9aea7ba346f07036479fb114b6d4d3d90b218a22" + integrity sha512-q1Ke/14TWDbAoc2In7+jGNw0xXVfQgHows9/uhNXHhI68PjdtO2dKUR66kgbHiZe5O/4lGTlxzRTANBSKOShtA== dependencies: requireindex "~1.1.0" -"@sentry-internal/typescript@7.11.1": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.11.1.tgz#651ce17e5d1a8fa95f9b8d59edcf428e17748b6e" - integrity sha512-vTqJiEuj4MFbVOxvTj0rMQOE4HEwnx/zkEoDCuZnb05OCeba8UzKc7xDBhnE+CuyYeEg7bjhA/o6iNMjPjMxQw== +"@sentry-internal/typescript@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.12.1.tgz#e08d8275aa8ac1f60c67fe605275eb031aba5eb6" + integrity sha512-79UcEk5++A7jUyTOa/DX/jJRW1OMcjtVqCk+aXF5hZbHM7qNjL1F8ZClxEq2SSstwuF0Q+ESHwK30VUR79NbwQ== -"@sentry/browser@7.11.1": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.11.1.tgz#377d417e833ef54c78a93ef720a742bda5022625" - integrity sha512-k2XHuzPfnm8VJPK5eWd1+Y5VCgN42sLveb8Qxc3prb5PSL416NWMLZaoB7RMIhy430fKrSFiosnm6QDk2M6pbA== +"@sentry/browser@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.12.1.tgz#2be6fa5c2529a2a75abac4d00aca786362302a1a" + integrity sha512-pgyL65CrGFLe8sKcEG8KXAuVTE8zkAsyTlv/AuME06cSdxzO/memPK/r3BI6EM7WupIdga+V5tQUldeT1kgHNA== dependencies: - "@sentry/core" "7.11.1" - "@sentry/types" "7.11.1" - "@sentry/utils" "7.11.1" + "@sentry/core" "7.12.1" + "@sentry/types" "7.12.1" + "@sentry/utils" "7.12.1" tslib "^1.9.3" -"@sentry/core@7.11.1": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.11.1.tgz#d68e796f3b6428aefd6086a1db00118df7a9a9e4" - integrity sha512-kaDSZ6VNuO4ZZdqUOOX6XM6x+kjo2bMnDQ3IJG51FPvVjr8lXYhXj1Ccxcot3pBYAIWPPby2+vNDOXllmXqoBA== +"@sentry/core@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.12.1.tgz#a22f1c530ed528a699ed204c36eb5fc8d308103d" + integrity sha512-DFHbzHFjukhlkRZ5xzfebx0IBzblW43kmfnalBBq7xEMscUvnhsYnlvL9Y20tuPZ/PrTcq4JAHbFluAvw6M0QQ== dependencies: - "@sentry/hub" "7.11.1" - "@sentry/types" "7.11.1" - "@sentry/utils" "7.11.1" + "@sentry/hub" "7.12.1" + "@sentry/types" "7.12.1" + "@sentry/utils" "7.12.1" tslib "^1.9.3" -"@sentry/hub@7.11.1": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.11.1.tgz#1749b2b102ea1892ff388d65d66d3b402b393958" - integrity sha512-M6ClgdXdptS0lUBKB5KpXXe2qMQhsoiEN2pEGRI6+auqhfHCUQB1ZXsfjiOYexKC9fwx7TyFyZ9Jcaf2DTxEhw== +"@sentry/hub@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.12.1.tgz#dffad40cd2b8f44df2d5f20a89df87879cbbf1c3" + integrity sha512-KLVnVqXf+CRmXNy9/T8K2/js7QvOQ94xtgP5KnWJbu2rl+JhxnIGiBRF51lPXFIatt7zWwB9qNdMS8lVsvLMGQ== dependencies: - "@sentry/types" "7.11.1" - "@sentry/utils" "7.11.1" + "@sentry/types" "7.12.1" + "@sentry/utils" "7.12.1" tslib "^1.9.3" -"@sentry/node@7.11.1": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.11.1.tgz#97fd26de26e8203a3c34e26b38f3c2a5ba46828b" - integrity sha512-EAAHou/eHSzwRK0Z5qnQiwXNbkpnjWjloaG979gftA+MS/kM0AxQHdOrSJQbOEaqRf3F7/eC4Hj+1tfglAuaLQ== +"@sentry/node@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.12.1.tgz#ced12d0db3ca5715d699858acb1e2f2ea1d7c59b" + integrity sha512-ZVT2+lLd3gbhOuCOczlFLHH2KnD4EXrq6jRp5Sb2vsSZGVHnVsbD5j7i54zbSBqcydlFqzVMqWSysGTKoYiimw== dependencies: - "@sentry/core" "7.11.1" - "@sentry/hub" "7.11.1" - "@sentry/types" "7.11.1" - "@sentry/utils" "7.11.1" + "@sentry/core" "7.12.1" + "@sentry/hub" "7.12.1" + "@sentry/types" "7.12.1" + "@sentry/utils" "7.12.1" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/tracing@7.11.1": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.11.1.tgz#50cbe82dd5b9a1307b31761cdd4b0d71132cf5c7" - integrity sha512-ilgnHfpdYUWKG/5yAXIfIbPVsCfrC4ONFBR/wN25/hdAyVfXMa3AJx7NCCXxZBOPDWH3hMW8rl4La5yuDbXofg== +"@sentry/tracing@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.12.1.tgz#9f92985f152054ac90b6ec83a33c44e8084a008e" + integrity sha512-WnweIt//IqkEkJSjA8DtnIeCdItYIqJSxNQ6qK+r546/ufxRYFBck2fbmM0oKZJVg2evbwhadrBTIUzYkqNj4A== dependencies: - "@sentry/hub" "7.11.1" - "@sentry/types" "7.11.1" - "@sentry/utils" "7.11.1" + "@sentry/hub" "7.12.1" + "@sentry/types" "7.12.1" + "@sentry/utils" "7.12.1" tslib "^1.9.3" -"@sentry/types@7.11.1": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.11.1.tgz#06e2827f6ba37159c33644208a0453b86d25e232" - integrity sha512-gIEhOPxC2cjrxQ0+K2SFJ1P6e/an5osSxVc9OOtekN28eHtVsXFCLB8XVWeNQnS7N2VkrVrkqORMBz1kvIcvVQ== +"@sentry/types@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.12.1.tgz#eff76d938f9effc62a2ec76cd5c3f04de37f5c15" + integrity sha512-VGZs39SZgMcCGv7H0VyFy1LEFGsnFZH590JUopmz6nG63EpeYQ2xzhIoPNAiLKbyUvBEwukn+faCg3u3MGqhgQ== -"@sentry/utils@7.11.1": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.11.1.tgz#1635c5b223369d9428bc83c9b8908c9c3287ee10" - integrity sha512-tRVXNT5O9ilkV31pyHeTqA1PcPQfMV/2OR6yUYM4ah+QVISovC0f0ybhByuH5nYg6x/Gsnx1o7pc8L1GE3+O7A== +"@sentry/utils@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.12.1.tgz#fcf80fdc332d0bd288e21b13efc7a2f0d604f75a" + integrity sha512-Dh8B13pC0u8uLM/zf+oZngyg808c6BDEO94F7H+h3IciCVVd92A0cOQwLGAEdf8srnJgpZJNAlSC8lFDhbFHzQ== dependencies: - "@sentry/types" "7.11.1" + "@sentry/types" "7.12.1" tslib "^1.9.3" "@sindresorhus/is@^0.14.0": From 055b1c432b4d25bdb099be9047cd998317ccce87 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 16:16:45 +0100 Subject: [PATCH 009/239] test: New Electron versions (#547) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 3fc04a45..13793057 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.11","19.0.16","20.1.2"] +["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.12","19.0.16","20.1.3"] From a41b380a7332565539ebe458c457d66b5400fec3 Mon Sep 17 00:00:00 2001 From: Clifton Hensley <clifton.hensley@gmail.com> Date: Mon, 12 Sep 2022 15:16:07 -0700 Subject: [PATCH 010/239] fix: Page titles in breadcrumbs should not change --- src/main/integrations/electron-breadcrumbs.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/main/integrations/electron-breadcrumbs.ts b/src/main/integrations/electron-breadcrumbs.ts index 33d0fbb5..d7b040f7 100644 --- a/src/main/integrations/electron-breadcrumbs.ts +++ b/src/main/integrations/electron-breadcrumbs.ts @@ -183,14 +183,10 @@ export class ElectronBreadcrumbs implements Integration { }; if (id) { - const state = getRendererProperties(id); + breadcrumb.data = { ...getRendererProperties(id) }; - if (!this._options.captureWindowTitles && state?.title) { - delete state.title; - } - - if (state) { - breadcrumb.data = state; + if (!this._options.captureWindowTitles && breadcrumb.data?.title) { + delete breadcrumb.data?.title; } } From 1d490fef58f603cead7e236b7bbcc0cc9e5ef816 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 12 Sep 2022 23:16:39 +0100 Subject: [PATCH 011/239] Revert "Make the store completely async (#542)" (#552) This reverts commit 14aafd56f09808abc525fe591914d4b6a2336732. --- src/main/integrations/electron-minidump.ts | 7 ++-- src/main/integrations/main-process-session.ts | 2 +- .../integrations/sentry-minidump/index.ts | 8 ++-- src/main/sessions.ts | 32 ++++++++-------- src/main/store.ts | 37 +++++++++---------- src/main/transports/queue.ts | 4 +- 6 files changed, 43 insertions(+), 47 deletions(-) diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts index 7891050c..f30294c7 100644 --- a/src/main/integrations/electron-minidump.ts +++ b/src/main/integrations/electron-minidump.ts @@ -96,10 +96,9 @@ export class ElectronMinidump implements Integration { } // Check if last crash report was likely to have been unreported in the last session - void unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date).then((crashed) => { - // Check if a previous session was not closed - checkPreviousSession(crashed).catch((error) => logger.error(error)); - }); + const previousSessionCrashed = unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date); + // Check if a previous session was not closed + checkPreviousSession(previousSessionCrashed).catch((error) => logger.error(error)); } /** diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts index b165c64b..a780d742 100644 --- a/src/main/integrations/main-process-session.ts +++ b/src/main/integrations/main-process-session.ts @@ -14,7 +14,7 @@ export class MainProcessSession implements Integration { /** @inheritDoc */ public setupOnce(): void { - void startSession(); + startSession(); // We track sessions via the 'will-quit' event which is the last event emitted before close. // diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts index 34c551a1..03967f89 100644 --- a/src/main/integrations/sentry-minidump/index.ts +++ b/src/main/integrations/sentry-minidump/index.ts @@ -26,7 +26,7 @@ export class SentryMinidump implements Integration { private _scopeStore?: Store<Scope>; /** Temp store for the scope of last run */ - private _scopeLastRun?: Promise<Scope>; + private _scopeLastRun?: Scope; private _minidumpLoader?: MinidumpLoader; @@ -170,14 +170,14 @@ export class SentryMinidump implements Integration { private _setupScopeListener(): void { const hubScope = getCurrentHub().getScope(); if (hubScope) { - hubScope.addScopeListener(async (updatedScope) => { + hubScope.addScopeListener((updatedScope) => { const scope = Scope.clone(updatedScope); // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access (scope as any)._eventProcessors = []; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access (scope as any)._scopeListeners = []; - await this._scopeStore?.set(scope); + this._scopeStore?.set(scope); }); } } @@ -224,7 +224,7 @@ export class SentryMinidump implements Integration { return false; } - const storedScope = Scope.clone(await this._scopeLastRun); + const storedScope = Scope.clone(this._scopeLastRun); let newEvent = await storedScope.applyToEvent(event); const hubScope = hub.getScope(); diff --git a/src/main/sessions.ts b/src/main/sessions.ts index 547d1c36..583b215e 100644 --- a/src/main/sessions.ts +++ b/src/main/sessions.ts @@ -1,7 +1,7 @@ import { getCurrentHub } from '@sentry/core'; import { makeSession, updateSession } from '@sentry/hub'; import { flush, NodeClient } from '@sentry/node'; -import { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types'; +import { SerializedSession, SessionContext, SessionStatus } from '@sentry/types'; import { logger } from '@sentry/utils'; import { sentryCachePath } from './fs'; @@ -13,21 +13,22 @@ const PERSIST_INTERVAL_MS = 60_000; const sessionStore = new Store<SessionContext | undefined>(sentryCachePath, 'session', undefined); /** Previous session that did not exit cleanly */ -let previousSession: Promise<Partial<Session> | undefined> | undefined = sessionStore.get(); +let previousSession = sessionStore.get(); +const previousSessionModified = sessionStore.getModifiedDate(); let persistTimer: NodeJS.Timer | undefined; /** Starts a session */ -export async function startSession(): Promise<void> { +export function startSession(): void { const hub = getCurrentHub(); - await sessionStore.set(hub.startSession(), true); + sessionStore.set(hub.startSession()); // Every PERSIST_INTERVAL, write the session to disk - persistTimer = setInterval(async () => { + persistTimer = setInterval(() => { const currentSession = hub.getScope()?.getSession(); // Only bother saving if it hasn't already ended if (currentSession && currentSession.status === 'ok') { - await sessionStore.set(currentSession); + sessionStore.set(currentSession); } }, PERSIST_INTERVAL_MS); } @@ -53,20 +54,19 @@ export async function endSession(): Promise<void> { logger.log('No session'); } - await sessionStore.set(undefined, true); + sessionStore.set(undefined, true); await flush(); } /** Determines if a Date is likely to have occurred in the previous uncompleted session */ -export async function unreportedDuringLastSession(crashDate: Date | undefined): Promise<boolean> { +export function unreportedDuringLastSession(crashDate: Date | undefined): boolean { if (!crashDate) { return false; } - const previousSessionModified = await sessionStore.getModifiedDate(); // There is no previous session - if (previousSessionModified == undefined) { + if (!previousSessionModified) { return false; } @@ -87,11 +87,9 @@ export async function unreportedDuringLastSession(crashDate: Date | undefined): export async function checkPreviousSession(crashed: boolean): Promise<void> { const client = getCurrentHub().getClient<NodeClient>(); - const previous = await previousSession; - - if (previous && client) { + if (previousSession && client) { // Ignore if the previous session is already ended - if (previous.status !== 'ok') { + if (previousSession.status !== 'ok') { previousSession = undefined; return; } @@ -100,13 +98,13 @@ export async function checkPreviousSession(crashed: boolean): Promise<void> { logger.log(`Found previous ${status} session`); - const sesh = makeSession(previous); + const sesh = makeSession(previousSession); updateSession(sesh, { status, errors: (sesh.errors || 0) + 1, - release: (previous as unknown as SerializedSession).attrs?.release, - environment: (previous as unknown as SerializedSession).attrs?.environment, + release: (previousSession as unknown as SerializedSession).attrs?.release, + environment: (previousSession as unknown as SerializedSession).attrs?.environment, }); await client.sendSession(sesh); diff --git a/src/main/store.ts b/src/main/store.ts index be009a79..f34d101f 100644 --- a/src/main/store.ts +++ b/src/main/store.ts @@ -1,7 +1,8 @@ import { logger } from '@sentry/utils'; +import { existsSync, readFileSync, statSync, unlinkSync, writeFileSync } from 'fs'; import { dirname, join } from 'path'; -import { mkdirpSync, readFileAsync, statAsync, unlinkAsync, writeFileAsync } from './fs'; +import { mkdirpSync } from './fs'; const dateFormat = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.*\d{0,10}Z$/; @@ -47,16 +48,16 @@ export class Store<T> { * @param next New data to replace the previous one. * @param forceFlush Forces the write to be flushed to disk immediately */ - public async set(next: T, forceFlush: boolean = false): Promise<void> { + public set(next: T, forceFlush: boolean = false): void { this._data = next; if (!this._flushing) { this._flushing = true; if (forceFlush) { - await this._flush(); + this._flush(); } else { setImmediate(() => { - void this._flush(); + this._flush(); }); } } @@ -66,8 +67,8 @@ export class Store<T> { * Updates data by passing it through the given function. * @param fn A function receiving the current data and returning new one. */ - public async update(fn: (current: T) => T): Promise<void> { - await this.set(fn(await this.get())); + public update(fn: (current: T) => T): void { + this.set(fn(this.get())); } /** @@ -77,10 +78,12 @@ export class Store<T> { * from disk. If the file does not exist, the initial value provided to the * constructor is used. */ - public async get(): Promise<T> { + public get(): T { if (this._data === undefined) { try { - this._data = JSON.parse(await readFileAsync(this._path, 'utf8'), dateReviver) as T; + this._data = existsSync(this._path) + ? (JSON.parse(readFileSync(this._path, 'utf8'), dateReviver) as T) + : this._initial; } catch (e) { this._data = this._initial; } @@ -90,31 +93,27 @@ export class Store<T> { } /** Returns store to its initial state */ - public async clear(): Promise<void> { - await this.set(this._initial); + public clear(): void { + this.set(this._initial); } /** Gets the Date that the file was last modified */ - public async getModifiedDate(): Promise<Date | undefined> { + public getModifiedDate(): Date | undefined { try { - return (await statAsync(this._path))?.mtime; + return statSync(this._path)?.mtime; } catch (_) { return undefined; } } /** Serializes the current data into the JSON file. */ - private async _flush(): Promise<void> { + private _flush(): void { try { if (this._data === undefined) { - try { - await unlinkAsync(this._path); - } catch (_) { - // - } + unlinkSync(this._path); } else { mkdirpSync(dirname(this._path)); - await writeFileAsync(this._path, JSON.stringify(this._data)); + writeFileSync(this._path, JSON.stringify(this._data)); } } catch (e) { logger.warn('Failed to flush store', e); diff --git a/src/main/transports/queue.ts b/src/main/transports/queue.ts index f224cd59..93618935 100644 --- a/src/main/transports/queue.ts +++ b/src/main/transports/queue.ts @@ -33,7 +33,7 @@ export class PersistedRequestQueue { public async add(request: QueuedTransportRequest): Promise<void> { const bodyPath = uuid4(); - await this._queue.update((queue) => { + this._queue.update((queue) => { queue.push({ bodyPath, date: request.date || new Date(), @@ -60,7 +60,7 @@ export class PersistedRequestQueue { let found: PersistedRequest | undefined; const cutOff = Date.now() - MILLISECONDS_PER_DAY * this._maxAgeDays; - await this._queue.update((queue) => { + this._queue.update((queue) => { while ((found = queue.shift())) { // We drop events created in v3 of the SDK or before the cut-off if ('type' in found || found.date.getTime() < cutOff) { From 101c235a6d3421b453b40d993f22a4560772dec3 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 13 Sep 2022 08:13:53 +0100 Subject: [PATCH 012/239] chore: changelog for 4.0.1 release (#553) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3018b887..5c6e47a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ ## Unreleased +## 4.0.1 + +- fix: Page titles in breadcrumbs should not change (#551) +- feat: Update to v7.12.1 of JavaScript SDKs (#548) +- fix: Pass attachments from renderer to main (#536) + + ## 4.0.0 Updating the underlying Sentry JavaScript SDK's to v7 forces a major version bump due to minor breaking changes in user From df20f1ef673320f821d5dd1e74e7f0e98d8803cb Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Tue, 13 Sep 2022 07:14:48 +0000 Subject: [PATCH 013/239] release: 4.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2c1d5fd0..7df00899 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.0.0", + "version": "4.0.1", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From ee939e0d07877f7bb499317d4e166cf65bfcb204 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad <aprasad@sentry.io> Date: Tue, 13 Sep 2022 11:46:23 +0200 Subject: [PATCH 014/239] chore: Add merge target to release action (#555) --- .github/workflows/release.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0ceb5c79..8e02b82e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: Release +name: Prepare Release on: workflow_dispatch: inputs: @@ -8,6 +8,9 @@ on: force: description: Force a release even when there are release-blockers (optional) required: false + merge_target: + description: Target branch to merge into. Uses the default branch as a fallback (optional) + required: false jobs: release: runs-on: ubuntu-latest @@ -24,3 +27,4 @@ jobs: with: version: ${{ github.event.inputs.version }} force: ${{ github.event.inputs.force }} + merge_target: ${{ github.event.inputs.merge_target }} From 382cbcb12f3b8affb7d6a30f7601518739e72e8a Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 13 Sep 2022 12:55:06 +0100 Subject: [PATCH 015/239] test: Automatically update version of @sentry/tracing in e2e tests (#549) --- test/e2e/recipe/index.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts index 3665c972..0f76139e 100644 --- a/test/e2e/recipe/index.ts +++ b/test/e2e/recipe/index.ts @@ -15,6 +15,7 @@ import { parseRecipe, TestRecipe } from './parser'; export * from './normalize'; const SENTRY_KEY = '37f8a2ee37c0409d8970bc7559c7c7e4'; +const TRACING_VERSION = require('../../../package.json').devDependencies['@sentry/tracing']; const log = createLogger('Recipe Runner'); @@ -113,13 +114,15 @@ export class RecipeRunner { .replace('__RATE_LIMIT_DSN__', `http://${SENTRY_KEY}@localhost:${SERVER_PORT}/${RATE_LIMIT_ID}`) .replace('__ERROR_DSN__', `http://${SENTRY_KEY}@localhost:${SERVER_PORT}/${ERROR_ID}`); - // We replace the @sentry/electron dependency in package.json with - // the path to the tarball if (file.endsWith('package.json')) { - content = content.replace( - /"@sentry\/electron": ".*"/, - `"@sentry/electron": "file:./../../../../sentry-electron-${SDK_VERSION}.tgz"`, - ); + content = content + // We replace the @sentry/electron dependency in package.json with the path to the tarball + .replace( + /"@sentry\/electron": ".*"/, + `"@sentry/electron": "file:./../../../../sentry-electron-${SDK_VERSION}.tgz"`, + ) + // We replace the @sentry/tracing dependency version to match that of @sentry/electron + .replace(/"@sentry\/tracing": ".*"/, `"@sentry/tracing": "${TRACING_VERSION}"`); } writeFileSync(path, content); From 203438a6036dc95e7cf04281e9f92bf1eb649ce3 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad <aprasad@sentry.io> Date: Tue, 13 Sep 2022 17:07:00 +0200 Subject: [PATCH 016/239] meta: Changelog for 4.0.2 (#556) Add a patch with no changes so that the npm tag uses this as latest. --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c6e47a7..6597e6b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,13 +2,16 @@ ## Unreleased +## 4.0.2 + +This patch contains no changes. It has been made to make sure the `4.x` set of versions have the `latest` tag on npm. + ## 4.0.1 - fix: Page titles in breadcrumbs should not change (#551) - feat: Update to v7.12.1 of JavaScript SDKs (#548) - fix: Pass attachments from renderer to main (#536) - ## 4.0.0 Updating the underlying Sentry JavaScript SDK's to v7 forces a major version bump due to minor breaking changes in user From 729bc1571ffeeb65d2d2f2768047d4ea0ce76015 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Tue, 13 Sep 2022 15:07:34 +0000 Subject: [PATCH 017/239] release: 4.0.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7df00899..380bcf41 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.0.1", + "version": "4.0.2", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From 0f36293ec8b60ea92f4b4d33a4121da73268afd1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 16 Sep 2022 12:19:11 +0100 Subject: [PATCH 018/239] test: New Electron versions (#558) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 13793057..3f7b4d18 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.12","19.0.16","20.1.3"] +["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.13","19.0.17","20.1.4"] From 15812efc7dd9887647073c158300a846f6dfeed9 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 16 Sep 2022 15:58:53 +0100 Subject: [PATCH 019/239] test: Test less Electron versions (#560) --- .github/workflows/build.yml | 2 +- scripts/e2e-test-versions.js | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 scripts/e2e-test-versions.js diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2e31020e..ef4b97ec 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,7 +32,7 @@ jobs: path: | ${{ github.workspace }}/*.tgz - id: set-matrix - run: echo "::set-output name=matrix::$(cat ./test/e2e/versions.json)" + run: echo "::set-output name=matrix::$(node ./scripts/e2e-test-versions.js)" outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} diff --git a/scripts/e2e-test-versions.js b/scripts/e2e-test-versions.js new file mode 100644 index 00000000..ff6f32a7 --- /dev/null +++ b/scripts/e2e-test-versions.js @@ -0,0 +1,11 @@ +const { readFileSync } = require('fs'); + +const versions = JSON.parse(readFileSync('./test/e2e/versions.json', 'utf8')); + +if (process.env.GITHUB_REF && process.env.GITHUB_REF.includes('release/')) { + // For release builds we test all versions + console.log(JSON.stringify(versions)); +} else { + // Otherwise we test the oldest version and the last 10 versions + console.log(JSON.stringify([versions[0], ...versions.slice(-10)])); +} From b86fab3d456da7851f80e69fee798a562e4ca75f Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 23 Sep 2022 12:19:47 +0100 Subject: [PATCH 020/239] fix: Rewrite async file store (#550) --- package.json | 2 +- src/common/mutex.ts | 104 ++++++++++++ src/main/fs.ts | 35 +--- src/main/integrations/electron-minidump.ts | 7 +- src/main/integrations/main-process-session.ts | 2 +- .../integrations/sentry-minidump/index.ts | 14 +- src/main/sessions.ts | 32 ++-- src/main/store.ts | 156 +++++++++++------- src/main/transports/queue.ts | 12 +- test/e2e/context.ts | 11 +- test/helpers.ts | 9 + test/unit/persist-queue.test.ts | 19 +-- test/unit/store.test.ts | 90 ++++++++++ yarn.lock | 2 +- 14 files changed, 355 insertions(+), 140 deletions(-) create mode 100644 src/common/mutex.ts create mode 100644 test/unit/store.test.ts diff --git a/package.json b/package.json index 380bcf41..5b649ee0 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "@sentry/node": "7.12.1", "@sentry/types": "7.12.1", "@sentry/utils": "7.12.1", - "deepmerge": "^4.2.2", + "deepmerge": "4.2.2", "tslib": "^2.3.1" }, "devDependencies": { diff --git a/src/common/mutex.ts b/src/common/mutex.ts new file mode 100644 index 00000000..602be804 --- /dev/null +++ b/src/common/mutex.ts @@ -0,0 +1,104 @@ +// This code was originally copied from https://github.com/DirtyHairy/async-mutex +// before being significantly simplified for our usage +// +// Copied at commit: 3d2d987e60799d0fa222f1df8f99fc90ed570bfd +// Original licence: + +// The MIT License (MIT) +// +// Copyright (c) 2016 Christian Speckner <cnspeckn@googlemail.com> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +type Releaser = () => void; + +interface QueueEntry { + resolve(result: Releaser): void; + reject(error: unknown): void; +} + +/** An async mutex that queues up tasks for a shared resource */ +export class Mutex { + private _entries: Array<QueueEntry> = []; + private _waiters: Array<Releaser> = []; + private _value: number = 1; + + /** Run a task when all pending tasks are complete */ + public async runExclusive<T>(task: () => Promise<T> | T): Promise<T> { + const release = await this._acquire(); + + try { + return await task(); + } finally { + release(); + } + } + + /** Gets a promise that resolves when all pending tasks are complete */ + private _acquire(): Promise<Releaser> { + return new Promise((resolve, reject) => { + this._entries.push({ resolve, reject }); + + this._dispatch(); + }); + } + + /** Releases after a task is complete */ + private _release(): void { + this._value += 1; + this._dispatch(); + } + + /** Dispatches pending tasks */ + private _dispatch(): void { + for (let weight = this._value; weight > 0; weight--) { + const queueEntry = this._entries?.shift(); + if (!queueEntry) continue; + + this._value -= weight; + weight = this._value + 1; + + queueEntry.resolve(this._newReleaser()); + } + + this._drainUnlockWaiters(); + } + + /** Creates a new releaser */ + private _newReleaser(): Releaser { + let called = false; + + return () => { + if (called) return; + called = true; + + this._release(); + }; + } + + /** Drain unlock waiters */ + private _drainUnlockWaiters(): void { + for (let weight = this._value; weight > 0; weight--) { + if (!this._waiters[weight - 1]) continue; + + this._waiters.forEach((waiter) => waiter()); + this._waiters = []; + } + } +} diff --git a/src/main/fs.ts b/src/main/fs.ts index 68bc5d23..d174effc 100644 --- a/src/main/fs.ts +++ b/src/main/fs.ts @@ -1,5 +1,5 @@ import { app } from 'electron'; -import { mkdir, mkdirSync, readdir, readFile, rename, stat, statSync, unlink, writeFile } from 'fs'; +import { mkdir, readdir, readFile, rename, stat, statSync, unlink, writeFile } from 'fs'; import { dirname, join, resolve } from 'path'; import { promisify } from 'util'; @@ -13,7 +13,7 @@ export const unlinkAsync = promisify(unlink); export const readDirAsync = promisify(readdir); export const renameAsync = promisify(rename); -// mkdir/mkdirSync with recursive was only added in Node 10+ +// mkdir with recursive was only added in Node 10+ /** * Recursively creates the given path. @@ -26,12 +26,12 @@ export async function mkdirp(path: string): Promise<void> { const realPath = resolve(path); try { - return mkdirAsync(realPath, 0o777); + await mkdirAsync(realPath, 0o777); } catch (err) { const error = err as { code: string }; if (error && error.code === 'ENOENT') { await mkdirp(dirname(realPath)); - return mkdirAsync(realPath, 0o777); + await mkdirAsync(realPath, 0o777); } try { @@ -43,30 +43,3 @@ export async function mkdirp(path: string): Promise<void> { } } } - -/** - * Synchronous version of {@link mkdirp}. - * - * @param path A relative or absolute path to create. - */ -export function mkdirpSync(path: string): void { - const realPath = resolve(path); - - try { - mkdirSync(realPath, 0o777); - } catch (err) { - const error = err as { code: string }; - if (error && error.code === 'ENOENT') { - mkdirpSync(dirname(realPath)); - mkdirSync(realPath, 0o777); - } else { - try { - if (!statSync(realPath).isDirectory()) { - throw err; - } - } catch (_) { - throw err; - } - } - } -} diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts index f30294c7..7891050c 100644 --- a/src/main/integrations/electron-minidump.ts +++ b/src/main/integrations/electron-minidump.ts @@ -96,9 +96,10 @@ export class ElectronMinidump implements Integration { } // Check if last crash report was likely to have been unreported in the last session - const previousSessionCrashed = unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date); - // Check if a previous session was not closed - checkPreviousSession(previousSessionCrashed).catch((error) => logger.error(error)); + void unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date).then((crashed) => { + // Check if a previous session was not closed + checkPreviousSession(crashed).catch((error) => logger.error(error)); + }); } /** diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts index a780d742..b165c64b 100644 --- a/src/main/integrations/main-process-session.ts +++ b/src/main/integrations/main-process-session.ts @@ -14,7 +14,7 @@ export class MainProcessSession implements Integration { /** @inheritDoc */ public setupOnce(): void { - startSession(); + void startSession(); // We track sessions via the 'will-quit' event which is the last event emitted before close. // diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts index 03967f89..2a27a279 100644 --- a/src/main/integrations/sentry-minidump/index.ts +++ b/src/main/integrations/sentry-minidump/index.ts @@ -11,7 +11,7 @@ import { sentryCachePath } from '../../fs'; import { getRendererProperties, trackRendererProperties } from '../../renderers'; import { ElectronMainOptions } from '../../sdk'; import { checkPreviousSession, sessionCrashed } from '../../sessions'; -import { Store } from '../../store'; +import { BufferedWriteStore } from '../../store'; import { deleteMinidump, getMinidumpLoader, MinidumpLoader } from './minidump-loader'; /** Sends minidumps via the Sentry uploader */ @@ -23,10 +23,10 @@ export class SentryMinidump implements Integration { public name: string = SentryMinidump.id; /** Store to persist context information beyond application crashes. */ - private _scopeStore?: Store<Scope>; + private _scopeStore?: BufferedWriteStore<Scope>; /** Temp store for the scope of last run */ - private _scopeLastRun?: Scope; + private _scopeLastRun?: Promise<Scope>; private _minidumpLoader?: MinidumpLoader; @@ -41,7 +41,7 @@ export class SentryMinidump implements Integration { this._startCrashReporter(); - this._scopeStore = new Store<Scope>(sentryCachePath, 'scope_v2', new Scope()); + this._scopeStore = new BufferedWriteStore<Scope>(sentryCachePath, 'scope_v2', new Scope()); // We need to store the scope in a variable here so it can be attached to minidumps this._scopeLastRun = this._scopeStore.get(); @@ -170,14 +170,14 @@ export class SentryMinidump implements Integration { private _setupScopeListener(): void { const hubScope = getCurrentHub().getScope(); if (hubScope) { - hubScope.addScopeListener((updatedScope) => { + hubScope.addScopeListener(async (updatedScope) => { const scope = Scope.clone(updatedScope); // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access (scope as any)._eventProcessors = []; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access (scope as any)._scopeListeners = []; - this._scopeStore?.set(scope); + await this._scopeStore?.set(scope); }); } } @@ -224,7 +224,7 @@ export class SentryMinidump implements Integration { return false; } - const storedScope = Scope.clone(this._scopeLastRun); + const storedScope = Scope.clone(await this._scopeLastRun); let newEvent = await storedScope.applyToEvent(event); const hubScope = hub.getScope(); diff --git a/src/main/sessions.ts b/src/main/sessions.ts index 583b215e..0cf890ae 100644 --- a/src/main/sessions.ts +++ b/src/main/sessions.ts @@ -1,7 +1,7 @@ import { getCurrentHub } from '@sentry/core'; import { makeSession, updateSession } from '@sentry/hub'; import { flush, NodeClient } from '@sentry/node'; -import { SerializedSession, SessionContext, SessionStatus } from '@sentry/types'; +import { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types'; import { logger } from '@sentry/utils'; import { sentryCachePath } from './fs'; @@ -13,22 +13,21 @@ const PERSIST_INTERVAL_MS = 60_000; const sessionStore = new Store<SessionContext | undefined>(sentryCachePath, 'session', undefined); /** Previous session that did not exit cleanly */ -let previousSession = sessionStore.get(); -const previousSessionModified = sessionStore.getModifiedDate(); +let previousSession: Promise<Partial<Session> | undefined> | undefined = sessionStore.get(); let persistTimer: NodeJS.Timer | undefined; /** Starts a session */ -export function startSession(): void { +export async function startSession(): Promise<void> { const hub = getCurrentHub(); - sessionStore.set(hub.startSession()); + await sessionStore.set(hub.startSession()); // Every PERSIST_INTERVAL, write the session to disk - persistTimer = setInterval(() => { + persistTimer = setInterval(async () => { const currentSession = hub.getScope()?.getSession(); // Only bother saving if it hasn't already ended if (currentSession && currentSession.status === 'ok') { - sessionStore.set(currentSession); + await sessionStore.set(currentSession); } }, PERSIST_INTERVAL_MS); } @@ -54,19 +53,20 @@ export async function endSession(): Promise<void> { logger.log('No session'); } - sessionStore.set(undefined, true); + await sessionStore.clear(); await flush(); } /** Determines if a Date is likely to have occurred in the previous uncompleted session */ -export function unreportedDuringLastSession(crashDate: Date | undefined): boolean { +export async function unreportedDuringLastSession(crashDate: Date | undefined): Promise<boolean> { if (!crashDate) { return false; } + const previousSessionModified = await sessionStore.getModifiedDate(); // There is no previous session - if (!previousSessionModified) { + if (previousSessionModified == undefined) { return false; } @@ -87,9 +87,11 @@ export function unreportedDuringLastSession(crashDate: Date | undefined): boolea export async function checkPreviousSession(crashed: boolean): Promise<void> { const client = getCurrentHub().getClient<NodeClient>(); - if (previousSession && client) { + const previous = await previousSession; + + if (previous && client) { // Ignore if the previous session is already ended - if (previousSession.status !== 'ok') { + if (previous.status !== 'ok') { previousSession = undefined; return; } @@ -98,13 +100,13 @@ export async function checkPreviousSession(crashed: boolean): Promise<void> { logger.log(`Found previous ${status} session`); - const sesh = makeSession(previousSession); + const sesh = makeSession(previous); updateSession(sesh, { status, errors: (sesh.errors || 0) + 1, - release: (previousSession as unknown as SerializedSession).attrs?.release, - environment: (previousSession as unknown as SerializedSession).attrs?.environment, + release: (previous as unknown as SerializedSession).attrs?.release, + environment: (previous as unknown as SerializedSession).attrs?.environment, }); await client.sendSession(sesh); diff --git a/src/main/store.ts b/src/main/store.ts index f34d101f..291de428 100644 --- a/src/main/store.ts +++ b/src/main/store.ts @@ -1,8 +1,8 @@ import { logger } from '@sentry/utils'; -import { existsSync, readFileSync, statSync, unlinkSync, writeFileSync } from 'fs'; import { dirname, join } from 'path'; -import { mkdirpSync } from './fs'; +import { Mutex } from '../common/mutex'; +import { mkdirp, readFileAsync, statAsync, unlinkAsync, writeFileAsync } from './fs'; const dateFormat = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.*\d{0,10}Z$/; @@ -16,19 +16,18 @@ function dateReviver(_: string, value: any): any { } /** - * Note, this class is only compatible with Node. - * Lazily serializes data to a JSON file to persist. When created, it loads data - * from that file if it already exists. + * Stores data serialized to a JSON file. */ export class Store<T> { + /** Current state of the data. */ + protected _data?: T; + /** Internal path for JSON file. */ private readonly _path: string; /** Value used to initialize data for the first time. */ private readonly _initial: T; - /** Current state of the data. */ - private _data?: T; - /** State whether a flush to disk has been requested in this cycle. */ - private _flushing: boolean; + /** A mutex to ensure that there aren't races while reading and writing files */ + private _lock: Mutex = new Mutex(); /** * Creates a new store. @@ -40,35 +39,34 @@ export class Store<T> { public constructor(path: string, id: string, initial: T) { this._path = join(path, `${id}.json`); this._initial = initial; - this._flushing = false; } /** * Updates data by replacing it with the given value. - * @param next New data to replace the previous one. - * @param forceFlush Forces the write to be flushed to disk immediately + * @param data New data to replace the previous one. */ - public set(next: T, forceFlush: boolean = false): void { - this._data = next; - - if (!this._flushing) { - this._flushing = true; - if (forceFlush) { - this._flush(); - } else { - setImmediate(() => { - this._flush(); - }); - } - } - } + public async set(data: T): Promise<void> { + await this._lock.runExclusive(async () => { + this._data = data; - /** - * Updates data by passing it through the given function. - * @param fn A function receiving the current data and returning new one. - */ - public update(fn: (current: T) => T): void { - this.set(fn(this.get())); + try { + if (data === undefined) { + try { + await unlinkAsync(this._path); + } catch (_) { + // + } + } else { + await mkdirp(dirname(this._path)); + await writeFileAsync(this._path, JSON.stringify(data)); + } + } catch (e) { + logger.warn('Failed to write to store', e); + // This usually fails due to anti virus scanners, issues in the file + // system, or problems with network drives. We cannot fix or handle this + // issue and must resume gracefully. Thus, we have to ignore this error. + } + }); } /** @@ -78,50 +76,84 @@ export class Store<T> { * from disk. If the file does not exist, the initial value provided to the * constructor is used. */ - public get(): T { - if (this._data === undefined) { - try { - this._data = existsSync(this._path) - ? (JSON.parse(readFileSync(this._path, 'utf8'), dateReviver) as T) - : this._initial; - } catch (e) { - this._data = this._initial; + public async get(): Promise<T> { + return await this._lock.runExclusive(async () => { + if (this._data === undefined) { + try { + this._data = JSON.parse(await readFileAsync(this._path, 'utf8'), dateReviver) as T; + } catch (e) { + this._data = this._initial; + } } - } - return this._data; + return this._data; + }); + } + + /** + * Updates data by passing it through the given function. + * @param fn A function receiving the current data and returning new one. + */ + public async update(fn: (current: T) => T): Promise<void> { + await this.set(fn(await this.get())); } /** Returns store to its initial state */ - public clear(): void { - this.set(this._initial); + public async clear(): Promise<void> { + await this.set(this._initial); } /** Gets the Date that the file was last modified */ - public getModifiedDate(): Date | undefined { + public async getModifiedDate(): Promise<Date | undefined> { try { - return statSync(this._path)?.mtime; + return (await statAsync(this._path))?.mtime; } catch (_) { return undefined; } } +} - /** Serializes the current data into the JSON file. */ - private _flush(): void { - try { - if (this._data === undefined) { - unlinkSync(this._path); - } else { - mkdirpSync(dirname(this._path)); - writeFileSync(this._path, JSON.stringify(this._data)); - } - } catch (e) { - logger.warn('Failed to flush store', e); - // This usually fails due to anti virus scanners, issues in the file - // system, or problems with network drives. We cannot fix or handle this - // issue and must resume gracefully. Thus, we have to ignore this error. - } finally { - this._flushing = false; +/** + * Extends Store to throttle writes. + */ +export class BufferedWriteStore<T> extends Store<T> { + /** The minimum time between writes */ + private readonly _throttleTime?: number; + /** A write that hasn't been written to disk yet */ + private _pendingWrite: { data: T; timeout: NodeJS.Timeout } | undefined; + + /** + * Creates a new ThrottledStore. + * + * @param path A unique filename to store this data. + * @param id A unique filename to store this data. + * @param initial An initial value to initialize data with. + * @param throttleTime The minimum time between writes + */ + public constructor(path: string, id: string, initial: T, throttleTime: number = 500) { + super(path, id, initial); + this._throttleTime = throttleTime; + } + + /** @inheritdoc */ + public override async set(data: T): Promise<void> { + this._data = data; + + this._pendingWrite = { + // We overwrite the data for the pending write so that the latest data is written in the next flush + data, + // If there is already a pending timeout, we keep that rather than starting the timeout again + timeout: this._pendingWrite?.timeout || setTimeout(() => this._writePending(), this._throttleTime), + }; + } + + /** Writes the pending write to disk */ + private _writePending(): void { + if (this._pendingWrite) { + const data = this._pendingWrite.data; + // Clear the pending write immediately so that subsequent writes can be queued + this._pendingWrite = undefined; + void super.set(data); } } } diff --git a/src/main/transports/queue.ts b/src/main/transports/queue.ts index 93618935..9448281c 100644 --- a/src/main/transports/queue.ts +++ b/src/main/transports/queue.ts @@ -3,7 +3,7 @@ import { logger, uuid4 } from '@sentry/utils'; import { join } from 'path'; import { readFileAsync, unlinkAsync, writeFileAsync } from '../fs'; -import { Store } from '../store'; +import { BufferedWriteStore } from '../store'; const MILLISECONDS_PER_DAY = 86_400_000; @@ -21,7 +21,11 @@ export interface QueuedTransportRequest extends TransportRequest { /** A request queue that is persisted to disk to survive app restarts */ export class PersistedRequestQueue { - private readonly _queue: Store<PersistedRequest[]> = new Store(this._queuePath, 'queue', []); + private readonly _queue: BufferedWriteStore<PersistedRequest[]> = new BufferedWriteStore( + this._queuePath, + 'queue', + [], + ); public constructor( private readonly _queuePath: string, @@ -33,7 +37,7 @@ export class PersistedRequestQueue { public async add(request: QueuedTransportRequest): Promise<void> { const bodyPath = uuid4(); - this._queue.update((queue) => { + await this._queue.update((queue) => { queue.push({ bodyPath, date: request.date || new Date(), @@ -60,7 +64,7 @@ export class PersistedRequestQueue { let found: PersistedRequest | undefined; const cutOff = Date.now() - MILLISECONDS_PER_DAY * this._maxAgeDays; - this._queue.update((queue) => { + await this._queue.update((queue) => { while ((found = queue.shift())) { // We drop events created in v3 of the SDK or before the cut-off if ('type' in found || found.date.getTime() < cutOff) { diff --git a/test/e2e/context.ts b/test/e2e/context.ts index 6dd42c09..aaab4ef6 100644 --- a/test/e2e/context.ts +++ b/test/e2e/context.ts @@ -63,6 +63,7 @@ export class TestContext { if (!options.secondRun) { env.APP_FIRST_RUN = true; + this._clearAppUserData(); } const childProcess = spawn(this._electronPath, [this._appPath], { env }); @@ -110,9 +111,7 @@ export class TestContext { await this.mainProcess.kill(); if (!options.retainData) { - for (const dir of getDeleteDirectories(this._appName)) { - rmSync(dir, { recursive: true, force: true }); - } + this._clearAppUserData(); } log('Test app stopped'); @@ -177,6 +176,12 @@ export class TestContext { public get isStarted(): boolean { return this._started; } + + private _clearAppUserData() { + for (const dir of getDeleteDirectories(this._appName)) { + rmSync(dir, { recursive: true, force: true }); + } + } } /** Handle for a running process. */ diff --git a/test/helpers.ts b/test/helpers.ts index ad5fd93f..e8ef05ca 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -1,5 +1,14 @@ +import { expect } from 'chai'; + +import { walkSync } from './e2e/utils'; + export function delay(ms: number): Promise<void> { return new Promise((resolve) => { setTimeout(resolve, ms); }); } + +export async function expectFilesInDirectory(dir: string, count: number): Promise<void> { + const found = Array.from(walkSync(dir)).length; + expect(found, 'files in directory').to.equal(count); +} diff --git a/test/unit/persist-queue.test.ts b/test/unit/persist-queue.test.ts index 7cc50641..19fab5ad 100644 --- a/test/unit/persist-queue.test.ts +++ b/test/unit/persist-queue.test.ts @@ -3,20 +3,11 @@ import chaiAsPromised = require('chai-as-promised'); import * as tmp from 'tmp'; import { PersistedRequestQueue, QueuedTransportRequest } from '../../src/main/transports/queue'; -import { walkSync } from '../e2e/utils'; -import { delay } from '../helpers'; +import { delay, expectFilesInDirectory } from '../helpers'; should(); use(chaiAsPromised); -async function expectFilesInDirectory(dir: string, count: number): Promise<void> { - // We delay because store flushing is async and not waited on - await delay(500); - - const found = Array.from(walkSync(dir)).length; - expect(found, 'files in directory').to.equal(count); -} - describe('PersistedRequestQueue', () => { let tempDir: tmp.DirResult; beforeEach(() => { @@ -34,9 +25,8 @@ describe('PersistedRequestQueue', () => { await expectFilesInDirectory(tempDir.name, 0); await queue.add({ body: 'just a string' }); - await expectFilesInDirectory(tempDir.name, 2); - await delay(1_000); + await expectFilesInDirectory(tempDir.name, 2); // We create a new queue to force reading from serialized store const queue2 = new PersistedRequestQueue(tempDir.name); @@ -46,6 +36,7 @@ describe('PersistedRequestQueue', () => { expect(popped?.body).to.not.be.undefined; expect(popped?.body.toString()).to.equal('just a string'); + await delay(1_000); await expectFilesInDirectory(tempDir.name, 1); }); @@ -60,6 +51,7 @@ describe('PersistedRequestQueue', () => { await queue.add({ body: '6' }); await queue.add({ body: '7' }); + await delay(1_000); await expectFilesInDirectory(tempDir.name, 6); const popped: QueuedTransportRequest[] = []; @@ -71,6 +63,7 @@ describe('PersistedRequestQueue', () => { expect(popped.length).to.equal(5); expect(popped.map((p) => p.body.toString()).join('')).to.equal('34567'); + await delay(1_000); await expectFilesInDirectory(tempDir.name, 1); }); @@ -82,6 +75,7 @@ describe('PersistedRequestQueue', () => { await queue.add({ body: 'so old 3', date: new Date(Date.now() - 100_000_000) }); await queue.add({ body: 'so old 4' }); + await delay(1_000); await expectFilesInDirectory(tempDir.name, 5); const pop = await queue.pop(); @@ -89,6 +83,7 @@ describe('PersistedRequestQueue', () => { const pop2 = await queue.pop(); expect(pop2).to.be.undefined; + await delay(1_000); await expectFilesInDirectory(tempDir.name, 1); }); }); diff --git a/test/unit/store.test.ts b/test/unit/store.test.ts new file mode 100644 index 00000000..4c82cf36 --- /dev/null +++ b/test/unit/store.test.ts @@ -0,0 +1,90 @@ +import { expect, should, use } from 'chai'; +import chaiAsPromised = require('chai-as-promised'); +import { join } from 'path'; +import * as tmp from 'tmp'; + +import { readFileAsync } from '../../src/main/fs'; +import { BufferedWriteStore, Store } from '../../src/main/store'; +import { delay, expectFilesInDirectory } from '../helpers'; + +should(); +use(chaiAsPromised); + +interface TestType { + num: number; + str: string; +} + +describe('Store', () => { + let tempDir: tmp.DirResult; + beforeEach(() => { + tempDir = tmp.dirSync({ unsafeCleanup: true }); + }); + + afterEach(() => { + if (tempDir) { + tempDir.removeCallback(); + } + }); + + it('Non throttled store', async () => { + const store = new Store<TestType | undefined>(tempDir.name, 'test-store', undefined); + await expectFilesInDirectory(tempDir.name, 0); + + await store.set({ num: 99, str: 'just a string' }); + // It should have been written immediately + await expectFilesInDirectory(tempDir.name, 1); + const contents = await readFileAsync(join(tempDir.name, 'test-store.json'), 'utf-8'); + + expect(contents).to.equal('{"num":99,"str":"just a string"}'); + + // Load a new store instance so it's forced to read from disk + const store2 = new Store<TestType | undefined>(tempDir.name, 'test-store', undefined); + const value = await store2.get(); + + expect(value).to.eql({ num: 99, str: 'just a string' }); + + await store2.clear(); + // File should now be deleted + await expectFilesInDirectory(tempDir.name, 0); + }); + + it('Throttled store', async () => { + const store = new BufferedWriteStore<TestType | undefined>(tempDir.name, 'test-store', undefined); + await expectFilesInDirectory(tempDir.name, 0); + + await store.set({ num: 990, str: 'just a string' }); + // File should not be written after 100ms! + await delay(100); + await expectFilesInDirectory(tempDir.name, 0); + // Should have been written after 1 more second + await delay(1_000); + await expectFilesInDirectory(tempDir.name, 1); + + const contents = await readFileAsync(join(tempDir.name, 'test-store.json'), 'utf-8'); + expect(contents).to.equal('{"num":990,"str":"just a string"}'); + + await store.set({ num: 5_000, str: 'just a string' }); + await delay(100); + + // File should still contain the old value + const contents2 = await readFileAsync(join(tempDir.name, 'test-store.json'), 'utf-8'); + expect(contents2).to.equal('{"num":990,"str":"just a string"}'); + + await delay(1_000); + // File should now contain updated value + const contents3 = await readFileAsync(join(tempDir.name, 'test-store.json'), 'utf-8'); + expect(contents3).to.equal('{"num":5000,"str":"just a string"}'); + + // Load a new store instance so it's forced to read from disk + const store2 = new BufferedWriteStore<TestType | undefined>(tempDir.name, 'test-store', undefined); + const value = await store2.get(); + + expect(value).to.eql({ num: 5_000, str: 'just a string' }); + + await store2.clear(); + await delay(1_000); + // File should now be deleted + await expectFilesInDirectory(tempDir.name, 0); + }); +}); diff --git a/yarn.lock b/yarn.lock index 27aab6e8..c91872ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1062,7 +1062,7 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^4.2.2: +deepmerge@4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== From 59787026ad84b2f1ef8f96f9ae9b1f3bec1760bc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 23 Sep 2022 12:51:22 +0100 Subject: [PATCH 021/239] test: New Electron versions (#562) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 3f7b4d18..49cb443e 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.13","19.0.17","20.1.4"] +["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.13","19.0.17","20.2.0"] From aaf65dbb49735c662adbd45dcc618ba45bc8004d Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Sun, 25 Sep 2022 16:11:10 +0100 Subject: [PATCH 022/239] Update JavaScript SDKs to 7.13.0 (#563) --- package.json | 18 ++++---- yarn.lock | 116 +++++++++++++++++++++++++-------------------------- 2 files changed, 67 insertions(+), 67 deletions(-) diff --git a/package.json b/package.json index 5b649ee0..0db2547a 100644 --- a/package.json +++ b/package.json @@ -57,19 +57,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.12.1", - "@sentry/core": "7.12.1", - "@sentry/hub": "7.12.1", - "@sentry/node": "7.12.1", - "@sentry/types": "7.12.1", - "@sentry/utils": "7.12.1", + "@sentry/browser": "7.13.0", + "@sentry/core": "7.13.0", + "@sentry/hub": "7.13.0", + "@sentry/node": "7.13.0", + "@sentry/types": "7.13.0", + "@sentry/utils": "7.13.0", "deepmerge": "4.2.2", "tslib": "^2.3.1" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.12.1", - "@sentry-internal/typescript": "7.12.1", - "@sentry/tracing": "7.12.1", + "@sentry-internal/eslint-config-sdk": "7.13.0", + "@sentry-internal/typescript": "7.13.0", + "@sentry/tracing": "7.13.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/yarn.lock b/yarn.lock index c91872ba..3c5fff4b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -100,13 +100,13 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@sentry-internal/eslint-config-sdk@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.12.1.tgz#2eea4ca6ad3013ddb274031f1cc377be7a2adb07" - integrity sha512-a8vrOTQAmnU7jECSy7wiXf3/Z156lSud1tWZmKI8FPakvmidISPu7m96TlAY/fSysv2UoiKMjpfpBizjttnIGA== +"@sentry-internal/eslint-config-sdk@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.13.0.tgz#0aca52992a90ba52f30f655bd88f62990c8a19ae" + integrity sha512-l4HcT//w4Ubqc2PV58hJux6sf/NgMG5ahHUhC2LupJICpZPvFAp3lwSZkm/ejSElaX1LYGLW8giZqiix+ssVOQ== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.12.1" - "@sentry-internal/typescript" "7.12.1" + "@sentry-internal/eslint-plugin-sdk" "7.13.0" + "@sentry-internal/typescript" "7.13.0" "@typescript-eslint/eslint-plugin" "^3.9.0" "@typescript-eslint/parser" "^3.9.0" eslint-config-prettier "^6.11.0" @@ -115,82 +115,82 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.12.1.tgz#9aea7ba346f07036479fb114b6d4d3d90b218a22" - integrity sha512-q1Ke/14TWDbAoc2In7+jGNw0xXVfQgHows9/uhNXHhI68PjdtO2dKUR66kgbHiZe5O/4lGTlxzRTANBSKOShtA== +"@sentry-internal/eslint-plugin-sdk@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.13.0.tgz#ca7d97d3bbd618ad44293490c387fc86f3db5e45" + integrity sha512-ZKejUx7FLiOB+cY/3YbV1/TamMFm8IOE54dTK2e148MbBvefM1mNjI5gbUcBMDCVk3CR5PO/2SkeRMBcEZfw1A== dependencies: requireindex "~1.1.0" -"@sentry-internal/typescript@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.12.1.tgz#e08d8275aa8ac1f60c67fe605275eb031aba5eb6" - integrity sha512-79UcEk5++A7jUyTOa/DX/jJRW1OMcjtVqCk+aXF5hZbHM7qNjL1F8ZClxEq2SSstwuF0Q+ESHwK30VUR79NbwQ== +"@sentry-internal/typescript@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.13.0.tgz#86b7014859002eb5860e560fbc9d9c20e71d98d3" + integrity sha512-dAyNQR7a2GTMSOkGxWXRNWUmM/u8rhM1sY+d1817IXstTiLN2PFWVnpvyup32p5H7jasW/nuIDGjWjzZoY3/9Q== -"@sentry/browser@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.12.1.tgz#2be6fa5c2529a2a75abac4d00aca786362302a1a" - integrity sha512-pgyL65CrGFLe8sKcEG8KXAuVTE8zkAsyTlv/AuME06cSdxzO/memPK/r3BI6EM7WupIdga+V5tQUldeT1kgHNA== +"@sentry/browser@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.13.0.tgz#883b8598c8a0c33af246242e7172e39306dc564a" + integrity sha512-WbgClHPYe8TKsdVVbuzd6alxwh3maFQNuljMkSTnYvPx2P+NT0wHljTs37D39FGfSmAwaqn7D/1ZHAtC+6mWxA== dependencies: - "@sentry/core" "7.12.1" - "@sentry/types" "7.12.1" - "@sentry/utils" "7.12.1" + "@sentry/core" "7.13.0" + "@sentry/types" "7.13.0" + "@sentry/utils" "7.13.0" tslib "^1.9.3" -"@sentry/core@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.12.1.tgz#a22f1c530ed528a699ed204c36eb5fc8d308103d" - integrity sha512-DFHbzHFjukhlkRZ5xzfebx0IBzblW43kmfnalBBq7xEMscUvnhsYnlvL9Y20tuPZ/PrTcq4JAHbFluAvw6M0QQ== +"@sentry/core@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.13.0.tgz#65597d71f8bfa1186f34009803e03ca9edb3adee" + integrity sha512-hB46fklmKrSDMEvZOF8qBHhys7PONBFyxQtbNDZUlv/kabs4gF3VEg1ftCaXnjx4lLNlsUl/ScFdM6194RvISg== dependencies: - "@sentry/hub" "7.12.1" - "@sentry/types" "7.12.1" - "@sentry/utils" "7.12.1" + "@sentry/hub" "7.13.0" + "@sentry/types" "7.13.0" + "@sentry/utils" "7.13.0" tslib "^1.9.3" -"@sentry/hub@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.12.1.tgz#dffad40cd2b8f44df2d5f20a89df87879cbbf1c3" - integrity sha512-KLVnVqXf+CRmXNy9/T8K2/js7QvOQ94xtgP5KnWJbu2rl+JhxnIGiBRF51lPXFIatt7zWwB9qNdMS8lVsvLMGQ== +"@sentry/hub@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.13.0.tgz#752068e528cfb277ed154bc94e311cad50ef792e" + integrity sha512-88/GsD1BoyrBwRKJCmVHZtSH5rizOsImUHWEXc1AOa1aR8nanfn56JdAbd6tC55pA+nT4R4H4vN/PrUaomTbtg== dependencies: - "@sentry/types" "7.12.1" - "@sentry/utils" "7.12.1" + "@sentry/types" "7.13.0" + "@sentry/utils" "7.13.0" tslib "^1.9.3" -"@sentry/node@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.12.1.tgz#ced12d0db3ca5715d699858acb1e2f2ea1d7c59b" - integrity sha512-ZVT2+lLd3gbhOuCOczlFLHH2KnD4EXrq6jRp5Sb2vsSZGVHnVsbD5j7i54zbSBqcydlFqzVMqWSysGTKoYiimw== +"@sentry/node@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.13.0.tgz#0e073b75d4cce684db006d93ef18f2de2cf2f60e" + integrity sha512-uP3bPAIRHPilnOEiYGQQDLaQphc/c7d87wm91bZrTJ+WPnMW4D/NmT7fna5zGGDQIr/KTdQ/LEpDeZOILbkCqQ== dependencies: - "@sentry/core" "7.12.1" - "@sentry/hub" "7.12.1" - "@sentry/types" "7.12.1" - "@sentry/utils" "7.12.1" + "@sentry/core" "7.13.0" + "@sentry/hub" "7.13.0" + "@sentry/types" "7.13.0" + "@sentry/utils" "7.13.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/tracing@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.12.1.tgz#9f92985f152054ac90b6ec83a33c44e8084a008e" - integrity sha512-WnweIt//IqkEkJSjA8DtnIeCdItYIqJSxNQ6qK+r546/ufxRYFBck2fbmM0oKZJVg2evbwhadrBTIUzYkqNj4A== +"@sentry/tracing@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.13.0.tgz#521dc021dab78e37e29b0f90b01cb444337adfc4" + integrity sha512-/MKSd25rGv6Pc0FPBLXJifkfvSaYVPA8XUOLzVeDN0gl07h8AXli4qG9amTh/4Wb5h4dFpbcscOvW2VC+pxkIA== dependencies: - "@sentry/hub" "7.12.1" - "@sentry/types" "7.12.1" - "@sentry/utils" "7.12.1" + "@sentry/hub" "7.13.0" + "@sentry/types" "7.13.0" + "@sentry/utils" "7.13.0" tslib "^1.9.3" -"@sentry/types@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.12.1.tgz#eff76d938f9effc62a2ec76cd5c3f04de37f5c15" - integrity sha512-VGZs39SZgMcCGv7H0VyFy1LEFGsnFZH590JUopmz6nG63EpeYQ2xzhIoPNAiLKbyUvBEwukn+faCg3u3MGqhgQ== +"@sentry/types@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.13.0.tgz#398e33e5c92ea0ce91e2c86e3ab003fe00c471a2" + integrity sha512-ttckM1XaeyHRLMdr79wmGA5PFbTGx2jio9DCD/mkEpSfk6OGfqfC7gpwy7BNstDH/VKyQj/lDCJPnwvWqARMoQ== -"@sentry/utils@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.12.1.tgz#fcf80fdc332d0bd288e21b13efc7a2f0d604f75a" - integrity sha512-Dh8B13pC0u8uLM/zf+oZngyg808c6BDEO94F7H+h3IciCVVd92A0cOQwLGAEdf8srnJgpZJNAlSC8lFDhbFHzQ== +"@sentry/utils@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.13.0.tgz#0d47a9278806ece78ba3a83c7dbebce817462759" + integrity sha512-jnR85LgRLSk7IQe2OhKOPMY4fasJCNQNW0iCXsH+S2R1qnsF+N4ksNkQ+7JyyM9E7F03YpI2qd76bKY0VIn5iA== dependencies: - "@sentry/types" "7.12.1" + "@sentry/types" "7.13.0" tslib "^1.9.3" "@sindresorhus/is@^0.14.0": From cc75f592937c00e4fca6c6b1d5946c058a9aef87 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 27 Sep 2022 12:18:49 +0100 Subject: [PATCH 023/239] test: New Electron versions (#565) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 49cb443e..31efdba7 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.13","19.0.17","20.2.0"] +["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.14","19.1.0","20.2.0","21.0.0"] From 7a58f3408ca7071ee541625f30bec793c66eac92 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 1 Oct 2022 21:43:24 +0100 Subject: [PATCH 024/239] test: New Electron versions (#566) Co-authored-by: timfish <timfish@users.noreply.github.com> --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 31efdba7..98456b52 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.14","19.1.0","20.2.0","21.0.0"] +["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.1","20.3.0","21.0.1"] From d54ec96fb55f18bb1497d092a8ddeafb0c3d52c6 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 5 Oct 2022 17:05:42 +0200 Subject: [PATCH 025/239] fix: Main process options should be a union with NodeOptions (#569) --- src/main/sdk.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/sdk.ts b/src/main/sdk.ts index e1db482a..9584dc31 100644 --- a/src/main/sdk.ts +++ b/src/main/sdk.ts @@ -1,7 +1,7 @@ import { ensureProcess, IPCMode } from '../common'; ensureProcess('main'); -import { defaultIntegrations as defaultNodeIntegrations, init as nodeInit } from '@sentry/node'; +import { defaultIntegrations as defaultNodeIntegrations, init as nodeInit, NodeOptions } from '@sentry/node'; import { Integration, Options } from '@sentry/types'; import { Session, session, WebContents } from 'electron'; @@ -79,7 +79,8 @@ export interface ElectronMainOptionsInternal extends Options<ElectronOfflineTran // getSessions and ipcMode properties are optional because they have defaults export type ElectronMainOptions = Pick<Partial<ElectronMainOptionsInternal>, 'getSessions' | 'ipcMode'> & - Omit<ElectronMainOptionsInternal, 'getSessions' | 'ipcMode'>; + Omit<ElectronMainOptionsInternal, 'getSessions' | 'ipcMode'> & + NodeOptions; const defaultOptions: ElectronMainOptionsInternal = { _metadata: { sdk: { name: 'sentry.javascript.electron', version: SDK_VERSION } }, From 84dc9b9fec7ceb91544f8e6a81fa245ac28d6697 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 6 Oct 2022 10:45:59 +0200 Subject: [PATCH 026/239] docs: Add process specific imports to readme (#570) --- CHANGELOG.md | 4 ++++ README.md | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6597e6b2..77608318 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## 4.0.3 + +- fix: `ElectronMainOptions` type should be a union with `NodeOptions` + ## 4.0.2 This patch contains no changes. It has been made to make sure the `4.x` set of versions have the `latest` tag on npm. diff --git a/README.md b/README.md index 6689ad7f..8e6f8c2c 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,15 @@ init({ // ... }); ``` +If you are using a JavaScript bundler, you may need to use the process specific imports to ensure the correct code is loaded for +each process: +```javascript +// In the Electron main process +import { init } from '@sentry/electron/main'; + +// In the Electron renderer processes +import { init } from '@sentry/electron/renderer'; +``` To set context information or send manual events, use the exported functions of `@sentry/electron`. Note that these functions will not perform any action before you have called `init()`: From 2889482b8fd6e7abb24d91d7ea1573211d86dbaa Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Thu, 6 Oct 2022 08:47:11 +0000 Subject: [PATCH 027/239] release: 4.0.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0db2547a..b05de3c6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.0.2", + "version": "4.0.3", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From 689009e1725ef9477d41099e7e69b6fb37f32252 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 6 Oct 2022 11:55:28 +0200 Subject: [PATCH 028/239] test: New Electron versions (#571) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 98456b52..272216cc 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.1","20.3.0","21.0.1"] +["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.2","20.3.1","21.1.0"] From b9da0a2ff7b679bc04dfa9eaf9abb10f552d0c88 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 11 Oct 2022 16:03:01 +0200 Subject: [PATCH 029/239] feat: Update to v7.15.0 of Sentry JavaScript SDKs (#572) --- package.json | 17 +++---- src/main/sessions.ts | 3 +- yarn.lock | 115 +++++++++++++++++++++---------------------- 3 files changed, 66 insertions(+), 69 deletions(-) diff --git a/package.json b/package.json index b05de3c6..0b71277f 100644 --- a/package.json +++ b/package.json @@ -57,19 +57,18 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.13.0", - "@sentry/core": "7.13.0", - "@sentry/hub": "7.13.0", - "@sentry/node": "7.13.0", - "@sentry/types": "7.13.0", - "@sentry/utils": "7.13.0", + "@sentry/browser": "7.15.0", + "@sentry/core": "7.15.0", + "@sentry/node": "7.15.0", + "@sentry/types": "7.15.0", + "@sentry/utils": "7.15.0", "deepmerge": "4.2.2", "tslib": "^2.3.1" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.13.0", - "@sentry-internal/typescript": "7.13.0", - "@sentry/tracing": "7.13.0", + "@sentry-internal/eslint-config-sdk": "7.15.0", + "@sentry-internal/typescript": "7.15.0", + "@sentry/tracing": "7.15.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/main/sessions.ts b/src/main/sessions.ts index 0cf890ae..2efc7966 100644 --- a/src/main/sessions.ts +++ b/src/main/sessions.ts @@ -1,5 +1,4 @@ -import { getCurrentHub } from '@sentry/core'; -import { makeSession, updateSession } from '@sentry/hub'; +import { getCurrentHub, makeSession, updateSession } from '@sentry/core'; import { flush, NodeClient } from '@sentry/node'; import { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types'; import { logger } from '@sentry/utils'; diff --git a/yarn.lock b/yarn.lock index 3c5fff4b..d674b541 100644 --- a/yarn.lock +++ b/yarn.lock @@ -100,13 +100,13 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@sentry-internal/eslint-config-sdk@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.13.0.tgz#0aca52992a90ba52f30f655bd88f62990c8a19ae" - integrity sha512-l4HcT//w4Ubqc2PV58hJux6sf/NgMG5ahHUhC2LupJICpZPvFAp3lwSZkm/ejSElaX1LYGLW8giZqiix+ssVOQ== +"@sentry-internal/eslint-config-sdk@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.15.0.tgz#7f33c6c39c720132d9816364d55751cd26ab34e4" + integrity sha512-ttLoetchz0NkRuv8xkab/NF3u67lwWidYAIr8dV0Gc/wuefLwGr/XWdHff1hadXk528/7ZJcnNVUAE9DeeWYvA== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.13.0" - "@sentry-internal/typescript" "7.13.0" + "@sentry-internal/eslint-plugin-sdk" "7.15.0" + "@sentry-internal/typescript" "7.15.0" "@typescript-eslint/eslint-plugin" "^3.9.0" "@typescript-eslint/parser" "^3.9.0" eslint-config-prettier "^6.11.0" @@ -115,82 +115,81 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.13.0.tgz#ca7d97d3bbd618ad44293490c387fc86f3db5e45" - integrity sha512-ZKejUx7FLiOB+cY/3YbV1/TamMFm8IOE54dTK2e148MbBvefM1mNjI5gbUcBMDCVk3CR5PO/2SkeRMBcEZfw1A== +"@sentry-internal/eslint-plugin-sdk@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.15.0.tgz#49dfa926033d70948aaf1f304e4d98d1f50d13b9" + integrity sha512-CYCf6i/kt5m49XKYNz5ocgRDGUSpQvImyT/qXvZGWnj4jKNeie4/k3abua2Dj765zZ1IpNscAuBudOG7rBTRlQ== dependencies: requireindex "~1.1.0" -"@sentry-internal/typescript@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.13.0.tgz#86b7014859002eb5860e560fbc9d9c20e71d98d3" - integrity sha512-dAyNQR7a2GTMSOkGxWXRNWUmM/u8rhM1sY+d1817IXstTiLN2PFWVnpvyup32p5H7jasW/nuIDGjWjzZoY3/9Q== +"@sentry-internal/typescript@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.15.0.tgz#72daf80ff94ab8ba4ae22c39dd3ab888d38b9229" + integrity sha512-Gjc2/w1+vxmZIwSXAZYcuT99BjjOPXhHlCscOXLlGhPx5qNhnIXZ52StlQbCfW0P6Qg6H2d4P/OYUGTcOXd7gQ== -"@sentry/browser@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.13.0.tgz#883b8598c8a0c33af246242e7172e39306dc564a" - integrity sha512-WbgClHPYe8TKsdVVbuzd6alxwh3maFQNuljMkSTnYvPx2P+NT0wHljTs37D39FGfSmAwaqn7D/1ZHAtC+6mWxA== +"@sentry/browser@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.15.0.tgz#1723dc8efcea9239d26072126755f61f6fb9448d" + integrity sha512-vZYr8L2JmniV8cns4yGOpX32moazz6tsllB1uv7XmmELW98sIuuugVFX0k6cBi89R8pyhdqULFCf9CL8CRguRg== dependencies: - "@sentry/core" "7.13.0" - "@sentry/types" "7.13.0" - "@sentry/utils" "7.13.0" + "@sentry/core" "7.15.0" + "@sentry/types" "7.15.0" + "@sentry/utils" "7.15.0" tslib "^1.9.3" -"@sentry/core@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.13.0.tgz#65597d71f8bfa1186f34009803e03ca9edb3adee" - integrity sha512-hB46fklmKrSDMEvZOF8qBHhys7PONBFyxQtbNDZUlv/kabs4gF3VEg1ftCaXnjx4lLNlsUl/ScFdM6194RvISg== +"@sentry/core@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.15.0.tgz#983e08326afdb8ddb10494372cd22b3886d683c9" + integrity sha512-W8d44g04GShBn4Z9VBTUhf1T9LTMfzUnETEx237zzUucv0kkyj3LsWQsJapWchMbmwr1V/CdnNDN+lGDm8iXQA== dependencies: - "@sentry/hub" "7.13.0" - "@sentry/types" "7.13.0" - "@sentry/utils" "7.13.0" + "@sentry/types" "7.15.0" + "@sentry/utils" "7.15.0" tslib "^1.9.3" -"@sentry/hub@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.13.0.tgz#752068e528cfb277ed154bc94e311cad50ef792e" - integrity sha512-88/GsD1BoyrBwRKJCmVHZtSH5rizOsImUHWEXc1AOa1aR8nanfn56JdAbd6tC55pA+nT4R4H4vN/PrUaomTbtg== +"@sentry/hub@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.15.0.tgz#d4da91c15ab0a1ee2d70796bf7b2fda35f06837f" + integrity sha512-v15sSoYuKJ9+BmDUX6qxAnCDhlClmw6TY9/rcIYbP2XSxsGrJcPy6VPOw4E21/1zGXnKiW7KvBkPeYEjIx7fWA== dependencies: - "@sentry/types" "7.13.0" - "@sentry/utils" "7.13.0" + "@sentry/core" "7.15.0" + "@sentry/types" "7.15.0" + "@sentry/utils" "7.15.0" tslib "^1.9.3" -"@sentry/node@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.13.0.tgz#0e073b75d4cce684db006d93ef18f2de2cf2f60e" - integrity sha512-uP3bPAIRHPilnOEiYGQQDLaQphc/c7d87wm91bZrTJ+WPnMW4D/NmT7fna5zGGDQIr/KTdQ/LEpDeZOILbkCqQ== +"@sentry/node@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.15.0.tgz#8784a747d9b933754b29bba954b22f0d54c3b614" + integrity sha512-gfyo6YTo4Sw5pdKWCzs7trqZpBm5D/ArR4vylQrQayfImiYyNY6yaOK1R7g4rM34MXUu91pfVJLUpXvjk/NsHw== dependencies: - "@sentry/core" "7.13.0" - "@sentry/hub" "7.13.0" - "@sentry/types" "7.13.0" - "@sentry/utils" "7.13.0" + "@sentry/core" "7.15.0" + "@sentry/types" "7.15.0" + "@sentry/utils" "7.15.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/tracing@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.13.0.tgz#521dc021dab78e37e29b0f90b01cb444337adfc4" - integrity sha512-/MKSd25rGv6Pc0FPBLXJifkfvSaYVPA8XUOLzVeDN0gl07h8AXli4qG9amTh/4Wb5h4dFpbcscOvW2VC+pxkIA== +"@sentry/tracing@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.15.0.tgz#ea516957b2ed39f389c21132f433b6470d54b465" + integrity sha512-c0Y3+z6EWsc+EJsfBcRtc58ugkWYa6+6KTu3ceMkx2ZgZTCmRUuzAb7yodMt/gwezBsxzq706fnQivx1lQgzlQ== dependencies: - "@sentry/hub" "7.13.0" - "@sentry/types" "7.13.0" - "@sentry/utils" "7.13.0" + "@sentry/core" "7.15.0" + "@sentry/types" "7.15.0" + "@sentry/utils" "7.15.0" tslib "^1.9.3" -"@sentry/types@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.13.0.tgz#398e33e5c92ea0ce91e2c86e3ab003fe00c471a2" - integrity sha512-ttckM1XaeyHRLMdr79wmGA5PFbTGx2jio9DCD/mkEpSfk6OGfqfC7gpwy7BNstDH/VKyQj/lDCJPnwvWqARMoQ== +"@sentry/types@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.15.0.tgz#50c57c924993d4dd16b43172d310c66384d17463" + integrity sha512-MN9haDRh9ZOsTotoDTHu2BT3sT8Vs1F0alhizUpDyjN2YgBCqR6JV+AbAE1XNHwS2+5zbppch1PwJUVeE58URQ== -"@sentry/utils@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.13.0.tgz#0d47a9278806ece78ba3a83c7dbebce817462759" - integrity sha512-jnR85LgRLSk7IQe2OhKOPMY4fasJCNQNW0iCXsH+S2R1qnsF+N4ksNkQ+7JyyM9E7F03YpI2qd76bKY0VIn5iA== +"@sentry/utils@7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.15.0.tgz#cda642a353a58fd6631979c1e5986788e6db6c43" + integrity sha512-akic22/6xa/RG5Mj7UN6pLc23VnX9zQlKM53L/q3yIr0juckSVthJiiFNdgdqrX03S1tHYlBgPeShKFFTHpkjA== dependencies: - "@sentry/types" "7.13.0" + "@sentry/types" "7.15.0" tslib "^1.9.3" "@sindresorhus/is@^0.14.0": From ceaf5746aabb6b39db9170701137677c46bde4c4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 13 Oct 2022 12:02:30 +0200 Subject: [PATCH 030/239] test: New Electron versions (#573) --- test/e2e/versions.json | 2 +- yarn.lock | 10 ---------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 272216cc..38a3f269 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.2","20.3.1","21.1.0"] +["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.3","20.3.2","21.1.1"] diff --git a/yarn.lock b/yarn.lock index d674b541..2a170f11 100644 --- a/yarn.lock +++ b/yarn.lock @@ -146,16 +146,6 @@ "@sentry/utils" "7.15.0" tslib "^1.9.3" -"@sentry/hub@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.15.0.tgz#d4da91c15ab0a1ee2d70796bf7b2fda35f06837f" - integrity sha512-v15sSoYuKJ9+BmDUX6qxAnCDhlClmw6TY9/rcIYbP2XSxsGrJcPy6VPOw4E21/1zGXnKiW7KvBkPeYEjIx7fWA== - dependencies: - "@sentry/core" "7.15.0" - "@sentry/types" "7.15.0" - "@sentry/utils" "7.15.0" - tslib "^1.9.3" - "@sentry/node@7.15.0": version "7.15.0" resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.15.0.tgz#8784a747d9b933754b29bba954b22f0d54c3b614" From 3c7c1287a7a756bd77f17259b3f9347cf0e131bc Mon Sep 17 00:00:00 2001 From: anthony sottile <103459774+asottile-sentry@users.noreply.github.com> Date: Thu, 13 Oct 2022 08:02:31 -0400 Subject: [PATCH 031/239] ref(ci): fix set-output / set-state deprecation (#574) https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/ Committed via https://github.com/asottile/all-repos --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ef4b97ec..53e7affe 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,7 +32,7 @@ jobs: path: | ${{ github.workspace }}/*.tgz - id: set-matrix - run: echo "::set-output name=matrix::$(node ./scripts/e2e-test-versions.js)" + run: echo "matrix=$(node ./scripts/e2e-test-versions.js)" >> "$GITHUB_OUTPUT" outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} From ffad61d621119eee8f6d42e361e393fcdb478905 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 13 Oct 2022 18:52:55 +0200 Subject: [PATCH 032/239] feat: Support passing JavaScript framework specific SDK init as second init parameter (#575) --- README.md | 10 ++++++++++ .../electron-react-boilerplate/package.json | 1 + .../src/renderer/index.tsx | 5 +++-- examples/electron-vite/index.html | 5 ++--- examples/electron-vite/package.json | 7 +++++-- examples/electron-vite/src/renderer/App.vue | 10 ++++++++++ examples/electron-vite/src/renderer/index.mjs | 17 +++++++++++------ examples/electron-vite/vite.config.renderer.js | 2 ++ src/renderer/sdk.ts | 10 ++++++++-- test/e2e/recipe/index.ts | 8 +++++--- 10 files changed, 57 insertions(+), 18 deletions(-) create mode 100644 examples/electron-vite/src/renderer/App.vue diff --git a/README.md b/README.md index 8e6f8c2c..0ac5be5f 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,16 @@ import { init } from '@sentry/electron/main'; import { init } from '@sentry/electron/renderer'; ``` +If you are using a framework specific Sentry SDK, you can pass that `init` function as the second parameter in the +renderer and the two SDKs functionalities will be combined: +```javascript +import { init } from '@sentry/electron/renderer'; +import { init as reactInit } from '@sentry/react'; + +init({ /* config */ }, reactInit); + +``` + To set context information or send manual events, use the exported functions of `@sentry/electron`. Note that these functions will not perform any action before you have called `init()`: diff --git a/examples/electron-react-boilerplate/package.json b/examples/electron-react-boilerplate/package.json index 961c0cd3..b6787de6 100644 --- a/examples/electron-react-boilerplate/package.json +++ b/examples/electron-react-boilerplate/package.json @@ -58,6 +58,7 @@ }, "dependencies": { "@sentry/electron": "^3.0.5", + "@sentry/react": "7.15.0", "electron-debug": "^3.2.0", "electron-log": "^4.4.6", "electron-updater": "^4.6.5", diff --git a/examples/electron-react-boilerplate/src/renderer/index.tsx b/examples/electron-react-boilerplate/src/renderer/index.tsx index ce76b4cc..0ce9d632 100644 --- a/examples/electron-react-boilerplate/src/renderer/index.tsx +++ b/examples/electron-react-boilerplate/src/renderer/index.tsx @@ -1,8 +1,9 @@ import { render } from 'react-dom'; import App from './App'; -import * as Sentry from '@sentry/electron/renderer'; +import { init } from '@sentry/electron/renderer'; +import { init as reactInit } from '@sentry/react'; -Sentry.init(); +init({ debug: true }, reactInit); setTimeout(() => { throw new Error('Some renderer error'); diff --git a/examples/electron-vite/index.html b/examples/electron-vite/index.html index ddd4aceb..a34faf99 100644 --- a/examples/electron-vite/index.html +++ b/examples/electron-vite/index.html @@ -5,8 +5,7 @@ <title>Hello World!</title> </head> <body> - <h1>💖 Hello World!</h1> - <p>Welcome to your Electron application.</p> - <script type="module" src="./src/renderer/index.mjs"></script> + <div id="app"></div> + <script type="module" src="/src/renderer/index.mjs"></script> </body> </html> diff --git a/examples/electron-vite/package.json b/examples/electron-vite/package.json index be39b2ab..23af13c4 100644 --- a/examples/electron-vite/package.json +++ b/examples/electron-vite/package.json @@ -9,10 +9,13 @@ }, "dependencies": { "electron-squirrel-startup": "^1.0.0", - "@sentry/electron": "3.0.0" + "@sentry/electron": "3.0.0", + "@sentry/vue": "7.15.0", + "vue": "^3.2.40" }, "devDependencies": { - "vite": "^2.7.10", + "@vitejs/plugin-vue": "^3.1.2", + "vite": "^3.1.8", "electron": "13.1.9" } } diff --git a/examples/electron-vite/src/renderer/App.vue b/examples/electron-vite/src/renderer/App.vue new file mode 100644 index 00000000..95ea8ee6 --- /dev/null +++ b/examples/electron-vite/src/renderer/App.vue @@ -0,0 +1,10 @@ +<script setup> +setTimeout(() => { + throw new Error('Some renderer error'); +}, 500); +</script> + +<template> + <h1>💖 Hello World!</h1> + <p>Welcome to your Electron application.</p> +</template> diff --git a/examples/electron-vite/src/renderer/index.mjs b/examples/electron-vite/src/renderer/index.mjs index a9086d1d..ec9fdee6 100644 --- a/examples/electron-vite/src/renderer/index.mjs +++ b/examples/electron-vite/src/renderer/index.mjs @@ -1,9 +1,14 @@ +import { createApp } from 'vue'; +import App from './App.vue'; import { init } from '@sentry/electron'; +import { init as initVue } from '@sentry/vue'; -init({ - debug: true, -}); +init( + { + debug: true, + }, + initVue, +); -setTimeout(() => { - throw new Error('Some renderer error'); -}, 500); +const app = createApp(App); +app.mount('#app'); diff --git a/examples/electron-vite/vite.config.renderer.js b/examples/electron-vite/vite.config.renderer.js index faea6a09..14b8eb38 100644 --- a/examples/electron-vite/vite.config.renderer.js +++ b/examples/electron-vite/vite.config.renderer.js @@ -1,4 +1,5 @@ import { join } from 'path'; +import vue from '@vitejs/plugin-vue'; const PACKAGE_ROOT = __dirname; @@ -16,6 +17,7 @@ const config = { strict: true, }, }, + plugins: [vue()], build: { sourcemap: true, target: `chrome61`, diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index e146769d..752877ad 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -14,8 +14,14 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa /** * Initialize Sentry in the Electron renderer process + * @param options SDK options + * @param originalInit Optional init function for a specific framework SDK + * @returns */ -export function init(options: BrowserOptions = {}): void { +export function init<O extends BrowserOptions>( + options: BrowserOptions & O = {} as BrowserOptions & O, + originalInit: (options: O) => void = browserInit, +): void { ensureProcess('renderer'); // Ensure the browser SDK is only init'ed once. @@ -53,5 +59,5 @@ If init has been called in the preload and contextIsolation is disabled, is not // We only handle initialScope in the main process otherwise it can cause race conditions over IPC delete options.initialScope; - browserInit(options); + originalInit(options); } diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts index 0f76139e..59a16f93 100644 --- a/test/e2e/recipe/index.ts +++ b/test/e2e/recipe/index.ts @@ -15,7 +15,7 @@ import { parseRecipe, TestRecipe } from './parser'; export * from './normalize'; const SENTRY_KEY = '37f8a2ee37c0409d8970bc7559c7c7e4'; -const TRACING_VERSION = require('../../../package.json').devDependencies['@sentry/tracing']; +const JS_VERSION = require('../../../package.json').dependencies['@sentry/core']; const log = createLogger('Recipe Runner'); @@ -121,8 +121,10 @@ export class RecipeRunner { /"@sentry\/electron": ".*"/, `"@sentry/electron": "file:./../../../../sentry-electron-${SDK_VERSION}.tgz"`, ) - // We replace the @sentry/tracing dependency version to match that of @sentry/electron - .replace(/"@sentry\/tracing": ".*"/, `"@sentry/tracing": "${TRACING_VERSION}"`); + // We replace the Sentry JavaScript dependency versions to match that of @sentry/electron + .replace(/"@sentry\/tracing": ".*"/, `"@sentry/tracing": "${JS_VERSION}"`) + .replace(/"@sentry\/react": ".*"/, `"@sentry/react": "${JS_VERSION}"`) + .replace(/"@sentry\/vue": ".*"/, `"@sentry/vue": "${JS_VERSION}"`); } writeFileSync(path, content); From c7c0dd63e1c074b8bc5863f9fd023d1ddcdff8e4 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 13 Oct 2022 22:16:31 +0200 Subject: [PATCH 033/239] fix: Include sentry_key in IPC Ping URL so it does not create breadcrumbs (#576) --- src/renderer/ipc.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/ipc.ts b/src/renderer/ipc.ts index 6daa699b..f74af6b0 100644 --- a/src/renderer/ipc.ts +++ b/src/renderer/ipc.ts @@ -13,7 +13,7 @@ function getImplementation(): IPCInterface { logger.log('IPC was not configured in preload script, falling back to custom protocol and fetch'); - fetch(`${PROTOCOL_SCHEME}://${IPCChannel.PING}`).catch(() => + fetch(`${PROTOCOL_SCHEME}://${IPCChannel.PING}/sentry_key`).catch(() => console.error(`Sentry SDK failed to establish connection with the Electron main process. - Ensure you have initialized the SDK in the main process - If your renderers use custom sessions, be sure to set 'getSessions' in the main process options From 39130bf6ba9dc60b32bc9233a60570a02a2487ef Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 14 Oct 2022 13:47:12 +0200 Subject: [PATCH 034/239] chore: Update changelog (#577) --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 77608318..f875cccc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +## 4.1.0 + +- feat: Support passing JavaScript framework specific SDK init as second init parameter (#575) +- feat: Update JavaScript SDKs to 7.15.0 (#572) +- fix: Include `sentry_key` in IPC Ping URL so it does not create breadcrumbs (#576) + ## 4.0.3 - fix: `ElectronMainOptions` type should be a union with `NodeOptions` From bc30894794a6a65ead2a8c729d43b941d18332e0 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Fri, 14 Oct 2022 11:47:57 +0000 Subject: [PATCH 035/239] release: 4.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0b71277f..67e8ad44 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.0.3", + "version": "4.1.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From 35e739b3069b1b4ee1c896fe2cc53f2e604b7fa3 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Sat, 22 Oct 2022 10:16:05 +0200 Subject: [PATCH 036/239] Update to 7.16 (#579) --- package.json | 16 ++++----- yarn.lock | 100 +++++++++++++++++++++++++-------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/package.json b/package.json index 67e8ad44..13cc34d8 100644 --- a/package.json +++ b/package.json @@ -57,18 +57,18 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.15.0", - "@sentry/core": "7.15.0", - "@sentry/node": "7.15.0", - "@sentry/types": "7.15.0", - "@sentry/utils": "7.15.0", + "@sentry/browser": "7.16.0", + "@sentry/core": "7.16.0", + "@sentry/node": "7.16.0", + "@sentry/types": "7.16.0", + "@sentry/utils": "7.16.0", "deepmerge": "4.2.2", "tslib": "^2.3.1" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.15.0", - "@sentry-internal/typescript": "7.15.0", - "@sentry/tracing": "7.15.0", + "@sentry-internal/eslint-config-sdk": "7.16.0", + "@sentry-internal/typescript": "7.16.0", + "@sentry/tracing": "7.16.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/yarn.lock b/yarn.lock index 2a170f11..4d4c873e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -100,13 +100,13 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@sentry-internal/eslint-config-sdk@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.15.0.tgz#7f33c6c39c720132d9816364d55751cd26ab34e4" - integrity sha512-ttLoetchz0NkRuv8xkab/NF3u67lwWidYAIr8dV0Gc/wuefLwGr/XWdHff1hadXk528/7ZJcnNVUAE9DeeWYvA== +"@sentry-internal/eslint-config-sdk@7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.16.0.tgz#a626e2d248c8a079adc7e0855215b372e5294f65" + integrity sha512-rFbHI6RlO0Y1vwxtvRW/KyOiYBdT3kyKVIf4sXJxUc0IJ6ETmFXjGNRerWKUg3AF7m5QfHNsKQhHMKXhsCGPog== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.15.0" - "@sentry-internal/typescript" "7.15.0" + "@sentry-internal/eslint-plugin-sdk" "7.16.0" + "@sentry-internal/typescript" "7.16.0" "@typescript-eslint/eslint-plugin" "^3.9.0" "@typescript-eslint/parser" "^3.9.0" eslint-config-prettier "^6.11.0" @@ -115,71 +115,71 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.15.0.tgz#49dfa926033d70948aaf1f304e4d98d1f50d13b9" - integrity sha512-CYCf6i/kt5m49XKYNz5ocgRDGUSpQvImyT/qXvZGWnj4jKNeie4/k3abua2Dj765zZ1IpNscAuBudOG7rBTRlQ== +"@sentry-internal/eslint-plugin-sdk@7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.16.0.tgz#8675577a2781fae3cfac918d95fcd1ac731c8350" + integrity sha512-NlNZs8JlMA9wK2SaTrbznqk9P8P8yM0oj/HI7CnDJFuBStfbdFLuf025ejnSLXCfdPNRnHxKsHkq78jXyyA+Kg== dependencies: requireindex "~1.1.0" -"@sentry-internal/typescript@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.15.0.tgz#72daf80ff94ab8ba4ae22c39dd3ab888d38b9229" - integrity sha512-Gjc2/w1+vxmZIwSXAZYcuT99BjjOPXhHlCscOXLlGhPx5qNhnIXZ52StlQbCfW0P6Qg6H2d4P/OYUGTcOXd7gQ== +"@sentry-internal/typescript@7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.16.0.tgz#a37c15649ed9d36d0e3ea0e1f622bb157308d5ce" + integrity sha512-cudpmUkvKmJNiCud5z/J+zbPDaulwClG/wLeK/+tFKz+qI5zrFWP9FGD4lTvL2wRyz8eQ4qTXtdaFK2RkxU/7A== -"@sentry/browser@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.15.0.tgz#1723dc8efcea9239d26072126755f61f6fb9448d" - integrity sha512-vZYr8L2JmniV8cns4yGOpX32moazz6tsllB1uv7XmmELW98sIuuugVFX0k6cBi89R8pyhdqULFCf9CL8CRguRg== +"@sentry/browser@7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.16.0.tgz#afd2bac91857d2359272a0d9d2b1ee5ca7d69828" + integrity sha512-tJ063zvoF8Raw7mzQEXupOFPSN6v36WIbsDVGeFdToPCwViaBuATaxvWCrudGzsnBkMyItmTLJkzn9SEIXUOiw== dependencies: - "@sentry/core" "7.15.0" - "@sentry/types" "7.15.0" - "@sentry/utils" "7.15.0" + "@sentry/core" "7.16.0" + "@sentry/types" "7.16.0" + "@sentry/utils" "7.16.0" tslib "^1.9.3" -"@sentry/core@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.15.0.tgz#983e08326afdb8ddb10494372cd22b3886d683c9" - integrity sha512-W8d44g04GShBn4Z9VBTUhf1T9LTMfzUnETEx237zzUucv0kkyj3LsWQsJapWchMbmwr1V/CdnNDN+lGDm8iXQA== +"@sentry/core@7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.16.0.tgz#60f9b54ef2ec524176b329e1d15be39c36da5953" + integrity sha512-vq6H1b/IPTvzDD9coQ3wIudvSjkAYuUlXb1dv69dRlq4v3st9dcKBps1Zf0lQ1i4TVlDLoe1iGMmNFglMF1Q5w== dependencies: - "@sentry/types" "7.15.0" - "@sentry/utils" "7.15.0" + "@sentry/types" "7.16.0" + "@sentry/utils" "7.16.0" tslib "^1.9.3" -"@sentry/node@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.15.0.tgz#8784a747d9b933754b29bba954b22f0d54c3b614" - integrity sha512-gfyo6YTo4Sw5pdKWCzs7trqZpBm5D/ArR4vylQrQayfImiYyNY6yaOK1R7g4rM34MXUu91pfVJLUpXvjk/NsHw== +"@sentry/node@7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.16.0.tgz#f049e243169ec4d6058d5c0fff08104509f5ba9a" + integrity sha512-OC0TO6UTetv8IsX3zNhdeui7YVIQCnhkbfi+CMrB6YsHaMP2A9qH5gNyu/hKbaY9+4xci7e4rxyRmI65aKS9ow== dependencies: - "@sentry/core" "7.15.0" - "@sentry/types" "7.15.0" - "@sentry/utils" "7.15.0" + "@sentry/core" "7.16.0" + "@sentry/types" "7.16.0" + "@sentry/utils" "7.16.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/tracing@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.15.0.tgz#ea516957b2ed39f389c21132f433b6470d54b465" - integrity sha512-c0Y3+z6EWsc+EJsfBcRtc58ugkWYa6+6KTu3ceMkx2ZgZTCmRUuzAb7yodMt/gwezBsxzq706fnQivx1lQgzlQ== +"@sentry/tracing@7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.16.0.tgz#823b84abf0df08ecd16669547b4281e3c7a96ac9" + integrity sha512-8a9bViUY7oS35msBMouxkgz5OGd9NGutuKF7SQ8hPZwTcQPOxOwPyHccykgr56k6OmaDjGCLZMqZowaysJj+4g== dependencies: - "@sentry/core" "7.15.0" - "@sentry/types" "7.15.0" - "@sentry/utils" "7.15.0" + "@sentry/core" "7.16.0" + "@sentry/types" "7.16.0" + "@sentry/utils" "7.16.0" tslib "^1.9.3" -"@sentry/types@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.15.0.tgz#50c57c924993d4dd16b43172d310c66384d17463" - integrity sha512-MN9haDRh9ZOsTotoDTHu2BT3sT8Vs1F0alhizUpDyjN2YgBCqR6JV+AbAE1XNHwS2+5zbppch1PwJUVeE58URQ== +"@sentry/types@7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.16.0.tgz#79c06ada153a84feb949fa49b1c9d15f91decd79" + integrity sha512-i6D+OK6d0l/k+VQvRp/Pt21WkDEgVBUIZq+sOkEZJczbcfexVdXKeXXoYTD2vYuFq8Yy28fzlsZaKI+NoH94yQ== -"@sentry/utils@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.15.0.tgz#cda642a353a58fd6631979c1e5986788e6db6c43" - integrity sha512-akic22/6xa/RG5Mj7UN6pLc23VnX9zQlKM53L/q3yIr0juckSVthJiiFNdgdqrX03S1tHYlBgPeShKFFTHpkjA== +"@sentry/utils@7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.16.0.tgz#b832520c661d4435808969ee04814ff8e20497b1" + integrity sha512-3Zh1txg7IRp4kZAdG27YF7K6lD1IZyuAo9KjoPg1Xzqa4DOZyASJuEkbf+rK2a9T4HrtVHHXJUsNbKg8WM3VHg== dependencies: - "@sentry/types" "7.15.0" + "@sentry/types" "7.16.0" tslib "^1.9.3" "@sindresorhus/is@^0.14.0": From 15ac57fcc9b2816987ad72d05582ad504c3ddec5 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 1 Nov 2022 23:31:55 +0100 Subject: [PATCH 037/239] Use specific versions of forge as they're making breaking changes (#581) --- examples/{REAMDE.md => README.md} | 0 examples/electron-forge-webpack/package.json | 4 ++-- examples/electron-forge/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename examples/{REAMDE.md => README.md} (100%) diff --git a/examples/REAMDE.md b/examples/README.md similarity index 100% rename from examples/REAMDE.md rename to examples/README.md diff --git a/examples/electron-forge-webpack/package.json b/examples/electron-forge-webpack/package.json index 59a56dde..86688199 100644 --- a/examples/electron-forge-webpack/package.json +++ b/examples/electron-forge-webpack/package.json @@ -28,8 +28,8 @@ } }, "devDependencies": { - "@electron-forge/cli": "^6.0.0-beta.63", - "@electron-forge/plugin-webpack": "^6.0.0-beta.63", + "@electron-forge/cli": "6.0.0-beta.63", + "@electron-forge/plugin-webpack": "6.0.0-beta.63", "@vercel/webpack-asset-relocator-loader": "1.6.0", "electron": "15.2.0", "node-loader": "^2.0.0" diff --git a/examples/electron-forge/package.json b/examples/electron-forge/package.json index 241c9c40..93f541df 100644 --- a/examples/electron-forge/package.json +++ b/examples/electron-forge/package.json @@ -10,7 +10,7 @@ "@sentry/electron": "3.0.0" }, "devDependencies": { - "@electron-forge/cli": "^6.0.0-beta.63", + "@electron-forge/cli": "6.0.0-beta.63", "electron": "13.1.9" } } \ No newline at end of file From f8c1e154ec2e28cb49cd2efca6867f2ce8546256 Mon Sep 17 00:00:00 2001 From: "Matt Gaunt-Seo @ Sentry.io" <112419115+mattgauntseo-sentry@users.noreply.github.com> Date: Wed, 2 Nov 2022 10:04:04 -0700 Subject: [PATCH 038/239] ci: Update actions/upload-artifact to v3.1.1 (#582) Committed via https://github.com/asottile/all-repos --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 53e7affe..781ad437 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: - name: Pack run: yarn pack - name: Archive Artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3.1.1 with: name: ${{ github.sha }} path: | From dc1c8348a2371bd8ebb08c1a5d2a12473057c48e Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 3 Nov 2022 13:01:41 +0100 Subject: [PATCH 039/239] feat: Add additional options and queue status callback to offline transport (#580) --- src/main/transports/electron-offline-net.ts | 49 +++++++++++++++++++-- src/main/transports/queue.ts | 23 ++++++++-- test/unit/persist-queue.test.ts | 25 ++++++++--- 3 files changed, 84 insertions(+), 13 deletions(-) diff --git a/src/main/transports/electron-offline-net.ts b/src/main/transports/electron-offline-net.ts index 532b8ae6..3edea316 100644 --- a/src/main/transports/electron-offline-net.ts +++ b/src/main/transports/electron-offline-net.ts @@ -11,6 +11,28 @@ import { PersistedRequestQueue } from './queue'; type BeforeSendResponse = 'send' | 'queue' | 'drop'; export interface ElectronOfflineTransportOptions extends ElectronNetTransportOptions { + /** + * The maximum number of days to keep an event in the queue. + */ + maxQueueAgeDays?: number; + + /** + * The maximum number of events to keep in the queue. + */ + maxQueueCount?: number; + + /** + * Called every time the number of requests in the queue changes. + */ + queuedLengthChanged?: (length: number) => void; + + /** + * Called before attempting to send an event to Sentry. + * + * Return 'send' to attempt to send the event. + * Return 'queue' to queue and persist the event for sending later. + * Return 'drop' to drop the event. + */ beforeSend?: (request: TransportRequest) => BeforeSendResponse | Promise<BeforeSendResponse>; } @@ -36,16 +58,35 @@ function isRateLimited(result: TransportMakeRequestResponse): boolean { */ export function makeElectronOfflineTransport(options: ElectronOfflineTransportOptions): Transport { const netMakeRequest = createElectronNetRequestExecutor(options.url, options.headers || {}); - const queue: PersistedRequestQueue = new PersistedRequestQueue(join(sentryCachePath, 'queue')); + const queue: PersistedRequestQueue = new PersistedRequestQueue( + join(sentryCachePath, 'queue'), + options.maxQueueAgeDays, + options.maxQueueCount, + ); + + const beforeSend = options.beforeSend || defaultBeforeSend; + let retryDelay: number = START_DELAY; + let lastQueueLength = -1; + + function queueLengthChanged(queuedEvents: number): void { + if (options.queuedLengthChanged && queuedEvents !== lastQueueLength) { + lastQueueLength = queuedEvents; + options.queuedLengthChanged(queuedEvents); + } + } function flushQueue(): void { queue .pop() .then((found) => { if (found) { + // We have pendingCount plus found.request + queueLengthChanged(found.pendingCount + 1); logger.log('Found a request in the queue'); - makeRequest(found).catch((e) => logger.error(e)); + makeRequest(found.request).catch((e) => logger.error(e)); + } else { + queueLengthChanged(0); } }) .catch((e) => logger.error(e)); @@ -53,7 +94,7 @@ export function makeElectronOfflineTransport(options: ElectronOfflineTransportOp async function queueRequest(request: TransportRequest): Promise<TransportMakeRequestResponse> { logger.log('Queuing request'); - await queue.add(request); + queueLengthChanged(await queue.add(request)); setTimeout(() => { flushQueue(); @@ -71,7 +112,7 @@ export function makeElectronOfflineTransport(options: ElectronOfflineTransportOp } async function makeRequest(request: TransportRequest): Promise<TransportMakeRequestResponse> { - let action = (options.beforeSend || defaultBeforeSend)(request); + let action = beforeSend(request); if (action instanceof Promise) { action = await action; diff --git a/src/main/transports/queue.ts b/src/main/transports/queue.ts index 9448281c..9f020fe8 100644 --- a/src/main/transports/queue.ts +++ b/src/main/transports/queue.ts @@ -15,6 +15,11 @@ interface PersistedRequest { type?: unknown; } +interface PopResult { + request: QueuedTransportRequest; + pendingCount: number; +} + export interface QueuedTransportRequest extends TransportRequest { date?: Date; } @@ -34,8 +39,9 @@ export class PersistedRequestQueue { ) {} /** Adds a request to the queue */ - public async add(request: QueuedTransportRequest): Promise<void> { + public async add(request: QueuedTransportRequest): Promise<number> { const bodyPath = uuid4(); + let queuedEvents = 0; await this._queue.update((queue) => { queue.push({ @@ -49,6 +55,8 @@ export class PersistedRequestQueue { void this._removeBody(removed.bodyPath); } } + + queuedEvents = queue.length; return queue; }); @@ -57,11 +65,14 @@ export class PersistedRequestQueue { } catch (_) { // } + + return queuedEvents; } /** Pops the oldest event from the queue */ - public async pop(): Promise<QueuedTransportRequest | undefined> { + public async pop(): Promise<PopResult | undefined> { let found: PersistedRequest | undefined; + let pendingCount = 0; const cutOff = Date.now() - MILLISECONDS_PER_DAY * this._maxAgeDays; await this._queue.update((queue) => { @@ -72,6 +83,7 @@ export class PersistedRequestQueue { void this._removeBody(found.bodyPath); found = undefined; } else { + pendingCount = queue.length; break; } } @@ -84,8 +96,11 @@ export class PersistedRequestQueue { void this._removeBody(found.bodyPath); return { - body, - date: found.date || new Date(), + request: { + body, + date: found.date || new Date(), + }, + pendingCount, }; } catch (e) { logger.warn('Filed to read queued request body', e); diff --git a/test/unit/persist-queue.test.ts b/test/unit/persist-queue.test.ts index 19fab5ad..13cb9cc8 100644 --- a/test/unit/persist-queue.test.ts +++ b/test/unit/persist-queue.test.ts @@ -32,14 +32,29 @@ describe('PersistedRequestQueue', () => { const queue2 = new PersistedRequestQueue(tempDir.name); const popped = await queue2.pop(); expect(popped).to.not.be.undefined; - expect(popped?.date).to.be.instanceOf(Date); - expect(popped?.body).to.not.be.undefined; - expect(popped?.body.toString()).to.equal('just a string'); + expect(popped?.request?.date).to.be.instanceOf(Date); + expect(popped?.request?.body).to.not.be.undefined; + expect(popped?.request?.body.toString()).to.equal('just a string'); await delay(1_000); await expectFilesInDirectory(tempDir.name, 1); }); + it('Correctly returns pending request count', async () => { + const queue = new PersistedRequestQueue(tempDir.name); + + const r1 = await queue.add({ body: 'just a string' }); + expect(r1).to.equal(1); + const r2 = await queue.add({ body: 'just another string' }); + expect(r2).to.equal(2); + + const r3 = await queue.pop(); + expect(r3?.pendingCount).to.equal(1); + + const r4 = await queue.pop(); + expect(r4?.pendingCount).to.equal(0); + }); + it('Drops requests when full', async () => { const queue = new PersistedRequestQueue(tempDir.name, 30, 5); @@ -55,9 +70,9 @@ describe('PersistedRequestQueue', () => { await expectFilesInDirectory(tempDir.name, 6); const popped: QueuedTransportRequest[] = []; - let pop: QueuedTransportRequest | undefined; + let pop: { request: QueuedTransportRequest } | undefined; while ((pop = await queue.pop())) { - popped.push(pop); + popped.push(pop.request); } expect(popped.length).to.equal(5); From cd7ffcbcf816f4b8f03bbfe6f50faef12860d030 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 9 Nov 2022 15:23:48 +0100 Subject: [PATCH 040/239] fix: Change parameter name to give more useful TypeScript error on SDK version mismatch (#584) --- scripts/update-version.js | 18 ++++++++++++++---- src/renderer/sdk.ts | 3 ++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/scripts/update-version.js b/scripts/update-version.js index 2e10f987..1f65ae11 100644 --- a/scripts/update-version.js +++ b/scripts/update-version.js @@ -1,6 +1,16 @@ const { join } = require('path'); -const { writeFileSync } = require('fs'); +const { readFileSync, writeFileSync } = require('fs'); -const path = join(__dirname, '../src/main/version.ts'); -const version = require('../package.json').version; -writeFileSync(path, `export const SDK_VERSION = '${version}';\n`); +const packageJson = require('../package.json'); + +// SDK_VERSION to 'src/main/version.ts' +const versionPath = join(__dirname, '../src/main/version.ts'); +writeFileSync(versionPath, `export const SDK_VERSION = '${packageJson.version}';\n`); + +// Write @sentry/core version into options variable name so TypeScript error includes useful hint +const coreVersion = packageJson.dependencies['@sentry/core']; +const coreVersionVar = coreVersion.replace(/\./g, '_'); +const rendererSdkPath = join(__dirname, '../src/renderer/sdk.ts'); +let rendererSdk = readFileSync(rendererSdkPath, { encoding: 'utf8' }); +rendererSdk = rendererSdk.replace(/version_v\d+_\d+_\d+/, `version_v${coreVersionVar}`); +writeFileSync(rendererSdkPath, rendererSdk); diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 752877ad..97e46fcf 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -20,7 +20,8 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa */ export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, - originalInit: (options: O) => void = browserInit, + // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_16_0: O) => void = browserInit, ): void { ensureProcess('renderer'); From de9bf658df96db22ee853f53c7593b4de37a2a23 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 15 Nov 2022 13:08:58 +0100 Subject: [PATCH 041/239] fix: Attempt to send minidumps for all `process-gone` reasons (#586) --- src/main/integrations/sentry-minidump/index.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts index 2a27a279..8485a5f8 100644 --- a/src/main/integrations/sentry-minidump/index.ts +++ b/src/main/integrations/sentry-minidump/index.ts @@ -6,7 +6,7 @@ import { app, crashReporter } from 'electron'; import { mergeEvents } from '../../../common'; import { getEventDefaults } from '../../context'; -import { CRASH_REASONS, onChildProcessGone, onRendererProcessGone } from '../../electron-normalize'; +import { EXIT_REASONS, onChildProcessGone, onRendererProcessGone } from '../../electron-normalize'; import { sentryCachePath } from '../../fs'; import { getRendererProperties, trackRendererProperties } from '../../renderers'; import { ElectronMainOptions } from '../../sdk'; @@ -58,8 +58,8 @@ export class SentryMinidump implements Integration { this._minidumpLoader = getMinidumpLoader(); - onRendererProcessGone(CRASH_REASONS, (contents, details) => this._sendRendererCrash(options, contents, details)); - onChildProcessGone(CRASH_REASONS, (details) => this._sendChildProcessCrash(options, details)); + onRendererProcessGone(EXIT_REASONS, (contents, details) => this._sendRendererCrash(options, contents, details)); + onChildProcessGone(EXIT_REASONS, (details) => this._sendChildProcessCrash(options, details)); // Start to submit recent minidump crashes. This will load breadcrumbs and // context information that was cached on disk prior to the crash. @@ -121,6 +121,7 @@ export class SentryMinidump implements Integration { tags: { 'event.environment': 'native', 'event.process': crashedProcess, + 'exit.reason': details.reason, event_type: 'native', }, }); @@ -153,6 +154,7 @@ export class SentryMinidump implements Integration { tags: { 'event.environment': 'native', 'event.process': details.type, + 'exit.reason': details.reason, event_type: 'native', }, }); From b3cf00023db4abd958cf5b6bae4e1a5b11573d5f Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 15 Nov 2022 13:24:48 +0100 Subject: [PATCH 042/239] Update changelog (#587) --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f875cccc..bc81f91c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +## 4.1.1 + +- feat: Add additional options and queue status callback to offline transport (#580) +- fix: Change parameter name to give more useful TypeScript error on SDK version mismatch (#584) +- fix: Attempt to send minidumps for all process gone reasons (#586) + ## 4.1.0 - feat: Support passing JavaScript framework specific SDK init as second init parameter (#575) From e2e4e1f28491abcdef04a798134eb7b764aa0a72 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Tue, 15 Nov 2022 12:25:28 +0000 Subject: [PATCH 043/239] release: 4.1.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 13cc34d8..a8baa692 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.1.0", + "version": "4.1.1", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From 08a526d177bfcaf97368e64f3811cd5acdb3b5c6 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 21 Nov 2022 11:23:59 +0100 Subject: [PATCH 044/239] fix: Ensure the scope writes do not beat the initial async scope read (#593) --- src/main/integrations/sentry-minidump/index.ts | 8 ++++++-- test/e2e/test-apps/native-sentry/main/event.json | 3 ++- test/e2e/test-apps/native-sentry/main/src/main.js | 8 ++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts index 8485a5f8..ca4367c8 100644 --- a/src/main/integrations/sentry-minidump/index.ts +++ b/src/main/integrations/sentry-minidump/index.ts @@ -172,14 +172,18 @@ export class SentryMinidump implements Integration { private _setupScopeListener(): void { const hubScope = getCurrentHub().getScope(); if (hubScope) { - hubScope.addScopeListener(async (updatedScope) => { + hubScope.addScopeListener((updatedScope) => { const scope = Scope.clone(updatedScope); // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access (scope as any)._eventProcessors = []; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access (scope as any)._scopeListeners = []; - await this._scopeStore?.set(scope); + // Since the initial scope read is async, we need to ensure that any writes do not beat that + // https://github.com/getsentry/sentry-electron/issues/585 + setImmediate(() => { + void this._scopeStore?.set(scope); + }); }); } } diff --git a/test/e2e/test-apps/native-sentry/main/event.json b/test/e2e/test-apps/native-sentry/main/event.json index edde8c15..d5ec4f9d 100644 --- a/test/e2e/test-apps/native-sentry/main/event.json +++ b/test/e2e/test-apps/native-sentry/main/event.json @@ -65,7 +65,8 @@ "event.environment": "native", "event.origin": "electron", "event.process": "browser", - "event_type": "native" + "event_type": "native", + "app-run": "first" } }, "attachments": [ { "attachment_type": "event.minidump" } ] diff --git a/test/e2e/test-apps/native-sentry/main/src/main.js b/test/e2e/test-apps/native-sentry/main/src/main.js index 7d93bf30..ae6a4a7a 100644 --- a/test/e2e/test-apps/native-sentry/main/src/main.js +++ b/test/e2e/test-apps/native-sentry/main/src/main.js @@ -1,7 +1,7 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init } = require('@sentry/electron'); +const { init, configureScope } = require('@sentry/electron'); init({ dsn: '__DSN__', @@ -10,6 +10,10 @@ init({ onFatalError: () => {}, }); +configureScope((scope) => { + scope.setTag('app-run', process.env.APP_FIRST_RUN ? 'first' : 'second'); +}); + app.on('ready', () => { const mainWindow = new BrowserWindow({ show: false, @@ -28,4 +32,4 @@ app.on('ready', () => { process.crash(); }, 500); } -}); \ No newline at end of file +}); From 17b8e562216dc5a3d42fd3303fc42f48d40451ff Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 21 Nov 2022 14:03:17 +0100 Subject: [PATCH 045/239] fix: Also check crashpad `pending` directory on macOS when renderer process exits (#592) --- .../sentry-minidump/minidump-loader.ts | 28 +++++-- .../renderer-force-crash/event.json | 76 +++++++++++++++++++ .../renderer-force-crash/package.json | 8 ++ .../renderer-force-crash/recipe.yml | 4 + .../renderer-force-crash/src/index.html | 15 ++++ .../renderer-force-crash/src/main.js | 29 +++++++ 6 files changed, 154 insertions(+), 6 deletions(-) create mode 100644 test/e2e/test-apps/native-sentry/renderer-force-crash/event.json create mode 100644 test/e2e/test-apps/native-sentry/renderer-force-crash/package.json create mode 100644 test/e2e/test-apps/native-sentry/renderer-force-crash/recipe.yml create mode 100644 test/e2e/test-apps/native-sentry/renderer-force-crash/src/index.html create mode 100644 test/e2e/test-apps/native-sentry/renderer-force-crash/src/main.js diff --git a/src/main/integrations/sentry-minidump/minidump-loader.ts b/src/main/integrations/sentry-minidump/minidump-loader.ts index 2e12b859..426e23e5 100644 --- a/src/main/integrations/sentry-minidump/minidump-loader.ts +++ b/src/main/integrations/sentry-minidump/minidump-loader.ts @@ -86,20 +86,36 @@ async function deleteCrashpadMetadataFile(crashesDirectory: string, waitMs: numb } } +async function readDirsAsync(paths: string[]): Promise<string[]> { + const found: string[] = []; + for (const path of paths) { + try { + const files = await readDirAsync(path); + found.push(...files.map((file) => join(path, file))); + } catch (_) { + // + } + } + return found; +} + function crashpadMinidumpLoader(): MinidumpLoader { const crashesDirectory: string = getCrashesDirectory(); const crashpadSubDirectory = process.platform === 'win32' ? 'reports' : 'completed'; + const dumpDirectories = [join(crashesDirectory, crashpadSubDirectory)]; + + if (process.platform === 'darwin') { + dumpDirectories.push(join(crashesDirectory, 'pending')); + } + return createMinidumpLoader(async () => { await deleteCrashpadMetadataFile(crashesDirectory).catch((error) => logger.error(error)); - const dumpDirectory = join(crashesDirectory, crashpadSubDirectory); - - return (await readDirAsync(dumpDirectory)) + const files = await readDirsAsync(dumpDirectories); + return files .filter((file) => file.endsWith('.dmp')) - .map((file) => { - const path = join(dumpDirectory, file); - + .map((path) => { return { path, load: () => readFileAsync(path), diff --git a/test/e2e/test-apps/native-sentry/renderer-force-crash/event.json b/test/e2e/test-apps/native-sentry/renderer-force-crash/event.json new file mode 100644 index 00000000..a760d30a --- /dev/null +++ b/test/e2e/test-apps/native-sentry/renderer-force-crash/event.json @@ -0,0 +1,76 @@ +{ + "method": "envelope", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "appId": "277345", + "data": { + "sdk": { + "name": "sentry.javascript.electron", + "packages": [ + { + "name": "npm:@sentry/electron", + "version": "{{version}}" + } + ], + "version": "{{version}}" + }, + "contexts": { + "app": { + "app_name": "native-sentry-renderer-force-crash", + "app_version": "1.0.0", + "app_start_time": "{{time}}" + }, + "browser": { + "name": "Chrome" + }, + "chrome": { + "name": "Chrome", + "type": "runtime", + "version": "{{version}}" + }, + "device": { + "arch": "{{arch}}", + "family": "Desktop", + "memory_size": 0, + "free_memory": 0, + "processor_count": 0, + "processor_frequency": 0, + "cpu_description": "{{cpu}}", + "screen_resolution": "{{screen}}", + "screen_density": 1, + "language": "{{language}}" + }, + "node": { + "name": "Node", + "type": "runtime", + "version": "{{version}}" + }, + "os": { + "name": "{{platform}}", + "version": "{{version}}" + }, + "runtime": { + "name": "Electron", + "version": "{{version}}" + } + }, + "release": "native-sentry-renderer-force-crash@1.0.0", + "environment": "development", + "user": { + "ip_address": "{{auto}}" + }, + "event_id": "{{id}}", + "timestamp": 0, + "breadcrumbs": [], + "tags": { + "event.environment": "native", + "event.origin": "electron", + "event.process": "renderer", + "event_type": "native" + } + }, + "attachments": [ + { + "attachment_type": "event.minidump" + } + ] +} diff --git a/test/e2e/test-apps/native-sentry/renderer-force-crash/package.json b/test/e2e/test-apps/native-sentry/renderer-force-crash/package.json new file mode 100644 index 00000000..af69a6e7 --- /dev/null +++ b/test/e2e/test-apps/native-sentry/renderer-force-crash/package.json @@ -0,0 +1,8 @@ +{ + "name": "native-sentry-renderer-force-crash", + "version": "1.0.0", + "main": "src/main.js", + "dependencies": { + "@sentry/electron": "3.0.0" + } +} diff --git a/test/e2e/test-apps/native-sentry/renderer-force-crash/recipe.yml b/test/e2e/test-apps/native-sentry/renderer-force-crash/recipe.yml new file mode 100644 index 00000000..3ab001f6 --- /dev/null +++ b/test/e2e/test-apps/native-sentry/renderer-force-crash/recipe.yml @@ -0,0 +1,4 @@ +description: Native Renderer forcefullyCrashRenderer +category: Native (Sentry Uploader) +command: yarn +condition: usesCrashpad && version.major >= 12 diff --git a/test/e2e/test-apps/native-sentry/renderer-force-crash/src/index.html b/test/e2e/test-apps/native-sentry/renderer-force-crash/src/index.html new file mode 100644 index 00000000..b43f77af --- /dev/null +++ b/test/e2e/test-apps/native-sentry/renderer-force-crash/src/index.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + </head> + <body> + <script> + const { init } = require('@sentry/electron'); + + init({ + debug: true, + }); + </script> + </body> +</html> diff --git a/test/e2e/test-apps/native-sentry/renderer-force-crash/src/main.js b/test/e2e/test-apps/native-sentry/renderer-force-crash/src/main.js new file mode 100644 index 00000000..f75fd9c5 --- /dev/null +++ b/test/e2e/test-apps/native-sentry/renderer-force-crash/src/main.js @@ -0,0 +1,29 @@ +const path = require('path'); + +const { app, BrowserWindow } = require('electron'); +const { init } = require('@sentry/electron'); + +app.commandLine.appendSwitch('enable-crashpad'); + +init({ + dsn: '__DSN__', + debug: true, + autoSessionTracking: false, + onFatalError: () => {}, +}); + +app.on('ready', () => { + const mainWindow = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + }, + }); + + mainWindow.loadFile(path.join(__dirname, 'index.html')); + + setTimeout(() => { + mainWindow.webContents.forcefullyCrashRenderer(); + }, 1000); +}); From 55393b3788307acf5e7b3b5fa2409f339f577373 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 21 Nov 2022 14:49:28 +0100 Subject: [PATCH 046/239] Update changelog (#595) --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc81f91c..d06df8a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## Unreleased +## 4.1.2 + +- fix: Ensure the scope writes do not beat the initial async scope read (#593) +- fix: Also check crashpad pending directory on macOS when renderer process exits (#592) + ## 4.1.1 - feat: Add additional options and queue status callback to offline transport (#580) From 7d30fd32f4a0f9aeab4076def6f394729d35db38 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Mon, 21 Nov 2022 13:50:53 +0000 Subject: [PATCH 047/239] release: 4.1.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a8baa692..9aa95011 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.1.1", + "version": "4.1.2", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From 3cbc85378c7d4af5ec8cbc1854dbbb1e35ed25f1 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 1 Dec 2022 15:30:05 +0100 Subject: [PATCH 048/239] test: Add test to ensure window titles don't end up in breadcrumbs when disabled (#594) --- test/e2e/recipe/index.ts | 18 ++++++++-- test/e2e/recipe/parser.ts | 12 +++++-- .../test-apps/other/window-titles/events.ts | 24 ++++++++++++++ .../other/window-titles/package.json | 9 +++++ .../test-apps/other/window-titles/recipe.yml | 2 ++ .../other/window-titles/src/index.html | 19 +++++++++++ .../test-apps/other/window-titles/src/main.js | 33 +++++++++++++++++++ 7 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 test/e2e/test-apps/other/window-titles/events.ts create mode 100644 test/e2e/test-apps/other/window-titles/package.json create mode 100644 test/e2e/test-apps/other/window-titles/recipe.yml create mode 100644 test/e2e/test-apps/other/window-titles/src/index.html create mode 100644 test/e2e/test-apps/other/window-titles/src/main.js diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts index 59a16f93..5f6419a7 100644 --- a/test/e2e/recipe/index.ts +++ b/test/e2e/recipe/index.ts @@ -1,3 +1,4 @@ +import { Event } from '@sentry/types'; import { expect } from 'chai'; import { spawnSync } from 'child_process'; import { mkdirSync, writeFileSync } from 'fs'; @@ -6,7 +7,7 @@ import { dirname, join } from 'path'; import { SDK_VERSION } from '../../../src/main/version'; import { delay } from '../../helpers'; import { TestContext } from '../context'; -import { ERROR_ID, RATE_LIMIT_ID, SERVER_PORT, TestServer } from '../server'; +import { ERROR_ID, RATE_LIMIT_ID, SERVER_PORT, TestServer, TestServerEvent } from '../server'; import { createLogger, getTestLog, walkSync } from '../utils'; import { evaluateCondition } from './eval'; import { eventIsSession, normalize } from './normalize'; @@ -17,6 +18,8 @@ export * from './normalize'; const SENTRY_KEY = '37f8a2ee37c0409d8970bc7559c7c7e4'; const JS_VERSION = require('../../../package.json').dependencies['@sentry/core']; +type CustomScript = { execute(events: TestServerEvent<Event>[]): Promise<void> }; + const log = createLogger('Recipe Runner'); function loadRecipes(rootDir: string, electronVersion: string): RecipeRunner[] { @@ -175,9 +178,11 @@ export class RecipeRunner { await delay(2_000); } - await context.waitForEvents(testServer, expectedEvents.length); + const totalEvents = expectedEvents.length + (this._recipe.customScriptPath ? 1 : 0); + + await context.waitForEvents(testServer, totalEvents); - if (expectedEvents.length !== testServer.events.length) { + if (totalEvents !== testServer.events.length) { throw new Error(`Expected ${expectedEvents.length} events but server has ${testServer.events.length} events`); } @@ -192,6 +197,13 @@ export class RecipeRunner { expect(log).to.include(this._recipe.metadata.expectedError); } + if (this._recipe.customScriptPath) { + log('Loading custom script', this._recipe.customScriptPath); + const script: CustomScript = await import(this._recipe.customScriptPath); + await script.execute(testServer.events as TestServerEvent<Event>[]); + return; + } + for (const event of testServer.events) { event.data = normalize(event.data); } diff --git a/test/e2e/recipe/parser.ts b/test/e2e/recipe/parser.ts index e5963d5e..96235670 100644 --- a/test/e2e/recipe/parser.ts +++ b/test/e2e/recipe/parser.ts @@ -1,6 +1,6 @@ import { Event, Session } from '@sentry/types'; -import { readFileSync } from 'fs'; -import { dirname, sep } from 'path'; +import { readdirSync, readFileSync } from 'fs'; +import { dirname, join, sep } from 'path'; import YAML from 'yaml'; import { TestServerEvent } from '../server'; @@ -25,6 +25,7 @@ export interface TestRecipe { metadata: TestMetadata; files: Record<string, string>; expectedEvents: ConditionalTestServerEvent[]; + customScriptPath?: string; } function isEventOrSession(path: string): boolean { @@ -37,6 +38,12 @@ function getEventsAndSessions(rootDir: string): ConditionalTestServerEvent[] { .map((path) => JSON.parse(readFileSync(path, { encoding: 'utf-8' })) as ConditionalTestServerEvent); } +function getCustomScript(rootDir: string): string | undefined { + return readdirSync(rootDir) + .map((path) => join(rootDir, path)) + .find((path) => path.endsWith('.ts')); +} + function getFiles(rootDir: string): Record<string, string> { return Array.from(walkSync(rootDir)) .filter((path) => !isEventOrSession(path) && !path.endsWith('recipe.yml')) @@ -56,5 +63,6 @@ export function parseRecipe(ymlPath: string): TestRecipe { metadata: YAML.parse(readFileSync(ymlPath, { encoding: 'utf8' })), files: getFiles(rootPath), expectedEvents: getEventsAndSessions(rootPath), + customScriptPath: getCustomScript(rootPath), }; } diff --git a/test/e2e/test-apps/other/window-titles/events.ts b/test/e2e/test-apps/other/window-titles/events.ts new file mode 100644 index 00000000..f31d00da --- /dev/null +++ b/test/e2e/test-apps/other/window-titles/events.ts @@ -0,0 +1,24 @@ +import { Event } from '@sentry/types'; +import { expect } from 'chai'; + +import { TestServerEvent } from '../../../server'; + +export async function execute(events: TestServerEvent<Event>[]): Promise<void> { + expect(events).to.have.lengthOf(1); + + const event = events[0]; + + expect(event.data.breadcrumbs?.length).to.be.greaterThan(5); + + let withData = 0; + + for (const breadcrumb of event.data.breadcrumbs || []) { + if (breadcrumb?.data?.id) { + withData += 1; + } + + expect(breadcrumb?.data?.title).to.be.undefined; + } + + expect(withData).to.be.greaterThanOrEqual(2); +} diff --git a/test/e2e/test-apps/other/window-titles/package.json b/test/e2e/test-apps/other/window-titles/package.json new file mode 100644 index 00000000..47fca2a9 --- /dev/null +++ b/test/e2e/test-apps/other/window-titles/package.json @@ -0,0 +1,9 @@ +{ + "name": "window-titles", + "version": "1.0.0", + "main": "src/main.js", + "homepage": "https://github.com/getsentry/sentry-electron/pull/551", + "dependencies": { + "@sentry/electron": "3.0.0" + } +} diff --git a/test/e2e/test-apps/other/window-titles/recipe.yml b/test/e2e/test-apps/other/window-titles/recipe.yml new file mode 100644 index 00000000..0f14c716 --- /dev/null +++ b/test/e2e/test-apps/other/window-titles/recipe.yml @@ -0,0 +1,2 @@ +description: Window titles are empty when disabled +command: yarn diff --git a/test/e2e/test-apps/other/window-titles/src/index.html b/test/e2e/test-apps/other/window-titles/src/index.html new file mode 100644 index 00000000..79a9802f --- /dev/null +++ b/test/e2e/test-apps/other/window-titles/src/index.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + </head> + <body> + <script> + const { init } = require('@sentry/electron'); + + init({ + debug: true, + }); + + setInterval(() => { + document.title = `This is the new page title: ${Math.random()}`; + }, 10); + </script> + </body> +</html> diff --git a/test/e2e/test-apps/other/window-titles/src/main.js b/test/e2e/test-apps/other/window-titles/src/main.js new file mode 100644 index 00000000..fa373743 --- /dev/null +++ b/test/e2e/test-apps/other/window-titles/src/main.js @@ -0,0 +1,33 @@ +const path = require('path'); + +const { app, BrowserWindow } = require('electron'); +const { init } = require('@sentry/electron'); + +init({ + dsn: '__DSN__', + debug: true, + autoSessionTracking: false, + onFatalError: () => {}, +}); + +app.on('ready', () => { + const mainWindow = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + }, + }); + + mainWindow.webContents.on('dom-ready', () => { + setTimeout(() => { + mainWindow.minimize(); + + setTimeout(() => { + throw new Error('enough'); + }, 500); + }, 500); + }); + + mainWindow.loadFile(path.join(__dirname, 'index.html')); +}); From a00130540f9bbd1bae9b78d00b754eb82cfdac49 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 1 Dec 2022 15:31:21 +0100 Subject: [PATCH 049/239] Fix electron version lookup (#598) --- package.json | 2 +- test/e2e/versions.json | 2 +- yarn.lock | 17 +++++++++++++---- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 9aa95011..48378938 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "electron": "19.0.8", "@electron/get": "^1.13.0", "electron-mocha": "^11.0.0", - "electron-latest-versions": "^0.1.7", + "electron-latest-versions": "^0.2.0", "extract-zip": "^2.0.1", "koa": "^2.13.4", "koa-bodyparser": "^4.3.0", diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 38a3f269..cc43d8ca 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.12","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.3","20.3.2","21.1.1"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.8","20.3.7","21.3.1","22.0.0"] diff --git a/yarn.lock b/yarn.lock index 4d4c873e..c60b63a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1147,10 +1147,12 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-latest-versions@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/electron-latest-versions/-/electron-latest-versions-0.1.7.tgz#f8c3cdc065efc0a11660eb372315d009877ae0bd" - integrity sha512-eUbkBwa6rsoh5nWKF2vPPezr3DWlzMgnmrclEneyc0EOUIZESZPtv8uoFX8saEVDMvSNBVZAiXeR2/xMZIjFzQ== +electron-latest-versions@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/electron-latest-versions/-/electron-latest-versions-0.2.0.tgz#b68411c50c30ad39587cad08eb652941b43b3068" + integrity sha512-7/FriqKppJQJ/bBO/22sdEWlxAKKNayVjNnw5HUCuW0uRabZGuq4bA/aThZM4axDlMSJKb8O26UOKzxV7TI5Rw== + dependencies: + semver "^7.3.8" electron-mocha@^11.0.0: version "11.0.2" @@ -2941,6 +2943,13 @@ semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7: dependencies: lru-cache "^6.0.0" +semver@^7.3.8: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + serialize-error@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" From c22dd572c8fb955e775de2cecd191c67d689623d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Dec 2022 13:25:15 +0100 Subject: [PATCH 050/239] chore(deps-dev): bump electron from 19.0.8 to 19.1.8 (#600) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 48378938..31076a75 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "chai-subset": "^1.6.0", "cross-env": "^7.0.3", "eslint": "7.27.0", - "electron": "19.0.8", + "electron": "19.1.8", "@electron/get": "^1.13.0", "electron-mocha": "^11.0.0", "electron-latest-versions": "^0.2.0", diff --git a/yarn.lock b/yarn.lock index c60b63a0..3e325e8c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1173,10 +1173,10 @@ electron-window@^0.8.0: dependencies: is-electron-renderer "^2.0.0" -electron@19.0.8: - version "19.0.8" - resolved "https://registry.yarnpkg.com/electron/-/electron-19.0.8.tgz#c4d4ba915de554f2926261eb37d3527d2b092d4c" - integrity sha512-OWK3P/NbDFfBUv+wbYv1/OV4jehY5DQPT7n1maQJfN9hsnrWTMktXS/bmS05eSUAjNAzHmKPKfiKH2c1Yr7nGw== +electron@19.1.8: + version "19.1.8" + resolved "https://registry.yarnpkg.com/electron/-/electron-19.1.8.tgz#3ce19c270ca86d05bbf0df5ceeaea2d23edc7083" + integrity sha512-UfPQdFjgKI0xCm1V5sV3iAVOs0kCwAE91xWzV5tI7ij14yOkxTdXp9BqTzFaSbQYLYxn6q1BUUe1nlzjJjzAnw== dependencies: "@electron/get" "^1.14.1" "@types/node" "^16.11.26" From 26bbb62ea038cd09b5fb58464d3ce44b448ba787 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 4 Dec 2022 10:06:10 +0100 Subject: [PATCH 051/239] test: New Electron versions (#601) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index cc43d8ca..f2ee32b8 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.8","20.3.7","21.3.1","22.0.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.8","21.3.3","22.0.0"] From 29a0b0e004506cfd515ef2d6d11c69fdd18fa84a Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad <aprasad@sentry.io> Date: Wed, 7 Dec 2022 14:21:25 +0100 Subject: [PATCH 052/239] meta: Add new issue templates (#604) --- .github/ISSUE_TEMPLATE/bug.yml | 83 ++++++++++++++++++++++++++++ .github/ISSUE_TEMPLATE/bug_report.md | 23 -------- .github/ISSUE_TEMPLATE/feature.yml | 30 ++++++++++ 3 files changed, 113 insertions(+), 23 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug.yml delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature.yml diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 00000000..d1d9f0e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,83 @@ +name: 🐞 Bug Report +description: Tell us about something that's not working the way we (probably) intend. +labels: ["Type: Bug"] +body: + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered. + options: + - label: I have checked for existing issues https://github.com/getsentry/sentry-javascript/issues + required: true + - label: I have reviewed the documentation https://docs.sentry.io/ + required: true + - label: I am using the latest SDK release https://github.com/getsentry/sentry-javascript/releases + required: true + - type: dropdown + id: type + attributes: + label: How do you use Sentry? + options: + - Sentry Saas (sentry.io) + - Self-hosted/on-premise + validations: + required: true + - type: input + id: sdk-version + attributes: + label: Electron SDK Version + description: What version of the Electron SDK are you using? + placeholder: ex. 4.1.2 + validations: + required: true + - type: input + id: electron-version + attributes: + label: Electron Version + description: What version of the Electron are you using? + placeholder: ex. 22.0.0 + validations: + required: true + - type: dropdown + id: platform + attributes: + label: What platform are you using? + options: + - "Linux" + - "MacOS" + - "Windows" + - "Other" + - type: input + id: link-to-sentry + attributes: + label: Link to Sentry event + description: If applicable, provide a link to the affected event from your Sentry account. The event will only be viewable by Sentry staff. + placeholder: https://sentry.io/organizations/<org-slug>/issues/<issue-id>/events/<event-id>/?project=<project-id> + - type: textarea + id: repro + attributes: + label: Steps to Reproduce + description: How can we see what you're seeing? Specific is terrific. + placeholder: |- + 1. What + 2. you + 3. did. + validations: + required: true + - type: textarea + id: expected + attributes: + label: Expected Result + validations: + required: true + - type: textarea + id: actual + attributes: + label: Actual Result + description: Logs? Screenshots? Yes, please. + validations: + required: true + - type: markdown + attributes: + value: |- + ## Thanks 🙏 diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index fa00a1cb..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -name: "\U0001F41B Bug Report" -about: Report a reproducible bug or regression in Sentry Electron SDKs. -title: '' -assignees: '' ---- - -<!-- Requirements: please go through this checklist before opening a new issue --> - -- [ ] Review the documentation: https://docs.sentry.io/platforms/javascript/electron/ -- [ ] Search for existing issues: https://github.com/getsentry/sentry-electron/issues -- [ ] Use the latest release: https://github.com/getsentry/sentry-electron/releases -- [ ] Provide a link to the affected event from your Sentry account - -## Versions + Platform - -- [ ] SDK version - `@sentry/electron@v?.?.?` -- [ ] Electron version - `electron@v?.?.?` -- [ ] Platform - `Windows/macOS/Linux` - -## Description - -Describe your issue in detail, ideally, you have a reproducible demo that you can show. diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml new file mode 100644 index 00000000..f3df2f94 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature.yml @@ -0,0 +1,30 @@ +name: 💡 Feature Request +description: Create a feature request for the Sentry Electron SDK. +labels: 'Type: Improvement' +body: + - type: markdown + attributes: + value: Thanks for taking the time to file a feature request! Please fill out this form as completely as possible. + - type: textarea + id: problem + attributes: + label: Problem Statement + description: A clear and concise description of what you want and what your use case is. + placeholder: |- + I want to make whirled peas, but Sentry doesn't blend. + validations: + required: true + - type: textarea + id: expected + attributes: + label: Solution Brainstorm + description: We know you have bright ideas to share ... share away, friend. + placeholder: |- + Add a blender to Sentry. + validations: + required: true + - type: markdown + attributes: + value: |- + ## Thanks 🙏 + Check our [triage docs](https://open.sentry.io/triage/) for what to expect next. From 35bb8b4efe98c9f2afd9ac1c7c41bf48abd083f8 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 7 Dec 2022 20:21:39 +0000 Subject: [PATCH 053/239] feat: Update to v7.24.1 of JavaScript SDKs (#605) --- package.json | 16 ++++----- yarn.lock | 100 +++++++++++++++++++++++++-------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/package.json b/package.json index 31076a75..ae2c1547 100644 --- a/package.json +++ b/package.json @@ -57,18 +57,18 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.16.0", - "@sentry/core": "7.16.0", - "@sentry/node": "7.16.0", - "@sentry/types": "7.16.0", - "@sentry/utils": "7.16.0", + "@sentry/browser": "7.24.1", + "@sentry/core": "7.24.1", + "@sentry/node": "7.24.1", + "@sentry/types": "7.24.1", + "@sentry/utils": "7.24.1", "deepmerge": "4.2.2", "tslib": "^2.3.1" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.16.0", - "@sentry-internal/typescript": "7.16.0", - "@sentry/tracing": "7.16.0", + "@sentry-internal/eslint-config-sdk": "7.24.1", + "@sentry-internal/typescript": "7.24.1", + "@sentry/tracing": "7.24.1", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/yarn.lock b/yarn.lock index 3e325e8c..2d896adc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -100,13 +100,13 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@sentry-internal/eslint-config-sdk@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.16.0.tgz#a626e2d248c8a079adc7e0855215b372e5294f65" - integrity sha512-rFbHI6RlO0Y1vwxtvRW/KyOiYBdT3kyKVIf4sXJxUc0IJ6ETmFXjGNRerWKUg3AF7m5QfHNsKQhHMKXhsCGPog== +"@sentry-internal/eslint-config-sdk@7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.24.1.tgz#94c0f25302691a3dcf3a8b2a68fdeb57a16a430c" + integrity sha512-Jyvb4T7wRmtQ7N1dMH++AncpoxQeH7nu8+i7vc3qc/yIg5qXFgh4TwV4YL9ab2+Tal65wKOrAchuom/QDSeJYg== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.16.0" - "@sentry-internal/typescript" "7.16.0" + "@sentry-internal/eslint-plugin-sdk" "7.24.1" + "@sentry-internal/typescript" "7.24.1" "@typescript-eslint/eslint-plugin" "^3.9.0" "@typescript-eslint/parser" "^3.9.0" eslint-config-prettier "^6.11.0" @@ -115,71 +115,71 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.16.0.tgz#8675577a2781fae3cfac918d95fcd1ac731c8350" - integrity sha512-NlNZs8JlMA9wK2SaTrbznqk9P8P8yM0oj/HI7CnDJFuBStfbdFLuf025ejnSLXCfdPNRnHxKsHkq78jXyyA+Kg== +"@sentry-internal/eslint-plugin-sdk@7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.24.1.tgz#5748d1c3aa7a5aa47efc7e701ae25e13fb5c435f" + integrity sha512-LvUp73MHGrvUXOSkptXu+Lx8enD93doljL1IMqqcqgDyEHkqitFY/bGMBLpVl1CE6pQumlhIq5q97CaOr+fMLg== dependencies: requireindex "~1.1.0" -"@sentry-internal/typescript@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.16.0.tgz#a37c15649ed9d36d0e3ea0e1f622bb157308d5ce" - integrity sha512-cudpmUkvKmJNiCud5z/J+zbPDaulwClG/wLeK/+tFKz+qI5zrFWP9FGD4lTvL2wRyz8eQ4qTXtdaFK2RkxU/7A== +"@sentry-internal/typescript@7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.24.1.tgz#3c1e854c1106bbe607fbccde64e534a7ef7fc6a5" + integrity sha512-5j3pwSJoMwk5KA6SvLPSeX7QtCqVVA9MTSLIjushg9Q+8HEq8MTAEizzEs8uZnS7b0GL4i4YUupU+dqvGkJtqA== -"@sentry/browser@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.16.0.tgz#afd2bac91857d2359272a0d9d2b1ee5ca7d69828" - integrity sha512-tJ063zvoF8Raw7mzQEXupOFPSN6v36WIbsDVGeFdToPCwViaBuATaxvWCrudGzsnBkMyItmTLJkzn9SEIXUOiw== +"@sentry/browser@7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.24.1.tgz#01c1ce61ba3cfbdec07bcf1413dc958087e26c32" + integrity sha512-Tr7p1Bg8a+ycdUmZuega0TTOl6xNZUj17PBFZnCjpZtxUMxlwR6aBlM0TxF6/bV6fUJchmoLCAjL3kLIHSSo6Q== dependencies: - "@sentry/core" "7.16.0" - "@sentry/types" "7.16.0" - "@sentry/utils" "7.16.0" + "@sentry/core" "7.24.1" + "@sentry/types" "7.24.1" + "@sentry/utils" "7.24.1" tslib "^1.9.3" -"@sentry/core@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.16.0.tgz#60f9b54ef2ec524176b329e1d15be39c36da5953" - integrity sha512-vq6H1b/IPTvzDD9coQ3wIudvSjkAYuUlXb1dv69dRlq4v3st9dcKBps1Zf0lQ1i4TVlDLoe1iGMmNFglMF1Q5w== +"@sentry/core@7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.24.1.tgz#815480791e4230fd2e8718a4caa1b8253ca42c23" + integrity sha512-x/kBpBVFCZn4ijVVAPAw0cmHy0PfXgBpYGQ1X3+EEzI3pkvlygvnF2pLR/4LrsC23zGfIRlbDj4DwK5hxoFF4g== dependencies: - "@sentry/types" "7.16.0" - "@sentry/utils" "7.16.0" + "@sentry/types" "7.24.1" + "@sentry/utils" "7.24.1" tslib "^1.9.3" -"@sentry/node@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.16.0.tgz#f049e243169ec4d6058d5c0fff08104509f5ba9a" - integrity sha512-OC0TO6UTetv8IsX3zNhdeui7YVIQCnhkbfi+CMrB6YsHaMP2A9qH5gNyu/hKbaY9+4xci7e4rxyRmI65aKS9ow== +"@sentry/node@7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.24.1.tgz#709376a72f6d10ad5c22dc2bb446b1ca9d51a949" + integrity sha512-sCZEqG+9SGn7vq9QHrhjU9SB3U/7FHAonCFG9oQth8zNT4SpOKKjEkbQC45sHqZ00dnERRuQMoEznOHqF46uIA== dependencies: - "@sentry/core" "7.16.0" - "@sentry/types" "7.16.0" - "@sentry/utils" "7.16.0" + "@sentry/core" "7.24.1" + "@sentry/types" "7.24.1" + "@sentry/utils" "7.24.1" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/tracing@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.16.0.tgz#823b84abf0df08ecd16669547b4281e3c7a96ac9" - integrity sha512-8a9bViUY7oS35msBMouxkgz5OGd9NGutuKF7SQ8hPZwTcQPOxOwPyHccykgr56k6OmaDjGCLZMqZowaysJj+4g== +"@sentry/tracing@7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.24.1.tgz#8f947b01a6b836334f20fcb36441d69cede474c9" + integrity sha512-Vp03aH7wMxLszFMZqVWPlDlqCP5mwAqqsh9nHWUJhyarGJjeacrMj+B+5qKKM4W/JNnbrHRTRLw2lL/szxj1KA== dependencies: - "@sentry/core" "7.16.0" - "@sentry/types" "7.16.0" - "@sentry/utils" "7.16.0" + "@sentry/core" "7.24.1" + "@sentry/types" "7.24.1" + "@sentry/utils" "7.24.1" tslib "^1.9.3" -"@sentry/types@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.16.0.tgz#79c06ada153a84feb949fa49b1c9d15f91decd79" - integrity sha512-i6D+OK6d0l/k+VQvRp/Pt21WkDEgVBUIZq+sOkEZJczbcfexVdXKeXXoYTD2vYuFq8Yy28fzlsZaKI+NoH94yQ== +"@sentry/types@7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.24.1.tgz#ff2e39752ff1d46b54807275e9262209f95ec429" + integrity sha512-77E1cgw31YmEeqTi5RNMfIgwDB164UdtAGKtTtCehbF9HffO3Lp4f3G8TumqNKOik1RDNHrn+ZWqbj2c97UZZA== -"@sentry/utils@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.16.0.tgz#b832520c661d4435808969ee04814ff8e20497b1" - integrity sha512-3Zh1txg7IRp4kZAdG27YF7K6lD1IZyuAo9KjoPg1Xzqa4DOZyASJuEkbf+rK2a9T4HrtVHHXJUsNbKg8WM3VHg== +"@sentry/utils@7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.24.1.tgz#f9760a7cb4b33d2ead01aace7b0fd62c8c2c6be8" + integrity sha512-wH0+ToU3OpL373Nx0YiuYje82a8lf6fm7q+MqyWyC6sVETe4YiL4+Ge0WLEJ0XEGFjxfL4gSZL3FhoVbJQxUtA== dependencies: - "@sentry/types" "7.16.0" + "@sentry/types" "7.24.1" tslib "^1.9.3" "@sindresorhus/is@^0.14.0": From 34481a63a49049a159a473d82523e11eb15e3d80 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 6 Jan 2023 14:48:17 +0000 Subject: [PATCH 054/239] CI: Use volta-cli/action to use the correct node version (#609) --- .github/workflows/build.yml | 20 ++++---------------- .github/workflows/new-versions-pr.yml | 4 +--- package.json | 2 +- test/e2e/context.ts | 6 +++++- 4 files changed, 11 insertions(+), 21 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 781ad437..9e3d2aa5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,10 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - with: - node-version: '14' - cache: 'yarn' + - uses: volta-cli/action@v3 - name: Install run: yarn install - name: Build @@ -41,10 +38,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - with: - node-version: '14' - cache: 'yarn' + - uses: volta-cli/action@v3 - run: yarn install - name: Run Linter run: yarn lint @@ -60,10 +54,7 @@ jobs: os: [ubuntu-latest, macos-latest, windows-latest] steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - with: - node-version: '14' - cache: 'yarn' + - uses: volta-cli/action@v3 - run: yarn install - name: Run Unit Tests run: yarn test @@ -81,10 +72,7 @@ jobs: ELECTRON_VERSION: ${{ matrix.electron }} steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - with: - node-version: '14' - cache: 'yarn' + - uses: volta-cli/action@v3 - uses: actions/cache@v2 with: path: | diff --git a/.github/workflows/new-versions-pr.yml b/.github/workflows/new-versions-pr.yml index 0ce18992..8c47b74d 100644 --- a/.github/workflows/new-versions-pr.yml +++ b/.github/workflows/new-versions-pr.yml @@ -10,9 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - with: - node-version: '14' + - uses: volta-cli/action@v3 - run: yarn install - name: Update Versions run: yarn update-electron-versions diff --git a/package.json b/package.json index ae2c1547..88b6e14b 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "yaml": "^1.10.2" }, "volta": { - "node": "16.14.0", + "node": "18.12.1", "yarn": "1.22.17" } } diff --git a/test/e2e/context.ts b/test/e2e/context.ts index aaab4ef6..c190dc1b 100644 --- a/test/e2e/context.ts +++ b/test/e2e/context.ts @@ -179,7 +179,11 @@ export class TestContext { private _clearAppUserData() { for (const dir of getDeleteDirectories(this._appName)) { - rmSync(dir, { recursive: true, force: true }); + try { + rmSync(dir, { recursive: true, force: true }); + } catch (_) { + // + } } } } From fed42dfadd92c05b258cb98c9f8bbda28aa383b5 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 6 Jan 2023 14:50:32 +0000 Subject: [PATCH 055/239] feat: Update JavaScript SDKs to 7.29.0 (#615) --- package.json | 16 +++---- src/renderer/sdk.ts | 2 +- yarn.lock | 110 ++++++++++++++++++++++++-------------------- 3 files changed, 69 insertions(+), 59 deletions(-) diff --git a/package.json b/package.json index 88b6e14b..7d342e27 100644 --- a/package.json +++ b/package.json @@ -57,18 +57,18 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.24.1", - "@sentry/core": "7.24.1", - "@sentry/node": "7.24.1", - "@sentry/types": "7.24.1", - "@sentry/utils": "7.24.1", + "@sentry/browser": "7.29.0", + "@sentry/core": "7.29.0", + "@sentry/node": "7.29.0", + "@sentry/types": "7.29.0", + "@sentry/utils": "7.29.0", "deepmerge": "4.2.2", "tslib": "^2.3.1" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.24.1", - "@sentry-internal/typescript": "7.24.1", - "@sentry/tracing": "7.24.1", + "@sentry-internal/eslint-config-sdk": "7.29.0", + "@sentry-internal/typescript": "7.29.0", + "@sentry/tracing": "7.29.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 97e46fcf..419d72e3 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -21,7 +21,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_16_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_29_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 2d896adc..142f6b75 100644 --- a/yarn.lock +++ b/yarn.lock @@ -100,13 +100,13 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@sentry-internal/eslint-config-sdk@7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.24.1.tgz#94c0f25302691a3dcf3a8b2a68fdeb57a16a430c" - integrity sha512-Jyvb4T7wRmtQ7N1dMH++AncpoxQeH7nu8+i7vc3qc/yIg5qXFgh4TwV4YL9ab2+Tal65wKOrAchuom/QDSeJYg== +"@sentry-internal/eslint-config-sdk@7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.29.0.tgz#ea0e24e0edcc4daf00c76876b809697ce36ded06" + integrity sha512-2173bQkiuSjCY8a3JubgEo+JPMXPObIjcMK9kQhPFmNv4kn8AcnLOUO5fzN/4Bm9PNzuLSqJeJgJrgh0K/rBsw== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.24.1" - "@sentry-internal/typescript" "7.24.1" + "@sentry-internal/eslint-plugin-sdk" "7.29.0" + "@sentry-internal/typescript" "7.29.0" "@typescript-eslint/eslint-plugin" "^3.9.0" "@typescript-eslint/parser" "^3.9.0" eslint-config-prettier "^6.11.0" @@ -115,71 +115,81 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.24.1.tgz#5748d1c3aa7a5aa47efc7e701ae25e13fb5c435f" - integrity sha512-LvUp73MHGrvUXOSkptXu+Lx8enD93doljL1IMqqcqgDyEHkqitFY/bGMBLpVl1CE6pQumlhIq5q97CaOr+fMLg== +"@sentry-internal/eslint-plugin-sdk@7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.29.0.tgz#f8d10edd65ec272cfb01b56ca148874baf2ff9aa" + integrity sha512-bhJNEKMR0rPaL+++HiPYXtsRXBV7fyX69IcbluLGXTNk8IvSbwxVl/jKZDO5pterE312oqBlkCHnQidYmqd3Zg== dependencies: requireindex "~1.1.0" -"@sentry-internal/typescript@7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.24.1.tgz#3c1e854c1106bbe607fbccde64e534a7ef7fc6a5" - integrity sha512-5j3pwSJoMwk5KA6SvLPSeX7QtCqVVA9MTSLIjushg9Q+8HEq8MTAEizzEs8uZnS7b0GL4i4YUupU+dqvGkJtqA== +"@sentry-internal/typescript@7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.29.0.tgz#4ea3133d4d0056a5c7f89f58ad26f1c1062d11ad" + integrity sha512-WB1ncGZ8IjM2N/hGD01mYoWIoVUcuCMXZIaejXxYnhnIdBv+jTsO7UiRa66IsCyl1QGQMNPyMGsgCoqqwctQPQ== -"@sentry/browser@7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.24.1.tgz#01c1ce61ba3cfbdec07bcf1413dc958087e26c32" - integrity sha512-Tr7p1Bg8a+ycdUmZuega0TTOl6xNZUj17PBFZnCjpZtxUMxlwR6aBlM0TxF6/bV6fUJchmoLCAjL3kLIHSSo6Q== +"@sentry/browser@7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.29.0.tgz#eb162b50adec33ac49ecd3dc930bdffbfda8098e" + integrity sha512-Af+dIcntaw405Wt7myDOMGDxiszfy4aBdshrEKYbGgcfHjgXBIdF3iKlNatvl6nrOm+IOVuKgSpCLOr2hiCwzw== dependencies: - "@sentry/core" "7.24.1" - "@sentry/types" "7.24.1" - "@sentry/utils" "7.24.1" + "@sentry/core" "7.29.0" + "@sentry/replay" "7.29.0" + "@sentry/types" "7.29.0" + "@sentry/utils" "7.29.0" tslib "^1.9.3" -"@sentry/core@7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.24.1.tgz#815480791e4230fd2e8718a4caa1b8253ca42c23" - integrity sha512-x/kBpBVFCZn4ijVVAPAw0cmHy0PfXgBpYGQ1X3+EEzI3pkvlygvnF2pLR/4LrsC23zGfIRlbDj4DwK5hxoFF4g== +"@sentry/core@7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.29.0.tgz#bc4b54d56cf7652598d4430cf43ea97cc069f6fe" + integrity sha512-+e9aIp2ljtT4EJq3901z6TfEVEeqZd5cWzbKEuQzPn2UO6If9+Utd7kY2Y31eQYb4QnJgZfiIEz1HonuYY6zqQ== dependencies: - "@sentry/types" "7.24.1" - "@sentry/utils" "7.24.1" + "@sentry/types" "7.29.0" + "@sentry/utils" "7.29.0" tslib "^1.9.3" -"@sentry/node@7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.24.1.tgz#709376a72f6d10ad5c22dc2bb446b1ca9d51a949" - integrity sha512-sCZEqG+9SGn7vq9QHrhjU9SB3U/7FHAonCFG9oQth8zNT4SpOKKjEkbQC45sHqZ00dnERRuQMoEznOHqF46uIA== +"@sentry/node@7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.29.0.tgz#721aab15faef98f291b5a3fcb9b303565deb1e74" + integrity sha512-s/bN/JS5gPTmwzVms4FtI5YNYtC9aGY4uqdx/llVrIiVv7G6md/oJJzKtO1C4dt6YshjGjSs5KCpEn1NM4+1iA== dependencies: - "@sentry/core" "7.24.1" - "@sentry/types" "7.24.1" - "@sentry/utils" "7.24.1" + "@sentry/core" "7.29.0" + "@sentry/types" "7.29.0" + "@sentry/utils" "7.29.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/tracing@7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.24.1.tgz#8f947b01a6b836334f20fcb36441d69cede474c9" - integrity sha512-Vp03aH7wMxLszFMZqVWPlDlqCP5mwAqqsh9nHWUJhyarGJjeacrMj+B+5qKKM4W/JNnbrHRTRLw2lL/szxj1KA== +"@sentry/replay@7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.29.0.tgz#75d5bb9df39e0a31994be245032c9998af62a304" + integrity sha512-Gw7HgviJQu6pX5RFQGVY38Av4qFn9otrZdwSSl/QK5hIyg6yhlh5h7U0ydZkrYYGiW6Z6SYYRpEWCJc/Wbh+ZQ== dependencies: - "@sentry/core" "7.24.1" - "@sentry/types" "7.24.1" - "@sentry/utils" "7.24.1" + "@sentry/core" "7.29.0" + "@sentry/types" "7.29.0" + "@sentry/utils" "7.29.0" + +"@sentry/tracing@7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.29.0.tgz#767f309cbff46ab12bec6ab3c266f7f03fec91fd" + integrity sha512-MAN/G6XROtRhzo/KDjddb6VJn/Q1TaPLwdyj9vvfkUkBNtlt5k16oXp+u7eHWX0uujER9wnZtj2ivXaPeqq0VA== + dependencies: + "@sentry/core" "7.29.0" + "@sentry/types" "7.29.0" + "@sentry/utils" "7.29.0" tslib "^1.9.3" -"@sentry/types@7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.24.1.tgz#ff2e39752ff1d46b54807275e9262209f95ec429" - integrity sha512-77E1cgw31YmEeqTi5RNMfIgwDB164UdtAGKtTtCehbF9HffO3Lp4f3G8TumqNKOik1RDNHrn+ZWqbj2c97UZZA== +"@sentry/types@7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.29.0.tgz#ed829b6014ee19049035fec6af2b4fea44ff28b8" + integrity sha512-DmoEpoqHPty3VxqubS/5gxarwebHRlcBd/yuno+PS3xy++/i9YPjOWLZhU2jYs1cW68M9R6CcCOiC9f2ckJjdw== -"@sentry/utils@7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.24.1.tgz#f9760a7cb4b33d2ead01aace7b0fd62c8c2c6be8" - integrity sha512-wH0+ToU3OpL373Nx0YiuYje82a8lf6fm7q+MqyWyC6sVETe4YiL4+Ge0WLEJ0XEGFjxfL4gSZL3FhoVbJQxUtA== +"@sentry/utils@7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.29.0.tgz#cbf8f87dd851b0fdc7870db9c68014c321c3bab8" + integrity sha512-ICcBwTiBGK8NQA8H2BJo0JcMN6yCeKLqNKNMVampRgS6wSfSk1edvcTdhRkW3bSktIGrIPZrKskBHyMwDGF2XQ== dependencies: - "@sentry/types" "7.24.1" + "@sentry/types" "7.29.0" tslib "^1.9.3" "@sindresorhus/is@^0.14.0": From 82927b4ccf2b1f73a26e24004e52d906439ea9c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Jan 2023 15:04:54 +0000 Subject: [PATCH 056/239] chore(deps): bump json5 from 1.0.1 to 1.0.2 (#616) --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 142f6b75..17efdde5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2179,9 +2179,9 @@ json-stringify-safe@^5.0.1: integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" @@ -2425,9 +2425,9 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: brace-expansion "^1.1.7" minimist@^1.2.0, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== mkdirp@^0.5.4: version "0.5.6" From e451f3c0d851c3dd2285daf05337e5ac4052a67b Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 9 Jan 2023 13:15:46 +0000 Subject: [PATCH 057/239] feat: Use a transport to send events to main process rather than via integration (#610) --- examples/electron-forge-webpack/event.json | 2 +- examples/electron-forge/event.json | 2 +- .../electron-react-boilerplate/event.json | 2 +- examples/electron-vite/event.json | 2 +- .../event.json | 2 +- examples/webpack-context-isolation/event.json | 2 +- src/common/ipc.ts | 5 +- src/main/ipc.ts | 82 ++++++++++++++++--- src/preload/index.ts | 1 + src/preload/legacy.ts | 1 + src/renderer/ipc.ts | 13 ++- src/renderer/sdk.ts | 9 +- src/renderer/transport.ts | 17 ++++ test/e2e/download.ts | 18 +++- test/e2e/server/envelope.ts | 61 -------------- test/e2e/server/index.ts | 31 +++++-- .../preload-error-protocol/event.json | 2 +- .../javascript/preload-error/event.json | 2 +- .../renderer-error-custom-env/event.json | 2 +- .../renderer-error-custom-release/event.json | 2 +- .../renderer-error-protocol/event.json | 2 +- .../javascript/renderer-error/event.json | 2 +- .../offline/renderer-error/event.json | 2 +- .../test-apps/other/child-process/event2.json | 2 +- .../other/custom-renderer-name/event.json | 2 +- .../test-apps/other/error-iframe/event.json | 2 +- .../other/scope-breadcrumbs/event.json | 27 ++++-- .../other/scope-breadcrumbs/src/index.html | 4 + .../test-apps/other/screenshots/event.json | 2 +- .../sessions/javascript-error/event.json | 2 +- 30 files changed, 190 insertions(+), 115 deletions(-) create mode 100644 src/renderer/transport.ts delete mode 100644 test/e2e/server/envelope.ts diff --git a/examples/electron-forge-webpack/event.json b/examples/electron-forge-webpack/event.json index ba251353..16bb6c29 100644 --- a/examples/electron-forge-webpack/event.json +++ b/examples/electron-forge-webpack/event.json @@ -83,7 +83,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/examples/electron-forge/event.json b/examples/electron-forge/event.json index d8b806c9..0182666a 100644 --- a/examples/electron-forge/event.json +++ b/examples/electron-forge/event.json @@ -76,7 +76,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/examples/electron-react-boilerplate/event.json b/examples/electron-react-boilerplate/event.json index 86072c9e..0574cfee 100644 --- a/examples/electron-react-boilerplate/event.json +++ b/examples/electron-react-boilerplate/event.json @@ -68,7 +68,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/examples/electron-vite/event.json b/examples/electron-vite/event.json index 8de8a8a3..3c7b1401 100644 --- a/examples/electron-vite/event.json +++ b/examples/electron-vite/event.json @@ -68,7 +68,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/examples/webpack-context-isolation-preload/event.json b/examples/webpack-context-isolation-preload/event.json index ad61407b..61d37b24 100644 --- a/examples/webpack-context-isolation-preload/event.json +++ b/examples/webpack-context-isolation-preload/event.json @@ -84,7 +84,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/examples/webpack-context-isolation/event.json b/examples/webpack-context-isolation/event.json index 12bfe201..a2a16a44 100644 --- a/examples/webpack-context-isolation/event.json +++ b/examples/webpack-context-isolation/event.json @@ -84,7 +84,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/src/common/ipc.ts b/src/common/ipc.ts index c90a5f4f..0203d5e2 100644 --- a/src/common/ipc.ts +++ b/src/common/ipc.ts @@ -5,13 +5,16 @@ export enum IPCChannel { PING = 'sentry-electron.ping', /** IPC to send a captured event to Sentry. */ EVENT = 'sentry-electron.event', - /** IPC to capture scope globally. */ + /** IPC to pass scope changes to main process. */ SCOPE = 'sentry-electron.scope', + /** IPC to pass envelopes to the main process. */ + ENVELOPE = 'sentry-electron.envelope', } export interface IPCInterface { sendScope: (scope: string) => void; sendEvent: (event: string) => void; + sendEnvelope: (evn: Uint8Array | string) => void; } /** diff --git a/src/main/ipc.ts b/src/main/ipc.ts index b252172e..30cae0ab 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -1,16 +1,36 @@ -import { captureEvent, configureScope, Scope } from '@sentry/core'; -import { Event } from '@sentry/types'; -import { logger, SentryError } from '@sentry/utils'; +import { captureEvent, configureScope, getCurrentHub, Scope } from '@sentry/core'; +import { Attachment, AttachmentItem, Envelope, Event, EventItem } from '@sentry/types'; +import { forEachEnvelopeItem, logger, parseEnvelope, SentryError } from '@sentry/utils'; import { app, ipcMain, protocol, WebContents } from 'electron'; +import { TextDecoder, TextEncoder } from 'util'; import { IPCChannel, IPCMode, mergeEvents, PROTOCOL_SCHEME } from '../common'; import { supportsFullProtocol, whenAppReady } from './electron-normalize'; import { ElectronMainOptionsInternal } from './sdk'; -/** - * Handle events from the renderer processes - */ -export function handleEvent(options: ElectronMainOptionsInternal, jsonEvent: string, contents?: WebContents): void { +function captureEventFromRenderer( + options: ElectronMainOptionsInternal, + event: Event, + attachments: Attachment[], + contents?: WebContents, +): void { + const process = contents ? options?.getRendererName?.(contents) || 'renderer' : 'renderer'; + + // Ensure breadcrumbs are empty as they sent via scope updates + event.breadcrumbs = event.breadcrumbs || []; + + // Remove the environment as it defaults to 'production' and overwrites the main process environment + delete event.environment; + + // Remove the SDK info as we want the Electron SDK to be the one reporting the event + delete event.sdk?.name; + delete event.sdk?.version; + delete event.sdk?.packages; + + captureEvent(mergeEvents(event, { tags: { 'event.process': process } }), { attachments }); +} + +function handleEvent(options: ElectronMainOptionsInternal, jsonEvent: string, contents?: WebContents): void { let event: Event; try { event = JSON.parse(jsonEvent) as Event; @@ -19,9 +39,42 @@ export function handleEvent(options: ElectronMainOptionsInternal, jsonEvent: str return; } - const process = contents ? options?.getRendererName?.(contents) || 'renderer' : 'renderer'; + captureEventFromRenderer(options, event, [], contents); +} + +function eventFromEnvelope(envelope: Envelope): [Event, Attachment[]] | undefined { + let event: Event | undefined; + const attachments: Attachment[] = []; + + forEachEnvelopeItem(envelope, (item, type) => { + if (type === 'event' || type === 'transaction') { + event = Array.isArray(item) ? (item as EventItem)[1] : undefined; + } else if (type === 'attachment') { + const [headers, bin] = item as AttachmentItem; + + attachments.push({ + filename: headers.filename, + attachmentType: headers.attachment_type, + contentType: headers.content_type, + data: bin, + }); + } + }); - captureEvent(mergeEvents(event, { tags: { 'event.process': process } })); + return event ? [event, attachments] : undefined; +} + +function handleEnvelope(options: ElectronMainOptionsInternal, env: Uint8Array | string, contents?: WebContents): void { + const envelope = parseEnvelope(env, new TextEncoder(), new TextDecoder()); + + const eventAndAttachments = eventFromEnvelope(envelope); + if (eventAndAttachments) { + const [event, attachments] = eventAndAttachments; + captureEventFromRenderer(options, event, attachments, contents); + } else { + // Pass other types of envelope straight to the transport + void getCurrentHub().getClient()?.getTransport()?.send(envelope); + } } /** Is object defined and has keys */ @@ -32,7 +85,7 @@ function hasKeys(obj: any): boolean { /** * Handle scope updates from renderer processes */ -export function handleScope(options: ElectronMainOptionsInternal, jsonScope: string): void { +function handleScope(options: ElectronMainOptionsInternal, jsonScope: string): void { let rendererScope: Scope; try { rendererScope = JSON.parse(jsonScope) as Scope; @@ -85,12 +138,14 @@ function configureProtocol(options: ElectronMainOptionsInternal): void { .then(() => { for (const sesh of options.getSessions()) { sesh.protocol.registerStringProtocol(PROTOCOL_SCHEME, (request, callback) => { - const data = request.uploadData?.[0]?.bytes.toString(); + const data = request.uploadData?.[0]?.bytes; if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}`) && data) { - handleEvent(options, data); + handleEvent(options, data.toString()); } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.SCOPE}`) && data) { - handleScope(options, data); + handleScope(options, data.toString()); + } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.ENVELOPE}`) && data) { + handleEnvelope(options, data); } callback(''); @@ -106,6 +161,7 @@ function configureProtocol(options: ElectronMainOptionsInternal): void { function configureClassic(options: ElectronMainOptionsInternal): void { ipcMain.on(IPCChannel.EVENT, ({ sender }, jsonEvent: string) => handleEvent(options, jsonEvent, sender)); ipcMain.on(IPCChannel.SCOPE, (_, jsonScope: string) => handleScope(options, jsonScope)); + ipcMain.on(IPCChannel.ENVELOPE, ({ sender }, env: Uint8Array | string) => handleEnvelope(options, env, sender)); } /** Sets up communication channels with the renderer */ diff --git a/src/preload/index.ts b/src/preload/index.ts index ca5c7530..e7cb8617 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -16,6 +16,7 @@ if (window.__SENTRY_IPC__) { const ipcObject = { sendScope: (scopeJson: string) => ipcRenderer.send(IPCChannel.SCOPE, scopeJson), sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson), + sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope), }; // eslint-disable-next-line no-restricted-globals diff --git a/src/preload/legacy.ts b/src/preload/legacy.ts index 5a572aa9..38ea7b31 100644 --- a/src/preload/legacy.ts +++ b/src/preload/legacy.ts @@ -27,6 +27,7 @@ if (window.__SENTRY_IPC__) { const ipcObject = { sendScope: (scopeJson: string) => ipcRenderer.send(IPCChannel.SCOPE, scopeJson), sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson), + sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope), }; // eslint-disable-next-line no-restricted-globals diff --git a/src/renderer/ipc.ts b/src/renderer/ipc.ts index f74af6b0..a865c5e8 100644 --- a/src/renderer/ipc.ts +++ b/src/renderer/ipc.ts @@ -23,13 +23,18 @@ function getImplementation(): IPCInterface { // We include sentry_key in the URL so these dont end up in fetch breadcrumbs // https://github.com/getsentry/sentry-javascript/blob/a3f70d8869121183bec037571a3ee78efaf26b0b/packages/browser/src/integrations/breadcrumbs.ts#L240 return { - sendScope: (scope) => { - fetch(`${PROTOCOL_SCHEME}://${IPCChannel.SCOPE}/sentry_key`, { method: 'POST', body: scope }).catch(() => { + sendScope: (body) => { + fetch(`${PROTOCOL_SCHEME}://${IPCChannel.SCOPE}/sentry_key`, { method: 'POST', body }).catch(() => { // ignore }); }, - sendEvent: (event) => { - fetch(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}/sentry_key`, { method: 'POST', body: event }).catch(() => { + sendEvent: (body) => { + fetch(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}/sentry_key`, { method: 'POST', body }).catch(() => { + // ignore + }); + }, + sendEnvelope: (body) => { + fetch(`${PROTOCOL_SCHEME}://${IPCChannel.ENVELOPE}/sentry_key`, { method: 'POST', body }).catch(() => { // ignore }); }, diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 419d72e3..6bd2259f 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -7,10 +7,11 @@ import { import { logger } from '@sentry/utils'; import { ensureProcess } from '../common'; -import { EventToMain, ScopeToMain } from './integrations'; +import { ScopeToMain } from './integrations'; import { electronRendererStackParser } from './stack-parse'; +import { makeRendererTransport } from './transport'; -export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMain(), new EventToMain()]; +export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMain()]; /** * Initialize Sentry in the Electron renderer process @@ -57,6 +58,10 @@ If init has been called in the preload and contextIsolation is disabled, is not options.dsn = 'https://12345@dummy.dsn/12345'; } + if (options.transport === undefined) { + options.transport = makeRendererTransport; + } + // We only handle initialScope in the main process otherwise it can cause race conditions over IPC delete options.initialScope; diff --git a/src/renderer/transport.ts b/src/renderer/transport.ts new file mode 100644 index 00000000..5b315b93 --- /dev/null +++ b/src/renderer/transport.ts @@ -0,0 +1,17 @@ +import { createTransport } from '@sentry/core'; +import { BaseTransportOptions, Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/types'; + +import { getIPC } from './ipc'; + +/** + * Creates a Transport that passes envelopes to the Electron main process. + */ +export function makeRendererTransport(options: BaseTransportOptions): Transport { + const ipc = getIPC(); + + return createTransport(options, async (request: TransportRequest): Promise<TransportMakeRequestResponse> => { + ipc.sendEnvelope(request.body); + // Since the main process handles sending of envelopes and rate limiting, we always return 200 OK to the renderers. + return { statusCode: 200 }; + }); +} diff --git a/test/e2e/download.ts b/test/e2e/download.ts index 98bd6d8a..1691048a 100644 --- a/test/e2e/download.ts +++ b/test/e2e/download.ts @@ -1,8 +1,19 @@ import { downloadArtifact as electronDownload } from '@electron/get'; import electronExtract = require('extract-zip'); +import { spawnSync } from 'child_process'; import { existsSync } from 'fs'; import { join } from 'path'; +function isMacArm64(): boolean { + if (process.platform !== 'darwin') { + return false; + } + + // Check if this machine is Apple silicone. This cputype might only match M1 for now... + const output = spawnSync('sysctl', ['hw.cputype']).output?.toString(); + return output?.includes('16777228'); +} + /** Gets the users home directory */ function getHomDir(): string { return process.env[process.platform === 'win32' ? 'USERPROFILE' : 'HOME'] || ''; @@ -29,11 +40,14 @@ function getExecutablePath(): string { * @returns Path to the Electron executable */ export async function downloadElectron(version: string): Promise<string> { + // We override the arch on Mac arm64 when we're running on node x64 because Crashpad doesn't work on x64 Electron + // running in Rosetta... + const arch = isMacArm64() ? 'arm64' : 'x64'; const cacheDir = join(process.env.ELECTRON_CACHE_DIR ?? getHomDir(), '.cache'); - const dir = join(cacheDir, `${version}-x64`); + const dir = join(cacheDir, `${version}-${arch}`); if (!existsSync(dir)) { - const zipPath = await electronDownload({ version, arch: 'x64', artifactName: 'electron' }); + const zipPath = await electronDownload({ version, arch, artifactName: 'electron' }); await electronExtract(zipPath, { dir }); } diff --git a/test/e2e/server/envelope.ts b/test/e2e/server/envelope.ts deleted file mode 100644 index 415165c2..00000000 --- a/test/e2e/server/envelope.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { BaseEnvelopeHeaders, BaseEnvelopeItemHeaders, Envelope } from '@sentry/types'; - -/** - * A naive binary envelope parser - */ -export function parseEnvelope(env: string | Uint8Array): Envelope { - let buf = typeof env === 'string' ? new TextEncoder().encode(env) : env; - - let envelopeHeaders: BaseEnvelopeHeaders | undefined; - let lastItemHeader: BaseEnvelopeItemHeaders | undefined; - const items: [any, any][] = []; - - let binaryLength = 0; - while (buf.length) { - // Next length is either the binary length from the previous header - // or the next newline character - let i = binaryLength || buf.indexOf(0xa); - - // If no newline was found, assume this is the last block - if (i < 0) { - i = buf.length; - } - - // If we read out a length in the previous header, assume binary - if (binaryLength > 0) { - const bin = buf.slice(0, binaryLength); - binaryLength = 0; - items.push([lastItemHeader, bin]); - } else { - const jsonStr = new TextDecoder().decode(buf.slice(0, i + 1)); - - try { - const json = JSON.parse(jsonStr); - - if (typeof json.length === 'number') { - binaryLength = json.length; - } - - // First json is always the envelope headers - if (!envelopeHeaders) { - envelopeHeaders = json; - } else { - // If there is a type property, assume this is an item header - if (lastItemHeader) { - items.push([lastItemHeader, json]); - lastItemHeader = undefined; - } else { - lastItemHeader = json; - } - } - } catch (_) { - // - } - } - - // Replace the buffer with the previous block and newline removed - buf = buf.slice(i + 1); - } - - return [envelopeHeaders as BaseEnvelopeHeaders, items]; -} diff --git a/test/e2e/server/index.ts b/test/e2e/server/index.ts index 1983d421..81b20188 100644 --- a/test/e2e/server/index.ts +++ b/test/e2e/server/index.ts @@ -1,14 +1,15 @@ import { Event, Session, Transaction } from '@sentry/types'; -import { forEachEnvelopeItem } from '@sentry/utils'; +import { forEachEnvelopeItem, parseEnvelope } from '@sentry/utils'; import { Server } from 'http'; import Koa from 'koa'; import bodyParser from 'koa-bodyparser'; import Router from 'koa-tree-router'; -import { inspect } from 'util'; +import { Readable } from 'stream'; +import { inspect, TextDecoder, TextEncoder } from 'util'; +import { gunzipSync } from 'zlib'; import { eventIsSession } from '../recipe'; import { createLogger } from '../utils'; -import { parseEnvelope } from './envelope'; import { parseMultipart, sentryEventFromFormFields } from './multi-part'; const log = createLogger('Test Server'); @@ -39,6 +40,25 @@ export interface TestServerEvent<T = unknown> { method: 'envelope' | 'minidump' | 'store'; } +function stream2buffer(stream: Readable): Promise<Buffer> { + return new Promise((resolve, reject) => { + const buf: Buffer[] = []; + stream.on('data', (chunk) => buf.push(chunk)); + stream.on('end', () => resolve(Buffer.concat(buf))); + stream.on('error', (err) => reject(err)); + }); +} + +async function getRequestBody(ctx: Koa.ParameterizedContext): Promise<Buffer> { + let buf = await stream2buffer(ctx.req); + + if (ctx.request.headers['content-encoding'] === 'gzip') { + buf = gunzipSync(buf); + } + + return buf; +} + /** * A mock Sentry server. * @@ -59,9 +79,6 @@ export class TestServer { app.use( bodyParser({ enableTypes: ['text'], - extendTypes: { - text: ['application/x-sentry-envelope'], - }, textLimit: '200mb', }), ); @@ -93,7 +110,7 @@ export class TestServer { return; } - const envelope = parseEnvelope(ctx.request.body); + const envelope = parseEnvelope(await getRequestBody(ctx), new TextEncoder(), new TextDecoder()); let data: Event | Transaction | Session | undefined; const attachments: Attachment[] = []; diff --git a/test/e2e/test-apps/javascript/preload-error-protocol/event.json b/test/e2e/test-apps/javascript/preload-error-protocol/event.json index 98304fcc..ee81ccf8 100644 --- a/test/e2e/test-apps/javascript/preload-error-protocol/event.json +++ b/test/e2e/test-apps/javascript/preload-error-protocol/event.json @@ -76,7 +76,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/test/e2e/test-apps/javascript/preload-error/event.json b/test/e2e/test-apps/javascript/preload-error/event.json index a24afd64..91cf8b47 100644 --- a/test/e2e/test-apps/javascript/preload-error/event.json +++ b/test/e2e/test-apps/javascript/preload-error/event.json @@ -76,7 +76,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json b/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json index 66c72d7f..d24eb797 100644 --- a/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json +++ b/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json @@ -76,7 +76,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json b/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json index 109efe98..6aec9824 100644 --- a/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json +++ b/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json @@ -76,7 +76,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/test/e2e/test-apps/javascript/renderer-error-protocol/event.json b/test/e2e/test-apps/javascript/renderer-error-protocol/event.json index 18034ba5..76536610 100644 --- a/test/e2e/test-apps/javascript/renderer-error-protocol/event.json +++ b/test/e2e/test-apps/javascript/renderer-error-protocol/event.json @@ -76,7 +76,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/test/e2e/test-apps/javascript/renderer-error/event.json b/test/e2e/test-apps/javascript/renderer-error/event.json index c388a760..43157ee2 100644 --- a/test/e2e/test-apps/javascript/renderer-error/event.json +++ b/test/e2e/test-apps/javascript/renderer-error/event.json @@ -76,7 +76,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/test/e2e/test-apps/offline/renderer-error/event.json b/test/e2e/test-apps/offline/renderer-error/event.json index 4ff367a9..e05c1f90 100644 --- a/test/e2e/test-apps/offline/renderer-error/event.json +++ b/test/e2e/test-apps/offline/renderer-error/event.json @@ -67,7 +67,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/test/e2e/test-apps/other/child-process/event2.json b/test/e2e/test-apps/other/child-process/event2.json index c3831a94..3d633f20 100644 --- a/test/e2e/test-apps/other/child-process/event2.json +++ b/test/e2e/test-apps/other/child-process/event2.json @@ -76,7 +76,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/test/e2e/test-apps/other/custom-renderer-name/event.json b/test/e2e/test-apps/other/custom-renderer-name/event.json index d0e8fb5e..6be2c020 100644 --- a/test/e2e/test-apps/other/custom-renderer-name/event.json +++ b/test/e2e/test-apps/other/custom-renderer-name/event.json @@ -76,7 +76,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/test/e2e/test-apps/other/error-iframe/event.json b/test/e2e/test-apps/other/error-iframe/event.json index b34cc21d..8a410346 100644 --- a/test/e2e/test-apps/other/error-iframe/event.json +++ b/test/e2e/test-apps/other/error-iframe/event.json @@ -84,7 +84,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/test/e2e/test-apps/other/scope-breadcrumbs/event.json b/test/e2e/test-apps/other/scope-breadcrumbs/event.json index 6133b621..3884bb8f 100644 --- a/test/e2e/test-apps/other/scope-breadcrumbs/event.json +++ b/test/e2e/test-apps/other/scope-breadcrumbs/event.json @@ -35,7 +35,7 @@ "processor_count": 0, "processor_frequency": 0, "cpu_description": "{{cpu}}", - "screen_resolution":"{{screen}}", + "screen_resolution": "{{screen}}", "screen_density": 1, "language": "{{language}}" }, @@ -77,7 +77,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] @@ -94,10 +94,12 @@ "timestamp": 0 }, { - "timestamp": 0, - "category": "console", - "data": { - "arguments": [ "Some logging from the renderer process" ], + "timestamp": 0, + "category": "console", + "data": { + "arguments": [ + "Some logging from the renderer process" + ], "logger": "console" }, "level": "log", @@ -119,5 +121,16 @@ "some-extra": "extra-value" } }, - "attachments": [ { "type": "attachment", "length": 12, "filename": "attachment.txt" } ] + "attachments": [ + { + "type": "attachment", + "length": 15, + "filename": "screenshot.png" + }, + { + "type": "attachment", + "length": 12, + "filename": "attachment.txt" + } + ] } diff --git a/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html b/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html index 3cf5b517..c1368cf2 100644 --- a/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html +++ b/test/e2e/test-apps/other/scope-breadcrumbs/src/index.html @@ -9,6 +9,10 @@ init({ debug: true, + beforeSend: (event, hint) => { + hint.attachments = [{ filename: 'screenshot.png', data: 'captureScreen()' }, ...(hint.attachments || [])]; + return event; + }, }); configureScope((scope) => { diff --git a/test/e2e/test-apps/other/screenshots/event.json b/test/e2e/test-apps/other/screenshots/event.json index 7ac4c12f..ed62d1a4 100644 --- a/test/e2e/test-apps/other/screenshots/event.json +++ b/test/e2e/test-apps/other/screenshots/event.json @@ -76,7 +76,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] diff --git a/test/e2e/test-apps/sessions/javascript-error/event.json b/test/e2e/test-apps/sessions/javascript-error/event.json index 994a78a3..57228daa 100644 --- a/test/e2e/test-apps/sessions/javascript-error/event.json +++ b/test/e2e/test-apps/sessions/javascript-error/event.json @@ -76,7 +76,7 @@ }, "mechanism": { "handled": true, - "type": "generic" + "type": "instrument" } } ] From ed784c3f99a08f619b17520e8908adb7298881c2 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 9 Jan 2023 21:20:26 +0000 Subject: [PATCH 058/239] fix: Use `POST` for main process ping so it does not result in fetch breadcrumb (#612) --- src/renderer/ipc.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/ipc.ts b/src/renderer/ipc.ts index a865c5e8..1de7d225 100644 --- a/src/renderer/ipc.ts +++ b/src/renderer/ipc.ts @@ -13,7 +13,7 @@ function getImplementation(): IPCInterface { logger.log('IPC was not configured in preload script, falling back to custom protocol and fetch'); - fetch(`${PROTOCOL_SCHEME}://${IPCChannel.PING}/sentry_key`).catch(() => + fetch(`${PROTOCOL_SCHEME}://${IPCChannel.PING}/sentry_key`, { method: 'POST', body: '' }).catch(() => console.error(`Sentry SDK failed to establish connection with the Electron main process. - Ensure you have initialized the SDK in the main process - If your renderers use custom sessions, be sure to set 'getSessions' in the main process options @@ -47,7 +47,7 @@ let cachedInterface: IPCInterface | undefined; * Renderer IPC interface * * Favours IPC if its been exposed via a preload script but will - * fallback to custom protocol and fetch is IPC is not available + * fallback to custom protocol and fetch if IPC is not available */ export function getIPC(): IPCInterface { if (!cachedInterface) { From a2b6cd7986ea0b57c300cc04209a2a9358f625ea Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 9 Jan 2023 21:20:51 +0000 Subject: [PATCH 059/239] CI: Auto SDK update PRs (#608) --- ...ns-pr.yml => new-electron-versions-pr.yml} | 0 .github/workflows/new-sdk-versions-pr.yml | 26 +++ package.json | 7 +- scripts/update-sdk-versions.mjs | 37 +++ yarn.lock | 210 +++++++++++++++++- 5 files changed, 273 insertions(+), 7 deletions(-) rename .github/workflows/{new-versions-pr.yml => new-electron-versions-pr.yml} (100%) create mode 100644 .github/workflows/new-sdk-versions-pr.yml create mode 100644 scripts/update-sdk-versions.mjs diff --git a/.github/workflows/new-versions-pr.yml b/.github/workflows/new-electron-versions-pr.yml similarity index 100% rename from .github/workflows/new-versions-pr.yml rename to .github/workflows/new-electron-versions-pr.yml diff --git a/.github/workflows/new-sdk-versions-pr.yml b/.github/workflows/new-sdk-versions-pr.yml new file mode 100644 index 00000000..c93cb9ac --- /dev/null +++ b/.github/workflows/new-sdk-versions-pr.yml @@ -0,0 +1,26 @@ +name: Create PR for new SDK versions +on: + schedule: + # At 9am every day + - cron: '0 9 * * *' + +jobs: + test: + name: Check new versions + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: volta-cli/action@v3 + - run: yarn install + - name: Update Versions + run: yarn update-sdk-versions + - name: Create Pull Request + uses: peter-evans/create-pull-request@v3 + with: + token: ${{ secrets.GITHUB_TOKEN }} + branch: test/new-sdk-version + delete-branch: true + title: 'test: New Sentry SDK version' + commit-message: 'test: New Sentry SDK version' + body: | + Automatically generated PR to test new Sentry SDK version diff --git a/package.json b/package.json index 7d342e27..aa74db50 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "clean": "rimraf coverage esm main preload renderer index.* integrations.* ipc.* sentry-electron*.tgz", "prelint": "node scripts/update-version.js", "update-electron-versions": "electron-latest-versions --start 2 > ./test/e2e/versions.json", + "update-sdk-versions": "node ./scripts/update-sdk-versions.mjs", "lint": "run-s lint:prettier lint:eslint", "lint:prettier": "prettier --check \"{src,test}/**/*.ts\"", "lint:eslint": "eslint . --cache --format stylish", @@ -83,15 +84,15 @@ "chai-as-promised": "^7.1.1", "chai-subset": "^1.6.0", "cross-env": "^7.0.3", - "eslint": "7.27.0", "electron": "19.1.8", - "@electron/get": "^1.13.0", - "electron-mocha": "^11.0.0", "electron-latest-versions": "^0.2.0", + "electron-mocha": "^11.0.0", + "eslint": "7.27.0", "extract-zip": "^2.0.1", "koa": "^2.13.4", "koa-bodyparser": "^4.3.0", "koa-tree-router": "^0.8.0", + "latest-version": "^7.0.0", "mocha": "^9.1.3", "npm-run-all": "^4.1.5", "prettier": "^2.4.1", diff --git a/scripts/update-sdk-versions.mjs b/scripts/update-sdk-versions.mjs new file mode 100644 index 00000000..8c99e06f --- /dev/null +++ b/scripts/update-sdk-versions.mjs @@ -0,0 +1,37 @@ +import latestVersion from 'latest-version'; +import { spawnSync } from 'child_process'; +import { readFileSync, writeFileSync } from 'fs'; +import { join } from 'path'; +import { fileURLToPath } from 'url'; + +const __dirname = fileURLToPath(new URL('.', import.meta.url)); + +const latest = await latestVersion('@sentry/core'); +const packageJsonPath = join(__dirname, '..', 'package.json'); +const packageJson = JSON.parse(readFileSync(packageJsonPath, { encoding: 'utf8' })); +const current = packageJson.dependencies['@sentry/core']; + +if (current !== latest) { + console.log(`Updating Sentry deps from ${current} to ${latest}`); + + const re = /^@sentry(-internal)?\//; + + for (const dep of Object.keys(packageJson.dependencies)) { + if (dep.match(re)) { + packageJson.dependencies[dep] = latest; + } + } + + for (const dep of Object.keys(packageJson.devDependencies)) { + if (dep.match(re)) { + packageJson.devDependencies[dep] = latest; + } + } + + writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2)); + + // Update yarn.lock + spawnSync('yarn', ['install'], { stdio: 'inherit' }); + // Update parameter that has the version in it + spawnSync('yarn', ['build'], { stdio: 'inherit' }); +} diff --git a/yarn.lock b/yarn.lock index 17efdde5..7fe68678 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30,7 +30,7 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@electron/get@^1.13.0", "@electron/get@^1.14.1": +"@electron/get@^1.14.1": version "1.14.1" resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.14.1.tgz#16ba75f02dffb74c23965e72d617adc721d27f40" integrity sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw== @@ -100,6 +100,21 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@pnpm/network.ca-file@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" + integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== + dependencies: + graceful-fs "4.2.10" + +"@pnpm/npm-conf@^1.0.4": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz#3475541fb71d7b6ce68acaaa3392eae9fedf3276" + integrity sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A== + dependencies: + "@pnpm/network.ca-file" "^1.0.1" + config-chain "^1.1.11" + "@sentry-internal/eslint-config-sdk@7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.29.0.tgz#ea0e24e0edcc4daf00c76876b809697ce36ded06" @@ -197,6 +212,11 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sindresorhus/is@^5.2.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.3.0.tgz#0ec9264cf54a527671d990eb874e030b55b70dcc" + integrity sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw== + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -204,6 +224,13 @@ dependencies: defer-to-connect "^1.0.1" +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== + dependencies: + defer-to-connect "^2.0.1" + "@tsconfig/node10@^1.0.7": version "1.0.8" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" @@ -323,6 +350,11 @@ resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.3.tgz#ef8e3d1a8d46c387f04ab0f2e8ab8cb0c5078661" integrity sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA== +"@types/http-cache-semantics@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + "@types/http-errors@*": version "1.8.2" resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-1.8.2.tgz#7315b4c4c54f82d13fa61c228ec5c2ea5cc9e0e1" @@ -754,6 +786,24 @@ cache-content-type@^1.0.0: mime-types "^2.1.18" ylru "^1.2.0" +cacheable-lookup@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" + integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== + +cacheable-request@^10.2.1: + version "10.2.5" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.5.tgz#7bf5fbdb4f51dc2537fb5f02a3f8a5aefd2d0f36" + integrity sha512-5RwYYCfzjNPsyJxb/QpaM0bfzx+kw5/YpDhZPm9oMIDntHFQ9YXeyV47ZvzlTE0XrrrbyO2UITJH4GF9eRLdXQ== + dependencies: + "@types/http-cache-semantics" "^4.0.1" + get-stream "^6.0.1" + http-cache-semantics "^4.1.0" + keyv "^4.5.2" + mimic-response "^4.0.0" + normalize-url "^8.0.0" + responselike "^3.0.0" + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -1044,6 +1094,13 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + deep-eql@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" @@ -1056,6 +1113,11 @@ deep-equal@~1.0.1: resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -1071,6 +1133,11 @@ defer-to-connect@^1.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +defer-to-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + define-properties@^1.1.3, define-properties@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" @@ -1600,6 +1667,11 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== +form-data-encoder@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" + integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== + form-data@*: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -1705,6 +1777,11 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -1792,6 +1869,23 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +got@^12.1.0: + version "12.5.3" + resolved "https://registry.yarnpkg.com/got/-/got-12.5.3.tgz#82bdca2dd61258a02e24d668ea6e7abb70ac3598" + integrity sha512-8wKnb9MGU8IPGRIo+/ukTy9XLJBwDiCpIf5TVzQ9Cpol50eMTpBq2GAuDsuDIz7hTYmZgMgC1e9ydr6kSDWs3w== + dependencies: + "@sindresorhus/is" "^5.2.0" + "@szmarczak/http-timer" "^5.0.1" + cacheable-lookup "^7.0.0" + cacheable-request "^10.2.1" + decompress-response "^6.0.0" + form-data-encoder "^2.1.2" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^3.0.0" + got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -1809,7 +1903,7 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@4.2.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -1878,7 +1972,7 @@ http-assert@^1.3.0: deep-equal "~1.0.1" http-errors "~1.8.0" -http-cache-semantics@^4.0.0: +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== @@ -1905,6 +1999,14 @@ http-errors@^1.6.3, http-errors@~1.8.0: statuses ">= 1.5.0 < 2" toidentifier "1.0.1" +http2-wrapper@^2.1.10: + version "2.2.0" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" + integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" + https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -1961,7 +2063,7 @@ inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.4: +ini@^1.3.4, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== @@ -2153,6 +2255,11 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -2215,6 +2322,13 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +keyv@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" + integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== + dependencies: + json-buffer "3.0.1" + koa-bodyparser@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz#274c778555ff48fa221ee7f36a9fbdbace22759a" @@ -2273,6 +2387,13 @@ koa@^2.13.4: type-is "^1.6.16" vary "^1.1.2" +latest-version@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da" + integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg== + dependencies: + package-json "^8.1.0" + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -2346,6 +2467,11 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -2410,6 +2536,16 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +mimic-response@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" + integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== + minimatch@4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" @@ -2521,6 +2657,11 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +normalize-url@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" + integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== + npm-conf@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" @@ -2609,6 +2750,11 @@ p-cancelable@^1.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -2642,6 +2788,16 @@ p-try@^1.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= +package-json@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.0.tgz#2a22806f1ed7c786c8e6ff26cfe20003bf4c6850" + integrity sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg== + dependencies: + got "^12.1.0" + registry-auth-token "^5.0.1" + registry-url "^6.0.0" + semver "^7.3.7" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -2784,6 +2940,11 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -2801,6 +2962,16 @@ raw-body@^2.3.3: iconv-lite "0.4.24" unpipe "1.0.0" +rc@1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -2849,6 +3020,20 @@ regextras@^0.7.1: resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.7.1.tgz#be95719d5f43f9ef0b9fa07ad89b7c606995a3b2" integrity sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w== +registry-auth-token@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.1.tgz#5e6cd106e6c251135a046650c58476fc03e92833" + integrity sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA== + dependencies: + "@pnpm/npm-conf" "^1.0.4" + +registry-url@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58" + integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== + dependencies: + rc "1.2.8" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -2864,6 +3049,11 @@ requireindex@~1.1.0: resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" integrity sha1-5UBLgVV+91225JxacgBIk/4D4WI= +resolve-alpn@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -2885,6 +3075,13 @@ responselike@^1.0.2: dependencies: lowercase-keys "^1.0.0" +responselike@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" + integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== + dependencies: + lowercase-keys "^3.0.0" + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -3142,6 +3339,11 @@ strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1. resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + sumchecker@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" From 207b211da9715ebd19c2dbc5f59491907ba31be9 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 11 Jan 2023 11:39:38 +0000 Subject: [PATCH 060/239] feat: Support browser Replay in renderers (#618) --- .eslintrc.js | 1 + package.json | 18 +- src/common/normalize.ts | 31 +- src/main/electron-normalize.ts | 2 +- src/main/integrations/electron-minidump.ts | 4 +- .../sentry-minidump/minidump-loader.ts | 2 +- src/main/ipc.ts | 9 +- src/renderer/sdk.ts | 2 +- test/e2e/recipe/index.ts | 1 + test/e2e/recipe/normalize.ts | 26 +- test/e2e/server/index.ts | 21 +- .../other/browser-replay/event-replay.json | 30 + .../test-apps/other/browser-replay/event.json | 99 ++ .../other/browser-replay/package.json | 9 + .../test-apps/other/browser-replay/recipe.yml | 2 + .../other/browser-replay/src/index.html | 23 + .../other/browser-replay/src/main.js | 23 + yarn.lock | 1023 +++++++++-------- 18 files changed, 808 insertions(+), 518 deletions(-) create mode 100644 test/e2e/test-apps/other/browser-replay/event-replay.json create mode 100644 test/e2e/test-apps/other/browser-replay/event.json create mode 100644 test/e2e/test-apps/other/browser-replay/package.json create mode 100644 test/e2e/test-apps/other/browser-replay/recipe.yml create mode 100644 test/e2e/test-apps/other/browser-replay/src/index.html create mode 100644 test/e2e/test-apps/other/browser-replay/src/main.js diff --git a/.eslintrc.js b/.eslintrc.js index 45739519..cf84dff0 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -32,6 +32,7 @@ module.exports = { rules: { 'no-console': 'off', '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/member-ordering': 'off', }, }, ], diff --git a/package.json b/package.json index aa74db50..a0ea20d0 100644 --- a/package.json +++ b/package.json @@ -58,18 +58,18 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.29.0", - "@sentry/core": "7.29.0", - "@sentry/node": "7.29.0", - "@sentry/types": "7.29.0", - "@sentry/utils": "7.29.0", + "@sentry/browser": "7.30.0", + "@sentry/core": "7.30.0", + "@sentry/node": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", "deepmerge": "4.2.2", "tslib": "^2.3.1" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.29.0", - "@sentry-internal/typescript": "7.29.0", - "@sentry/tracing": "7.29.0", + "@sentry-internal/eslint-config-sdk": "7.30.0", + "@sentry-internal/typescript": "7.30.0", + "@sentry/tracing": "7.30.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", @@ -87,7 +87,7 @@ "electron": "19.1.8", "electron-latest-versions": "^0.2.0", "electron-mocha": "^11.0.0", - "eslint": "7.27.0", + "eslint": "7.32.0", "extract-zip": "^2.0.1", "koa": "^2.13.4", "koa-bodyparser": "^4.3.0", diff --git a/src/common/normalize.ts b/src/common/normalize.ts index d21714d1..5199784f 100644 --- a/src/common/normalize.ts +++ b/src/common/normalize.ts @@ -1,4 +1,5 @@ -import { Event } from '@sentry/types'; +import { Envelope, Event, ReplayEvent } from '@sentry/types'; +import { addItemToEnvelope, createEnvelope, forEachEnvelopeItem } from '@sentry/utils'; /** * Normalizes URLs in exceptions and stacktraces so Sentry can fingerprint @@ -76,3 +77,31 @@ export function normalizeEvent(event: Event, basePath: string): Event { delete event.server_name; return event; } + +/** Normalizes URLs in any replay_event items found in an envelope */ +export function normalizeUrlsInReplayEnvelope(envelope: Envelope, basePath: string): Envelope { + let modifiedEnvelope = createEnvelope(envelope[0]); + + let isReplay = false; + + forEachEnvelopeItem(envelope, (item, type) => { + if (type === 'replay_event') { + isReplay = true; + const [headers, event] = item as [{ type: 'replay_event' }, ReplayEvent]; + + if (Array.isArray(event.urls)) { + event.urls = event.urls.map((url) => normalizeUrl(url, basePath)); + } + + if (event?.request?.url) { + event.request.url = normalizeUrl(event.request.url, basePath); + } + + modifiedEnvelope = addItemToEnvelope(modifiedEnvelope, [headers, event]); + } else if (type === 'replay_recording') { + modifiedEnvelope = addItemToEnvelope(modifiedEnvelope, item); + } + }); + + return isReplay ? modifiedEnvelope : envelope; +} diff --git a/src/main/electron-normalize.ts b/src/main/electron-normalize.ts index ad11ad02..8c0ca940 100644 --- a/src/main/electron-normalize.ts +++ b/src/main/electron-normalize.ts @@ -43,7 +43,7 @@ export const EXIT_REASONS = [ 'launch-failed', 'integrity-failure', ] as const; -export type ExitReason = typeof EXIT_REASONS[number]; +export type ExitReason = (typeof EXIT_REASONS)[number]; export const CRASH_REASONS: Readonly<ExitReason[]> = ['crashed', 'oom'] as const; /** Same as the Electron interface but with optional exitCode */ diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts index 7891050c..bc4706ba 100644 --- a/src/main/integrations/electron-minidump.ts +++ b/src/main/integrations/electron-minidump.ts @@ -206,8 +206,8 @@ export class ElectronMinidump implements Integration { if (i < 0) i = buf.indexOf(32, maxBytes); // We couldn't find any space or quote chars so split at maxBytes and hope for the best 🤷♂️ if (i < 0) i = maxBytes; - chunks.push(buf.slice(0, i + 1).toString()); - buf = buf.slice(i + 1); + chunks.push(buf.subarray(0, i + 1).toString()); + buf = buf.subarray(i + 1); } return chunks.reduce((acc, cur, i) => { diff --git a/src/main/integrations/sentry-minidump/minidump-loader.ts b/src/main/integrations/sentry-minidump/minidump-loader.ts index 426e23e5..93022868 100644 --- a/src/main/integrations/sentry-minidump/minidump-loader.ts +++ b/src/main/integrations/sentry-minidump/minidump-loader.ts @@ -132,7 +132,7 @@ function minidumpFromBreakpadMultipart(file: Buffer): Buffer | undefined { const dumpEnd = file.lastIndexOf('----------------------------'); if (dumpStart > 0 && dumpEnd > 0 && dumpEnd > dumpStart) { - return file.slice(dumpStart, dumpEnd); + return file.subarray(dumpStart, dumpEnd); } } diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 30cae0ab..6f8ed30b 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -4,7 +4,7 @@ import { forEachEnvelopeItem, logger, parseEnvelope, SentryError } from '@sentry import { app, ipcMain, protocol, WebContents } from 'electron'; import { TextDecoder, TextEncoder } from 'util'; -import { IPCChannel, IPCMode, mergeEvents, PROTOCOL_SCHEME } from '../common'; +import { IPCChannel, IPCMode, mergeEvents, normalizeUrlsInReplayEnvelope, PROTOCOL_SCHEME } from '../common'; import { supportsFullProtocol, whenAppReady } from './electron-normalize'; import { ElectronMainOptionsInternal } from './sdk'; @@ -50,13 +50,13 @@ function eventFromEnvelope(envelope: Envelope): [Event, Attachment[]] | undefine if (type === 'event' || type === 'transaction') { event = Array.isArray(item) ? (item as EventItem)[1] : undefined; } else if (type === 'attachment') { - const [headers, bin] = item as AttachmentItem; + const [headers, data] = item as AttachmentItem; attachments.push({ filename: headers.filename, attachmentType: headers.attachment_type, contentType: headers.content_type, - data: bin, + data, }); } }); @@ -72,8 +72,9 @@ function handleEnvelope(options: ElectronMainOptionsInternal, env: Uint8Array | const [event, attachments] = eventAndAttachments; captureEventFromRenderer(options, event, attachments, contents); } else { + const normalizedEnvelope = normalizeUrlsInReplayEnvelope(envelope, app.getAppPath()); // Pass other types of envelope straight to the transport - void getCurrentHub().getClient()?.getTransport()?.send(envelope); + void getCurrentHub().getClient()?.getTransport()?.send(normalizedEnvelope); } } diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 6bd2259f..39f8bbfd 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_29_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_30_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts index 5f6419a7..d79dc9af 100644 --- a/test/e2e/recipe/index.ts +++ b/test/e2e/recipe/index.ts @@ -125,6 +125,7 @@ export class RecipeRunner { `"@sentry/electron": "file:./../../../../sentry-electron-${SDK_VERSION}.tgz"`, ) // We replace the Sentry JavaScript dependency versions to match that of @sentry/electron + .replace(/"@sentry\/replay": ".*"/, `"@sentry/replay": "${JS_VERSION}"`) .replace(/"@sentry\/tracing": ".*"/, `"@sentry/tracing": "${JS_VERSION}"`) .replace(/"@sentry\/react": ".*"/, `"@sentry/react": "${JS_VERSION}"`) .replace(/"@sentry\/vue": ".*"/, `"@sentry/vue": "${JS_VERSION}"`); diff --git a/test/e2e/recipe/normalize.ts b/test/e2e/recipe/normalize.ts index 31721cec..ee2ac75a 100644 --- a/test/e2e/recipe/normalize.ts +++ b/test/e2e/recipe/normalize.ts @@ -1,5 +1,5 @@ /* eslint-disable complexity */ -import { Event, Session, Transaction } from '@sentry/types'; +import { Event, ReplayEvent, Session, Transaction } from '@sentry/types'; type EventOrSession = Event | Transaction | Session; @@ -7,7 +7,7 @@ export function normalize(event: EventOrSession): EventOrSession { if (eventIsSession(event)) { return normalizeSession(event as Session); } else { - return normalizeEvent(event as Event); + return normalizeEvent(event as Event & ReplayEvent); } } @@ -47,13 +47,13 @@ function normalizeSession(session: Session): Session { * All properties that are timestamps, versions, ids or variables that may vary * by platform are replaced with placeholder strings */ -function normalizeEvent(event: Event): Event { +function normalizeEvent(event: Event & ReplayEvent): Event { if (event.sdk?.version) { event.sdk.version = '{{version}}'; } if (event?.sdk?.packages) { - for (const pkg of event?.sdk?.packages) { + for (const pkg of event?.sdk?.packages || []) { if (pkg.version) { pkg.version = '{{version}}'; } @@ -126,12 +126,28 @@ function normalizeEvent(event: Event): Event { delete event.contexts.trace.tags; } + if (event?.tags?.replayId) { + event.tags.replayId = '{{replay_id}}'; + } + + if (event.replay_id) { + event.replay_id = '{{id}}'; + } + + if ((event as any).replay_start_timestamp) { + (event as any).replay_start_timestamp = 0; + } + + if (Array.isArray(event.error_ids) && event.error_ids.length > 0) { + event.error_ids = ['{{id}}']; + } + if (event.start_timestamp) { event.start_timestamp = 0; } if (event.exception?.values?.[0].stacktrace?.frames) { - for (const frame of event.exception?.values?.[0].stacktrace?.frames) { + for (const frame of event.exception?.values?.[0].stacktrace?.frames || []) { frame.colno = 0; frame.lineno = 0; frame.function = '{{function}}'; diff --git a/test/e2e/server/index.ts b/test/e2e/server/index.ts index 81b20188..00261aac 100644 --- a/test/e2e/server/index.ts +++ b/test/e2e/server/index.ts @@ -1,4 +1,4 @@ -import { Event, Session, Transaction } from '@sentry/types'; +import { Event, ReplayEvent, Session, Transaction } from '@sentry/types'; import { forEachEnvelopeItem, parseEnvelope } from '@sentry/utils'; import { Server } from 'http'; import Koa from 'koa'; @@ -112,7 +112,7 @@ export class TestServer { const envelope = parseEnvelope(await getRequestBody(ctx), new TextEncoder(), new TextDecoder()); - let data: Event | Transaction | Session | undefined; + let data: Event | Transaction | Session | ReplayEvent | undefined; const attachments: Attachment[] = []; forEachEnvelopeItem(envelope, ([headers, item]) => { @@ -120,6 +120,14 @@ export class TestServer { data = item as Event | Transaction | Session; } + if (headers.type === 'replay_event') { + const replayItem = item as ReplayEvent; + // We only want to capture replay events that link up to errors as there may be others we don't care about + if (Array.isArray(replayItem.error_ids) && replayItem.error_ids.length > 0) { + data = replayItem; + } + } + if (headers.type === 'attachment') { attachments.push(headers); } @@ -230,8 +238,13 @@ export class TestServer { }); } - private _addEvent(event: TestServerEvent<Event | Transaction | Session>): void { - const type = eventIsSession(event.data) ? 'session' : 'event'; + private _addEvent(event: TestServerEvent<Event | Transaction | Session | ReplayEvent>): void { + const type = eventIsSession(event.data) + ? 'session' + : (event.data as ReplayEvent)?.type === 'replay_event' + ? 'replay' + : 'event'; + log(`Received '${type}' on '${event.method}' endpoint`, inspect(event, false, null, true)); this.events.push(event); } diff --git a/test/e2e/test-apps/other/browser-replay/event-replay.json b/test/e2e/test-apps/other/browser-replay/event-replay.json new file mode 100644 index 00000000..221294a7 --- /dev/null +++ b/test/e2e/test-apps/other/browser-replay/event-replay.json @@ -0,0 +1,30 @@ +{ + "data": { + "type": "replay_event", + "replay_start_timestamp": 0, + "timestamp": 0, + "error_ids": [ + "{{id}}" + ], + "trace_ids": [], + "urls": [ + "app:///src/index.html" + ], + "replay_id": "{{id}}", + "segment_id": 0, + "replay_type": "error", + "event_id": "{{id}}", + "environment": "production", + "sdk": { + "version": "{{version}}", + "name": "sentry.javascript.browser" + }, + "request": { + "url": "app:///src/index.html" + }, + "platform": "javascript" + }, + "attachments": [], + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope" +} diff --git a/test/e2e/test-apps/other/browser-replay/event.json b/test/e2e/test-apps/other/browser-replay/event.json new file mode 100644 index 00000000..17c18c26 --- /dev/null +++ b/test/e2e/test-apps/other/browser-replay/event.json @@ -0,0 +1,99 @@ +{ + "method": "envelope", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "appId": "277345", + "data": { + "sdk": { + "name": "sentry.javascript.electron", + "packages": [ + { + "name": "npm:@sentry/electron", + "version": "{{version}}" + } + ], + "version": "{{version}}" + }, + "contexts": { + "app": { + "app_name": "browser-replay", + "app_version": "1.0.0", + "app_start_time": "{{time}}" + }, + "browser": { + "name": "Chrome" + }, + "chrome": { + "name": "Chrome", + "type": "runtime", + "version": "{{version}}" + }, + "device": { + "arch": "{{arch}}", + "family": "Desktop", + "memory_size": 0, + "free_memory": 0, + "processor_count": 0, + "processor_frequency": 0, + "cpu_description": "{{cpu}}", + "screen_resolution":"{{screen}}", + "screen_density": 1, + "language": "{{language}}" + }, + "node": { + "name": "Node", + "type": "runtime", + "version": "{{version}}" + }, + "os": { + "name": "{{platform}}", + "version": "{{version}}" + }, + "runtime": { + "name": "Electron", + "version": "{{version}}" + } + }, + "release": "browser-replay@1.0.0", + "environment": "development", + "user": { + "ip_address": "{{auto}}" + }, + "exception": { + "values": [ + { + "type": "Error", + "value": "Some renderer error", + "stacktrace": { + "frames": [ + { + "colno": 0, + "filename": "app:///src/index.html", + "function": "{{function}}", + "in_app": true, + "lineno": 0 + } + ] + }, + "mechanism": { + "handled": true, + "type": "instrument" + } + } + ] + }, + "level": "error", + "event_id": "{{id}}", + "platform": "javascript", + "timestamp": 0, + "breadcrumbs": [], + "request": { + "url": "app:///src/index.html" + }, + "tags": { + "event.environment": "javascript", + "event.origin": "electron", + "event.process": "renderer", + "event_type": "javascript" + } + } +} diff --git a/test/e2e/test-apps/other/browser-replay/package.json b/test/e2e/test-apps/other/browser-replay/package.json new file mode 100644 index 00000000..07307186 --- /dev/null +++ b/test/e2e/test-apps/other/browser-replay/package.json @@ -0,0 +1,9 @@ +{ + "name": "browser-replay", + "version": "1.0.0", + "main": "src/main.js", + "dependencies": { + "@sentry/electron": "3.0.0", + "@sentry/replay": "7.0.0" + } +} diff --git a/test/e2e/test-apps/other/browser-replay/recipe.yml b/test/e2e/test-apps/other/browser-replay/recipe.yml new file mode 100644 index 00000000..87c4f72e --- /dev/null +++ b/test/e2e/test-apps/other/browser-replay/recipe.yml @@ -0,0 +1,2 @@ +description: Browser Replay +command: yarn diff --git a/test/e2e/test-apps/other/browser-replay/src/index.html b/test/e2e/test-apps/other/browser-replay/src/index.html new file mode 100644 index 00000000..6d4d5897 --- /dev/null +++ b/test/e2e/test-apps/other/browser-replay/src/index.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + </head> + <body> + <script> + const { init } = require('@sentry/electron'); + const { Replay } = require('@sentry/replay'); + + init({ + debug: true, + integrations: [new Replay()], + replaysSessionSampleRate: 0, + replaysOnErrorSampleRate: 1, + }); + + setTimeout(() => { + throw new Error('Some renderer error'); + }, 1000); + </script> + </body> +</html> diff --git a/test/e2e/test-apps/other/browser-replay/src/main.js b/test/e2e/test-apps/other/browser-replay/src/main.js new file mode 100644 index 00000000..bede8faa --- /dev/null +++ b/test/e2e/test-apps/other/browser-replay/src/main.js @@ -0,0 +1,23 @@ +const path = require('path'); + +const { app, BrowserWindow } = require('electron'); +const { init } = require('@sentry/electron'); + +init({ + dsn: '__DSN__', + debug: true, + autoSessionTracking: false, + onFatalError: () => {}, +}); + +app.on('ready', () => { + const mainWindow = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + }, + }); + + mainWindow.loadFile(path.join(__dirname, 'index.html')); +}); diff --git a/yarn.lock b/yarn.lock index 7fe68678..09cc5417 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,17 +9,17 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== +"@babel/helper-validator-identifier@^7.18.6": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== "@babel/highlight@^7.10.4": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" - integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" @@ -46,7 +46,7 @@ global-agent "^3.0.0" global-tunnel-ng "^2.7.1" -"@eslint/eslintrc@^0.4.1": +"@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== @@ -61,15 +61,29 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + "@jridgewell/resolve-uri@^3.0.3": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" - integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.13" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" - integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" @@ -115,96 +129,96 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.29.0.tgz#ea0e24e0edcc4daf00c76876b809697ce36ded06" - integrity sha512-2173bQkiuSjCY8a3JubgEo+JPMXPObIjcMK9kQhPFmNv4kn8AcnLOUO5fzN/4Bm9PNzuLSqJeJgJrgh0K/rBsw== +"@sentry-internal/eslint-config-sdk@7.30.0": + version "7.30.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.30.0.tgz#f527d00a9350601d343ec121aa8a19b23582fe1b" + integrity sha512-VhX0qRtC3GOD15YsK4oGmK2NeIErEChswX44X0bi3zvjMOSZCRM8w8YrtgCvbSBe2xrZyZnqRG/nxIOejuNHWw== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.29.0" - "@sentry-internal/typescript" "7.29.0" - "@typescript-eslint/eslint-plugin" "^3.9.0" - "@typescript-eslint/parser" "^3.9.0" + "@sentry-internal/eslint-plugin-sdk" "7.30.0" + "@sentry-internal/typescript" "7.30.0" + "@typescript-eslint/eslint-plugin" "^5.48.0" + "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" eslint-plugin-deprecation "^1.1.0" eslint-plugin-import "^2.22.0" eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.29.0.tgz#f8d10edd65ec272cfb01b56ca148874baf2ff9aa" - integrity sha512-bhJNEKMR0rPaL+++HiPYXtsRXBV7fyX69IcbluLGXTNk8IvSbwxVl/jKZDO5pterE312oqBlkCHnQidYmqd3Zg== +"@sentry-internal/eslint-plugin-sdk@7.30.0": + version "7.30.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.30.0.tgz#daeee31f3cb167142bee4b35a6c5ac24d943fd45" + integrity sha512-1YOyrNYfv63wU42a+ezd/SX7bz/wn5ER+HPkbWCW/UpJn/HFVGke5/EHC7HBWcY/YBMDwIFfbP3ecOYwFWRzpA== dependencies: requireindex "~1.1.0" -"@sentry-internal/typescript@7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.29.0.tgz#4ea3133d4d0056a5c7f89f58ad26f1c1062d11ad" - integrity sha512-WB1ncGZ8IjM2N/hGD01mYoWIoVUcuCMXZIaejXxYnhnIdBv+jTsO7UiRa66IsCyl1QGQMNPyMGsgCoqqwctQPQ== +"@sentry-internal/typescript@7.30.0": + version "7.30.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.30.0.tgz#c03648c670ca29d9c0f2d8f54ccefd46a38b9e1b" + integrity sha512-jQVCOXQ0tcGofvqLD3V+grcqC1I+WSCTAB5qoJOS567zoBOxj4NSz69yDxkrsLjVO1Pf5qrQhhvKkE1T7AiX5g== -"@sentry/browser@7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.29.0.tgz#eb162b50adec33ac49ecd3dc930bdffbfda8098e" - integrity sha512-Af+dIcntaw405Wt7myDOMGDxiszfy4aBdshrEKYbGgcfHjgXBIdF3iKlNatvl6nrOm+IOVuKgSpCLOr2hiCwzw== +"@sentry/browser@7.30.0": + version "7.30.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.30.0.tgz#9b4387da933290546b7a4ef521713c38723a0213" + integrity sha512-9hpaNAqIBDLdnrZ51iWkqenRotqqweE1f2AlHO56nyT/UE+u+GdmAiBrgRNqdFQQM13JtTG/gu4HGOyLWb9HEA== dependencies: - "@sentry/core" "7.29.0" - "@sentry/replay" "7.29.0" - "@sentry/types" "7.29.0" - "@sentry/utils" "7.29.0" + "@sentry/core" "7.30.0" + "@sentry/replay" "7.30.0" + "@sentry/types" "7.30.0" + "@sentry/utils" "7.30.0" tslib "^1.9.3" -"@sentry/core@7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.29.0.tgz#bc4b54d56cf7652598d4430cf43ea97cc069f6fe" - integrity sha512-+e9aIp2ljtT4EJq3901z6TfEVEeqZd5cWzbKEuQzPn2UO6If9+Utd7kY2Y31eQYb4QnJgZfiIEz1HonuYY6zqQ== +"@sentry/core@7.30.0": + version "7.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.30.0.tgz#02d2e8747484ba64b6d712e8afe6736250efdc26" + integrity sha512-NeLigkBlpcK63ymM63GoIHurml6V3BUe1Vi+trwm4/qqOTzT7PQhvdJCX+o3+atzRBH+zdb6kd4VWx44Oye3KA== dependencies: - "@sentry/types" "7.29.0" - "@sentry/utils" "7.29.0" + "@sentry/types" "7.30.0" + "@sentry/utils" "7.30.0" tslib "^1.9.3" -"@sentry/node@7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.29.0.tgz#721aab15faef98f291b5a3fcb9b303565deb1e74" - integrity sha512-s/bN/JS5gPTmwzVms4FtI5YNYtC9aGY4uqdx/llVrIiVv7G6md/oJJzKtO1C4dt6YshjGjSs5KCpEn1NM4+1iA== +"@sentry/node@7.30.0": + version "7.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.30.0.tgz#42ef5b29d065f6de6ac5556a56aca20d3b9073e1" + integrity sha512-YYasu6C3I0HBP4N1oc/ed2nunxhGJgtAWaKwq3lo8uk3uF6cB1A8+2e0CpjzU5ejhbaFPUBxHyj4th39Bvku/w== dependencies: - "@sentry/core" "7.29.0" - "@sentry/types" "7.29.0" - "@sentry/utils" "7.29.0" + "@sentry/core" "7.30.0" + "@sentry/types" "7.30.0" + "@sentry/utils" "7.30.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/replay@7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.29.0.tgz#75d5bb9df39e0a31994be245032c9998af62a304" - integrity sha512-Gw7HgviJQu6pX5RFQGVY38Av4qFn9otrZdwSSl/QK5hIyg6yhlh5h7U0ydZkrYYGiW6Z6SYYRpEWCJc/Wbh+ZQ== +"@sentry/replay@7.30.0": + version "7.30.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.30.0.tgz#44db86956166fc8909459eef8ce94f750c072519" + integrity sha512-qJgz1tG0uStqMF5V7gN7KqxZuZY0MMQQY7siwPcSQVYj7X3AQswHjmvD4npEKbIa+jP6aQ6fFjoBjl3c0t3Mmg== dependencies: - "@sentry/core" "7.29.0" - "@sentry/types" "7.29.0" - "@sentry/utils" "7.29.0" + "@sentry/core" "7.30.0" + "@sentry/types" "7.30.0" + "@sentry/utils" "7.30.0" -"@sentry/tracing@7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.29.0.tgz#767f309cbff46ab12bec6ab3c266f7f03fec91fd" - integrity sha512-MAN/G6XROtRhzo/KDjddb6VJn/Q1TaPLwdyj9vvfkUkBNtlt5k16oXp+u7eHWX0uujER9wnZtj2ivXaPeqq0VA== +"@sentry/tracing@7.30.0": + version "7.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.30.0.tgz#b4576fbaf81ce418f1b7c37e7e5f4f6cf19a3c3b" + integrity sha512-bjGeDeKhpGAmLcWcrXFT/xOfHVwp/j0L1aRHzYHnqgTjVzD0NXcooPu/Nz8vF0paxz+hPD5bJwb8kz/ggJzGWQ== dependencies: - "@sentry/core" "7.29.0" - "@sentry/types" "7.29.0" - "@sentry/utils" "7.29.0" + "@sentry/core" "7.30.0" + "@sentry/types" "7.30.0" + "@sentry/utils" "7.30.0" tslib "^1.9.3" -"@sentry/types@7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.29.0.tgz#ed829b6014ee19049035fec6af2b4fea44ff28b8" - integrity sha512-DmoEpoqHPty3VxqubS/5gxarwebHRlcBd/yuno+PS3xy++/i9YPjOWLZhU2jYs1cW68M9R6CcCOiC9f2ckJjdw== +"@sentry/types@7.30.0": + version "7.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.30.0.tgz#fc2baeb5b0e1ecc4d52b07b056fcba54449cd9ce" + integrity sha512-l4A86typvt/SfWh5JffpdxNGkg5EEA8m35BzpIcKmCAQZUDmnb4b478r8jdD2uuOjLmPNmZr1tifdRW4NCLuxQ== -"@sentry/utils@7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.29.0.tgz#cbf8f87dd851b0fdc7870db9c68014c321c3bab8" - integrity sha512-ICcBwTiBGK8NQA8H2BJo0JcMN6yCeKLqNKNMVampRgS6wSfSk1edvcTdhRkW3bSktIGrIPZrKskBHyMwDGF2XQ== +"@sentry/utils@7.30.0": + version "7.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.30.0.tgz#1d83145399c65e31f725c1b6ae02f451a990f326" + integrity sha512-tSlBhr5u/LdE2emxIDTDmjmyRr99GnZGIAh5GwRxUgeDQ3VEfNUFlyFodBCbZ6yeYTYd6PWNih5xoHn1+Rf3Sw== dependencies: - "@sentry/types" "7.29.0" + "@sentry/types" "7.30.0" tslib "^1.9.3" "@sindresorhus/is@^0.14.0": @@ -232,24 +246,24 @@ defer-to-connect "^2.0.1" "@tsconfig/node10@^1.0.7": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" - integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" - integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" - integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" - integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== "@types/accepts@*": version "1.3.5" @@ -288,9 +302,9 @@ "@types/chai" "*" "@types/chai@*", "@types/chai@^4.2.10": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" - integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== + version "4.3.4" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.4.tgz#e913e8175db8307d78b4e8fa690408ba6b65dee4" + integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== "@types/connect@*": version "3.4.35" @@ -314,27 +328,22 @@ "@types/keygrip" "*" "@types/node" "*" -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - -"@types/express-serve-static-core@^4.17.18": - version "4.17.28" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" - integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== +"@types/express-serve-static-core@^4.17.31": + version "4.17.32" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz#93dda387f5516af616d8d3f05f2c4c79d81e1b82" + integrity sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" "@types/express@*": - version "4.17.13" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" - integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + version "4.17.15" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.15.tgz#9290e983ec8b054b65a5abccb610411953d417ff" + integrity sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ== dependencies: "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.18" + "@types/express-serve-static-core" "^4.17.31" "@types/qs" "*" "@types/serve-static" "*" @@ -356,11 +365,11 @@ integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== "@types/http-errors@*": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-1.8.2.tgz#7315b4c4c54f82d13fa61c228ec5c2ea5cc9e0e1" - integrity sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w== + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" + integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== @@ -376,9 +385,9 @@ integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw== "@types/koa-bodyparser@^4.3.0": - version "4.3.7" - resolved "https://registry.yarnpkg.com/@types/koa-bodyparser/-/koa-bodyparser-4.3.7.tgz#3ac41f2dec9d97db7a6f798bbb2e2368be762714" - integrity sha512-21NhEp7LjZm4zbNV5alHHmrNY4J+S7B8lYTO6CzRL8ShTMnl20Gd14dRgVhAxraLaW5iZMofox+BycbuiDvj2Q== + version "4.3.10" + resolved "https://registry.yarnpkg.com/@types/koa-bodyparser/-/koa-bodyparser-4.3.10.tgz#02b8d3d57579aa7d491d553f1f4058088bfe127f" + integrity sha512-6ae05pjhmrmGhUR8GYD5qr5p9LTEMEGfGXCsK8VaSL+totwigm8+H/7MHW7K4854CMeuwRAubT8qcc/EagaeIA== dependencies: "@types/koa" "*" @@ -390,9 +399,9 @@ "@types/koa" "*" "@types/koa@*", "@types/koa@^2.0.52", "@types/koa@^2.11.6": - version "2.13.4" - resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.4.tgz#10620b3f24a8027ef5cbae88b393d1b31205726b" - integrity sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw== + version "2.13.5" + resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.5.tgz#64b3ca4d54e08c0062e89ec666c9f45443b21a61" + integrity sha512-HSUOdzKz3by4fnqagwthW/1w/yJspTgppyyalPVbgZf8jQWvdIXcVW5h2DGtw4zYntOaeRGx49r1hxoPWrD4aA== dependencies: "@types/accepts" "*" "@types/content-disposition" "*" @@ -403,10 +412,10 @@ "@types/koa-compose" "*" "@types/node" "*" -"@types/mime@^1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== "@types/mocha@^9.0.0": version "9.1.1" @@ -414,14 +423,14 @@ integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== "@types/node@*": - version "17.0.35" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.35.tgz#635b7586086d51fb40de0a2ec9d1014a5283ba4a" - integrity sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg== + version "18.11.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" + integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== "@types/node@^16.11.26": - version "16.11.43" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.43.tgz#555e5a743f76b6b897d47f945305b618525ddbe6" - integrity sha512-GqWykok+3uocgfAJM8imbozrqLnPyTrpFlrryURQlw1EesPUCx5XxTiucWDSFF9/NUEXDuD4bnvHm8xfVGWTpQ== + version "16.18.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.11.tgz#cbb15c12ca7c16c85a72b6bdc4d4b01151bb3cae" + integrity sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA== "@types/qs@*": version "6.9.7" @@ -433,12 +442,17 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + "@types/serve-static@*": - version "1.13.10" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" - integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + version "1.15.0" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" + integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== dependencies: - "@types/mime" "^1" + "@types/mime" "*" "@types/node" "*" "@types/tmp@^0.2.2": @@ -453,117 +467,94 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^3.9.0": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz#7e061338a1383f59edc204c605899f93dc2e2c8f" - integrity sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ== - dependencies: - "@typescript-eslint/experimental-utils" "3.10.1" - debug "^4.1.1" - functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" - integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw== +"@typescript-eslint/eslint-plugin@^5.48.0": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.1.tgz#deee67e399f2cb6b4608c935777110e509d8018c" + integrity sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ== dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/typescript-estree" "3.10.1" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" + "@typescript-eslint/scope-manager" "5.48.1" + "@typescript-eslint/type-utils" "5.48.1" + "@typescript-eslint/utils" "5.48.1" + debug "^4.3.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" "@typescript-eslint/experimental-utils@^5.0.0": - version "5.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.26.0.tgz#4db8ce6940387b55e3b568a537eff36deaf0a1fe" - integrity sha512-OgUGXC/teXD8PYOkn33RSwBJPVwL0I2ipm5OHr9g9cfAhVrPC2DxQiWqaq88MNO5mbr/ZWnav3EVBpuwDreS5Q== + version "5.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.48.1.tgz#5951c0b7ef4b0838ea95f25d53385de0e366e0b8" + integrity sha512-8OoIZZuOeqsm5cxn2f01qHWtVC3M4iixSsfZXPiQUg4Sl4LiU+b5epcJFwxNfqeoLl+SGncELyi3x99zI6C0ng== dependencies: - "@typescript-eslint/utils" "5.26.0" + "@typescript-eslint/utils" "5.48.1" -"@typescript-eslint/parser@^3.9.0": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.10.1.tgz#1883858e83e8b442627e1ac6f408925211155467" - integrity sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw== +"@typescript-eslint/parser@^5.48.0": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.1.tgz#d0125792dab7e232035434ab8ef0658154db2f10" + integrity sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA== dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "3.10.1" - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/typescript-estree" "3.10.1" - eslint-visitor-keys "^1.1.0" + "@typescript-eslint/scope-manager" "5.48.1" + "@typescript-eslint/types" "5.48.1" + "@typescript-eslint/typescript-estree" "5.48.1" + debug "^4.3.4" -"@typescript-eslint/scope-manager@5.26.0": - version "5.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.26.0.tgz#44209c7f649d1a120f0717e0e82da856e9871339" - integrity sha512-gVzTJUESuTwiju/7NiTb4c5oqod8xt5GhMbExKsCTp6adU3mya6AGJ4Pl9xC7x2DX9UYFsjImC0mA62BCY22Iw== +"@typescript-eslint/scope-manager@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.1.tgz#39c71e4de639f5fe08b988005beaaf6d79f9d64d" + integrity sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ== dependencies: - "@typescript-eslint/types" "5.26.0" - "@typescript-eslint/visitor-keys" "5.26.0" - -"@typescript-eslint/types@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" - integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== + "@typescript-eslint/types" "5.48.1" + "@typescript-eslint/visitor-keys" "5.48.1" -"@typescript-eslint/types@5.26.0": - version "5.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.26.0.tgz#cb204bb154d3c103d9cc4d225f311b08219469f3" - integrity sha512-8794JZFE1RN4XaExLWLI2oSXsVImNkl79PzTOOWt9h0UHROwJedNOD2IJyfL0NbddFllcktGIO2aOu10avQQyA== - -"@typescript-eslint/typescript-estree@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" - integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w== +"@typescript-eslint/type-utils@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.1.tgz#5d94ac0c269a81a91ad77c03407cea2caf481412" + integrity sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ== dependencies: - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/visitor-keys" "3.10.1" - debug "^4.1.1" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" + "@typescript-eslint/typescript-estree" "5.48.1" + "@typescript-eslint/utils" "5.48.1" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.1.tgz#efd1913a9aaf67caf8a6e6779fd53e14e8587e14" + integrity sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg== -"@typescript-eslint/typescript-estree@5.26.0": - version "5.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.26.0.tgz#16cbceedb0011c2ed4f607255f3ee1e6e43b88c3" - integrity sha512-EyGpw6eQDsfD6jIqmXP3rU5oHScZ51tL/cZgFbFBvWuCwrIptl+oueUZzSmLtxFuSOQ9vDcJIs+279gnJkfd1w== +"@typescript-eslint/typescript-estree@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz#9efa8ee2aa471c6ab62e649f6e64d8d121bc2056" + integrity sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA== dependencies: - "@typescript-eslint/types" "5.26.0" - "@typescript-eslint/visitor-keys" "5.26.0" + "@typescript-eslint/types" "5.48.1" + "@typescript-eslint/visitor-keys" "5.48.1" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.26.0": - version "5.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.26.0.tgz#896b8480eb124096e99c8b240460bb4298afcfb4" - integrity sha512-PJFwcTq2Pt4AMOKfe3zQOdez6InIDOjUJJD3v3LyEtxHGVVRK3Vo7Dd923t/4M9hSH2q2CLvcTdxlLPjcIk3eg== +"@typescript-eslint/utils@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.1.tgz#20f2f4e88e9e2a0961cbebcb47a1f0f7da7ba7f9" + integrity sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.26.0" - "@typescript-eslint/types" "5.26.0" - "@typescript-eslint/typescript-estree" "5.26.0" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.48.1" + "@typescript-eslint/types" "5.48.1" + "@typescript-eslint/typescript-estree" "5.48.1" eslint-scope "^5.1.1" eslint-utils "^3.0.0" + semver "^7.3.7" -"@typescript-eslint/visitor-keys@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" - integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ== - dependencies: - eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/visitor-keys@5.26.0": - version "5.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.26.0.tgz#7195f756e367f789c0e83035297c45b417b57f57" - integrity sha512-wei+ffqHanYDOQgg/fS6Hcar6wAWv0CUPQ3TZzOWd2BLfgP539rb49bwua8WRAs7R6kOSLn82rfEu2ro6Llt8Q== +"@typescript-eslint/visitor-keys@5.48.1": + version "5.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz#79fd4fb9996023ef86849bf6f904f33eb6c8fccb" + integrity sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA== dependencies: - "@typescript-eslint/types" "5.26.0" + "@typescript-eslint/types" "5.48.1" eslint-visitor-keys "^3.3.0" "@ungap/promise-all-settled@1.1.2": @@ -595,9 +586,9 @@ acorn@^7.4.0: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.4.1: - version "8.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== agent-base@6: version "6.0.2" @@ -617,9 +608,9 @@ ajv@^6.10.0, ajv@^6.12.4: uri-js "^4.2.2" ajv@^8.0.1: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -656,9 +647,9 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: color-convert "^2.0.1" anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -681,14 +672,14 @@ argparse@^2.0.1: integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-includes@^3.1.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" - integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" - get-intrinsic "^1.1.1" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" is-string "^1.0.7" array-union@^2.1.0: @@ -697,13 +688,13 @@ array-union@^2.1.0: integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.flat@^1.2.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" - integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" assertion-error@^1.1.0: @@ -721,6 +712,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -848,13 +844,13 @@ chai-subset@^1.6.0: integrity sha512-K3d+KmqdS5XKW5DWPd5sgNffL3uxdDe+6GdnJh3AYPhwnBGRY5urfvfcbRtWIvvpz+KxkL9FeBB6MZewLUNwug== chai@^4.3.4: - version "4.3.6" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" - integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== + version "4.3.7" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" + integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== dependencies: assertion-error "^1.1.0" check-error "^1.0.2" - deep-eql "^3.0.1" + deep-eql "^4.1.2" get-func-name "^2.0.0" loupe "^2.3.1" pathval "^1.1.1" @@ -907,9 +903,9 @@ cliui@^7.0.2: wrap-ansi "^7.0.0" clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== dependencies: mimic-response "^1.0.0" @@ -1090,7 +1086,7 @@ decamelize@^4.0.0: decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== dependencies: mimic-response "^1.0.0" @@ -1101,17 +1097,17 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== +deep-eql@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== dependencies: type-detect "^4.0.0" deep-equal@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= + integrity sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw== deep-extend@^0.6.0: version "0.6.0" @@ -1149,12 +1145,12 @@ define-properties@^1.1.3, define-properties@^1.1.4: delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== depd@2.0.0, depd@^2.0.0, depd@~2.0.0: version "2.0.0" @@ -1164,7 +1160,7 @@ depd@2.0.0, depd@^2.0.0, depd@~2.0.0: depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== destroy@^1.0.4: version "1.2.0" @@ -1215,14 +1211,14 @@ doctrine@^3.0.0: esutils "^2.0.2" duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-latest-versions@^0.2.0: version "0.2.0" @@ -1246,7 +1242,7 @@ electron-mocha@^11.0.0: electron-window@^0.8.0: version "0.8.1" resolved "https://registry.yarnpkg.com/electron-window/-/electron-window-0.8.1.tgz#16ca187eb4870b0679274fc8299c5960e6ab2c5e" - integrity sha1-FsoYfrSHCwZ5J0/IKZxZYOarLF4= + integrity sha512-W1i9LfnZJozk3MXE8VgsL2E5wOUHSgyCvcg1H2vQQjj+gqhO9lVudgY3z3SF7LJAmi+0vy3CJkbMqsynWB49EA== dependencies: is-electron-renderer "^2.0.0" @@ -1267,7 +1263,7 @@ emoji-regex@^8.0.0: encodeurl@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== end-of-stream@^1.1.0: version "1.4.4" @@ -1295,34 +1291,53 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: - version "1.20.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" - integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" + integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== dependencies: + available-typed-arrays "^1.0.5" call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function-bind "^1.1.1" function.prototype.name "^1.1.5" - get-intrinsic "^1.1.1" + get-intrinsic "^1.1.3" get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" has "^1.0.3" has-property-descriptors "^1.0.0" + has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" + internal-slot "^1.0.4" + is-array-buffer "^3.0.1" + is-callable "^1.2.7" is-negative-zero "^2.0.2" is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" + is-typed-array "^1.1.10" is-weakref "^1.0.2" - object-inspect "^1.12.0" + object-inspect "^1.12.2" object-keys "^1.1.1" - object.assign "^4.1.2" + object.assign "^4.1.4" regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" es-shim-unscopables@^1.0.0: version "1.0.0" @@ -1353,7 +1368,7 @@ escalade@^3.1.1: escape-html@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" @@ -1363,7 +1378,7 @@ escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== eslint-config-prettier@^6.11.0: version "6.15.0" @@ -1381,17 +1396,16 @@ eslint-import-resolver-node@^0.3.6: resolve "^1.20.0" eslint-module-utils@^2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" - integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== dependencies: debug "^3.2.7" - find-up "^2.1.0" eslint-plugin-deprecation@^1.1.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.3.2.tgz#a8125d28c56158cdfa1a685197e6be8ed86f189e" - integrity sha512-z93wbx9w7H/E3ogPw6AZMkkNJ6m51fTZRNZPNQqxQLmx+KKt7aLkMU9wN67s71i+VVHN4tLOZ3zT3QLbnlC0Mg== + version "1.3.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.3.3.tgz#065b5d36ff220afe139f2b19af57454a13464731" + integrity sha512-Bbkv6ZN2cCthVXz/oZKPwsSY5S/CbgTLRG4Q2s2gpPpgNsT0uJ0dB5oLNiWzFYY8AgKX4ULxXFG1l/rDav9QFA== dependencies: "@typescript-eslint/experimental-utils" "^5.0.0" tslib "^2.3.1" @@ -1434,7 +1448,7 @@ eslint-plugin-simple-import-sort@^5.0.3: resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-5.0.3.tgz#9ae258ddada6efffc55e47a134afbd279eb31fc6" integrity sha512-1rf3AWiHeWNCQdAq0iXNnlccnH1UDnelGgrPbjBBHE8d2hXVtOudcmy0vTF4hri3iJ0MKz8jBhmH6lJ0ZWZLHQ== -eslint-scope@^5.0.0, eslint-scope@^5.1.1: +eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -1442,7 +1456,7 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^2.0.0, eslint-utils@^2.1.0: +eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== @@ -1471,13 +1485,14 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@7.27.0: - version "7.27.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.27.0.tgz#665a1506d8f95655c9274d84bd78f7166b07e9c7" - integrity sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA== +eslint@7.32.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== dependencies: "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.1" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -1494,7 +1509,7 @@ eslint@7.27.0: fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" + glob-parent "^5.1.2" globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" @@ -1586,9 +1601,9 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -1604,19 +1619,19 @@ fast-json-stable-stringify@^2.0.0: fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== dependencies: pend "~1.2.0" @@ -1642,13 +1657,6 @@ find-up@5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -1663,9 +1671,16 @@ flat@^5.0.2: integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.1.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" form-data-encoder@^2.1.2: version "2.1.4" @@ -1684,7 +1699,7 @@ form-data@*: fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-extra@^10.0.0: version "10.1.0" @@ -1707,7 +1722,7 @@ fs-extra@^8.1.0: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.2" @@ -1732,7 +1747,7 @@ function.prototype.name@^1.1.5: functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== functions-have-names@^1.2.2: version "1.2.3" @@ -1747,16 +1762,16 @@ get-caller-file@^2.0.5: get-func-name@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== dependencies: function-bind "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" + has-symbols "^1.0.3" get-stdin@^6.0.0: version "6.0.0" @@ -1790,7 +1805,7 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -1809,7 +1824,7 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.3, glob@^7.1.6: +glob@^7.1.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -1844,13 +1859,13 @@ global-tunnel-ng@^2.7.1: tunnel "^0.0.6" globals@^13.6.0, globals@^13.9.0: - version "13.15.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" - integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== + version "13.19.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" + integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== dependencies: type-fest "^0.20.2" -globalthis@^1.0.1: +globalthis@^1.0.1, globalthis@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== @@ -1869,6 +1884,13 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + got@^12.1.0: version "12.5.3" resolved "https://registry.yarnpkg.com/got/-/got-12.5.3.tgz#82bdca2dd61258a02e24d668ea6e7abb70ac3598" @@ -1921,7 +1943,7 @@ has-bigints@^1.0.1, has-bigints@^1.0.2: has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" @@ -1935,7 +1957,12 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== @@ -2028,9 +2055,9 @@ ignore@^4.0.6: integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" @@ -2043,17 +2070,17 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflation@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f" - integrity sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8= + integrity sha512-m3xv4hJYR2oXw4o4Y5l6P5P16WYmazYof+el6Al3f+YlggGj6qT9kImBAnzDelRALnP5d3h4jGBPKzYCizjZZw== inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" @@ -2068,19 +2095,28 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== +internal-slot@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" + integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== dependencies: - get-intrinsic "^1.1.0" + get-intrinsic "^1.1.3" has "^1.0.3" side-channel "^1.0.4" +is-array-buffer@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" + integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-typed-array "^1.1.10" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-bigint@^1.0.1: version "1.0.4" @@ -2104,15 +2140,15 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.8.1: - version "2.9.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" - integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== +is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== dependencies: has "^1.0.3" @@ -2126,12 +2162,12 @@ is-date-object@^1.0.1: is-electron-renderer@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-electron-renderer/-/is-electron-renderer-2.0.1.tgz#a469d056f975697c58c98c6023eb0aa79af895a2" - integrity sha1-pGnQVvl1aXxYyYxgI+sKp5r4laI= + integrity sha512-pRlQnpaCFhDVPtkXkP+g9Ybv/CjbiQDjnKFQTEjpBfDKeV6dRDBczuFRDpM6DVfk2EjpMS8t5kwE5jPnqYl3zA== is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -2203,6 +2239,17 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" @@ -2218,12 +2265,12 @@ is-weakref@^1.0.2: isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== js-tokens@^4.0.0: version "4.0.0" @@ -2253,7 +2300,7 @@ jsdoctypeparser@^9.0.0: json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== json-buffer@3.0.1: version "3.0.1" @@ -2278,12 +2325,12 @@ json-schema-traverse@^1.0.0: json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json5@^1.0.1: version "1.0.2" @@ -2295,7 +2342,7 @@ json5@^1.0.1: jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" @@ -2359,9 +2406,9 @@ koa-tree-router@^0.8.0: koa-compose "^4.1.0" koa@^2.13.4: - version "2.13.4" - resolved "https://registry.yarnpkg.com/koa/-/koa-2.13.4.tgz#ee5b0cb39e0b8069c38d115139c774833d32462e" - integrity sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g== + version "2.14.1" + resolved "https://registry.yarnpkg.com/koa/-/koa-2.14.1.tgz#defb9589297d8eb1859936e777f3feecfc26925c" + integrity sha512-USJFyZgi2l0wDgqkfD27gL4YGno7TfUkcmOe6UOLFOVuN+J7FwnNu4Dydl4CUQzraM1lBAiGed0M9OVJoT0Kqw== dependencies: accepts "^1.3.5" cache-content-type "^1.0.0" @@ -2405,21 +2452,13 @@ levn@^0.4.1: load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== dependencies: graceful-fs "^4.1.2" parse-json "^4.0.0" pify "^3.0.0" strip-bom "^3.0.0" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -2435,9 +2474,9 @@ lodash.merge@^4.6.2: lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.20: +lodash@^4.17.10, lodash@^4.17.20: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2451,9 +2490,9 @@ log-symbols@4.1.0: is-unicode-supported "^0.1.0" loupe@^2.3.1: - version "2.3.4" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" - integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== + version "2.3.6" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== dependencies: get-func-name "^2.0.0" @@ -2482,7 +2521,7 @@ lru-cache@^6.0.0: lru_map@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0= + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== make-error@^1.1.1: version "1.3.6" @@ -2499,12 +2538,12 @@ matcher@^3.0.0: media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" @@ -2605,7 +2644,7 @@ mocha@^9.1.1, mocha@^9.1.3: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" @@ -2622,10 +2661,15 @@ nanoid@3.3.1: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@0.6.3: version "0.6.3" @@ -2685,7 +2729,7 @@ npm-run-all@^4.1.5: shell-quote "^1.6.1" string.prototype.padend "^3.0.0" -object-inspect@^1.12.0, object-inspect@^1.9.0: +object-inspect@^1.12.2, object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== @@ -2695,24 +2739,24 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" object-keys "^1.1.1" object.values@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" on-finished@^2.3.0: version "2.4.1" @@ -2724,14 +2768,14 @@ on-finished@^2.3.0: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" only@~0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" - integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q= + integrity sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ== optionator@^0.9.1: version "0.9.1" @@ -2755,13 +2799,6 @@ p-cancelable@^3.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -2769,13 +2806,6 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -2783,11 +2813,6 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - package-json@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.0.tgz#2a22806f1ed7c786c8e6ff26cfe20003bf4c6850" @@ -2808,7 +2833,7 @@ parent-module@^1.0.0: parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" @@ -2818,11 +2843,6 @@ parseurl@^1.3.2: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -2831,12 +2851,12 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== path-key@^3.1.0: version "3.1.1" @@ -2868,7 +2888,7 @@ pathval@^1.1.1: pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" @@ -2883,7 +2903,7 @@ pidtree@^0.3.0: pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== prelude-ls@^1.2.1: version "1.2.1" @@ -2893,12 +2913,12 @@ prelude-ls@^1.2.1: prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== prettier@^2.4.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" - integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== + version "2.8.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.2.tgz#c4ea1b5b454d7c4b59966db2e06ed7eec5dfd160" + integrity sha512-BtRV9BcncDyI2tsuS19zzhzoxD8Dh8LiCx7j7tHzrkz8GFXAexeWFdi22mjE1d16dftH2qNaytVxqiRTGlMfpw== process-nextick-args@~2.0.0: version "2.0.1" @@ -2913,7 +2933,7 @@ progress@^2.0.0, progress@^2.0.3: proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== pump@^3.0.0: version "3.0.0" @@ -2924,14 +2944,14 @@ pump@^3.0.0: once "^1.3.1" punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + version "2.2.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.2.0.tgz#2092cc57cd2582c38e4e7e8bb869dc8d3148bc74" + integrity sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw== qs@^6.5.2: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" @@ -2975,7 +2995,7 @@ rc@1.2.8: read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== dependencies: load-json-file "^4.0.0" normalize-package-data "^2.3.2" @@ -3010,7 +3030,7 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^3.0.0, regexpp@^3.1.0: +regexpp@^3.1.0, regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -3037,7 +3057,7 @@ registry-url@^6.0.0: require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" @@ -3047,7 +3067,7 @@ require-from-string@^2.0.2: requireindex@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" - integrity sha1-5UBLgVV+91225JxacgBIk/4D4WI= + integrity sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg== resolve-alpn@^1.2.0: version "1.2.1" @@ -3060,18 +3080,18 @@ resolve-from@^4.0.0: integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: - is-core-module "^2.8.1" + is-core-module "^2.9.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== dependencies: lowercase-keys "^1.0.0" @@ -3123,6 +3143,15 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -3131,7 +3160,7 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== "semver@2 || 3 || 4 || 5", semver@^5.5.0: version "5.7.1" @@ -3143,14 +3172,7 @@ semver@^6.2.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.8: +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== @@ -3179,7 +3201,7 @@ setprototypeof@1.2.0: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" @@ -3193,7 +3215,7 @@ shebang-command@^2.0.0: shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" @@ -3201,9 +3223,9 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.6.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + version "1.7.4" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8" + integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== side-channel@^1.0.4: version "1.0.4" @@ -3250,9 +3272,9 @@ spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.11" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" - integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + version "3.0.12" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" + integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== sprintf-js@^1.1.2: version "1.1.2" @@ -3262,7 +3284,7 @@ sprintf-js@^1.1.2: sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== statuses@2.0.1: version "2.0.1" @@ -3272,12 +3294,12 @@ statuses@2.0.1: "statuses@>= 1.5.0 < 2", statuses@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== streamsearch@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" - integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= + integrity sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA== string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" @@ -3289,31 +3311,31 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: strip-ansi "^6.0.1" string.prototype.padend@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1" - integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg== + version "3.1.4" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz#2c43bb3a89eb54b6750de5942c123d6c98dd65b6" + integrity sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" + es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" + es-abstract "^1.20.4" string_decoder@~1.1.1: version "1.1.1" @@ -3332,7 +3354,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" @@ -3378,9 +3400,9 @@ supports-preserve-symlinks-flag@^1.0.0: integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== table@^6.0.9: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== + version "6.8.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -3391,7 +3413,7 @@ table@^6.0.9: text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== tmp@^0.2.1: version "0.2.1" @@ -3418,9 +3440,9 @@ toidentifier@1.0.1: integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== ts-node@^10.4.0: - version "10.8.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.0.tgz#3ceb5ac3e67ae8025c1950626aafbdecb55d82ce" - integrity sha512-/fNd5Qh+zTt8Vt1KbYZjRHCE9sI5i7nqfD/dzBBRDeVXZXS6kToW6R7tTU6Nd4XavFs0mAVCg29Q//ML7WsZYA== + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" @@ -3452,16 +3474,16 @@ tslib@^1.8.1, tslib@^1.9.3: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.3.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== tsscmp@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== -tsutils@^3.17.1, tsutils@^3.21.0: +tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== @@ -3503,15 +3525,24 @@ type-is@^1.6.16: media-typer "0.3.0" mime-types "~2.1.24" +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@^4.4.4: - version "4.7.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.2.tgz#1f9aa2ceb9af87cca227813b4310fff0b51593c4" - integrity sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A== + version "4.9.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" + integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== unbox-primitive@^1.0.2: version "1.0.2" @@ -3536,7 +3567,7 @@ universalify@^2.0.0: unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== uri-js@^4.2.2: version "4.4.1" @@ -3548,14 +3579,14 @@ uri-js@^4.2.2: url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== dependencies: prepend-http "^2.0.0" util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== v8-compile-cache-lib@^3.0.1: version "3.0.1" @@ -3578,7 +3609,7 @@ validate-npm-package-license@^3.0.1: vary@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== which-boxed-primitive@^1.0.2: version "1.0.2" @@ -3591,6 +3622,18 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + which@2.0.2, which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -3627,12 +3670,12 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== xvfb-maybe@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/xvfb-maybe/-/xvfb-maybe-0.2.1.tgz#ed8cb132957b7848b439984c66f010ea7f24361b" - integrity sha1-7YyxMpV7eEi0OZhMZvAQ6n8kNhs= + integrity sha512-9IyRz3l6Qyhl6LvnGRF5jMPB4oBEepQnuzvVAFTynP6ACLLSevqigICJ9d/+ofl29m2daeaVBChnPYUnaeJ7yA== dependencies: debug "^2.2.0" which "^1.2.4" @@ -3688,7 +3731,7 @@ yargs@16.2.0, yargs@^16.2.0: yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" From 36cef2160ae6d36a5423aba06509e88f12447cba Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 11 Jan 2023 11:40:09 +0000 Subject: [PATCH 061/239] test: New Electron versions (#620) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index f2ee32b8..54d3da82 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.8","21.3.3","22.0.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.8","21.3.3","22.0.1"] From 6ad9d704d5ea350191083229f0e8b2756001c540 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 11 Jan 2023 12:09:44 +0000 Subject: [PATCH 062/239] chore: Update CHANGELOG for 4.2.0 release (#621) --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d06df8a9..78e2ae15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ ## Unreleased +## 4.2.0 + +- feat: Update JavaScript SDKs to 7.30.0 and add support for Replay in renderers (#618) +- feat: Use a transport to send events to main process rather than via integration (#610) +- test: Add test to ensure window titles don't end up in breadcrumbs when disabled (#594) +- fix: Use POST for main process ping so it does not result in fetch breadcrumb (#612) +- CI: Use volta-cli/action to use the correct node version (#609) +- CI: Auto-generate PRs for JavaScript SDK updates (#608) + ## 4.1.2 - fix: Ensure the scope writes do not beat the initial async scope read (#593) From 49760e213883c39ed72357279f7b3cdedd34b142 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 11 Jan 2023 14:29:02 +0000 Subject: [PATCH 063/239] test: Don't run sandbox tests on Linux for Electron < 13 (#622) --- examples/electron-forge-webpack/recipe.yml | 2 +- examples/webpack-context-isolation-preload/recipe.yml | 2 +- examples/webpack-context-isolation/recipe.yml | 2 +- test/e2e/recipe/eval.ts | 4 +++- test/e2e/test-apps/other/error-iframe/recipe.yml | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/examples/electron-forge-webpack/recipe.yml b/examples/electron-forge-webpack/recipe.yml index 0ee6003d..d40dea6d 100644 --- a/examples/electron-forge-webpack/recipe.yml +++ b/examples/electron-forge-webpack/recipe.yml @@ -1,4 +1,4 @@ description: Electron Forge Webpack with contextIsolation and sandbox command: yarn && yarn package -condition: supportsContextIsolation +condition: supportsContextIsolation && supportsSandbox timeout: 120 diff --git a/examples/webpack-context-isolation-preload/recipe.yml b/examples/webpack-context-isolation-preload/recipe.yml index cd6349e1..07abca78 100644 --- a/examples/webpack-context-isolation-preload/recipe.yml +++ b/examples/webpack-context-isolation-preload/recipe.yml @@ -1,4 +1,4 @@ description: Webpack 5 app with contextIsolation and sandbox with preload command: yarn && yarn build -condition: supportsContextIsolation +condition: supportsContextIsolation && supportsSandbox timeout: 120 diff --git a/examples/webpack-context-isolation/recipe.yml b/examples/webpack-context-isolation/recipe.yml index c6f46484..18407171 100644 --- a/examples/webpack-context-isolation/recipe.yml +++ b/examples/webpack-context-isolation/recipe.yml @@ -1,4 +1,4 @@ description: Webpack 5 app with contextIsolation and sandbox command: yarn && yarn build -condition: supportsContextIsolation +condition: supportsContextIsolation && supportsSandbox timeout: 120 diff --git a/test/e2e/recipe/eval.ts b/test/e2e/recipe/eval.ts index 63d69462..ced24cbc 100644 --- a/test/e2e/recipe/eval.ts +++ b/test/e2e/recipe/eval.ts @@ -15,9 +15,11 @@ function getEvalContext(electronVersion: string): Context { (platform === 'win32' && version.major >= 6) || (platform === 'linux' && version.major >= 15); + const supportsSandbox = platform !== 'linux' || version.major >= 13; + const supportsContextIsolation = version.major >= 6; - return createContext({ version, platform, usesCrashpad, supportsContextIsolation }); + return createContext({ version, platform, usesCrashpad, supportsContextIsolation, supportsSandbox }); } export function evaluateCondition(name: string, electronVersion: string, condition: string | undefined): boolean { diff --git a/test/e2e/test-apps/other/error-iframe/recipe.yml b/test/e2e/test-apps/other/error-iframe/recipe.yml index 37965ed3..73bace15 100644 --- a/test/e2e/test-apps/other/error-iframe/recipe.yml +++ b/test/e2e/test-apps/other/error-iframe/recipe.yml @@ -1,4 +1,4 @@ description: JavaScript Error from <iframe> command: yarn && yarn build -condition: supportsContextIsolation +condition: supportsContextIsolation && supportsSandbox timeout: 120 From dd140ed63a5637414e2ddd2df0088f390e832cf6 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 11 Jan 2023 17:03:07 +0000 Subject: [PATCH 064/239] test: Disable sandbox for Linux e2e tests on older Electron versions (#623) --- test/e2e/context.ts | 12 +++++++++++- test/e2e/index.test.ts | 4 ++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/test/e2e/context.ts b/test/e2e/context.ts index c190dc1b..028482d2 100644 --- a/test/e2e/context.ts +++ b/test/e2e/context.ts @@ -1,3 +1,4 @@ +import { parseSemver } from '@sentry/utils'; import { ChildProcess, spawn, spawnSync } from 'child_process'; import { rmSync } from 'fs'; import { homedir } from 'os'; @@ -47,6 +48,7 @@ export class TestContext { */ public constructor( private readonly _electronPath: string, + private readonly _electronVersion: string, private readonly _appPath: string, private readonly _appName: string, ) {} @@ -66,7 +68,15 @@ export class TestContext { this._clearAppUserData(); } - const childProcess = spawn(this._electronPath, [this._appPath], { env }); + const version = parseSemver(this._electronVersion); + + const args = [this._appPath]; + // Older versions of Electron no longer work correctly on 'ubuntu-latest' with sandbox + if (process.platform === 'linux' && (version.major || 0) < 13) { + args.push('--no-sandbox'); + } + + const childProcess = spawn(this._electronPath, args, { env }); function logLinesWithoutEmpty(input: string): void { input diff --git a/test/e2e/index.test.ts b/test/e2e/index.test.ts index 550a003a..5554756e 100644 --- a/test/e2e/index.test.ts +++ b/test/e2e/index.test.ts @@ -61,7 +61,7 @@ describe('E2E Tests', () => { } const [appPath, appName] = await recipe.prepare(this, distDir); - testContext = new TestContext(await electronPath, appPath, appName); + testContext = new TestContext(await electronPath, electronVersion, appPath, appName); await recipe.runTests(testContext, testServer); }); } @@ -79,7 +79,7 @@ describe('E2E Tests', () => { } const [appPath, appName] = await recipe.prepare(this, distDir); - testContext = new TestContext(await electronPath, appPath, appName); + testContext = new TestContext(await electronPath, electronVersion, appPath, appName); await recipe.runTests(testContext, testServer); }); } From 25f1c899b8f78db3bacbba4369ed4c188197b75d Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Wed, 11 Jan 2023 17:23:59 +0000 Subject: [PATCH 065/239] release: 4.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a0ea20d0..a87e474b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.1.2", + "version": "4.2.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From daea289a2318ea1b9b03e8d445fc1eaa28f42db8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 15 Jan 2023 21:49:46 +0000 Subject: [PATCH 066/239] test: New Electron versions (#624) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 54d3da82..1defc426 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.8","21.3.3","22.0.1"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.9","21.3.4","22.0.2"] From ac983a3d54b4b5439c3067b9d9f8505dbf5b2797 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 18 Jan 2023 11:58:23 +0000 Subject: [PATCH 067/239] test: Test localhost URLs are not modified and stack traces are correctly parsed (#626) --- test/unit/normalize.test.ts | 6 ++++++ test/unit/stack-parse.test.ts | 25 +++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/test/unit/normalize.test.ts b/test/unit/normalize.test.ts index 13def4ad..3b79c849 100644 --- a/test/unit/normalize.test.ts +++ b/test/unit/normalize.test.ts @@ -61,4 +61,10 @@ describe('Normalize URLs', () => { normalizeUrl('/home/haza/Desktop/foo/app/webpack:/electron/src/common/models/ipc-request.ts', base), ).to.equal('app:///electron/src/common/models/ipc-request.ts'); }); + + it('Only modifies file URLS', () => { + const base = 'c:/Users/Username/sentry-electron/example'; + expect(normalizeUrl('https://some.host/index.html', base)).to.equal('https://some.host/index.html'); + expect(normalizeUrl('http://localhost:43288/index.html', base)).to.equal('http://localhost:43288/index.html'); + }); }); diff --git a/test/unit/stack-parse.test.ts b/test/unit/stack-parse.test.ts index 06137947..9549c4e1 100644 --- a/test/unit/stack-parse.test.ts +++ b/test/unit/stack-parse.test.ts @@ -144,4 +144,29 @@ describe('Parse mixed renderer stack traces', () => { }, ]); }); + + it('Electron localhost', () => { + const stack = `Error: ENOENT: no such file or directory, open '/does-not-exist' + at two (http://localhost:12345/src/index.html:17:11) + at one (http://localhost:12345/src/index.html:24:9)`; + + const frames = electronRendererStackParser(stack); + + expect(frames).to.eql([ + { + filename: 'http://localhost:12345/src/index.html', + function: 'one', + in_app: false, + lineno: 24, + colno: 9, + }, + { + filename: 'http://localhost:12345/src/index.html', + function: 'two', + in_app: false, + lineno: 17, + colno: 11, + }, + ]); + }); }); From 18ddc1af25e0e1cc1a0782b052967d869c74c470 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 18 Jan 2023 12:00:21 +0000 Subject: [PATCH 068/239] CI: A few CI updates and fixes (#625) --- .github/workflows/build.yml | 17 ++---- .github/workflows/codeql-analysis.yml | 58 +++++++++---------- .../workflows/new-electron-versions-pr.yml | 2 +- .github/workflows/new-sdk-versions-pr.yml | 2 +- .github/workflows/release.yml | 2 +- 5 files changed, 38 insertions(+), 43 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9e3d2aa5..6e53ab99 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,7 +14,7 @@ jobs: name: Build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: volta-cli/action@v3 - name: Install run: yarn install @@ -23,7 +23,7 @@ jobs: - name: Pack run: yarn pack - name: Archive Artifacts - uses: actions/upload-artifact@v3.1.1 + uses: actions/upload-artifact@v3 with: name: ${{ github.sha }} path: | @@ -37,7 +37,7 @@ jobs: name: Lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: volta-cli/action@v3 - run: yarn install - name: Run Linter @@ -48,12 +48,12 @@ jobs: needs: build runs-on: ${{ matrix.os }} strategy: - # we want that the matrix keeps running, default is to cancel them if it fails. + # we want that the matrix keeps running, default is to cancel all if one fails. fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: volta-cli/action@v3 - run: yarn install - name: Run Unit Tests @@ -71,13 +71,8 @@ jobs: env: ELECTRON_VERSION: ${{ matrix.electron }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: volta-cli/action@v3 - - uses: actions/cache@v2 - with: - path: | - **/.cache/**/*.zip - key: ${{ runner.os }}-${{ matrix.electron }} - run: yarn install - name: Run E2E Tests run: yarn e2e diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 8537198d..9dfdb379 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -9,14 +9,14 @@ # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # -name: "CodeQL" +name: 'CodeQL' on: push: - branches: [ master ] + branches: [master] pull_request: # The branches below must be a subset of the branches above - branches: [ master ] + branches: [master] schedule: - cron: '33 4 * * 5' @@ -28,40 +28,40 @@ jobs: strategy: fail-fast: false matrix: - language: [ 'javascript' ] + language: ['javascript'] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] # Learn more: # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed steps: - - name: Checkout repository - uses: actions/checkout@v2 + - name: Checkout repository + uses: actions/checkout@v3 - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v1 + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 - # ℹ️ Command-line programs to run using the OS shell. - # 📚 https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions - # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language - #- run: | - # make bootstrap - # make release + #- run: | + # make bootstrap + # make release - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/.github/workflows/new-electron-versions-pr.yml b/.github/workflows/new-electron-versions-pr.yml index 8c47b74d..ca7abfc1 100644 --- a/.github/workflows/new-electron-versions-pr.yml +++ b/.github/workflows/new-electron-versions-pr.yml @@ -9,7 +9,7 @@ jobs: name: Check new versions runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: volta-cli/action@v3 - run: yarn install - name: Update Versions diff --git a/.github/workflows/new-sdk-versions-pr.yml b/.github/workflows/new-sdk-versions-pr.yml index c93cb9ac..32b2c2e1 100644 --- a/.github/workflows/new-sdk-versions-pr.yml +++ b/.github/workflows/new-sdk-versions-pr.yml @@ -9,7 +9,7 @@ jobs: name: Check new versions runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: volta-cli/action@v3 - run: yarn install - name: Update Versions diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8e02b82e..92239b35 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest name: 'Release a new version' steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: token: ${{ secrets.GH_RELEASE_PAT }} fetch-depth: 0 From e58929e2b52a66b994384337d8cff4962e6d47d2 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 18 Jan 2023 12:13:02 +0000 Subject: [PATCH 069/239] feat: Update JavaScript SDKs to v7.31.1 (#628) --- .eslintrc.js | 3 ++ package.json | 16 +++--- src/renderer/sdk.ts | 2 +- yarn.lock | 116 ++++++++++++++++++++++---------------------- 4 files changed, 70 insertions(+), 67 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index cf84dff0..6d0e6d0e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -40,5 +40,8 @@ module.exports = { '@typescript-eslint/no-var-requires': 'off', '@sentry-internal/sdk/no-async-await': 'off', '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/consistent-type-imports': 'off', + '@sentry-internal/sdk/no-optional-chaining': 'off', + '@sentry-internal/sdk/no-nullish-coalescing': 'off', }, }; diff --git a/package.json b/package.json index a87e474b..0ea4bddd 100644 --- a/package.json +++ b/package.json @@ -58,18 +58,18 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.30.0", - "@sentry/core": "7.30.0", - "@sentry/node": "7.30.0", - "@sentry/types": "7.30.0", - "@sentry/utils": "7.30.0", + "@sentry/browser": "7.31.1", + "@sentry/core": "7.31.1", + "@sentry/node": "7.31.1", + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1", "deepmerge": "4.2.2", "tslib": "^2.3.1" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.30.0", - "@sentry-internal/typescript": "7.30.0", - "@sentry/tracing": "7.30.0", + "@sentry-internal/eslint-config-sdk": "7.31.1", + "@sentry-internal/typescript": "7.31.1", + "@sentry/tracing": "7.31.1", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 39f8bbfd..6d6f69f2 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_30_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_31_1: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 09cc5417..a2490b8c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -129,13 +129,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.30.0": - version "7.30.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.30.0.tgz#f527d00a9350601d343ec121aa8a19b23582fe1b" - integrity sha512-VhX0qRtC3GOD15YsK4oGmK2NeIErEChswX44X0bi3zvjMOSZCRM8w8YrtgCvbSBe2xrZyZnqRG/nxIOejuNHWw== +"@sentry-internal/eslint-config-sdk@7.31.1": + version "7.31.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.31.1.tgz#4473f01a7ef9c0facc5326893ca350d85da21041" + integrity sha512-RGgBa+sF4W7z8emW+4+r8xgVQtpSqfYSJMmU9wVe/UfIERNLnpj00pK4Vg4Bxbxiwf9TnXG/MyN3qyfJqqUpQw== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.30.0" - "@sentry-internal/typescript" "7.30.0" + "@sentry-internal/eslint-plugin-sdk" "7.31.1" + "@sentry-internal/typescript" "7.31.1" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -144,81 +144,81 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.30.0": - version "7.30.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.30.0.tgz#daeee31f3cb167142bee4b35a6c5ac24d943fd45" - integrity sha512-1YOyrNYfv63wU42a+ezd/SX7bz/wn5ER+HPkbWCW/UpJn/HFVGke5/EHC7HBWcY/YBMDwIFfbP3ecOYwFWRzpA== +"@sentry-internal/eslint-plugin-sdk@7.31.1": + version "7.31.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.31.1.tgz#d08b96a7d892d83c6644aa136d33f63e523ead51" + integrity sha512-nXoDrgpJiRvKr2DIm556XE0MwLUM5LNatfBVzmJgOd57b2kCh2MamYCZBlqjmLvJ3cB/nYlG9xK4CKBPynXxcQ== dependencies: requireindex "~1.1.0" -"@sentry-internal/typescript@7.30.0": - version "7.30.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.30.0.tgz#c03648c670ca29d9c0f2d8f54ccefd46a38b9e1b" - integrity sha512-jQVCOXQ0tcGofvqLD3V+grcqC1I+WSCTAB5qoJOS567zoBOxj4NSz69yDxkrsLjVO1Pf5qrQhhvKkE1T7AiX5g== +"@sentry-internal/typescript@7.31.1": + version "7.31.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.31.1.tgz#efba3403d7539d4b106cac867f02cae330910af1" + integrity sha512-nYuLczcPd4PtKjfgdDMEGAczREBTtUTr1hjMZSafCMY4FUwdns9VKu4Eb13nrrytmF2zyqcCg4pPAXRuaeUAbA== -"@sentry/browser@7.30.0": - version "7.30.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.30.0.tgz#9b4387da933290546b7a4ef521713c38723a0213" - integrity sha512-9hpaNAqIBDLdnrZ51iWkqenRotqqweE1f2AlHO56nyT/UE+u+GdmAiBrgRNqdFQQM13JtTG/gu4HGOyLWb9HEA== +"@sentry/browser@7.31.1": + version "7.31.1" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.31.1.tgz#ac42ef5994d0e983e4c44c35b17013a0080c6527" + integrity sha512-Rg9F61S1tz1Dv3iUyyGP26bxoi7WJAG2+f2fBbSmFuJ+JTH4Jvu2/F1bBig8Dz01ejzVhbNSUUCfoDhSvksIsQ== dependencies: - "@sentry/core" "7.30.0" - "@sentry/replay" "7.30.0" - "@sentry/types" "7.30.0" - "@sentry/utils" "7.30.0" + "@sentry/core" "7.31.1" + "@sentry/replay" "7.31.1" + "@sentry/types" "7.31.1" + "@sentry/utils" "7.31.1" tslib "^1.9.3" -"@sentry/core@7.30.0": - version "7.30.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.30.0.tgz#02d2e8747484ba64b6d712e8afe6736250efdc26" - integrity sha512-NeLigkBlpcK63ymM63GoIHurml6V3BUe1Vi+trwm4/qqOTzT7PQhvdJCX+o3+atzRBH+zdb6kd4VWx44Oye3KA== +"@sentry/core@7.31.1": + version "7.31.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.31.1.tgz#8c48e9c6a24b612eb7f757fdf246ed6b22c26b3b" + integrity sha512-quaNU6z8jabmatBTDi28Wpff2yzfWIp/IU4bbi2QOtEiCNT+TQJXqlRTRMu9xLrX7YzyKCL5X2gbit/85lyWUg== dependencies: - "@sentry/types" "7.30.0" - "@sentry/utils" "7.30.0" + "@sentry/types" "7.31.1" + "@sentry/utils" "7.31.1" tslib "^1.9.3" -"@sentry/node@7.30.0": - version "7.30.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.30.0.tgz#42ef5b29d065f6de6ac5556a56aca20d3b9073e1" - integrity sha512-YYasu6C3I0HBP4N1oc/ed2nunxhGJgtAWaKwq3lo8uk3uF6cB1A8+2e0CpjzU5ejhbaFPUBxHyj4th39Bvku/w== +"@sentry/node@7.31.1": + version "7.31.1" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.31.1.tgz#cba1eaa5664fc7e6dc07bb5a378f7dbe42f63457" + integrity sha512-4VzfOU1YHeoGkBQmkVXlXoXITf+1NkZEREKhdzgpVAkVjb2Tk3sMoFov4wOKWnNTTj4ka50xyaw/ZmqApgQ4Pw== dependencies: - "@sentry/core" "7.30.0" - "@sentry/types" "7.30.0" - "@sentry/utils" "7.30.0" + "@sentry/core" "7.31.1" + "@sentry/types" "7.31.1" + "@sentry/utils" "7.31.1" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/replay@7.30.0": - version "7.30.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.30.0.tgz#44db86956166fc8909459eef8ce94f750c072519" - integrity sha512-qJgz1tG0uStqMF5V7gN7KqxZuZY0MMQQY7siwPcSQVYj7X3AQswHjmvD4npEKbIa+jP6aQ6fFjoBjl3c0t3Mmg== +"@sentry/replay@7.31.1": + version "7.31.1" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.31.1.tgz#453ad85fc2f14e4d203d3a7e0bf790877f697964" + integrity sha512-sLArvwZn6IwA/bASctyhxN7LhdCXJvMmyTynRfmk7pzuNzBMc5CNlHeIsDpHrfQuH53IKicvl6cHnHyclu5DSA== dependencies: - "@sentry/core" "7.30.0" - "@sentry/types" "7.30.0" - "@sentry/utils" "7.30.0" + "@sentry/core" "7.31.1" + "@sentry/types" "7.31.1" + "@sentry/utils" "7.31.1" -"@sentry/tracing@7.30.0": - version "7.30.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.30.0.tgz#b4576fbaf81ce418f1b7c37e7e5f4f6cf19a3c3b" - integrity sha512-bjGeDeKhpGAmLcWcrXFT/xOfHVwp/j0L1aRHzYHnqgTjVzD0NXcooPu/Nz8vF0paxz+hPD5bJwb8kz/ggJzGWQ== +"@sentry/tracing@7.31.1": + version "7.31.1" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.31.1.tgz#f3bf8ca3aa9ddc15c282425df8043be978baadb4" + integrity sha512-kW6vNwddp2Ycq2JfTzveUEIRF9YQwvl7L6BBoOZt9oVnYlsPipEeyU2Q277LatHldr8hDo2tbz/vz2BQjO5GSw== dependencies: - "@sentry/core" "7.30.0" - "@sentry/types" "7.30.0" - "@sentry/utils" "7.30.0" + "@sentry/core" "7.31.1" + "@sentry/types" "7.31.1" + "@sentry/utils" "7.31.1" tslib "^1.9.3" -"@sentry/types@7.30.0": - version "7.30.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.30.0.tgz#fc2baeb5b0e1ecc4d52b07b056fcba54449cd9ce" - integrity sha512-l4A86typvt/SfWh5JffpdxNGkg5EEA8m35BzpIcKmCAQZUDmnb4b478r8jdD2uuOjLmPNmZr1tifdRW4NCLuxQ== +"@sentry/types@7.31.1": + version "7.31.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.31.1.tgz#920fc10b289ac1f99f277033b4d26625028a1f9f" + integrity sha512-1uzr2l0AxEnxUX/S0EdmXUQ15/kDsam8Nbdw4Gai8SU764XwQgA/TTjoewVP597CDI/AHKan67Y630/Ylmkx9w== -"@sentry/utils@7.30.0": - version "7.30.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.30.0.tgz#1d83145399c65e31f725c1b6ae02f451a990f326" - integrity sha512-tSlBhr5u/LdE2emxIDTDmjmyRr99GnZGIAh5GwRxUgeDQ3VEfNUFlyFodBCbZ6yeYTYd6PWNih5xoHn1+Rf3Sw== +"@sentry/utils@7.31.1": + version "7.31.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.31.1.tgz#bdc988de603318a30ff247d5702c2f9ac81255cb" + integrity sha512-ZsIPq29aNdP9q3R7qIzJhZ9WW+4DzE9g5SfGwx3UjTIxoRRBfdUJUbf7S+LKEdvCkKbyoDt6FLt5MiSJV43xBA== dependencies: - "@sentry/types" "7.30.0" + "@sentry/types" "7.31.1" tslib "^1.9.3" "@sindresorhus/is@^0.14.0": From 4564258fa4231d446bfc1ffeefc4a7f15a3f3132 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 19 Jan 2023 22:50:55 +0000 Subject: [PATCH 070/239] test: New Electron versions (#630) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 1defc426..b228b954 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.9","21.3.4","22.0.2"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.10","21.3.5","22.0.3"] From a8c4274c91c37d0deac9b4e231bbede29215bea1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:02:18 +0100 Subject: [PATCH 071/239] test: New Electron versions (#632) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index b228b954..9be33b05 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.10","21.3.5","22.0.3"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.11","21.4.1","22.2.0"] From dbc3f4db4e4eb9284cdde09d8180919b7d99b442 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 2 Feb 2023 14:41:38 +0100 Subject: [PATCH 072/239] fix: Replay should be re-exported (#633) --- src/renderer/index.ts | 2 +- test/e2e/test-apps/other/browser-replay/package.json | 3 +-- test/e2e/test-apps/other/browser-replay/src/index.html | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 44d88b8a..1d81528c 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -45,7 +45,7 @@ export { InboundFilters, } from '@sentry/core'; -export { BrowserClient, lastEventId, showReportDialog } from '@sentry/browser'; +export { BrowserClient, lastEventId, showReportDialog, Replay } from '@sentry/browser'; export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser'; export const Integrations = { ...ElectronRendererIntegrations, ...BrowserIntegrations }; diff --git a/test/e2e/test-apps/other/browser-replay/package.json b/test/e2e/test-apps/other/browser-replay/package.json index 07307186..01f82712 100644 --- a/test/e2e/test-apps/other/browser-replay/package.json +++ b/test/e2e/test-apps/other/browser-replay/package.json @@ -3,7 +3,6 @@ "version": "1.0.0", "main": "src/main.js", "dependencies": { - "@sentry/electron": "3.0.0", - "@sentry/replay": "7.0.0" + "@sentry/electron": "3.0.0" } } diff --git a/test/e2e/test-apps/other/browser-replay/src/index.html b/test/e2e/test-apps/other/browser-replay/src/index.html index 6d4d5897..b6e3a5aa 100644 --- a/test/e2e/test-apps/other/browser-replay/src/index.html +++ b/test/e2e/test-apps/other/browser-replay/src/index.html @@ -5,8 +5,7 @@ </head> <body> <script> - const { init } = require('@sentry/electron'); - const { Replay } = require('@sentry/replay'); + const { init, Replay } = require('@sentry/electron/renderer'); init({ debug: true, From 3aca3aa32085a634e1e6fe8270c005d9727575e8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:42:00 +0100 Subject: [PATCH 073/239] test: Update Sentry SDKs to 7.35.0 (#631) --- package.json | 18 +++---- src/renderer/sdk.ts | 2 +- yarn.lock | 116 ++++++++++++++++++++++---------------------- 3 files changed, 68 insertions(+), 68 deletions(-) diff --git a/package.json b/package.json index 0ea4bddd..71dd1589 100644 --- a/package.json +++ b/package.json @@ -58,18 +58,18 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.31.1", - "@sentry/core": "7.31.1", - "@sentry/node": "7.31.1", - "@sentry/types": "7.31.1", - "@sentry/utils": "7.31.1", + "@sentry/browser": "7.35.0", + "@sentry/core": "7.35.0", + "@sentry/node": "7.35.0", + "@sentry/types": "7.35.0", + "@sentry/utils": "7.35.0", "deepmerge": "4.2.2", "tslib": "^2.3.1" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.31.1", - "@sentry-internal/typescript": "7.31.1", - "@sentry/tracing": "7.31.1", + "@sentry-internal/eslint-config-sdk": "7.35.0", + "@sentry-internal/typescript": "7.35.0", + "@sentry/tracing": "7.35.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", @@ -107,4 +107,4 @@ "node": "18.12.1", "yarn": "1.22.17" } -} +} \ No newline at end of file diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 6d6f69f2..3023956b 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_31_1: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_35_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index a2490b8c..851e37e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -129,13 +129,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.31.1": - version "7.31.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.31.1.tgz#4473f01a7ef9c0facc5326893ca350d85da21041" - integrity sha512-RGgBa+sF4W7z8emW+4+r8xgVQtpSqfYSJMmU9wVe/UfIERNLnpj00pK4Vg4Bxbxiwf9TnXG/MyN3qyfJqqUpQw== +"@sentry-internal/eslint-config-sdk@7.35.0": + version "7.35.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.35.0.tgz#c3922f9585cfb4faa7b42f49e2f754b97726861d" + integrity sha512-F1Y3mTw46yu5xOKccgxezdrin3uJicULt6eVsV1xt9el/d0kOrXgli8dwOZrgm/cy1aYCGubVrw6IX7g/gucFA== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.31.1" - "@sentry-internal/typescript" "7.31.1" + "@sentry-internal/eslint-plugin-sdk" "7.35.0" + "@sentry-internal/typescript" "7.35.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -144,81 +144,81 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.31.1": - version "7.31.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.31.1.tgz#d08b96a7d892d83c6644aa136d33f63e523ead51" - integrity sha512-nXoDrgpJiRvKr2DIm556XE0MwLUM5LNatfBVzmJgOd57b2kCh2MamYCZBlqjmLvJ3cB/nYlG9xK4CKBPynXxcQ== +"@sentry-internal/eslint-plugin-sdk@7.35.0": + version "7.35.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.35.0.tgz#03bab00364e2cf105a0c8037528186966605d89d" + integrity sha512-33E2jhzFzB4mE0W42y5l6P8FvCH9BMl8VCcLAyuthTqGpT9MAxd3pJI3Xhpq9zUGP291OFHEP1doSTruvlezwA== dependencies: requireindex "~1.1.0" -"@sentry-internal/typescript@7.31.1": - version "7.31.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.31.1.tgz#efba3403d7539d4b106cac867f02cae330910af1" - integrity sha512-nYuLczcPd4PtKjfgdDMEGAczREBTtUTr1hjMZSafCMY4FUwdns9VKu4Eb13nrrytmF2zyqcCg4pPAXRuaeUAbA== +"@sentry-internal/typescript@7.35.0": + version "7.35.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.35.0.tgz#fdd17f08ccd4cb81e3c4343929ba90a9164bd67a" + integrity sha512-j1xgTlFwV6MUeBoHpt3u+fGEscbPwiA9nDU+vJJCQ8UY0V6/8yanA1S/UcQ0OZv9BjsfFRMRrJyDYZwwpMSOhA== -"@sentry/browser@7.31.1": - version "7.31.1" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.31.1.tgz#ac42ef5994d0e983e4c44c35b17013a0080c6527" - integrity sha512-Rg9F61S1tz1Dv3iUyyGP26bxoi7WJAG2+f2fBbSmFuJ+JTH4Jvu2/F1bBig8Dz01ejzVhbNSUUCfoDhSvksIsQ== +"@sentry/browser@7.35.0": + version "7.35.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.35.0.tgz#fdc5f25706acfb49c2635e2cad9eccf997991e15" + integrity sha512-2uoBNVsO26aa+Ln9h0K2MklDg6OAt4S0upZcYF9EoPf3ryUNmv0GCX8MG0kQ7+WQfO/jrlKv9zJggyYWGutSZQ== dependencies: - "@sentry/core" "7.31.1" - "@sentry/replay" "7.31.1" - "@sentry/types" "7.31.1" - "@sentry/utils" "7.31.1" + "@sentry/core" "7.35.0" + "@sentry/replay" "7.35.0" + "@sentry/types" "7.35.0" + "@sentry/utils" "7.35.0" tslib "^1.9.3" -"@sentry/core@7.31.1": - version "7.31.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.31.1.tgz#8c48e9c6a24b612eb7f757fdf246ed6b22c26b3b" - integrity sha512-quaNU6z8jabmatBTDi28Wpff2yzfWIp/IU4bbi2QOtEiCNT+TQJXqlRTRMu9xLrX7YzyKCL5X2gbit/85lyWUg== +"@sentry/core@7.35.0": + version "7.35.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.35.0.tgz#2d6d3ebb3224bd3a1321da3afa4a7e2900b9bb1a" + integrity sha512-j+UJaWDUyLCWOTKMrDFivy/rH5QuSvPK9TsOmYOIFctSKfp+e9Ap0cPRPXNObwim2YTpN4wpl7TqDGDANTKhuQ== dependencies: - "@sentry/types" "7.31.1" - "@sentry/utils" "7.31.1" + "@sentry/types" "7.35.0" + "@sentry/utils" "7.35.0" tslib "^1.9.3" -"@sentry/node@7.31.1": - version "7.31.1" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.31.1.tgz#cba1eaa5664fc7e6dc07bb5a378f7dbe42f63457" - integrity sha512-4VzfOU1YHeoGkBQmkVXlXoXITf+1NkZEREKhdzgpVAkVjb2Tk3sMoFov4wOKWnNTTj4ka50xyaw/ZmqApgQ4Pw== +"@sentry/node@7.35.0": + version "7.35.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.35.0.tgz#5ba48d4c4271c0304f65f0a94d429bfea49e01c2" + integrity sha512-uenomjlwSk1zX4gyNV6DdJFQXgDzzdLUcTCFWoO2D3sDqCGiJO6fmRXX+kVVanYcRXfKg14ko5uelfCj6pq9BQ== dependencies: - "@sentry/core" "7.31.1" - "@sentry/types" "7.31.1" - "@sentry/utils" "7.31.1" + "@sentry/core" "7.35.0" + "@sentry/types" "7.35.0" + "@sentry/utils" "7.35.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/replay@7.31.1": - version "7.31.1" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.31.1.tgz#453ad85fc2f14e4d203d3a7e0bf790877f697964" - integrity sha512-sLArvwZn6IwA/bASctyhxN7LhdCXJvMmyTynRfmk7pzuNzBMc5CNlHeIsDpHrfQuH53IKicvl6cHnHyclu5DSA== +"@sentry/replay@7.35.0": + version "7.35.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.35.0.tgz#7f55e86a662a0e35a323152895185cd0527b3bcd" + integrity sha512-msD76vT4yc5JvxcCVk21YkH8BP9unJ6xRmtCyaCHi7bDsfdu7RcQD+jIAOyS0534uHQLn6BZ2wAW8O4mpTk+7g== dependencies: - "@sentry/core" "7.31.1" - "@sentry/types" "7.31.1" - "@sentry/utils" "7.31.1" + "@sentry/core" "7.35.0" + "@sentry/types" "7.35.0" + "@sentry/utils" "7.35.0" -"@sentry/tracing@7.31.1": - version "7.31.1" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.31.1.tgz#f3bf8ca3aa9ddc15c282425df8043be978baadb4" - integrity sha512-kW6vNwddp2Ycq2JfTzveUEIRF9YQwvl7L6BBoOZt9oVnYlsPipEeyU2Q277LatHldr8hDo2tbz/vz2BQjO5GSw== +"@sentry/tracing@7.35.0": + version "7.35.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.35.0.tgz#5d579325042eebb6bb41a739384ec46d2af96438" + integrity sha512-+mXydQjsoX1Lyjil1IR51hVKsm6vYYCYaKZXo/BzUsjKS0INK1GsfanqHzu2So9bBS5dPLo78lq5YuFsIsAAkw== dependencies: - "@sentry/core" "7.31.1" - "@sentry/types" "7.31.1" - "@sentry/utils" "7.31.1" + "@sentry/core" "7.35.0" + "@sentry/types" "7.35.0" + "@sentry/utils" "7.35.0" tslib "^1.9.3" -"@sentry/types@7.31.1": - version "7.31.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.31.1.tgz#920fc10b289ac1f99f277033b4d26625028a1f9f" - integrity sha512-1uzr2l0AxEnxUX/S0EdmXUQ15/kDsam8Nbdw4Gai8SU764XwQgA/TTjoewVP597CDI/AHKan67Y630/Ylmkx9w== +"@sentry/types@7.35.0": + version "7.35.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.35.0.tgz#08bd28b03dcecdb52928c604da9b2160702926b5" + integrity sha512-gy1PhwYvER/F80N+ZI06PjMk55xAZ4P+r3jomsMnOXQBWzx2VEEpc2fS/3B21wymxSl+mjh+5sUlk/JpxxOQvQ== -"@sentry/utils@7.31.1": - version "7.31.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.31.1.tgz#bdc988de603318a30ff247d5702c2f9ac81255cb" - integrity sha512-ZsIPq29aNdP9q3R7qIzJhZ9WW+4DzE9g5SfGwx3UjTIxoRRBfdUJUbf7S+LKEdvCkKbyoDt6FLt5MiSJV43xBA== +"@sentry/utils@7.35.0": + version "7.35.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.35.0.tgz#e139e2edc0a11c3b7ff429159412782e9ae0a0f3" + integrity sha512-xB/uVNXrfSwQj5fZsYOHr70ORq9qNT+9FAoUGffAQUyVjRhXG27KxsstK1Rv2yt+FBCHY06e3vE4K9B4zwSe7Q== dependencies: - "@sentry/types" "7.31.1" + "@sentry/types" "7.35.0" tslib "^1.9.3" "@sindresorhus/is@^0.14.0": From 00b10000376905cb30ebf370bf1f937ad2f3e9eb Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 2 Feb 2023 18:43:29 +0100 Subject: [PATCH 074/239] chore: Update CHANGELOG for 4.3.0 release (#635) --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78e2ae15..fb304366 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## Unreleased +## 4.3.0 + +- feat: Update Sentry SDKs to 7.35.0 (#631) +- fix: Replay should be re-exported (#633) + ## 4.2.0 - feat: Update JavaScript SDKs to 7.30.0 and add support for Replay in renderers (#618) From 0ef7ad99011f08481194ea99521d2b96738b8f32 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 8 Feb 2023 12:56:38 +0100 Subject: [PATCH 075/239] test: New Electron versions (#638) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 9be33b05..b38e56b9 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.11","21.4.1","22.2.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.11","21.4.1","22.2.0","23.0.0"] From 484c1fabe4b63e8a481c64b094987892ffba9923 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 11 Feb 2023 13:58:48 +0100 Subject: [PATCH 076/239] test: New Electron versions (#639) Co-authored-by: timfish <timfish@users.noreply.github.com> --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index b38e56b9..75cc5e0a 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.11","21.4.1","22.2.0","23.0.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.1","22.2.1","23.0.0"] From ad651fca23f1918dff3358cf947bd22a0e42e6ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:16:55 +0100 Subject: [PATCH 077/239] chore(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 (#634) --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 851e37e1..daac3dd2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2000,9 +2000,9 @@ http-assert@^1.3.0: http-errors "~1.8.0" http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-errors@2.0.0: version "2.0.0" From 5be18e5212d09912a506ca9f01107de2bf043f94 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:36:37 +0100 Subject: [PATCH 078/239] test: Update Sentry SDKs to 7.37.1 (#636) Co-authored-by: timfish <timfish@users.noreply.github.com> --- package.json | 16 +++--- src/renderer/sdk.ts | 2 +- yarn.lock | 116 ++++++++++++++++++++++---------------------- 3 files changed, 67 insertions(+), 67 deletions(-) diff --git a/package.json b/package.json index 71dd1589..0dbd3c8d 100644 --- a/package.json +++ b/package.json @@ -58,18 +58,18 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.35.0", - "@sentry/core": "7.35.0", - "@sentry/node": "7.35.0", - "@sentry/types": "7.35.0", - "@sentry/utils": "7.35.0", + "@sentry/browser": "7.37.1", + "@sentry/core": "7.37.1", + "@sentry/node": "7.37.1", + "@sentry/types": "7.37.1", + "@sentry/utils": "7.37.1", "deepmerge": "4.2.2", "tslib": "^2.3.1" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.35.0", - "@sentry-internal/typescript": "7.35.0", - "@sentry/tracing": "7.35.0", + "@sentry-internal/eslint-config-sdk": "7.37.1", + "@sentry-internal/typescript": "7.37.1", + "@sentry/tracing": "7.37.1", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 3023956b..ff946a3b 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_35_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_37_1: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index daac3dd2..91caff3c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -129,13 +129,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.35.0": - version "7.35.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.35.0.tgz#c3922f9585cfb4faa7b42f49e2f754b97726861d" - integrity sha512-F1Y3mTw46yu5xOKccgxezdrin3uJicULt6eVsV1xt9el/d0kOrXgli8dwOZrgm/cy1aYCGubVrw6IX7g/gucFA== +"@sentry-internal/eslint-config-sdk@7.37.1": + version "7.37.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.37.1.tgz#1dafb9edbe7df94fb791c95aff80b6437f60a36a" + integrity sha512-jdkt6DG0+IwctiH8J1be8ZyQlgDyzkeJvhEZv8D/ZdCM5tqjvUqkbqS1yVTfwV+5OfjIMnQ4I9D/5Fnt8V14Rg== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.35.0" - "@sentry-internal/typescript" "7.35.0" + "@sentry-internal/eslint-plugin-sdk" "7.37.1" + "@sentry-internal/typescript" "7.37.1" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -144,81 +144,81 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.35.0": - version "7.35.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.35.0.tgz#03bab00364e2cf105a0c8037528186966605d89d" - integrity sha512-33E2jhzFzB4mE0W42y5l6P8FvCH9BMl8VCcLAyuthTqGpT9MAxd3pJI3Xhpq9zUGP291OFHEP1doSTruvlezwA== +"@sentry-internal/eslint-plugin-sdk@7.37.1": + version "7.37.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.37.1.tgz#9f6da2b0c711edeca628cb76eedf5f4776863dd2" + integrity sha512-SENuFIWVzb7xDEOdQTV8/i4EUb+s9ro6QWM/etXALQGE/Cvdors4YzTzfm3dJzV0Uk5DF3IPwdwQvimEeOsXHA== dependencies: requireindex "~1.1.0" -"@sentry-internal/typescript@7.35.0": - version "7.35.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.35.0.tgz#fdd17f08ccd4cb81e3c4343929ba90a9164bd67a" - integrity sha512-j1xgTlFwV6MUeBoHpt3u+fGEscbPwiA9nDU+vJJCQ8UY0V6/8yanA1S/UcQ0OZv9BjsfFRMRrJyDYZwwpMSOhA== +"@sentry-internal/typescript@7.37.1": + version "7.37.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.37.1.tgz#69ab51dc699eef56478da115789999dedb762e07" + integrity sha512-DEgaC5noRaY7WHM2XKEDRKbO01LtI4TVYxdbEgZQUmQX7FV1Ql27otHtEGiMBKe8JqoRHYm+Q3J9ZRtblMDERQ== -"@sentry/browser@7.35.0": - version "7.35.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.35.0.tgz#fdc5f25706acfb49c2635e2cad9eccf997991e15" - integrity sha512-2uoBNVsO26aa+Ln9h0K2MklDg6OAt4S0upZcYF9EoPf3ryUNmv0GCX8MG0kQ7+WQfO/jrlKv9zJggyYWGutSZQ== +"@sentry/browser@7.37.1": + version "7.37.1" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.37.1.tgz#d452ebed7f974f20872d34744e67d856ab54a41b" + integrity sha512-MfVbKzEVHKVH6ZyMCKLtPXvMtRCvxqQzrnK735sYW6EyMpcMYhukBU0pq7ws1E/KaCZjAJi1wDx2nqf2yPIVdQ== dependencies: - "@sentry/core" "7.35.0" - "@sentry/replay" "7.35.0" - "@sentry/types" "7.35.0" - "@sentry/utils" "7.35.0" + "@sentry/core" "7.37.1" + "@sentry/replay" "7.37.1" + "@sentry/types" "7.37.1" + "@sentry/utils" "7.37.1" tslib "^1.9.3" -"@sentry/core@7.35.0": - version "7.35.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.35.0.tgz#2d6d3ebb3224bd3a1321da3afa4a7e2900b9bb1a" - integrity sha512-j+UJaWDUyLCWOTKMrDFivy/rH5QuSvPK9TsOmYOIFctSKfp+e9Ap0cPRPXNObwim2YTpN4wpl7TqDGDANTKhuQ== +"@sentry/core@7.37.1": + version "7.37.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.37.1.tgz#6d8d151b3d6ae0d6f81c7f4da92cd2e7cb5bf1fa" + integrity sha512-eS5hoFDjAOl7POZg6K77J0oiypiqR1782oVSB49UkjK+D8tCZzZ5PxPMv0b/O0310p7x4oZ3WGRJaWEN3vY4KQ== dependencies: - "@sentry/types" "7.35.0" - "@sentry/utils" "7.35.0" + "@sentry/types" "7.37.1" + "@sentry/utils" "7.37.1" tslib "^1.9.3" -"@sentry/node@7.35.0": - version "7.35.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.35.0.tgz#5ba48d4c4271c0304f65f0a94d429bfea49e01c2" - integrity sha512-uenomjlwSk1zX4gyNV6DdJFQXgDzzdLUcTCFWoO2D3sDqCGiJO6fmRXX+kVVanYcRXfKg14ko5uelfCj6pq9BQ== +"@sentry/node@7.37.1": + version "7.37.1" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.37.1.tgz#c234e8711090b7532358bb1d6ab3fcca75356e98" + integrity sha512-nGerngIo5JwinJgl7m0SaL/xI+YRBlhb53gbkuLSAAcnoitBFzbp7LjywsqYFTWuWDIyk7O2t124GNxtolBAgA== dependencies: - "@sentry/core" "7.35.0" - "@sentry/types" "7.35.0" - "@sentry/utils" "7.35.0" + "@sentry/core" "7.37.1" + "@sentry/types" "7.37.1" + "@sentry/utils" "7.37.1" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/replay@7.35.0": - version "7.35.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.35.0.tgz#7f55e86a662a0e35a323152895185cd0527b3bcd" - integrity sha512-msD76vT4yc5JvxcCVk21YkH8BP9unJ6xRmtCyaCHi7bDsfdu7RcQD+jIAOyS0534uHQLn6BZ2wAW8O4mpTk+7g== +"@sentry/replay@7.37.1": + version "7.37.1" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.37.1.tgz#8ab4588b28baa07e35c417d3ffc6aaf934c58c45" + integrity sha512-3sHOE/oPirdvJbOn0IA/wpds12Sm2WaEtiAeC0+5Gg5mxQzFBLRrsA1Mz/ifzPGwr+ETn3sCyPCnd9b3PWaWMQ== dependencies: - "@sentry/core" "7.35.0" - "@sentry/types" "7.35.0" - "@sentry/utils" "7.35.0" + "@sentry/core" "7.37.1" + "@sentry/types" "7.37.1" + "@sentry/utils" "7.37.1" -"@sentry/tracing@7.35.0": - version "7.35.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.35.0.tgz#5d579325042eebb6bb41a739384ec46d2af96438" - integrity sha512-+mXydQjsoX1Lyjil1IR51hVKsm6vYYCYaKZXo/BzUsjKS0INK1GsfanqHzu2So9bBS5dPLo78lq5YuFsIsAAkw== +"@sentry/tracing@7.37.1": + version "7.37.1" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.37.1.tgz#f5db7990f09be8d3c6b621b3718c268fff163ba0" + integrity sha512-3mQG2XtMCGqDkgfzhKpRJAIfRaokNAOF8WafgAmFmZQwEDsRAFjZ3pLoO+KiBUeQE5E5et7HyWBOl9rqHCkWnQ== dependencies: - "@sentry/core" "7.35.0" - "@sentry/types" "7.35.0" - "@sentry/utils" "7.35.0" + "@sentry/core" "7.37.1" + "@sentry/types" "7.37.1" + "@sentry/utils" "7.37.1" tslib "^1.9.3" -"@sentry/types@7.35.0": - version "7.35.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.35.0.tgz#08bd28b03dcecdb52928c604da9b2160702926b5" - integrity sha512-gy1PhwYvER/F80N+ZI06PjMk55xAZ4P+r3jomsMnOXQBWzx2VEEpc2fS/3B21wymxSl+mjh+5sUlk/JpxxOQvQ== +"@sentry/types@7.37.1": + version "7.37.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.37.1.tgz#269da7da39c1a5243bf5f9a35370291b5cc205bb" + integrity sha512-c2HWyWSgVA0V4+DSW2qVb0yjftrb1X/q2CzCom+ayjGHO72qyWC+9Tc+7ZfotU1mapRjqUWBgkXkbGmao8N8Ug== -"@sentry/utils@7.35.0": - version "7.35.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.35.0.tgz#e139e2edc0a11c3b7ff429159412782e9ae0a0f3" - integrity sha512-xB/uVNXrfSwQj5fZsYOHr70ORq9qNT+9FAoUGffAQUyVjRhXG27KxsstK1Rv2yt+FBCHY06e3vE4K9B4zwSe7Q== +"@sentry/utils@7.37.1": + version "7.37.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.37.1.tgz#7695d6e30d6178723f3fa446a9553893bca85e96" + integrity sha512-/4mJOyDsfysx+5TXyJgSI+Ihw2/0EVJbrHjCyXPDXW5ADwbtU8VdBZ0unOmF0hk4QfftqwM9cyEu3BN4iBJsEA== dependencies: - "@sentry/types" "7.35.0" + "@sentry/types" "7.37.1" tslib "^1.9.3" "@sindresorhus/is@^0.14.0": From f979333f2013e77d8101d5217fcf59a4a18efc45 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 13 Feb 2023 12:41:06 +0100 Subject: [PATCH 079/239] chore: Update dependencies (#640) --- examples/electron-forge-webpack/package.json | 2 +- examples/electron-forge/package.json | 2 +- .../electron-react-boilerplate/package.json | 2 +- examples/electron-vite/package.json | 2 +- package.json | 28 +- .../other/error-entry-point/package.json | 2 +- yarn.lock | 714 ++++++++---------- 7 files changed, 350 insertions(+), 402 deletions(-) diff --git a/examples/electron-forge-webpack/package.json b/examples/electron-forge-webpack/package.json index 86688199..effe250b 100644 --- a/examples/electron-forge-webpack/package.json +++ b/examples/electron-forge-webpack/package.json @@ -31,7 +31,7 @@ "@electron-forge/cli": "6.0.0-beta.63", "@electron-forge/plugin-webpack": "6.0.0-beta.63", "@vercel/webpack-asset-relocator-loader": "1.6.0", - "electron": "15.2.0", + "electron": "23.0.0", "node-loader": "^2.0.0" }, "dependencies": { diff --git a/examples/electron-forge/package.json b/examples/electron-forge/package.json index 93f541df..25f63605 100644 --- a/examples/electron-forge/package.json +++ b/examples/electron-forge/package.json @@ -11,6 +11,6 @@ }, "devDependencies": { "@electron-forge/cli": "6.0.0-beta.63", - "electron": "13.1.9" + "electron": "23.0.0" } } \ No newline at end of file diff --git a/examples/electron-react-boilerplate/package.json b/examples/electron-react-boilerplate/package.json index b6787de6..c6d46bee 100644 --- a/examples/electron-react-boilerplate/package.json +++ b/examples/electron-react-boilerplate/package.json @@ -28,7 +28,7 @@ "css-loader": "^6.5.1", "css-minimizer-webpack-plugin": "^3.3.1", "detect-port": "^1.3.0", - "electron": "^16.0.5", + "electron": "^23.0.0", "electron-builder": "22.13.1", "electron-devtools-installer": "^3.2.0", "electron-notarize": "^1.1.1", diff --git a/examples/electron-vite/package.json b/examples/electron-vite/package.json index 23af13c4..6051ae5d 100644 --- a/examples/electron-vite/package.json +++ b/examples/electron-vite/package.json @@ -16,6 +16,6 @@ "devDependencies": { "@vitejs/plugin-vue": "^3.1.2", "vite": "^3.1.8", - "electron": "13.1.9" + "electron": "23.0.0" } } diff --git a/package.json b/package.json index 0dbd3c8d..670a4b89 100644 --- a/package.json +++ b/package.json @@ -63,8 +63,8 @@ "@sentry/node": "7.37.1", "@sentry/types": "7.37.1", "@sentry/utils": "7.37.1", - "deepmerge": "4.2.2", - "tslib": "^2.3.1" + "deepmerge": "4.3.0", + "tslib": "^2.5.0" }, "devDependencies": { "@sentry-internal/eslint-config-sdk": "7.37.1", @@ -80,31 +80,31 @@ "@types/mocha": "^9.0.0", "@types/tmp": "^0.2.2", "busboy": "^0.3.1", - "chai": "^4.3.4", + "chai": "^4.3.7", "chai-as-promised": "^7.1.1", "chai-subset": "^1.6.0", "cross-env": "^7.0.3", - "electron": "19.1.8", + "electron": "23.0.0", "electron-latest-versions": "^0.2.0", - "electron-mocha": "^11.0.0", + "electron-mocha": "^11.0.2", "eslint": "7.32.0", "extract-zip": "^2.0.1", - "koa": "^2.13.4", + "koa": "^2.14.1", "koa-bodyparser": "^4.3.0", - "koa-tree-router": "^0.8.0", + "koa-tree-router": "^0.12.1", "latest-version": "^7.0.0", - "mocha": "^9.1.3", + "mocha": "^10.2.0", "npm-run-all": "^4.1.5", - "prettier": "^2.4.1", + "prettier": "^2.8.4", "rimraf": "^3.0.2", "tmp": "^0.2.1", - "ts-node": "^10.4.0", - "typescript": "^4.4.4", + "ts-node": "^10.9.1", + "typescript": "^4.9.5", "xvfb-maybe": "^0.2.1", - "yaml": "^1.10.2" + "yaml": "^2.2.1" }, "volta": { "node": "18.12.1", - "yarn": "1.22.17" + "yarn": "1.22.19" } -} \ No newline at end of file +} diff --git a/test/e2e/test-apps/other/error-entry-point/package.json b/test/e2e/test-apps/other/error-entry-point/package.json index 84d73ced..29e5af22 100644 --- a/test/e2e/test-apps/other/error-entry-point/package.json +++ b/test/e2e/test-apps/other/error-entry-point/package.json @@ -10,6 +10,6 @@ }, "devDependencies": { "vite": "^2.7.10", - "electron": "13.1.9" + "electron": "23.0.0" } } diff --git a/yarn.lock b/yarn.lock index 91caff3c..dbd5ecb6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30,21 +30,20 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@electron/get@^1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.14.1.tgz#16ba75f02dffb74c23965e72d617adc721d27f40" - integrity sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw== +"@electron/get@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e" + integrity sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g== dependencies: debug "^4.1.1" env-paths "^2.2.0" fs-extra "^8.1.0" - got "^9.6.0" + got "^11.8.5" progress "^2.0.3" semver "^6.2.0" sumchecker "^3.0.1" optionalDependencies: global-agent "^3.0.0" - global-tunnel-ng "^2.7.1" "@eslint/eslintrc@^0.4.3": version "0.4.3" @@ -221,22 +220,22 @@ "@sentry/types" "7.37.1" tslib "^1.9.3" -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== "@sindresorhus/is@^5.2.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.3.0.tgz#0ec9264cf54a527671d990eb874e030b55b70dcc" integrity sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw== -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== dependencies: - defer-to-connect "^1.0.1" + defer-to-connect "^2.0.0" "@szmarczak/http-timer@^5.0.1": version "5.0.1" @@ -287,6 +286,16 @@ dependencies: "@types/node" "*" +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + "@types/chai-as-promised@^7.1.5": version "7.1.5" resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz#6e016811f6c7a64f2eed823191c3a6955094e255" @@ -328,22 +337,22 @@ "@types/keygrip" "*" "@types/node" "*" -"@types/express-serve-static-core@^4.17.31": - version "4.17.32" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz#93dda387f5516af616d8d3f05f2c4c79d81e1b82" - integrity sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA== +"@types/express-serve-static-core@^4.17.33": + version "4.17.33" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" + integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" "@types/express@*": - version "4.17.15" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.15.tgz#9290e983ec8b054b65a5abccb610411953d417ff" - integrity sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ== + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== dependencies: "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.31" + "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" "@types/serve-static" "*" @@ -359,7 +368,7 @@ resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.3.tgz#ef8e3d1a8d46c387f04ab0f2e8ab8cb0c5078661" integrity sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA== -"@types/http-cache-semantics@^4.0.1": +"@types/http-cache-semantics@*", "@types/http-cache-semantics@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== @@ -384,6 +393,13 @@ resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72" integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw== +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + "@types/koa-bodyparser@^4.3.0": version "4.3.10" resolved "https://registry.yarnpkg.com/@types/koa-bodyparser/-/koa-bodyparser-4.3.10.tgz#02b8d3d57579aa7d491d553f1f4058088bfe127f" @@ -398,7 +414,7 @@ dependencies: "@types/koa" "*" -"@types/koa@*", "@types/koa@^2.0.52", "@types/koa@^2.11.6": +"@types/koa@*", "@types/koa@^2.0.52", "@types/koa@^2.13.4": version "2.13.5" resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.5.tgz#64b3ca4d54e08c0062e89ec666c9f45443b21a61" integrity sha512-HSUOdzKz3by4fnqagwthW/1w/yJspTgppyyalPVbgZf8jQWvdIXcVW5h2DGtw4zYntOaeRGx49r1hxoPWrD4aA== @@ -423,14 +439,14 @@ integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== "@types/node@*": - version "18.11.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" - integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== + version "18.13.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.13.0.tgz#0400d1e6ce87e9d3032c19eb6c58205b0d3f7850" + integrity sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg== "@types/node@^16.11.26": - version "16.18.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.11.tgz#cbb15c12ca7c16c85a72b6bdc4d4b01151bb3cae" - integrity sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA== + version "16.18.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.12.tgz#e3bfea80e31523fde4292a6118f19ffa24fd6f65" + integrity sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw== "@types/qs@*": version "6.9.7" @@ -442,6 +458,13 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== +"@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + "@types/semver@^7.3.12": version "7.3.13" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" @@ -468,14 +491,15 @@ "@types/node" "*" "@typescript-eslint/eslint-plugin@^5.48.0": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.1.tgz#deee67e399f2cb6b4608c935777110e509d8018c" - integrity sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ== + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.51.0.tgz#da3f2819633061ced84bb82c53bba45a6fe9963a" + integrity sha512-wcAwhEWm1RgNd7dxD/o+nnLW8oH+6RK1OGnmbmkj/GGoDPV1WWMVP0FXYQBivKHdwM1pwii3bt//RC62EriIUQ== dependencies: - "@typescript-eslint/scope-manager" "5.48.1" - "@typescript-eslint/type-utils" "5.48.1" - "@typescript-eslint/utils" "5.48.1" + "@typescript-eslint/scope-manager" "5.51.0" + "@typescript-eslint/type-utils" "5.51.0" + "@typescript-eslint/utils" "5.51.0" debug "^4.3.4" + grapheme-splitter "^1.0.4" ignore "^5.2.0" natural-compare-lite "^1.4.0" regexpp "^3.2.0" @@ -483,78 +507,78 @@ tsutils "^3.21.0" "@typescript-eslint/experimental-utils@^5.0.0": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.48.1.tgz#5951c0b7ef4b0838ea95f25d53385de0e366e0b8" - integrity sha512-8OoIZZuOeqsm5cxn2f01qHWtVC3M4iixSsfZXPiQUg4Sl4LiU+b5epcJFwxNfqeoLl+SGncELyi3x99zI6C0ng== + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.51.0.tgz#936124843a9221863f027a08063b737578838bea" + integrity sha512-8/3+ZyBENl2aog1/QB3S39ptkZ2oRhDB+sJt15UWXBE3skgwL1C8BN9RjpOyhTejwR2hVrvqEjcYcNY6qtZ7nw== dependencies: - "@typescript-eslint/utils" "5.48.1" + "@typescript-eslint/utils" "5.51.0" "@typescript-eslint/parser@^5.48.0": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.1.tgz#d0125792dab7e232035434ab8ef0658154db2f10" - integrity sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA== + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.51.0.tgz#2d74626652096d966ef107f44b9479f02f51f271" + integrity sha512-fEV0R9gGmfpDeRzJXn+fGQKcl0inIeYobmmUWijZh9zA7bxJ8clPhV9up2ZQzATxAiFAECqPQyMDB4o4B81AaA== dependencies: - "@typescript-eslint/scope-manager" "5.48.1" - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/typescript-estree" "5.48.1" + "@typescript-eslint/scope-manager" "5.51.0" + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/typescript-estree" "5.51.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.1.tgz#39c71e4de639f5fe08b988005beaaf6d79f9d64d" - integrity sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ== +"@typescript-eslint/scope-manager@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.51.0.tgz#ad3e3c2ecf762d9a4196c0fbfe19b142ac498990" + integrity sha512-gNpxRdlx5qw3yaHA0SFuTjW4rxeYhpHxt491PEcKF8Z6zpq0kMhe0Tolxt0qjlojS+/wArSDlj/LtE69xUJphQ== dependencies: - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/visitor-keys" "5.48.1" + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/visitor-keys" "5.51.0" -"@typescript-eslint/type-utils@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.1.tgz#5d94ac0c269a81a91ad77c03407cea2caf481412" - integrity sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ== +"@typescript-eslint/type-utils@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.51.0.tgz#7af48005531700b62a20963501d47dfb27095988" + integrity sha512-QHC5KKyfV8sNSyHqfNa0UbTbJ6caB8uhcx2hYcWVvJAZYJRBo5HyyZfzMdRx8nvS+GyMg56fugMzzWnojREuQQ== dependencies: - "@typescript-eslint/typescript-estree" "5.48.1" - "@typescript-eslint/utils" "5.48.1" + "@typescript-eslint/typescript-estree" "5.51.0" + "@typescript-eslint/utils" "5.51.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.1.tgz#efd1913a9aaf67caf8a6e6779fd53e14e8587e14" - integrity sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg== +"@typescript-eslint/types@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.51.0.tgz#e7c1622f46c7eea7e12bbf1edfb496d4dec37c90" + integrity sha512-SqOn0ANn/v6hFn0kjvLwiDi4AzR++CBZz0NV5AnusT2/3y32jdc0G4woXPWHCumWtUXZKPAS27/9vziSsC9jnw== -"@typescript-eslint/typescript-estree@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz#9efa8ee2aa471c6ab62e649f6e64d8d121bc2056" - integrity sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA== +"@typescript-eslint/typescript-estree@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.51.0.tgz#0ec8170d7247a892c2b21845b06c11eb0718f8de" + integrity sha512-TSkNupHvNRkoH9FMA3w7TazVFcBPveAAmb7Sz+kArY6sLT86PA5Vx80cKlYmd8m3Ha2SwofM1KwraF24lM9FvA== dependencies: - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/visitor-keys" "5.48.1" + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/visitor-keys" "5.51.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.1.tgz#20f2f4e88e9e2a0961cbebcb47a1f0f7da7ba7f9" - integrity sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA== +"@typescript-eslint/utils@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.51.0.tgz#074f4fabd5b12afe9c8aa6fdee881c050f8b4d47" + integrity sha512-76qs+5KWcaatmwtwsDJvBk4H76RJQBFe+Gext0EfJdC3Vd2kpY2Pf//OHHzHp84Ciw0/rYoGTDnIAr3uWhhJYw== dependencies: "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.48.1" - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/typescript-estree" "5.48.1" + "@typescript-eslint/scope-manager" "5.51.0" + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/typescript-estree" "5.51.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz#79fd4fb9996023ef86849bf6f904f33eb6c8fccb" - integrity sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA== +"@typescript-eslint/visitor-keys@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.51.0.tgz#c0147dd9a36c0de758aaebd5b48cae1ec59eba87" + integrity sha512-Oh2+eTdjHjOFjKA27sxESlA87YPSOJafGCR0md5oeMdh1ZcCfAGCIOL216uTBAkAIptvLIfKQhl7lHxMJet4GQ== dependencies: - "@typescript-eslint/types" "5.48.1" + "@typescript-eslint/types" "5.51.0" eslint-visitor-keys "^3.3.0" "@ungap/promise-all-settled@1.1.2": @@ -586,9 +610,9 @@ acorn@^7.4.0: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.4.1: - version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== agent-base@6: version "6.0.2" @@ -671,7 +695,7 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-includes@^3.1.4: +array-includes@^3.1.6: version "3.1.6" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== @@ -687,7 +711,7 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.flat@^1.2.5: +array.prototype.flat@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== @@ -697,6 +721,16 @@ array.prototype.flat@^1.2.5: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" @@ -740,6 +774,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -757,11 +798,6 @@ buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - busboy@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" @@ -782,36 +818,41 @@ cache-content-type@^1.0.0: mime-types "^2.1.18" ylru "^1.2.0" +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + cacheable-lookup@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== cacheable-request@^10.2.1: - version "10.2.5" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.5.tgz#7bf5fbdb4f51dc2537fb5f02a3f8a5aefd2d0f36" - integrity sha512-5RwYYCfzjNPsyJxb/QpaM0bfzx+kw5/YpDhZPm9oMIDntHFQ9YXeyV47ZvzlTE0XrrrbyO2UITJH4GF9eRLdXQ== + version "10.2.7" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.7.tgz#8bb8da66338f321b3cbbc34a71ac231178171bcc" + integrity sha512-I4SA6mKgDxcxVbSt/UmIkb9Ny8qSkg6ReBHtAAXnZHk7KOSx5g3DTiAOaYzcHCs6oOdHn+bip9T48E6tMvK9hw== dependencies: "@types/http-cache-semantics" "^4.0.1" get-stream "^6.0.1" - http-cache-semantics "^4.1.0" + http-cache-semantics "^4.1.1" keyv "^4.5.2" mimic-response "^4.0.0" normalize-url "^8.0.0" responselike "^3.0.0" -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== dependencies: clone-response "^1.0.2" get-stream "^5.1.0" http-cache-semantics "^4.0.0" - keyv "^3.0.0" + keyv "^4.0.0" lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" + normalize-url "^6.0.1" + responselike "^2.0.0" call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" @@ -843,7 +884,7 @@ chai-subset@^1.6.0: resolved "https://registry.yarnpkg.com/chai-subset/-/chai-subset-1.6.0.tgz#a5d0ca14e329a79596ed70058b6646bd6988cfe9" integrity sha512-K3d+KmqdS5XKW5DWPd5sgNffL3uxdDe+6GdnJh3AYPhwnBGRY5urfvfcbRtWIvvpz+KxkL9FeBB6MZewLUNwug== -chai@^4.3.4: +chai@^4.3.7: version "4.3.7" resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== @@ -965,16 +1006,6 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concat-stream@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - config-chain@^1.1.11: version "1.1.13" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" @@ -991,9 +1022,9 @@ content-disposition@~0.5.2: safe-buffer "5.2.1" content-type@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== cookie@^0.4.1: version "0.4.2" @@ -1013,11 +1044,6 @@ copy-to@^2.0.1: resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" integrity sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w== -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -1050,7 +1076,7 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1064,7 +1090,7 @@ debug@4.3.3: dependencies: ms "2.1.2" -debug@^2.2.0, debug@^2.6.9: +debug@^2.2.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -1083,13 +1109,6 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -1119,25 +1138,20 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +deepmerge@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" + integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== -defer-to-connect@^2.0.1: +defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: has-property-descriptors "^1.0.0" object-keys "^1.1.1" @@ -1210,11 +1224,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -duplexer3@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" - integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -1227,7 +1236,7 @@ electron-latest-versions@^0.2.0: dependencies: semver "^7.3.8" -electron-mocha@^11.0.0: +electron-mocha@^11.0.2: version "11.0.2" resolved "https://registry.yarnpkg.com/electron-mocha/-/electron-mocha-11.0.2.tgz#f8fd6c3af539f3c7a9aed4aba29cf12c3f408810" integrity sha512-fOk+zUgSIsmL2cuIrd7IlK4eRhGVi1PYIB3QvqiBO+6f6AP8XLkYkT9eORlL2xwaS3yAAk02Y+4OTuhtqHPkEQ== @@ -1246,14 +1255,14 @@ electron-window@^0.8.0: dependencies: is-electron-renderer "^2.0.0" -electron@19.1.8: - version "19.1.8" - resolved "https://registry.yarnpkg.com/electron/-/electron-19.1.8.tgz#3ce19c270ca86d05bbf0df5ceeaea2d23edc7083" - integrity sha512-UfPQdFjgKI0xCm1V5sV3iAVOs0kCwAE91xWzV5tI7ij14yOkxTdXp9BqTzFaSbQYLYxn6q1BUUe1nlzjJjzAnw== +electron@23.0.0: + version "23.0.0" + resolved "https://registry.yarnpkg.com/electron/-/electron-23.0.0.tgz#4da457d7585149bb1a98ea8bddb286e72322a309" + integrity sha512-S6hVtTAjauMiiWP9sBVR5RpcUC464cNZ06I2EMUjeZBq+KooS6tLmNsfw0zLpAXDp1qosjlBP3v71NTZ3gd9iA== dependencies: - "@electron/get" "^1.14.1" + "@electron/get" "^2.0.0" "@types/node" "^16.11.26" - extract-zip "^1.0.3" + extract-zip "^2.0.1" emoji-regex@^8.0.0: version "8.0.0" @@ -1387,15 +1396,16 @@ eslint-config-prettier@^6.11.0: dependencies: get-stdin "^6.0.0" -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== +eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== dependencies: debug "^3.2.7" - resolve "^1.20.0" + is-core-module "^2.11.0" + resolve "^1.22.1" -eslint-module-utils@^2.7.3: +eslint-module-utils@^2.7.4: version "2.7.4" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== @@ -1412,22 +1422,24 @@ eslint-plugin-deprecation@^1.1.0: tsutils "^3.21.0" eslint-plugin-import@^2.22.0: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + version "2.27.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" has "^1.0.3" - is-core-module "^2.8.1" + is-core-module "^2.11.0" is-glob "^4.0.3" minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" tsconfig-paths "^3.14.1" eslint-plugin-jsdoc@^30.0.3: @@ -1574,16 +1586,6 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -extract-zip@^1.0.3: - version "1.7.0" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" - integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== - dependencies: - concat-stream "^1.6.2" - debug "^2.6.9" - mkdirp "^0.5.4" - yauzl "^2.10.0" - extract-zip@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" @@ -1764,10 +1766,10 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== dependencies: function-bind "^1.1.1" has "^1.0.3" @@ -1778,13 +1780,6 @@ get-stdin@^6.0.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -1848,20 +1843,10 @@ global-agent@^3.0.0: semver "^7.3.2" serialize-error "^7.0.1" -global-tunnel-ng@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz#d03b5102dfde3a69914f5ee7d86761ca35d57d8f" - integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg== - dependencies: - encodeurl "^1.0.2" - lodash "^4.17.10" - npm-conf "^1.1.3" - tunnel "^0.0.6" - globals@^13.6.0, globals@^13.9.0: - version "13.19.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" - integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" @@ -1891,6 +1876,23 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + got@^12.1.0: version "12.5.3" resolved "https://registry.yarnpkg.com/got/-/got-12.5.3.tgz#82bdca2dd61258a02e24d668ea6e7abb70ac3598" @@ -1908,28 +1910,16 @@ got@^12.1.0: p-cancelable "^3.0.0" responselike "^3.0.0" -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - graceful-fs@4.2.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" @@ -1999,7 +1989,7 @@ http-assert@^1.3.0: deep-equal "~1.0.1" http-errors "~1.8.0" -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== @@ -2026,6 +2016,14 @@ http-errors@^1.6.3, http-errors@~1.8.0: statuses ">= 1.5.0 < 2" toidentifier "1.0.1" +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + http2-wrapper@^2.1.10: version "2.2.0" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" @@ -2085,7 +2083,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2096,11 +2094,11 @@ ini@^1.3.4, ini@~1.3.0: integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-slot@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" - integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== dependencies: - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.0" has "^1.0.3" side-channel "^1.0.4" @@ -2145,7 +2143,7 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.8.1, is-core-module@^2.9.0: +is-core-module@^2.11.0, is-core-module@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== @@ -2262,11 +2260,6 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -2297,11 +2290,6 @@ jsdoctypeparser@^9.0.0: resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz#8c97e2fb69315eb274b0f01377eaa5c940bd7b26" integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== - json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" @@ -2362,14 +2350,7 @@ keygrip@~1.1.0: dependencies: tsscmp "1.0.6" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - -keyv@^4.5.2: +keyv@^4.0.0, keyv@^4.5.2: version "4.5.2" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== @@ -2397,15 +2378,15 @@ koa-convert@^2.0.0: co "^4.6.0" koa-compose "^4.1.0" -koa-tree-router@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/koa-tree-router/-/koa-tree-router-0.8.0.tgz#afc595e015925cd2f66d9bf8572520cf31a23a7d" - integrity sha512-kgsTDNXULrYwj1+gkfz4mBRhOEXQDJ8Wd81AkXPrMNWserb9wGNiOk3g9oflqaJy+PrgcCDqeLztt6o9Lbr+Lw== +koa-tree-router@^0.12.1: + version "0.12.1" + resolved "https://registry.yarnpkg.com/koa-tree-router/-/koa-tree-router-0.12.1.tgz#0db942bca4f16c1472fba574c8f1c3fe7765a1ee" + integrity sha512-U/jJoV+rDFYtbaU/X6r2hcNKT7+DZs8HeXONWA7/OSIMk6/cYhoW5P9MPrjg7vHWRrmZOAiFkPoW7vtxvwLWpw== dependencies: - "@types/koa" "^2.11.6" + "@types/koa" "^2.13.4" koa-compose "^4.1.0" -koa@^2.13.4: +koa@^2.14.1: version "2.14.1" resolved "https://registry.yarnpkg.com/koa/-/koa-2.14.1.tgz#defb9589297d8eb1859936e777f3feecfc26925c" integrity sha512-USJFyZgi2l0wDgqkfD27gL4YGno7TfUkcmOe6UOLFOVuN+J7FwnNu4Dydl4CUQzraM1lBAiGed0M9OVJoT0Kqw== @@ -2476,7 +2457,7 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@^4.17.10, lodash@^4.17.20: +lodash@^4.17.20: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2496,11 +2477,6 @@ loupe@^2.3.1: dependencies: get-func-name "^2.0.0" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - lowercase-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" @@ -2570,7 +2546,7 @@ mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.24, mime-types@~2.1.34: dependencies: mime-db "1.52.0" -mimic-response@^1.0.0, mimic-response@^1.0.1: +mimic-response@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== @@ -2592,6 +2568,13 @@ minimatch@4.2.1: dependencies: brace-expansion "^1.1.7" +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -2600,18 +2583,38 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: brace-expansion "^1.1.7" minimist@^1.2.0, minimist@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mkdirp@^0.5.4: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== +mocha@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" + integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== dependencies: - minimist "^1.2.6" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" -mocha@^9.1.1, mocha@^9.1.3: +mocha@^9.1.1: version "9.2.2" resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== @@ -2661,6 +2664,11 @@ nanoid@3.3.1: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -2696,24 +2704,16 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== normalize-url@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== -npm-conf@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" - integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== - dependencies: - config-chain "^1.1.11" - pify "^3.0.0" - npm-run-all@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" @@ -2730,9 +2730,9 @@ npm-run-all@^4.1.5: string.prototype.padend "^3.0.0" object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== object-keys@^1.1.1: version "1.1.1" @@ -2749,7 +2749,7 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.values@^1.1.5: +object.values@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== @@ -2789,10 +2789,10 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== p-cancelable@^3.0.0: version "3.0.0" @@ -2910,20 +2910,10 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== - -prettier@^2.4.1: - version "2.8.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.2.tgz#c4ea1b5b454d7c4b59966db2e06ed7eec5dfd160" - integrity sha512-BtRV9BcncDyI2tsuS19zzhzoxD8Dh8LiCx7j7tHzrkz8GFXAexeWFdi22mjE1d16dftH2qNaytVxqiRTGlMfpw== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +prettier@^2.8.4: + version "2.8.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3" + integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== progress@^2.0.0, progress@^2.0.3: version "2.0.3" @@ -2944,9 +2934,9 @@ pump@^3.0.0: once "^1.3.1" punycode@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.2.0.tgz#2092cc57cd2582c38e4e7e8bb869dc8d3148bc74" - integrity sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw== + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== qs@^6.5.2: version "6.11.0" @@ -3001,19 +2991,6 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -readable-stream@^2.2.2: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -3069,7 +3046,7 @@ requireindex@~1.1.0: resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" integrity sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg== -resolve-alpn@^1.2.0: +resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== @@ -3079,7 +3056,7 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.0: +resolve@^1.10.0, resolve@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -3088,12 +3065,12 @@ resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== dependencies: - lowercase-keys "^1.0.0" + lowercase-keys "^2.0.0" responselike@^3.0.0: version "3.0.0" @@ -3114,6 +3091,11 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" +rimraf@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.1.2.tgz#20dfbc98083bdfaa28b01183162885ef213dbf7c" + integrity sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ== + roarr@^2.15.3: version "2.15.4" resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" @@ -3138,11 +3120,6 @@ safe-buffer@5.2.1, safe-buffer@^5.1.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - safe-regex-test@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" @@ -3167,7 +3144,7 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.2.0: +semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -3223,9 +3200,9 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.6.1: - version "1.7.4" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8" - integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== + version "1.8.0" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba" + integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ== side-channel@^1.0.4: version "1.0.4" @@ -3337,13 +3314,6 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -3422,11 +3392,6 @@ tmp@^0.2.1: dependencies: rimraf "^3.0.0" -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -3439,7 +3404,7 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -ts-node@^10.4.0: +ts-node@^10.9.1: version "10.9.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== @@ -3473,10 +3438,10 @@ tslib@^1.8.1, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.3.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== +tslib@^2.3.1, tslib@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== tsscmp@1.0.6: version "1.0.6" @@ -3490,11 +3455,6 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tunnel@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" - integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -3534,15 +3494,10 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -typescript@^4.4.4: - version "4.9.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" - integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== +typescript@^4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== unbox-primitive@^1.0.2: version "1.0.2" @@ -3576,18 +3531,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== - dependencies: - prepend-http "^2.0.0" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -3658,6 +3601,11 @@ workerpool@6.2.0: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -3690,10 +3638,10 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.1.tgz#3014bf0482dcd15147aa8e56109ce8632cd60ce4" + integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw== yargs-parser@20.2.4: version "20.2.4" From 0cc638b7ebf93aa8cd73af396a057f457d768a90 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 16 Feb 2023 12:06:22 +0100 Subject: [PATCH 080/239] test: New Electron versions (#642) --- test/e2e/versions.json | 2 +- yarn.lock | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 75cc5e0a..f8356b70 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.1","22.2.1","23.0.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.1","22.3.0","23.1.0"] diff --git a/yarn.lock b/yarn.lock index dbd5ecb6..8c14acbd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3091,11 +3091,6 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -rimraf@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.1.2.tgz#20dfbc98083bdfaa28b01183162885ef213dbf7c" - integrity sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ== - roarr@^2.15.3: version "2.15.4" resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" From 558119557947e7c4034d3bdffdf3d952577bc9f2 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 20 Feb 2023 10:17:34 +0100 Subject: [PATCH 081/239] fix: Add 2 second timeout to session flushing (#644) --- src/main/sessions.ts | 2 +- test/e2e/recipe/index.ts | 5 +++-- test/e2e/server/index.ts | 7 +++++++ .../e2e/test-apps/other/exit-timeout/package.json | 8 ++++++++ test/e2e/test-apps/other/exit-timeout/recipe.yml | 3 +++ test/e2e/test-apps/other/exit-timeout/src/main.js | 15 +++++++++++++++ 6 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 test/e2e/test-apps/other/exit-timeout/package.json create mode 100644 test/e2e/test-apps/other/exit-timeout/recipe.yml create mode 100644 test/e2e/test-apps/other/exit-timeout/src/main.js diff --git a/src/main/sessions.ts b/src/main/sessions.ts index 2efc7966..36a159a7 100644 --- a/src/main/sessions.ts +++ b/src/main/sessions.ts @@ -54,7 +54,7 @@ export async function endSession(): Promise<void> { await sessionStore.clear(); - await flush(); + await flush(2_000); } /** Determines if a Date is likely to have occurred in the previous uncompleted session */ diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts index d79dc9af..511dcbe5 100644 --- a/test/e2e/recipe/index.ts +++ b/test/e2e/recipe/index.ts @@ -7,7 +7,7 @@ import { dirname, join } from 'path'; import { SDK_VERSION } from '../../../src/main/version'; import { delay } from '../../helpers'; import { TestContext } from '../context'; -import { ERROR_ID, RATE_LIMIT_ID, SERVER_PORT, TestServer, TestServerEvent } from '../server'; +import { ERROR_ID, HANG_ID, RATE_LIMIT_ID, SERVER_PORT, TestServer, TestServerEvent } from '../server'; import { createLogger, getTestLog, walkSync } from '../utils'; import { evaluateCondition } from './eval'; import { eventIsSession, normalize } from './normalize'; @@ -115,7 +115,8 @@ export class RecipeRunner { .replace('__DSN__', `http://${SENTRY_KEY}@localhost:${SERVER_PORT}/277345`) .replace('__INCORRECT_DSN__', `http://${SENTRY_KEY}@localhost:9999/277345`) .replace('__RATE_LIMIT_DSN__', `http://${SENTRY_KEY}@localhost:${SERVER_PORT}/${RATE_LIMIT_ID}`) - .replace('__ERROR_DSN__', `http://${SENTRY_KEY}@localhost:${SERVER_PORT}/${ERROR_ID}`); + .replace('__ERROR_DSN__', `http://${SENTRY_KEY}@localhost:${SERVER_PORT}/${ERROR_ID}`) + .replace('__HANG_DSN__', `http://${SENTRY_KEY}@localhost:${SERVER_PORT}/${HANG_ID}`); if (file.endsWith('package.json')) { content = content diff --git a/test/e2e/server/index.ts b/test/e2e/server/index.ts index 00261aac..aee950a9 100644 --- a/test/e2e/server/index.ts +++ b/test/e2e/server/index.ts @@ -8,6 +8,7 @@ import { Readable } from 'stream'; import { inspect, TextDecoder, TextEncoder } from 'util'; import { gunzipSync } from 'zlib'; +import { delay } from '../../helpers'; import { eventIsSession } from '../recipe'; import { createLogger } from '../utils'; import { parseMultipart, sentryEventFromFormFields } from './multi-part'; @@ -17,6 +18,7 @@ const log = createLogger('Test Server'); export const SERVER_PORT = 8123; export const RATE_LIMIT_ID = 666; export const ERROR_ID = 999; +export const HANG_ID = 777; interface Attachment { filename?: string; @@ -102,6 +104,11 @@ export class TestServer { return; } + if (ctx.params.id === HANG_ID.toString()) { + await delay(10_000); + return; + } + const auth = (ctx.headers['x-sentry-auth'] as string) || ctx.url; const keyMatch = auth.match(/sentry_key=([a-f0-9]*)/); if (!keyMatch) { diff --git a/test/e2e/test-apps/other/exit-timeout/package.json b/test/e2e/test-apps/other/exit-timeout/package.json new file mode 100644 index 00000000..6f18c0d4 --- /dev/null +++ b/test/e2e/test-apps/other/exit-timeout/package.json @@ -0,0 +1,8 @@ +{ + "name": "flush-on-exit-timeout", + "version": "1.0.0", + "main": "src/main.js", + "dependencies": { + "@sentry/electron": "3.0.0" + } +} diff --git a/test/e2e/test-apps/other/exit-timeout/recipe.yml b/test/e2e/test-apps/other/exit-timeout/recipe.yml new file mode 100644 index 00000000..980c88c5 --- /dev/null +++ b/test/e2e/test-apps/other/exit-timeout/recipe.yml @@ -0,0 +1,3 @@ +description: App close flush timeout +command: yarn +expectedError: Some console output diff --git a/test/e2e/test-apps/other/exit-timeout/src/main.js b/test/e2e/test-apps/other/exit-timeout/src/main.js new file mode 100644 index 00000000..1b2a63d7 --- /dev/null +++ b/test/e2e/test-apps/other/exit-timeout/src/main.js @@ -0,0 +1,15 @@ +const { app } = require('electron'); +const { init } = require('@sentry/electron'); + +init({ + dsn: '__HANG_DSN__', + debug: true, + onFatalError: () => {}, +}); + +app.on('ready', () => { + setTimeout(() => { + console.log('Some console output'); + app.quit(); + }, 3000); +}); From 86fa70f1b3f1adf954174e9568e8a37d00c0dc9e Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 20 Feb 2023 10:17:51 +0100 Subject: [PATCH 082/239] chore: Update changelog for fresh 4.3.0 release (#645) --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fb304366..9b6c9506 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,9 @@ ## 4.3.0 -- feat: Update Sentry SDKs to 7.35.0 (#631) +- fix: Add 2 second timeout to session flushing (#644) +- feat: Update dependencies (#640) +- feat: Update Sentry SDKs to 7.37.1 (#636) - fix: Replay should be re-exported (#633) ## 4.2.0 From afa3978c47f295bdec14fdc0103bc866a871d266 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Mon, 20 Feb 2023 09:18:35 +0000 Subject: [PATCH 083/239] release: 4.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 670a4b89..ee91da0f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.2.0", + "version": "4.3.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From c54047c6fce3a898482e3eff5e07e62c003e469d Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 20 Feb 2023 12:46:04 +0100 Subject: [PATCH 084/239] feat: Update Sentry SDKs to v7.38.0 (#646) --- package.json | 16 ++--- src/common/normalize.ts | 9 ++- src/renderer/sdk.ts | 2 +- test/unit/stack-parse.test.ts | 12 ++++ yarn.lock | 116 +++++++++++++++++----------------- 5 files changed, 85 insertions(+), 70 deletions(-) diff --git a/package.json b/package.json index ee91da0f..56c4f9c3 100644 --- a/package.json +++ b/package.json @@ -58,18 +58,18 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.37.1", - "@sentry/core": "7.37.1", - "@sentry/node": "7.37.1", - "@sentry/types": "7.37.1", - "@sentry/utils": "7.37.1", + "@sentry/browser": "7.38.0", + "@sentry/core": "7.38.0", + "@sentry/node": "7.38.0", + "@sentry/types": "7.38.0", + "@sentry/utils": "7.38.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.37.1", - "@sentry-internal/typescript": "7.37.1", - "@sentry/tracing": "7.37.1", + "@sentry-internal/eslint-config-sdk": "7.38.0", + "@sentry-internal/typescript": "7.38.0", + "@sentry/tracing": "7.38.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/common/normalize.ts b/src/common/normalize.ts index 5199784f..7f4ae4f9 100644 --- a/src/common/normalize.ts +++ b/src/common/normalize.ts @@ -42,6 +42,10 @@ export function normalizeEvent(event: Event, basePath: string): Event { if (frame.filename) { frame.filename = normalizeUrl(frame.filename, basePath); } + + if (frame.abs_path) { + frame.abs_path = normalizeUrl(frame.abs_path, basePath); + } } } @@ -69,9 +73,8 @@ export function normalizeEvent(event: Event, basePath: string): Event { delete request.headers['User-Agent']; } - // The Node SDK includes server_name, which contains - // the machine name of the computer running Electron. This is not useful - // information in this case. + // The Node SDK includes server_name, which contains the machine name of the computer running Electron. + // In this case this is likely to include PII. const { tags = {} } = event; delete tags.server_name; delete event.server_name; diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index ff946a3b..32d9c0e1 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_37_1: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_38_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/test/unit/stack-parse.test.ts b/test/unit/stack-parse.test.ts index 9549c4e1..120c2555 100644 --- a/test/unit/stack-parse.test.ts +++ b/test/unit/stack-parse.test.ts @@ -22,6 +22,8 @@ describe('Parse mixed renderer stack traces', () => { expect(frames).to.eql([ { + abs_path: + 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', filename: 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', function: 'global.setTimeout', @@ -30,6 +32,8 @@ describe('Parse mixed renderer stack traces', () => { colno: 9, }, { + abs_path: + 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', filename: 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', function: 'one', @@ -38,6 +42,8 @@ describe('Parse mixed renderer stack traces', () => { colno: 9, }, { + abs_path: + 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', filename: 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', function: 'two', @@ -91,6 +97,8 @@ describe('Parse mixed renderer stack traces', () => { expect(frames).to.eql([ { + abs_path: + 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', filename: 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', function: '?', @@ -99,6 +107,8 @@ describe('Parse mixed renderer stack traces', () => { colno: 9, }, { + abs_path: + 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', filename: 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', function: 'one', @@ -107,6 +117,8 @@ describe('Parse mixed renderer stack traces', () => { colno: 9, }, { + abs_path: + 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', filename: 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', function: 'two', diff --git a/yarn.lock b/yarn.lock index 8c14acbd..79db392d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -128,13 +128,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.37.1": - version "7.37.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.37.1.tgz#1dafb9edbe7df94fb791c95aff80b6437f60a36a" - integrity sha512-jdkt6DG0+IwctiH8J1be8ZyQlgDyzkeJvhEZv8D/ZdCM5tqjvUqkbqS1yVTfwV+5OfjIMnQ4I9D/5Fnt8V14Rg== +"@sentry-internal/eslint-config-sdk@7.38.0": + version "7.38.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.38.0.tgz#a7c0c59e13d9b04895c2b5d1ac4d675fd692b449" + integrity sha512-qKw2Vcs+K7s16tgHlHzbaM821e34p+PsNtxndRiOFq3o+f9aCZYO1vAVTV9Qx7o/yB2dIBapI0ua8bWm8fHcMw== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.37.1" - "@sentry-internal/typescript" "7.37.1" + "@sentry-internal/eslint-plugin-sdk" "7.38.0" + "@sentry-internal/typescript" "7.38.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -143,81 +143,81 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.37.1": - version "7.37.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.37.1.tgz#9f6da2b0c711edeca628cb76eedf5f4776863dd2" - integrity sha512-SENuFIWVzb7xDEOdQTV8/i4EUb+s9ro6QWM/etXALQGE/Cvdors4YzTzfm3dJzV0Uk5DF3IPwdwQvimEeOsXHA== +"@sentry-internal/eslint-plugin-sdk@7.38.0": + version "7.38.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.38.0.tgz#c149722c148ee69aed363da41bd6de7301447263" + integrity sha512-kBql/7x8jveC6bgOL5664odpKcVLnLcW5khKQV453C8vvyBwzBpbk4mWYS4xDI/o64XJCdI866Sh8bN47QiN7Q== dependencies: requireindex "~1.1.0" -"@sentry-internal/typescript@7.37.1": - version "7.37.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.37.1.tgz#69ab51dc699eef56478da115789999dedb762e07" - integrity sha512-DEgaC5noRaY7WHM2XKEDRKbO01LtI4TVYxdbEgZQUmQX7FV1Ql27otHtEGiMBKe8JqoRHYm+Q3J9ZRtblMDERQ== +"@sentry-internal/typescript@7.38.0": + version "7.38.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.38.0.tgz#0016c9f9e26ee662d764597969ec8b29d84669a2" + integrity sha512-RdT121kNtsfcWE2pm4ONr9OAVSSsNSojIj9IpGFk8qk9tpMS0pWmzow9btnohqjCu6ClD1ppd4AhV4DnzwRThA== -"@sentry/browser@7.37.1": - version "7.37.1" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.37.1.tgz#d452ebed7f974f20872d34744e67d856ab54a41b" - integrity sha512-MfVbKzEVHKVH6ZyMCKLtPXvMtRCvxqQzrnK735sYW6EyMpcMYhukBU0pq7ws1E/KaCZjAJi1wDx2nqf2yPIVdQ== +"@sentry/browser@7.38.0": + version "7.38.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.38.0.tgz#cdb39da23f9ee2ce47395b2c12542acb4969efa7" + integrity sha512-rPJr+2jRYL29PeMYA2JgzYKTZQx6bc3T9evbAdIh0n+popSjpVyOpOMV/3l6A7KZeeix3dpp6eUZUxTJukqriQ== dependencies: - "@sentry/core" "7.37.1" - "@sentry/replay" "7.37.1" - "@sentry/types" "7.37.1" - "@sentry/utils" "7.37.1" + "@sentry/core" "7.38.0" + "@sentry/replay" "7.38.0" + "@sentry/types" "7.38.0" + "@sentry/utils" "7.38.0" tslib "^1.9.3" -"@sentry/core@7.37.1": - version "7.37.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.37.1.tgz#6d8d151b3d6ae0d6f81c7f4da92cd2e7cb5bf1fa" - integrity sha512-eS5hoFDjAOl7POZg6K77J0oiypiqR1782oVSB49UkjK+D8tCZzZ5PxPMv0b/O0310p7x4oZ3WGRJaWEN3vY4KQ== +"@sentry/core@7.38.0": + version "7.38.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.38.0.tgz#52f1f1f2ba5e88ab7b33c3abb0ea9730c78d953d" + integrity sha512-+hXh/SO3Ie6WC2b+wi01xLhyVREdkRXS5QBmCiv3z2ks2HvYXp7PoKSXJvNKiwCP+pBD+enOnM1YEzM2yEy5yw== dependencies: - "@sentry/types" "7.37.1" - "@sentry/utils" "7.37.1" + "@sentry/types" "7.38.0" + "@sentry/utils" "7.38.0" tslib "^1.9.3" -"@sentry/node@7.37.1": - version "7.37.1" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.37.1.tgz#c234e8711090b7532358bb1d6ab3fcca75356e98" - integrity sha512-nGerngIo5JwinJgl7m0SaL/xI+YRBlhb53gbkuLSAAcnoitBFzbp7LjywsqYFTWuWDIyk7O2t124GNxtolBAgA== +"@sentry/node@7.38.0": + version "7.38.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.38.0.tgz#957524fa4764dc19ef970ccdffb802d62e0db3ae" + integrity sha512-jNIN6NZvgzn/oms8RQzffjX8Z0LQDTN6N28nnhzqGCvnfmS1QtTt0FlU+pTuFXZNNSjfGy4XMXMYvLlbvhm2bg== dependencies: - "@sentry/core" "7.37.1" - "@sentry/types" "7.37.1" - "@sentry/utils" "7.37.1" + "@sentry/core" "7.38.0" + "@sentry/types" "7.38.0" + "@sentry/utils" "7.38.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/replay@7.37.1": - version "7.37.1" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.37.1.tgz#8ab4588b28baa07e35c417d3ffc6aaf934c58c45" - integrity sha512-3sHOE/oPirdvJbOn0IA/wpds12Sm2WaEtiAeC0+5Gg5mxQzFBLRrsA1Mz/ifzPGwr+ETn3sCyPCnd9b3PWaWMQ== +"@sentry/replay@7.38.0": + version "7.38.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.38.0.tgz#48d240b67de6b4ab41c951d19abeceb0d3f7706d" + integrity sha512-Ai78/OIYedny605x8uS0n/a5uj7qnuevogGD6agLat9lGc8DFvC07m2iS+EFyGOwtQzyDlRYJvYkHL8peR3crQ== dependencies: - "@sentry/core" "7.37.1" - "@sentry/types" "7.37.1" - "@sentry/utils" "7.37.1" + "@sentry/core" "7.38.0" + "@sentry/types" "7.38.0" + "@sentry/utils" "7.38.0" -"@sentry/tracing@7.37.1": - version "7.37.1" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.37.1.tgz#f5db7990f09be8d3c6b621b3718c268fff163ba0" - integrity sha512-3mQG2XtMCGqDkgfzhKpRJAIfRaokNAOF8WafgAmFmZQwEDsRAFjZ3pLoO+KiBUeQE5E5et7HyWBOl9rqHCkWnQ== +"@sentry/tracing@7.38.0": + version "7.38.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.38.0.tgz#ba28f15f526e87df167de206fd4fb0a39277dac6" + integrity sha512-ejXJp8oOT64MVtBzqdECUUaNzKbpu25St8Klub1i4Sm7xO+ZjDQDI4TIHvWojZvtkwQ3F4jcsCclc8KuyJunyQ== dependencies: - "@sentry/core" "7.37.1" - "@sentry/types" "7.37.1" - "@sentry/utils" "7.37.1" + "@sentry/core" "7.38.0" + "@sentry/types" "7.38.0" + "@sentry/utils" "7.38.0" tslib "^1.9.3" -"@sentry/types@7.37.1": - version "7.37.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.37.1.tgz#269da7da39c1a5243bf5f9a35370291b5cc205bb" - integrity sha512-c2HWyWSgVA0V4+DSW2qVb0yjftrb1X/q2CzCom+ayjGHO72qyWC+9Tc+7ZfotU1mapRjqUWBgkXkbGmao8N8Ug== +"@sentry/types@7.38.0": + version "7.38.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.38.0.tgz#6e2611544446271ed237440b12de782805aefe25" + integrity sha512-NKOALR6pNUMzUrsk2m+dkPrO8uGNvNh1LD0BCPswKNjC2qHo1h1mDGCgBmF9+EWyii8ZoACTIsxvsda+MBf97Q== -"@sentry/utils@7.37.1": - version "7.37.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.37.1.tgz#7695d6e30d6178723f3fa446a9553893bca85e96" - integrity sha512-/4mJOyDsfysx+5TXyJgSI+Ihw2/0EVJbrHjCyXPDXW5ADwbtU8VdBZ0unOmF0hk4QfftqwM9cyEu3BN4iBJsEA== +"@sentry/utils@7.38.0": + version "7.38.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.38.0.tgz#d10716e730108301f58766970493e9c5da0ba502" + integrity sha512-MgbI3YmYuyyhUtvcXkgGBqjOW+nuLLNGUdWCK+C4kObf8VbLt3dSE/7SEMT6TSHLYQmxs2BxFgx5Agn97m68kQ== dependencies: - "@sentry/types" "7.37.1" + "@sentry/types" "7.38.0" tslib "^1.9.3" "@sindresorhus/is@^4.0.0": From dac72f96ac9fcf143d945b3e69c4c30b1dafa0bf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 23 Feb 2023 10:38:52 +0000 Subject: [PATCH 085/239] test: New Electron versions (#647) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index f8356b70..ce7df3c2 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.1","22.3.0","23.1.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.2","22.3.1","23.1.1"] From 0d2eb16bf8daf9e330da85a9a823d20c80ad16ac Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 8 Mar 2023 20:19:44 +0000 Subject: [PATCH 086/239] test: New Electron versions (#650) Co-authored-by: timfish <timfish@users.noreply.github.com> --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index ce7df3c2..0d0460cf 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.2","22.3.1","23.1.1"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.2","22.3.2","23.1.3"] From 17634acabe755f471057d0f564e707282559d6c8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 10:12:54 +0000 Subject: [PATCH 087/239] test: New Electron versions (#654) Co-authored-by: timfish <timfish@users.noreply.github.com> --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 0d0460cf..2b5476b3 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.2","22.3.2","23.1.3"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.3","22.3.3","23.1.4"] From a625a18f700b4ed483c305ea4759676cd8822370 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 23 Mar 2023 17:56:48 +0000 Subject: [PATCH 088/239] test: New Electron versions (#655) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 2b5476b3..a11eef02 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.3","22.3.3","23.1.4"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.3","22.3.3","23.2.0"] From 792263c77cdd9e7fcffbf4b01274ae083afb73fa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 24 Mar 2023 13:30:23 +0000 Subject: [PATCH 089/239] test: New Electron versions (#656) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index a11eef02..b29954d2 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.3","22.3.3","23.2.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.3","22.3.4","23.2.0"] From 49b661ede014147aec19ba1ef1c6f72d87463229 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 31 Mar 2023 14:48:50 +0100 Subject: [PATCH 090/239] feat: Update to v7.46.0 of JavaScript SDKs (#657) --- package.json | 15 +-- src/common/normalize.ts | 4 - src/index.ts | 2 + src/renderer/index.ts | 2 +- src/renderer/sdk.ts | 2 +- src/renderer/stack-parse.ts | 6 + test/e2e/recipe/index.ts | 1 - .../other/browser-tracing/package.json | 3 +- .../other/browser-tracing/src/index.html | 3 +- .../other/custom-tracing/package.json | 3 +- .../other/custom-tracing/src/main.js | 1 - .../net-breadcrumbs-tracing/package.json | 1 - .../other/net-breadcrumbs-tracing/src/main.js | 1 - .../other/net-breadcrumbs/package.json | 1 - test/unit/stack-parse.test.ts | 12 -- yarn.lock | 126 +++++++++--------- 16 files changed, 84 insertions(+), 99 deletions(-) diff --git a/package.json b/package.json index 56c4f9c3..cb3545fa 100644 --- a/package.json +++ b/package.json @@ -58,18 +58,17 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.38.0", - "@sentry/core": "7.38.0", - "@sentry/node": "7.38.0", - "@sentry/types": "7.38.0", - "@sentry/utils": "7.38.0", + "@sentry/browser": "7.46.0", + "@sentry/core": "7.46.0", + "@sentry/node": "7.46.0", + "@sentry/types": "7.46.0", + "@sentry/utils": "7.46.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.38.0", - "@sentry-internal/typescript": "7.38.0", - "@sentry/tracing": "7.38.0", + "@sentry-internal/eslint-config-sdk": "7.46.0", + "@sentry-internal/typescript": "7.46.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/common/normalize.ts b/src/common/normalize.ts index 7f4ae4f9..68e708fd 100644 --- a/src/common/normalize.ts +++ b/src/common/normalize.ts @@ -42,10 +42,6 @@ export function normalizeEvent(event: Event, basePath: string): Event { if (frame.filename) { frame.filename = normalizeUrl(frame.filename, basePath); } - - if (frame.abs_path) { - frame.abs_path = normalizeUrl(frame.abs_path, basePath); - } } } diff --git a/src/index.ts b/src/index.ts index 8261bb4e..28e105b8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -30,6 +30,7 @@ export { captureMessage, configureScope, createTransport, + getActiveTransaction, getHubFromCarrier, getCurrentHub, Hub, @@ -45,6 +46,7 @@ export { withScope, FunctionToString, InboundFilters, + trace, } from '@sentry/core'; export const Integrations = getIntegrations(); diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 1d81528c..d3f5a14c 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -45,7 +45,7 @@ export { InboundFilters, } from '@sentry/core'; -export { BrowserClient, lastEventId, showReportDialog, Replay } from '@sentry/browser'; +export { BrowserClient, BrowserTracing, lastEventId, showReportDialog, Replay } from '@sentry/browser'; export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser'; export const Integrations = { ...ElectronRendererIntegrations, ...BrowserIntegrations }; diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 32d9c0e1..6d45e0fb 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_38_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_46_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/src/renderer/stack-parse.ts b/src/renderer/stack-parse.ts index 85f7f320..f49e21b8 100644 --- a/src/renderer/stack-parse.ts +++ b/src/renderer/stack-parse.ts @@ -2,6 +2,8 @@ import { chromeStackLineParser } from '@sentry/browser'; import { StackFrame, StackParser } from '@sentry/types'; import { dropUndefinedKeys, nodeStackLineParser, stripSentryFramesAndReverse } from '@sentry/utils'; +const STACKTRACE_FRAME_LIMIT = 50; + const [, chrome] = chromeStackLineParser; const [, node] = nodeStackLineParser(); @@ -21,6 +23,10 @@ export const electronRendererStackParser: StackParser = (stack: string, skipFirs } else if (nodeFrame) { frames.push(dropUndefinedKeys(nodeFrame)); } + + if (frames.length >= STACKTRACE_FRAME_LIMIT) { + break; + } } return stripSentryFramesAndReverse(frames); diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts index 511dcbe5..f71e1e32 100644 --- a/test/e2e/recipe/index.ts +++ b/test/e2e/recipe/index.ts @@ -127,7 +127,6 @@ export class RecipeRunner { ) // We replace the Sentry JavaScript dependency versions to match that of @sentry/electron .replace(/"@sentry\/replay": ".*"/, `"@sentry/replay": "${JS_VERSION}"`) - .replace(/"@sentry\/tracing": ".*"/, `"@sentry/tracing": "${JS_VERSION}"`) .replace(/"@sentry\/react": ".*"/, `"@sentry/react": "${JS_VERSION}"`) .replace(/"@sentry\/vue": ".*"/, `"@sentry/vue": "${JS_VERSION}"`); } diff --git a/test/e2e/test-apps/other/browser-tracing/package.json b/test/e2e/test-apps/other/browser-tracing/package.json index 2bc9ff1f..a092ed02 100644 --- a/test/e2e/test-apps/other/browser-tracing/package.json +++ b/test/e2e/test-apps/other/browser-tracing/package.json @@ -3,7 +3,6 @@ "version": "1.0.0", "main": "src/main.js", "dependencies": { - "@sentry/electron": "3.0.0", - "@sentry/tracing": "7.12.1" + "@sentry/electron": "3.0.0" } } diff --git a/test/e2e/test-apps/other/browser-tracing/src/index.html b/test/e2e/test-apps/other/browser-tracing/src/index.html index 9bd66428..4a2e6477 100644 --- a/test/e2e/test-apps/other/browser-tracing/src/index.html +++ b/test/e2e/test-apps/other/browser-tracing/src/index.html @@ -5,8 +5,7 @@ </head> <body> <script> - const { init } = require('@sentry/electron'); - const { BrowserTracing } = require('@sentry/tracing'); + const { init, BrowserTracing } = require('@sentry/electron/renderer'); init({ debug: true, diff --git a/test/e2e/test-apps/other/custom-tracing/package.json b/test/e2e/test-apps/other/custom-tracing/package.json index 223d8ef3..20317371 100644 --- a/test/e2e/test-apps/other/custom-tracing/package.json +++ b/test/e2e/test-apps/other/custom-tracing/package.json @@ -3,7 +3,6 @@ "version": "1.0.0", "main": "src/main.js", "dependencies": { - "@sentry/electron": "3.0.0", - "@sentry/tracing": "7.12.1" + "@sentry/electron": "3.0.0" } } diff --git a/test/e2e/test-apps/other/custom-tracing/src/main.js b/test/e2e/test-apps/other/custom-tracing/src/main.js index 8e4c581b..69bd80c7 100644 --- a/test/e2e/test-apps/other/custom-tracing/src/main.js +++ b/test/e2e/test-apps/other/custom-tracing/src/main.js @@ -2,7 +2,6 @@ const { app } = require('electron'); const Sentry = require('@sentry/electron'); -require('@sentry/tracing'); Sentry.init({ dsn: '__DSN__', diff --git a/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json b/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json index f8991b67..c1e040bb 100644 --- a/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json +++ b/test/e2e/test-apps/other/net-breadcrumbs-tracing/package.json @@ -4,7 +4,6 @@ "main": "src/main.js", "dependencies": { "@sentry/electron": "3.0.0", - "@sentry/tracing": "7.12.1", "electron-fetch": "1.7.4" } } diff --git a/test/e2e/test-apps/other/net-breadcrumbs-tracing/src/main.js b/test/e2e/test-apps/other/net-breadcrumbs-tracing/src/main.js index f87526af..aa5b1873 100644 --- a/test/e2e/test-apps/other/net-breadcrumbs-tracing/src/main.js +++ b/test/e2e/test-apps/other/net-breadcrumbs-tracing/src/main.js @@ -1,6 +1,5 @@ const { app } = require('electron'); const { init, startTransaction, getCurrentHub } = require('@sentry/electron'); -require('@sentry/tracing'); const fetch = require('electron-fetch'); init({ diff --git a/test/e2e/test-apps/other/net-breadcrumbs/package.json b/test/e2e/test-apps/other/net-breadcrumbs/package.json index b77f256e..5a225de1 100644 --- a/test/e2e/test-apps/other/net-breadcrumbs/package.json +++ b/test/e2e/test-apps/other/net-breadcrumbs/package.json @@ -4,7 +4,6 @@ "main": "src/main.js", "dependencies": { "@sentry/electron": "3.0.0", - "@sentry/tracing": "7.12.1", "electron-fetch": "1.7.4" } } diff --git a/test/unit/stack-parse.test.ts b/test/unit/stack-parse.test.ts index 120c2555..9549c4e1 100644 --- a/test/unit/stack-parse.test.ts +++ b/test/unit/stack-parse.test.ts @@ -22,8 +22,6 @@ describe('Parse mixed renderer stack traces', () => { expect(frames).to.eql([ { - abs_path: - 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', filename: 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', function: 'global.setTimeout', @@ -32,8 +30,6 @@ describe('Parse mixed renderer stack traces', () => { colno: 9, }, { - abs_path: - 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', filename: 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', function: 'one', @@ -42,8 +38,6 @@ describe('Parse mixed renderer stack traces', () => { colno: 9, }, { - abs_path: - 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', filename: 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', function: 'two', @@ -97,8 +91,6 @@ describe('Parse mixed renderer stack traces', () => { expect(frames).to.eql([ { - abs_path: - 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', filename: 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', function: '?', @@ -107,8 +99,6 @@ describe('Parse mixed renderer stack traces', () => { colno: 9, }, { - abs_path: - 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', filename: 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', function: 'one', @@ -117,8 +107,6 @@ describe('Parse mixed renderer stack traces', () => { colno: 9, }, { - abs_path: - 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', filename: 'file:///Users/tim/Documents/Repositories/sentry-electron/test/e2e/dist/javascript-renderer/src/index.html', function: 'two', diff --git a/yarn.lock b/yarn.lock index 79db392d..bb8b3553 100644 --- a/yarn.lock +++ b/yarn.lock @@ -128,13 +128,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.38.0": - version "7.38.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.38.0.tgz#a7c0c59e13d9b04895c2b5d1ac4d675fd692b449" - integrity sha512-qKw2Vcs+K7s16tgHlHzbaM821e34p+PsNtxndRiOFq3o+f9aCZYO1vAVTV9Qx7o/yB2dIBapI0ua8bWm8fHcMw== +"@sentry-internal/eslint-config-sdk@7.46.0": + version "7.46.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.46.0.tgz#a9b3a66503e0a68e8e227bf40c6d908e736ef722" + integrity sha512-72EZMjr//l8P8iWRIyIxI3a7INfkmCY779hKjXW5xTu0I98cA59qYoBmQJbJba7Q798FdZ5vSh6fMpxz4Ka3+Q== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.38.0" - "@sentry-internal/typescript" "7.38.0" + "@sentry-internal/eslint-plugin-sdk" "7.46.0" + "@sentry-internal/typescript" "7.46.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -143,81 +143,83 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.38.0": - version "7.38.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.38.0.tgz#c149722c148ee69aed363da41bd6de7301447263" - integrity sha512-kBql/7x8jveC6bgOL5664odpKcVLnLcW5khKQV453C8vvyBwzBpbk4mWYS4xDI/o64XJCdI866Sh8bN47QiN7Q== +"@sentry-internal/eslint-plugin-sdk@7.46.0": + version "7.46.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.46.0.tgz#abf1a08038197bb7bfa857a856501b25f0008d4a" + integrity sha512-83Zz+UrxEZu2njOJ0AQ7sadMjBL6PsD3LI6TQFN9RPpWNpuX7+sQKeaDne9MwP5LxO5HlTaPFGU89mlN0lXnIQ== dependencies: requireindex "~1.1.0" -"@sentry-internal/typescript@7.38.0": - version "7.38.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.38.0.tgz#0016c9f9e26ee662d764597969ec8b29d84669a2" - integrity sha512-RdT121kNtsfcWE2pm4ONr9OAVSSsNSojIj9IpGFk8qk9tpMS0pWmzow9btnohqjCu6ClD1ppd4AhV4DnzwRThA== - -"@sentry/browser@7.38.0": - version "7.38.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.38.0.tgz#cdb39da23f9ee2ce47395b2c12542acb4969efa7" - integrity sha512-rPJr+2jRYL29PeMYA2JgzYKTZQx6bc3T9evbAdIh0n+popSjpVyOpOMV/3l6A7KZeeix3dpp6eUZUxTJukqriQ== +"@sentry-internal/tracing@7.46.0": + version "7.46.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.46.0.tgz#26febabe21a2c2cab45a3de75809d88753ec07eb" + integrity sha512-KYoppa7PPL8Er7bdPoxTNUfIY804JL7hhOEomQHYD22rLynwQ4AaLm3YEY75QWwcGb0B7ZDMV+tSumW7Rxuwuw== dependencies: - "@sentry/core" "7.38.0" - "@sentry/replay" "7.38.0" - "@sentry/types" "7.38.0" - "@sentry/utils" "7.38.0" + "@sentry/core" "7.46.0" + "@sentry/types" "7.46.0" + "@sentry/utils" "7.46.0" + tslib "^1.9.3" + +"@sentry-internal/typescript@7.46.0": + version "7.46.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.46.0.tgz#e96119414363758b08880834aa11515f8acd733d" + integrity sha512-cMXz5XDNHYzDix9DH0SfZCHl9WFe2o7Ik6Dln9Cd+Q2hBrFvAxClg9s9sCM1Ogfiu8u1NlPIXE29+sIdDGykcA== + +"@sentry/browser@7.46.0": + version "7.46.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.46.0.tgz#27b291ddd3c61cc1073cbbb5c48c450b438ed83c" + integrity sha512-4rX9hKPjxzfH5LhZzO5DlS5NXQ8qZg2ibepaqEgcDHrpYh5813mjjnE4OQA8wiZ6WuG3xKFgHBrGeliD5jXz9w== + dependencies: + "@sentry-internal/tracing" "7.46.0" + "@sentry/core" "7.46.0" + "@sentry/replay" "7.46.0" + "@sentry/types" "7.46.0" + "@sentry/utils" "7.46.0" tslib "^1.9.3" -"@sentry/core@7.38.0": - version "7.38.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.38.0.tgz#52f1f1f2ba5e88ab7b33c3abb0ea9730c78d953d" - integrity sha512-+hXh/SO3Ie6WC2b+wi01xLhyVREdkRXS5QBmCiv3z2ks2HvYXp7PoKSXJvNKiwCP+pBD+enOnM1YEzM2yEy5yw== +"@sentry/core@7.46.0": + version "7.46.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.46.0.tgz#f377e556d8679f29bde1cce15b1682b6c689d6b7" + integrity sha512-BnNHGh/ZTztqQedFko7vb2u6yLs/kWesOQNivav32ZbsEpVCjcmG1gOJXh2YmGIvj3jXOC9a4xfIuh+lYFcA6A== dependencies: - "@sentry/types" "7.38.0" - "@sentry/utils" "7.38.0" + "@sentry/types" "7.46.0" + "@sentry/utils" "7.46.0" tslib "^1.9.3" -"@sentry/node@7.38.0": - version "7.38.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.38.0.tgz#957524fa4764dc19ef970ccdffb802d62e0db3ae" - integrity sha512-jNIN6NZvgzn/oms8RQzffjX8Z0LQDTN6N28nnhzqGCvnfmS1QtTt0FlU+pTuFXZNNSjfGy4XMXMYvLlbvhm2bg== +"@sentry/node@7.46.0": + version "7.46.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.46.0.tgz#f85ee74926372d19d6b6a23f68f19023d7a528a7" + integrity sha512-+GrgJMCye2WXGarRiU5IJHCK27xg7xbPc2XjGojBKbBoZfqxVAWbXEK4bnBQgRGP1pCmrU/M6ZhVgR3dP580xA== dependencies: - "@sentry/core" "7.38.0" - "@sentry/types" "7.38.0" - "@sentry/utils" "7.38.0" + "@sentry-internal/tracing" "7.46.0" + "@sentry/core" "7.46.0" + "@sentry/types" "7.46.0" + "@sentry/utils" "7.46.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/replay@7.38.0": - version "7.38.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.38.0.tgz#48d240b67de6b4ab41c951d19abeceb0d3f7706d" - integrity sha512-Ai78/OIYedny605x8uS0n/a5uj7qnuevogGD6agLat9lGc8DFvC07m2iS+EFyGOwtQzyDlRYJvYkHL8peR3crQ== +"@sentry/replay@7.46.0": + version "7.46.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.46.0.tgz#c5e595d0c2d8d4db2c95d68f518510c42eb122a3" + integrity sha512-rHsAFdeEu47JRy6mEwwN+M+zTTWlOFWw9sR/eDCvik2lxAXBN2mXvf/N/MN9zQB3+QnS13ke+SvwVW7CshLOXg== dependencies: - "@sentry/core" "7.38.0" - "@sentry/types" "7.38.0" - "@sentry/utils" "7.38.0" - -"@sentry/tracing@7.38.0": - version "7.38.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.38.0.tgz#ba28f15f526e87df167de206fd4fb0a39277dac6" - integrity sha512-ejXJp8oOT64MVtBzqdECUUaNzKbpu25St8Klub1i4Sm7xO+ZjDQDI4TIHvWojZvtkwQ3F4jcsCclc8KuyJunyQ== - dependencies: - "@sentry/core" "7.38.0" - "@sentry/types" "7.38.0" - "@sentry/utils" "7.38.0" - tslib "^1.9.3" + "@sentry/core" "7.46.0" + "@sentry/types" "7.46.0" + "@sentry/utils" "7.46.0" -"@sentry/types@7.38.0": - version "7.38.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.38.0.tgz#6e2611544446271ed237440b12de782805aefe25" - integrity sha512-NKOALR6pNUMzUrsk2m+dkPrO8uGNvNh1LD0BCPswKNjC2qHo1h1mDGCgBmF9+EWyii8ZoACTIsxvsda+MBf97Q== +"@sentry/types@7.46.0": + version "7.46.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.46.0.tgz#8573ba8676342c594fcfefff4552123278cfec51" + integrity sha512-2FMEMgt2h6u7AoELhNhu9L54GAh67KKfK2pJ1kEXJHmWxM9FSCkizjLs/t+49xtY7jEXr8qYq8bV967VfDPQ9g== -"@sentry/utils@7.38.0": - version "7.38.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.38.0.tgz#d10716e730108301f58766970493e9c5da0ba502" - integrity sha512-MgbI3YmYuyyhUtvcXkgGBqjOW+nuLLNGUdWCK+C4kObf8VbLt3dSE/7SEMT6TSHLYQmxs2BxFgx5Agn97m68kQ== +"@sentry/utils@7.46.0": + version "7.46.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.46.0.tgz#7a713724db3d1c8bc0aef6d19a7fe2c76db0bdf2" + integrity sha512-elRezDAF84guMG0OVIIZEWm6wUpgbda4HGks98CFnPsrnMm3N1bdBI9XdlxYLtf+ir5KsGR5YlEIf/a0kRUwAQ== dependencies: - "@sentry/types" "7.38.0" + "@sentry/types" "7.46.0" tslib "^1.9.3" "@sindresorhus/is@^4.0.0": From db739f57dba8b1a18edf033cdd5568a57db63163 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 31 Mar 2023 15:33:49 +0100 Subject: [PATCH 091/239] chore: Update changelog for release (#659) --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b6c9506..62e6e3de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## 4.4.0 + +- feat: Update to [v7.46.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.46.0) of JavaScript SDKs (#657) + ## 4.3.0 - fix: Add 2 second timeout to session flushing (#644) From ddc94f884063edbf94ae0717de3f94fa06af7468 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Fri, 31 Mar 2023 14:35:33 +0000 Subject: [PATCH 092/239] release: 4.4.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cb3545fa..83df688b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.3.0", + "version": "4.4.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From 22a6eb5d6f7e4faff44cf8f2c7afe3684281b97d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 18 Apr 2023 10:29:30 +0200 Subject: [PATCH 093/239] test: New Sentry SDK version (#662) --- package.json | 16 +++--- src/renderer/sdk.ts | 2 +- yarn.lock | 124 ++++++++++++++++++++++---------------------- 3 files changed, 71 insertions(+), 71 deletions(-) diff --git a/package.json b/package.json index 83df688b..5eabf668 100644 --- a/package.json +++ b/package.json @@ -58,17 +58,17 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.46.0", - "@sentry/core": "7.46.0", - "@sentry/node": "7.46.0", - "@sentry/types": "7.46.0", - "@sentry/utils": "7.46.0", + "@sentry/browser": "7.48.0", + "@sentry/core": "7.48.0", + "@sentry/node": "7.48.0", + "@sentry/types": "7.48.0", + "@sentry/utils": "7.48.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.46.0", - "@sentry-internal/typescript": "7.46.0", + "@sentry-internal/eslint-config-sdk": "7.48.0", + "@sentry-internal/typescript": "7.48.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", @@ -106,4 +106,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} +} \ No newline at end of file diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 6d45e0fb..59814ae8 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_46_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_48_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index bb8b3553..6a001315 100644 --- a/yarn.lock +++ b/yarn.lock @@ -128,13 +128,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.46.0": - version "7.46.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.46.0.tgz#a9b3a66503e0a68e8e227bf40c6d908e736ef722" - integrity sha512-72EZMjr//l8P8iWRIyIxI3a7INfkmCY779hKjXW5xTu0I98cA59qYoBmQJbJba7Q798FdZ5vSh6fMpxz4Ka3+Q== +"@sentry-internal/eslint-config-sdk@7.48.0": + version "7.48.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.48.0.tgz#9e0725da7da6f92e20630997fccb1903d96a35df" + integrity sha512-M3LOE51Wst5raQnS+hWi3q1Wi2omRRhtfn3AmyyYqLy65RY5EdiuU/Rjrea4H5AepTT2UAzX4EPhASjaBLehOA== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.46.0" - "@sentry-internal/typescript" "7.46.0" + "@sentry-internal/eslint-plugin-sdk" "7.48.0" + "@sentry-internal/typescript" "7.48.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -143,83 +143,83 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.46.0": - version "7.46.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.46.0.tgz#abf1a08038197bb7bfa857a856501b25f0008d4a" - integrity sha512-83Zz+UrxEZu2njOJ0AQ7sadMjBL6PsD3LI6TQFN9RPpWNpuX7+sQKeaDne9MwP5LxO5HlTaPFGU89mlN0lXnIQ== +"@sentry-internal/eslint-plugin-sdk@7.48.0": + version "7.48.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.48.0.tgz#4810513571d820e4b16d85c1f81f0bbca5d4389a" + integrity sha512-yHyArKCgg8rgLjeUMxo4EQ8YSO4pKZBl0QP2oI375+fN1sqW1Wk7VGD6oe2QvFN+xp5eqQCfZLpbB/SlnnACqg== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.46.0": - version "7.46.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.46.0.tgz#26febabe21a2c2cab45a3de75809d88753ec07eb" - integrity sha512-KYoppa7PPL8Er7bdPoxTNUfIY804JL7hhOEomQHYD22rLynwQ4AaLm3YEY75QWwcGb0B7ZDMV+tSumW7Rxuwuw== +"@sentry-internal/tracing@7.48.0": + version "7.48.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.48.0.tgz#d0c1eac1c046fda5c79d16dc1c918fee3bae3e9d" + integrity sha512-MFAPDTrvCtfSm0/Zbmx7HA0Q5uCfRadOUpN8Y8rP1ndz+329h2kA3mZRCuC+3/aXL11zs2CHUhcAkGjwH2vogg== dependencies: - "@sentry/core" "7.46.0" - "@sentry/types" "7.46.0" - "@sentry/utils" "7.46.0" + "@sentry/core" "7.48.0" + "@sentry/types" "7.48.0" + "@sentry/utils" "7.48.0" tslib "^1.9.3" -"@sentry-internal/typescript@7.46.0": - version "7.46.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.46.0.tgz#e96119414363758b08880834aa11515f8acd733d" - integrity sha512-cMXz5XDNHYzDix9DH0SfZCHl9WFe2o7Ik6Dln9Cd+Q2hBrFvAxClg9s9sCM1Ogfiu8u1NlPIXE29+sIdDGykcA== - -"@sentry/browser@7.46.0": - version "7.46.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.46.0.tgz#27b291ddd3c61cc1073cbbb5c48c450b438ed83c" - integrity sha512-4rX9hKPjxzfH5LhZzO5DlS5NXQ8qZg2ibepaqEgcDHrpYh5813mjjnE4OQA8wiZ6WuG3xKFgHBrGeliD5jXz9w== - dependencies: - "@sentry-internal/tracing" "7.46.0" - "@sentry/core" "7.46.0" - "@sentry/replay" "7.46.0" - "@sentry/types" "7.46.0" - "@sentry/utils" "7.46.0" +"@sentry-internal/typescript@7.48.0": + version "7.48.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.48.0.tgz#27ba755a1414b3518f820086e447eba8ecdeb794" + integrity sha512-kD+ZsvuZw0r7LnwS4naWQj0pbUcBhy2WUSu1gpWtW6YsVCbOTEmGEyv/WinzmVQeO14QsG9bROQABAmRxsV7NQ== + +"@sentry/browser@7.48.0": + version "7.48.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.48.0.tgz#03f39bec6949ff48e343c5862c5d54dfd4a2f9ff" + integrity sha512-tdx/2nhuiykncmXFlV4Dpp+Hxgt/v31LiyXE79IcM560wc+QmWKtzoW9azBWQ0xt5KOO3ERMib9qPE4/ql1/EQ== + dependencies: + "@sentry-internal/tracing" "7.48.0" + "@sentry/core" "7.48.0" + "@sentry/replay" "7.48.0" + "@sentry/types" "7.48.0" + "@sentry/utils" "7.48.0" tslib "^1.9.3" -"@sentry/core@7.46.0": - version "7.46.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.46.0.tgz#f377e556d8679f29bde1cce15b1682b6c689d6b7" - integrity sha512-BnNHGh/ZTztqQedFko7vb2u6yLs/kWesOQNivav32ZbsEpVCjcmG1gOJXh2YmGIvj3jXOC9a4xfIuh+lYFcA6A== +"@sentry/core@7.48.0": + version "7.48.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.48.0.tgz#1a5ec347ab7212d73a99583c2e64989e34e3263a" + integrity sha512-8FYuJTMpyuxRZvlen3gQ3rpOtVInSDmSyXqWEhCLuG/w34AtWoTiW7G516rsAAh6Hy1TP91GooMWbonP3XQNTQ== dependencies: - "@sentry/types" "7.46.0" - "@sentry/utils" "7.46.0" + "@sentry/types" "7.48.0" + "@sentry/utils" "7.48.0" tslib "^1.9.3" -"@sentry/node@7.46.0": - version "7.46.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.46.0.tgz#f85ee74926372d19d6b6a23f68f19023d7a528a7" - integrity sha512-+GrgJMCye2WXGarRiU5IJHCK27xg7xbPc2XjGojBKbBoZfqxVAWbXEK4bnBQgRGP1pCmrU/M6ZhVgR3dP580xA== +"@sentry/node@7.48.0": + version "7.48.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.48.0.tgz#b2f15502b77796bf7bcaa29f2e9ce1420f7c49d1" + integrity sha512-DJyyZaVhv/pUzJPof7es6zYDHeWbNqE0T3tQfLCkShdyfR+Ew8In8W/x2s7S8vq0cfRq0rqv1E6B2/HpVdYO7g== dependencies: - "@sentry-internal/tracing" "7.46.0" - "@sentry/core" "7.46.0" - "@sentry/types" "7.46.0" - "@sentry/utils" "7.46.0" + "@sentry-internal/tracing" "7.48.0" + "@sentry/core" "7.48.0" + "@sentry/types" "7.48.0" + "@sentry/utils" "7.48.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/replay@7.46.0": - version "7.46.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.46.0.tgz#c5e595d0c2d8d4db2c95d68f518510c42eb122a3" - integrity sha512-rHsAFdeEu47JRy6mEwwN+M+zTTWlOFWw9sR/eDCvik2lxAXBN2mXvf/N/MN9zQB3+QnS13ke+SvwVW7CshLOXg== +"@sentry/replay@7.48.0": + version "7.48.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.48.0.tgz#ca8f1543bad4717dcd65739bf1256a1933bba757" + integrity sha512-8fRHMGJ0NJeIZi6UucxUTvfDPaBa7+jU1kCTLjCcuH3X/UVz5PtGLMtFSO5U8HP+mUDlPs97MP1uoDvMa4S2Ng== dependencies: - "@sentry/core" "7.46.0" - "@sentry/types" "7.46.0" - "@sentry/utils" "7.46.0" + "@sentry/core" "7.48.0" + "@sentry/types" "7.48.0" + "@sentry/utils" "7.48.0" -"@sentry/types@7.46.0": - version "7.46.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.46.0.tgz#8573ba8676342c594fcfefff4552123278cfec51" - integrity sha512-2FMEMgt2h6u7AoELhNhu9L54GAh67KKfK2pJ1kEXJHmWxM9FSCkizjLs/t+49xtY7jEXr8qYq8bV967VfDPQ9g== +"@sentry/types@7.48.0": + version "7.48.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.48.0.tgz#57f3c9cf331a5621e82dda04eefcf8c19ee42bc9" + integrity sha512-kkAszZwQ5/v4n7Yyw/DPNRWx7h724mVNRGZIJa9ggUMvTgMe7UKCZZ5wfQmYiKVlGbwd9pxXAcP8Oq15EbByFQ== -"@sentry/utils@7.46.0": - version "7.46.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.46.0.tgz#7a713724db3d1c8bc0aef6d19a7fe2c76db0bdf2" - integrity sha512-elRezDAF84guMG0OVIIZEWm6wUpgbda4HGks98CFnPsrnMm3N1bdBI9XdlxYLtf+ir5KsGR5YlEIf/a0kRUwAQ== +"@sentry/utils@7.48.0": + version "7.48.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.48.0.tgz#2866975ea8899aba35b083dd0558cbbe29ee8de1" + integrity sha512-d977sghkFVMfld0LrEyyY2gYrfayLPdDEpUDT+hg5y79r7zZDCFyHtdB86699E5K89MwDZahW7Erk+a1nk4x5w== dependencies: - "@sentry/types" "7.46.0" + "@sentry/types" "7.48.0" tslib "^1.9.3" "@sindresorhus/is@^4.0.0": From a4014ff91ce3aefe5c4cc4f7cc5772fef16bcde2 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 19 Apr 2023 08:32:21 +0100 Subject: [PATCH 094/239] fix: IPC protocol should be registered as secure (#664) --- src/main/ipc.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 6f8ed30b..be52b6f4 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -131,7 +131,7 @@ function configureProtocol(options: ElectronMainOptionsInternal): void { protocol.registerSchemesAsPrivileged([ { scheme: PROTOCOL_SCHEME, - privileges: { bypassCSP: true, corsEnabled: true, supportFetchAPI: true }, + privileges: { bypassCSP: true, corsEnabled: true, supportFetchAPI: true, secure: true }, }, ]); From cdb680c0fe54174460a1c3a521f1559dad02e6d9 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 25 Apr 2023 20:34:03 +0200 Subject: [PATCH 095/239] chore: Update changelog for release (#665) --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62e6e3de..87c20b43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## Unreleased +## 4.5.0 +- feat: Update to [v7.48.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.48.0) of JavaScript SDKs + (#662) +- fix: IPC protocol should be registered as secure (#664) + ## 4.4.0 - feat: Update to [v7.46.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.46.0) of JavaScript SDKs (#657) From 9b3c157b751a215a9d1537ceafb2499de1b2ba4e Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Tue, 25 Apr 2023 18:34:40 +0000 Subject: [PATCH 096/239] release: 4.5.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 5eabf668..8631a22e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.4.0", + "version": "4.5.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", @@ -106,4 +106,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} \ No newline at end of file +} From 8e9bc125c0c2a1c1ef68a9967f4ca82ac4d7726b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Apr 2023 18:02:03 +0200 Subject: [PATCH 097/239] chore(deps-dev): bump yaml from 2.2.1 to 2.2.2 (#668) --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6a001315..14c52170 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3636,9 +3636,9 @@ yallist@^4.0.0: integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.1.tgz#3014bf0482dcd15147aa8e56109ce8632cd60ce4" - integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw== + version "2.2.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073" + integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA== yargs-parser@20.2.4: version "20.2.4" From 41e0a305d41656fde75076f4a8f35db2d125ee8a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 26 Apr 2023 18:38:38 +0200 Subject: [PATCH 098/239] test: New Sentry SDK version (#667) --- package.json | 14 ++--- src/renderer/sdk.ts | 2 +- yarn.lock | 124 ++++++++++++++++++++++---------------------- 3 files changed, 70 insertions(+), 70 deletions(-) diff --git a/package.json b/package.json index 8631a22e..14b1367d 100644 --- a/package.json +++ b/package.json @@ -58,17 +58,17 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.48.0", - "@sentry/core": "7.48.0", - "@sentry/node": "7.48.0", - "@sentry/types": "7.48.0", - "@sentry/utils": "7.48.0", + "@sentry/browser": "7.49.0", + "@sentry/core": "7.49.0", + "@sentry/node": "7.49.0", + "@sentry/types": "7.49.0", + "@sentry/utils": "7.49.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.48.0", - "@sentry-internal/typescript": "7.48.0", + "@sentry-internal/eslint-config-sdk": "7.49.0", + "@sentry-internal/typescript": "7.49.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 59814ae8..61c3faee 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_48_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_49_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 14c52170..14cae854 100644 --- a/yarn.lock +++ b/yarn.lock @@ -128,13 +128,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.48.0": - version "7.48.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.48.0.tgz#9e0725da7da6f92e20630997fccb1903d96a35df" - integrity sha512-M3LOE51Wst5raQnS+hWi3q1Wi2omRRhtfn3AmyyYqLy65RY5EdiuU/Rjrea4H5AepTT2UAzX4EPhASjaBLehOA== +"@sentry-internal/eslint-config-sdk@7.49.0": + version "7.49.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.49.0.tgz#61450f76a178e6757c31b6438a498b17dca62314" + integrity sha512-5/Mb8mjduNCni1hRQD0gLTAfLIVWL1rfyS/TVhoZg/x3qz6DLO/upOyk/PpbHoJuvXXyiYixobultycm3iO7FQ== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.48.0" - "@sentry-internal/typescript" "7.48.0" + "@sentry-internal/eslint-plugin-sdk" "7.49.0" + "@sentry-internal/typescript" "7.49.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -143,83 +143,83 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.48.0": - version "7.48.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.48.0.tgz#4810513571d820e4b16d85c1f81f0bbca5d4389a" - integrity sha512-yHyArKCgg8rgLjeUMxo4EQ8YSO4pKZBl0QP2oI375+fN1sqW1Wk7VGD6oe2QvFN+xp5eqQCfZLpbB/SlnnACqg== +"@sentry-internal/eslint-plugin-sdk@7.49.0": + version "7.49.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.49.0.tgz#936cbb99b972d5ebda45a1fbd7058bb57f3baee1" + integrity sha512-mh4wEXk0DIUd2kZe+nhym0K9cAHJSF54gd0p0GF53jPXU1u7/gltW3eEQP+CLtT60IezZxYTO9cvnUmzDSh7uQ== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.48.0": - version "7.48.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.48.0.tgz#d0c1eac1c046fda5c79d16dc1c918fee3bae3e9d" - integrity sha512-MFAPDTrvCtfSm0/Zbmx7HA0Q5uCfRadOUpN8Y8rP1ndz+329h2kA3mZRCuC+3/aXL11zs2CHUhcAkGjwH2vogg== +"@sentry-internal/tracing@7.49.0": + version "7.49.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.49.0.tgz#f589de565370884b9a13f82c98463de9b2d25dcd" + integrity sha512-ESh3+ZneQk/3HESTUmIPNrW5GVPu/HrRJU+eAJJto74vm+6vP7zDn2YV2gJ1w18O/37nc7W/bVCgZJlhZ3cwew== dependencies: - "@sentry/core" "7.48.0" - "@sentry/types" "7.48.0" - "@sentry/utils" "7.48.0" + "@sentry/core" "7.49.0" + "@sentry/types" "7.49.0" + "@sentry/utils" "7.49.0" tslib "^1.9.3" -"@sentry-internal/typescript@7.48.0": - version "7.48.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.48.0.tgz#27ba755a1414b3518f820086e447eba8ecdeb794" - integrity sha512-kD+ZsvuZw0r7LnwS4naWQj0pbUcBhy2WUSu1gpWtW6YsVCbOTEmGEyv/WinzmVQeO14QsG9bROQABAmRxsV7NQ== - -"@sentry/browser@7.48.0": - version "7.48.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.48.0.tgz#03f39bec6949ff48e343c5862c5d54dfd4a2f9ff" - integrity sha512-tdx/2nhuiykncmXFlV4Dpp+Hxgt/v31LiyXE79IcM560wc+QmWKtzoW9azBWQ0xt5KOO3ERMib9qPE4/ql1/EQ== - dependencies: - "@sentry-internal/tracing" "7.48.0" - "@sentry/core" "7.48.0" - "@sentry/replay" "7.48.0" - "@sentry/types" "7.48.0" - "@sentry/utils" "7.48.0" +"@sentry-internal/typescript@7.49.0": + version "7.49.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.49.0.tgz#af70ffbf8bb4e70906cb9913a5ff34ed3d9286ce" + integrity sha512-u3heGxVyQuty8IkKSTOiH1meNPRzzDcnSFbnMuJE9jGiJ/22WSruMH7BX2JQQnwzu8E1VlSVtPrHnsMJkSU8MA== + +"@sentry/browser@7.49.0": + version "7.49.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.49.0.tgz#5ce1cdb8d883c129d9a4e313c08a54c5ada4661b" + integrity sha512-x2DekKkQoY7/dhBzE4J25mdQ978NtPBTVQb+uZqlF/t5mp4K44TAszmPqy8lC/CmVHkp7qcpRGSCIzeboUL4KA== + dependencies: + "@sentry-internal/tracing" "7.49.0" + "@sentry/core" "7.49.0" + "@sentry/replay" "7.49.0" + "@sentry/types" "7.49.0" + "@sentry/utils" "7.49.0" tslib "^1.9.3" -"@sentry/core@7.48.0": - version "7.48.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.48.0.tgz#1a5ec347ab7212d73a99583c2e64989e34e3263a" - integrity sha512-8FYuJTMpyuxRZvlen3gQ3rpOtVInSDmSyXqWEhCLuG/w34AtWoTiW7G516rsAAh6Hy1TP91GooMWbonP3XQNTQ== +"@sentry/core@7.49.0": + version "7.49.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.49.0.tgz#340d059f5efeff1a3359fef66d0c8e34e79ac992" + integrity sha512-AlSnCYgfEbvK8pkNluUkmdW/cD9UpvOVCa+ERQswXNRkAv5aDGCL6Ihv6fnIajE++BYuwZh0+HwZUBVKTFzoZg== dependencies: - "@sentry/types" "7.48.0" - "@sentry/utils" "7.48.0" + "@sentry/types" "7.49.0" + "@sentry/utils" "7.49.0" tslib "^1.9.3" -"@sentry/node@7.48.0": - version "7.48.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.48.0.tgz#b2f15502b77796bf7bcaa29f2e9ce1420f7c49d1" - integrity sha512-DJyyZaVhv/pUzJPof7es6zYDHeWbNqE0T3tQfLCkShdyfR+Ew8In8W/x2s7S8vq0cfRq0rqv1E6B2/HpVdYO7g== +"@sentry/node@7.49.0": + version "7.49.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.49.0.tgz#95c28848b5c27940b079c08e9987088e2bf9d821" + integrity sha512-KLIrqcbKk4yR3g8fjl87Eyv4M9j4YI6b7sqVAZYj3FrX3mC6JQyGdlDfUpSKy604n1iAdr6OuUp5f9x7jPJaeQ== dependencies: - "@sentry-internal/tracing" "7.48.0" - "@sentry/core" "7.48.0" - "@sentry/types" "7.48.0" - "@sentry/utils" "7.48.0" + "@sentry-internal/tracing" "7.49.0" + "@sentry/core" "7.49.0" + "@sentry/types" "7.49.0" + "@sentry/utils" "7.49.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/replay@7.48.0": - version "7.48.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.48.0.tgz#ca8f1543bad4717dcd65739bf1256a1933bba757" - integrity sha512-8fRHMGJ0NJeIZi6UucxUTvfDPaBa7+jU1kCTLjCcuH3X/UVz5PtGLMtFSO5U8HP+mUDlPs97MP1uoDvMa4S2Ng== +"@sentry/replay@7.49.0": + version "7.49.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.49.0.tgz#c7f16bc3ca0c5911f641738f8894eb596c5da00d" + integrity sha512-UY3bHoBDPOu4Dpq3m3oxNjLrq09NiFVYUfrTN4QOq1Am2SA04XbuCj/YZ+jNVy/NrFtoz9cTovK6oQbNw53jog== dependencies: - "@sentry/core" "7.48.0" - "@sentry/types" "7.48.0" - "@sentry/utils" "7.48.0" + "@sentry/core" "7.49.0" + "@sentry/types" "7.49.0" + "@sentry/utils" "7.49.0" -"@sentry/types@7.48.0": - version "7.48.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.48.0.tgz#57f3c9cf331a5621e82dda04eefcf8c19ee42bc9" - integrity sha512-kkAszZwQ5/v4n7Yyw/DPNRWx7h724mVNRGZIJa9ggUMvTgMe7UKCZZ5wfQmYiKVlGbwd9pxXAcP8Oq15EbByFQ== +"@sentry/types@7.49.0": + version "7.49.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.49.0.tgz#2c217091e13dc373682f5be2e9b5baed9d2ae695" + integrity sha512-9yXXh7iv76+O6h2ONUVx0wsL1auqJFWez62mTjWk4350SgMmWp/zUkBxnVXhmcYqscz/CepC+Loz9vITLXtgxg== -"@sentry/utils@7.48.0": - version "7.48.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.48.0.tgz#2866975ea8899aba35b083dd0558cbbe29ee8de1" - integrity sha512-d977sghkFVMfld0LrEyyY2gYrfayLPdDEpUDT+hg5y79r7zZDCFyHtdB86699E5K89MwDZahW7Erk+a1nk4x5w== +"@sentry/utils@7.49.0": + version "7.49.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.49.0.tgz#b1b3a2af52067dd27e660c7c3062a31cdf4b94f9" + integrity sha512-JdC9yGnOgev4ISJVwmIoFsk8Zx0psDZJAj2DV7x4wMZsO6QK+YjC7G3mUED/S5D5lsrkBZ/3uvQQhr8DQI4UcQ== dependencies: - "@sentry/types" "7.48.0" + "@sentry/types" "7.49.0" tslib "^1.9.3" "@sindresorhus/is@^4.0.0": From 8100be4e1ed538851d9074cb72c9931eaf98ac5b Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 3 May 2023 13:39:11 +0200 Subject: [PATCH 099/239] feat: Update to v7.50.0 of JavaScript SDKs (#671) Co-authored-by: timfish <timfish@users.noreply.github.com> --- package.json | 14 +- src/renderer/sdk.ts | 2 +- .../other/browser-replay/event-replay.json | 2 +- yarn.lock | 124 +++++++++--------- 4 files changed, 71 insertions(+), 71 deletions(-) diff --git a/package.json b/package.json index 14b1367d..ae31926c 100644 --- a/package.json +++ b/package.json @@ -58,17 +58,17 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.49.0", - "@sentry/core": "7.49.0", - "@sentry/node": "7.49.0", - "@sentry/types": "7.49.0", - "@sentry/utils": "7.49.0", + "@sentry/browser": "7.50.0", + "@sentry/core": "7.50.0", + "@sentry/node": "7.50.0", + "@sentry/types": "7.50.0", + "@sentry/utils": "7.50.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.49.0", - "@sentry-internal/typescript": "7.49.0", + "@sentry-internal/eslint-config-sdk": "7.50.0", + "@sentry-internal/typescript": "7.50.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 61c3faee..dacf2332 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_49_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_50_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/test/e2e/test-apps/other/browser-replay/event-replay.json b/test/e2e/test-apps/other/browser-replay/event-replay.json index 221294a7..e5389c24 100644 --- a/test/e2e/test-apps/other/browser-replay/event-replay.json +++ b/test/e2e/test-apps/other/browser-replay/event-replay.json @@ -12,7 +12,7 @@ ], "replay_id": "{{id}}", "segment_id": 0, - "replay_type": "error", + "replay_type": "buffer", "event_id": "{{id}}", "environment": "production", "sdk": { diff --git a/yarn.lock b/yarn.lock index 14cae854..4a906036 100644 --- a/yarn.lock +++ b/yarn.lock @@ -128,13 +128,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.49.0": - version "7.49.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.49.0.tgz#61450f76a178e6757c31b6438a498b17dca62314" - integrity sha512-5/Mb8mjduNCni1hRQD0gLTAfLIVWL1rfyS/TVhoZg/x3qz6DLO/upOyk/PpbHoJuvXXyiYixobultycm3iO7FQ== +"@sentry-internal/eslint-config-sdk@7.50.0": + version "7.50.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.50.0.tgz#b4210244f1bf69e035cf924f34f8cb8b0e50be31" + integrity sha512-jge0KvAH9kUcphiWftLqIYmKM0Wm0/cZUWPBtnc8ApNDGCOZhj0uX8zTEWSAZb2YOXv5AikCEfshPGuftlXYBg== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.49.0" - "@sentry-internal/typescript" "7.49.0" + "@sentry-internal/eslint-plugin-sdk" "7.50.0" + "@sentry-internal/typescript" "7.50.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -143,83 +143,83 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.49.0": - version "7.49.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.49.0.tgz#936cbb99b972d5ebda45a1fbd7058bb57f3baee1" - integrity sha512-mh4wEXk0DIUd2kZe+nhym0K9cAHJSF54gd0p0GF53jPXU1u7/gltW3eEQP+CLtT60IezZxYTO9cvnUmzDSh7uQ== +"@sentry-internal/eslint-plugin-sdk@7.50.0": + version "7.50.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.50.0.tgz#a42a9acad3fc87af5f9d82d5c02adc8bc69c69b6" + integrity sha512-DFDqs43Pc6sIYHGysYO9E+Z4hkUs4cbmo9e+vWnRKlsQDfHs/+BirsX6pH07m/sbWxKwwdUbel3I+yOXJF9jxQ== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.49.0": - version "7.49.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.49.0.tgz#f589de565370884b9a13f82c98463de9b2d25dcd" - integrity sha512-ESh3+ZneQk/3HESTUmIPNrW5GVPu/HrRJU+eAJJto74vm+6vP7zDn2YV2gJ1w18O/37nc7W/bVCgZJlhZ3cwew== +"@sentry-internal/tracing@7.50.0": + version "7.50.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.50.0.tgz#74454af99a03d81762993835d2687c881e14f41e" + integrity sha512-4TQ4vN0aMBWsUXfJWk2xbe4x7fKfwCXgXKTtHC/ocwwKM+0EefV5Iw9YFG8IrIQN4vMtuRzktqcs9q0/Sbv7tg== dependencies: - "@sentry/core" "7.49.0" - "@sentry/types" "7.49.0" - "@sentry/utils" "7.49.0" + "@sentry/core" "7.50.0" + "@sentry/types" "7.50.0" + "@sentry/utils" "7.50.0" tslib "^1.9.3" -"@sentry-internal/typescript@7.49.0": - version "7.49.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.49.0.tgz#af70ffbf8bb4e70906cb9913a5ff34ed3d9286ce" - integrity sha512-u3heGxVyQuty8IkKSTOiH1meNPRzzDcnSFbnMuJE9jGiJ/22WSruMH7BX2JQQnwzu8E1VlSVtPrHnsMJkSU8MA== - -"@sentry/browser@7.49.0": - version "7.49.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.49.0.tgz#5ce1cdb8d883c129d9a4e313c08a54c5ada4661b" - integrity sha512-x2DekKkQoY7/dhBzE4J25mdQ978NtPBTVQb+uZqlF/t5mp4K44TAszmPqy8lC/CmVHkp7qcpRGSCIzeboUL4KA== - dependencies: - "@sentry-internal/tracing" "7.49.0" - "@sentry/core" "7.49.0" - "@sentry/replay" "7.49.0" - "@sentry/types" "7.49.0" - "@sentry/utils" "7.49.0" +"@sentry-internal/typescript@7.50.0": + version "7.50.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.50.0.tgz#31d76a36bba025ca35edefc6d1dae6afac26d4f1" + integrity sha512-cCWBqAcKWByS7z9x2oqsFl6/fT4EhFgb6OYShPlsOwP5UYthIJqDDFZJiFb9qSejQeENgSyWE63dIMVMtUI5sQ== + +"@sentry/browser@7.50.0": + version "7.50.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.50.0.tgz#16c995c336322c8aec65570f90f50288678004ec" + integrity sha512-a+UYbP89+SAvW47/p9wxEi9eWlyp/SkYl52OCdZNXnplQY4kQIOVyiaIs5nnCxIxZgXKrhAX4eo1E9ykleFuNQ== + dependencies: + "@sentry-internal/tracing" "7.50.0" + "@sentry/core" "7.50.0" + "@sentry/replay" "7.50.0" + "@sentry/types" "7.50.0" + "@sentry/utils" "7.50.0" tslib "^1.9.3" -"@sentry/core@7.49.0": - version "7.49.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.49.0.tgz#340d059f5efeff1a3359fef66d0c8e34e79ac992" - integrity sha512-AlSnCYgfEbvK8pkNluUkmdW/cD9UpvOVCa+ERQswXNRkAv5aDGCL6Ihv6fnIajE++BYuwZh0+HwZUBVKTFzoZg== +"@sentry/core@7.50.0": + version "7.50.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.50.0.tgz#88bc9cbfc0cb429a28489ece6f0be7a7006436c4" + integrity sha512-6oD1a3fYs4aiNK7tuJSd88LHjYJAetd7ZK/AfJniU7zWKj4jxIYfO8nhm0qdnhEDs81RcweVDmPhWm3Kwrzzsg== dependencies: - "@sentry/types" "7.49.0" - "@sentry/utils" "7.49.0" + "@sentry/types" "7.50.0" + "@sentry/utils" "7.50.0" tslib "^1.9.3" -"@sentry/node@7.49.0": - version "7.49.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.49.0.tgz#95c28848b5c27940b079c08e9987088e2bf9d821" - integrity sha512-KLIrqcbKk4yR3g8fjl87Eyv4M9j4YI6b7sqVAZYj3FrX3mC6JQyGdlDfUpSKy604n1iAdr6OuUp5f9x7jPJaeQ== +"@sentry/node@7.50.0": + version "7.50.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.50.0.tgz#d6adab136d87f7dca614ea0d77944f902fa45626" + integrity sha512-11UJBKoQFMp7f8sbzeO2gENsKIUkVCNBTzuPRib7l2K1HMjSfacXmwwma7ZEs0mc3ofIZ1UYuyONAXmI1lK9cQ== dependencies: - "@sentry-internal/tracing" "7.49.0" - "@sentry/core" "7.49.0" - "@sentry/types" "7.49.0" - "@sentry/utils" "7.49.0" + "@sentry-internal/tracing" "7.50.0" + "@sentry/core" "7.50.0" + "@sentry/types" "7.50.0" + "@sentry/utils" "7.50.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/replay@7.49.0": - version "7.49.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.49.0.tgz#c7f16bc3ca0c5911f641738f8894eb596c5da00d" - integrity sha512-UY3bHoBDPOu4Dpq3m3oxNjLrq09NiFVYUfrTN4QOq1Am2SA04XbuCj/YZ+jNVy/NrFtoz9cTovK6oQbNw53jog== +"@sentry/replay@7.50.0": + version "7.50.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.50.0.tgz#dd29f063492d91e708629ff8dd95a59d4b7180f1" + integrity sha512-EYRk+DTZ5luwfkiCaDpBC3YBKIEdkReTUNZtWDVUytSVjsCnttkAipx/y6bxy3HN+rSXungMd3XKQT5RNMRUNA== dependencies: - "@sentry/core" "7.49.0" - "@sentry/types" "7.49.0" - "@sentry/utils" "7.49.0" + "@sentry/core" "7.50.0" + "@sentry/types" "7.50.0" + "@sentry/utils" "7.50.0" -"@sentry/types@7.49.0": - version "7.49.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.49.0.tgz#2c217091e13dc373682f5be2e9b5baed9d2ae695" - integrity sha512-9yXXh7iv76+O6h2ONUVx0wsL1auqJFWez62mTjWk4350SgMmWp/zUkBxnVXhmcYqscz/CepC+Loz9vITLXtgxg== +"@sentry/types@7.50.0": + version "7.50.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.50.0.tgz#52a035cad83a80ca26fa53c09eb1241250c3df3e" + integrity sha512-Zo9vyI98QNeYT0K0y57Rb4JRWDaPEgmp+QkQ4CRQZFUTWetO5fvPZ4Gb/R7TW16LajuHZlbJBHmvmNj2pkL2kw== -"@sentry/utils@7.49.0": - version "7.49.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.49.0.tgz#b1b3a2af52067dd27e660c7c3062a31cdf4b94f9" - integrity sha512-JdC9yGnOgev4ISJVwmIoFsk8Zx0psDZJAj2DV7x4wMZsO6QK+YjC7G3mUED/S5D5lsrkBZ/3uvQQhr8DQI4UcQ== +"@sentry/utils@7.50.0": + version "7.50.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.50.0.tgz#2b93a48024651436e95b7c8e2066aee7c2234d57" + integrity sha512-iyPwwC6fwJsiPhH27ZbIiSsY5RaccHBqADS2zEjgKYhmP4P9WGgHRDrvLEnkOjqQyKNb6c0yfmv83n0uxYnolw== dependencies: - "@sentry/types" "7.49.0" + "@sentry/types" "7.50.0" tslib "^1.9.3" "@sindresorhus/is@^4.0.0": From 686e2ce8bf05af7b30118b299db00557262e3006 Mon Sep 17 00:00:00 2001 From: Luca Forstner <luca.forstner@sentry.io> Date: Fri, 26 May 2023 11:15:45 +0200 Subject: [PATCH 100/239] fix: Fix debug ID matching by normalizing `debug_meta` paths (#676) --- examples/electron-forge-webpack/event.json | 8 + examples/electron-forge-webpack/package.json | 1 + .../webpack.main.config.js | 22 +- .../webpack.renderer.config.js | 20 + examples/electron-forge-webpack/yarn.lock | 5421 +++++++++++++++++ examples/electron-vite/event.json | 8 + examples/electron-vite/package.json | 11 +- examples/electron-vite/vite.config.main.js | 19 + .../electron-vite/vite.config.renderer.js | 26 +- examples/electron-vite/yarn.lock | 1363 +++++ .../event.json | 8 + .../package.json | 5 +- .../webpack.config.js | 24 +- .../yarn.lock | 1496 +++++ examples/webpack-context-isolation/event.json | 8 + .../webpack-context-isolation/package.json | 7 +- .../webpack.config.js | 21 +- examples/webpack-context-isolation/yarn.lock | 1595 +++++ src/common/normalize.ts | 7 + 19 files changed, 10054 insertions(+), 16 deletions(-) create mode 100644 examples/electron-forge-webpack/yarn.lock create mode 100644 examples/electron-vite/yarn.lock create mode 100644 examples/webpack-context-isolation-preload/yarn.lock create mode 100644 examples/webpack-context-isolation/yarn.lock diff --git a/examples/electron-forge-webpack/event.json b/examples/electron-forge-webpack/event.json index 16bb6c29..130fafd8 100644 --- a/examples/electron-forge-webpack/event.json +++ b/examples/electron-forge-webpack/event.json @@ -58,6 +58,14 @@ "user": { "ip_address": "{{auto}}" }, + "debug_meta": { + "images": [ + { + "code_file": "app:///.webpack/renderer/main_window/index.js", + "type": "sourcemap" + } + ] + }, "exception": { "values": [ { diff --git a/examples/electron-forge-webpack/package.json b/examples/electron-forge-webpack/package.json index effe250b..12599d36 100644 --- a/examples/electron-forge-webpack/package.json +++ b/examples/electron-forge-webpack/package.json @@ -30,6 +30,7 @@ "devDependencies": { "@electron-forge/cli": "6.0.0-beta.63", "@electron-forge/plugin-webpack": "6.0.0-beta.63", + "@sentry/webpack-plugin": "^2.2.0", "@vercel/webpack-asset-relocator-loader": "1.6.0", "electron": "23.0.0", "node-loader": "^2.0.0" diff --git a/examples/electron-forge-webpack/webpack.main.config.js b/examples/electron-forge-webpack/webpack.main.config.js index 641eed0f..8402398f 100644 --- a/examples/electron-forge-webpack/webpack.main.config.js +++ b/examples/electron-forge-webpack/webpack.main.config.js @@ -1,3 +1,5 @@ +const { sentryWebpackPlugin } = require('@sentry/webpack-plugin'); + module.exports = { /** * This is the main entry point for your application, it's the first file @@ -8,4 +10,22 @@ module.exports = { module: { rules: require('./webpack.rules'), }, -}; \ No newline at end of file + plugins: [ + sentryWebpackPlugin({ + authToken: 'some invalid auth token', + org: 'some invalid org', + project: 'some invalid project', + telemetry: false, + sourcemaps: { + assets: [], // no assets to upload - we just care about injecting debug IDs + }, + release: { + inject: false, + }, + errorHandler() { + // do nothing on errors :) + // They will happen because of the invalid auth token + }, + }), + ], +}; diff --git a/examples/electron-forge-webpack/webpack.renderer.config.js b/examples/electron-forge-webpack/webpack.renderer.config.js index b2e54d7c..0b7be694 100644 --- a/examples/electron-forge-webpack/webpack.renderer.config.js +++ b/examples/electron-forge-webpack/webpack.renderer.config.js @@ -1,3 +1,23 @@ +const { sentryWebpackPlugin } = require('@sentry/webpack-plugin'); + module.exports = { // Put your normal webpack config below here + plugins: [ + sentryWebpackPlugin({ + authToken: 'some invalid auth token', + org: 'some invalid org', + project: 'some invalid project', + telemetry: false, + sourcemaps: { + assets: [], // no assets to upload - we just care about injecting debug IDs + }, + release: { + inject: false, + }, + errorHandler() { + // do nothing on errors :) + // They will happen because of the invalid auth token + }, + }), + ], }; diff --git a/examples/electron-forge-webpack/yarn.lock b/examples/electron-forge-webpack/yarn.lock new file mode 100644 index 00000000..53498d70 --- /dev/null +++ b/examples/electron-forge-webpack/yarn.lock @@ -0,0 +1,5421 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@electron-forge/async-ora@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/async-ora/-/async-ora-6.0.0-beta.63.tgz#b72343f204f7c74605df658d31cc4c137ad3009c" + integrity sha512-e1BbeUV20yWZWeRJ3LDLcloPPgHwTXV1wAJXpAdDbmTmcRyAGx9iVx2Qyh6t878c7zX36XXlqfCIOvODsgiuOQ== + dependencies: + chalk "^4.0.0" + debug "^4.3.1" + log-symbols "^4.0.0" + ora "^5.0.0" + pretty-ms "^7.0.0" + +"@electron-forge/cli@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/cli/-/cli-6.0.0-beta.63.tgz#8a668da150c7729bf16cf0a9952c85ffbd4fa0ca" + integrity sha512-I2B/hX16IDbuc2ip6JjAxrTF8XSQfuoIkb/EoqzEluPrdCx6VTzEahOQlUH+CvPohpwD/LDsH4Usd9/krKlkfg== + dependencies: + "@electron-forge/async-ora" "6.0.0-beta.63" + "@electron-forge/core" "6.0.0-beta.63" + "@electron-forge/shared-types" "6.0.0-beta.63" + "@electron/get" "^1.9.0" + chalk "^4.0.0" + commander "^4.1.1" + debug "^4.3.1" + fs-extra "^10.0.0" + inquirer "^8.0.0" + semver "^7.2.1" + +"@electron-forge/core@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/core/-/core-6.0.0-beta.63.tgz#511a89080664c5c661d6571e449c1a8a216b6d96" + integrity sha512-NuiWRXUfpv6/PwP8AgPxcmRPiWvQMfllTHz163wmBWz8UBclzhu7Brpu6dwmszAJG68erW15ym+cUlpvGDEltg== + dependencies: + "@electron-forge/async-ora" "6.0.0-beta.63" + "@electron-forge/installer-base" "6.0.0-beta.63" + "@electron-forge/installer-deb" "6.0.0-beta.63" + "@electron-forge/installer-dmg" "6.0.0-beta.63" + "@electron-forge/installer-exe" "6.0.0-beta.63" + "@electron-forge/installer-rpm" "6.0.0-beta.63" + "@electron-forge/installer-zip" "6.0.0-beta.63" + "@electron-forge/maker-base" "6.0.0-beta.63" + "@electron-forge/plugin-base" "6.0.0-beta.63" + "@electron-forge/publisher-base" "6.0.0-beta.63" + "@electron-forge/shared-types" "6.0.0-beta.63" + "@electron-forge/template-base" "6.0.0-beta.63" + "@electron-forge/template-typescript" "6.0.0-beta.63" + "@electron-forge/template-typescript-webpack" "6.0.0-beta.63" + "@electron-forge/template-webpack" "6.0.0-beta.63" + "@electron/get" "^1.9.0" + "@malept/cross-spawn-promise" "^2.0.0" + chalk "^4.0.0" + debug "^4.3.1" + electron-packager "^15.4.0" + electron-rebuild "^3.2.6" + fast-glob "^3.2.7" + find-up "^5.0.0" + fs-extra "^10.0.0" + lodash "^4.17.20" + log-symbols "^4.0.0" + node-fetch "^2.6.0" + nugget "^2.0.1" + resolve-package "^1.0.1" + semver "^7.2.1" + source-map-support "^0.5.13" + sudo-prompt "^9.1.1" + username "^5.1.0" + yarn-or-npm "^3.0.1" + +"@electron-forge/installer-base@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/installer-base/-/installer-base-6.0.0-beta.63.tgz#9ce2542a604526b585b2e874d891196b2beff8ce" + integrity sha512-y4SKJZaxE8lnfwicWuAiUZBpBY6UB/mE/dA+w6uigKEffZzRPbrbBUIuknII6wEaFnnScmCrQaBRjxy+zsEihQ== + dependencies: + "@electron-forge/async-ora" "6.0.0-beta.63" + +"@electron-forge/installer-darwin@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/installer-darwin/-/installer-darwin-6.0.0-beta.63.tgz#6ea0f1d169d878416c6fb545292a4a6cb14962c6" + integrity sha512-LQE6UKPP7tJ+Ki3tPzYUIBRAAzEpalqkz8zYUh+2pS/nk9w2BgQeOJ84NzWUfoeLWZnsWtjp8kox8xTS8/BsSQ== + dependencies: + "@electron-forge/async-ora" "6.0.0-beta.63" + "@electron-forge/installer-base" "6.0.0-beta.63" + fs-extra "^10.0.0" + sudo-prompt "^9.1.1" + +"@electron-forge/installer-deb@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/installer-deb/-/installer-deb-6.0.0-beta.63.tgz#9ae9c761335bf0f11ba971296a26acde4413d331" + integrity sha512-gvjCXdGXBxC/O8QuwNHKsLIlfOwVc9y/e5pURcuFRvPf7Ibw7e53w3pfR2pquWHNzAccrw8P5WBEuPSeDPBlLw== + dependencies: + "@electron-forge/installer-linux" "6.0.0-beta.63" + +"@electron-forge/installer-dmg@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/installer-dmg/-/installer-dmg-6.0.0-beta.63.tgz#245b6fd39679c49e404317b6e95b48432fde07cc" + integrity sha512-o+Zd2CmpoMQOk9SfuUPIoQ4GONVNHdlmI4mMIJ22OrLQnZJYAdsQUFO87jtxmJuippTpEbnqaKc9yl6mLh89TQ== + dependencies: + "@electron-forge/installer-darwin" "6.0.0-beta.63" + "@malept/cross-spawn-promise" "^2.0.0" + debug "^4.3.1" + fs-extra "^10.0.0" + +"@electron-forge/installer-exe@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/installer-exe/-/installer-exe-6.0.0-beta.63.tgz#8d89bb8bb0d94bd2694c6e7192d57d43a3f0074a" + integrity sha512-HhogUMTTgOXTEMQE+A20USamuAcnClSSWzlInzVQ2cGT5AdZio6zqNJ/et7zPx7Jz71gmJ/cfhNstzc/ew1IAA== + dependencies: + "@electron-forge/installer-base" "6.0.0-beta.63" + open "^8.1.0" + +"@electron-forge/installer-linux@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/installer-linux/-/installer-linux-6.0.0-beta.63.tgz#cf47e247ec1b507dcb586e08cf9e95cc81b7da06" + integrity sha512-yC2wYQ3uXGnvWEG4AdjSmas5qaXXtXIoxO6/cXJrywMT9ujWlp2GB1i+I5xrFCusgbjdvdzJ3JhLRmIAKpW6ZA== + dependencies: + "@electron-forge/installer-base" "6.0.0-beta.63" + sudo-prompt "^9.1.1" + +"@electron-forge/installer-rpm@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/installer-rpm/-/installer-rpm-6.0.0-beta.63.tgz#faf2cecac309971fc0cb4fa94f83ad1764af0aee" + integrity sha512-4p+zDInl6sMnx1jdIcRSXgRAGFSwtcBPBStAlVuxPMefM8ElBPhskUyHrk33TqMZUdzbr+vYA+pQGj/6jlET4A== + dependencies: + "@electron-forge/installer-linux" "6.0.0-beta.63" + +"@electron-forge/installer-zip@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/installer-zip/-/installer-zip-6.0.0-beta.63.tgz#4d6e6cbd8c0c45438a16b2f349971b58311dbe6f" + integrity sha512-ZORm3jVvswvKSv+iuufTVXwIM/OOtBSQPeAay8hVubf6MudWBdntWv1Xg/BAUAcdRbAH/EIbMv83LZvmt7cufw== + dependencies: + "@electron-forge/installer-darwin" "6.0.0-beta.63" + "@malept/cross-spawn-promise" "^2.0.0" + fs-extra "^10.0.0" + +"@electron-forge/maker-base@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/maker-base/-/maker-base-6.0.0-beta.63.tgz#4e9cbff3775bea08938dd3aa5a48c3e9479b9be6" + integrity sha512-0Fh6OOjS/1sXIGReKgU5NCMf8ZUyaCUSjd190oUNaX8OSxGDbHrbWO3CgIbsAOsxRnxzhYY1UtPo6VkexjCQBA== + dependencies: + "@electron-forge/shared-types" "6.0.0-beta.63" + fs-extra "^10.0.0" + which "^2.0.2" + +"@electron-forge/plugin-base@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/plugin-base/-/plugin-base-6.0.0-beta.63.tgz#4895d846d5c643296db9892af2a74238bc8637d7" + integrity sha512-K9nyGRI9NY2kax7aS/1eWxGrOSwNO3JnmbfvFQf5I0Yl/HKClrfGJq4o3q4N9lf55arPRJBROP8+rHJ115VCrA== + dependencies: + "@electron-forge/shared-types" "6.0.0-beta.63" + +"@electron-forge/plugin-webpack@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/plugin-webpack/-/plugin-webpack-6.0.0-beta.63.tgz#2d81cd8765381e2dea80f0a4103e772b2ed06fef" + integrity sha512-ITDN6Be0Z/JgwXmN4aXfT+B8TUg5AcvSW2j/NTkATiqUaVyaqq97UxqJ+gx15ouraKW92szEvL2Mo2JwG7bXYg== + dependencies: + "@electron-forge/async-ora" "6.0.0-beta.63" + "@electron-forge/core" "6.0.0-beta.63" + "@electron-forge/plugin-base" "6.0.0-beta.63" + "@electron-forge/shared-types" "6.0.0-beta.63" + "@electron-forge/web-multi-logger" "6.0.0-beta.63" + chalk "^4.0.0" + debug "^4.3.1" + fs-extra "^10.0.0" + global "^4.3.2" + html-webpack-plugin "^5.3.1" + webpack "^5.37.0" + webpack-dev-server "^4.0.0" + webpack-merge "^5.7.3" + +"@electron-forge/publisher-base@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/publisher-base/-/publisher-base-6.0.0-beta.63.tgz#b7327eaa446995c8d7243757829d7fd92d1c2d77" + integrity sha512-ag+/e6eqM6k1jxUhXg8618IbUa1IsF8OcbZtjcLSZSp/ZEGLAlZ3IpfIrk5C9cRUdibhDJyT6oFLfbG7KUhpRg== + dependencies: + "@electron-forge/shared-types" "6.0.0-beta.63" + +"@electron-forge/shared-types@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/shared-types/-/shared-types-6.0.0-beta.63.tgz#d15aec5698f6e22b61060a4064955a04c2cedc39" + integrity sha512-ayw8IBtHKZ1oIN3y3t3Jm80TTvstvKrPASCXMEJ/fh4gHah8pUmDFZEvyAsGgy/XFHqsjlpTmD2hdOtQqCRpMQ== + dependencies: + "@electron-forge/async-ora" "6.0.0-beta.63" + electron-packager "^15.4.0" + electron-rebuild "^3.2.6" + ora "^5.0.0" + +"@electron-forge/template-base@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/template-base/-/template-base-6.0.0-beta.63.tgz#62f929faa210727863e56402f2b83d9d61d3b2f2" + integrity sha512-u1rPlrc8bqajkiKe2tmGROL9/o0xx8OzMBHsT7i2+oAFPicSZoyrELCxx9htCeLgUf0iR0K0EzLsFjdyRjTBkg== + dependencies: + "@electron-forge/async-ora" "6.0.0-beta.63" + "@electron-forge/shared-types" "6.0.0-beta.63" + "@malept/cross-spawn-promise" "^2.0.0" + debug "^4.3.1" + fs-extra "^10.0.0" + username "^5.1.0" + +"@electron-forge/template-typescript-webpack@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/template-typescript-webpack/-/template-typescript-webpack-6.0.0-beta.63.tgz#4eff34f0ba5d87ba8a3e57f70153aa4c0e782c56" + integrity sha512-8S3GW2MRmYF6BsgozCm0CPqAuqaK48MZvJJ3v3XbO1tWPtz4vvw21XxQeOqRMpECdNbqnRBtil4QxVditEx3Kw== + dependencies: + "@electron-forge/async-ora" "6.0.0-beta.63" + "@electron-forge/shared-types" "6.0.0-beta.63" + "@electron-forge/template-base" "6.0.0-beta.63" + fs-extra "^10.0.0" + +"@electron-forge/template-typescript@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/template-typescript/-/template-typescript-6.0.0-beta.63.tgz#87d06f9f1f866d921d9fed0913e4b9d03b5f09b5" + integrity sha512-npFOyak+F+p086GoSifCWwhBxRSJqzzvEwztnONpbjp7BasvtWUyOVpXyyzvt7GaawjRg5Gx/NUgVi5Oi9BIfg== + dependencies: + "@electron-forge/async-ora" "6.0.0-beta.63" + "@electron-forge/shared-types" "6.0.0-beta.63" + "@electron-forge/template-base" "6.0.0-beta.63" + fs-extra "^10.0.0" + +"@electron-forge/template-webpack@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/template-webpack/-/template-webpack-6.0.0-beta.63.tgz#090203523f58a31354921cde2e1ba3f21ac74b43" + integrity sha512-CE5zjnyfmHlapwQSJ54kUeTNsvhx/7HAjvfMXpE689LxlFnr0VhiTxuc5kwEetPcxsXhei7IBy/PdJ41v4dswA== + dependencies: + "@electron-forge/async-ora" "6.0.0-beta.63" + "@electron-forge/shared-types" "6.0.0-beta.63" + "@electron-forge/template-base" "6.0.0-beta.63" + fs-extra "^10.0.0" + +"@electron-forge/web-multi-logger@6.0.0-beta.63": + version "6.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@electron-forge/web-multi-logger/-/web-multi-logger-6.0.0-beta.63.tgz#4d349ef929cc7a01ee7de5edbd7bc75583b604b2" + integrity sha512-FRo/7+oolFaSGu8XP+ukXXxDKcWOb5DSUiGWzFtYKIYc6HHGy/ErGNuxh3NQf3PMTM3nxfFwbAEtthSulW1Wrw== + dependencies: + express "^4.17.1" + express-ws "^5.0.2" + xterm "^4.9.0" + xterm-addon-fit "^0.5.0" + xterm-addon-search "^0.8.0" + +"@electron/asar@^3.2.1": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.4.tgz#7e8635a3c4f6d8b3f8ae6efaf5ecb9fbf3bd9864" + integrity sha512-lykfY3TJRRWFeTxccEKdf1I6BLl2Plw81H0bbp4Fc5iEc67foDCa5pjJQULVgo0wF+Dli75f3xVcdb/67FFZ/g== + dependencies: + chromium-pickle-js "^0.2.0" + commander "^5.0.0" + glob "^7.1.6" + minimatch "^3.0.4" + +"@electron/get@^1.6.0", "@electron/get@^1.9.0": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.14.1.tgz#16ba75f02dffb74c23965e72d617adc721d27f40" + integrity sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw== + dependencies: + debug "^4.1.1" + env-paths "^2.2.0" + fs-extra "^8.1.0" + got "^9.6.0" + progress "^2.0.3" + semver "^6.2.0" + sumchecker "^3.0.1" + optionalDependencies: + global-agent "^3.0.0" + global-tunnel-ng "^2.7.1" + +"@electron/get@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e" + integrity sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g== + dependencies: + debug "^4.1.1" + env-paths "^2.2.0" + fs-extra "^8.1.0" + got "^11.8.5" + progress "^2.0.3" + semver "^6.2.0" + sumchecker "^3.0.1" + optionalDependencies: + global-agent "^3.0.0" + +"@electron/universal@^1.2.1": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.3.4.tgz#bccd94b635d7c85eeed5eabba457eb4ed2be2777" + integrity sha512-BdhBgm2ZBnYyYRLRgOjM5VHkyFItsbggJ0MHycOjKWdFGYwK97ZFXH54dTvUWEfha81vfvwr5On6XBjt99uDcg== + dependencies: + "@electron/asar" "^3.2.1" + "@malept/cross-spawn-promise" "^1.1.0" + debug "^4.3.1" + dir-compare "^3.0.0" + fs-extra "^9.0.1" + minimatch "^3.0.4" + plist "^3.0.4" + +"@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" + integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@malept/cross-spawn-promise@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d" + integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ== + dependencies: + cross-spawn "^7.0.1" + +"@malept/cross-spawn-promise@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz#d0772de1aa680a0bfb9ba2f32b4c828c7857cb9d" + integrity sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg== + dependencies: + cross-spawn "^7.0.1" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@npmcli/fs@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/move-file@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@sentry-internal/tracing@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.53.1.tgz#85517ba93ee721424c865706f7ff4eaab1569e6d" + integrity sha512-a4H4rvVdz0XDGgNfRqc7zg6rMt2P1P05xBmgfIfztYy94Vciw1QMdboNiT7einr8ra8wogdEaK4Pe2AzYAPBJQ== + dependencies: + "@sentry/core" "7.53.1" + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + tslib "^1.9.3" + +"@sentry/browser@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.17.2.tgz#8e794b846f43a341068c83420918d896683d903e" + integrity sha512-4Ow5z9GxK5dG9+stBNKb7s6NoxE4wgEcHRmO66QTK4gH2NNmzV4R/aaZ7iDoS/lD86sH0M86jm76dpg9uiJPmw== + dependencies: + "@sentry/core" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/bundler-plugin-core@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.2.0.tgz#3d9fcc8bc7640b644218f3cbc119f5922bf54c1a" + integrity sha512-yiN1xsn82npb+4pZCQjJOIts5Ffi+rNLW9GB/kjZDtCkTCIfby5F1WPX9Ofk2MCruMguXSoc/3fi3x4tuXbFkA== + dependencies: + "@sentry/cli" "^2.17.0" + "@sentry/node" "7.53.1" + find-up "5.0.0" + glob "9.3.2" + magic-string "0.27.0" + unplugin "1.0.1" + +"@sentry/cli@^2.17.0": + version "2.18.1" + resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-2.18.1.tgz#c44f189a1a72a83087a297c5fcc7668f86dd4308" + integrity sha512-lc/dX/cvcmznWNbLzDbzxn224vwY5zLIDBe3yOO6Usg3CDgkZZ3xfjN4AIUZwkiTEPIOELodrOfdoMxqpXyYDw== + dependencies: + https-proxy-agent "^5.0.0" + node-fetch "^2.6.7" + progress "^2.0.3" + proxy-from-env "^1.1.0" + which "^2.0.2" + +"@sentry/core@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.2.tgz#f218920f269ccdbaee20a092bbc90a71a007cc88" + integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/minimal" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/core@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.53.1.tgz#c091a9d7fd010f8a2cb1dd71d949a8e453e35d4c" + integrity sha512-DAH8IJNORJJ7kQLqsZuhMkN6cwJjXzFuuUoZor7IIDHIHjtl51W+2F3Stg3+I3ZoKDfJfUNKqhipk2WZjG0FBg== + dependencies: + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + tslib "^1.9.3" + +"@sentry/electron@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sentry/electron/-/electron-3.0.0.tgz#28f1f37b599f71f7e2c8dcd8f3c4c0220a37fb11" + integrity sha512-cOjbBWaIyg4HPQ2izH1KFtrLR3YX3OJ52YeIq7H+lsZqcotnNzP4VmHehe5Jo4lWSW1RQTSxTFynPLDFM9RF9A== + dependencies: + "@sentry/browser" "6.17.2" + "@sentry/core" "6.17.2" + "@sentry/node" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + deepmerge "^4.2.2" + tslib "^2.3.1" + +"@sentry/hub@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.2.tgz#d92accada845fa21fff1b2b491d3c6964851693b" + integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g== + dependencies: + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/minimal@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.2.tgz#3b482a0d76aa33b6c9441dd21acbcc3a113e5120" + integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/types" "6.17.2" + tslib "^1.9.3" + +"@sentry/node@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.2.tgz#32a5fa00b64a331073daf1e44f500c8c57184eb1" + integrity sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ== + dependencies: + "@sentry/core" "6.17.2" + "@sentry/hub" "6.17.2" + "@sentry/tracing" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/node@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.53.1.tgz#d4c47477cf4305e352b511635d1d3d4d160e8bd7" + integrity sha512-B4ax8sRd54xj4ad+4eY2EOKNt0Mh1NjuLW1zUKS8HW3h0bmuaDFzGuhEVvEY5H4SaV6tZKj1c0dvnMnyUbYkhA== + dependencies: + "@sentry-internal/tracing" "7.53.1" + "@sentry/core" "7.53.1" + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.2.tgz#437337071fdeffa319746905b3706518b099ec6b" + integrity sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/minimal" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/types@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30" + integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ== + +"@sentry/types@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.53.1.tgz#3eefbad851f2d0deff67285d7e976d23d7d06a41" + integrity sha512-/ijchRIu+jz3+j/zY+7KRPfLSCY14fTx5xujjbOdmEKjmIHQmwPBdszcQm40uwofrR8taV4hbt5MFN+WnjCkCw== + +"@sentry/utils@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.2.tgz#e8044e753b47f86068053c8d79e4ae61a39b6732" + integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA== + dependencies: + "@sentry/types" "6.17.2" + tslib "^1.9.3" + +"@sentry/utils@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.53.1.tgz#b1f9f1dd4de7127287ad5027c2bd1133c5590486" + integrity sha512-DKJA1LSUOEv4KOR828MzVuLh+drjeAgzyKgN063OEKmnirgjgRgNNS8wUgwpG0Tn2k6ANZGCwrdfzPeSBxshKg== + dependencies: + "@sentry/types" "7.53.1" + tslib "^1.9.3" + +"@sentry/webpack-plugin@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-2.2.0.tgz#bd7a28a7132f139f74aa1068b168ab735fb9ddea" + integrity sha512-GzwoIQ2ygau0u76uKBK7gAyJAi6Te9zgJuP//OBfmJoXupm6HIUWC6RmPFy0yMlsK4gq1Ak/KziX7PZIe5NLaA== + dependencies: + "@sentry/bundler-plugin-core" "2.2.0" + unplugin "1.0.1" + uuid "^9.0.0" + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#9fd20b3974bdc2bcd4ac6567e2e0f6885cb2cf41" + integrity sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.0.tgz#ae73dc9ec5237f2794c4f79efd6a4c73b13daf23" + integrity sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": + version "4.17.35" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" + integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/http-proxy@^1.17.8": + version "1.17.11" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.11.tgz#0ca21949a5588d55ac2b659b69035c84bd5da293" + integrity sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA== + dependencies: + "@types/node" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + +"@types/minimatch@*": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + +"@types/node@*": + version "20.2.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.3.tgz#b31eb300610c3835ac008d690de6f87e28f9b878" + integrity sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw== + +"@types/node@^16.11.26": + version "16.18.32" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.32.tgz#5b5becc5da76fc055b2a601c8a3adbf13891227e" + integrity sha512-zpnXe4dEz6PrWz9u7dqyRoq9VxwCvoXRPy/ewhmMa1CgEyVmtL1NJPQ2MX+4pf97vetquVKkpiMx0MwI8pjNOw== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/send@*": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" + integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.15.1" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" + integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/ws@^8.5.1": + version "8.5.4" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" + integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== + dependencies: + "@types/node" "*" + +"@types/yauzl@^2.9.1": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== + dependencies: + "@types/node" "*" + +"@vercel/webpack-asset-relocator-loader@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@vercel/webpack-asset-relocator-loader/-/webpack-asset-relocator-loader-1.6.0.tgz#5c1359187a1f88fbf212c05ba8291bc17441e510" + integrity sha512-Iy7uTSeiYn78Gc0flRHxlBFLn32/q9i70Ss8MKO37g2fYHdCYhbLbZg1cfQ5DgXv0SQqBdWimF4Md4hcgH/jhw== + +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" + integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + +"@webassemblyjs/helper-buffer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" + integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== + +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== + +"@webassemblyjs/helper-wasm-section@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" + integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" + integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-opt" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/wast-printer" "1.11.6" + +"@webassemblyjs/wasm-gen@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" + integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" + integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" + integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" + integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abbrev@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== + +acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.2.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" + integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== + dependencies: + debug "^4.1.0" + depd "^2.0.0" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.12.3, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.9.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +asar@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/asar/-/asar-3.2.0.tgz#e6edb5edd6f627ebef04db62f771c61bea9c1221" + integrity sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg== + dependencies: + chromium-pickle-js "^0.2.0" + commander "^5.0.0" + glob "^7.1.6" + minimatch "^3.0.4" + optionalDependencies: + "@types/glob" "^7.1.1" + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +author-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450" + integrity sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1, base64-js@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird@^3.1.1, bluebird@^3.5.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.0.11: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" + integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== + dependencies: + array-flatten "^2.1.2" + dns-equal "^1.0.0" + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +boolean@^3.0.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" + integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.14.5: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-equal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90" + integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg== + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^16.1.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +caniuse-lite@^1.0.30001449: + version "1.0.30001489" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz#ca82ee2d4e4dbf2bd2589c9360d3fcc2c7ba3bd8" + integrity sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +chromium-pickle-js@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" + integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw== + +clean-css@^5.2.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" + integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" + integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +colorette@^2.0.10: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +compare-version@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" + integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cross-spawn-windows-exe@^1.1.0, cross-spawn-windows-exe@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz#46253b0f497676e766faf4a7061004618b5ac5ec" + integrity sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw== + dependencies: + "@malept/cross-spawn-promise" "^1.1.0" + is-wsl "^2.2.0" + which "^2.0.2" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.1, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@2.0.0, depd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-libc@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +dir-compare@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-3.3.0.tgz#2c749f973b5c4b5d087f11edaae730db31788416" + integrity sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg== + dependencies: + buffer-equal "^1.0.0" + minimatch "^3.0.4" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== + +dns-packet@^5.2.2: + version "5.6.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.0.tgz#2202c947845c7a63c23ece58f2f70ff6ab4c2f7d" + integrity sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-notarize@^1.1.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/electron-notarize/-/electron-notarize-1.2.2.tgz#ebf2b258e8e08c1c9f8ff61dc53d5b16b439daf4" + integrity sha512-ZStVWYcWI7g87/PgjPJSIIhwQXOaw4/XeXU+pWqMMktSLHaGMLHdyPPN7Cmao7+Cr7fYufA16npdtMndYciHNw== + dependencies: + debug "^4.1.1" + fs-extra "^9.0.1" + +electron-osx-sign@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz#fc258c5e896859904bbe3d01da06902c04b51c3a" + integrity sha512-icoRLHzFz/qxzDh/N4Pi2z4yVHurlsCAYQvsCSG7fCedJ4UJXBS6PoQyGH71IfcqKupcKeK7HX/NkyfG+v6vlQ== + dependencies: + bluebird "^3.5.0" + compare-version "^0.1.2" + debug "^2.6.8" + isbinaryfile "^3.0.2" + minimist "^1.2.0" + plist "^3.0.1" + +electron-packager@^15.4.0: + version "15.5.2" + resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-15.5.2.tgz#9864796b8af63aa87b43151d0b6990ba7093e6b8" + integrity sha512-8zUdkSONn0jomu/efqoxApGzgqIb56ooMs671HeB/BXTPnWcWvqpEY08g16PL6ok2ymA5zPj8vmUszLrq99F0Q== + dependencies: + "@electron/get" "^1.6.0" + "@electron/universal" "^1.2.1" + asar "^3.1.0" + cross-spawn-windows-exe "^1.2.0" + debug "^4.0.1" + electron-notarize "^1.1.1" + electron-osx-sign "^0.5.0" + extract-zip "^2.0.0" + filenamify "^4.1.0" + fs-extra "^10.1.0" + galactus "^0.2.1" + get-package-info "^1.0.0" + junk "^3.1.0" + parse-author "^2.0.0" + plist "^3.0.0" + rcedit "^3.0.1" + resolve "^1.1.6" + semver "^7.1.3" + yargs-parser "^20.2.9" + +electron-rebuild@^3.2.6: + version "3.2.9" + resolved "https://registry.yarnpkg.com/electron-rebuild/-/electron-rebuild-3.2.9.tgz#ea372be15f591f8d6d978ee9bca6526dadbcf20f" + integrity sha512-FkEZNFViUem3P0RLYbZkUjC8LUFIK+wKq09GHoOITSJjfDAVQv964hwaNseTTWt58sITQX3/5fHNYcTefqaCWw== + dependencies: + "@malept/cross-spawn-promise" "^2.0.0" + chalk "^4.0.0" + debug "^4.1.1" + detect-libc "^2.0.1" + fs-extra "^10.0.0" + got "^11.7.0" + lzma-native "^8.0.5" + node-abi "^3.0.0" + node-api-version "^0.1.4" + node-gyp "^9.0.0" + ora "^5.1.0" + semver "^7.3.5" + tar "^6.0.5" + yargs "^17.0.1" + +electron-squirrel-startup@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/electron-squirrel-startup/-/electron-squirrel-startup-1.0.0.tgz#19b4e55933fa0ef8f556784b9c660f772546a0b8" + integrity sha512-Oce8mvgGdFmwr+DsAcXBmFK8jFfN6yaFAP9IvyhTfupM3nFkBku/7VS/mdtJteWumImkC6P+BKGsxScoDDkv9Q== + dependencies: + debug "^2.2.0" + +electron-to-chromium@^1.4.284: + version "1.4.407" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.407.tgz#087e2ab97b3eb092aa6217c05986086b7dd370cc" + integrity sha512-5smEvFSFYMv90tICOzRVP7Opp98DAC4KW7RRipg3BuNpGbbV3N+x24Zh3sbLb1T5haGtOSy/hrBfXsWnIM9aCg== + +electron@23.0.0: + version "23.0.0" + resolved "https://registry.yarnpkg.com/electron/-/electron-23.0.0.tgz#4da457d7585149bb1a98ea8bddb286e72322a309" + integrity sha512-S6hVtTAjauMiiWP9sBVR5RpcUC464cNZ06I2EMUjeZBq+KooS6tLmNsfw0zLpAXDp1qosjlBP3v71NTZ3gd9iA== + dependencies: + "@electron/get" "^2.0.0" + "@types/node" "^16.11.26" + extract-zip "^2.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@^1.0.2, encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.14.1: + version "5.14.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3" + integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-module-lexer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" + integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== + +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== + dependencies: + homedir-polyfill "^1.0.1" + +express-ws@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/express-ws/-/express-ws-5.0.2.tgz#5b02d41b937d05199c6c266d7cc931c823bda8eb" + integrity sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ== + dependencies: + ws "^7.4.6" + +express@^4.17.1, express@^4.17.3: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extract-zip@^2.0.0, extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.7: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" + integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== + +filenamify@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106" + integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.1" + trim-repeated "^1.0.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-up@5.0.0, find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flora-colossus@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/flora-colossus/-/flora-colossus-1.0.1.tgz#aba198425a8185341e64f9d2a6a96fd9a3cbdb93" + integrity sha512-d+9na7t9FyH8gBJoNDSi28mE4NgQVGGvxQ4aHtFRetjyh5SXjuus+V5EZaxFmFdXVemSOrx0lsgEl/ZMjnOWJA== + dependencies: + debug "^4.1.1" + fs-extra "^7.0.0" + +follow-redirects@^1.0.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^10.0.0, fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-monkey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +galactus@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/galactus/-/galactus-0.2.1.tgz#cbed2d20a40c1f5679a35908e2b9415733e78db9" + integrity sha512-mDc8EQJKtxjp9PMYS3PbpjjbX3oXhBTxoGaPahw620XZBIHJ4+nvw5KN/tRtmmSDR9dypstGNvqQ3C29QGoGHQ== + dependencies: + debug "^3.1.0" + flora-colossus "^1.0.0" + fs-extra "^4.0.0" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-installed-path@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/get-installed-path/-/get-installed-path-2.1.1.tgz#a1f33dc6b8af542c9331084e8edbe37fe2634152" + integrity sha512-Qkn9eq6tW5/q9BDVdMpB8tOHljX9OSP0jRC5TRNVA4qRc839t4g8KQaR8t0Uv0EFVL0MlyG7m/ofjEgAROtYsA== + dependencies: + global-modules "1.0.0" + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + +get-package-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-package-info/-/get-package-info-1.0.0.tgz#6432796563e28113cd9474dbbd00052985a4999c" + integrity sha512-SCbprXGAPdIhKAXiG+Mk6yeoFH61JlYunqdFQFHDtLjJlDjFf6x07dsS8acO+xWt52jpdVo49AlVDnUVK1sDNw== + dependencies: + bluebird "^3.1.1" + debug "^2.2.0" + lodash.get "^4.0.0" + read-pkg-up "^2.0.0" + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@9.3.2: + version "9.3.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.2.tgz#8528522e003819e63d11c979b30896e0eaf52eda" + integrity sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA== + dependencies: + fs.realpath "^1.0.0" + minimatch "^7.4.1" + minipass "^4.2.4" + path-scurry "^1.6.1" + +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +global-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" + integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== + dependencies: + boolean "^3.0.1" + es6-error "^4.1.1" + matcher "^3.0.0" + roarr "^2.15.3" + semver "^7.3.2" + serialize-error "^7.0.1" + +global-modules@1.0.0, global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +global-tunnel-ng@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz#d03b5102dfde3a69914f5ee7d86761ca35d57d8f" + integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg== + dependencies: + encodeurl "^1.0.2" + lodash "^4.17.10" + npm-conf "^1.1.3" + tunnel "^0.0.6" + +global@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globalthis@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +got@^11.7.0, got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-webpack-plugin@^5.3.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz#826838e31b427f5f7f30971f8d8fa2422dfa6763" + integrity sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@^1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inquirer@^8.0.0: + version "8.2.5" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" + integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-windows@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isbinaryfile@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" + integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== + dependencies: + buffer-alloc "^1.2.0" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^2.1.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +junk@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" + integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +keyv@^4.0.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" + integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +launch-editor@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" + integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.7.3" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ== + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.get@^4.0.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + +lodash@^4.17.10, lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.0.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.7.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + +lru-cache@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1" + integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A== + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +lzma-native@^8.0.5: + version "8.0.6" + resolved "https://registry.yarnpkg.com/lzma-native/-/lzma-native-8.0.6.tgz#3ea456209d643bafd9b5d911781bdf0b396b2665" + integrity sha512-09xfg67mkL2Lz20PrrDeNYZxzeW7ADtpYFbwSQh9U8+76RIzx5QsJBMy8qikv3hbUPfpy6hqwxt6FcGK81g9AA== + dependencies: + node-addon-api "^3.1.0" + node-gyp-build "^4.2.1" + readable-stream "^3.6.0" + +magic-string@0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + +make-fetch-happen@^10.0.3: + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +matcher@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" + integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== + dependencies: + escape-string-regexp "^4.0.0" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +mem@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memfs@^3.4.3: + version "3.5.1" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.5.1.tgz#f0cd1e2bfaef58f6fe09bfb9c2288f07fea099ec" + integrity sha512-UWbFJKvj5k+nETdteFndTpYxdeTMox/ULeqX5k/dpaQJCCFmj5EeKv3dBcyO2xmkRAx2vppRu5dVG7SOtsGOzA== + dependencies: + fs-monkey "^1.0.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.0.0, mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + dependencies: + dom-walk "^0.1.0" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^7.4.1: + version "7.4.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" + integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.1.0, minimist@^1.2.0: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" + integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== + +minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +negotiator@0.6.3, negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-abi@^3.0.0: + version "3.40.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.40.0.tgz#51d8ed44534f70ff1357dfbc3a89717b1ceac1b4" + integrity sha512-zNy02qivjjRosswoYmPi8hIKJRr8MpQyeKT6qlcq/OnOgA3Rhoae+IYOqsM9V5+JnHWmxKnWOT2GxvtqdtOCXA== + dependencies: + semver "^7.3.5" + +node-addon-api@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + +node-api-version@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/node-api-version/-/node-api-version-0.1.4.tgz#1ed46a485e462d55d66b5aa1fe2821720dedf080" + integrity sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g== + dependencies: + semver "^7.3.5" + +node-fetch@^2.6.0, node-fetch@^2.6.7: + version "2.6.11" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" + integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-gyp-build@^4.2.1: + version "4.6.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" + integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== + +node-gyp@^9.0.0: + version "9.3.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4" + integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" + nopt "^6.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/node-loader/-/node-loader-2.0.0.tgz#9109a6d828703fd3e0aa03c1baec12a798071562" + integrity sha512-I5VN34NO4/5UYJaUBtkrODPWxbobrE4hgDqPrjB25yPkonFhCmZ146vTH+Zg417E9Iwoh1l/MbRs1apc5J295Q== + dependencies: + loader-utils "^2.0.0" + +node-releases@^2.0.8: + version "2.0.12" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" + integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== + +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.0.0" + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-conf@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" + integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +nugget@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.2.0.tgz#ad6feeeda912dfe839e35efe713bc1ce67f1f5b6" + integrity sha512-I4Yt4dRPes82Tx/s7qDn8z1cA2pmZy2bOJiTdcb/BZJ1LJkEYd9GqunQD37unPUPjdmW6dkkVZmxN+8Gxt6Xlg== + dependencies: + debug "^2.1.3" + minimist "^1.1.0" + pretty-bytes "^4.0.2" + progress-stream "^1.1.0" + request "^2.45.0" + single-line-log "^1.1.2" + throttleit "0.0.2" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.9, open@^8.1.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +ora@^5.0.0, ora@^5.1.0, ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parse-author@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-author/-/parse-author-2.0.0.tgz#d3460bf1ddd0dfaeed42da754242e65fb684a81f" + integrity sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw== + dependencies: + author-regex "^1.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== + dependencies: + error-ex "^1.2.0" + +parse-ms@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" + integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.6.1: + version "1.9.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63" + integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg== + dependencies: + lru-cache "^9.1.1" + minipass "^5.0.0 || ^6.0.2" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ== + dependencies: + pify "^2.0.0" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +plist@^3.0.0, plist@^3.0.1, plist@^3.0.4: + version "3.0.6" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.6.tgz#7cfb68a856a7834bca6dbfe3218eb9c7740145d3" + integrity sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA== + dependencies: + base64-js "^1.5.1" + xmlbuilder "^15.1.1" + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + +pretty-bytes@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" + integrity sha512-yJAF+AjbHKlxQ8eezMd/34Mnj/YTQ3i6kLzvVsH4l/BfIFtp444n0wVbnsn66JimZ9uBofv815aRp1zCppxlWw== + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +pretty-ms@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" + integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== + dependencies: + parse-ms "^2.1.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +progress-stream@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-1.2.0.tgz#2cd3cfea33ba3a89c9c121ec3347abe9ab125f77" + integrity sha512-MIBPjZz6oGNSw5rn2mSp+nP9FGoaVo6QsPyPVEaD4puilz5hZNa3kfnrlqRNYFsugslbU3An4mnkLLtZOaWvrA== + dependencies: + speedometer "~0.1.2" + through2 "~0.2.3" + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +psl@^1.1.28: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rcedit@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-3.0.1.tgz#ae21b43e49c075f4d84df1929832a12c302f3c90" + integrity sha512-XM0Jv40/y4hVAqj/MO70o/IWs4uOsaSoo2mLyk3klFDW+SStLnCtzuQu+1OBTIMGlM8CvaK9ftlYCp6DJ+cMsw== + dependencies: + cross-spawn-windows-exe "^1.1.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w== + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA== + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@^2.0.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +request@^2.45.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-dir@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-package@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-package/-/resolve-package-1.0.1.tgz#686f70b188bd7d675f5bbc4282ccda060abb9d27" + integrity sha512-rzB7NnQpOkPHBWFPP3prUMqOP6yg3HkRGgcvR+lDyvyHoY3fZLFLYDkPXh78SPVBAE6VTCk/V+j8we4djg6o4g== + dependencies: + get-installed-path "^2.0.3" + +resolve@^1.1.6, resolve@^1.10.0: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +roarr@^2.15.3: + version "2.15.4" + resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" + integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== + dependencies: + boolean "^3.0.1" + detect-node "^2.0.4" + globalthis "^1.0.1" + json-stringify-safe "^5.0.1" + semver-compare "^1.0.0" + sprintf-js "^1.1.2" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.5: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +schema-utils@^3.1.1, schema-utils@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" + integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.1.tgz#eb2d042df8b01f4b5c276a2dfd41ba0faab72e8d" + integrity sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" + integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== + dependencies: + node-forge "^1" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== + +"semver@2 || 3 || 4 || 5", semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.5: + version "7.5.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" + integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-error@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" + integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== + dependencies: + type-fest "^0.13.1" + +serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +single-line-log@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364" + integrity sha512-awzaaIPtYFdexLr6TBpcZSGPB6D1RInNO/qNetgaJloPDF/D0GkVtLvGEp8InfmLV7CyLyQ5fIRP+tVN/JmWQA== + dependencies: + string-width "^1.0.1" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +source-map-support@^0.5.13, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.13" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +speedometer@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d" + integrity sha512-phdEoDlA6EUIVtzwq1UiNMXDUogczp204aYF/yfOhjNePWFfIpBJ1k5wLMuXQhEOOMjuTJEcc4vdZa+vuP+n/Q== + +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +sshpk@^1.7.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-outer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + +sudo-prompt@^9.1.1: + version "9.2.1" + resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd" + integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw== + +sumchecker@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" + integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== + dependencies: + debug "^4.1.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar@^6.0.5, tar@^6.1.11, tar@^6.1.2: + version "6.1.15" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" + integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +terser-webpack-plugin@^5.3.7: + version "5.3.9" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" + integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.17" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.16.8" + +terser@^5.10.0, terser@^5.16.8: + version "5.17.6" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.6.tgz#d810e75e1bb3350c799cd90ebefe19c9412c12de" + integrity sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +throttleit@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf" + integrity sha512-HtlTFeyYs1elDM2txiIGsdXHaq8kffVaZH/QEBRbo95zQqzlsBx5ELKhkPOZVad9OK9oxzwx6UrQN8Vfh/+yag== + +through2@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f" + integrity sha512-mLa8Bn2mZurjyomGKWRu3Bo2mvoQojFks9NvOK8H+k4kDJNkdEqG522KFZsEFBEl6rKkxTgFbE5+OPcgfvPEHA== + dependencies: + readable-stream "~1.1.9" + xtend "~2.1.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== + dependencies: + escape-string-regexp "^1.0.2" + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" + integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tunnel@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" + integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unplugin@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.0.1.tgz#83b528b981cdcea1cad422a12cd02e695195ef3f" + integrity sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA== + dependencies: + acorn "^8.8.1" + chokidar "^3.5.3" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.5.0" + +update-browserslist-db@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + +username@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/username/-/username-5.1.0.tgz#a7f9325adce2d0166448cdd55d4985b1360f2508" + integrity sha512-PCKbdWw85JsYMvmCv5GH3kXmM66rCd9m1hBEDutPNv94b/pqCMT4NtcKyeWYvLFiE8b+ha1Jdl8XAaUdPn5QTg== + dependencies: + execa "^1.0.0" + mem "^4.3.0" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.0.0: + version "4.15.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz#87ba9006eca53c551607ea0d663f4ae88be7af21" + integrity sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.13.0" + +webpack-merge@^5.7.3: + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack-virtual-modules@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" + integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== + +webpack@^5.37.0: + version "5.84.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.84.0.tgz#011115617668744aece87a9eb68534487d84de1a" + integrity sha512-XezNK3kwJq6IyeoZmZ1uEqQs+42nTqIi4jYM/YjLwaJedUC1N3bwnCC0+UcnHJPfqWX0kGrQnMIvZZyWYaIZrA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" + acorn "^8.7.1" + acorn-import-assertions "^1.9.0" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.14.1" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.2" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.7" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^1.2.14, which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +xmlbuilder@^15.1.1: + version "15.1.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" + integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== + +xtend@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ== + dependencies: + object-keys "~0.4.0" + +xterm-addon-fit@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/xterm-addon-fit/-/xterm-addon-fit-0.5.0.tgz#2d51b983b786a97dcd6cde805e700c7f913bc596" + integrity sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ== + +xterm-addon-search@^0.8.0: + version "0.8.2" + resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.8.2.tgz#be7aa74d5ff12c901707c6ff674229f214318032" + integrity sha512-I1863mjn8P6uVrqm/X+btalVsqjAKLhnhpbP7SavAOpEkI1jJhbHU2UTp7NjeRtcKTks6UWk/ycgds5snDSejg== + +xterm@^4.9.0: + version "4.19.0" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.19.0.tgz#c0f9d09cd61de1d658f43ca75f992197add9ef6d" + integrity sha512-c3Cp4eOVsYY5Q839dR5IejghRPpxciGmLWWaP9g+ppfMeBChMeLa1DCA+pmX/jyDZ+zxFOmlJL/82qVdayVoGQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^20.2.9: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.0.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yarn-or-npm@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/yarn-or-npm/-/yarn-or-npm-3.0.1.tgz#6336eea4dff7e23e226acc98c1a8ada17a1b8666" + integrity sha512-fTiQP6WbDAh5QZAVdbMQkecZoahnbOjClTQhzv74WX5h2Uaidj1isf9FDes11TKtsZ0/ZVfZsqZ+O3x6aLERHQ== + dependencies: + cross-spawn "^6.0.5" + pkg-dir "^4.2.0" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/examples/electron-vite/event.json b/examples/electron-vite/event.json index 3c7b1401..f500f344 100644 --- a/examples/electron-vite/event.json +++ b/examples/electron-vite/event.json @@ -58,6 +58,14 @@ "user": { "ip_address": "{{auto}}" }, + "debug_meta": { + "images": [ + { + "code_file": "app:///dist/renderer/index.js", + "type": "sourcemap" + } + ] + }, "exception": { "values": [ { diff --git a/examples/electron-vite/package.json b/examples/electron-vite/package.json index 6051ae5d..12cd405c 100644 --- a/examples/electron-vite/package.json +++ b/examples/electron-vite/package.json @@ -3,19 +3,20 @@ "version": "1.0.0", "main": "dist/main/index.js", "scripts": { - "build":"yarn run build:main && yarn run build:renderer", + "build": "yarn run build:main && yarn run build:renderer", "build:main": "vite build --config vite.config.main.js", "build:renderer": "vite build --config vite.config.renderer.js" }, "dependencies": { - "electron-squirrel-startup": "^1.0.0", "@sentry/electron": "3.0.0", - "@sentry/vue": "7.15.0", + "@sentry/vite-plugin": "^2.2.0", + "@sentry/vue": "7.53.1", + "electron-squirrel-startup": "^1.0.0", "vue": "^3.2.40" }, "devDependencies": { "@vitejs/plugin-vue": "^3.1.2", - "vite": "^3.1.8", - "electron": "23.0.0" + "electron": "23.0.0", + "vite": "^3.1.8" } } diff --git a/examples/electron-vite/vite.config.main.js b/examples/electron-vite/vite.config.main.js index e31a90c2..ec076c1f 100644 --- a/examples/electron-vite/vite.config.main.js +++ b/examples/electron-vite/vite.config.main.js @@ -1,5 +1,6 @@ import { join } from 'path'; import { builtinModules } from 'module'; +import { sentryVitePlugin } from '@sentry/vite-plugin'; const PACKAGE_ROOT = __dirname; @@ -12,6 +13,24 @@ const config = { '/@/': `${join(PACKAGE_ROOT, 'src')}/`, }, }, + plugins: [ + sentryVitePlugin({ + authToken: 'some invalid auth token', + org: 'some invalid org', + project: 'some invalid project', + telemetry: false, + sourcemaps: { + assets: [], // no assets to upload - we just care about injecting debug IDs + }, + release: { + inject: false, + }, + errorHandler() { + // do nothing on errors :) + // They will happen because of the invalid auth token + }, + }), + ], build: { target: `node8`, outDir: 'dist/main', diff --git a/examples/electron-vite/vite.config.renderer.js b/examples/electron-vite/vite.config.renderer.js index 14b8eb38..0fd7727f 100644 --- a/examples/electron-vite/vite.config.renderer.js +++ b/examples/electron-vite/vite.config.renderer.js @@ -1,5 +1,6 @@ import { join } from 'path'; import vue from '@vitejs/plugin-vue'; +import { sentryVitePlugin } from '@sentry/vite-plugin'; const PACKAGE_ROOT = __dirname; @@ -17,7 +18,25 @@ const config = { strict: true, }, }, - plugins: [vue()], + plugins: [ + vue(), + sentryVitePlugin({ + authToken: 'some invalid auth token', + org: 'some invalid org', + project: 'some invalid project', + telemetry: false, + sourcemaps: { + assets: [], // no assets to upload - we just care about injecting debug IDs + }, + release: { + inject: false, + }, + errorHandler() { + // do nothing on errors :) + // They will happen because of the invalid auth token + }, + }), + ], build: { sourcemap: true, target: `chrome61`, @@ -25,6 +44,11 @@ const config = { assetsDir: '.', emptyOutDir: true, brotliSize: false, + rollupOptions: { + output: { + entryFileNames: '[name].js', + }, + }, }, }; diff --git a/examples/electron-vite/yarn.lock b/examples/electron-vite/yarn.lock new file mode 100644 index 00000000..586ad2d5 --- /dev/null +++ b/examples/electron-vite/yarn.lock @@ -0,0 +1,1363 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/parser@^7.20.15", "@babel/parser@^7.21.3": + version "7.21.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.9.tgz#ab18ea3b85b4bc33ba98a8d4c2032c557d23cf14" + integrity sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g== + +"@electron/get@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e" + integrity sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g== + dependencies: + debug "^4.1.1" + env-paths "^2.2.0" + fs-extra "^8.1.0" + got "^11.8.5" + progress "^2.0.3" + semver "^6.2.0" + sumchecker "^3.0.1" + optionalDependencies: + global-agent "^3.0.0" + +"@esbuild/android-arm@0.15.18": + version "0.15.18" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.18.tgz#266d40b8fdcf87962df8af05b76219bc786b4f80" + integrity sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw== + +"@esbuild/linux-loong64@0.15.18": + version "0.15.18" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz#128b76ecb9be48b60cf5cfc1c63a4f00691a3239" + integrity sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ== + +"@jridgewell/sourcemap-codec@^1.4.13": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@sentry-internal/tracing@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.53.1.tgz#85517ba93ee721424c865706f7ff4eaab1569e6d" + integrity sha512-a4H4rvVdz0XDGgNfRqc7zg6rMt2P1P05xBmgfIfztYy94Vciw1QMdboNiT7einr8ra8wogdEaK4Pe2AzYAPBJQ== + dependencies: + "@sentry/core" "7.53.1" + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + tslib "^1.9.3" + +"@sentry/browser@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.17.2.tgz#8e794b846f43a341068c83420918d896683d903e" + integrity sha512-4Ow5z9GxK5dG9+stBNKb7s6NoxE4wgEcHRmO66QTK4gH2NNmzV4R/aaZ7iDoS/lD86sH0M86jm76dpg9uiJPmw== + dependencies: + "@sentry/core" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/browser@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.53.1.tgz#1efd94cd9a56360fc401b99043eeaaac3da2e70e" + integrity sha512-1zas2R6riJaj0k7FoeieCW0SuC7UyKaBGA6jEG2LsgIqyD7IDOlF3BPZ4Yt08GFav0ImpyhGn5Vbrq5JLbeQdw== + dependencies: + "@sentry-internal/tracing" "7.53.1" + "@sentry/core" "7.53.1" + "@sentry/replay" "7.53.1" + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + tslib "^1.9.3" + +"@sentry/bundler-plugin-core@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.2.0.tgz#3d9fcc8bc7640b644218f3cbc119f5922bf54c1a" + integrity sha512-yiN1xsn82npb+4pZCQjJOIts5Ffi+rNLW9GB/kjZDtCkTCIfby5F1WPX9Ofk2MCruMguXSoc/3fi3x4tuXbFkA== + dependencies: + "@sentry/cli" "^2.17.0" + "@sentry/node" "7.53.1" + find-up "5.0.0" + glob "9.3.2" + magic-string "0.27.0" + unplugin "1.0.1" + +"@sentry/cli@^2.17.0": + version "2.18.1" + resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-2.18.1.tgz#c44f189a1a72a83087a297c5fcc7668f86dd4308" + integrity sha512-lc/dX/cvcmznWNbLzDbzxn224vwY5zLIDBe3yOO6Usg3CDgkZZ3xfjN4AIUZwkiTEPIOELodrOfdoMxqpXyYDw== + dependencies: + https-proxy-agent "^5.0.0" + node-fetch "^2.6.7" + progress "^2.0.3" + proxy-from-env "^1.1.0" + which "^2.0.2" + +"@sentry/core@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.2.tgz#f218920f269ccdbaee20a092bbc90a71a007cc88" + integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/minimal" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/core@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.53.1.tgz#c091a9d7fd010f8a2cb1dd71d949a8e453e35d4c" + integrity sha512-DAH8IJNORJJ7kQLqsZuhMkN6cwJjXzFuuUoZor7IIDHIHjtl51W+2F3Stg3+I3ZoKDfJfUNKqhipk2WZjG0FBg== + dependencies: + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + tslib "^1.9.3" + +"@sentry/electron@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sentry/electron/-/electron-3.0.0.tgz#28f1f37b599f71f7e2c8dcd8f3c4c0220a37fb11" + integrity sha512-cOjbBWaIyg4HPQ2izH1KFtrLR3YX3OJ52YeIq7H+lsZqcotnNzP4VmHehe5Jo4lWSW1RQTSxTFynPLDFM9RF9A== + dependencies: + "@sentry/browser" "6.17.2" + "@sentry/core" "6.17.2" + "@sentry/node" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + deepmerge "^4.2.2" + tslib "^2.3.1" + +"@sentry/hub@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.2.tgz#d92accada845fa21fff1b2b491d3c6964851693b" + integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g== + dependencies: + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/minimal@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.2.tgz#3b482a0d76aa33b6c9441dd21acbcc3a113e5120" + integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/types" "6.17.2" + tslib "^1.9.3" + +"@sentry/node@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.2.tgz#32a5fa00b64a331073daf1e44f500c8c57184eb1" + integrity sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ== + dependencies: + "@sentry/core" "6.17.2" + "@sentry/hub" "6.17.2" + "@sentry/tracing" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/node@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.53.1.tgz#d4c47477cf4305e352b511635d1d3d4d160e8bd7" + integrity sha512-B4ax8sRd54xj4ad+4eY2EOKNt0Mh1NjuLW1zUKS8HW3h0bmuaDFzGuhEVvEY5H4SaV6tZKj1c0dvnMnyUbYkhA== + dependencies: + "@sentry-internal/tracing" "7.53.1" + "@sentry/core" "7.53.1" + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/replay@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.53.1.tgz#543272827d3ca034c62b0a822503d0a57c9229e7" + integrity sha512-5He5JLJiYLeWtXHC53z2ZzfbgAedafbHNZVS4+MBCOtydCk7cnuyJ0gGV6Rfxej/lZSNXZxOdW7HeMhzBtZCxw== + dependencies: + "@sentry/core" "7.53.1" + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + +"@sentry/tracing@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.2.tgz#437337071fdeffa319746905b3706518b099ec6b" + integrity sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/minimal" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/types@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30" + integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ== + +"@sentry/types@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.53.1.tgz#3eefbad851f2d0deff67285d7e976d23d7d06a41" + integrity sha512-/ijchRIu+jz3+j/zY+7KRPfLSCY14fTx5xujjbOdmEKjmIHQmwPBdszcQm40uwofrR8taV4hbt5MFN+WnjCkCw== + +"@sentry/utils@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.2.tgz#e8044e753b47f86068053c8d79e4ae61a39b6732" + integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA== + dependencies: + "@sentry/types" "6.17.2" + tslib "^1.9.3" + +"@sentry/utils@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.53.1.tgz#b1f9f1dd4de7127287ad5027c2bd1133c5590486" + integrity sha512-DKJA1LSUOEv4KOR828MzVuLh+drjeAgzyKgN063OEKmnirgjgRgNNS8wUgwpG0Tn2k6ANZGCwrdfzPeSBxshKg== + dependencies: + "@sentry/types" "7.53.1" + tslib "^1.9.3" + +"@sentry/vite-plugin@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@sentry/vite-plugin/-/vite-plugin-2.2.0.tgz#658b936dc1fd17502a75c16db0bdda1d169da708" + integrity sha512-4J7MHLZ10o8jf2SM7ug2XfgoSgUrF32mobmEIA10d4jk8JTk4hvWvkxC+2HUF4ecHCMrtViwRTUZLbIzarVkmA== + dependencies: + "@sentry/bundler-plugin-core" "2.2.0" + unplugin "1.0.1" + +"@sentry/vue@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/vue/-/vue-7.53.1.tgz#d23bf60d54c7ab68ecea31592d8acbdee01a7750" + integrity sha512-E8KY02a6yDSkvnNOfDFe5K5h6sNoRS1sdEpe4hVfnW7m3wXDvLa2ipTwrlljokCp1sY2xQm5TL9whsNJXlR2KQ== + dependencies: + "@sentry/browser" "7.53.1" + "@sentry/core" "7.53.1" + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + tslib "^1.9.3" + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "20.2.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.3.tgz#b31eb300610c3835ac008d690de6f87e28f9b878" + integrity sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw== + +"@types/node@^16.11.26": + version "16.18.32" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.32.tgz#5b5becc5da76fc055b2a601c8a3adbf13891227e" + integrity sha512-zpnXe4dEz6PrWz9u7dqyRoq9VxwCvoXRPy/ewhmMa1CgEyVmtL1NJPQ2MX+4pf97vetquVKkpiMx0MwI8pjNOw== + +"@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +"@types/yauzl@^2.9.1": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== + dependencies: + "@types/node" "*" + +"@vitejs/plugin-vue@^3.1.2": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz#a1484089dd85d6528f435743f84cdd0d215bbb54" + integrity sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw== + +"@vue/compiler-core@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz#7fbf591c1c19e1acd28ffd284526e98b4f581128" + integrity sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g== + dependencies: + "@babel/parser" "^7.21.3" + "@vue/shared" "3.3.4" + estree-walker "^2.0.2" + source-map-js "^1.0.2" + +"@vue/compiler-dom@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz#f56e09b5f4d7dc350f981784de9713d823341151" + integrity sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w== + dependencies: + "@vue/compiler-core" "3.3.4" + "@vue/shared" "3.3.4" + +"@vue/compiler-sfc@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz#b19d942c71938893535b46226d602720593001df" + integrity sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ== + dependencies: + "@babel/parser" "^7.20.15" + "@vue/compiler-core" "3.3.4" + "@vue/compiler-dom" "3.3.4" + "@vue/compiler-ssr" "3.3.4" + "@vue/reactivity-transform" "3.3.4" + "@vue/shared" "3.3.4" + estree-walker "^2.0.2" + magic-string "^0.30.0" + postcss "^8.1.10" + source-map-js "^1.0.2" + +"@vue/compiler-ssr@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz#9d1379abffa4f2b0cd844174ceec4a9721138777" + integrity sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ== + dependencies: + "@vue/compiler-dom" "3.3.4" + "@vue/shared" "3.3.4" + +"@vue/reactivity-transform@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz#52908476e34d6a65c6c21cd2722d41ed8ae51929" + integrity sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw== + dependencies: + "@babel/parser" "^7.20.15" + "@vue/compiler-core" "3.3.4" + "@vue/shared" "3.3.4" + estree-walker "^2.0.2" + magic-string "^0.30.0" + +"@vue/reactivity@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.4.tgz#a27a29c6cd17faba5a0e99fbb86ee951653e2253" + integrity sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ== + dependencies: + "@vue/shared" "3.3.4" + +"@vue/runtime-core@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.4.tgz#4bb33872bbb583721b340f3088888394195967d1" + integrity sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA== + dependencies: + "@vue/reactivity" "3.3.4" + "@vue/shared" "3.3.4" + +"@vue/runtime-dom@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz#992f2579d0ed6ce961f47bbe9bfe4b6791251566" + integrity sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ== + dependencies: + "@vue/runtime-core" "3.3.4" + "@vue/shared" "3.3.4" + csstype "^3.1.1" + +"@vue/server-renderer@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.4.tgz#ea46594b795d1536f29bc592dd0f6655f7ea4c4c" + integrity sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ== + dependencies: + "@vue/compiler-ssr" "3.3.4" + "@vue/shared" "3.3.4" + +"@vue/shared@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.4.tgz#06e83c5027f464eef861c329be81454bc8b70780" + integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ== + +acorn@^8.8.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +boolean@^3.0.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" + integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +csstype@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + +debug@4, debug@^4.1.0, debug@^4.1.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +define-properties@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +electron-squirrel-startup@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/electron-squirrel-startup/-/electron-squirrel-startup-1.0.0.tgz#19b4e55933fa0ef8f556784b9c660f772546a0b8" + integrity sha512-Oce8mvgGdFmwr+DsAcXBmFK8jFfN6yaFAP9IvyhTfupM3nFkBku/7VS/mdtJteWumImkC6P+BKGsxScoDDkv9Q== + dependencies: + debug "^2.2.0" + +electron@23.0.0: + version "23.0.0" + resolved "https://registry.yarnpkg.com/electron/-/electron-23.0.0.tgz#4da457d7585149bb1a98ea8bddb286e72322a309" + integrity sha512-S6hVtTAjauMiiWP9sBVR5RpcUC464cNZ06I2EMUjeZBq+KooS6tLmNsfw0zLpAXDp1qosjlBP3v71NTZ3gd9iA== + dependencies: + "@electron/get" "^2.0.0" + "@types/node" "^16.11.26" + extract-zip "^2.0.1" + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +esbuild-android-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz#20a7ae1416c8eaade917fb2453c1259302c637a5" + integrity sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA== + +esbuild-android-arm64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz#9cc0ec60581d6ad267568f29cf4895ffdd9f2f04" + integrity sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ== + +esbuild-darwin-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz#428e1730ea819d500808f220fbc5207aea6d4410" + integrity sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg== + +esbuild-darwin-arm64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz#b6dfc7799115a2917f35970bfbc93ae50256b337" + integrity sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA== + +esbuild-freebsd-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz#4e190d9c2d1e67164619ae30a438be87d5eedaf2" + integrity sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA== + +esbuild-freebsd-arm64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz#18a4c0344ee23bd5a6d06d18c76e2fd6d3f91635" + integrity sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA== + +esbuild-linux-32@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz#9a329731ee079b12262b793fb84eea762e82e0ce" + integrity sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg== + +esbuild-linux-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz#532738075397b994467b514e524aeb520c191b6c" + integrity sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw== + +esbuild-linux-arm64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz#5372e7993ac2da8f06b2ba313710d722b7a86e5d" + integrity sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug== + +esbuild-linux-arm@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz#e734aaf259a2e3d109d4886c9e81ec0f2fd9a9cc" + integrity sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA== + +esbuild-linux-mips64le@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz#c0487c14a9371a84eb08fab0e1d7b045a77105eb" + integrity sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ== + +esbuild-linux-ppc64le@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz#af048ad94eed0ce32f6d5a873f7abe9115012507" + integrity sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w== + +esbuild-linux-riscv64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz#423ed4e5927bd77f842bd566972178f424d455e6" + integrity sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg== + +esbuild-linux-s390x@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz#21d21eaa962a183bfb76312e5a01cc5ae48ce8eb" + integrity sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ== + +esbuild-netbsd-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz#ae75682f60d08560b1fe9482bfe0173e5110b998" + integrity sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg== + +esbuild-openbsd-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz#79591a90aa3b03e4863f93beec0d2bab2853d0a8" + integrity sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ== + +esbuild-sunos-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz#fd528aa5da5374b7e1e93d36ef9b07c3dfed2971" + integrity sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw== + +esbuild-windows-32@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz#0e92b66ecdf5435a76813c4bc5ccda0696f4efc3" + integrity sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ== + +esbuild-windows-64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz#0fc761d785414284fc408e7914226d33f82420d0" + integrity sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw== + +esbuild-windows-arm64@0.15.18: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz#5b5bdc56d341d0922ee94965c89ee120a6a86eb7" + integrity sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ== + +esbuild@^0.15.9: + version "0.15.18" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.18.tgz#ea894adaf3fbc036d32320a00d4d6e4978a2f36d" + integrity sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q== + optionalDependencies: + "@esbuild/android-arm" "0.15.18" + "@esbuild/linux-loong64" "0.15.18" + esbuild-android-64 "0.15.18" + esbuild-android-arm64 "0.15.18" + esbuild-darwin-64 "0.15.18" + esbuild-darwin-arm64 "0.15.18" + esbuild-freebsd-64 "0.15.18" + esbuild-freebsd-arm64 "0.15.18" + esbuild-linux-32 "0.15.18" + esbuild-linux-64 "0.15.18" + esbuild-linux-arm "0.15.18" + esbuild-linux-arm64 "0.15.18" + esbuild-linux-mips64le "0.15.18" + esbuild-linux-ppc64le "0.15.18" + esbuild-linux-riscv64 "0.15.18" + esbuild-linux-s390x "0.15.18" + esbuild-netbsd-64 "0.15.18" + esbuild-openbsd-64 "0.15.18" + esbuild-sunos-64 "0.15.18" + esbuild-windows-32 "0.15.18" + esbuild-windows-64 "0.15.18" + esbuild-windows-arm64 "0.15.18" + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-intrinsic@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@9.3.2: + version "9.3.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.2.tgz#8528522e003819e63d11c979b30896e0eaf52eda" + integrity sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA== + dependencies: + fs.realpath "^1.0.0" + minimatch "^7.4.1" + minipass "^4.2.4" + path-scurry "^1.6.1" + +global-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" + integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== + dependencies: + boolean "^3.0.1" + es6-error "^4.1.1" + matcher "^3.0.0" + roarr "^2.15.3" + semver "^7.3.2" + serialize-error "^7.0.1" + +globalthis@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^4.0.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" + integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== + dependencies: + json-buffer "3.0.1" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1" + integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A== + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +magic-string@0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + +magic-string@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.0.tgz#fd58a4748c5c4547338a424e90fa5dd17f4de529" + integrity sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + +matcher@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" + integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== + dependencies: + escape-string-regexp "^4.0.0" + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@^7.4.1: + version "7.4.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" + integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== + dependencies: + brace-expansion "^2.0.1" + +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +"minipass@^5.0.0 || ^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" + integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + +node-fetch@^2.6.7: + version "2.6.11" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" + integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== + dependencies: + whatwg-url "^5.0.0" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.6.1: + version "1.9.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63" + integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg== + dependencies: + lru-cache "^9.1.1" + minipass "^5.0.0 || ^6.0.2" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +postcss@^8.1.10, postcss@^8.4.18: + version "8.4.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" + integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve@^1.22.1: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +roarr@^2.15.3: + version "2.15.4" + resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" + integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== + dependencies: + boolean "^3.0.1" + detect-node "^2.0.4" + globalthis "^1.0.1" + json-stringify-safe "^5.0.1" + semver-compare "^1.0.0" + sprintf-js "^1.1.2" + +rollup@^2.79.1: + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== + optionalDependencies: + fsevents "~2.3.2" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== + +semver@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2: + version "7.5.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" + integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== + dependencies: + lru-cache "^6.0.0" + +serialize-error@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" + integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== + dependencies: + type-fest "^0.13.1" + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +sumchecker@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" + integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== + dependencies: + debug "^4.1.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.3.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" + integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unplugin@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.0.1.tgz#83b528b981cdcea1cad422a12cd02e695195ef3f" + integrity sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA== + dependencies: + acorn "^8.8.1" + chokidar "^3.5.3" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.5.0" + +vite@^3.1.8: + version "3.2.6" + resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.6.tgz#a0538710e69532225d9c0ba6a23f4158b51267fd" + integrity sha512-nTXTxYVvaQNLoW5BQ8PNNQ3lPia57gzsQU/Khv+JvzKPku8kNZL6NMUR/qwXhMG6E+g1idqEPanomJ+VZgixEg== + dependencies: + esbuild "^0.15.9" + postcss "^8.4.18" + resolve "^1.22.1" + rollup "^2.79.1" + optionalDependencies: + fsevents "~2.3.2" + +vue@^3.2.40: + version "3.3.4" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.4.tgz#8ed945d3873667df1d0fcf3b2463ada028f88bd6" + integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw== + dependencies: + "@vue/compiler-dom" "3.3.4" + "@vue/compiler-sfc" "3.3.4" + "@vue/runtime-dom" "3.3.4" + "@vue/server-renderer" "3.3.4" + "@vue/shared" "3.3.4" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack-virtual-modules@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" + integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/examples/webpack-context-isolation-preload/event.json b/examples/webpack-context-isolation-preload/event.json index 61d37b24..ee81c538 100644 --- a/examples/webpack-context-isolation-preload/event.json +++ b/examples/webpack-context-isolation-preload/event.json @@ -59,6 +59,14 @@ "ip_address": "{{auto}}", "id": "abc-123" }, + "debug_meta": { + "images": [ + { + "code_file": "app:///dist/renderer.js", + "type": "sourcemap" + } + ] + }, "exception": { "values": [ { diff --git a/examples/webpack-context-isolation-preload/package.json b/examples/webpack-context-isolation-preload/package.json index 5837b7d2..9789ae56 100644 --- a/examples/webpack-context-isolation-preload/package.json +++ b/examples/webpack-context-isolation-preload/package.json @@ -7,10 +7,11 @@ }, "main": "dist/main.js", "devDependencies": { + "@sentry/webpack-plugin": "^2.2.0", "html-webpack-plugin": "^5.3.2", + "warnings-to-errors-webpack-plugin": "^2.0.1", "webpack": "^5.48.0", - "webpack-cli": "^4.7.2", - "warnings-to-errors-webpack-plugin": "^2.0.1" + "webpack-cli": "^4.7.2" }, "dependencies": { "@sentry/electron": "3.0.0" diff --git a/examples/webpack-context-isolation-preload/webpack.config.js b/examples/webpack-context-isolation-preload/webpack.config.js index c9f420ea..167d7e64 100644 --- a/examples/webpack-context-isolation-preload/webpack.config.js +++ b/examples/webpack-context-isolation-preload/webpack.config.js @@ -1,5 +1,23 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); const WarningsToErrorsPlugin = require('warnings-to-errors-webpack-plugin'); +const { sentryWebpackPlugin } = require('@sentry/webpack-plugin'); + +const sentryWebpackPluginOptions = { + authToken: 'some invalid auth token', + org: 'some invalid org', + project: 'some invalid project', + telemetry: false, + sourcemaps: { + assets: [], // no assets to upload - we just care about injecting debug IDs + }, + release: { + inject: false, + }, + errorHandler() { + // do nothing on errors :) + // They will happen because of the invalid auth token + }, +}; module.exports = [ { @@ -10,7 +28,7 @@ module.exports = [ libraryTarget: 'commonjs2', filename: 'main.js', }, - plugins: [new WarningsToErrorsPlugin()], + plugins: [new WarningsToErrorsPlugin(), sentryWebpackPlugin(sentryWebpackPluginOptions)], }, { mode: 'production', @@ -19,7 +37,7 @@ module.exports = [ output: { filename: 'preload.js', }, - plugins: [new WarningsToErrorsPlugin()], + plugins: [new WarningsToErrorsPlugin(), sentryWebpackPlugin(sentryWebpackPluginOptions)], }, { mode: 'production', @@ -28,6 +46,6 @@ module.exports = [ output: { filename: 'renderer.js', }, - plugins: [new HtmlWebpackPlugin(), new WarningsToErrorsPlugin()], + plugins: [new HtmlWebpackPlugin(), new WarningsToErrorsPlugin(), sentryWebpackPlugin(sentryWebpackPluginOptions)], }, ]; diff --git a/examples/webpack-context-isolation-preload/yarn.lock b/examples/webpack-context-isolation-preload/yarn.lock new file mode 100644 index 00000000..1d1506de --- /dev/null +++ b/examples/webpack-context-isolation-preload/yarn.lock @@ -0,0 +1,1496 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" + integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@sentry-internal/tracing@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.53.1.tgz#85517ba93ee721424c865706f7ff4eaab1569e6d" + integrity sha512-a4H4rvVdz0XDGgNfRqc7zg6rMt2P1P05xBmgfIfztYy94Vciw1QMdboNiT7einr8ra8wogdEaK4Pe2AzYAPBJQ== + dependencies: + "@sentry/core" "7.53.1" + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + tslib "^1.9.3" + +"@sentry/browser@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.17.2.tgz#8e794b846f43a341068c83420918d896683d903e" + integrity sha512-4Ow5z9GxK5dG9+stBNKb7s6NoxE4wgEcHRmO66QTK4gH2NNmzV4R/aaZ7iDoS/lD86sH0M86jm76dpg9uiJPmw== + dependencies: + "@sentry/core" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/bundler-plugin-core@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.2.0.tgz#3d9fcc8bc7640b644218f3cbc119f5922bf54c1a" + integrity sha512-yiN1xsn82npb+4pZCQjJOIts5Ffi+rNLW9GB/kjZDtCkTCIfby5F1WPX9Ofk2MCruMguXSoc/3fi3x4tuXbFkA== + dependencies: + "@sentry/cli" "^2.17.0" + "@sentry/node" "7.53.1" + find-up "5.0.0" + glob "9.3.2" + magic-string "0.27.0" + unplugin "1.0.1" + +"@sentry/cli@^2.17.0": + version "2.18.1" + resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-2.18.1.tgz#c44f189a1a72a83087a297c5fcc7668f86dd4308" + integrity sha512-lc/dX/cvcmznWNbLzDbzxn224vwY5zLIDBe3yOO6Usg3CDgkZZ3xfjN4AIUZwkiTEPIOELodrOfdoMxqpXyYDw== + dependencies: + https-proxy-agent "^5.0.0" + node-fetch "^2.6.7" + progress "^2.0.3" + proxy-from-env "^1.1.0" + which "^2.0.2" + +"@sentry/core@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.2.tgz#f218920f269ccdbaee20a092bbc90a71a007cc88" + integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/minimal" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/core@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.53.1.tgz#c091a9d7fd010f8a2cb1dd71d949a8e453e35d4c" + integrity sha512-DAH8IJNORJJ7kQLqsZuhMkN6cwJjXzFuuUoZor7IIDHIHjtl51W+2F3Stg3+I3ZoKDfJfUNKqhipk2WZjG0FBg== + dependencies: + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + tslib "^1.9.3" + +"@sentry/electron@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sentry/electron/-/electron-3.0.0.tgz#28f1f37b599f71f7e2c8dcd8f3c4c0220a37fb11" + integrity sha512-cOjbBWaIyg4HPQ2izH1KFtrLR3YX3OJ52YeIq7H+lsZqcotnNzP4VmHehe5Jo4lWSW1RQTSxTFynPLDFM9RF9A== + dependencies: + "@sentry/browser" "6.17.2" + "@sentry/core" "6.17.2" + "@sentry/node" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + deepmerge "^4.2.2" + tslib "^2.3.1" + +"@sentry/hub@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.2.tgz#d92accada845fa21fff1b2b491d3c6964851693b" + integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g== + dependencies: + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/minimal@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.2.tgz#3b482a0d76aa33b6c9441dd21acbcc3a113e5120" + integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/types" "6.17.2" + tslib "^1.9.3" + +"@sentry/node@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.2.tgz#32a5fa00b64a331073daf1e44f500c8c57184eb1" + integrity sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ== + dependencies: + "@sentry/core" "6.17.2" + "@sentry/hub" "6.17.2" + "@sentry/tracing" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/node@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.53.1.tgz#d4c47477cf4305e352b511635d1d3d4d160e8bd7" + integrity sha512-B4ax8sRd54xj4ad+4eY2EOKNt0Mh1NjuLW1zUKS8HW3h0bmuaDFzGuhEVvEY5H4SaV6tZKj1c0dvnMnyUbYkhA== + dependencies: + "@sentry-internal/tracing" "7.53.1" + "@sentry/core" "7.53.1" + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.2.tgz#437337071fdeffa319746905b3706518b099ec6b" + integrity sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/minimal" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/types@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30" + integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ== + +"@sentry/types@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.53.1.tgz#3eefbad851f2d0deff67285d7e976d23d7d06a41" + integrity sha512-/ijchRIu+jz3+j/zY+7KRPfLSCY14fTx5xujjbOdmEKjmIHQmwPBdszcQm40uwofrR8taV4hbt5MFN+WnjCkCw== + +"@sentry/utils@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.2.tgz#e8044e753b47f86068053c8d79e4ae61a39b6732" + integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA== + dependencies: + "@sentry/types" "6.17.2" + tslib "^1.9.3" + +"@sentry/utils@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.53.1.tgz#b1f9f1dd4de7127287ad5027c2bd1133c5590486" + integrity sha512-DKJA1LSUOEv4KOR828MzVuLh+drjeAgzyKgN063OEKmnirgjgRgNNS8wUgwpG0Tn2k6ANZGCwrdfzPeSBxshKg== + dependencies: + "@sentry/types" "7.53.1" + tslib "^1.9.3" + +"@sentry/webpack-plugin@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-2.2.0.tgz#bd7a28a7132f139f74aa1068b168ab735fb9ddea" + integrity sha512-GzwoIQ2ygau0u76uKBK7gAyJAi6Te9zgJuP//OBfmJoXupm6HIUWC6RmPFy0yMlsK4gq1Ak/KziX7PZIe5NLaA== + dependencies: + "@sentry/bundler-plugin-core" "2.2.0" + unplugin "1.0.1" + uuid "^9.0.0" + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.0.tgz#ae73dc9ec5237f2794c4f79efd6a4c73b13daf23" + integrity sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/json-schema@*", "@types/json-schema@^7.0.8": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/node@*": + version "20.2.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.3.tgz#b31eb300610c3835ac008d690de6f87e28f9b878" + integrity sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw== + +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" + integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + +"@webassemblyjs/helper-buffer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" + integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== + +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== + +"@webassemblyjs/helper-wasm-section@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" + integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" + integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-opt" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/wast-printer" "1.11.6" + +"@webassemblyjs/wasm-gen@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" + integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" + integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" + integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" + integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" + integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== + +"@webpack-cli/info@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" + integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== + dependencies: + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" + integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== + +acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.14.5: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +caniuse-lite@^1.0.30001449: + version "1.0.30001489" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz#ca82ee2d4e4dbf2bd2589c9360d3fcc2c7ba3bd8" + integrity sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ== + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +clean-css@^5.2.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" + integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== + dependencies: + source-map "~0.6.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +colorette@^2.0.14: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +debug@4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +electron-to-chromium@^1.4.284: + version "1.4.407" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.407.tgz#087e2ab97b3eb092aa6217c05986086b7dd370cc" + integrity sha512-5smEvFSFYMv90tICOzRVP7Opp98DAC4KW7RRipg3BuNpGbbV3N+x24Zh3sbLb1T5haGtOSy/hrBfXsWnIM9aCg== + +enhanced-resolve@^5.14.1: + version "5.14.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3" + integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +envinfo@^7.7.3: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +es-module-lexer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" + integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@9.3.2: + version "9.3.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.2.tgz#8528522e003819e63d11c979b30896e0eaf52eda" + integrity sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA== + dependencies: + fs.realpath "^1.0.0" + minimatch "^7.4.1" + minipass "^4.2.4" + path-scurry "^1.6.1" + +graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-webpack-plugin@^5.3.2: + version "5.5.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz#826838e31b427f5f7f30971f8d8fa2422dfa6763" + integrity sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lru-cache@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1" + integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A== + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +magic-string@0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.27: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimatch@^7.4.1: + version "7.4.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" + integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== + dependencies: + brace-expansion "^2.0.1" + +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +"minipass@^5.0.0 || ^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" + integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-fetch@^2.6.7: + version "2.6.11" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" + integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== + dependencies: + whatwg-url "^5.0.0" + +node-releases@^2.0.8: + version "2.0.12" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" + integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.6.1: + version "1.9.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63" + integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg== + dependencies: + lru-cache "^9.1.1" + minipass "^5.0.0 || ^6.0.2" + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== + dependencies: + resolve "^1.9.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.9.0: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +schema-utils@^3.1.1, schema-utils@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" + integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.3.7: + version "5.3.9" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" + integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.17" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.16.8" + +terser@^5.10.0, terser@^5.16.8: + version "5.17.6" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.6.tgz#d810e75e1bb3350c799cd90ebefe19c9412c12de" + integrity sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3, tslib@^2.3.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" + integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== + +unplugin@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.0.1.tgz#83b528b981cdcea1cad422a12cd02e695195ef3f" + integrity sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA== + dependencies: + acorn "^8.8.1" + chokidar "^3.5.3" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.5.0" + +update-browserslist-db@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +warnings-to-errors-webpack-plugin@^2.0.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/warnings-to-errors-webpack-plugin/-/warnings-to-errors-webpack-plugin-2.3.0.tgz#5f9a58aaec458feafabe0f7a2b88a492db263a30" + integrity sha512-fzOyw+Ctr2MqJ+4UXKobDiOLzMMSBAdvGMWvZ4NRgTBCofAL2mmdfr6/Of3Bqz9Sq6R6xT5dLs6nnLLCtmppeQ== + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webpack-cli@^4.7.2: + version "4.10.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" + integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.2.0" + "@webpack-cli/info" "^1.5.0" + "@webpack-cli/serve" "^1.7.0" + colorette "^2.0.14" + commander "^7.0.0" + cross-spawn "^7.0.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + webpack-merge "^5.7.3" + +webpack-merge@^5.7.3: + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack-virtual-modules@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" + integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== + +webpack@^5.48.0: + version "5.84.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.84.0.tgz#011115617668744aece87a9eb68534487d84de1a" + integrity sha512-XezNK3kwJq6IyeoZmZ1uEqQs+42nTqIi4jYM/YjLwaJedUC1N3bwnCC0+UcnHJPfqWX0kGrQnMIvZZyWYaIZrA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" + acorn "^8.7.1" + acorn-import-assertions "^1.9.0" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.14.1" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.2" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.7" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/examples/webpack-context-isolation/event.json b/examples/webpack-context-isolation/event.json index a2a16a44..84f75ff9 100644 --- a/examples/webpack-context-isolation/event.json +++ b/examples/webpack-context-isolation/event.json @@ -59,6 +59,14 @@ "ip_address": "{{auto}}", "id": "abc-123" }, + "debug_meta": { + "images": [ + { + "code_file": "app:///dist/renderer.js", + "type": "sourcemap" + } + ] + }, "exception": { "values": [ { diff --git a/examples/webpack-context-isolation/package.json b/examples/webpack-context-isolation/package.json index 213141ef..77b11a43 100644 --- a/examples/webpack-context-isolation/package.json +++ b/examples/webpack-context-isolation/package.json @@ -7,11 +7,12 @@ }, "main": "dist/main.js", "devDependencies": { + "@sentry/webpack-plugin": "^2.2.0", + "csp-html-webpack-plugin": "^5.1.0", "html-webpack-plugin": "^5.3.2", - "webpack": "^5.48.0", - "webpack-cli": "^4.7.2", "warnings-to-errors-webpack-plugin": "^2.0.1", - "csp-html-webpack-plugin": "^5.1.0" + "webpack": "^5.48.0", + "webpack-cli": "^4.7.2" }, "dependencies": { "@sentry/electron": "3.0.0" diff --git a/examples/webpack-context-isolation/webpack.config.js b/examples/webpack-context-isolation/webpack.config.js index 44f20600..52e930a7 100644 --- a/examples/webpack-context-isolation/webpack.config.js +++ b/examples/webpack-context-isolation/webpack.config.js @@ -1,6 +1,24 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); const CspHtmlWebpackPlugin = require('csp-html-webpack-plugin'); const WarningsToErrorsPlugin = require('warnings-to-errors-webpack-plugin'); +const { sentryWebpackPlugin } = require('@sentry/webpack-plugin'); + +const sentryWebpackPluginOptions = { + authToken: 'some invalid auth token', + org: 'some invalid org', + project: 'some invalid project', + telemetry: false, + sourcemaps: { + assets: [], // no assets to upload - we just care about injecting debug IDs + }, + release: { + inject: false, + }, + errorHandler() { + // do nothing on errors :) + // They will happen because of the invalid auth token + }, +}; module.exports = [ { @@ -11,7 +29,7 @@ module.exports = [ libraryTarget: 'commonjs2', filename: 'main.js', }, - plugins: [new WarningsToErrorsPlugin()], + plugins: [new WarningsToErrorsPlugin(), sentryWebpackPlugin(sentryWebpackPluginOptions)], }, { mode: 'production', @@ -27,6 +45,7 @@ module.exports = [ 'default-src': "'self'", 'script-src': "'self'", }), + sentryWebpackPlugin(sentryWebpackPluginOptions), ], }, ]; diff --git a/examples/webpack-context-isolation/yarn.lock b/examples/webpack-context-isolation/yarn.lock new file mode 100644 index 00000000..2c012a8f --- /dev/null +++ b/examples/webpack-context-isolation/yarn.lock @@ -0,0 +1,1595 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" + integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@sentry-internal/tracing@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.53.1.tgz#85517ba93ee721424c865706f7ff4eaab1569e6d" + integrity sha512-a4H4rvVdz0XDGgNfRqc7zg6rMt2P1P05xBmgfIfztYy94Vciw1QMdboNiT7einr8ra8wogdEaK4Pe2AzYAPBJQ== + dependencies: + "@sentry/core" "7.53.1" + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + tslib "^1.9.3" + +"@sentry/browser@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.17.2.tgz#8e794b846f43a341068c83420918d896683d903e" + integrity sha512-4Ow5z9GxK5dG9+stBNKb7s6NoxE4wgEcHRmO66QTK4gH2NNmzV4R/aaZ7iDoS/lD86sH0M86jm76dpg9uiJPmw== + dependencies: + "@sentry/core" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/bundler-plugin-core@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.2.0.tgz#3d9fcc8bc7640b644218f3cbc119f5922bf54c1a" + integrity sha512-yiN1xsn82npb+4pZCQjJOIts5Ffi+rNLW9GB/kjZDtCkTCIfby5F1WPX9Ofk2MCruMguXSoc/3fi3x4tuXbFkA== + dependencies: + "@sentry/cli" "^2.17.0" + "@sentry/node" "7.53.1" + find-up "5.0.0" + glob "9.3.2" + magic-string "0.27.0" + unplugin "1.0.1" + +"@sentry/cli@^2.17.0": + version "2.18.1" + resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-2.18.1.tgz#c44f189a1a72a83087a297c5fcc7668f86dd4308" + integrity sha512-lc/dX/cvcmznWNbLzDbzxn224vwY5zLIDBe3yOO6Usg3CDgkZZ3xfjN4AIUZwkiTEPIOELodrOfdoMxqpXyYDw== + dependencies: + https-proxy-agent "^5.0.0" + node-fetch "^2.6.7" + progress "^2.0.3" + proxy-from-env "^1.1.0" + which "^2.0.2" + +"@sentry/core@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.2.tgz#f218920f269ccdbaee20a092bbc90a71a007cc88" + integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/minimal" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/core@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.53.1.tgz#c091a9d7fd010f8a2cb1dd71d949a8e453e35d4c" + integrity sha512-DAH8IJNORJJ7kQLqsZuhMkN6cwJjXzFuuUoZor7IIDHIHjtl51W+2F3Stg3+I3ZoKDfJfUNKqhipk2WZjG0FBg== + dependencies: + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + tslib "^1.9.3" + +"@sentry/electron@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sentry/electron/-/electron-3.0.0.tgz#28f1f37b599f71f7e2c8dcd8f3c4c0220a37fb11" + integrity sha512-cOjbBWaIyg4HPQ2izH1KFtrLR3YX3OJ52YeIq7H+lsZqcotnNzP4VmHehe5Jo4lWSW1RQTSxTFynPLDFM9RF9A== + dependencies: + "@sentry/browser" "6.17.2" + "@sentry/core" "6.17.2" + "@sentry/node" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + deepmerge "^4.2.2" + tslib "^2.3.1" + +"@sentry/hub@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.2.tgz#d92accada845fa21fff1b2b491d3c6964851693b" + integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g== + dependencies: + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/minimal@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.2.tgz#3b482a0d76aa33b6c9441dd21acbcc3a113e5120" + integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/types" "6.17.2" + tslib "^1.9.3" + +"@sentry/node@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.2.tgz#32a5fa00b64a331073daf1e44f500c8c57184eb1" + integrity sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ== + dependencies: + "@sentry/core" "6.17.2" + "@sentry/hub" "6.17.2" + "@sentry/tracing" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/node@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.53.1.tgz#d4c47477cf4305e352b511635d1d3d4d160e8bd7" + integrity sha512-B4ax8sRd54xj4ad+4eY2EOKNt0Mh1NjuLW1zUKS8HW3h0bmuaDFzGuhEVvEY5H4SaV6tZKj1c0dvnMnyUbYkhA== + dependencies: + "@sentry-internal/tracing" "7.53.1" + "@sentry/core" "7.53.1" + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.2.tgz#437337071fdeffa319746905b3706518b099ec6b" + integrity sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/minimal" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/types@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30" + integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ== + +"@sentry/types@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.53.1.tgz#3eefbad851f2d0deff67285d7e976d23d7d06a41" + integrity sha512-/ijchRIu+jz3+j/zY+7KRPfLSCY14fTx5xujjbOdmEKjmIHQmwPBdszcQm40uwofrR8taV4hbt5MFN+WnjCkCw== + +"@sentry/utils@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.2.tgz#e8044e753b47f86068053c8d79e4ae61a39b6732" + integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA== + dependencies: + "@sentry/types" "6.17.2" + tslib "^1.9.3" + +"@sentry/utils@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.53.1.tgz#b1f9f1dd4de7127287ad5027c2bd1133c5590486" + integrity sha512-DKJA1LSUOEv4KOR828MzVuLh+drjeAgzyKgN063OEKmnirgjgRgNNS8wUgwpG0Tn2k6ANZGCwrdfzPeSBxshKg== + dependencies: + "@sentry/types" "7.53.1" + tslib "^1.9.3" + +"@sentry/webpack-plugin@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-2.2.0.tgz#bd7a28a7132f139f74aa1068b168ab735fb9ddea" + integrity sha512-GzwoIQ2ygau0u76uKBK7gAyJAi6Te9zgJuP//OBfmJoXupm6HIUWC6RmPFy0yMlsK4gq1Ak/KziX7PZIe5NLaA== + dependencies: + "@sentry/bundler-plugin-core" "2.2.0" + unplugin "1.0.1" + uuid "^9.0.0" + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.0.tgz#ae73dc9ec5237f2794c4f79efd6a4c73b13daf23" + integrity sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/json-schema@*", "@types/json-schema@^7.0.8": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/node@*": + version "20.2.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.3.tgz#b31eb300610c3835ac008d690de6f87e28f9b878" + integrity sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw== + +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" + integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + +"@webassemblyjs/helper-buffer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" + integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== + +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== + +"@webassemblyjs/helper-wasm-section@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" + integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" + integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-opt" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/wast-printer" "1.11.6" + +"@webassemblyjs/wasm-gen@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" + integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" + integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" + integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" + integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" + integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== + +"@webpack-cli/info@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" + integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== + dependencies: + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" + integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== + +acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.14.5: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +caniuse-lite@^1.0.30001449: + version "1.0.30001489" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz#ca82ee2d4e4dbf2bd2589c9360d3fcc2c7ba3bd8" + integrity sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ== + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.5: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +clean-css@^5.2.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" + integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== + dependencies: + source-map "~0.6.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +colorette@^2.0.14: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +csp-html-webpack-plugin@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/csp-html-webpack-plugin/-/csp-html-webpack-plugin-5.1.0.tgz#b3bfa5a50d207fe5b6bb4839dc33aa59621a35a0" + integrity sha512-6l/s6hACE+UA01PLReNKZfgLZWM98f7ewWmE79maDWIbEXiPcIWQGB3LQR/Zw+hPBj4XPZZ5zNrrO+aygqaLaQ== + dependencies: + cheerio "^1.0.0-rc.5" + lodash "^4.17.20" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-what@^6.0.1, css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +debug@4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +electron-to-chromium@^1.4.284: + version "1.4.407" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.407.tgz#087e2ab97b3eb092aa6217c05986086b7dd370cc" + integrity sha512-5smEvFSFYMv90tICOzRVP7Opp98DAC4KW7RRipg3BuNpGbbV3N+x24Zh3sbLb1T5haGtOSy/hrBfXsWnIM9aCg== + +enhanced-resolve@^5.14.1: + version "5.14.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3" + integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +envinfo@^7.7.3: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +es-module-lexer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" + integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@9.3.2: + version "9.3.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.2.tgz#8528522e003819e63d11c979b30896e0eaf52eda" + integrity sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA== + dependencies: + fs.realpath "^1.0.0" + minimatch "^7.4.1" + minipass "^4.2.4" + path-scurry "^1.6.1" + +graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-webpack-plugin@^5.3.2: + version "5.5.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz#826838e31b427f5f7f30971f8d8fa2422dfa6763" + integrity sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lru-cache@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1" + integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A== + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +magic-string@0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.27: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimatch@^7.4.1: + version "7.4.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" + integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== + dependencies: + brace-expansion "^2.0.1" + +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +"minipass@^5.0.0 || ^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" + integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-fetch@^2.6.7: + version "2.6.11" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" + integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== + dependencies: + whatwg-url "^5.0.0" + +node-releases@^2.0.8: + version "2.0.12" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" + integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.6.1: + version "1.9.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63" + integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg== + dependencies: + lru-cache "^9.1.1" + minipass "^5.0.0 || ^6.0.2" + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== + dependencies: + resolve "^1.9.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.9.0: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +schema-utils@^3.1.1, schema-utils@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" + integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.3.7: + version "5.3.9" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" + integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.17" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.16.8" + +terser@^5.10.0, terser@^5.16.8: + version "5.17.6" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.6.tgz#d810e75e1bb3350c799cd90ebefe19c9412c12de" + integrity sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3, tslib@^2.3.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" + integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== + +unplugin@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.0.1.tgz#83b528b981cdcea1cad422a12cd02e695195ef3f" + integrity sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA== + dependencies: + acorn "^8.8.1" + chokidar "^3.5.3" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.5.0" + +update-browserslist-db@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +warnings-to-errors-webpack-plugin@^2.0.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/warnings-to-errors-webpack-plugin/-/warnings-to-errors-webpack-plugin-2.3.0.tgz#5f9a58aaec458feafabe0f7a2b88a492db263a30" + integrity sha512-fzOyw+Ctr2MqJ+4UXKobDiOLzMMSBAdvGMWvZ4NRgTBCofAL2mmdfr6/Of3Bqz9Sq6R6xT5dLs6nnLLCtmppeQ== + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webpack-cli@^4.7.2: + version "4.10.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" + integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.2.0" + "@webpack-cli/info" "^1.5.0" + "@webpack-cli/serve" "^1.7.0" + colorette "^2.0.14" + commander "^7.0.0" + cross-spawn "^7.0.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + webpack-merge "^5.7.3" + +webpack-merge@^5.7.3: + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack-virtual-modules@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" + integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== + +webpack@^5.48.0: + version "5.84.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.84.0.tgz#011115617668744aece87a9eb68534487d84de1a" + integrity sha512-XezNK3kwJq6IyeoZmZ1uEqQs+42nTqIi4jYM/YjLwaJedUC1N3bwnCC0+UcnHJPfqWX0kGrQnMIvZZyWYaIZrA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" + acorn "^8.7.1" + acorn-import-assertions "^1.9.0" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.14.1" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.2" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.7" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/src/common/normalize.ts b/src/common/normalize.ts index 68e708fd..4ccb50d9 100644 --- a/src/common/normalize.ts +++ b/src/common/normalize.ts @@ -45,6 +45,13 @@ export function normalizeEvent(event: Event, basePath: string): Event { } } + // We need to normalize debug ID images the same way as the stack frames for symbolicator to match them correctly + for (const debugImage of event.debug_meta?.images || []) { + if (debugImage.type === 'sourcemap') { + debugImage.code_file = normalizeUrl(debugImage.code_file, basePath); + } + } + if (event.transaction) { event.transaction = normalizeUrl(event.transaction, basePath); } From e3ae8aa8a023abd9d023e1014b4413524fde7c93 Mon Sep 17 00:00:00 2001 From: Luca Forstner <luca.forstner@sentry.io> Date: Fri, 26 May 2023 14:05:52 +0200 Subject: [PATCH 101/239] chore: Update changelog for release (#678) --- CHANGELOG.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 87c20b43..48904e24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,14 +2,22 @@ ## Unreleased +## 4.6.0 + +- feat: Update to [v7.50.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.50.0) of JavaScript SDKs + (#671) +- fix: Fix debug ID matching by normalizing `debug_meta` paths (#676) + ## 4.5.0 + - feat: Update to [v7.48.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.48.0) of JavaScript SDKs (#662) - fix: IPC protocol should be registered as secure (#664) ## 4.4.0 -- feat: Update to [v7.46.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.46.0) of JavaScript SDKs (#657) +- feat: Update to [v7.46.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.46.0) of JavaScript SDKs + (#657) ## 4.3.0 From a7d8818d2f2e10d8a1fcb6c7794689c77101b341 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Fri, 26 May 2023 13:53:07 +0000 Subject: [PATCH 102/239] release: 4.6.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ae31926c..24d820f1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.5.0", + "version": "4.6.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From 1300dfc41f41d6e958c38d831638a7132f192852 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Jun 2023 11:35:33 +0200 Subject: [PATCH 103/239] chore(deps-dev): bump vite from 3.2.6 to 3.2.7 in /examples/electron-vite (#681) --- examples/electron-vite/package.json | 2 +- examples/electron-vite/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/electron-vite/package.json b/examples/electron-vite/package.json index 12cd405c..58951181 100644 --- a/examples/electron-vite/package.json +++ b/examples/electron-vite/package.json @@ -17,6 +17,6 @@ "devDependencies": { "@vitejs/plugin-vue": "^3.1.2", "electron": "23.0.0", - "vite": "^3.1.8" + "vite": "^3.2.7" } } diff --git a/examples/electron-vite/yarn.lock b/examples/electron-vite/yarn.lock index 586ad2d5..15a81a39 100644 --- a/examples/electron-vite/yarn.lock +++ b/examples/electron-vite/yarn.lock @@ -1286,10 +1286,10 @@ unplugin@1.0.1: webpack-sources "^3.2.3" webpack-virtual-modules "^0.5.0" -vite@^3.1.8: - version "3.2.6" - resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.6.tgz#a0538710e69532225d9c0ba6a23f4158b51267fd" - integrity sha512-nTXTxYVvaQNLoW5BQ8PNNQ3lPia57gzsQU/Khv+JvzKPku8kNZL6NMUR/qwXhMG6E+g1idqEPanomJ+VZgixEg== +vite@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.7.tgz#35a62826bd4d6b778ae5db8766d023bcd4e7bef3" + integrity sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g== dependencies: esbuild "^0.15.9" postcss "^8.4.18" From a5e770cfa35a9400e495946c18deb1ca3491d594 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 6 Jun 2023 14:45:20 +0200 Subject: [PATCH 104/239] ci: Use `setup-node` rather than `volta` (#684) --- .github/workflows/build.yml | 16 ++++++++++++---- .github/workflows/new-electron-versions-pr.yml | 4 +++- .github/workflows/new-sdk-versions-pr.yml | 4 +++- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6e53ab99..f870740c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: volta-cli/action@v3 + - uses: actions/setup-node@v3 + with: + node-version-file: 'package.json' - name: Install run: yarn install - name: Build @@ -38,7 +40,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: volta-cli/action@v3 + - uses: actions/setup-node@v3 + with: + node-version-file: 'package.json' - run: yarn install - name: Run Linter run: yarn lint @@ -54,7 +58,9 @@ jobs: os: [ubuntu-latest, macos-latest, windows-latest] steps: - uses: actions/checkout@v3 - - uses: volta-cli/action@v3 + - uses: actions/setup-node@v3 + with: + node-version-file: 'package.json' - run: yarn install - name: Run Unit Tests run: yarn test @@ -72,7 +78,9 @@ jobs: ELECTRON_VERSION: ${{ matrix.electron }} steps: - uses: actions/checkout@v3 - - uses: volta-cli/action@v3 + - uses: actions/setup-node@v3 + with: + node-version-file: 'package.json' - run: yarn install - name: Run E2E Tests run: yarn e2e diff --git a/.github/workflows/new-electron-versions-pr.yml b/.github/workflows/new-electron-versions-pr.yml index ca7abfc1..9b6c8f64 100644 --- a/.github/workflows/new-electron-versions-pr.yml +++ b/.github/workflows/new-electron-versions-pr.yml @@ -10,7 +10,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: volta-cli/action@v3 + - uses: actions/setup-node@v3 + with: + node-version-file: 'package.json' - run: yarn install - name: Update Versions run: yarn update-electron-versions diff --git a/.github/workflows/new-sdk-versions-pr.yml b/.github/workflows/new-sdk-versions-pr.yml index 32b2c2e1..616eaef2 100644 --- a/.github/workflows/new-sdk-versions-pr.yml +++ b/.github/workflows/new-sdk-versions-pr.yml @@ -10,7 +10,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: volta-cli/action@v3 + - uses: actions/setup-node@v3 + with: + node-version-file: 'package.json' - run: yarn install - name: Update Versions run: yarn update-sdk-versions From 5f9ee2c6355204de4c7fb92a0ca5c518c81c26ea Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 13 Jun 2023 19:48:49 +0200 Subject: [PATCH 105/239] feat: Update to v7.55.0 of Sentry JavaScript SDKs (#682) --- package.json | 14 +-- src/main/integrations/electron-minidump.ts | 16 ++- src/renderer/sdk.ts | 2 +- test/unit/stack-parse.test.ts | 4 +- yarn.lock | 124 ++++++++++----------- 5 files changed, 85 insertions(+), 75 deletions(-) diff --git a/package.json b/package.json index 24d820f1..06372e52 100644 --- a/package.json +++ b/package.json @@ -58,17 +58,17 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.50.0", - "@sentry/core": "7.50.0", - "@sentry/node": "7.50.0", - "@sentry/types": "7.50.0", - "@sentry/utils": "7.50.0", + "@sentry/browser": "7.55.0", + "@sentry/core": "7.55.0", + "@sentry/node": "7.55.0", + "@sentry/types": "7.55.0", + "@sentry/utils": "7.55.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.50.0", - "@sentry-internal/typescript": "7.50.0", + "@sentry-internal/eslint-config-sdk": "7.55.0", + "@sentry-internal/typescript": "7.55.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts index bc4706ba..989ed382 100644 --- a/src/main/integrations/electron-minidump.ts +++ b/src/main/integrations/electron-minidump.ts @@ -42,8 +42,12 @@ function getScope(options: NodeOptions): Event { * Returns the minidump endpoint in Sentry * @param dsn Dsn */ -export function minidumpUrlFromDsn(dsn: string): string { - const { host, path, projectId, port, protocol, publicKey } = makeDsn(dsn); +export function minidumpUrlFromDsn(dsn: string): string | undefined { + const dsnComponents = makeDsn(dsn); + if (!dsnComponents) { + return undefined; + } + const { host, path, projectId, port, protocol, publicKey } = dsnComponents; return `${protocol}://${host}${port !== '' ? `:${port}` : ''}${ path !== '' ? `/${path}` : '' }/api/${projectId}/minidump/?sentry_key=${publicKey}`; @@ -106,6 +110,12 @@ export class ElectronMinidump implements Integration { * Starts the native crash reporter */ private _startCrashReporter(options: NodeOptions): void { + const submitURL = minidumpUrlFromDsn(options.dsn || ''); + if (!submitURL) { + logger.log('Invalid DSN. Cannot start Electron crashReporter'); + return; + } + // We don't add globalExtra when Breakpad is in use because it doesn't support JSON like strings: // https://github.com/electron/electron/issues/29711 const globalExtra = usesCrashpad() ? { sentry___initialScope: JSON.stringify(getScope(options)) } : undefined; @@ -116,7 +126,7 @@ export class ElectronMinidump implements Integration { companyName: '', ignoreSystemCrashHandler: true, productName: app.name || app.getName(), - submitURL: minidumpUrlFromDsn(options.dsn || ''), + submitURL, uploadToServer: true, compress: true, globalExtra, diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index dacf2332..16375335 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_50_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_55_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/test/unit/stack-parse.test.ts b/test/unit/stack-parse.test.ts index 9549c4e1..d9f8276d 100644 --- a/test/unit/stack-parse.test.ts +++ b/test/unit/stack-parse.test.ts @@ -156,14 +156,14 @@ describe('Parse mixed renderer stack traces', () => { { filename: 'http://localhost:12345/src/index.html', function: 'one', - in_app: false, + in_app: true, lineno: 24, colno: 9, }, { filename: 'http://localhost:12345/src/index.html', function: 'two', - in_app: false, + in_app: true, lineno: 17, colno: 11, }, diff --git a/yarn.lock b/yarn.lock index 4a906036..13036d38 100644 --- a/yarn.lock +++ b/yarn.lock @@ -128,13 +128,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.50.0": - version "7.50.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.50.0.tgz#b4210244f1bf69e035cf924f34f8cb8b0e50be31" - integrity sha512-jge0KvAH9kUcphiWftLqIYmKM0Wm0/cZUWPBtnc8ApNDGCOZhj0uX8zTEWSAZb2YOXv5AikCEfshPGuftlXYBg== +"@sentry-internal/eslint-config-sdk@7.55.0": + version "7.55.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.55.0.tgz#31f306269eba5d9c93baf94d88b18eeffefb0c8a" + integrity sha512-NMGvnhvNIw10JvCb6ftxf2no509UQD55Z+bSOeIrz+NyOsw1Ain8WeO2M+xu/cuRALUx29fn2/tGI8gqvBRlXg== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.50.0" - "@sentry-internal/typescript" "7.50.0" + "@sentry-internal/eslint-plugin-sdk" "7.55.0" + "@sentry-internal/typescript" "7.55.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -143,83 +143,83 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.50.0": - version "7.50.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.50.0.tgz#a42a9acad3fc87af5f9d82d5c02adc8bc69c69b6" - integrity sha512-DFDqs43Pc6sIYHGysYO9E+Z4hkUs4cbmo9e+vWnRKlsQDfHs/+BirsX6pH07m/sbWxKwwdUbel3I+yOXJF9jxQ== +"@sentry-internal/eslint-plugin-sdk@7.55.0": + version "7.55.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.55.0.tgz#f44fbaf761e9cf22c14eb81985246e080e0f5a4c" + integrity sha512-DeotHRe1d9JPuPqYgKJjsJdjxZibDco8L99MMiYonIfYBZgwTLc/eaM3bf5uFqRx+MWd2sFphzfFGyBN4QA11w== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.50.0": - version "7.50.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.50.0.tgz#74454af99a03d81762993835d2687c881e14f41e" - integrity sha512-4TQ4vN0aMBWsUXfJWk2xbe4x7fKfwCXgXKTtHC/ocwwKM+0EefV5Iw9YFG8IrIQN4vMtuRzktqcs9q0/Sbv7tg== +"@sentry-internal/tracing@7.55.0": + version "7.55.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.55.0.tgz#4ecdc1e62590b19c51b6b0d8f4cd09d13fe4beca" + integrity sha512-Bm82Z2tHcz4BF8CQDfYT5LeZPpuePWNHcxTSknJImPpPlQnol++2WQtloZZOs5FxllXL08UjN3LphRKmiEQsVQ== dependencies: - "@sentry/core" "7.50.0" - "@sentry/types" "7.50.0" - "@sentry/utils" "7.50.0" + "@sentry/core" "7.55.0" + "@sentry/types" "7.55.0" + "@sentry/utils" "7.55.0" tslib "^1.9.3" -"@sentry-internal/typescript@7.50.0": - version "7.50.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.50.0.tgz#31d76a36bba025ca35edefc6d1dae6afac26d4f1" - integrity sha512-cCWBqAcKWByS7z9x2oqsFl6/fT4EhFgb6OYShPlsOwP5UYthIJqDDFZJiFb9qSejQeENgSyWE63dIMVMtUI5sQ== - -"@sentry/browser@7.50.0": - version "7.50.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.50.0.tgz#16c995c336322c8aec65570f90f50288678004ec" - integrity sha512-a+UYbP89+SAvW47/p9wxEi9eWlyp/SkYl52OCdZNXnplQY4kQIOVyiaIs5nnCxIxZgXKrhAX4eo1E9ykleFuNQ== - dependencies: - "@sentry-internal/tracing" "7.50.0" - "@sentry/core" "7.50.0" - "@sentry/replay" "7.50.0" - "@sentry/types" "7.50.0" - "@sentry/utils" "7.50.0" +"@sentry-internal/typescript@7.55.0": + version "7.55.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.55.0.tgz#7bd1dcd8f4795a410a999fd8afa0011b037c6ada" + integrity sha512-bbhkdEmEfZu3WZKjd+IIBwjhwDLpCE8lx/noFKp/Fq7AOHxM8xA93THY2CR9ZZCvoQgoWLzwx5GFpPdVsdspXw== + +"@sentry/browser@7.55.0": + version "7.55.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.55.0.tgz#b3219e03c8f4579c5f8e101fe4c285ed7bbe5f73" + integrity sha512-ukwj7MBkZx0IBDL5MfNcerZp8p5M85m+AZ7LFEw2aMVFSt4HEmp1CPQYpubORMcP+oq+BHGJ6khkvNQlM4D7+g== + dependencies: + "@sentry-internal/tracing" "7.55.0" + "@sentry/core" "7.55.0" + "@sentry/replay" "7.55.0" + "@sentry/types" "7.55.0" + "@sentry/utils" "7.55.0" tslib "^1.9.3" -"@sentry/core@7.50.0": - version "7.50.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.50.0.tgz#88bc9cbfc0cb429a28489ece6f0be7a7006436c4" - integrity sha512-6oD1a3fYs4aiNK7tuJSd88LHjYJAetd7ZK/AfJniU7zWKj4jxIYfO8nhm0qdnhEDs81RcweVDmPhWm3Kwrzzsg== +"@sentry/core@7.55.0": + version "7.55.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.55.0.tgz#0a02f8bf7f083a52b344e03f1fe0b8bd092765af" + integrity sha512-ClOcxdAlX7aS52UQQFc7zAIoqyV24wZnDamJTNtnygETGhrjsj4sUyhelF0xecn5gyYJQ0pfT55iBTGacms8Ag== dependencies: - "@sentry/types" "7.50.0" - "@sentry/utils" "7.50.0" + "@sentry/types" "7.55.0" + "@sentry/utils" "7.55.0" tslib "^1.9.3" -"@sentry/node@7.50.0": - version "7.50.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.50.0.tgz#d6adab136d87f7dca614ea0d77944f902fa45626" - integrity sha512-11UJBKoQFMp7f8sbzeO2gENsKIUkVCNBTzuPRib7l2K1HMjSfacXmwwma7ZEs0mc3ofIZ1UYuyONAXmI1lK9cQ== +"@sentry/node@7.55.0": + version "7.55.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.55.0.tgz#ee4df42dda1c38f27708f078daaa1f8062583c6b" + integrity sha512-X7v1LoZu6mlZAg7eDz+gU4V0QdfcKcZjI/4bxl6E9yKX6VH5ORuNaNujWXMfzu7Yvu8Dtp+JZ0ZDa+9nEmXbZQ== dependencies: - "@sentry-internal/tracing" "7.50.0" - "@sentry/core" "7.50.0" - "@sentry/types" "7.50.0" - "@sentry/utils" "7.50.0" + "@sentry-internal/tracing" "7.55.0" + "@sentry/core" "7.55.0" + "@sentry/types" "7.55.0" + "@sentry/utils" "7.55.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/replay@7.50.0": - version "7.50.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.50.0.tgz#dd29f063492d91e708629ff8dd95a59d4b7180f1" - integrity sha512-EYRk+DTZ5luwfkiCaDpBC3YBKIEdkReTUNZtWDVUytSVjsCnttkAipx/y6bxy3HN+rSXungMd3XKQT5RNMRUNA== +"@sentry/replay@7.55.0": + version "7.55.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.55.0.tgz#9332bf749a01c418ebc1b392358ca4a335471f31" + integrity sha512-SRWYNgSTGjUBONRJk939MJTynk6fxK524J5Sa/ABHHo+Gow1O8F1q9GY4OIIGkh0Giz8rO6vePWBwuDE6F7B2Q== dependencies: - "@sentry/core" "7.50.0" - "@sentry/types" "7.50.0" - "@sentry/utils" "7.50.0" + "@sentry/core" "7.55.0" + "@sentry/types" "7.55.0" + "@sentry/utils" "7.55.0" -"@sentry/types@7.50.0": - version "7.50.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.50.0.tgz#52a035cad83a80ca26fa53c09eb1241250c3df3e" - integrity sha512-Zo9vyI98QNeYT0K0y57Rb4JRWDaPEgmp+QkQ4CRQZFUTWetO5fvPZ4Gb/R7TW16LajuHZlbJBHmvmNj2pkL2kw== +"@sentry/types@7.55.0": + version "7.55.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.55.0.tgz#97baff0d9fc2e2946366ff2569f0a44cc0dd9d37" + integrity sha512-e8VLiR0NIYd1Y5SlATp3eSARTYmbpNEYsX2b3a1E0NDZj+G5eOqef7k6ab6Y30LUrqrqmkDE0VJqTtnI3pMzzg== -"@sentry/utils@7.50.0": - version "7.50.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.50.0.tgz#2b93a48024651436e95b7c8e2066aee7c2234d57" - integrity sha512-iyPwwC6fwJsiPhH27ZbIiSsY5RaccHBqADS2zEjgKYhmP4P9WGgHRDrvLEnkOjqQyKNb6c0yfmv83n0uxYnolw== +"@sentry/utils@7.55.0": + version "7.55.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.55.0.tgz#cb1ab6a5534755a27611257edafe09ae1df01375" + integrity sha512-18YU0fLhlr/e7lUyMkh/BEE05N8DG9lzWToz6c9DOYw6pTyt2EXZrxho+BcYufd7IayU0Twb0sp8EX/wfggYxA== dependencies: - "@sentry/types" "7.50.0" + "@sentry/types" "7.55.0" tslib "^1.9.3" "@sindresorhus/is@^4.0.0": From 26b4461116048f2a1b34d27d45379c2d53fa2936 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 29 Jun 2023 19:16:57 +0200 Subject: [PATCH 106/239] test: New Electron Versions (#689) --- test/e2e/test-apps/other/browser-tracing/recipe.yml | 4 +++- test/e2e/versions.json | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/test/e2e/test-apps/other/browser-tracing/recipe.yml b/test/e2e/test-apps/other/browser-tracing/recipe.yml index 3a5a812a..90bd04f6 100644 --- a/test/e2e/test-apps/other/browser-tracing/recipe.yml +++ b/test/e2e/test-apps/other/browser-tracing/recipe.yml @@ -1,3 +1,5 @@ description: Browser Tracing command: yarn -condition: version.major >= 3 +# Browser Tracing fails on Electron v24 +condition: version.major >= 3 && version.major != 24 +``` diff --git a/test/e2e/versions.json b/test/e2e/versions.json index b29954d2..b0f63cc9 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.3","22.3.4","23.2.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.15","23.3.9","24.6.1","25.2.0"] From 902d85f57eac76bfa6b8f24fc65951740ffb4c92 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 29 Jun 2023 19:17:12 +0200 Subject: [PATCH 107/239] feat: Update to v7.57.0 of Sentry JavaScript SDKs (#690) --- package.json | 14 +- src/main/context.ts | 2 +- src/main/store.ts | 2 +- src/main/transports/electron-offline-net.ts | 2 +- src/renderer/sdk.ts | 2 +- yarn.lock | 153 ++++++++++---------- 6 files changed, 90 insertions(+), 85 deletions(-) diff --git a/package.json b/package.json index 06372e52..10905278 100644 --- a/package.json +++ b/package.json @@ -58,17 +58,17 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.55.0", - "@sentry/core": "7.55.0", - "@sentry/node": "7.55.0", - "@sentry/types": "7.55.0", - "@sentry/utils": "7.55.0", + "@sentry/browser": "7.57.0", + "@sentry/core": "7.57.0", + "@sentry/node": "7.57.0", + "@sentry/types": "7.57.0", + "@sentry/utils": "7.57.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.55.0", - "@sentry-internal/typescript": "7.55.0", + "@sentry-internal/eslint-config-sdk": "7.57.0", + "@sentry-internal/typescript": "7.57.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/main/context.ts b/src/main/context.ts index 8062dc03..6bff27e9 100644 --- a/src/main/context.ts +++ b/src/main/context.ts @@ -330,5 +330,5 @@ export async function getEventDefaults(release?: string, environment?: string): cachedDefaultsPromise = _getEventDefaults(release, environment); } - return await cachedDefaultsPromise; + return cachedDefaultsPromise; } diff --git a/src/main/store.ts b/src/main/store.ts index 291de428..94887d00 100644 --- a/src/main/store.ts +++ b/src/main/store.ts @@ -77,7 +77,7 @@ export class Store<T> { * constructor is used. */ public async get(): Promise<T> { - return await this._lock.runExclusive(async () => { + return this._lock.runExclusive(async () => { if (this._data === undefined) { try { this._data = JSON.parse(await readFileAsync(this._path, 'utf8'), dateReviver) as T; diff --git a/src/main/transports/electron-offline-net.ts b/src/main/transports/electron-offline-net.ts index 3edea316..ef45dd6b 100644 --- a/src/main/transports/electron-offline-net.ts +++ b/src/main/transports/electron-offline-net.ts @@ -140,7 +140,7 @@ export function makeElectronOfflineTransport(options: ElectronOfflineTransportOp } if (action == 'queue') { - return await queueRequest(request); + return queueRequest(request); } logger.log('Dropping request'); diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 16375335..05bf87f6 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_55_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_57_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 13036d38..6e122406 100644 --- a/yarn.lock +++ b/yarn.lock @@ -128,13 +128,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.55.0": - version "7.55.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.55.0.tgz#31f306269eba5d9c93baf94d88b18eeffefb0c8a" - integrity sha512-NMGvnhvNIw10JvCb6ftxf2no509UQD55Z+bSOeIrz+NyOsw1Ain8WeO2M+xu/cuRALUx29fn2/tGI8gqvBRlXg== +"@sentry-internal/eslint-config-sdk@7.57.0": + version "7.57.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.57.0.tgz#8448eb63869aa618ebb6082e3e2f50660d6260f0" + integrity sha512-uuKNIkVxkA69c08j90RJ3nVGVY26vt0KXC0ApvC3UsjDM9mtzksOIf/epKY4PyuRw5y3BcQUXE36zhM02Dk+OA== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.55.0" - "@sentry-internal/typescript" "7.55.0" + "@sentry-internal/eslint-plugin-sdk" "7.57.0" + "@sentry-internal/typescript" "7.57.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -143,84 +143,84 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.55.0": - version "7.55.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.55.0.tgz#f44fbaf761e9cf22c14eb81985246e080e0f5a4c" - integrity sha512-DeotHRe1d9JPuPqYgKJjsJdjxZibDco8L99MMiYonIfYBZgwTLc/eaM3bf5uFqRx+MWd2sFphzfFGyBN4QA11w== +"@sentry-internal/eslint-plugin-sdk@7.57.0": + version "7.57.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.57.0.tgz#bbab4ceed6f722d956107b5982db4747c00d56a1" + integrity sha512-c1Lz5sFSLlaxQoveCgxTLlvta+uW9DeJzHQWdNn0Q5IxzUo418k0BrxTT2V0P6Ch0i/d+QyaucFEhoKHk/YJJg== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.55.0": - version "7.55.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.55.0.tgz#4ecdc1e62590b19c51b6b0d8f4cd09d13fe4beca" - integrity sha512-Bm82Z2tHcz4BF8CQDfYT5LeZPpuePWNHcxTSknJImPpPlQnol++2WQtloZZOs5FxllXL08UjN3LphRKmiEQsVQ== - dependencies: - "@sentry/core" "7.55.0" - "@sentry/types" "7.55.0" - "@sentry/utils" "7.55.0" - tslib "^1.9.3" - -"@sentry-internal/typescript@7.55.0": - version "7.55.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.55.0.tgz#7bd1dcd8f4795a410a999fd8afa0011b037c6ada" - integrity sha512-bbhkdEmEfZu3WZKjd+IIBwjhwDLpCE8lx/noFKp/Fq7AOHxM8xA93THY2CR9ZZCvoQgoWLzwx5GFpPdVsdspXw== - -"@sentry/browser@7.55.0": - version "7.55.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.55.0.tgz#b3219e03c8f4579c5f8e101fe4c285ed7bbe5f73" - integrity sha512-ukwj7MBkZx0IBDL5MfNcerZp8p5M85m+AZ7LFEw2aMVFSt4HEmp1CPQYpubORMcP+oq+BHGJ6khkvNQlM4D7+g== - dependencies: - "@sentry-internal/tracing" "7.55.0" - "@sentry/core" "7.55.0" - "@sentry/replay" "7.55.0" - "@sentry/types" "7.55.0" - "@sentry/utils" "7.55.0" - tslib "^1.9.3" - -"@sentry/core@7.55.0": - version "7.55.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.55.0.tgz#0a02f8bf7f083a52b344e03f1fe0b8bd092765af" - integrity sha512-ClOcxdAlX7aS52UQQFc7zAIoqyV24wZnDamJTNtnygETGhrjsj4sUyhelF0xecn5gyYJQ0pfT55iBTGacms8Ag== - dependencies: - "@sentry/types" "7.55.0" - "@sentry/utils" "7.55.0" - tslib "^1.9.3" - -"@sentry/node@7.55.0": - version "7.55.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.55.0.tgz#ee4df42dda1c38f27708f078daaa1f8062583c6b" - integrity sha512-X7v1LoZu6mlZAg7eDz+gU4V0QdfcKcZjI/4bxl6E9yKX6VH5ORuNaNujWXMfzu7Yvu8Dtp+JZ0ZDa+9nEmXbZQ== - dependencies: - "@sentry-internal/tracing" "7.55.0" - "@sentry/core" "7.55.0" - "@sentry/types" "7.55.0" - "@sentry/utils" "7.55.0" +"@sentry-internal/tracing@7.57.0": + version "7.57.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.57.0.tgz#cb761931b635f8f24c84be0eecfacb8516b20551" + integrity sha512-tpViyDd8AhQGYYhI94xi2aaDopXOPfL2Apwrtb3qirWkomIQ2K86W1mPmkce+B0cFOnW2Dxv/ZTFKz6ghjK75A== + dependencies: + "@sentry/core" "7.57.0" + "@sentry/types" "7.57.0" + "@sentry/utils" "7.57.0" + tslib "^2.4.1 || ^1.9.3" + +"@sentry-internal/typescript@7.57.0": + version "7.57.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.57.0.tgz#2f0d226cd23aca5e451a7192354d0244a1ec4224" + integrity sha512-vj49MhqOnd+VLKlOoGpTCE7N3dWxyaBFuqpy1vkOFkP/r/n4PCJpbeqM4HQ1dKAeKKK6lV/FvZTdy5vZWnE9VA== + +"@sentry/browser@7.57.0": + version "7.57.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.57.0.tgz#6e724c9eac680dba99ced0fdf81be8d1e3b3bceb" + integrity sha512-E0HaYYlaqHFiIRZXxcvOO8Odvlt+TR1vFFXzqUWXPOvDRxURglTOCQ3EN/u6bxtAGJ6y/Zc2obgihTtypuel/w== + dependencies: + "@sentry-internal/tracing" "7.57.0" + "@sentry/core" "7.57.0" + "@sentry/replay" "7.57.0" + "@sentry/types" "7.57.0" + "@sentry/utils" "7.57.0" + tslib "^2.4.1 || ^1.9.3" + +"@sentry/core@7.57.0": + version "7.57.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.57.0.tgz#65093d739c04f320a54395a21be955fcbe326acb" + integrity sha512-l014NudPH0vQlzybtXajPxYFfs9w762NoarjObC3gu76D1jzBBFzhdRelkGpDbSLNTIsKhEDDRpgAjBWJ9icfw== + dependencies: + "@sentry/types" "7.57.0" + "@sentry/utils" "7.57.0" + tslib "^2.4.1 || ^1.9.3" + +"@sentry/node@7.57.0": + version "7.57.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.57.0.tgz#31052f5988ed4496d7f3ff925240cf9b02d09941" + integrity sha512-63mjyUVM6sfJFVQ5TGVRVGUsoEfESl5ABzIW1W0s9gUiQPaG8SOdaQJglb2VNrkMYxnRHgD8Q9LUh/qcmUyPGw== + dependencies: + "@sentry-internal/tracing" "7.57.0" + "@sentry/core" "7.57.0" + "@sentry/types" "7.57.0" + "@sentry/utils" "7.57.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" - tslib "^1.9.3" + tslib "^2.4.1 || ^1.9.3" -"@sentry/replay@7.55.0": - version "7.55.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.55.0.tgz#9332bf749a01c418ebc1b392358ca4a335471f31" - integrity sha512-SRWYNgSTGjUBONRJk939MJTynk6fxK524J5Sa/ABHHo+Gow1O8F1q9GY4OIIGkh0Giz8rO6vePWBwuDE6F7B2Q== +"@sentry/replay@7.57.0": + version "7.57.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.57.0.tgz#c8f7eae7b7edc9d32c3d2955b337f3b3c76dff39" + integrity sha512-pN4ryNS3J5EYbkXvR+O/+hseAJha7XDl8mPFtK0OGTHG10JzCi4tQJazblHQdpb5QBaMMPCeZ+isyfoQLDNXnw== dependencies: - "@sentry/core" "7.55.0" - "@sentry/types" "7.55.0" - "@sentry/utils" "7.55.0" + "@sentry/core" "7.57.0" + "@sentry/types" "7.57.0" + "@sentry/utils" "7.57.0" -"@sentry/types@7.55.0": - version "7.55.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.55.0.tgz#97baff0d9fc2e2946366ff2569f0a44cc0dd9d37" - integrity sha512-e8VLiR0NIYd1Y5SlATp3eSARTYmbpNEYsX2b3a1E0NDZj+G5eOqef7k6ab6Y30LUrqrqmkDE0VJqTtnI3pMzzg== +"@sentry/types@7.57.0": + version "7.57.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.57.0.tgz#4fdb80cbd49ba034dd8d9be0c0005a016d5db3ce" + integrity sha512-D7ifoUfxuVCUyktIr5Gc+jXUbtcUMmfHdTtTbf1XCZHua5mJceK9wtl3YCg3eq/HK2Ppd52BKnTzEcS5ZKQM+w== -"@sentry/utils@7.55.0": - version "7.55.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.55.0.tgz#cb1ab6a5534755a27611257edafe09ae1df01375" - integrity sha512-18YU0fLhlr/e7lUyMkh/BEE05N8DG9lzWToz6c9DOYw6pTyt2EXZrxho+BcYufd7IayU0Twb0sp8EX/wfggYxA== +"@sentry/utils@7.57.0": + version "7.57.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.57.0.tgz#8253c6fcf35138b4c424234b8da1596e11b98ad8" + integrity sha512-YXrkMCiNklqkXctn4mKYkrzNCf/dfVcRUQrkXjeBC+PHXbcpPyaJgInNvztR7Skl8lE3JPGPN4v5XhLxK1bUUg== dependencies: - "@sentry/types" "7.55.0" - tslib "^1.9.3" + "@sentry/types" "7.57.0" + tslib "^2.4.1 || ^1.9.3" "@sindresorhus/is@^4.0.0": version "4.6.0" @@ -3430,7 +3430,7 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.8.1, tslib@^1.9.3: +tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -3440,6 +3440,11 @@ tslib@^2.3.1, tslib@^2.5.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +"tslib@^2.4.1 || ^1.9.3": + version "2.6.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" + integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== + tsscmp@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" From 029b9ef151b1fd4c69fff863107c5c1fd88f424b Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 30 Jun 2023 16:22:58 +0200 Subject: [PATCH 108/239] chore: Update CHANGELOG for release (#691) --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48904e24..97943a57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## Unreleased +## 4.7.0 + +- feat: Update to [v7.57.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.57.0) of JavaScript SDKs + (#690) + ## 4.6.0 - feat: Update to [v7.50.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.50.0) of JavaScript SDKs From e305ddc71d595ff9ef30e7bf61b4da9a1d797416 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Fri, 30 Jun 2023 14:23:28 +0000 Subject: [PATCH 109/239] release: 4.7.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 10905278..2046c23d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.6.0", + "version": "4.7.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From 09f82e63a26aef5fc935b88ba8fb23307bd75e9b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 12:23:23 +0100 Subject: [PATCH 110/239] chore(deps): bump semver from 5.7.1 to 5.7.2 (#693) --- yarn.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6e122406..7aadcae6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3137,19 +3137,19 @@ semver-compare@^1.0.0: integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== "semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" From 0fa7104c59a6eef85b758ebfd90951b085ddb0d9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 19:04:09 +0100 Subject: [PATCH 111/239] test: New Electron versions (#692) Co-authored-by: timfish <timfish@users.noreply.github.com> --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index b0f63cc9..0b6ff07f 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.15","23.3.9","24.6.1","25.2.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.16","23.3.10","24.6.2","25.2.0"] From 3064e99c9b84b71f6de7006f477658483df40dc8 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 13 Jul 2023 15:21:58 +0100 Subject: [PATCH 112/239] fix: Normalize filename before parsing module name (#699) --- package.json | 14 +- src/main/sdk.ts | 5 + src/main/stack-parse.ts | 20 + src/renderer/sdk.ts | 2 +- .../other/browser-tracing/recipe.yml | 1 - .../other/main-process-module/event.json | 143 ++ .../other/main-process-module/package.json | 20 + .../other/main-process-module/recipe.yml | 4 + .../other/main-process-module/src/main.js | 36 + .../other/main-process-module/src/renderer.js | 10 + .../main-process-module/webpack.config.js | 51 + .../other/main-process-module/yarn.lock | 1595 +++++++++++++++++ yarn.lock | 124 +- 13 files changed, 1954 insertions(+), 71 deletions(-) create mode 100644 src/main/stack-parse.ts create mode 100644 test/e2e/test-apps/other/main-process-module/event.json create mode 100644 test/e2e/test-apps/other/main-process-module/package.json create mode 100644 test/e2e/test-apps/other/main-process-module/recipe.yml create mode 100644 test/e2e/test-apps/other/main-process-module/src/main.js create mode 100644 test/e2e/test-apps/other/main-process-module/src/renderer.js create mode 100644 test/e2e/test-apps/other/main-process-module/webpack.config.js create mode 100644 test/e2e/test-apps/other/main-process-module/yarn.lock diff --git a/package.json b/package.json index 2046c23d..b03dd3e3 100644 --- a/package.json +++ b/package.json @@ -58,17 +58,17 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.57.0", - "@sentry/core": "7.57.0", - "@sentry/node": "7.57.0", - "@sentry/types": "7.57.0", - "@sentry/utils": "7.57.0", + "@sentry/browser": "7.58.0", + "@sentry/core": "7.58.0", + "@sentry/node": "7.58.0", + "@sentry/types": "7.58.0", + "@sentry/utils": "7.58.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.57.0", - "@sentry-internal/typescript": "7.57.0", + "@sentry-internal/eslint-config-sdk": "7.58.0", + "@sentry-internal/typescript": "7.58.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/main/sdk.ts b/src/main/sdk.ts index 9584dc31..80e84d07 100644 --- a/src/main/sdk.ts +++ b/src/main/sdk.ts @@ -19,6 +19,7 @@ import { SentryMinidump, } from './integrations'; import { configureIPC } from './ipc'; +import { defaultStackParser } from './stack-parse'; import { ElectronOfflineTransportOptions, makeElectronOfflineTransport } from './transports/electron-offline-net'; import { SDK_VERSION } from './version'; @@ -113,6 +114,10 @@ export function init(userOptions: ElectronMainOptions): void { options.autoSessionTracking = false; } + if (options.stackParser === undefined) { + options.stackParser = defaultStackParser; + } + setDefaultIntegrations(defaults, options); if (options.dsn && options.transport === undefined) { diff --git a/src/main/stack-parse.ts b/src/main/stack-parse.ts new file mode 100644 index 00000000..78f51a0d --- /dev/null +++ b/src/main/stack-parse.ts @@ -0,0 +1,20 @@ +import { getModuleFromFilename as getModuleFromFilenameNode } from '@sentry/node'; +import { StackParser } from '@sentry/types'; +import { createStackParser, nodeStackLineParser } from '@sentry/utils'; +import { app } from 'electron'; + +import { normalizeUrl } from '../common'; + +/** Parses the module name form a filename */ +function getModuleFromFilename(filename: string | undefined): string | undefined { + if (!filename) { + return; + } + + const normalizedFilename = normalizeUrl(filename, app.getAppPath()); + + return getModuleFromFilenameNode(normalizedFilename); +} + +// node.js stack parser but filename normalized before parsing the module +export const defaultStackParser: StackParser = createStackParser(nodeStackLineParser(getModuleFromFilename)); diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 05bf87f6..c40831ac 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_57_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_58_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/test/e2e/test-apps/other/browser-tracing/recipe.yml b/test/e2e/test-apps/other/browser-tracing/recipe.yml index 90bd04f6..e4bf4955 100644 --- a/test/e2e/test-apps/other/browser-tracing/recipe.yml +++ b/test/e2e/test-apps/other/browser-tracing/recipe.yml @@ -2,4 +2,3 @@ description: Browser Tracing command: yarn # Browser Tracing fails on Electron v24 condition: version.major >= 3 && version.major != 24 -``` diff --git a/test/e2e/test-apps/other/main-process-module/event.json b/test/e2e/test-apps/other/main-process-module/event.json new file mode 100644 index 00000000..5bc2297e --- /dev/null +++ b/test/e2e/test-apps/other/main-process-module/event.json @@ -0,0 +1,143 @@ +{ + "method": "envelope", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "appId": "277345", + "data": { + "sdk": { + "name": "sentry.javascript.electron", + "packages": [ + { + "name": "npm:@sentry/electron", + "version": "{{version}}" + } + ], + "version": "{{version}}" + }, + "contexts": { + "app": { + "app_name": "webpack-main-process", + "app_version": "1.0.0", + "app_start_time": "{{time}}" + }, + "browser": { + "name": "Chrome" + }, + "chrome": { + "name": "Chrome", + "type": "runtime", + "version": "{{version}}" + }, + "device": { + "arch": "{{arch}}", + "family": "Desktop", + "memory_size": 0, + "free_memory": 0, + "processor_count": 0, + "processor_frequency": 0, + "cpu_description": "{{cpu}}", + "screen_resolution":"{{screen}}", + "screen_density": 1, + "language": "{{language}}" + }, + "node": { + "name": "Node", + "type": "runtime", + "version": "{{version}}" + }, + "os": { + "name": "{{platform}}", + "version": "{{version}}" + }, + "runtime": { + "name": "Electron", + "version": "{{version}}" + } + }, + "release": "webpack-main-process@1.0.0", + "environment": "development", + "user": { + "ip_address": "{{auto}}", + "id": "abc-123" + }, + "debug_meta": { + "images": [ + { + "code_file": "app:///dist/main.js", + "type": "sourcemap" + } + ] + }, + "exception": { + "values": [ + { + "type": "Error", + "value": "Some main error", + "stacktrace": { + "frames": [ + { + "colno": 0, + "filename": "app:///dist/main.js", + "function": "{{function}}", + "in_app": true, + "lineno": 0, + "module": "main" + } + ] + }, + "mechanism": { + "handled": true, + "type": "generic" + } + } + ] + }, + "level": "fatal", + "event_id": "{{id}}", + "platform": "node", + "timestamp": 0, + "breadcrumbs": [ + { + "timestamp": 0, + "category": "electron", + "message": "app.will-finish-launching", + "type": "ui" + }, + { + "timestamp": 0, + "category": "electron", + "message": "app.ready", + "type": "ui" + }, + { + "timestamp": 0, + "category": "electron", + "message": "app.session-created", + "type": "ui" + }, + { + "timestamp": 0, + "category": "electron", + "message": "app.web-contents-created", + "type": "ui" + }, + { + "timestamp": 0, + "category": "electron", + "message": "app.browser-window-created", + "type": "ui" + }, + { + "timestamp": 0, + "category": "electron", + "message": "renderer.dom-ready", + "type": "ui" + } + ], + "tags": { + "event.environment": "javascript", + "event.origin": "electron", + "event.process": "browser", + "event_type": "javascript" + } + } +} diff --git a/test/e2e/test-apps/other/main-process-module/package.json b/test/e2e/test-apps/other/main-process-module/package.json new file mode 100644 index 00000000..f4f81e58 --- /dev/null +++ b/test/e2e/test-apps/other/main-process-module/package.json @@ -0,0 +1,20 @@ +{ + "name": "webpack-main-process", + "version": "1.0.0", + "scripts": { + "start": "electron .", + "build": "webpack" + }, + "main": "dist/main.js", + "devDependencies": { + "@sentry/webpack-plugin": "^2.2.0", + "csp-html-webpack-plugin": "^5.1.0", + "html-webpack-plugin": "^5.3.2", + "warnings-to-errors-webpack-plugin": "^2.0.1", + "webpack": "^5.48.0", + "webpack-cli": "^4.7.2" + }, + "dependencies": { + "@sentry/electron": "3.0.0" + } +} diff --git a/test/e2e/test-apps/other/main-process-module/recipe.yml b/test/e2e/test-apps/other/main-process-module/recipe.yml new file mode 100644 index 00000000..fdd7322b --- /dev/null +++ b/test/e2e/test-apps/other/main-process-module/recipe.yml @@ -0,0 +1,4 @@ +description: Webpack app with error in main process +command: yarn && yarn build +condition: supportsContextIsolation && supportsSandbox +timeout: 120 diff --git a/test/e2e/test-apps/other/main-process-module/src/main.js b/test/e2e/test-apps/other/main-process-module/src/main.js new file mode 100644 index 00000000..5aa1da82 --- /dev/null +++ b/test/e2e/test-apps/other/main-process-module/src/main.js @@ -0,0 +1,36 @@ +import * as path from 'path'; +import * as url from 'url'; + +import { app, BrowserWindow } from 'electron'; +// eslint-disable-next-line import/no-unresolved +import { init } from '@sentry/electron'; + +init({ + dsn: '__DSN__', + debug: true, + autoSessionTracking: false, + onFatalError: () => {}, +}); + +app.on('ready', () => { + const window = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: false, + contextIsolation: true, + sandbox: true, + }, + }); + + window.loadURL( + url.format({ + pathname: path.join(__dirname, 'index.html'), + protocol: 'file:', + slashes: true, + }), + ); + + setTimeout(() => { + throw new Error('Some main error'); + }, 500); +}); diff --git a/test/e2e/test-apps/other/main-process-module/src/renderer.js b/test/e2e/test-apps/other/main-process-module/src/renderer.js new file mode 100644 index 00000000..60d14a41 --- /dev/null +++ b/test/e2e/test-apps/other/main-process-module/src/renderer.js @@ -0,0 +1,10 @@ +// eslint-disable-next-line import/no-unresolved +import { init, configureScope } from '@sentry/electron'; + +init({ + debug: true, +}); + +configureScope((scope) => { + scope.setUser({ id: 'abc-123' }); +}); diff --git a/test/e2e/test-apps/other/main-process-module/webpack.config.js b/test/e2e/test-apps/other/main-process-module/webpack.config.js new file mode 100644 index 00000000..52e930a7 --- /dev/null +++ b/test/e2e/test-apps/other/main-process-module/webpack.config.js @@ -0,0 +1,51 @@ +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CspHtmlWebpackPlugin = require('csp-html-webpack-plugin'); +const WarningsToErrorsPlugin = require('warnings-to-errors-webpack-plugin'); +const { sentryWebpackPlugin } = require('@sentry/webpack-plugin'); + +const sentryWebpackPluginOptions = { + authToken: 'some invalid auth token', + org: 'some invalid org', + project: 'some invalid project', + telemetry: false, + sourcemaps: { + assets: [], // no assets to upload - we just care about injecting debug IDs + }, + release: { + inject: false, + }, + errorHandler() { + // do nothing on errors :) + // They will happen because of the invalid auth token + }, +}; + +module.exports = [ + { + mode: 'production', + entry: './src/main.js', + target: 'electron-main', + output: { + libraryTarget: 'commonjs2', + filename: 'main.js', + }, + plugins: [new WarningsToErrorsPlugin(), sentryWebpackPlugin(sentryWebpackPluginOptions)], + }, + { + mode: 'production', + entry: './src/renderer.js', + target: 'web', + output: { + filename: 'renderer.js', + }, + plugins: [ + new HtmlWebpackPlugin(), + new WarningsToErrorsPlugin(), + new CspHtmlWebpackPlugin({ + 'default-src': "'self'", + 'script-src': "'self'", + }), + sentryWebpackPlugin(sentryWebpackPluginOptions), + ], + }, +]; diff --git a/test/e2e/test-apps/other/main-process-module/yarn.lock b/test/e2e/test-apps/other/main-process-module/yarn.lock new file mode 100644 index 00000000..2c012a8f --- /dev/null +++ b/test/e2e/test-apps/other/main-process-module/yarn.lock @@ -0,0 +1,1595 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" + integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@sentry-internal/tracing@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.53.1.tgz#85517ba93ee721424c865706f7ff4eaab1569e6d" + integrity sha512-a4H4rvVdz0XDGgNfRqc7zg6rMt2P1P05xBmgfIfztYy94Vciw1QMdboNiT7einr8ra8wogdEaK4Pe2AzYAPBJQ== + dependencies: + "@sentry/core" "7.53.1" + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + tslib "^1.9.3" + +"@sentry/browser@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.17.2.tgz#8e794b846f43a341068c83420918d896683d903e" + integrity sha512-4Ow5z9GxK5dG9+stBNKb7s6NoxE4wgEcHRmO66QTK4gH2NNmzV4R/aaZ7iDoS/lD86sH0M86jm76dpg9uiJPmw== + dependencies: + "@sentry/core" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/bundler-plugin-core@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.2.0.tgz#3d9fcc8bc7640b644218f3cbc119f5922bf54c1a" + integrity sha512-yiN1xsn82npb+4pZCQjJOIts5Ffi+rNLW9GB/kjZDtCkTCIfby5F1WPX9Ofk2MCruMguXSoc/3fi3x4tuXbFkA== + dependencies: + "@sentry/cli" "^2.17.0" + "@sentry/node" "7.53.1" + find-up "5.0.0" + glob "9.3.2" + magic-string "0.27.0" + unplugin "1.0.1" + +"@sentry/cli@^2.17.0": + version "2.18.1" + resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-2.18.1.tgz#c44f189a1a72a83087a297c5fcc7668f86dd4308" + integrity sha512-lc/dX/cvcmznWNbLzDbzxn224vwY5zLIDBe3yOO6Usg3CDgkZZ3xfjN4AIUZwkiTEPIOELodrOfdoMxqpXyYDw== + dependencies: + https-proxy-agent "^5.0.0" + node-fetch "^2.6.7" + progress "^2.0.3" + proxy-from-env "^1.1.0" + which "^2.0.2" + +"@sentry/core@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.2.tgz#f218920f269ccdbaee20a092bbc90a71a007cc88" + integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/minimal" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/core@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.53.1.tgz#c091a9d7fd010f8a2cb1dd71d949a8e453e35d4c" + integrity sha512-DAH8IJNORJJ7kQLqsZuhMkN6cwJjXzFuuUoZor7IIDHIHjtl51W+2F3Stg3+I3ZoKDfJfUNKqhipk2WZjG0FBg== + dependencies: + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + tslib "^1.9.3" + +"@sentry/electron@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sentry/electron/-/electron-3.0.0.tgz#28f1f37b599f71f7e2c8dcd8f3c4c0220a37fb11" + integrity sha512-cOjbBWaIyg4HPQ2izH1KFtrLR3YX3OJ52YeIq7H+lsZqcotnNzP4VmHehe5Jo4lWSW1RQTSxTFynPLDFM9RF9A== + dependencies: + "@sentry/browser" "6.17.2" + "@sentry/core" "6.17.2" + "@sentry/node" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + deepmerge "^4.2.2" + tslib "^2.3.1" + +"@sentry/hub@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.2.tgz#d92accada845fa21fff1b2b491d3c6964851693b" + integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g== + dependencies: + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/minimal@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.2.tgz#3b482a0d76aa33b6c9441dd21acbcc3a113e5120" + integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/types" "6.17.2" + tslib "^1.9.3" + +"@sentry/node@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.2.tgz#32a5fa00b64a331073daf1e44f500c8c57184eb1" + integrity sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ== + dependencies: + "@sentry/core" "6.17.2" + "@sentry/hub" "6.17.2" + "@sentry/tracing" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/node@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.53.1.tgz#d4c47477cf4305e352b511635d1d3d4d160e8bd7" + integrity sha512-B4ax8sRd54xj4ad+4eY2EOKNt0Mh1NjuLW1zUKS8HW3h0bmuaDFzGuhEVvEY5H4SaV6tZKj1c0dvnMnyUbYkhA== + dependencies: + "@sentry-internal/tracing" "7.53.1" + "@sentry/core" "7.53.1" + "@sentry/types" "7.53.1" + "@sentry/utils" "7.53.1" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.2.tgz#437337071fdeffa319746905b3706518b099ec6b" + integrity sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/minimal" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" + tslib "^1.9.3" + +"@sentry/types@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30" + integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ== + +"@sentry/types@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.53.1.tgz#3eefbad851f2d0deff67285d7e976d23d7d06a41" + integrity sha512-/ijchRIu+jz3+j/zY+7KRPfLSCY14fTx5xujjbOdmEKjmIHQmwPBdszcQm40uwofrR8taV4hbt5MFN+WnjCkCw== + +"@sentry/utils@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.2.tgz#e8044e753b47f86068053c8d79e4ae61a39b6732" + integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA== + dependencies: + "@sentry/types" "6.17.2" + tslib "^1.9.3" + +"@sentry/utils@7.53.1": + version "7.53.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.53.1.tgz#b1f9f1dd4de7127287ad5027c2bd1133c5590486" + integrity sha512-DKJA1LSUOEv4KOR828MzVuLh+drjeAgzyKgN063OEKmnirgjgRgNNS8wUgwpG0Tn2k6ANZGCwrdfzPeSBxshKg== + dependencies: + "@sentry/types" "7.53.1" + tslib "^1.9.3" + +"@sentry/webpack-plugin@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-2.2.0.tgz#bd7a28a7132f139f74aa1068b168ab735fb9ddea" + integrity sha512-GzwoIQ2ygau0u76uKBK7gAyJAi6Te9zgJuP//OBfmJoXupm6HIUWC6RmPFy0yMlsK4gq1Ak/KziX7PZIe5NLaA== + dependencies: + "@sentry/bundler-plugin-core" "2.2.0" + unplugin "1.0.1" + uuid "^9.0.0" + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.0.tgz#ae73dc9ec5237f2794c4f79efd6a4c73b13daf23" + integrity sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/json-schema@*", "@types/json-schema@^7.0.8": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/node@*": + version "20.2.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.3.tgz#b31eb300610c3835ac008d690de6f87e28f9b878" + integrity sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw== + +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" + integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + +"@webassemblyjs/helper-buffer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" + integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== + +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== + +"@webassemblyjs/helper-wasm-section@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" + integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" + integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-opt" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/wast-printer" "1.11.6" + +"@webassemblyjs/wasm-gen@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" + integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" + integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" + integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" + integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" + integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== + +"@webpack-cli/info@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" + integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== + dependencies: + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" + integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== + +acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.14.5: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +caniuse-lite@^1.0.30001449: + version "1.0.30001489" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz#ca82ee2d4e4dbf2bd2589c9360d3fcc2c7ba3bd8" + integrity sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ== + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.5: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +clean-css@^5.2.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" + integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== + dependencies: + source-map "~0.6.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +colorette@^2.0.14: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +csp-html-webpack-plugin@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/csp-html-webpack-plugin/-/csp-html-webpack-plugin-5.1.0.tgz#b3bfa5a50d207fe5b6bb4839dc33aa59621a35a0" + integrity sha512-6l/s6hACE+UA01PLReNKZfgLZWM98f7ewWmE79maDWIbEXiPcIWQGB3LQR/Zw+hPBj4XPZZ5zNrrO+aygqaLaQ== + dependencies: + cheerio "^1.0.0-rc.5" + lodash "^4.17.20" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-what@^6.0.1, css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +debug@4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +electron-to-chromium@^1.4.284: + version "1.4.407" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.407.tgz#087e2ab97b3eb092aa6217c05986086b7dd370cc" + integrity sha512-5smEvFSFYMv90tICOzRVP7Opp98DAC4KW7RRipg3BuNpGbbV3N+x24Zh3sbLb1T5haGtOSy/hrBfXsWnIM9aCg== + +enhanced-resolve@^5.14.1: + version "5.14.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3" + integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +envinfo@^7.7.3: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +es-module-lexer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" + integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@9.3.2: + version "9.3.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.2.tgz#8528522e003819e63d11c979b30896e0eaf52eda" + integrity sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA== + dependencies: + fs.realpath "^1.0.0" + minimatch "^7.4.1" + minipass "^4.2.4" + path-scurry "^1.6.1" + +graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-webpack-plugin@^5.3.2: + version "5.5.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz#826838e31b427f5f7f30971f8d8fa2422dfa6763" + integrity sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lru-cache@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1" + integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A== + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +magic-string@0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.27: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimatch@^7.4.1: + version "7.4.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" + integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== + dependencies: + brace-expansion "^2.0.1" + +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +"minipass@^5.0.0 || ^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" + integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-fetch@^2.6.7: + version "2.6.11" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" + integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== + dependencies: + whatwg-url "^5.0.0" + +node-releases@^2.0.8: + version "2.0.12" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" + integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.6.1: + version "1.9.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63" + integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg== + dependencies: + lru-cache "^9.1.1" + minipass "^5.0.0 || ^6.0.2" + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== + dependencies: + resolve "^1.9.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.9.0: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +schema-utils@^3.1.1, schema-utils@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" + integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.3.7: + version "5.3.9" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" + integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.17" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.16.8" + +terser@^5.10.0, terser@^5.16.8: + version "5.17.6" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.6.tgz#d810e75e1bb3350c799cd90ebefe19c9412c12de" + integrity sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3, tslib@^2.3.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" + integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== + +unplugin@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.0.1.tgz#83b528b981cdcea1cad422a12cd02e695195ef3f" + integrity sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA== + dependencies: + acorn "^8.8.1" + chokidar "^3.5.3" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.5.0" + +update-browserslist-db@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +warnings-to-errors-webpack-plugin@^2.0.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/warnings-to-errors-webpack-plugin/-/warnings-to-errors-webpack-plugin-2.3.0.tgz#5f9a58aaec458feafabe0f7a2b88a492db263a30" + integrity sha512-fzOyw+Ctr2MqJ+4UXKobDiOLzMMSBAdvGMWvZ4NRgTBCofAL2mmdfr6/Of3Bqz9Sq6R6xT5dLs6nnLLCtmppeQ== + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webpack-cli@^4.7.2: + version "4.10.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" + integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.2.0" + "@webpack-cli/info" "^1.5.0" + "@webpack-cli/serve" "^1.7.0" + colorette "^2.0.14" + commander "^7.0.0" + cross-spawn "^7.0.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + webpack-merge "^5.7.3" + +webpack-merge@^5.7.3: + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack-virtual-modules@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" + integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== + +webpack@^5.48.0: + version "5.84.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.84.0.tgz#011115617668744aece87a9eb68534487d84de1a" + integrity sha512-XezNK3kwJq6IyeoZmZ1uEqQs+42nTqIi4jYM/YjLwaJedUC1N3bwnCC0+UcnHJPfqWX0kGrQnMIvZZyWYaIZrA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" + acorn "^8.7.1" + acorn-import-assertions "^1.9.0" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.14.1" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.2" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.7" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/yarn.lock b/yarn.lock index 7aadcae6..cfc1e2a9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -128,13 +128,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.57.0.tgz#8448eb63869aa618ebb6082e3e2f50660d6260f0" - integrity sha512-uuKNIkVxkA69c08j90RJ3nVGVY26vt0KXC0ApvC3UsjDM9mtzksOIf/epKY4PyuRw5y3BcQUXE36zhM02Dk+OA== +"@sentry-internal/eslint-config-sdk@7.58.0": + version "7.58.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.58.0.tgz#cae7ca91bde98d90b2475678b41144eee97154e3" + integrity sha512-S4ue3YmsX9InBc94lxJAuBlrOdq3k7Y0QsUKbk2xYzV6OFGJ273U2XUvuuZpbc2jKlyG2Jxjvi8tdVE4p0g6Bw== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.57.0" - "@sentry-internal/typescript" "7.57.0" + "@sentry-internal/eslint-plugin-sdk" "7.58.0" + "@sentry-internal/typescript" "7.58.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -143,83 +143,83 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.57.0.tgz#bbab4ceed6f722d956107b5982db4747c00d56a1" - integrity sha512-c1Lz5sFSLlaxQoveCgxTLlvta+uW9DeJzHQWdNn0Q5IxzUo418k0BrxTT2V0P6Ch0i/d+QyaucFEhoKHk/YJJg== +"@sentry-internal/eslint-plugin-sdk@7.58.0": + version "7.58.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.58.0.tgz#acd67b8e812f4e4920996d1f94dd71d1f28ba720" + integrity sha512-TQtQDca/zRUfrWRKgjsn96FiePi7hWqZViZiOWofnIFUWT9pD2ju3wvAakdqm65aNxXO5ZJVUy7vArevBxHcFg== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.57.0.tgz#cb761931b635f8f24c84be0eecfacb8516b20551" - integrity sha512-tpViyDd8AhQGYYhI94xi2aaDopXOPfL2Apwrtb3qirWkomIQ2K86W1mPmkce+B0cFOnW2Dxv/ZTFKz6ghjK75A== +"@sentry-internal/tracing@7.58.0": + version "7.58.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.58.0.tgz#f6494ae212644b6d268decee6b660d9789b8db9a" + integrity sha512-7V/vkFFYCmSq25er3Y0wukkTM940Wvk9qjh7kWcCCeesKFHNGBCP7HVZhsymjPIJGGJTvRWc9MgBzRGe/c16Xg== dependencies: - "@sentry/core" "7.57.0" - "@sentry/types" "7.57.0" - "@sentry/utils" "7.57.0" + "@sentry/core" "7.58.0" + "@sentry/types" "7.58.0" + "@sentry/utils" "7.58.0" tslib "^2.4.1 || ^1.9.3" -"@sentry-internal/typescript@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.57.0.tgz#2f0d226cd23aca5e451a7192354d0244a1ec4224" - integrity sha512-vj49MhqOnd+VLKlOoGpTCE7N3dWxyaBFuqpy1vkOFkP/r/n4PCJpbeqM4HQ1dKAeKKK6lV/FvZTdy5vZWnE9VA== - -"@sentry/browser@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.57.0.tgz#6e724c9eac680dba99ced0fdf81be8d1e3b3bceb" - integrity sha512-E0HaYYlaqHFiIRZXxcvOO8Odvlt+TR1vFFXzqUWXPOvDRxURglTOCQ3EN/u6bxtAGJ6y/Zc2obgihTtypuel/w== - dependencies: - "@sentry-internal/tracing" "7.57.0" - "@sentry/core" "7.57.0" - "@sentry/replay" "7.57.0" - "@sentry/types" "7.57.0" - "@sentry/utils" "7.57.0" +"@sentry-internal/typescript@7.58.0": + version "7.58.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.58.0.tgz#98e3526ed636381834a523c3b595137c74158fff" + integrity sha512-60+lcEMRXKJXw3v0N+Fm8t1e9/Zfc7FAR+RknM140YN/XnlT5z8hNOruYpVswzEf4X1IOa4tBYktZc8Qzf+QUw== + +"@sentry/browser@7.58.0": + version "7.58.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.58.0.tgz#75f6f0a39435327ec95ef38722161336ba9ded79" + integrity sha512-v+PaTuK4LOJ1/uAxNQHUMRLWdlIOdiKlZAgoZojixdFKajHAeguzok93d0u2SZJaGDaLmkJYSiGAPBs1d1jHhA== + dependencies: + "@sentry-internal/tracing" "7.58.0" + "@sentry/core" "7.58.0" + "@sentry/replay" "7.58.0" + "@sentry/types" "7.58.0" + "@sentry/utils" "7.58.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/core@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.57.0.tgz#65093d739c04f320a54395a21be955fcbe326acb" - integrity sha512-l014NudPH0vQlzybtXajPxYFfs9w762NoarjObC3gu76D1jzBBFzhdRelkGpDbSLNTIsKhEDDRpgAjBWJ9icfw== +"@sentry/core@7.58.0": + version "7.58.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.58.0.tgz#5d800342225bb8a168635c13d27b2e2119dc0b0f" + integrity sha512-tdz+HOh9blnfJ4ZSfsaVaSh/i7pD2QfmC0///fWlNm+IvD+SAgYFP6M3PIsJMsaN5heZ9XMNY4wnxvd+vvJwPQ== dependencies: - "@sentry/types" "7.57.0" - "@sentry/utils" "7.57.0" + "@sentry/types" "7.58.0" + "@sentry/utils" "7.58.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/node@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.57.0.tgz#31052f5988ed4496d7f3ff925240cf9b02d09941" - integrity sha512-63mjyUVM6sfJFVQ5TGVRVGUsoEfESl5ABzIW1W0s9gUiQPaG8SOdaQJglb2VNrkMYxnRHgD8Q9LUh/qcmUyPGw== +"@sentry/node@7.58.0": + version "7.58.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.58.0.tgz#0e95a593f0a6b7a4cf46913ec7343f10397042da" + integrity sha512-Br6l0XuBEI13dektlPi0jvaVrUEirL7Z61SvbdjR8C/G6O9TXw0wKwc/BXf1GYV5JP7jsWHdRQEO2s45mtmNwQ== dependencies: - "@sentry-internal/tracing" "7.57.0" - "@sentry/core" "7.57.0" - "@sentry/types" "7.57.0" - "@sentry/utils" "7.57.0" + "@sentry-internal/tracing" "7.58.0" + "@sentry/core" "7.58.0" + "@sentry/types" "7.58.0" + "@sentry/utils" "7.58.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^2.4.1 || ^1.9.3" -"@sentry/replay@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.57.0.tgz#c8f7eae7b7edc9d32c3d2955b337f3b3c76dff39" - integrity sha512-pN4ryNS3J5EYbkXvR+O/+hseAJha7XDl8mPFtK0OGTHG10JzCi4tQJazblHQdpb5QBaMMPCeZ+isyfoQLDNXnw== +"@sentry/replay@7.58.0": + version "7.58.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.58.0.tgz#aa2499f1cbff82b27ec370d8ff0b5b6b64fb058e" + integrity sha512-gzanY+Y+48ErQxFWl2t031awz/4fR6v0Pkvu7mZWl8ZraLiVRqk2T7aPyxcL2I7yFwFElJ6mZw7buce+R+IaTA== dependencies: - "@sentry/core" "7.57.0" - "@sentry/types" "7.57.0" - "@sentry/utils" "7.57.0" + "@sentry/core" "7.58.0" + "@sentry/types" "7.58.0" + "@sentry/utils" "7.58.0" -"@sentry/types@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.57.0.tgz#4fdb80cbd49ba034dd8d9be0c0005a016d5db3ce" - integrity sha512-D7ifoUfxuVCUyktIr5Gc+jXUbtcUMmfHdTtTbf1XCZHua5mJceK9wtl3YCg3eq/HK2Ppd52BKnTzEcS5ZKQM+w== +"@sentry/types@7.58.0": + version "7.58.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.58.0.tgz#d74e5c6cb7bfd0b98d561fc99d12f76d904c6496" + integrity sha512-uy8rww5R0WSxr9kB1R1BXWomkKXosK+jOFslbIda4CfTiAMEINi7rXkqTzPJKCIRLHFvKXDFUIkMCHNMkgYjwA== -"@sentry/utils@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.57.0.tgz#8253c6fcf35138b4c424234b8da1596e11b98ad8" - integrity sha512-YXrkMCiNklqkXctn4mKYkrzNCf/dfVcRUQrkXjeBC+PHXbcpPyaJgInNvztR7Skl8lE3JPGPN4v5XhLxK1bUUg== +"@sentry/utils@7.58.0": + version "7.58.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.58.0.tgz#645ae4fdfe2af2d7020e895aa449e7c7dcd77442" + integrity sha512-EAknRDovGBnIVvGLJVxPbB1gUY/VCUoVov26Fk1BYLtUmWlzt+JYHsBJptHw15onu+M0em7z7Iax4wKoiNhhzA== dependencies: - "@sentry/types" "7.57.0" + "@sentry/types" "7.58.0" tslib "^2.4.1 || ^1.9.3" "@sindresorhus/is@^4.0.0": From 256abc6c395054cc824a408b628306205fea23f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jul 2023 18:16:56 +0100 Subject: [PATCH 113/239] chore(deps): bump semver from 5.7.1 to 5.7.2 in /examples/electron-forge-webpack (#695) --- examples/electron-forge-webpack/yarn.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/electron-forge-webpack/yarn.lock b/examples/electron-forge-webpack/yarn.lock index 53498d70..65bcefa5 100644 --- a/examples/electron-forge-webpack/yarn.lock +++ b/examples/electron-forge-webpack/yarn.lock @@ -4491,19 +4491,19 @@ semver-compare@^1.0.0: integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== "semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.5: - version "7.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" - integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" From fd2e72f92beb45ac928a34b1c1b30918c2f83236 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jul 2023 18:17:24 +0100 Subject: [PATCH 114/239] chore(deps): bump semver from 6.3.0 to 6.3.1 in /examples/electron-vite (#694) --- examples/electron-vite/yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/electron-vite/yarn.lock b/examples/electron-vite/yarn.lock index 15a81a39..486488f1 100644 --- a/examples/electron-vite/yarn.lock +++ b/examples/electron-vite/yarn.lock @@ -1204,14 +1204,14 @@ semver-compare@^1.0.0: integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== semver@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.2: - version "7.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" - integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" From edb0fe9e2fe8a3e79245698f2f53ad9c4fc35efd Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 13 Jul 2023 18:24:31 +0100 Subject: [PATCH 115/239] chore: Update changelog for release (#700) --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97943a57..489cb5e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +## 4.8.0 + +- feat: Update to [v7.58.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.58.0) of JavaScript SDKs + (#699) +- fix: Normalize filename before parsing into module name (#699) + ## 4.7.0 - feat: Update to [v7.57.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.57.0) of JavaScript SDKs From de80c56a10c20cc853cd21d6e97cab7fc8c9a84d Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Thu, 13 Jul 2023 17:33:21 +0000 Subject: [PATCH 116/239] release: 4.8.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b03dd3e3..696ac909 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.7.0", + "version": "4.8.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From b62696c4617b0ddbf77de1cf8a4e0323beb2b60b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 19 Jul 2023 01:12:40 +0200 Subject: [PATCH 117/239] test: New Electron versions (#698) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 0b6ff07f..775ae35b 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.16","23.3.10","24.6.2","25.2.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.17","23.3.10","24.6.3","25.3.0"] From 7916072e52014273f76d51974bc2dc78480f834d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 19 Jul 2023 12:57:55 +0200 Subject: [PATCH 118/239] test: Update Sentrys SDKs to v7.59.2 (#702) --- package.json | 16 +++--- src/renderer/sdk.ts | 2 +- yarn.lock | 124 ++++++++++++++++++++++---------------------- 3 files changed, 71 insertions(+), 71 deletions(-) diff --git a/package.json b/package.json index 696ac909..421a0b3d 100644 --- a/package.json +++ b/package.json @@ -58,17 +58,17 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.58.0", - "@sentry/core": "7.58.0", - "@sentry/node": "7.58.0", - "@sentry/types": "7.58.0", - "@sentry/utils": "7.58.0", + "@sentry/browser": "7.59.2", + "@sentry/core": "7.59.2", + "@sentry/node": "7.59.2", + "@sentry/types": "7.59.2", + "@sentry/utils": "7.59.2", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.58.0", - "@sentry-internal/typescript": "7.58.0", + "@sentry-internal/eslint-config-sdk": "7.59.2", + "@sentry-internal/typescript": "7.59.2", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", @@ -106,4 +106,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} +} \ No newline at end of file diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index c40831ac..b69642a0 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_58_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_59_2: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index cfc1e2a9..ec09c2d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -128,13 +128,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.58.0": - version "7.58.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.58.0.tgz#cae7ca91bde98d90b2475678b41144eee97154e3" - integrity sha512-S4ue3YmsX9InBc94lxJAuBlrOdq3k7Y0QsUKbk2xYzV6OFGJ273U2XUvuuZpbc2jKlyG2Jxjvi8tdVE4p0g6Bw== +"@sentry-internal/eslint-config-sdk@7.59.2": + version "7.59.2" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.59.2.tgz#0dec2a2a8dabe4b5ffaf58ae96fb37623f857b45" + integrity sha512-p2+Y3InGQj48Cj3MbaBxCdX40ckmyCvd2M8loMMwTjLhXmv/p4NflIreAADNlaLP0RaFoiZ7IdnVGDCYQdnCzg== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.58.0" - "@sentry-internal/typescript" "7.58.0" + "@sentry-internal/eslint-plugin-sdk" "7.59.2" + "@sentry-internal/typescript" "7.59.2" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -143,83 +143,83 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.58.0": - version "7.58.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.58.0.tgz#acd67b8e812f4e4920996d1f94dd71d1f28ba720" - integrity sha512-TQtQDca/zRUfrWRKgjsn96FiePi7hWqZViZiOWofnIFUWT9pD2ju3wvAakdqm65aNxXO5ZJVUy7vArevBxHcFg== +"@sentry-internal/eslint-plugin-sdk@7.59.2": + version "7.59.2" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.59.2.tgz#78226f235653bf25ae679266fc540754e17ca2e5" + integrity sha512-Q/yNLFpCo8qIZUQm7EVtwyLQt3q+MI3RHE3FlpFfqUwGvRZsIOOMCrpPjW1FZ2+3uSzZFof8dEGntoM9GfgqEA== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.58.0": - version "7.58.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.58.0.tgz#f6494ae212644b6d268decee6b660d9789b8db9a" - integrity sha512-7V/vkFFYCmSq25er3Y0wukkTM940Wvk9qjh7kWcCCeesKFHNGBCP7HVZhsymjPIJGGJTvRWc9MgBzRGe/c16Xg== +"@sentry-internal/tracing@7.59.2": + version "7.59.2" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.59.2.tgz#91c44a37151bb81fac0500b4e031f53583dff772" + integrity sha512-02gteChV/lMobWU06VlITq+myEWk0MzhnDCm8n/DMigB47I9HkWZFAJ+CYG6Ns0rTL+3+/c2V0bPyQkZwIC+Sg== dependencies: - "@sentry/core" "7.58.0" - "@sentry/types" "7.58.0" - "@sentry/utils" "7.58.0" + "@sentry/core" "7.59.2" + "@sentry/types" "7.59.2" + "@sentry/utils" "7.59.2" tslib "^2.4.1 || ^1.9.3" -"@sentry-internal/typescript@7.58.0": - version "7.58.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.58.0.tgz#98e3526ed636381834a523c3b595137c74158fff" - integrity sha512-60+lcEMRXKJXw3v0N+Fm8t1e9/Zfc7FAR+RknM140YN/XnlT5z8hNOruYpVswzEf4X1IOa4tBYktZc8Qzf+QUw== - -"@sentry/browser@7.58.0": - version "7.58.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.58.0.tgz#75f6f0a39435327ec95ef38722161336ba9ded79" - integrity sha512-v+PaTuK4LOJ1/uAxNQHUMRLWdlIOdiKlZAgoZojixdFKajHAeguzok93d0u2SZJaGDaLmkJYSiGAPBs1d1jHhA== - dependencies: - "@sentry-internal/tracing" "7.58.0" - "@sentry/core" "7.58.0" - "@sentry/replay" "7.58.0" - "@sentry/types" "7.58.0" - "@sentry/utils" "7.58.0" +"@sentry-internal/typescript@7.59.2": + version "7.59.2" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.59.2.tgz#df8e837c3580caf44864d88d0cd6721e59594b9a" + integrity sha512-0GIslPJpxTjPYA1zTh/wyz8majvQbn0bNZftv71Ng17y/HaZiGzYDyFG8OEjWgp7poIsOYrMAe7hsr6b5jniTA== + +"@sentry/browser@7.59.2": + version "7.59.2" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.59.2.tgz#77f6c7af33448ec375d684442ef51f21f5c26ace" + integrity sha512-N1JiBs1VRR5DV0209TZgaMwRGiTYN1C34sFzIW7nuC82X4gHy3tuJjZPlMDTtgFrALBMJ24yQ7D4HJjXrS2+Dw== + dependencies: + "@sentry-internal/tracing" "7.59.2" + "@sentry/core" "7.59.2" + "@sentry/replay" "7.59.2" + "@sentry/types" "7.59.2" + "@sentry/utils" "7.59.2" tslib "^2.4.1 || ^1.9.3" -"@sentry/core@7.58.0": - version "7.58.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.58.0.tgz#5d800342225bb8a168635c13d27b2e2119dc0b0f" - integrity sha512-tdz+HOh9blnfJ4ZSfsaVaSh/i7pD2QfmC0///fWlNm+IvD+SAgYFP6M3PIsJMsaN5heZ9XMNY4wnxvd+vvJwPQ== +"@sentry/core@7.59.2": + version "7.59.2" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.59.2.tgz#5c69cc7b8321f47c3da353f51084e2f4c4170e7d" + integrity sha512-GRhoPw6b6GkvOsa060aREc9yyHjgAKITgITNbzUmn0GqIeWD5SMoCBAcENRHVgUnpQWOpnkEF1/sqxvwx+rf6Q== dependencies: - "@sentry/types" "7.58.0" - "@sentry/utils" "7.58.0" + "@sentry/types" "7.59.2" + "@sentry/utils" "7.59.2" tslib "^2.4.1 || ^1.9.3" -"@sentry/node@7.58.0": - version "7.58.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.58.0.tgz#0e95a593f0a6b7a4cf46913ec7343f10397042da" - integrity sha512-Br6l0XuBEI13dektlPi0jvaVrUEirL7Z61SvbdjR8C/G6O9TXw0wKwc/BXf1GYV5JP7jsWHdRQEO2s45mtmNwQ== +"@sentry/node@7.59.2": + version "7.59.2" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.59.2.tgz#ff68286770d6a647a4555c9f0351c7003c00f3bc" + integrity sha512-cvTW4VwQdvNeAtBGVGE5hGmsWstGK4PwWe5PccBWJBQGM/rYzwk2tM9ZQnM5M5+yDV4bZ+21sJhvyhsHoTjmzQ== dependencies: - "@sentry-internal/tracing" "7.58.0" - "@sentry/core" "7.58.0" - "@sentry/types" "7.58.0" - "@sentry/utils" "7.58.0" + "@sentry-internal/tracing" "7.59.2" + "@sentry/core" "7.59.2" + "@sentry/types" "7.59.2" + "@sentry/utils" "7.59.2" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^2.4.1 || ^1.9.3" -"@sentry/replay@7.58.0": - version "7.58.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.58.0.tgz#aa2499f1cbff82b27ec370d8ff0b5b6b64fb058e" - integrity sha512-gzanY+Y+48ErQxFWl2t031awz/4fR6v0Pkvu7mZWl8ZraLiVRqk2T7aPyxcL2I7yFwFElJ6mZw7buce+R+IaTA== +"@sentry/replay@7.59.2": + version "7.59.2" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.59.2.tgz#4fc9c455e0e3b933075afe1729d8ba42953c62d4" + integrity sha512-Ma72ofTdtSinBY5GH0zM7k8o/WsdaVdPP/1iyFbcWQDt8dnrcsJVUKK0t9+8gijpiSMUKE+vjFjQNL9/PGYekw== dependencies: - "@sentry/core" "7.58.0" - "@sentry/types" "7.58.0" - "@sentry/utils" "7.58.0" + "@sentry/core" "7.59.2" + "@sentry/types" "7.59.2" + "@sentry/utils" "7.59.2" -"@sentry/types@7.58.0": - version "7.58.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.58.0.tgz#d74e5c6cb7bfd0b98d561fc99d12f76d904c6496" - integrity sha512-uy8rww5R0WSxr9kB1R1BXWomkKXosK+jOFslbIda4CfTiAMEINi7rXkqTzPJKCIRLHFvKXDFUIkMCHNMkgYjwA== +"@sentry/types@7.59.2": + version "7.59.2" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.59.2.tgz#25b2ae0b2dc6733ca48621cf9167c9a7965852ae" + integrity sha512-rylG7UQ0cC/xbV6trSuaAE/bsruSZy92jxQ1/KSOYKwBBvRFPXJBuiBtA81b8eYa4THZ+mE/ol2qOTJYuuV4Ug== -"@sentry/utils@7.58.0": - version "7.58.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.58.0.tgz#645ae4fdfe2af2d7020e895aa449e7c7dcd77442" - integrity sha512-EAknRDovGBnIVvGLJVxPbB1gUY/VCUoVov26Fk1BYLtUmWlzt+JYHsBJptHw15onu+M0em7z7Iax4wKoiNhhzA== +"@sentry/utils@7.59.2": + version "7.59.2" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.59.2.tgz#c4c76b1ea2a7f9363d1203dedfeafec2387bf634" + integrity sha512-uxC8xH9wsB/tZUnjmaQ1uGtsumFOc19KWfedVHXzcNwqdt5uS3EB4+D1d8WwiJyLy2nm61DdmTC9SiB4HS+OSw== dependencies: - "@sentry/types" "7.58.0" + "@sentry/types" "7.59.2" tslib "^2.4.1 || ^1.9.3" "@sindresorhus/is@^4.0.0": From 69b8ab05921f89fef663db881b958f2984f9ed31 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jul 2023 12:58:11 +0200 Subject: [PATCH 119/239] chore(deps): bump word-wrap from 1.2.3 to 1.2.4 (#705) --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ec09c2d4..d5122574 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3594,9 +3594,9 @@ which@^1.2.4, which@^1.2.9: isexe "^2.0.0" word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + version "1.2.4" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" + integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== workerpool@6.2.0: version "6.2.0" From 675520ec739329b7b6b6113a2b23cea403d0b7bb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 22 Jul 2023 12:19:50 +0200 Subject: [PATCH 120/239] test: Update Sentry SDKs to v7.60.0 (#706) --- package.json | 14 ++-- src/renderer/sdk.ts | 2 +- yarn.lock | 187 +++++++++++++++++++++++++++++--------------- 3 files changed, 133 insertions(+), 70 deletions(-) diff --git a/package.json b/package.json index 421a0b3d..e906e89a 100644 --- a/package.json +++ b/package.json @@ -58,17 +58,17 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.59.2", - "@sentry/core": "7.59.2", - "@sentry/node": "7.59.2", - "@sentry/types": "7.59.2", - "@sentry/utils": "7.59.2", + "@sentry/browser": "7.60.0", + "@sentry/core": "7.60.0", + "@sentry/node": "7.60.0", + "@sentry/types": "7.60.0", + "@sentry/utils": "7.60.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.59.2", - "@sentry-internal/typescript": "7.59.2", + "@sentry-internal/eslint-config-sdk": "7.60.0", + "@sentry-internal/typescript": "7.60.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index b69642a0..df1e7420 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_59_2: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_60_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index d5122574..349f1778 100644 --- a/yarn.lock +++ b/yarn.lock @@ -45,6 +45,13 @@ optionalDependencies: global-agent "^3.0.0" +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -128,98 +135,99 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.59.2": - version "7.59.2" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.59.2.tgz#0dec2a2a8dabe4b5ffaf58ae96fb37623f857b45" - integrity sha512-p2+Y3InGQj48Cj3MbaBxCdX40ckmyCvd2M8loMMwTjLhXmv/p4NflIreAADNlaLP0RaFoiZ7IdnVGDCYQdnCzg== +"@sentry-internal/eslint-config-sdk@7.60.0": + version "7.60.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.60.0.tgz#11ba3c4991807a4e203e0cee83465e465e168087" + integrity sha512-Zj6OxzBRllZYGoZL6Qassmrv1a+RIKWAolfG+2z26lx6A9+GHjZq66m4uKUJyHDlJ+p+iOj5xsHHwKYkki3e9g== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.59.2" - "@sentry-internal/typescript" "7.59.2" + "@sentry-internal/eslint-plugin-sdk" "7.60.0" + "@sentry-internal/typescript" "7.60.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" eslint-plugin-deprecation "^1.1.0" eslint-plugin-import "^2.22.0" + eslint-plugin-jest "^27.2.2" eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.59.2": - version "7.59.2" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.59.2.tgz#78226f235653bf25ae679266fc540754e17ca2e5" - integrity sha512-Q/yNLFpCo8qIZUQm7EVtwyLQt3q+MI3RHE3FlpFfqUwGvRZsIOOMCrpPjW1FZ2+3uSzZFof8dEGntoM9GfgqEA== +"@sentry-internal/eslint-plugin-sdk@7.60.0": + version "7.60.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.60.0.tgz#bcf71a08ca2f0b785eb9f06b3ff1cffa593588a5" + integrity sha512-cOVTWuxG6mPZ+rv+NWre3b7PcEl0PqKGKecsp8hF9dsKH3lTFGSD1tccs7LWaM+COqCZBtFY53tB2/cXQxL90A== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.59.2": - version "7.59.2" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.59.2.tgz#91c44a37151bb81fac0500b4e031f53583dff772" - integrity sha512-02gteChV/lMobWU06VlITq+myEWk0MzhnDCm8n/DMigB47I9HkWZFAJ+CYG6Ns0rTL+3+/c2V0bPyQkZwIC+Sg== +"@sentry-internal/tracing@7.60.0": + version "7.60.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.60.0.tgz#4f101d936a45965b086e042a3fba7ec7683cc034" + integrity sha512-2qvxmR954H+K7u4o92sS2u+hntzshem9XwfHAqDvBe51arNbFVy8LfJTJ5fffgZq/6jXlozCO0/6aR5yLR5mBg== dependencies: - "@sentry/core" "7.59.2" - "@sentry/types" "7.59.2" - "@sentry/utils" "7.59.2" + "@sentry/core" "7.60.0" + "@sentry/types" "7.60.0" + "@sentry/utils" "7.60.0" tslib "^2.4.1 || ^1.9.3" -"@sentry-internal/typescript@7.59.2": - version "7.59.2" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.59.2.tgz#df8e837c3580caf44864d88d0cd6721e59594b9a" - integrity sha512-0GIslPJpxTjPYA1zTh/wyz8majvQbn0bNZftv71Ng17y/HaZiGzYDyFG8OEjWgp7poIsOYrMAe7hsr6b5jniTA== - -"@sentry/browser@7.59.2": - version "7.59.2" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.59.2.tgz#77f6c7af33448ec375d684442ef51f21f5c26ace" - integrity sha512-N1JiBs1VRR5DV0209TZgaMwRGiTYN1C34sFzIW7nuC82X4gHy3tuJjZPlMDTtgFrALBMJ24yQ7D4HJjXrS2+Dw== - dependencies: - "@sentry-internal/tracing" "7.59.2" - "@sentry/core" "7.59.2" - "@sentry/replay" "7.59.2" - "@sentry/types" "7.59.2" - "@sentry/utils" "7.59.2" +"@sentry-internal/typescript@7.60.0": + version "7.60.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.60.0.tgz#546e2ffe259d08e9855e9cb7ddc13b1f737ce539" + integrity sha512-KbZlYgwBK0FXknjNGAklohAJDlJ17Sjrj6rseUOmePaR58emUpf/6SvKQXENGdr4yYS9QM5nvdj3Jp2Nk3+Xag== + +"@sentry/browser@7.60.0": + version "7.60.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.60.0.tgz#feb49746c9b650a968cfa58fa8e6ae43448d7821" + integrity sha512-WznY6zrJxCUHZns8jTvDsZw3aaHriSP+jqD+wkXZG3ceooQwFn0RkAstUuoG7YyP4Foinznn3+caeQD4ZjWaXQ== + dependencies: + "@sentry-internal/tracing" "7.60.0" + "@sentry/core" "7.60.0" + "@sentry/replay" "7.60.0" + "@sentry/types" "7.60.0" + "@sentry/utils" "7.60.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/core@7.59.2": - version "7.59.2" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.59.2.tgz#5c69cc7b8321f47c3da353f51084e2f4c4170e7d" - integrity sha512-GRhoPw6b6GkvOsa060aREc9yyHjgAKITgITNbzUmn0GqIeWD5SMoCBAcENRHVgUnpQWOpnkEF1/sqxvwx+rf6Q== +"@sentry/core@7.60.0": + version "7.60.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.60.0.tgz#c256d1305b52210d608e71de8d8f365ca9377f15" + integrity sha512-B02OlFMoqdkfDZlbQfmk7tL2vObShofk7ySd/7mp+oRdUuCvX0tyrGlwI87YJvd8YWSZOCKINs3aVYivw/b6gg== dependencies: - "@sentry/types" "7.59.2" - "@sentry/utils" "7.59.2" + "@sentry/types" "7.60.0" + "@sentry/utils" "7.60.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/node@7.59.2": - version "7.59.2" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.59.2.tgz#ff68286770d6a647a4555c9f0351c7003c00f3bc" - integrity sha512-cvTW4VwQdvNeAtBGVGE5hGmsWstGK4PwWe5PccBWJBQGM/rYzwk2tM9ZQnM5M5+yDV4bZ+21sJhvyhsHoTjmzQ== +"@sentry/node@7.60.0": + version "7.60.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.60.0.tgz#9db8fa0e71a4365b2a93a3504f2e48a38eeaae1b" + integrity sha512-I27gr7BSkdT1uwDPcbdPm7+w2yke5tojVGgothtvKfql1en4/cJZmk2bkvO2Di41+EF0UrTlUgLQff5X/q24WQ== dependencies: - "@sentry-internal/tracing" "7.59.2" - "@sentry/core" "7.59.2" - "@sentry/types" "7.59.2" - "@sentry/utils" "7.59.2" + "@sentry-internal/tracing" "7.60.0" + "@sentry/core" "7.60.0" + "@sentry/types" "7.60.0" + "@sentry/utils" "7.60.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^2.4.1 || ^1.9.3" -"@sentry/replay@7.59.2": - version "7.59.2" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.59.2.tgz#4fc9c455e0e3b933075afe1729d8ba42953c62d4" - integrity sha512-Ma72ofTdtSinBY5GH0zM7k8o/WsdaVdPP/1iyFbcWQDt8dnrcsJVUKK0t9+8gijpiSMUKE+vjFjQNL9/PGYekw== +"@sentry/replay@7.60.0": + version "7.60.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.60.0.tgz#9f59dfb8e7acff5b269ed8752a13c7b1d0f2bb75" + integrity sha512-iVSs+mhgjeK0qqLdCqbCa1P4I6hETHCUq14pTYp0bwGrI1D/a1Ho/6wLkwXv47Gnrwaba/7JFM+IxZcN4FzfmQ== dependencies: - "@sentry/core" "7.59.2" - "@sentry/types" "7.59.2" - "@sentry/utils" "7.59.2" + "@sentry/core" "7.60.0" + "@sentry/types" "7.60.0" + "@sentry/utils" "7.60.0" -"@sentry/types@7.59.2": - version "7.59.2" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.59.2.tgz#25b2ae0b2dc6733ca48621cf9167c9a7965852ae" - integrity sha512-rylG7UQ0cC/xbV6trSuaAE/bsruSZy92jxQ1/KSOYKwBBvRFPXJBuiBtA81b8eYa4THZ+mE/ol2qOTJYuuV4Ug== +"@sentry/types@7.60.0": + version "7.60.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.60.0.tgz#e3e5f16436feff802b1b126a16dba537000cef55" + integrity sha512-MSEuF9YjE0j+UKdqee2AzcNlMnShVNTkCB2Wnng6Bc5hHhn4fyYeTLbuFpNxL0ffN65lxblaWx6doDsMcvRxcA== -"@sentry/utils@7.59.2": - version "7.59.2" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.59.2.tgz#c4c76b1ea2a7f9363d1203dedfeafec2387bf634" - integrity sha512-uxC8xH9wsB/tZUnjmaQ1uGtsumFOc19KWfedVHXzcNwqdt5uS3EB4+D1d8WwiJyLy2nm61DdmTC9SiB4HS+OSw== +"@sentry/utils@7.60.0": + version "7.60.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.60.0.tgz#a96d772dcc2d007f73a5bcf67dcc66f6a7085736" + integrity sha512-Oc/PQqzeNDOSy4ZzVj6h9U+GEGRkg2PEVn9PC2V9/v3HDD20mndFqR/S2B5OOgDb/6pNGyz8XiZYI5rb29WFHA== dependencies: - "@sentry/types" "7.59.2" + "@sentry/types" "7.60.0" tslib "^2.4.1 || ^1.9.3" "@sindresorhus/is@^4.0.0": @@ -533,6 +541,14 @@ "@typescript-eslint/types" "5.51.0" "@typescript-eslint/visitor-keys" "5.51.0" +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + "@typescript-eslint/type-utils@5.51.0": version "5.51.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.51.0.tgz#7af48005531700b62a20963501d47dfb27095988" @@ -548,6 +564,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.51.0.tgz#e7c1622f46c7eea7e12bbf1edfb496d4dec37c90" integrity sha512-SqOn0ANn/v6hFn0kjvLwiDi4AzR++CBZz0NV5AnusT2/3y32jdc0G4woXPWHCumWtUXZKPAS27/9vziSsC9jnw== +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + "@typescript-eslint/typescript-estree@5.51.0": version "5.51.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.51.0.tgz#0ec8170d7247a892c2b21845b06c11eb0718f8de" @@ -561,6 +582,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.51.0": version "5.51.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.51.0.tgz#074f4fabd5b12afe9c8aa6fdee881c050f8b4d47" @@ -575,6 +609,20 @@ eslint-utils "^3.0.0" semver "^7.3.7" +"@typescript-eslint/utils@^5.10.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + "@typescript-eslint/visitor-keys@5.51.0": version "5.51.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.51.0.tgz#c0147dd9a36c0de758aaebd5b48cae1ec59eba87" @@ -583,6 +631,14 @@ "@typescript-eslint/types" "5.51.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + "@ungap/promise-all-settled@1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" @@ -1444,6 +1500,13 @@ eslint-plugin-import@^2.22.0: semver "^6.3.0" tsconfig-paths "^3.14.1" +eslint-plugin-jest@^27.2.2: + version "27.2.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.2.3.tgz#6f8a4bb2ca82c0c5d481d1b3be256ab001f5a3ec" + integrity sha512-sRLlSCpICzWuje66Gl9zvdF6mwD5X86I4u55hJyFBsxYOsBCmT5+kSUjf+fkFWVMMgpzNEupjW8WzUqi83hJAQ== + dependencies: + "@typescript-eslint/utils" "^5.10.0" + eslint-plugin-jsdoc@^30.0.3: version "30.7.13" resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-30.7.13.tgz#52e5c74fb806d3bbeb51d04a0c829508c3c6b563" From 7582ded8afe6e09f22b40097197f9859a4a53ecf Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 25 Jul 2023 14:47:24 +0200 Subject: [PATCH 121/239] feat: Use `protocol.handle` on Electron >= v25 (#704) --- package.json | 2 +- src/main/electron-normalize.ts | 44 ++++++++++++++++++++++++++++++++++ src/main/ipc.ts | 8 +++---- yarn.lock | 18 +++++++------- 4 files changed, 57 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index e906e89a..54e8d564 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "chai-as-promised": "^7.1.1", "chai-subset": "^1.6.0", "cross-env": "^7.0.3", - "electron": "23.0.0", + "electron": "25.3.0", "electron-latest-versions": "^0.2.0", "electron-mocha": "^11.0.2", "eslint": "7.32.0", diff --git a/src/main/electron-normalize.ts b/src/main/electron-normalize.ts index 8c0ca940..cbdf4d39 100644 --- a/src/main/electron-normalize.ts +++ b/src/main/electron-normalize.ts @@ -204,3 +204,47 @@ export function capturePage(window: BrowserWindow): Promise<NativeImage> { return window.capturePage(); } + +/** + * Electron >= 25 support `protocol.handle` + */ +function supportsProtocolHandle(): boolean { + return version.major >= 25; +} + +interface InternalRequest { + url: string; + body?: Buffer; +} + +/** + * Registers a custom protocol to receive events from the renderer + * + * Uses `protocol.handle` if available, otherwise falls back to `protocol.registerStringProtocol` + */ +export function registerProtocol( + protocol: Electron.Protocol, + scheme: string, + callback: (request: InternalRequest) => void, +): void { + if (supportsProtocolHandle()) { + protocol.handle(scheme, async (request) => { + callback({ + url: request.url, + body: Buffer.from(await request.arrayBuffer()), + }); + + return new Response(''); + }); + } else { + // eslint-disable-next-line deprecation/deprecation + protocol.registerStringProtocol(scheme, (request, complete) => { + callback({ + url: request.url, + body: request.uploadData?.[0]?.bytes, + }); + + complete(''); + }); + } +} diff --git a/src/main/ipc.ts b/src/main/ipc.ts index be52b6f4..b80f9adb 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -5,7 +5,7 @@ import { app, ipcMain, protocol, WebContents } from 'electron'; import { TextDecoder, TextEncoder } from 'util'; import { IPCChannel, IPCMode, mergeEvents, normalizeUrlsInReplayEnvelope, PROTOCOL_SCHEME } from '../common'; -import { supportsFullProtocol, whenAppReady } from './electron-normalize'; +import { registerProtocol, supportsFullProtocol, whenAppReady } from './electron-normalize'; import { ElectronMainOptionsInternal } from './sdk'; function captureEventFromRenderer( @@ -138,8 +138,8 @@ function configureProtocol(options: ElectronMainOptionsInternal): void { whenAppReady .then(() => { for (const sesh of options.getSessions()) { - sesh.protocol.registerStringProtocol(PROTOCOL_SCHEME, (request, callback) => { - const data = request.uploadData?.[0]?.bytes; + registerProtocol(sesh.protocol, PROTOCOL_SCHEME, (request) => { + const data = request.body; if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}`) && data) { handleEvent(options, data.toString()); @@ -148,8 +148,6 @@ function configureProtocol(options: ElectronMainOptionsInternal): void { } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.ENVELOPE}`) && data) { handleEnvelope(options, data); } - - callback(''); }); } }) diff --git a/yarn.lock b/yarn.lock index 349f1778..d73bd7c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -453,10 +453,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.13.0.tgz#0400d1e6ce87e9d3032c19eb6c58205b0d3f7850" integrity sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg== -"@types/node@^16.11.26": - version "16.18.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.12.tgz#e3bfea80e31523fde4292a6118f19ffa24fd6f65" - integrity sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw== +"@types/node@^18.11.18": + version "18.16.19" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.19.tgz#cb03fca8910fdeb7595b755126a8a78144714eea" + integrity sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA== "@types/qs@*": version "6.9.7" @@ -1313,13 +1313,13 @@ electron-window@^0.8.0: dependencies: is-electron-renderer "^2.0.0" -electron@23.0.0: - version "23.0.0" - resolved "https://registry.yarnpkg.com/electron/-/electron-23.0.0.tgz#4da457d7585149bb1a98ea8bddb286e72322a309" - integrity sha512-S6hVtTAjauMiiWP9sBVR5RpcUC464cNZ06I2EMUjeZBq+KooS6tLmNsfw0zLpAXDp1qosjlBP3v71NTZ3gd9iA== +electron@25.3.0: + version "25.3.0" + resolved "https://registry.yarnpkg.com/electron/-/electron-25.3.0.tgz#e818ab3ebd3e7a45f8fca0f47e607c9af2dc92c7" + integrity sha512-cyqotxN+AroP5h2IxUsJsmehYwP5LrFAOO7O7k9tILME3Sa1/POAg3shrhx4XEnaAMyMqMLxzGvkzCVxzEErnA== dependencies: "@electron/get" "^2.0.0" - "@types/node" "^16.11.26" + "@types/node" "^18.11.18" extract-zip "^2.0.1" emoji-regex@^8.0.0: From ecd978a63cb4899f64b9b67746f56f76be59317d Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Sat, 29 Jul 2023 12:02:26 +0200 Subject: [PATCH 122/239] feat: Deprecate `tracingOrigins` for `tracePropagationTargets` (#703) --- package.json | 1 + src/main/integrations/net-breadcrumbs.ts | 137 +++++++++----- test/unit/net.test.ts | 220 +++++++++++++++++++++++ 3 files changed, 314 insertions(+), 44 deletions(-) create mode 100644 test/unit/net.test.ts diff --git a/package.json b/package.json index 54e8d564..9176bb9b 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "@sentry/types": "7.60.0", "@sentry/utils": "7.60.0", "deepmerge": "4.3.0", + "lru_map": "^0.3.3", "tslib": "^2.5.0" }, "devDependencies": { diff --git a/src/main/integrations/net-breadcrumbs.ts b/src/main/integrations/net-breadcrumbs.ts index f7453e95..08ba85bc 100644 --- a/src/main/integrations/net-breadcrumbs.ts +++ b/src/main/integrations/net-breadcrumbs.ts @@ -1,12 +1,11 @@ /* eslint-disable deprecation/deprecation */ -import { getCurrentHub } from '@sentry/core'; -import { Integration, Span } from '@sentry/types'; -import { fill } from '@sentry/utils'; +import { getCurrentHub } from '@sentry/node'; +import { EventProcessor, Hub, Integration, Span, TracePropagationTargets } from '@sentry/types'; +import { fill, stringMatchesSomePattern } from '@sentry/utils'; import { ClientRequest, ClientRequestConstructorOptions, IncomingMessage, net } from 'electron'; +import { LRUMap } from 'lru_map'; import * as urlModule from 'url'; -import { OrBool, OrFalse } from '../../common/types'; - type ShouldTraceFn = (method: string, url: string) => boolean; interface NetOptions { @@ -15,37 +14,23 @@ interface NetOptions { * * Defaults to: true */ - breadcrumbs: boolean; + breadcrumbs?: boolean; /** * Whether to capture transaction spans for net requests * * true | false | (method: string, url: string) => boolean * Defaults to: true */ - tracing: ShouldTraceFn; + tracing?: ShouldTraceFn | boolean; + /** - * Whether to add 'sentry-trace' headers to outgoing requests + * @deprecated Use `tracePropagationTargets` client option instead. * - * true | false | (method: string, url: string) => boolean - * Defaults to: true + * Sentry.init({ + * tracePropagationTargets: ['api.site.com'], + * }) */ - tracingOrigins: ShouldTraceFn; -} - -const DEFAULT_OPTIONS: NetOptions = { - breadcrumbs: true, - tracing: (_method, _url) => true, - tracingOrigins: (_method, _url) => true, -}; - -/** Converts all user supplied options to T | false */ -export function normalizeOptions(options: Partial<OrBool<NetOptions>>): Partial<OrFalse<NetOptions>> { - return (Object.keys(options) as (keyof NetOptions)[]).reduce((obj, k) => { - if (typeof options[k] === 'function' || options[k] === false) { - obj[k] = options[k] as boolean & (false | ShouldTraceFn); - } - return obj; - }, {} as Partial<OrFalse<NetOptions>>); + tracingOrigins?: ShouldTraceFn | boolean; } /** http module integration */ @@ -56,22 +41,19 @@ export class Net implements Integration { /** @inheritDoc */ public name: string = Net.id; - private readonly _options: OrFalse<NetOptions>; - /** @inheritDoc */ - public constructor(options: Partial<OrBool<NetOptions>> = {}) { - this._options = { - ...DEFAULT_OPTIONS, - ...normalizeOptions(options), - }; - } + public constructor(private readonly _options: NetOptions = {}) {} /** @inheritDoc */ - public setupOnce(): void { + public setupOnce(_addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void { + const clientOptions = getCurrentHub().getClient()?.getOptions(); + // No need to instrument if we don't want to track anything - if (this._options.breadcrumbs || this._options.tracing) { - fill(net, 'request', createWrappedRequestFactory(this._options)); + if (this._options.breadcrumbs === false && this._options.tracing === false) { + return; } + + fill(net, 'request', createWrappedRequestFactory(this._options, clientOptions?.tracePropagationTargets)); } } @@ -125,7 +107,73 @@ type RequestMethod = (opt: RequestOptions) => ClientRequest; type WrappedRequestMethodFactory = (original: RequestMethod) => RequestMethod; /** */ -function createWrappedRequestFactory(options: OrFalse<NetOptions>): WrappedRequestMethodFactory { +function createWrappedRequestFactory( + options: NetOptions, + tracePropagationTargets: TracePropagationTargets | undefined, +): WrappedRequestMethodFactory { + // We're caching results so we don't have to recompute regexp every time we create a request. + const createSpanUrlMap = new LRUMap<string, boolean>(100); + const headersUrlMap = new LRUMap<string, boolean>(100); + + const shouldCreateSpan = (method: string, url: string): boolean => { + if (options.tracing === undefined) { + return true; + } + + if (options.tracing === false) { + return false; + } + + const key = `${method}:${url}`; + + const cachedDecision = createSpanUrlMap.get(key); + if (cachedDecision !== undefined) { + return cachedDecision; + } + + const decision = options.tracing === true || options.tracing(method, url); + createSpanUrlMap.set(key, decision); + return decision; + }; + + // This will be considerably simpler once `tracingOrigins` is removed in the next major release + const shouldAttachTraceData = (method: string, url: string): boolean => { + if (options.tracingOrigins === false) { + return false; + } + + // Neither integration nor client options are set or integration option is set to true + if ( + (options.tracingOrigins === undefined && tracePropagationTargets === undefined) || + options.tracingOrigins === true + ) { + return true; + } + + const key = `${method}:${url}`; + + const cachedDecision = headersUrlMap.get(key); + if (cachedDecision !== undefined) { + return cachedDecision; + } + + if (tracePropagationTargets) { + const decision = stringMatchesSomePattern(url, tracePropagationTargets); + headersUrlMap.set(key, decision); + return decision; + } + + if (options.tracingOrigins) { + const decision = options.tracingOrigins(method, url); + headersUrlMap.set(key, decision); + return decision; + } + + // We cannot reach here since either `tracePropagationTargets` or `tracingOrigins` will be defined but TypeScript + // cannot infer that + return true; + }; + return function wrappedRequestMethodFactory(originalRequestMethod: RequestMethod): RequestMethod { return function requestMethod(this: typeof net, reqOptions: RequestOptions): ClientRequest { // eslint-disable-next-line @typescript-eslint/no-this-alias @@ -140,8 +188,9 @@ function createWrappedRequestFactory(options: OrFalse<NetOptions>): WrappedReque let span: Span | undefined; - const scope = getCurrentHub().getScope(); - if (scope && options.tracing && options.tracing(method, url)) { + const hub = getCurrentHub(); + const scope = hub.getScope(); + if (scope && shouldCreateSpan(method, url)) { const parentSpan = scope.getSpan(); if (parentSpan) { @@ -150,7 +199,7 @@ function createWrappedRequestFactory(options: OrFalse<NetOptions>): WrappedReque op: 'http.client', }); - if (options.tracingOrigins && options.tracingOrigins(method, url)) { + if (shouldAttachTraceData(method, url)) { request.setHeader('sentry-trace', span.toTraceparent()); } } @@ -160,7 +209,7 @@ function createWrappedRequestFactory(options: OrFalse<NetOptions>): WrappedReque .once('response', function (this: ClientRequest, res: IncomingMessage): void { // eslint-disable-next-line @typescript-eslint/no-this-alias const req = this; - if (options.breadcrumbs) { + if (options.breadcrumbs !== false) { addRequestBreadcrumb('response', method, url, req, res); } if (span) { @@ -174,7 +223,7 @@ function createWrappedRequestFactory(options: OrFalse<NetOptions>): WrappedReque // eslint-disable-next-line @typescript-eslint/no-this-alias const req = this; - if (options.breadcrumbs) { + if (options.breadcrumbs !== false) { addRequestBreadcrumb('error', method, url, req, undefined); } if (span) { diff --git a/test/unit/net.test.ts b/test/unit/net.test.ts new file mode 100644 index 00000000..d921cb8f --- /dev/null +++ b/test/unit/net.test.ts @@ -0,0 +1,220 @@ +import { expect, should, use } from 'chai'; +import * as http from 'http'; +import chaiAsPromised = require('chai-as-promised'); +import { setAsyncContextStrategy, Span } from '@sentry/core'; +import { createTransport, Hub, NodeClient } from '@sentry/node'; +import { ClientOptions, Transaction, TransactionContext } from '@sentry/types'; +import { resolvedSyncPromise } from '@sentry/utils'; +import { net } from 'electron'; + +import { Net } from '../../src/main/integrations/net-breadcrumbs'; + +// eslint-disable-next-line @typescript-eslint/unbound-method +const originalRequest = net.request; + +should(); +use(chaiAsPromised); + +const TEST_SERVER_PORT = 8123; + +function startServer(): http.Server<any, any> { + return http + .createServer(function (req, res) { + const headersJson = JSON.stringify(req.headers); + res.write(headersJson); + res.end(); + }) + .listen(TEST_SERVER_PORT); +} + +async function makeRequest(): Promise<Record<string, string>> { + return net.fetch(`http://localhost:${TEST_SERVER_PORT}`).then((res) => res.json()) as Promise<Record<string, string>>; +} + +function getDefaultNodeClientOptions(options: Partial<ClientOptions> = {}): ClientOptions { + return { + integrations: [], + transport: () => createTransport({ recordDroppedEvent: () => undefined }, (_) => resolvedSyncPromise({})), + stackParser: () => [], + instrumenter: 'sentry', + ...options, + }; +} + +function mockAsyncContextStrategy(getHub: () => Hub): void { + function getCurrentHub(): Hub | undefined { + return getHub(); + } + + function runWithAsyncContext<T>(fn: (hub: Hub) => T): T { + return fn(getHub()); + } + + setAsyncContextStrategy({ getCurrentHub, runWithAsyncContext }); +} + +function createTransactionOnScope( + customOptions: Partial<ClientOptions> = {}, + customContext?: Partial<TransactionContext>, +): [Transaction, Hub] { + const hub = new Hub(); + mockAsyncContextStrategy(() => hub); + + const options = getDefaultNodeClientOptions({ + dsn: 'https://dogsarebadatkeepingsecrets@squirrelchasers.ingest.sentry.io/12312012', + debug: true, + tracesSampleRate: 1.0, + release: '1.0.0', + environment: 'production', + ...customOptions, + }); + + hub.bindClient(new NodeClient(options)); + + hub.configureScope((scope) => + scope.setUser({ + id: 'uid123', + segment: 'segmentA', + }), + ); + + const transaction = hub.startTransaction({ + name: 'dogpark', + traceId: '12312012123120121231201212312012', + ...customContext, + }); + + hub.getScope().setSpan(transaction); + + return [transaction, hub]; +} + +function getSpans(transaction: Transaction): Span[] { + return (transaction as unknown as Span).spanRecorder?.spans as Span[]; +} + +// eslint-disable-next-line jest/no-disabled-tests +describe.skip('net integration', () => { + let server: http.Server<any, any> | undefined; + + beforeEach(() => { + net.request = originalRequest; + server = startServer(); + }); + + afterEach(() => { + if (server) { + server.close(); + } + }); + + it('creates spans and adds headers by default', async () => { + const [transaction] = createTransactionOnScope({ integrations: [new Net()] }); + const headers = await makeRequest(); + + const spans = getSpans(transaction); + expect(spans.length).to.equal(2); + + // our span is at index 1 because the transaction itself is at index 0 + expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`); + expect(spans[1].op).to.equal('http.client'); + + expect(headers['sentry-trace']).not.to.be.empty; + }); + + describe('constructor options', () => { + it('tracing = false disables spans and headers', async () => { + const [transaction] = createTransactionOnScope({ + integrations: [new Net({ tracing: false })], + }); + const headers = await makeRequest(); + + const spans = getSpans(transaction); + + // We should have the original transaction span, but no request span + expect(spans.length).to.equal(1); + expect(headers['sentry-trace']).to.be.undefined; + }); + + it('tracing = fn can disable spans and headers', async () => { + const [transaction] = createTransactionOnScope({ + integrations: [new Net({ tracing: () => false })], + }); + const headers = await makeRequest(); + + const spans = getSpans(transaction); + + // We should have the original transaction span, but no request span + expect(spans.length).to.equal(1); + expect(headers['sentry-trace']).to.be.undefined; + }); + + it('tracing = fn can enable spans and headers', async () => { + const [transaction] = createTransactionOnScope({ + integrations: [new Net({ tracing: () => true })], + }); + const headers = await makeRequest(); + + const spans = getSpans(transaction); + expect(spans.length).to.equal(2); + + // our span is at index 1 because the transaction itself is at index 0 + expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`); + expect(spans[1].op).to.equal('http.client'); + + expect(headers['sentry-trace']).not.to.be.empty; + }); + + it('tracingOrigins = fn can disable headers', async () => { + const [transaction] = createTransactionOnScope({ + integrations: [new Net({ tracing: () => true, tracingOrigins: () => false })], + }); + const headers = await makeRequest(); + + const spans = getSpans(transaction); + expect(spans.length).to.equal(2); + + // our span is at index 1 because the transaction itself is at index 0 + expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`); + expect(spans[1].op).to.equal('http.client'); + + expect(headers['sentry-trace']).to.be.undefined; + }); + }); + + describe('client options', () => { + it('tracePropagationTargets can enable headers', async () => { + const [transaction] = createTransactionOnScope({ + tracePropagationTargets: ['localhost'], + integrations: [new Net()], + }); + const headers = await makeRequest(); + + const spans = getSpans(transaction); + expect(spans.length).to.equal(2); + + // our span is at index 1 because the transaction itself is at index 0 + expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`); + expect(spans[1].op).to.equal('http.client'); + + expect(headers['sentry-trace']).not.to.be.empty; + }); + + it('tracePropagationTargets can disable headers', async () => { + const [transaction] = createTransactionOnScope({ + tracePropagationTargets: ['api.localhost'], + integrations: [new Net()], + }); + const headers = await makeRequest(); + + const spans = getSpans(transaction); + expect(spans.length).to.equal(2); + + // our span is at index 1 because the transaction itself is at index 0 + expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`); + expect(spans[1].op).to.equal('http.client'); + + expect(headers['sentry-trace']).to.be.undefined; + }); + }); +}); From 9eaed5d01e3e139218e6f9efc2636ca94f8c1cec Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 2 Aug 2023 15:34:05 +0200 Subject: [PATCH 123/239] feat: Tracing without performance (#710) --- src/main/integrations/net-breadcrumbs.ts | 42 ++++++++++++++++++++++-- test/unit/net.test.ts | 31 ++++++++++++++--- 2 files changed, 65 insertions(+), 8 deletions(-) diff --git a/src/main/integrations/net-breadcrumbs.ts b/src/main/integrations/net-breadcrumbs.ts index 08ba85bc..898ea44f 100644 --- a/src/main/integrations/net-breadcrumbs.ts +++ b/src/main/integrations/net-breadcrumbs.ts @@ -1,7 +1,14 @@ /* eslint-disable deprecation/deprecation */ +import { getDynamicSamplingContextFromClient } from '@sentry/core'; import { getCurrentHub } from '@sentry/node'; -import { EventProcessor, Hub, Integration, Span, TracePropagationTargets } from '@sentry/types'; -import { fill, stringMatchesSomePattern } from '@sentry/utils'; +import { DynamicSamplingContext, EventProcessor, Hub, Integration, Span, TracePropagationTargets } from '@sentry/types'; +import { + dynamicSamplingContextToSentryBaggageHeader, + fill, + generateSentryTraceHeader, + logger, + stringMatchesSomePattern, +} from '@sentry/utils'; import { ClientRequest, ClientRequestConstructorOptions, IncomingMessage, net } from 'electron'; import { LRUMap } from 'lru_map'; import * as urlModule from 'url'; @@ -102,6 +109,21 @@ function parseOptions(optionsIn: ClientRequestConstructorOptions | string): { me }; } +function addHeadersToRequest( + request: Electron.ClientRequest, + url: string, + sentryTraceHeader: string, + dynamicSamplingContext?: Partial<DynamicSamplingContext>, +): void { + logger.log(`[Tracing] Adding sentry-trace header ${sentryTraceHeader} to outgoing request to "${url}": `); + request.setHeader('sentry-trace', sentryTraceHeader); + + const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext); + if (sentryBaggageHeader) { + request.setHeader('baggage', sentryBaggageHeader); + } +} + type RequestOptions = string | ClientRequestConstructorOptions; type RequestMethod = (opt: RequestOptions) => ClientRequest; type WrappedRequestMethodFactory = (original: RequestMethod) => RequestMethod; @@ -200,7 +222,21 @@ function createWrappedRequestFactory( }); if (shouldAttachTraceData(method, url)) { - request.setHeader('sentry-trace', span.toTraceparent()); + const sentryTraceHeader = span.toTraceparent(); + const dynamicSamplingContext = span?.transaction?.getDynamicSamplingContext(); + + addHeadersToRequest(request, url, sentryTraceHeader, dynamicSamplingContext); + } + } else { + if (shouldAttachTraceData(method, url)) { + const { traceId, sampled, dsc } = scope.getPropagationContext(); + const sentryTraceHeader = generateSentryTraceHeader(traceId, undefined, sampled); + + const client = hub.getClient(); + const dynamicSamplingContext = + dsc || (client ? getDynamicSamplingContextFromClient(traceId, client, scope) : undefined); + + addHeadersToRequest(request, url, sentryTraceHeader, dynamicSamplingContext); } } } diff --git a/test/unit/net.test.ts b/test/unit/net.test.ts index d921cb8f..d4d98544 100644 --- a/test/unit/net.test.ts +++ b/test/unit/net.test.ts @@ -1,7 +1,7 @@ import { expect, should, use } from 'chai'; import * as http from 'http'; import chaiAsPromised = require('chai-as-promised'); -import { setAsyncContextStrategy, Span } from '@sentry/core'; +import { getActiveTransaction, setAsyncContextStrategy, Span } from '@sentry/core'; import { createTransport, Hub, NodeClient } from '@sentry/node'; import { ClientOptions, Transaction, TransactionContext } from '@sentry/types'; import { resolvedSyncPromise } from '@sentry/utils'; @@ -53,10 +53,7 @@ function mockAsyncContextStrategy(getHub: () => Hub): void { setAsyncContextStrategy({ getCurrentHub, runWithAsyncContext }); } -function createTransactionOnScope( - customOptions: Partial<ClientOptions> = {}, - customContext?: Partial<TransactionContext>, -): [Transaction, Hub] { +function createHubOnScope(customOptions: Partial<ClientOptions> = {}): Hub { const hub = new Hub(); mockAsyncContextStrategy(() => hub); @@ -78,6 +75,15 @@ function createTransactionOnScope( }), ); + return hub; +} + +function createTransactionOnScope( + customOptions: Partial<ClientOptions> = {}, + customContext?: Partial<TransactionContext>, +): [Transaction, Hub] { + const hub = createHubOnScope(customOptions); + const transaction = hub.startTransaction({ name: 'dogpark', traceId: '12312012123120121231201212312012', @@ -217,4 +223,19 @@ describe.skip('net integration', () => { expect(headers['sentry-trace']).to.be.undefined; }); }); + + describe('tracing without performance', () => { + it('adds headers without transaction', async () => { + createHubOnScope({ + tracePropagationTargets: ['localhost'], + integrations: [new Net()], + }); + const headers = await makeRequest(); + const transaction = getActiveTransaction(); + + expect(transaction).to.be.undefined; + expect(headers['sentry-trace']).not.to.be.empty; + expect(headers['baggage']).not.to.be.empty; + }); + }); }); From 85f82bc34baadb847ef0a1918dfcaf4b5f00449b Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 2 Aug 2023 21:55:48 +0200 Subject: [PATCH 124/239] fix: Ensure context from previous run is used for native main crashes (#683) --- .../integrations/sentry-minidump/index.ts | 90 +++++++++++++------ src/main/store.ts | 5 +- .../native-sentry/main-update/event.json | 72 +++++++++++++++ .../native-sentry/main-update/package.json | 8 ++ .../native-sentry/main-update/recipe.yml | 4 + .../native-sentry/main-update/src/index.html | 15 ++++ .../native-sentry/main-update/src/main.js | 32 +++++++ .../test-apps/native-sentry/main/src/main.js | 2 +- 8 files changed, 195 insertions(+), 33 deletions(-) create mode 100644 test/e2e/test-apps/native-sentry/main-update/event.json create mode 100644 test/e2e/test-apps/native-sentry/main-update/package.json create mode 100644 test/e2e/test-apps/native-sentry/main-update/recipe.yml create mode 100644 test/e2e/test-apps/native-sentry/main-update/src/index.html create mode 100644 test/e2e/test-apps/native-sentry/main-update/src/main.js diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts index ca4367c8..c1f4b9cc 100644 --- a/src/main/integrations/sentry-minidump/index.ts +++ b/src/main/integrations/sentry-minidump/index.ts @@ -5,7 +5,7 @@ import { basename, logger, SentryError } from '@sentry/utils'; import { app, crashReporter } from 'electron'; import { mergeEvents } from '../../../common'; -import { getEventDefaults } from '../../context'; +import { getDefaultEnvironment, getDefaultReleaseName, getEventDefaults } from '../../context'; import { EXIT_REASONS, onChildProcessGone, onRendererProcessGone } from '../../electron-normalize'; import { sentryCachePath } from '../../fs'; import { getRendererProperties, trackRendererProperties } from '../../renderers'; @@ -14,6 +14,11 @@ import { checkPreviousSession, sessionCrashed } from '../../sessions'; import { BufferedWriteStore } from '../../store'; import { deleteMinidump, getMinidumpLoader, MinidumpLoader } from './minidump-loader'; +interface PreviousRun { + scope: Scope; + event?: Event; +} + /** Sends minidumps via the Sentry uploader */ export class SentryMinidump implements Integration { /** @inheritDoc */ @@ -23,10 +28,10 @@ export class SentryMinidump implements Integration { public name: string = SentryMinidump.id; /** Store to persist context information beyond application crashes. */ - private _scopeStore?: BufferedWriteStore<Scope>; + private _scopeStore?: BufferedWriteStore<PreviousRun>; /** Temp store for the scope of last run */ - private _scopeLastRun?: Promise<Scope>; + private _scopeLastRun?: Promise<PreviousRun>; private _minidumpLoader?: MinidumpLoader; @@ -41,15 +46,22 @@ export class SentryMinidump implements Integration { this._startCrashReporter(); - this._scopeStore = new BufferedWriteStore<Scope>(sentryCachePath, 'scope_v2', new Scope()); + this._scopeStore = new BufferedWriteStore<PreviousRun>(sentryCachePath, 'scope_v3', { + scope: new Scope(), + }); + // We need to store the scope in a variable here so it can be attached to minidumps this._scopeLastRun = this._scopeStore.get(); - this._setupScopeListener(); - - const client = getCurrentHub().getClient<NodeClient>(); + const hub = getCurrentHub(); + const client = hub.getClient<NodeClient>(); const options = client?.getOptions() as ElectronMainOptions; + const currentRelease = options?.release || getDefaultReleaseName(); + const currentEnvironment = options?.environment || getDefaultEnvironment(); + + this._setupScopeListener(currentRelease, currentEnvironment); + if (!options?.dsn) { throw new SentryError('Attempted to enable Electron native crash reporter but no DSN was supplied'); } @@ -169,22 +181,31 @@ export class SentryMinidump implements Integration { /** * Adds a scope listener to persist changes to disk. */ - private _setupScopeListener(): void { - const hubScope = getCurrentHub().getScope(); - if (hubScope) { - hubScope.addScopeListener((updatedScope) => { - const scope = Scope.clone(updatedScope); - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - (scope as any)._eventProcessors = []; - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - (scope as any)._scopeListeners = []; - - // Since the initial scope read is async, we need to ensure that any writes do not beat that - // https://github.com/getsentry/sentry-electron/issues/585 - setImmediate(() => { - void this._scopeStore?.set(scope); + private _setupScopeListener(currentRelease: string, currentEnvironment: string): void { + const scopeChanged = (updatedScope: Scope): void => { + const scope = Scope.clone(updatedScope); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + (scope as any)._eventProcessors = []; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + (scope as any)._scopeListeners = []; + + // Since the initial scope read is async, we need to ensure that any writes do not beat that + // https://github.com/getsentry/sentry-electron/issues/585 + setImmediate(async () => { + const event = await getEventDefaults(currentRelease, currentEnvironment); + void this._scopeStore?.set({ + scope, + event, }); }); + }; + + const scope = getCurrentHub().getScope(); + + if (scope) { + scope.addScopeListener(scopeChanged); + // Ensure at least one event is written to disk + scopeChanged(scope); } } @@ -193,7 +214,7 @@ export class SentryMinidump implements Integration { * * Returns true if one or more minidumps were found */ - private async _sendNativeCrashes(event: Event): Promise<boolean> { + private async _sendNativeCrashes(eventIn: Event): Promise<boolean> { // Whenever we are called, assume that the crashes we are going to load down // below have occurred recently. This means, we can use the same event data // for all minidumps that we load now. There are two conditions: @@ -206,6 +227,8 @@ export class SentryMinidump implements Integration { // about it. Just use the breadcrumbs and context information we have // right now and hope that the delay was not too long. + let event: Event | null = eventIn; + if (this._minidumpLoader === undefined) { throw new SentryError('Invariant violation: Native crashes not enabled'); } @@ -224,19 +247,30 @@ export class SentryMinidump implements Integration { const enabled = client.getOptions().enabled; // If the SDK is not enabled, we delete the minidump files so they - // dont accumulate and/or get sent later + // don't accumulate and/or get sent later if (enabled === false) { minidumps.forEach(deleteMinidump); return false; } - const storedScope = Scope.clone(await this._scopeLastRun); - let newEvent = await storedScope.applyToEvent(event); + // If this is a native main process crash, we need to apply the scope and context from the previous run + if (event?.tags?.['event.process'] === 'browser') { + const previousRun = await this._scopeLastRun; + + const storedScope = Scope.clone(previousRun?.scope); + event = await storedScope.applyToEvent(event); + + if (event && previousRun) { + event.release = previousRun.event?.release || event.release; + event.environment = previousRun.event?.environment || event.environment; + event.contexts = previousRun.event?.contexts || event.contexts; + } + } const hubScope = hub.getScope(); - newEvent = hubScope ? await hubScope.applyToEvent(event) : event; + event = hubScope && event ? await hubScope.applyToEvent(event) : event; - if (!newEvent) { + if (!event) { return false; } @@ -244,7 +278,7 @@ export class SentryMinidump implements Integration { const data = await minidump.load(); if (data) { - captureEvent(newEvent, { + captureEvent(event, { attachments: [ { attachmentType: 'event.minidump', diff --git a/src/main/store.ts b/src/main/store.ts index 94887d00..bffb0f3c 100644 --- a/src/main/store.ts +++ b/src/main/store.ts @@ -117,8 +117,6 @@ export class Store<T> { * Extends Store to throttle writes. */ export class BufferedWriteStore<T> extends Store<T> { - /** The minimum time between writes */ - private readonly _throttleTime?: number; /** A write that hasn't been written to disk yet */ private _pendingWrite: { data: T; timeout: NodeJS.Timeout } | undefined; @@ -130,9 +128,8 @@ export class BufferedWriteStore<T> extends Store<T> { * @param initial An initial value to initialize data with. * @param throttleTime The minimum time between writes */ - public constructor(path: string, id: string, initial: T, throttleTime: number = 500) { + public constructor(path: string, id: string, initial: T, private readonly _throttleTime: number = 500) { super(path, id, initial); - this._throttleTime = throttleTime; } /** @inheritdoc */ diff --git a/test/e2e/test-apps/native-sentry/main-update/event.json b/test/e2e/test-apps/native-sentry/main-update/event.json new file mode 100644 index 00000000..203cd235 --- /dev/null +++ b/test/e2e/test-apps/native-sentry/main-update/event.json @@ -0,0 +1,72 @@ +{ + "method": "envelope", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "appId": "277345", + "data": { + "sdk": { + "name": "sentry.javascript.electron", + "packages": [ + { + "name": "npm:@sentry/electron", + "version": "{{version}}" + } + ], + "version": "{{version}}" + }, + "contexts": { + "app": { + "app_name": "native-sentry-main-update", + "app_version": "1.0.0", + "app_start_time": "{{time}}" + }, + "browser": { + "name": "Chrome" + }, + "chrome": { + "name": "Chrome", + "type": "runtime", + "version": "{{version}}" + }, + "device": { + "arch": "{{arch}}", + "family": "Desktop", + "memory_size": 0, + "free_memory": 0, + "processor_count": 0, + "processor_frequency": 0, + "cpu_description": "{{cpu}}", + "screen_resolution":"{{screen}}", + "screen_density": 1, + "language": "{{language}}" + }, + "node": { + "name": "Node", + "type": "runtime", + "version": "{{version}}" + }, + "os": { + "name": "{{platform}}", + "version": "{{version}}" + }, + "runtime": { + "name": "Electron", + "version": "{{version}}" + } + }, + "release": "native-sentry-main-update@1.0.0", + "environment": "development", + "user": { + "ip_address": "{{auto}}" + }, + "event_id": "{{id}}", + "timestamp": 0, + "breadcrumbs": [], + "tags": { + "event.environment": "native", + "event.origin": "electron", + "event.process": "browser", + "event_type": "native" + } + }, + "attachments": [ { "attachment_type": "event.minidump" } ] +} diff --git a/test/e2e/test-apps/native-sentry/main-update/package.json b/test/e2e/test-apps/native-sentry/main-update/package.json new file mode 100644 index 00000000..150ecdb8 --- /dev/null +++ b/test/e2e/test-apps/native-sentry/main-update/package.json @@ -0,0 +1,8 @@ +{ + "name": "native-sentry-main-update", + "version": "1.0.0", + "main": "src/main.js", + "dependencies": { + "@sentry/electron": "3.0.0" + } +} diff --git a/test/e2e/test-apps/native-sentry/main-update/recipe.yml b/test/e2e/test-apps/native-sentry/main-update/recipe.yml new file mode 100644 index 00000000..8e3a25db --- /dev/null +++ b/test/e2e/test-apps/native-sentry/main-update/recipe.yml @@ -0,0 +1,4 @@ +description: Native Main Crash (after update) +category: Native (Sentry Uploader) +command: yarn +runTwice: true diff --git a/test/e2e/test-apps/native-sentry/main-update/src/index.html b/test/e2e/test-apps/native-sentry/main-update/src/index.html new file mode 100644 index 00000000..2707fc4f --- /dev/null +++ b/test/e2e/test-apps/native-sentry/main-update/src/index.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + </head> + <body> + <script> + const { init } = require('@sentry/electron'); + + init({ + debug: true, + }); + </script> + </body> +</html> \ No newline at end of file diff --git a/test/e2e/test-apps/native-sentry/main-update/src/main.js b/test/e2e/test-apps/native-sentry/main-update/src/main.js new file mode 100644 index 00000000..e2af00c9 --- /dev/null +++ b/test/e2e/test-apps/native-sentry/main-update/src/main.js @@ -0,0 +1,32 @@ +const path = require('path'); + +const { app, BrowserWindow } = require('electron'); +const { init } = require('@sentry/electron'); + +init({ + dsn: '__DSN__', + release: process.env.APP_FIRST_RUN ? 'native-sentry-main-update@1.0.0' : 'native-sentry-main-update@2.0.0', + debug: true, + autoSessionTracking: false, + onFatalError: () => {}, +}); + +app.on('ready', () => { + const mainWindow = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + }, + }); + + mainWindow.loadFile(path.join(__dirname, 'index.html')); + + // We only crash on the first run + // The second run is where the crash is uploaded + if (process.env.APP_FIRST_RUN) { + setTimeout(() => { + process.crash(); + }, 1000); + } +}); diff --git a/test/e2e/test-apps/native-sentry/main/src/main.js b/test/e2e/test-apps/native-sentry/main/src/main.js index ae6a4a7a..c723921e 100644 --- a/test/e2e/test-apps/native-sentry/main/src/main.js +++ b/test/e2e/test-apps/native-sentry/main/src/main.js @@ -30,6 +30,6 @@ app.on('ready', () => { if (process.env.APP_FIRST_RUN) { setTimeout(() => { process.crash(); - }, 500); + }, 1000); } }); From 03fcd2a996d63d92fcd13a172ad37b999d05af68 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 3 Aug 2023 17:38:40 +0200 Subject: [PATCH 125/239] test: New Sentry SDK version (#709) --- package.json | 14 ++--- src/renderer/sdk.ts | 2 +- yarn.lock | 124 ++++++++++++++++++++++---------------------- 3 files changed, 70 insertions(+), 70 deletions(-) diff --git a/package.json b/package.json index 9176bb9b..898ab1dd 100644 --- a/package.json +++ b/package.json @@ -58,18 +58,18 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.60.0", - "@sentry/core": "7.60.0", - "@sentry/node": "7.60.0", - "@sentry/types": "7.60.0", - "@sentry/utils": "7.60.0", + "@sentry/browser": "7.61.0", + "@sentry/core": "7.61.0", + "@sentry/node": "7.61.0", + "@sentry/types": "7.61.0", + "@sentry/utils": "7.61.0", "deepmerge": "4.3.0", "lru_map": "^0.3.3", "tslib": "^2.5.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.60.0", - "@sentry-internal/typescript": "7.60.0", + "@sentry-internal/eslint-config-sdk": "7.61.0", + "@sentry-internal/typescript": "7.61.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index df1e7420..6cb17b45 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_60_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_61_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index d73bd7c7..0d7880cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -135,13 +135,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.60.0": - version "7.60.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.60.0.tgz#11ba3c4991807a4e203e0cee83465e465e168087" - integrity sha512-Zj6OxzBRllZYGoZL6Qassmrv1a+RIKWAolfG+2z26lx6A9+GHjZq66m4uKUJyHDlJ+p+iOj5xsHHwKYkki3e9g== +"@sentry-internal/eslint-config-sdk@7.61.0": + version "7.61.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.61.0.tgz#ca4f48f2d441aa37d43304cce60ce0f2b4a4b0e7" + integrity sha512-ILhnFmHg/g6hRLs90kS27Gh5N1s8JVEgPGcWhotIew18NfGrdD+8KI1ZPExM8XKatwZxNHy3cOKYyxsFr4/Ydg== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.60.0" - "@sentry-internal/typescript" "7.60.0" + "@sentry-internal/eslint-plugin-sdk" "7.61.0" + "@sentry-internal/typescript" "7.61.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -151,83 +151,83 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.60.0": - version "7.60.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.60.0.tgz#bcf71a08ca2f0b785eb9f06b3ff1cffa593588a5" - integrity sha512-cOVTWuxG6mPZ+rv+NWre3b7PcEl0PqKGKecsp8hF9dsKH3lTFGSD1tccs7LWaM+COqCZBtFY53tB2/cXQxL90A== +"@sentry-internal/eslint-plugin-sdk@7.61.0": + version "7.61.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.61.0.tgz#969f36b817b008c59892a4435969e16c167a1d4f" + integrity sha512-xc1V1vEEBQbox2S8VQDXHA0mNdNXeZ0lmSEYWfLd0z6VapQnvGuixNR+W+R4B0dfMr0lTAwV5UM3qTqGqKlDCQ== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.60.0": - version "7.60.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.60.0.tgz#4f101d936a45965b086e042a3fba7ec7683cc034" - integrity sha512-2qvxmR954H+K7u4o92sS2u+hntzshem9XwfHAqDvBe51arNbFVy8LfJTJ5fffgZq/6jXlozCO0/6aR5yLR5mBg== +"@sentry-internal/tracing@7.61.0": + version "7.61.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.61.0.tgz#5a0dd4a9a0b41f2e22904430f3fe0216f36ee086" + integrity sha512-zTr+MXEG4SxNxif42LIgm2RQn+JRXL2NuGhRaKSD2i4lXKFqHVGlVdoWqY5UfqnnJPokiTWIj9ejR8I5HV8Ogw== dependencies: - "@sentry/core" "7.60.0" - "@sentry/types" "7.60.0" - "@sentry/utils" "7.60.0" + "@sentry/core" "7.61.0" + "@sentry/types" "7.61.0" + "@sentry/utils" "7.61.0" tslib "^2.4.1 || ^1.9.3" -"@sentry-internal/typescript@7.60.0": - version "7.60.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.60.0.tgz#546e2ffe259d08e9855e9cb7ddc13b1f737ce539" - integrity sha512-KbZlYgwBK0FXknjNGAklohAJDlJ17Sjrj6rseUOmePaR58emUpf/6SvKQXENGdr4yYS9QM5nvdj3Jp2Nk3+Xag== - -"@sentry/browser@7.60.0": - version "7.60.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.60.0.tgz#feb49746c9b650a968cfa58fa8e6ae43448d7821" - integrity sha512-WznY6zrJxCUHZns8jTvDsZw3aaHriSP+jqD+wkXZG3ceooQwFn0RkAstUuoG7YyP4Foinznn3+caeQD4ZjWaXQ== - dependencies: - "@sentry-internal/tracing" "7.60.0" - "@sentry/core" "7.60.0" - "@sentry/replay" "7.60.0" - "@sentry/types" "7.60.0" - "@sentry/utils" "7.60.0" +"@sentry-internal/typescript@7.61.0": + version "7.61.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.61.0.tgz#44cea2d1cabc491549abcdce06ead7053abc08b6" + integrity sha512-Al5uvH/LTbGB2PJraO4kDKw5TyksOTOQHcvUgaWXXTB4Eb2df3op+8lTjARgwoSF/0eUpt428qKcPtfJL8n90w== + +"@sentry/browser@7.61.0": + version "7.61.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.61.0.tgz#04f4122e444d8b5ffefed97af3cde2bc1c71bb80" + integrity sha512-IGEkJZRP16Oe5CkXkmhU3QdV5RugW6Vds16yJFFYsgp87NprWtRZgqzldFDYkINStfBHVdctj/Rh/ZrLf8QlkQ== + dependencies: + "@sentry-internal/tracing" "7.61.0" + "@sentry/core" "7.61.0" + "@sentry/replay" "7.61.0" + "@sentry/types" "7.61.0" + "@sentry/utils" "7.61.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/core@7.60.0": - version "7.60.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.60.0.tgz#c256d1305b52210d608e71de8d8f365ca9377f15" - integrity sha512-B02OlFMoqdkfDZlbQfmk7tL2vObShofk7ySd/7mp+oRdUuCvX0tyrGlwI87YJvd8YWSZOCKINs3aVYivw/b6gg== +"@sentry/core@7.61.0": + version "7.61.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.61.0.tgz#0de4f73055bd156c5c0cbac50bb814b272567188" + integrity sha512-zl0ZKRjIoYJQWYTd3K/U6zZfS4GDY9yGd2EH4vuYO4kfYtEp/nJ8A+tfAeDo0c9FGxZ0Q+5t5F4/SfwbgyyQzg== dependencies: - "@sentry/types" "7.60.0" - "@sentry/utils" "7.60.0" + "@sentry/types" "7.61.0" + "@sentry/utils" "7.61.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/node@7.60.0": - version "7.60.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.60.0.tgz#9db8fa0e71a4365b2a93a3504f2e48a38eeaae1b" - integrity sha512-I27gr7BSkdT1uwDPcbdPm7+w2yke5tojVGgothtvKfql1en4/cJZmk2bkvO2Di41+EF0UrTlUgLQff5X/q24WQ== +"@sentry/node@7.61.0": + version "7.61.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.61.0.tgz#1309330f2ad136af532ad2a03b2a312e885705de" + integrity sha512-oTCqD/h92uvbRCrtCdiAqN6Mfe3vF7ywVHZ8Nq3hHmJp6XadUT+fCBwNQ7rjMyqJAOYAnx/vp6iN9n8C5qcYZQ== dependencies: - "@sentry-internal/tracing" "7.60.0" - "@sentry/core" "7.60.0" - "@sentry/types" "7.60.0" - "@sentry/utils" "7.60.0" + "@sentry-internal/tracing" "7.61.0" + "@sentry/core" "7.61.0" + "@sentry/types" "7.61.0" + "@sentry/utils" "7.61.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^2.4.1 || ^1.9.3" -"@sentry/replay@7.60.0": - version "7.60.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.60.0.tgz#9f59dfb8e7acff5b269ed8752a13c7b1d0f2bb75" - integrity sha512-iVSs+mhgjeK0qqLdCqbCa1P4I6hETHCUq14pTYp0bwGrI1D/a1Ho/6wLkwXv47Gnrwaba/7JFM+IxZcN4FzfmQ== +"@sentry/replay@7.61.0": + version "7.61.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.61.0.tgz#f816d6a2fc7511877efee2e328681d659433d147" + integrity sha512-1ugk0yZssOPkSg6uTVcysjxlBydycXiOgV0PCU7DsXCFOV1ua5YpyPZFReTz9iFTtwD0LwGFM1LW9wJeQ67Fzg== dependencies: - "@sentry/core" "7.60.0" - "@sentry/types" "7.60.0" - "@sentry/utils" "7.60.0" + "@sentry/core" "7.61.0" + "@sentry/types" "7.61.0" + "@sentry/utils" "7.61.0" -"@sentry/types@7.60.0": - version "7.60.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.60.0.tgz#e3e5f16436feff802b1b126a16dba537000cef55" - integrity sha512-MSEuF9YjE0j+UKdqee2AzcNlMnShVNTkCB2Wnng6Bc5hHhn4fyYeTLbuFpNxL0ffN65lxblaWx6doDsMcvRxcA== +"@sentry/types@7.61.0": + version "7.61.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.61.0.tgz#4243b5ef4658f6b0673bc4372c90e6ec920f78d8" + integrity sha512-/GLlIBNR35NKPE/SfWi9W10dK9hE8qTShzsuPVn5wAJxpT3Lb4+dkwmKCTLUYxdkmvRDEudkfOxgalsfQGTAWA== -"@sentry/utils@7.60.0": - version "7.60.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.60.0.tgz#a96d772dcc2d007f73a5bcf67dcc66f6a7085736" - integrity sha512-Oc/PQqzeNDOSy4ZzVj6h9U+GEGRkg2PEVn9PC2V9/v3HDD20mndFqR/S2B5OOgDb/6pNGyz8XiZYI5rb29WFHA== +"@sentry/utils@7.61.0": + version "7.61.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.61.0.tgz#16944afb2b851af045fb528c0c35b7dea3e1cd3b" + integrity sha512-jfj14d0XBFiCU0G6dZZ12SizATiF5Mt4stBGzkM5iS9nXFj8rh1oTT7/p+aZoYzP2JTF+sDzkNjWxyKZkcTo0Q== dependencies: - "@sentry/types" "7.60.0" + "@sentry/types" "7.61.0" tslib "^2.4.1 || ^1.9.3" "@sindresorhus/is@^4.0.0": From 3a7484a61ce7c9b9f3ac704b3c2cd2ad8b1283c2 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 3 Aug 2023 18:18:54 +0200 Subject: [PATCH 126/239] meta: changelog for release 4.9.0 (#714) --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 489cb5e5..3966a949 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ ## Unreleased +## 4.9.0 + +- fix: Ensure context from previous run is used for native main crashes (#683) +- feat: Tracing without performance (#710) +- feat: Deprecate `tracingOrigins` for `tracePropagationTargets` (#703) +- feat: Use `protocol.handle` on Electron >= v25 (#704) +- test: Update from [v7.58.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.58.0) to [v7.61.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.61.0) of JavaScript SDKs (#709) + ## 4.8.0 - feat: Update to [v7.58.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.58.0) of JavaScript SDKs From 66ca7b2540587e40fe544a6bf3dd40d2c0c6037a Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Thu, 3 Aug 2023 16:19:27 +0000 Subject: [PATCH 127/239] release: 4.9.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 898ab1dd..9fa402e3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.8.0", + "version": "4.9.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", @@ -107,4 +107,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} \ No newline at end of file +} From 4072bd74b2f02d10c290d6b8f0c373d549ab7dd3 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 8 Aug 2023 12:45:48 +0200 Subject: [PATCH 128/239] feat: Optionally send sessions when they're created (#715) --- src/main/integrations/main-process-session.ts | 13 ++++++++++++- src/main/sessions.ts | 10 ++++++++-- .../session-1.json | 18 ++++++++++++++++++ .../{session-previous.json => session-2.json} | 2 +- .../session-3.json | 18 ++++++++++++++++++ .../{session.json => session-4.json} | 2 +- .../src/main.js | 10 +++++++--- .../sessions/abnormal-exit/session-1.json | 17 +++++++++++++++++ .../{session-previous.json => session-2.json} | 2 +- .../sessions/abnormal-exit/session-3.json | 17 +++++++++++++++++ .../{session.json => session-4.json} | 2 +- .../sessions/abnormal-exit/src/main.js | 7 ++++--- .../test-apps/sessions/good/session-first.json | 17 +++++++++++++++++ .../{session-next.json => session-fourth.json} | 2 +- .../good/{session.json => session-second.json} | 2 +- .../test-apps/sessions/good/session-third.json | 17 +++++++++++++++++ test/e2e/test-apps/sessions/good/src/main.js | 3 ++- .../javascript-error/session-error.json | 2 +- .../javascript-error/session-start.json | 17 +++++++++++++++++ .../sessions/javascript-error/src/main.js | 3 ++- .../session-1.json | 18 ++++++++++++++++++ .../{session-previous.json => session-2.json} | 2 +- .../session-3.json | 18 ++++++++++++++++++ .../{session.json => session-4.json} | 2 +- .../src/main.js | 8 ++++++-- .../sessions/native-crash-main/session-0.json | 17 +++++++++++++++++ .../sessions/native-crash-main/session-1.json | 2 +- .../sessions/native-crash-main/session-3.json | 2 +- .../sessions/native-crash-main/session-4.json | 17 +++++++++++++++++ .../sessions/native-crash-main/src/main.js | 7 ++++--- .../{session.json => session-crash.json} | 2 +- .../session-start.json | 17 +++++++++++++++++ .../src/main.js | 6 +++++- .../{session.json => session-crash.json} | 2 +- .../native-crash-renderer/session-start.json | 17 +++++++++++++++++ .../sessions/native-crash-renderer/src/main.js | 3 ++- 36 files changed, 290 insertions(+), 31 deletions(-) create mode 100644 test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-1.json rename test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/{session-previous.json => session-2.json} (94%) create mode 100644 test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-3.json rename test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/{session.json => session-4.json} (94%) create mode 100644 test/e2e/test-apps/sessions/abnormal-exit/session-1.json rename test/e2e/test-apps/sessions/abnormal-exit/{session-previous.json => session-2.json} (94%) create mode 100644 test/e2e/test-apps/sessions/abnormal-exit/session-3.json rename test/e2e/test-apps/sessions/abnormal-exit/{session.json => session-4.json} (94%) create mode 100644 test/e2e/test-apps/sessions/good/session-first.json rename test/e2e/test-apps/sessions/good/{session-next.json => session-fourth.json} (93%) rename test/e2e/test-apps/sessions/good/{session.json => session-second.json} (93%) create mode 100644 test/e2e/test-apps/sessions/good/session-third.json create mode 100644 test/e2e/test-apps/sessions/javascript-error/session-start.json create mode 100644 test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-1.json rename test/e2e/test-apps/sessions/native-crash-main-electron-uploader/{session-previous.json => session-2.json} (94%) create mode 100644 test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-3.json rename test/e2e/test-apps/sessions/native-crash-main-electron-uploader/{session.json => session-4.json} (94%) create mode 100644 test/e2e/test-apps/sessions/native-crash-main/session-0.json create mode 100644 test/e2e/test-apps/sessions/native-crash-main/session-4.json rename test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/{session.json => session-crash.json} (94%) create mode 100644 test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session-start.json rename test/e2e/test-apps/sessions/native-crash-renderer/{session.json => session-crash.json} (94%) create mode 100644 test/e2e/test-apps/sessions/native-crash-renderer/session-start.json diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts index b165c64b..9041129d 100644 --- a/src/main/integrations/main-process-session.ts +++ b/src/main/integrations/main-process-session.ts @@ -4,6 +4,15 @@ import { app } from 'electron'; import { endSession, startSession } from '../sessions'; +interface Options { + /** + * Whether sessions should be sent immediately on creation + * + * @default false + */ + sendOnCreate?: boolean; +} + /** Tracks sessions as the main process lifetime. */ export class MainProcessSession implements Integration { /** @inheritDoc */ @@ -12,9 +21,11 @@ export class MainProcessSession implements Integration { /** @inheritDoc */ public name: string = MainProcessSession.id; + public constructor(private readonly _options: Options = {}) {} + /** @inheritDoc */ public setupOnce(): void { - void startSession(); + void startSession(!!this._options.sendOnCreate); // We track sessions via the 'will-quit' event which is the last event emitted before close. // diff --git a/src/main/sessions.ts b/src/main/sessions.ts index 36a159a7..f970b2db 100644 --- a/src/main/sessions.ts +++ b/src/main/sessions.ts @@ -17,9 +17,15 @@ let previousSession: Promise<Partial<Session> | undefined> | undefined = session let persistTimer: NodeJS.Timer | undefined; /** Starts a session */ -export async function startSession(): Promise<void> { +export async function startSession(sendOnCreate: boolean): Promise<void> { const hub = getCurrentHub(); - await sessionStore.set(hub.startSession()); + const session = hub.startSession(); + + if (sendOnCreate) { + hub.captureSession(); + } + + await sessionStore.set(session); // Every PERSIST_INTERVAL, write the session to disk persistTimer = setInterval(async () => { diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-1.json b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-1.json new file mode 100644 index 00000000..fb38bd43 --- /dev/null +++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-1.json @@ -0,0 +1,18 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "did": "some_user", + "init": true, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "session-abnormal-exit-electron-uploader@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-previous.json b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-2.json similarity index 94% rename from test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-previous.json rename to test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-2.json index 77a97455..63e6675f 100644 --- a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-previous.json +++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-2.json @@ -5,7 +5,7 @@ "data": { "sid": "{{id}}", "did": "some_user", - "init": true, + "init": false, "started": 0, "timestamp": 0, "status": "abnormal", diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-3.json b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-3.json new file mode 100644 index 00000000..fb38bd43 --- /dev/null +++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-3.json @@ -0,0 +1,18 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "did": "some_user", + "init": true, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "session-abnormal-exit-electron-uploader@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session.json b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-4.json similarity index 94% rename from test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session.json rename to test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-4.json index 169b547b..84a849e1 100644 --- a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session.json +++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/session-4.json @@ -5,7 +5,7 @@ "data": { "sid": "{{id}}", "did": "some_user", - "init": true, + "init": false, "started": 0, "timestamp": 0, "status": "exited", diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js index fe607f26..9fd8293d 100644 --- a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js +++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js @@ -8,7 +8,11 @@ app.commandLine.appendSwitch('enable-crashpad'); init({ dsn: '__DSN__', debug: true, - integrations: (defaults) => [new Integrations.ElectronMinidump(), ...defaults], + integrations: (defaults) => [ + new Integrations.ElectronMinidump(), + new Integrations.MainProcessSession({ sendOnCreate: true }), + ...defaults, + ], initialScope: { user: { username: 'some_user' } }, onFatalError: () => {}, }); @@ -30,9 +34,9 @@ app.on('ready', () => { if (process.env.APP_FIRST_RUN) { setTimeout(() => { process.exit(); - }, 1000); + }, 2000); } else { setTimeout(() => { app.quit(); - }, 2000); + }, 4000); } diff --git a/test/e2e/test-apps/sessions/abnormal-exit/session-1.json b/test/e2e/test-apps/sessions/abnormal-exit/session-1.json new file mode 100644 index 00000000..5a0fbf8a --- /dev/null +++ b/test/e2e/test-apps/sessions/abnormal-exit/session-1.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": true, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "session-abnormal-exit@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/abnormal-exit/session-previous.json b/test/e2e/test-apps/sessions/abnormal-exit/session-2.json similarity index 94% rename from test/e2e/test-apps/sessions/abnormal-exit/session-previous.json rename to test/e2e/test-apps/sessions/abnormal-exit/session-2.json index 12b29c83..5abc806e 100644 --- a/test/e2e/test-apps/sessions/abnormal-exit/session-previous.json +++ b/test/e2e/test-apps/sessions/abnormal-exit/session-2.json @@ -4,7 +4,7 @@ "method": "envelope", "data": { "sid": "{{id}}", - "init": true, + "init": false, "started": 0, "timestamp": 0, "status": "abnormal", diff --git a/test/e2e/test-apps/sessions/abnormal-exit/session-3.json b/test/e2e/test-apps/sessions/abnormal-exit/session-3.json new file mode 100644 index 00000000..5a0fbf8a --- /dev/null +++ b/test/e2e/test-apps/sessions/abnormal-exit/session-3.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": true, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "session-abnormal-exit@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/abnormal-exit/session.json b/test/e2e/test-apps/sessions/abnormal-exit/session-4.json similarity index 94% rename from test/e2e/test-apps/sessions/abnormal-exit/session.json rename to test/e2e/test-apps/sessions/abnormal-exit/session-4.json index 7ebc922e..ab4f7cc0 100644 --- a/test/e2e/test-apps/sessions/abnormal-exit/session.json +++ b/test/e2e/test-apps/sessions/abnormal-exit/session-4.json @@ -4,7 +4,7 @@ "method": "envelope", "data": { "sid": "{{id}}", - "init": true, + "init": false, "started": 0, "timestamp": 0, "status": "exited", diff --git a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js index 221a4d02..ef301ad0 100644 --- a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js +++ b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js @@ -1,11 +1,12 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init } = require('@sentry/electron'); +const { init, Integrations } = require('@sentry/electron'); init({ dsn: '__DSN__', debug: true, + integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })], onFatalError: () => {}, }); @@ -26,9 +27,9 @@ app.on('ready', () => { if (process.env.APP_FIRST_RUN) { setTimeout(() => { process.exit(); - }, 1000); + }, 2000); } else { setTimeout(() => { app.quit(); - }, 2000); + }, 4000); } diff --git a/test/e2e/test-apps/sessions/good/session-first.json b/test/e2e/test-apps/sessions/good/session-first.json new file mode 100644 index 00000000..7362ab21 --- /dev/null +++ b/test/e2e/test-apps/sessions/good/session-first.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": true, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "good-session@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/good/session-next.json b/test/e2e/test-apps/sessions/good/session-fourth.json similarity index 93% rename from test/e2e/test-apps/sessions/good/session-next.json rename to test/e2e/test-apps/sessions/good/session-fourth.json index 385a274b..e55639a8 100644 --- a/test/e2e/test-apps/sessions/good/session-next.json +++ b/test/e2e/test-apps/sessions/good/session-fourth.json @@ -4,7 +4,7 @@ "method": "envelope", "data": { "sid": "{{id}}", - "init": true, + "init": false, "started": 0, "timestamp": 0, "status": "exited", diff --git a/test/e2e/test-apps/sessions/good/session.json b/test/e2e/test-apps/sessions/good/session-second.json similarity index 93% rename from test/e2e/test-apps/sessions/good/session.json rename to test/e2e/test-apps/sessions/good/session-second.json index 385a274b..e55639a8 100644 --- a/test/e2e/test-apps/sessions/good/session.json +++ b/test/e2e/test-apps/sessions/good/session-second.json @@ -4,7 +4,7 @@ "method": "envelope", "data": { "sid": "{{id}}", - "init": true, + "init": false, "started": 0, "timestamp": 0, "status": "exited", diff --git a/test/e2e/test-apps/sessions/good/session-third.json b/test/e2e/test-apps/sessions/good/session-third.json new file mode 100644 index 00000000..7362ab21 --- /dev/null +++ b/test/e2e/test-apps/sessions/good/session-third.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": true, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "good-session@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/good/src/main.js b/test/e2e/test-apps/sessions/good/src/main.js index 6e5aee86..caa82591 100644 --- a/test/e2e/test-apps/sessions/good/src/main.js +++ b/test/e2e/test-apps/sessions/good/src/main.js @@ -1,11 +1,12 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init } = require('@sentry/electron'); +const { init, Integrations } = require('@sentry/electron'); init({ dsn: '__DSN__', debug: true, + integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })], onFatalError: () => {}, }); diff --git a/test/e2e/test-apps/sessions/javascript-error/session-error.json b/test/e2e/test-apps/sessions/javascript-error/session-error.json index 8fe91fcc..b7e41c0d 100644 --- a/test/e2e/test-apps/sessions/javascript-error/session-error.json +++ b/test/e2e/test-apps/sessions/javascript-error/session-error.json @@ -4,7 +4,7 @@ "method": "envelope", "data": { "sid": "{{id}}", - "init": true, + "init": false, "started": 0, "timestamp": 0, "status": "ok", diff --git a/test/e2e/test-apps/sessions/javascript-error/session-start.json b/test/e2e/test-apps/sessions/javascript-error/session-start.json new file mode 100644 index 00000000..3cdb74c0 --- /dev/null +++ b/test/e2e/test-apps/sessions/javascript-error/session-start.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": true, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "error-session@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/javascript-error/src/main.js b/test/e2e/test-apps/sessions/javascript-error/src/main.js index 6e5aee86..caa82591 100644 --- a/test/e2e/test-apps/sessions/javascript-error/src/main.js +++ b/test/e2e/test-apps/sessions/javascript-error/src/main.js @@ -1,11 +1,12 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init } = require('@sentry/electron'); +const { init, Integrations } = require('@sentry/electron'); init({ dsn: '__DSN__', debug: true, + integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })], onFatalError: () => {}, }); diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-1.json b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-1.json new file mode 100644 index 00000000..490546e2 --- /dev/null +++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-1.json @@ -0,0 +1,18 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "did": "some_user", + "init": true, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "session-native-crash-main-electron-uploader@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-previous.json b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-2.json similarity index 94% rename from test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-previous.json rename to test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-2.json index 8072d2bd..4eda3f2c 100644 --- a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-previous.json +++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-2.json @@ -5,7 +5,7 @@ "data": { "sid": "{{id}}", "did": "some_user", - "init": true, + "init": false, "started": 0, "timestamp": 0, "status": "crashed", diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-3.json b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-3.json new file mode 100644 index 00000000..490546e2 --- /dev/null +++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-3.json @@ -0,0 +1,18 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "did": "some_user", + "init": true, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "session-native-crash-main-electron-uploader@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session.json b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-4.json similarity index 94% rename from test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session.json rename to test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-4.json index 9676e6a9..98ec7c28 100644 --- a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session.json +++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/session-4.json @@ -5,7 +5,7 @@ "data": { "sid": "{{id}}", "did": "some_user", - "init": true, + "init": false, "started": 0, "timestamp": 0, "status": "exited", diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js index 0f91fbf0..0b7294b6 100644 --- a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js +++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js @@ -8,7 +8,11 @@ app.commandLine.appendSwitch('enable-crashpad'); init({ dsn: '__DSN__', debug: true, - integrations: (defaults) => [new Integrations.ElectronMinidump(), ...defaults], + integrations: (defaults) => [ + new Integrations.ElectronMinidump(), + new Integrations.MainProcessSession({ sendOnCreate: true }), + ...defaults, + ], initialScope: { user: { username: 'some_user' } }, onFatalError: () => {}, }); @@ -33,4 +37,4 @@ setTimeout(() => { } else { app.quit(); } -}, 2000); +}, 4000); diff --git a/test/e2e/test-apps/sessions/native-crash-main/session-0.json b/test/e2e/test-apps/sessions/native-crash-main/session-0.json new file mode 100644 index 00000000..f3ebfdf9 --- /dev/null +++ b/test/e2e/test-apps/sessions/native-crash-main/session-0.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": true, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "session-native-crash-main@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/native-crash-main/session-1.json b/test/e2e/test-apps/sessions/native-crash-main/session-1.json index 0bf33df4..c95e8cd9 100644 --- a/test/e2e/test-apps/sessions/native-crash-main/session-1.json +++ b/test/e2e/test-apps/sessions/native-crash-main/session-1.json @@ -4,7 +4,7 @@ "method": "envelope", "data": { "sid": "{{id}}", - "init": true, + "init": false, "started": 0, "timestamp": 0, "status": "crashed", diff --git a/test/e2e/test-apps/sessions/native-crash-main/session-3.json b/test/e2e/test-apps/sessions/native-crash-main/session-3.json index 8c7a038a..f36ea69b 100644 --- a/test/e2e/test-apps/sessions/native-crash-main/session-3.json +++ b/test/e2e/test-apps/sessions/native-crash-main/session-3.json @@ -7,7 +7,7 @@ "init": false, "started": 0, "timestamp": 0, - "status": "exited", + "status": "ok", "errors": 0, "duration": 0, "attrs": { diff --git a/test/e2e/test-apps/sessions/native-crash-main/session-4.json b/test/e2e/test-apps/sessions/native-crash-main/session-4.json new file mode 100644 index 00000000..8c7a038a --- /dev/null +++ b/test/e2e/test-apps/sessions/native-crash-main/session-4.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": false, + "started": 0, + "timestamp": 0, + "status": "exited", + "errors": 0, + "duration": 0, + "attrs": { + "release": "session-native-crash-main@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/native-crash-main/src/main.js b/test/e2e/test-apps/sessions/native-crash-main/src/main.js index 12a7d49a..fd7415dc 100644 --- a/test/e2e/test-apps/sessions/native-crash-main/src/main.js +++ b/test/e2e/test-apps/sessions/native-crash-main/src/main.js @@ -1,11 +1,12 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init } = require('@sentry/electron'); +const { init, Integrations } = require('@sentry/electron'); init({ dsn: '__DSN__', debug: true, + integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })], onFatalError: () => {}, }); @@ -26,9 +27,9 @@ app.on('ready', () => { if (process.env.APP_FIRST_RUN) { setTimeout(() => { process.crash(); - }, 1000); + }, 2000); } else { setTimeout(() => { app.quit(); - }, 2000); + }, 4000); } diff --git a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session.json b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session-crash.json similarity index 94% rename from test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session.json rename to test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session-crash.json index d6ae7705..0e9f7445 100644 --- a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session.json +++ b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session-crash.json @@ -4,7 +4,7 @@ "method": "envelope", "data": { "sid": "{{id}}", - "init": true, + "init": false, "started": 0, "timestamp": 0, "status": "crashed", diff --git a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session-start.json b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session-start.json new file mode 100644 index 00000000..ee7e5752 --- /dev/null +++ b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/session-start.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": true, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "session-native-crash-renderer-electron-uploader@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js index ad4825de..aa89b617 100644 --- a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js +++ b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js @@ -8,7 +8,11 @@ app.commandLine.appendSwitch('enable-crashpad'); init({ dsn: '__DSN__', debug: true, - integrations: (defaults) => [new Integrations.ElectronMinidump(), ...defaults], + integrations: (defaults) => [ + new Integrations.ElectronMinidump(), + new Integrations.MainProcessSession({ sendOnCreate: true }), + ...defaults, + ], initialScope: { user: { username: 'some_user' } }, onFatalError: () => {}, }); diff --git a/test/e2e/test-apps/sessions/native-crash-renderer/session.json b/test/e2e/test-apps/sessions/native-crash-renderer/session-crash.json similarity index 94% rename from test/e2e/test-apps/sessions/native-crash-renderer/session.json rename to test/e2e/test-apps/sessions/native-crash-renderer/session-crash.json index 0d7812c5..71993664 100644 --- a/test/e2e/test-apps/sessions/native-crash-renderer/session.json +++ b/test/e2e/test-apps/sessions/native-crash-renderer/session-crash.json @@ -4,7 +4,7 @@ "method": "envelope", "data": { "sid": "{{id}}", - "init": true, + "init": false, "started": 0, "timestamp": 0, "status": "crashed", diff --git a/test/e2e/test-apps/sessions/native-crash-renderer/session-start.json b/test/e2e/test-apps/sessions/native-crash-renderer/session-start.json new file mode 100644 index 00000000..47ed989a --- /dev/null +++ b/test/e2e/test-apps/sessions/native-crash-renderer/session-start.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": true, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "session-native-crash-renderer@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js b/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js index 3ac4d1b7..600e177b 100644 --- a/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js +++ b/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js @@ -1,11 +1,12 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init } = require('@sentry/electron'); +const { init, Integrations } = require('@sentry/electron'); init({ dsn: '__DSN__', debug: true, + integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })], onFatalError: () => {}, }); From 9f7aba184d08f1ef9edc1106543e70be83514b3b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 15:39:39 +0200 Subject: [PATCH 129/239] test: New Electron versions (#707) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 775ae35b..53b79731 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.17","23.3.10","24.6.3","25.3.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.18","23.3.12","24.7.0","25.4.0"] From 87f7930e93eb69ad861d295f74f5513f02c2beea Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 11 Aug 2023 11:17:53 +0200 Subject: [PATCH 130/239] feat: Update to v7.63.0 of the JavaScript SDKs (#719) --- package.json | 14 +- src/common/mutex.ts | 12 +- src/integrations.ts | 6 +- src/main/integrations/additional-context.ts | 6 +- src/main/integrations/child-process.ts | 3 +- src/main/integrations/electron-breadcrumbs.ts | 3 +- src/main/integrations/electron-minidump.ts | 9 +- src/main/integrations/main-context.ts | 6 +- src/main/integrations/main-process-session.ts | 6 +- src/main/integrations/net-breadcrumbs.ts | 6 +- src/main/integrations/onuncaughtexception.ts | 6 +- src/main/integrations/preload-injection.ts | 6 +- src/main/integrations/screenshots.ts | 6 +- .../integrations/sentry-minidump/index.ts | 6 +- src/main/store.ts | 3 +- src/main/transports/queue.ts | 10 +- src/renderer/integrations/event-to-main.ts | 6 +- src/renderer/integrations/scope-to-main.ts | 6 +- src/renderer/sdk.ts | 2 +- yarn.lock | 124 +++++++++--------- 20 files changed, 148 insertions(+), 98 deletions(-) diff --git a/package.json b/package.json index 9fa402e3..80af4ac7 100644 --- a/package.json +++ b/package.json @@ -58,18 +58,18 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.61.0", - "@sentry/core": "7.61.0", - "@sentry/node": "7.61.0", - "@sentry/types": "7.61.0", - "@sentry/utils": "7.61.0", + "@sentry/browser": "7.63.0", + "@sentry/core": "7.63.0", + "@sentry/node": "7.63.0", + "@sentry/types": "7.63.0", + "@sentry/utils": "7.63.0", "deepmerge": "4.3.0", "lru_map": "^0.3.3", "tslib": "^2.5.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.61.0", - "@sentry-internal/typescript": "7.61.0", + "@sentry-internal/eslint-config-sdk": "7.63.0", + "@sentry-internal/typescript": "7.63.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/common/mutex.ts b/src/common/mutex.ts index 602be804..1b527e4d 100644 --- a/src/common/mutex.ts +++ b/src/common/mutex.ts @@ -35,9 +35,15 @@ interface QueueEntry { /** An async mutex that queues up tasks for a shared resource */ export class Mutex { - private _entries: Array<QueueEntry> = []; - private _waiters: Array<Releaser> = []; - private _value: number = 1; + private readonly _entries: Array<QueueEntry>; + private _waiters: Array<Releaser>; + private _value: number; + + public constructor() { + this._entries = []; + this._waiters = []; + this._value = 1; + } /** Run a task when all pending tasks are complete */ public async runExclusive<T>(task: () => Promise<T> | T): Promise<T> { diff --git a/src/integrations.ts b/src/integrations.ts index e542b3f9..6c467d99 100644 --- a/src/integrations.ts +++ b/src/integrations.ts @@ -78,7 +78,11 @@ class EmptyIntegration implements Integration { public static id: string = 'EmptyIntegration'; /** @inheritDoc */ - public name: string = EmptyIntegration.id; + public readonly name: string; + + public constructor() { + this.name = EmptyIntegration.id; + } /** @inheritDoc */ public setupOnce(): void { diff --git a/src/main/integrations/additional-context.ts b/src/main/integrations/additional-context.ts index 9ad63f81..b2d4713b 100644 --- a/src/main/integrations/additional-context.ts +++ b/src/main/integrations/additional-context.ts @@ -25,12 +25,14 @@ export class AdditionalContext implements Integration { public static id: string = 'AdditionalContext'; /** @inheritDoc */ - public name: string = AdditionalContext.id; + public readonly name: string; private readonly _options: AdditionalContextOptions; - private _lazyDeviceContext: DeviceContext = {}; + private readonly _lazyDeviceContext: DeviceContext; public constructor(options: Partial<AdditionalContextOptions> = {}) { + this._lazyDeviceContext = {}; + this.name = AdditionalContext.id; this._options = { ...DEFAULT_OPTIONS, ...options, diff --git a/src/main/integrations/child-process.ts b/src/main/integrations/child-process.ts index adeddea9..7baa1f71 100644 --- a/src/main/integrations/child-process.ts +++ b/src/main/integrations/child-process.ts @@ -42,7 +42,7 @@ export class ChildProcess implements Integration { public static id: string = 'ChildProcess'; /** @inheritDoc */ - public name: string = ChildProcess.id; + public readonly name: string; private readonly _options: ChildProcessOptions; @@ -50,6 +50,7 @@ export class ChildProcess implements Integration { * @param _options Integration options */ public constructor(options: Partial<OrBool<ChildProcessOptions>> = {}) { + this.name = ChildProcess.id; const { breadcrumbs, events } = options; this._options = { breadcrumbs: Array.isArray(breadcrumbs) ? breadcrumbs : breadcrumbs == false ? [] : DEFAULT_OPTIONS.breadcrumbs, diff --git a/src/main/integrations/electron-breadcrumbs.ts b/src/main/integrations/electron-breadcrumbs.ts index d7b040f7..a9ebf36a 100644 --- a/src/main/integrations/electron-breadcrumbs.ts +++ b/src/main/integrations/electron-breadcrumbs.ts @@ -109,7 +109,7 @@ export class ElectronBreadcrumbs implements Integration { public static id: string = 'ElectronBreadcrumbs'; /** @inheritDoc */ - public name: string = ElectronBreadcrumbs.id; + public readonly name: string; private readonly _options: ElectronBreadcrumbsOptions<EventFunction | false>; @@ -117,6 +117,7 @@ export class ElectronBreadcrumbs implements Integration { * @param _options Integration options */ public constructor(options: Partial<ElectronBreadcrumbsOptions<EventTypes>> = {}) { + this.name = ElectronBreadcrumbs.id; this._options = { ...DEFAULT_OPTIONS, ...normalizeOptions(options) }; } diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts index 989ed382..8e162c7f 100644 --- a/src/main/integrations/electron-minidump.ts +++ b/src/main/integrations/electron-minidump.ts @@ -59,13 +59,18 @@ export class ElectronMinidump implements Integration { public static id: string = 'ElectronMinidump'; /** @inheritDoc */ - public name: string = ElectronMinidump.id; + public readonly name: string; /** Counter used to ensure no race condition when updating extra params */ - private _updateEpoch: number = 0; + private _updateEpoch: number; private _customRelease: string | undefined; + public constructor() { + this.name = ElectronMinidump.id; + this._updateEpoch = 0; + } + /** @inheritDoc */ public setupOnce(): void { // Mac AppStore builds cannot run the crash reporter due to the sandboxing diff --git a/src/main/integrations/main-context.ts b/src/main/integrations/main-context.ts index e6212b59..174beff7 100644 --- a/src/main/integrations/main-context.ts +++ b/src/main/integrations/main-context.ts @@ -12,7 +12,11 @@ export class MainContext implements Integration { public static id: string = 'MainContext'; /** @inheritDoc */ - public name: string = MainContext.id; + public readonly name: string; + + public constructor() { + this.name = MainContext.id; + } /** @inheritDoc */ public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void): void { diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts index 9041129d..983900d3 100644 --- a/src/main/integrations/main-process-session.ts +++ b/src/main/integrations/main-process-session.ts @@ -19,9 +19,11 @@ export class MainProcessSession implements Integration { public static id: string = 'MainProcessSession'; /** @inheritDoc */ - public name: string = MainProcessSession.id; + public readonly name: string; - public constructor(private readonly _options: Options = {}) {} + public constructor(private readonly _options: Options = {}) { + this.name = MainProcessSession.id; + } /** @inheritDoc */ public setupOnce(): void { diff --git a/src/main/integrations/net-breadcrumbs.ts b/src/main/integrations/net-breadcrumbs.ts index 898ea44f..237abea8 100644 --- a/src/main/integrations/net-breadcrumbs.ts +++ b/src/main/integrations/net-breadcrumbs.ts @@ -46,10 +46,12 @@ export class Net implements Integration { public static id: string = 'Net'; /** @inheritDoc */ - public name: string = Net.id; + public readonly name: string; /** @inheritDoc */ - public constructor(private readonly _options: NetOptions = {}) {} + public constructor(private readonly _options: NetOptions = {}) { + this.name = Net.id; + } /** @inheritDoc */ public setupOnce(_addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void { diff --git a/src/main/integrations/onuncaughtexception.ts b/src/main/integrations/onuncaughtexception.ts index 8de4aa13..488aa717 100644 --- a/src/main/integrations/onuncaughtexception.ts +++ b/src/main/integrations/onuncaughtexception.ts @@ -9,7 +9,11 @@ export class OnUncaughtException implements Integration { public static id: string = 'OnUncaughtException'; /** @inheritDoc */ - public name: string = OnUncaughtException.id; + public readonly name: string; + + public constructor() { + this.name = OnUncaughtException.id; + } /** * @inheritDoc diff --git a/src/main/integrations/preload-injection.ts b/src/main/integrations/preload-injection.ts index d35fa7cb..99460f55 100644 --- a/src/main/integrations/preload-injection.ts +++ b/src/main/integrations/preload-injection.ts @@ -20,7 +20,11 @@ export class PreloadInjection implements Integration { public static id: string = 'PreloadInjection'; /** @inheritDoc */ - public name: string = PreloadInjection.id; + public readonly name: string; + + public constructor() { + this.name = PreloadInjection.id; + } /** @inheritDoc */ public setupOnce(): void { diff --git a/src/main/integrations/screenshots.ts b/src/main/integrations/screenshots.ts index cca119e2..751eb78e 100644 --- a/src/main/integrations/screenshots.ts +++ b/src/main/integrations/screenshots.ts @@ -12,7 +12,11 @@ export class Screenshots implements Integration { public static id: string = 'Screenshots'; /** @inheritDoc */ - public name: string = Screenshots.id; + public readonly name: string; + + public constructor() { + this.name = Screenshots.id; + } /** @inheritDoc */ public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void): void { diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts index c1f4b9cc..efe1723b 100644 --- a/src/main/integrations/sentry-minidump/index.ts +++ b/src/main/integrations/sentry-minidump/index.ts @@ -25,7 +25,7 @@ export class SentryMinidump implements Integration { public static id: string = 'SentryMinidump'; /** @inheritDoc */ - public name: string = SentryMinidump.id; + public readonly name: string; /** Store to persist context information beyond application crashes. */ private _scopeStore?: BufferedWriteStore<PreviousRun>; @@ -35,6 +35,10 @@ export class SentryMinidump implements Integration { private _minidumpLoader?: MinidumpLoader; + public constructor() { + this.name = SentryMinidump.id; + } + /** @inheritDoc */ public setupOnce(): void { // Mac AppStore builds cannot run the crash reporter due to the sandboxing diff --git a/src/main/store.ts b/src/main/store.ts index bffb0f3c..359ffffe 100644 --- a/src/main/store.ts +++ b/src/main/store.ts @@ -27,7 +27,7 @@ export class Store<T> { /** Value used to initialize data for the first time. */ private readonly _initial: T; /** A mutex to ensure that there aren't races while reading and writing files */ - private _lock: Mutex = new Mutex(); + private readonly _lock: Mutex; /** * Creates a new store. @@ -37,6 +37,7 @@ export class Store<T> { * @param initial An initial value to initialize data with. */ public constructor(path: string, id: string, initial: T) { + this._lock = new Mutex(); this._path = join(path, `${id}.json`); this._initial = initial; } diff --git a/src/main/transports/queue.ts b/src/main/transports/queue.ts index 9f020fe8..b65911fa 100644 --- a/src/main/transports/queue.ts +++ b/src/main/transports/queue.ts @@ -26,17 +26,15 @@ export interface QueuedTransportRequest extends TransportRequest { /** A request queue that is persisted to disk to survive app restarts */ export class PersistedRequestQueue { - private readonly _queue: BufferedWriteStore<PersistedRequest[]> = new BufferedWriteStore( - this._queuePath, - 'queue', - [], - ); + private readonly _queue: BufferedWriteStore<PersistedRequest[]>; public constructor( private readonly _queuePath: string, private readonly _maxAgeDays: number = 30, private readonly _maxCount: number = 30, - ) {} + ) { + this._queue = new BufferedWriteStore(this._queuePath, 'queue', []); + } /** Adds a request to the queue */ public async add(request: QueuedTransportRequest): Promise<number> { diff --git a/src/renderer/integrations/event-to-main.ts b/src/renderer/integrations/event-to-main.ts index cec7d7ca..a319e709 100644 --- a/src/renderer/integrations/event-to-main.ts +++ b/src/renderer/integrations/event-to-main.ts @@ -11,7 +11,11 @@ export class EventToMain implements Integration { public static id: string = 'EventToMain'; /** @inheritDoc */ - public name: string = EventToMain.id; + public readonly name: string; + + public constructor() { + this.name = EventToMain.id; + } /** @inheritDoc */ public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void): void { diff --git a/src/renderer/integrations/scope-to-main.ts b/src/renderer/integrations/scope-to-main.ts index ba93bba8..37e527ba 100644 --- a/src/renderer/integrations/scope-to-main.ts +++ b/src/renderer/integrations/scope-to-main.ts @@ -12,7 +12,11 @@ export class ScopeToMain implements Integration { public static id: string = 'ScopeToMain'; /** @inheritDoc */ - public name: string = ScopeToMain.id; + public readonly name: string; + + public constructor() { + this.name = ScopeToMain.id; + } /** @inheritDoc */ public setupOnce(): void { diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 6cb17b45..eb7cb2fc 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_61_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_63_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 0d7880cc..4c8a5df8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -135,13 +135,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.61.0": - version "7.61.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.61.0.tgz#ca4f48f2d441aa37d43304cce60ce0f2b4a4b0e7" - integrity sha512-ILhnFmHg/g6hRLs90kS27Gh5N1s8JVEgPGcWhotIew18NfGrdD+8KI1ZPExM8XKatwZxNHy3cOKYyxsFr4/Ydg== +"@sentry-internal/eslint-config-sdk@7.63.0": + version "7.63.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.63.0.tgz#b8f80ccf13051f3770347a507069a01ec407c4c7" + integrity sha512-H8VfcRu/Z8omSf5LeixeUiwfEYm4SQ6UlyjRAzzITWfgExySHxbD97V58q7AhoYOxsQ18B0UyR+m9piC9xkthA== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.61.0" - "@sentry-internal/typescript" "7.61.0" + "@sentry-internal/eslint-plugin-sdk" "7.63.0" + "@sentry-internal/typescript" "7.63.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -151,83 +151,83 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.61.0": - version "7.61.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.61.0.tgz#969f36b817b008c59892a4435969e16c167a1d4f" - integrity sha512-xc1V1vEEBQbox2S8VQDXHA0mNdNXeZ0lmSEYWfLd0z6VapQnvGuixNR+W+R4B0dfMr0lTAwV5UM3qTqGqKlDCQ== +"@sentry-internal/eslint-plugin-sdk@7.63.0": + version "7.63.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.63.0.tgz#1ff0beb3866b124c072c50880fdabd8783b313cc" + integrity sha512-tDvNksUhvmh7bJSvocs0PNXffiM0aJ4TGlKl4jXUG2qLPbUALM2QxMhNs3CeXXf+qAvWidy0+nYz2jM0jQ6zQg== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.61.0": - version "7.61.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.61.0.tgz#5a0dd4a9a0b41f2e22904430f3fe0216f36ee086" - integrity sha512-zTr+MXEG4SxNxif42LIgm2RQn+JRXL2NuGhRaKSD2i4lXKFqHVGlVdoWqY5UfqnnJPokiTWIj9ejR8I5HV8Ogw== +"@sentry-internal/tracing@7.63.0": + version "7.63.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.63.0.tgz#58903b2205456034611cc5bc1b5b2479275f89c7" + integrity sha512-Fxpc53p6NGvLSURg3iRvZA0k10K9yfeVhtczvJnpX30POBuV41wxpkLHkb68fjksirjEma1K3Ut1iLOEEDpPQg== dependencies: - "@sentry/core" "7.61.0" - "@sentry/types" "7.61.0" - "@sentry/utils" "7.61.0" + "@sentry/core" "7.63.0" + "@sentry/types" "7.63.0" + "@sentry/utils" "7.63.0" tslib "^2.4.1 || ^1.9.3" -"@sentry-internal/typescript@7.61.0": - version "7.61.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.61.0.tgz#44cea2d1cabc491549abcdce06ead7053abc08b6" - integrity sha512-Al5uvH/LTbGB2PJraO4kDKw5TyksOTOQHcvUgaWXXTB4Eb2df3op+8lTjARgwoSF/0eUpt428qKcPtfJL8n90w== - -"@sentry/browser@7.61.0": - version "7.61.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.61.0.tgz#04f4122e444d8b5ffefed97af3cde2bc1c71bb80" - integrity sha512-IGEkJZRP16Oe5CkXkmhU3QdV5RugW6Vds16yJFFYsgp87NprWtRZgqzldFDYkINStfBHVdctj/Rh/ZrLf8QlkQ== - dependencies: - "@sentry-internal/tracing" "7.61.0" - "@sentry/core" "7.61.0" - "@sentry/replay" "7.61.0" - "@sentry/types" "7.61.0" - "@sentry/utils" "7.61.0" +"@sentry-internal/typescript@7.63.0": + version "7.63.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.63.0.tgz#534413543109a68e692f3b4ad17481817c33b934" + integrity sha512-df3TIs6ZwinG5vJB/+DU243aj18x5rN+7XcjUFcebHomC/CM0ZewsX/7tqSU6nyEApDBi/w9rYjAB3gBio5MNQ== + +"@sentry/browser@7.63.0": + version "7.63.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.63.0.tgz#d7eee4be7bfff015f050bca83cafb111dc13d40d" + integrity sha512-P1Iw/2281C/7CUCRsN4jgXvjMNKnrwKqxRg7JqN8eVeCDPMpOeEPHNJ6YatEXdVLTKVn0JB7L63Q1prhFr8+SQ== + dependencies: + "@sentry-internal/tracing" "7.63.0" + "@sentry/core" "7.63.0" + "@sentry/replay" "7.63.0" + "@sentry/types" "7.63.0" + "@sentry/utils" "7.63.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/core@7.61.0": - version "7.61.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.61.0.tgz#0de4f73055bd156c5c0cbac50bb814b272567188" - integrity sha512-zl0ZKRjIoYJQWYTd3K/U6zZfS4GDY9yGd2EH4vuYO4kfYtEp/nJ8A+tfAeDo0c9FGxZ0Q+5t5F4/SfwbgyyQzg== +"@sentry/core@7.63.0": + version "7.63.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.63.0.tgz#8c38da6ef3a1de6e364463a09bc703b196ecbba4" + integrity sha512-13Ljiq8hv6ieCkO+Am99/PljYJO5ynKT/hRQrWgGy9IIEgUr8sV3fW+1W6K4/3MCeOJou0HsiGBjOD1mASItVg== dependencies: - "@sentry/types" "7.61.0" - "@sentry/utils" "7.61.0" + "@sentry/types" "7.63.0" + "@sentry/utils" "7.63.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/node@7.61.0": - version "7.61.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.61.0.tgz#1309330f2ad136af532ad2a03b2a312e885705de" - integrity sha512-oTCqD/h92uvbRCrtCdiAqN6Mfe3vF7ywVHZ8Nq3hHmJp6XadUT+fCBwNQ7rjMyqJAOYAnx/vp6iN9n8C5qcYZQ== +"@sentry/node@7.63.0": + version "7.63.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.63.0.tgz#38508a440c04c0e98d00f5a1855e5448ee70c8d6" + integrity sha512-tSMyfQNbfjX1w8vJDZtvWeaD4QQ/Z4zVW/TLXfL/JZFIIksPgDZmqLdF+NJS4bSGTU5JiHiUh4pYhME4mHgNBQ== dependencies: - "@sentry-internal/tracing" "7.61.0" - "@sentry/core" "7.61.0" - "@sentry/types" "7.61.0" - "@sentry/utils" "7.61.0" + "@sentry-internal/tracing" "7.63.0" + "@sentry/core" "7.63.0" + "@sentry/types" "7.63.0" + "@sentry/utils" "7.63.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^2.4.1 || ^1.9.3" -"@sentry/replay@7.61.0": - version "7.61.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.61.0.tgz#f816d6a2fc7511877efee2e328681d659433d147" - integrity sha512-1ugk0yZssOPkSg6uTVcysjxlBydycXiOgV0PCU7DsXCFOV1ua5YpyPZFReTz9iFTtwD0LwGFM1LW9wJeQ67Fzg== +"@sentry/replay@7.63.0": + version "7.63.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.63.0.tgz#989ae32ea028a5eca323786cc07294fedb1f0d45" + integrity sha512-ikeFVojuP9oDF103blZcj0Vvb4S50dV54BESMrMW2lYBoMMjvOd7AdL+iDHjn1OL05/mv1C6Oc8MovmvdjILVA== dependencies: - "@sentry/core" "7.61.0" - "@sentry/types" "7.61.0" - "@sentry/utils" "7.61.0" + "@sentry/core" "7.63.0" + "@sentry/types" "7.63.0" + "@sentry/utils" "7.63.0" -"@sentry/types@7.61.0": - version "7.61.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.61.0.tgz#4243b5ef4658f6b0673bc4372c90e6ec920f78d8" - integrity sha512-/GLlIBNR35NKPE/SfWi9W10dK9hE8qTShzsuPVn5wAJxpT3Lb4+dkwmKCTLUYxdkmvRDEudkfOxgalsfQGTAWA== +"@sentry/types@7.63.0": + version "7.63.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.63.0.tgz#8032029fee6f70e04b667646626a674b03e2f79b" + integrity sha512-pZNwJVW7RqNLGuTUAhoygt0c9zmc0js10eANAz0MstygJRhQI1tqPDuiELVdujPrbeL+IFKF+7NvRDAydR2Niw== -"@sentry/utils@7.61.0": - version "7.61.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.61.0.tgz#16944afb2b851af045fb528c0c35b7dea3e1cd3b" - integrity sha512-jfj14d0XBFiCU0G6dZZ12SizATiF5Mt4stBGzkM5iS9nXFj8rh1oTT7/p+aZoYzP2JTF+sDzkNjWxyKZkcTo0Q== +"@sentry/utils@7.63.0": + version "7.63.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.63.0.tgz#7c598553b4dbb6e3740dc96bc7f112ec32edbe69" + integrity sha512-7FQv1RYAwnuTuarruP+1+Jd6YQuN7i/Y7KltwPMVEwU7j5mzYQaexLr/Jz1XIdR2KYVdkbXQyP8jj8BmA6u9Jw== dependencies: - "@sentry/types" "7.61.0" + "@sentry/types" "7.63.0" tslib "^2.4.1 || ^1.9.3" "@sindresorhus/is@^4.0.0": From 6c7ecfc8349eca1480e12d36ec038027c7e119c3 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 14 Aug 2023 12:11:29 +0200 Subject: [PATCH 131/239] chore: Update Changelog for release (#720) --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3966a949..c3a7ff73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## Unreleased +## 4.10.0 + +- feat: Optionally send sessions when they're created (#715) +- feat: Update from [v7.61.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.61.0) to [v7.63.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.63.0) of JavaScript SDKs (#719) + ## 4.9.0 - fix: Ensure context from previous run is used for native main crashes (#683) From 26842870a05aaaee2c2b684627103a94d16e7baf Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Mon, 14 Aug 2023 10:12:06 +0000 Subject: [PATCH 132/239] release: 4.10.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 80af4ac7..aa95d647 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.9.0", + "version": "4.10.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From 4605ce1198bc7613b0764db217c7e87d5e00b984 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 15 Aug 2023 13:22:29 +0200 Subject: [PATCH 133/239] test: Electron v26 (#718) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 53b79731..9eccc72b 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.18","23.3.12","24.7.0","25.4.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.20","23.3.12","24.7.1","25.5.0","26.0.0"] From 5229617f0e0f4497960f5d4224a3666db9d24ec5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 15 Aug 2023 13:23:17 +0200 Subject: [PATCH 134/239] test: Update to v7.64.0 of Sentry SDKs (#721) --- package.json | 16 +++--- src/renderer/sdk.ts | 2 +- yarn.lock | 124 ++++++++++++++++++++++---------------------- 3 files changed, 71 insertions(+), 71 deletions(-) diff --git a/package.json b/package.json index aa95d647..6a36ad4d 100644 --- a/package.json +++ b/package.json @@ -58,18 +58,18 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.63.0", - "@sentry/core": "7.63.0", - "@sentry/node": "7.63.0", - "@sentry/types": "7.63.0", - "@sentry/utils": "7.63.0", + "@sentry/browser": "7.64.0", + "@sentry/core": "7.64.0", + "@sentry/node": "7.64.0", + "@sentry/types": "7.64.0", + "@sentry/utils": "7.64.0", "deepmerge": "4.3.0", "lru_map": "^0.3.3", "tslib": "^2.5.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.63.0", - "@sentry-internal/typescript": "7.63.0", + "@sentry-internal/eslint-config-sdk": "7.64.0", + "@sentry-internal/typescript": "7.64.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", @@ -107,4 +107,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} +} \ No newline at end of file diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index eb7cb2fc..393dd691 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_63_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_64_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 4c8a5df8..3b7a98e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -135,13 +135,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.63.0": - version "7.63.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.63.0.tgz#b8f80ccf13051f3770347a507069a01ec407c4c7" - integrity sha512-H8VfcRu/Z8omSf5LeixeUiwfEYm4SQ6UlyjRAzzITWfgExySHxbD97V58q7AhoYOxsQ18B0UyR+m9piC9xkthA== +"@sentry-internal/eslint-config-sdk@7.64.0": + version "7.64.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.64.0.tgz#845d164656abc2a6a4920d5c138d5e6ca58c7231" + integrity sha512-lqzzu1p3sGfi8GIb+b9wdfw0hijgEYapLtgPxGgbCxn8Wqs8S2/9xTjnRzmZN2Mvo6njMXBsDcdv+Rh//laRtQ== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.63.0" - "@sentry-internal/typescript" "7.63.0" + "@sentry-internal/eslint-plugin-sdk" "7.64.0" + "@sentry-internal/typescript" "7.64.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -151,83 +151,83 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.63.0": - version "7.63.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.63.0.tgz#1ff0beb3866b124c072c50880fdabd8783b313cc" - integrity sha512-tDvNksUhvmh7bJSvocs0PNXffiM0aJ4TGlKl4jXUG2qLPbUALM2QxMhNs3CeXXf+qAvWidy0+nYz2jM0jQ6zQg== +"@sentry-internal/eslint-plugin-sdk@7.64.0": + version "7.64.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.64.0.tgz#95f1e4248bac3073d947557ae14c6a735a65d57f" + integrity sha512-2t90g8ljkF/+WQvMiOEZ2E6rTT6/dpqqc1Eg+Tnm73LkgUbVLv3vOuLtaHMKzDCvv8AAQGN5gYtPSLqoXiWpYw== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.63.0": - version "7.63.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.63.0.tgz#58903b2205456034611cc5bc1b5b2479275f89c7" - integrity sha512-Fxpc53p6NGvLSURg3iRvZA0k10K9yfeVhtczvJnpX30POBuV41wxpkLHkb68fjksirjEma1K3Ut1iLOEEDpPQg== +"@sentry-internal/tracing@7.64.0": + version "7.64.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.64.0.tgz#3e110473b8edf805b799cc91d6ee592830237bb4" + integrity sha512-1XE8W6ki7hHyBvX9hfirnGkKDBKNq3bDJyXS86E0bYVDl94nvbRM9BD9DHsCFetqYkVm1yDGEK+6aUVs4CztoQ== dependencies: - "@sentry/core" "7.63.0" - "@sentry/types" "7.63.0" - "@sentry/utils" "7.63.0" + "@sentry/core" "7.64.0" + "@sentry/types" "7.64.0" + "@sentry/utils" "7.64.0" tslib "^2.4.1 || ^1.9.3" -"@sentry-internal/typescript@7.63.0": - version "7.63.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.63.0.tgz#534413543109a68e692f3b4ad17481817c33b934" - integrity sha512-df3TIs6ZwinG5vJB/+DU243aj18x5rN+7XcjUFcebHomC/CM0ZewsX/7tqSU6nyEApDBi/w9rYjAB3gBio5MNQ== - -"@sentry/browser@7.63.0": - version "7.63.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.63.0.tgz#d7eee4be7bfff015f050bca83cafb111dc13d40d" - integrity sha512-P1Iw/2281C/7CUCRsN4jgXvjMNKnrwKqxRg7JqN8eVeCDPMpOeEPHNJ6YatEXdVLTKVn0JB7L63Q1prhFr8+SQ== - dependencies: - "@sentry-internal/tracing" "7.63.0" - "@sentry/core" "7.63.0" - "@sentry/replay" "7.63.0" - "@sentry/types" "7.63.0" - "@sentry/utils" "7.63.0" +"@sentry-internal/typescript@7.64.0": + version "7.64.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.64.0.tgz#b2aeb620e402dedaaa0de62bee9b901e809879ff" + integrity sha512-HvDvOOSfLBUnklg3h/808zHnfQqrzYwG2PrDH8p4fq6v4dZdm/C9jKZTh93MxDO10WdCEXchY4vR+BqAL6GHUw== + +"@sentry/browser@7.64.0": + version "7.64.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.64.0.tgz#76db08a5d32ffe7c5aa907f258e6c845ce7f10d7" + integrity sha512-lB2IWUkZavEDclxfLBp554dY10ZNIEvlDZUWWathW+Ws2wRb6PNLtuPUNu12R7Q7z0xpkOLrM1kRNN0OdldgKA== + dependencies: + "@sentry-internal/tracing" "7.64.0" + "@sentry/core" "7.64.0" + "@sentry/replay" "7.64.0" + "@sentry/types" "7.64.0" + "@sentry/utils" "7.64.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/core@7.63.0": - version "7.63.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.63.0.tgz#8c38da6ef3a1de6e364463a09bc703b196ecbba4" - integrity sha512-13Ljiq8hv6ieCkO+Am99/PljYJO5ynKT/hRQrWgGy9IIEgUr8sV3fW+1W6K4/3MCeOJou0HsiGBjOD1mASItVg== +"@sentry/core@7.64.0": + version "7.64.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.64.0.tgz#9d61cdc29ba299dedbdcbe01cfadf94bd0b7df48" + integrity sha512-IzmEyl5sNG7NyEFiyFHEHC+sizsZp9MEw1+RJRLX6U5RITvcsEgcajSkHQFafaBPzRrcxZMdm47Cwhl212LXcw== dependencies: - "@sentry/types" "7.63.0" - "@sentry/utils" "7.63.0" + "@sentry/types" "7.64.0" + "@sentry/utils" "7.64.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/node@7.63.0": - version "7.63.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.63.0.tgz#38508a440c04c0e98d00f5a1855e5448ee70c8d6" - integrity sha512-tSMyfQNbfjX1w8vJDZtvWeaD4QQ/Z4zVW/TLXfL/JZFIIksPgDZmqLdF+NJS4bSGTU5JiHiUh4pYhME4mHgNBQ== +"@sentry/node@7.64.0": + version "7.64.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.64.0.tgz#c6f7a67c1442324298f0525e7191bc18572ee1ce" + integrity sha512-wRi0uTnp1WSa83X2yLD49tV9QPzGh5e42IKdIDBiQ7lV9JhLILlyb34BZY1pq6p4dp35yDasDrP3C7ubn7wo6A== dependencies: - "@sentry-internal/tracing" "7.63.0" - "@sentry/core" "7.63.0" - "@sentry/types" "7.63.0" - "@sentry/utils" "7.63.0" + "@sentry-internal/tracing" "7.64.0" + "@sentry/core" "7.64.0" + "@sentry/types" "7.64.0" + "@sentry/utils" "7.64.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^2.4.1 || ^1.9.3" -"@sentry/replay@7.63.0": - version "7.63.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.63.0.tgz#989ae32ea028a5eca323786cc07294fedb1f0d45" - integrity sha512-ikeFVojuP9oDF103blZcj0Vvb4S50dV54BESMrMW2lYBoMMjvOd7AdL+iDHjn1OL05/mv1C6Oc8MovmvdjILVA== +"@sentry/replay@7.64.0": + version "7.64.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.64.0.tgz#bdf09b0c4712f9dc6b24b3ebefa55a4ac76708e6" + integrity sha512-alaMCZDZhaAVmEyiUnszZnvfdbiZx5MmtMTGrlDd7tYq3K5OA9prdLqqlmfIJYBfYtXF3lD0iZFphOZQD+4CIw== dependencies: - "@sentry/core" "7.63.0" - "@sentry/types" "7.63.0" - "@sentry/utils" "7.63.0" + "@sentry/core" "7.64.0" + "@sentry/types" "7.64.0" + "@sentry/utils" "7.64.0" -"@sentry/types@7.63.0": - version "7.63.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.63.0.tgz#8032029fee6f70e04b667646626a674b03e2f79b" - integrity sha512-pZNwJVW7RqNLGuTUAhoygt0c9zmc0js10eANAz0MstygJRhQI1tqPDuiELVdujPrbeL+IFKF+7NvRDAydR2Niw== +"@sentry/types@7.64.0": + version "7.64.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.64.0.tgz#21fc545ea05c3c8c4c3e518583eca1a8c5429506" + integrity sha512-LqjQprWXjUFRmzIlUjyA+KL+38elgIYmAeoDrdyNVh8MK5IC1W2Lh1Q87b4yOiZeMiIhIVNBd7Ecoh2rodGrGA== -"@sentry/utils@7.63.0": - version "7.63.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.63.0.tgz#7c598553b4dbb6e3740dc96bc7f112ec32edbe69" - integrity sha512-7FQv1RYAwnuTuarruP+1+Jd6YQuN7i/Y7KltwPMVEwU7j5mzYQaexLr/Jz1XIdR2KYVdkbXQyP8jj8BmA6u9Jw== +"@sentry/utils@7.64.0": + version "7.64.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.64.0.tgz#6fe3ce9a56d3433ed32119f914907361a54cc184" + integrity sha512-HRlM1INzK66Gt+F4vCItiwGKAng4gqzCR4C5marsL3qv6SrKH98dQnCGYgXluSWaaa56h97FRQu7TxCk6jkSvQ== dependencies: - "@sentry/types" "7.63.0" + "@sentry/types" "7.64.0" tslib "^2.4.1 || ^1.9.3" "@sindresorhus/is@^4.0.0": From 8a389c53b3fb70f88792a84127de7310ff732a25 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 19:58:44 +0200 Subject: [PATCH 135/239] test: New Electron versions (#723) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 9eccc72b..424c7c55 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.20","23.3.12","24.7.1","25.5.0","26.0.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.22","23.3.13","24.8.1","25.7.0","26.1.0"] From 367dcade03743fb318a2a8ed0538dfad6d29255b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 31 Aug 2023 12:35:43 +0200 Subject: [PATCH 136/239] test: New Electron versions (#728) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 424c7c55..a5b79ea9 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.22","23.3.13","24.8.1","25.7.0","26.1.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.23","23.3.13","24.8.2","25.8.0","26.1.0"] From 24bbeef183e2c1edda7248c21b1956d3727e819c Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 31 Aug 2023 15:41:30 +0200 Subject: [PATCH 137/239] feat: Update Sentry SDKs from v7.64.0 to v7.66.0 (#726) --- package.json | 14 ++--- src/renderer/sdk.ts | 2 +- yarn.lock | 124 ++++++++++++++++++++++---------------------- 3 files changed, 70 insertions(+), 70 deletions(-) diff --git a/package.json b/package.json index 6a36ad4d..51ae82cb 100644 --- a/package.json +++ b/package.json @@ -58,18 +58,18 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.64.0", - "@sentry/core": "7.64.0", - "@sentry/node": "7.64.0", - "@sentry/types": "7.64.0", - "@sentry/utils": "7.64.0", + "@sentry/browser": "7.66.0", + "@sentry/core": "7.66.0", + "@sentry/node": "7.66.0", + "@sentry/types": "7.66.0", + "@sentry/utils": "7.66.0", "deepmerge": "4.3.0", "lru_map": "^0.3.3", "tslib": "^2.5.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.64.0", - "@sentry-internal/typescript": "7.64.0", + "@sentry-internal/eslint-config-sdk": "7.66.0", + "@sentry-internal/typescript": "7.66.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 393dd691..7468d36a 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_64_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_66_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 3b7a98e6..32cbac31 100644 --- a/yarn.lock +++ b/yarn.lock @@ -135,13 +135,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.64.0": - version "7.64.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.64.0.tgz#845d164656abc2a6a4920d5c138d5e6ca58c7231" - integrity sha512-lqzzu1p3sGfi8GIb+b9wdfw0hijgEYapLtgPxGgbCxn8Wqs8S2/9xTjnRzmZN2Mvo6njMXBsDcdv+Rh//laRtQ== +"@sentry-internal/eslint-config-sdk@7.66.0": + version "7.66.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.66.0.tgz#6785a2100e4bba69f6400a09e3a030582bc48441" + integrity sha512-gGSx26NKzFQKyYYHiN4cAhzp7VypFsfxMr6Pa4OFc1O5bNwSk0fD+YNylFFQ4/kQuVb1ccL+1KSSNVI+xjaqmg== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.64.0" - "@sentry-internal/typescript" "7.64.0" + "@sentry-internal/eslint-plugin-sdk" "7.66.0" + "@sentry-internal/typescript" "7.66.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -151,83 +151,83 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.64.0": - version "7.64.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.64.0.tgz#95f1e4248bac3073d947557ae14c6a735a65d57f" - integrity sha512-2t90g8ljkF/+WQvMiOEZ2E6rTT6/dpqqc1Eg+Tnm73LkgUbVLv3vOuLtaHMKzDCvv8AAQGN5gYtPSLqoXiWpYw== +"@sentry-internal/eslint-plugin-sdk@7.66.0": + version "7.66.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.66.0.tgz#c111c9722253f18f7d1128933484e5b054a28dd3" + integrity sha512-Iqj1D1F3p91Xx34oyuI5uLMJou55E6ycT8l1p0tABcj9MxdTxhxHtBi2F8gJSe1zrGX8TRo4m3GqwMOn8BQOuQ== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.64.0": - version "7.64.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.64.0.tgz#3e110473b8edf805b799cc91d6ee592830237bb4" - integrity sha512-1XE8W6ki7hHyBvX9hfirnGkKDBKNq3bDJyXS86E0bYVDl94nvbRM9BD9DHsCFetqYkVm1yDGEK+6aUVs4CztoQ== +"@sentry-internal/tracing@7.66.0": + version "7.66.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.66.0.tgz#45ea607917d55a5bcaa3229341387ff6ed9b3a2b" + integrity sha512-3vCgC2hC3T45pn53yTDVcRpHoJTBxelDPPZVsipAbZnoOVPkj7n6dNfDhj3I3kwWCBPahPkXmE+R4xViR8VqJg== dependencies: - "@sentry/core" "7.64.0" - "@sentry/types" "7.64.0" - "@sentry/utils" "7.64.0" + "@sentry/core" "7.66.0" + "@sentry/types" "7.66.0" + "@sentry/utils" "7.66.0" tslib "^2.4.1 || ^1.9.3" -"@sentry-internal/typescript@7.64.0": - version "7.64.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.64.0.tgz#b2aeb620e402dedaaa0de62bee9b901e809879ff" - integrity sha512-HvDvOOSfLBUnklg3h/808zHnfQqrzYwG2PrDH8p4fq6v4dZdm/C9jKZTh93MxDO10WdCEXchY4vR+BqAL6GHUw== - -"@sentry/browser@7.64.0": - version "7.64.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.64.0.tgz#76db08a5d32ffe7c5aa907f258e6c845ce7f10d7" - integrity sha512-lB2IWUkZavEDclxfLBp554dY10ZNIEvlDZUWWathW+Ws2wRb6PNLtuPUNu12R7Q7z0xpkOLrM1kRNN0OdldgKA== - dependencies: - "@sentry-internal/tracing" "7.64.0" - "@sentry/core" "7.64.0" - "@sentry/replay" "7.64.0" - "@sentry/types" "7.64.0" - "@sentry/utils" "7.64.0" +"@sentry-internal/typescript@7.66.0": + version "7.66.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.66.0.tgz#5185c131a2ae5089dc4b668961a84de7ef08d7a4" + integrity sha512-hWN1ErxtjrVfilW4UNRLUfSVVIvGDIJNZhWUg2NhEdh2CTub/WBLiYqe0DKRJf3rURBTVRmnJlh3YXmEkh5ynQ== + +"@sentry/browser@7.66.0": + version "7.66.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.66.0.tgz#9aa3078f8914d2f8acb4ad9fc7b2011c80e357f5" + integrity sha512-rW037rf8jkhyykG38+HUdwkRCKHJEMM5NkCqPIO5zuuxfLKukKdI2rbvgJ93s3/9UfsTuDFcKFL1u43mCn6sDw== + dependencies: + "@sentry-internal/tracing" "7.66.0" + "@sentry/core" "7.66.0" + "@sentry/replay" "7.66.0" + "@sentry/types" "7.66.0" + "@sentry/utils" "7.66.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/core@7.64.0": - version "7.64.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.64.0.tgz#9d61cdc29ba299dedbdcbe01cfadf94bd0b7df48" - integrity sha512-IzmEyl5sNG7NyEFiyFHEHC+sizsZp9MEw1+RJRLX6U5RITvcsEgcajSkHQFafaBPzRrcxZMdm47Cwhl212LXcw== +"@sentry/core@7.66.0": + version "7.66.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.66.0.tgz#8968f2a9e641d33e3750a8e24d1d39953680c4f2" + integrity sha512-WMAEPN86NeCJ1IT48Lqiz4MS5gdDjBwP4M63XP4msZn9aujSf2Qb6My5uT87AJr9zBtgk8MyJsuHr35F0P3q1w== dependencies: - "@sentry/types" "7.64.0" - "@sentry/utils" "7.64.0" + "@sentry/types" "7.66.0" + "@sentry/utils" "7.66.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/node@7.64.0": - version "7.64.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.64.0.tgz#c6f7a67c1442324298f0525e7191bc18572ee1ce" - integrity sha512-wRi0uTnp1WSa83X2yLD49tV9QPzGh5e42IKdIDBiQ7lV9JhLILlyb34BZY1pq6p4dp35yDasDrP3C7ubn7wo6A== +"@sentry/node@7.66.0": + version "7.66.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.66.0.tgz#d3e08471e1ecae28d3cd0ba3c18487ecb2449881" + integrity sha512-PxqIqLr4Sh5xcDfECiBQ4PuZ7v8yTgLhaRkruWrZPYxQrcJFPkwbFkw/IskzVnhT2VwXUmeWEIlRMQKBJ0t83A== dependencies: - "@sentry-internal/tracing" "7.64.0" - "@sentry/core" "7.64.0" - "@sentry/types" "7.64.0" - "@sentry/utils" "7.64.0" + "@sentry-internal/tracing" "7.66.0" + "@sentry/core" "7.66.0" + "@sentry/types" "7.66.0" + "@sentry/utils" "7.66.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^2.4.1 || ^1.9.3" -"@sentry/replay@7.64.0": - version "7.64.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.64.0.tgz#bdf09b0c4712f9dc6b24b3ebefa55a4ac76708e6" - integrity sha512-alaMCZDZhaAVmEyiUnszZnvfdbiZx5MmtMTGrlDd7tYq3K5OA9prdLqqlmfIJYBfYtXF3lD0iZFphOZQD+4CIw== +"@sentry/replay@7.66.0": + version "7.66.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.66.0.tgz#5469144192824e7688c475ed29586a8cce6606f6" + integrity sha512-5Y2SlVTOFTo3uIycv0mRneBakQtLgWkOnsJaC5LB0Ip0TqVKiMCbQ578vvXp+yvRj4LcS1gNd98xTTNojBoQNg== dependencies: - "@sentry/core" "7.64.0" - "@sentry/types" "7.64.0" - "@sentry/utils" "7.64.0" + "@sentry/core" "7.66.0" + "@sentry/types" "7.66.0" + "@sentry/utils" "7.66.0" -"@sentry/types@7.64.0": - version "7.64.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.64.0.tgz#21fc545ea05c3c8c4c3e518583eca1a8c5429506" - integrity sha512-LqjQprWXjUFRmzIlUjyA+KL+38elgIYmAeoDrdyNVh8MK5IC1W2Lh1Q87b4yOiZeMiIhIVNBd7Ecoh2rodGrGA== +"@sentry/types@7.66.0": + version "7.66.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.66.0.tgz#4ec290cc6a3dd2024a61a0bffb468cedb409f7fb" + integrity sha512-uUMSoSiar6JhuD8p7ON/Ddp4JYvrVd2RpwXJRPH1A4H4Bd4DVt1mKJy1OLG6HdeQv39XyhB1lPZckKJg4tATPw== -"@sentry/utils@7.64.0": - version "7.64.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.64.0.tgz#6fe3ce9a56d3433ed32119f914907361a54cc184" - integrity sha512-HRlM1INzK66Gt+F4vCItiwGKAng4gqzCR4C5marsL3qv6SrKH98dQnCGYgXluSWaaa56h97FRQu7TxCk6jkSvQ== +"@sentry/utils@7.66.0": + version "7.66.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.66.0.tgz#2e37c96610f26bc79ac064fca4222ea91fece68d" + integrity sha512-9GYUVgXjK66uXXcLXVMXVzlptqMtq1eJENCuDeezQiEFrNA71KkLDg00wESp+LL+bl3wpVTBApArpbF6UEG5hQ== dependencies: - "@sentry/types" "7.64.0" + "@sentry/types" "7.66.0" tslib "^2.4.1 || ^1.9.3" "@sindresorhus/is@^4.0.0": From 500cb0232d9373ef01a5bb32f17f206918cb6804 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Sep 2023 11:58:57 +0200 Subject: [PATCH 138/239] test: New Electron versions (#737) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index a5b79ea9..8a51c0ec 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.23","23.3.13","24.8.2","25.8.0","26.1.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.23","23.3.13","24.8.2","25.8.0","26.2.0"] From b0edb7101b8e402b5d80897cd33de1488a21ae80 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 11 Sep 2023 16:41:44 +0200 Subject: [PATCH 139/239] feat: Update Sentry SDKs to v7.68.0 (#738) --- examples/electron-forge-webpack/event.json | 2 +- examples/electron-forge/event.json | 2 +- .../electron-react-boilerplate/event.json | 2 +- examples/electron-vite/event.json | 2 +- .../event.json | 2 +- examples/webpack-context-isolation/event.json | 2 +- package.json | 16 +-- src/main/integrations/onuncaughtexception.ts | 14 +- src/renderer/sdk.ts | 2 +- .../main-error-custom-release/event.json | 2 +- .../javascript/main-error/event.json | 2 +- .../preload-error-protocol/event.json | 2 +- .../javascript/preload-error/event.json | 2 +- .../renderer-error-custom-env/event.json | 2 +- .../renderer-error-custom-release/event.json | 2 +- .../renderer-error-protocol/event.json | 2 +- .../javascript/renderer-error/event.json | 2 +- .../offline/renderer-error/event.json | 2 +- .../test-apps/other/browser-replay/event.json | 2 +- .../test-apps/other/child-process/event2.json | 2 +- .../other/custom-renderer-name/event.json | 2 +- .../test-apps/other/error-iframe/event.json | 2 +- .../other/main-process-module/event.json | 2 +- .../other/net-breadcrumbs/event.json | 2 +- .../other/scope-breadcrumbs/event.json | 2 +- .../test-apps/other/screenshots/event.json | 2 +- .../sessions/javascript-error/event.json | 2 +- .../javascript-error/session-end.json | 17 --- .../javascript-error/session-error.json | 2 +- yarn.lock | 124 +++++++++--------- 30 files changed, 109 insertions(+), 114 deletions(-) delete mode 100644 test/e2e/test-apps/sessions/javascript-error/session-end.json diff --git a/examples/electron-forge-webpack/event.json b/examples/electron-forge-webpack/event.json index 130fafd8..05cc7046 100644 --- a/examples/electron-forge-webpack/event.json +++ b/examples/electron-forge-webpack/event.json @@ -90,7 +90,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/examples/electron-forge/event.json b/examples/electron-forge/event.json index 0182666a..a631763a 100644 --- a/examples/electron-forge/event.json +++ b/examples/electron-forge/event.json @@ -75,7 +75,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/examples/electron-react-boilerplate/event.json b/examples/electron-react-boilerplate/event.json index 0574cfee..36c407c6 100644 --- a/examples/electron-react-boilerplate/event.json +++ b/examples/electron-react-boilerplate/event.json @@ -67,7 +67,7 @@ "frames": [] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/examples/electron-vite/event.json b/examples/electron-vite/event.json index f500f344..45d17dd0 100644 --- a/examples/electron-vite/event.json +++ b/examples/electron-vite/event.json @@ -75,7 +75,7 @@ "frames": [] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/examples/webpack-context-isolation-preload/event.json b/examples/webpack-context-isolation-preload/event.json index ee81c538..96c94aa4 100644 --- a/examples/webpack-context-isolation-preload/event.json +++ b/examples/webpack-context-isolation-preload/event.json @@ -91,7 +91,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/examples/webpack-context-isolation/event.json b/examples/webpack-context-isolation/event.json index 84f75ff9..4b7316b3 100644 --- a/examples/webpack-context-isolation/event.json +++ b/examples/webpack-context-isolation/event.json @@ -91,7 +91,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/package.json b/package.json index 51ae82cb..2128245e 100644 --- a/package.json +++ b/package.json @@ -54,22 +54,22 @@ "fix:eslint": "eslint . --format stylish --fix", "pretest": "yarn build", "test": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe electron-mocha --require ts-node/register/transpile-only --timeout 120000 ./test/unit/**/*.ts", - "pree2e": "rimraf test/e2e/dist/**/node_modules/@sentry/** test/e2e/dist/**/yarn.lock && node scripts/clean-cache.js && yarn build && npm pack", + "pree2e": "rimraf test/e2e/dist/**/node_modules/@sentry/** test/e2e/dist/**/yarn.lock test/e2e/dist/**/package-lock.json && node scripts/clean-cache.js && yarn build && npm pack", "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.66.0", - "@sentry/core": "7.66.0", - "@sentry/node": "7.66.0", - "@sentry/types": "7.66.0", - "@sentry/utils": "7.66.0", + "@sentry/browser": "7.68.0", + "@sentry/core": "7.68.0", + "@sentry/node": "7.68.0", + "@sentry/types": "7.68.0", + "@sentry/utils": "7.68.0", "deepmerge": "4.3.0", "lru_map": "^0.3.3", "tslib": "^2.5.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "7.66.0", - "@sentry-internal/typescript": "7.66.0", + "@sentry-internal/eslint-config-sdk": "7.68.0", + "@sentry-internal/typescript": "7.68.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/main/integrations/onuncaughtexception.ts b/src/main/integrations/onuncaughtexception.ts index 488aa717..8a4d4798 100644 --- a/src/main/integrations/onuncaughtexception.ts +++ b/src/main/integrations/onuncaughtexception.ts @@ -31,7 +31,19 @@ export class OnUncaughtException implements Integration { })); const nodeClient = getCurrentHub().getClient() as NodeClient; - nodeClient.captureException(error, { originalException: error }, getCurrentHub().getScope()); + nodeClient.captureException( + error, + { + originalException: error, + data: { + mechanism: { + handled: false, + type: 'generic', + }, + }, + }, + getCurrentHub().getScope(), + ); await nodeClient.flush(nodeClient.getOptions().shutdownTimeout || 2000); if (options?.onFatalError) { diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 7468d36a..e576f03b 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_66_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_68_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/test/e2e/test-apps/javascript/main-error-custom-release/event.json b/test/e2e/test-apps/javascript/main-error-custom-release/event.json index e525525e..68b0c4b0 100644 --- a/test/e2e/test-apps/javascript/main-error-custom-release/event.json +++ b/test/e2e/test-apps/javascript/main-error-custom-release/event.json @@ -75,7 +75,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "generic" } } diff --git a/test/e2e/test-apps/javascript/main-error/event.json b/test/e2e/test-apps/javascript/main-error/event.json index c96b01fe..fa14bfaf 100644 --- a/test/e2e/test-apps/javascript/main-error/event.json +++ b/test/e2e/test-apps/javascript/main-error/event.json @@ -76,7 +76,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "generic" } } diff --git a/test/e2e/test-apps/javascript/preload-error-protocol/event.json b/test/e2e/test-apps/javascript/preload-error-protocol/event.json index ee81ccf8..8151bcc1 100644 --- a/test/e2e/test-apps/javascript/preload-error-protocol/event.json +++ b/test/e2e/test-apps/javascript/preload-error-protocol/event.json @@ -75,7 +75,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/test/e2e/test-apps/javascript/preload-error/event.json b/test/e2e/test-apps/javascript/preload-error/event.json index 91cf8b47..5793b256 100644 --- a/test/e2e/test-apps/javascript/preload-error/event.json +++ b/test/e2e/test-apps/javascript/preload-error/event.json @@ -75,7 +75,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json b/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json index d24eb797..b93a57cb 100644 --- a/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json +++ b/test/e2e/test-apps/javascript/renderer-error-custom-env/event.json @@ -75,7 +75,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json b/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json index 6aec9824..08d0476a 100644 --- a/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json +++ b/test/e2e/test-apps/javascript/renderer-error-custom-release/event.json @@ -75,7 +75,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/test/e2e/test-apps/javascript/renderer-error-protocol/event.json b/test/e2e/test-apps/javascript/renderer-error-protocol/event.json index 76536610..0fc3d7ab 100644 --- a/test/e2e/test-apps/javascript/renderer-error-protocol/event.json +++ b/test/e2e/test-apps/javascript/renderer-error-protocol/event.json @@ -75,7 +75,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/test/e2e/test-apps/javascript/renderer-error/event.json b/test/e2e/test-apps/javascript/renderer-error/event.json index 43157ee2..75185856 100644 --- a/test/e2e/test-apps/javascript/renderer-error/event.json +++ b/test/e2e/test-apps/javascript/renderer-error/event.json @@ -75,7 +75,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/test/e2e/test-apps/offline/renderer-error/event.json b/test/e2e/test-apps/offline/renderer-error/event.json index e05c1f90..798fd7ac 100644 --- a/test/e2e/test-apps/offline/renderer-error/event.json +++ b/test/e2e/test-apps/offline/renderer-error/event.json @@ -66,7 +66,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/test/e2e/test-apps/other/browser-replay/event.json b/test/e2e/test-apps/other/browser-replay/event.json index 17c18c26..383ea0b9 100644 --- a/test/e2e/test-apps/other/browser-replay/event.json +++ b/test/e2e/test-apps/other/browser-replay/event.json @@ -75,7 +75,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/test/e2e/test-apps/other/child-process/event2.json b/test/e2e/test-apps/other/child-process/event2.json index 3d633f20..0fb66d2c 100644 --- a/test/e2e/test-apps/other/child-process/event2.json +++ b/test/e2e/test-apps/other/child-process/event2.json @@ -75,7 +75,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/test/e2e/test-apps/other/custom-renderer-name/event.json b/test/e2e/test-apps/other/custom-renderer-name/event.json index 6be2c020..d99354a1 100644 --- a/test/e2e/test-apps/other/custom-renderer-name/event.json +++ b/test/e2e/test-apps/other/custom-renderer-name/event.json @@ -75,7 +75,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/test/e2e/test-apps/other/error-iframe/event.json b/test/e2e/test-apps/other/error-iframe/event.json index 8a410346..c298be28 100644 --- a/test/e2e/test-apps/other/error-iframe/event.json +++ b/test/e2e/test-apps/other/error-iframe/event.json @@ -83,7 +83,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/test/e2e/test-apps/other/main-process-module/event.json b/test/e2e/test-apps/other/main-process-module/event.json index 5bc2297e..805e3cb8 100644 --- a/test/e2e/test-apps/other/main-process-module/event.json +++ b/test/e2e/test-apps/other/main-process-module/event.json @@ -85,7 +85,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "generic" } } diff --git a/test/e2e/test-apps/other/net-breadcrumbs/event.json b/test/e2e/test-apps/other/net-breadcrumbs/event.json index a2836063..7246d8ff 100644 --- a/test/e2e/test-apps/other/net-breadcrumbs/event.json +++ b/test/e2e/test-apps/other/net-breadcrumbs/event.json @@ -66,7 +66,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "generic" } } diff --git a/test/e2e/test-apps/other/scope-breadcrumbs/event.json b/test/e2e/test-apps/other/scope-breadcrumbs/event.json index 3884bb8f..f6aa0711 100644 --- a/test/e2e/test-apps/other/scope-breadcrumbs/event.json +++ b/test/e2e/test-apps/other/scope-breadcrumbs/event.json @@ -76,7 +76,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/test/e2e/test-apps/other/screenshots/event.json b/test/e2e/test-apps/other/screenshots/event.json index ed62d1a4..6cdd9b93 100644 --- a/test/e2e/test-apps/other/screenshots/event.json +++ b/test/e2e/test-apps/other/screenshots/event.json @@ -75,7 +75,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/test/e2e/test-apps/sessions/javascript-error/event.json b/test/e2e/test-apps/sessions/javascript-error/event.json index 57228daa..9fe8b65c 100644 --- a/test/e2e/test-apps/sessions/javascript-error/event.json +++ b/test/e2e/test-apps/sessions/javascript-error/event.json @@ -75,7 +75,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/test/e2e/test-apps/sessions/javascript-error/session-end.json b/test/e2e/test-apps/sessions/javascript-error/session-end.json deleted file mode 100644 index f67467db..00000000 --- a/test/e2e/test-apps/sessions/javascript-error/session-end.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "appId": "277345", - "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", - "method": "envelope", - "data": { - "sid": "{{id}}", - "init": false, - "started": 0, - "timestamp": 0, - "status": "exited", - "errors": 1, - "duration": 0, - "attrs": { - "release": "error-session@1.0.0" - } - } -} diff --git a/test/e2e/test-apps/sessions/javascript-error/session-error.json b/test/e2e/test-apps/sessions/javascript-error/session-error.json index b7e41c0d..5b631358 100644 --- a/test/e2e/test-apps/sessions/javascript-error/session-error.json +++ b/test/e2e/test-apps/sessions/javascript-error/session-error.json @@ -7,7 +7,7 @@ "init": false, "started": 0, "timestamp": 0, - "status": "ok", + "status": "crashed", "errors": 1, "duration": 0, "attrs": { diff --git a/yarn.lock b/yarn.lock index 32cbac31..f882142a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -135,13 +135,13 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@sentry-internal/eslint-config-sdk@7.66.0": - version "7.66.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.66.0.tgz#6785a2100e4bba69f6400a09e3a030582bc48441" - integrity sha512-gGSx26NKzFQKyYYHiN4cAhzp7VypFsfxMr6Pa4OFc1O5bNwSk0fD+YNylFFQ4/kQuVb1ccL+1KSSNVI+xjaqmg== +"@sentry-internal/eslint-config-sdk@7.68.0": + version "7.68.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.68.0.tgz#6154af30c5b1125419fb3192c97d96a8ddb98310" + integrity sha512-24TdQxg/sneTbPV3gBr9wE5hjhTGSQ4b6H8f069DwdJ8BUKmPXMWkX7/3NmgfOqieccLrgsxIMfbkvLveeVBTA== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.66.0" - "@sentry-internal/typescript" "7.66.0" + "@sentry-internal/eslint-plugin-sdk" "7.68.0" + "@sentry-internal/typescript" "7.68.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -151,83 +151,83 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.66.0": - version "7.66.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.66.0.tgz#c111c9722253f18f7d1128933484e5b054a28dd3" - integrity sha512-Iqj1D1F3p91Xx34oyuI5uLMJou55E6ycT8l1p0tABcj9MxdTxhxHtBi2F8gJSe1zrGX8TRo4m3GqwMOn8BQOuQ== +"@sentry-internal/eslint-plugin-sdk@7.68.0": + version "7.68.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.68.0.tgz#41691a39fa10e66869bbe0418121d8051258433f" + integrity sha512-XYv33e+9KiB+uEghilBoGlve3UhbrXGGVnnhVppoeAQQek/RxnjHSwwZWo98UqxzYLLW4G9XofUUIxNI2AISCg== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.66.0": - version "7.66.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.66.0.tgz#45ea607917d55a5bcaa3229341387ff6ed9b3a2b" - integrity sha512-3vCgC2hC3T45pn53yTDVcRpHoJTBxelDPPZVsipAbZnoOVPkj7n6dNfDhj3I3kwWCBPahPkXmE+R4xViR8VqJg== +"@sentry-internal/tracing@7.68.0": + version "7.68.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.68.0.tgz#cb83a797baa671702cf43caf2280868850a0ef04" + integrity sha512-nNKS/q21+Iqzxs2K7T/l3dZi8Z9s/uxsAazpk2AYhFzx9mFnPj1Xfe3dgbFoygNifE+IrpUuldr6D5HQamTDPQ== dependencies: - "@sentry/core" "7.66.0" - "@sentry/types" "7.66.0" - "@sentry/utils" "7.66.0" + "@sentry/core" "7.68.0" + "@sentry/types" "7.68.0" + "@sentry/utils" "7.68.0" tslib "^2.4.1 || ^1.9.3" -"@sentry-internal/typescript@7.66.0": - version "7.66.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.66.0.tgz#5185c131a2ae5089dc4b668961a84de7ef08d7a4" - integrity sha512-hWN1ErxtjrVfilW4UNRLUfSVVIvGDIJNZhWUg2NhEdh2CTub/WBLiYqe0DKRJf3rURBTVRmnJlh3YXmEkh5ynQ== - -"@sentry/browser@7.66.0": - version "7.66.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.66.0.tgz#9aa3078f8914d2f8acb4ad9fc7b2011c80e357f5" - integrity sha512-rW037rf8jkhyykG38+HUdwkRCKHJEMM5NkCqPIO5zuuxfLKukKdI2rbvgJ93s3/9UfsTuDFcKFL1u43mCn6sDw== - dependencies: - "@sentry-internal/tracing" "7.66.0" - "@sentry/core" "7.66.0" - "@sentry/replay" "7.66.0" - "@sentry/types" "7.66.0" - "@sentry/utils" "7.66.0" +"@sentry-internal/typescript@7.68.0": + version "7.68.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.68.0.tgz#8b38e213b0d6ec98617ab6c9bc42ca529fe93bc4" + integrity sha512-9jE/pYmSJndyKZ1y/95rVzwwDN3CGR1Fm30fvgdKdVcf4cIaLQMk50XVCHPhB5D7omXOeChOIwShJq21C1/KfA== + +"@sentry/browser@7.68.0": + version "7.68.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.68.0.tgz#b94be6385f3b1450e928bacf64479d06c452ff42" + integrity sha512-1RIPLzKcBeUeG8CQc4OIRfQ6F1zmGKku1am7P9QTz0bz//Mu7bEjm75DM69LBoUlP/Ab9cQQA3fZFUvrH0j1Tg== + dependencies: + "@sentry-internal/tracing" "7.68.0" + "@sentry/core" "7.68.0" + "@sentry/replay" "7.68.0" + "@sentry/types" "7.68.0" + "@sentry/utils" "7.68.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/core@7.66.0": - version "7.66.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.66.0.tgz#8968f2a9e641d33e3750a8e24d1d39953680c4f2" - integrity sha512-WMAEPN86NeCJ1IT48Lqiz4MS5gdDjBwP4M63XP4msZn9aujSf2Qb6My5uT87AJr9zBtgk8MyJsuHr35F0P3q1w== +"@sentry/core@7.68.0": + version "7.68.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.68.0.tgz#323817afea06b1fc22db37620bf74f3f8a46dbcf" + integrity sha512-mT3ObBWgvAky/QF3dZy4KBoXbRXbNsD6evn+mYi9UEeIZQ5NpnQYDEp78mapiEjI/TAHZIhTIuaBhj1Jk0qUUA== dependencies: - "@sentry/types" "7.66.0" - "@sentry/utils" "7.66.0" + "@sentry/types" "7.68.0" + "@sentry/utils" "7.68.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/node@7.66.0": - version "7.66.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.66.0.tgz#d3e08471e1ecae28d3cd0ba3c18487ecb2449881" - integrity sha512-PxqIqLr4Sh5xcDfECiBQ4PuZ7v8yTgLhaRkruWrZPYxQrcJFPkwbFkw/IskzVnhT2VwXUmeWEIlRMQKBJ0t83A== +"@sentry/node@7.68.0": + version "7.68.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.68.0.tgz#da3407ba7455109cf625c9a134a3f74ec5f5ca6b" + integrity sha512-gtcHoi6Xu6Iu8MpPgKJA4E0nozqLvYF0fKtt+27T0QBzWioO6lkxSQkKGWMyJGL0AmpLCex0E28fck/rlbt0LA== dependencies: - "@sentry-internal/tracing" "7.66.0" - "@sentry/core" "7.66.0" - "@sentry/types" "7.66.0" - "@sentry/utils" "7.66.0" + "@sentry-internal/tracing" "7.68.0" + "@sentry/core" "7.68.0" + "@sentry/types" "7.68.0" + "@sentry/utils" "7.68.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^2.4.1 || ^1.9.3" -"@sentry/replay@7.66.0": - version "7.66.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.66.0.tgz#5469144192824e7688c475ed29586a8cce6606f6" - integrity sha512-5Y2SlVTOFTo3uIycv0mRneBakQtLgWkOnsJaC5LB0Ip0TqVKiMCbQ578vvXp+yvRj4LcS1gNd98xTTNojBoQNg== +"@sentry/replay@7.68.0": + version "7.68.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.68.0.tgz#ad6e91586c2c6ac81a42705e846eb74f4d068e76" + integrity sha512-be8QT2pxcLOTuX6HBRkK0mCVwM97dU5ZLCeofI+xJEWcRnoJdbx00nFwvBXvvoCizbtf4YIMCGwaT2k5LrVxsQ== dependencies: - "@sentry/core" "7.66.0" - "@sentry/types" "7.66.0" - "@sentry/utils" "7.66.0" + "@sentry/core" "7.68.0" + "@sentry/types" "7.68.0" + "@sentry/utils" "7.68.0" -"@sentry/types@7.66.0": - version "7.66.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.66.0.tgz#4ec290cc6a3dd2024a61a0bffb468cedb409f7fb" - integrity sha512-uUMSoSiar6JhuD8p7ON/Ddp4JYvrVd2RpwXJRPH1A4H4Bd4DVt1mKJy1OLG6HdeQv39XyhB1lPZckKJg4tATPw== +"@sentry/types@7.68.0": + version "7.68.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.68.0.tgz#6134511106eed90bf033dc2ce76955f61582b48f" + integrity sha512-5J2pH1Pjx/029zTm3CNY9MaE8Aui81nG7JCtlMp7uEfQ//9Ja4d4Sliz/kV4ARbkIKUZerSgaRAm3xCy5XOXLg== -"@sentry/utils@7.66.0": - version "7.66.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.66.0.tgz#2e37c96610f26bc79ac064fca4222ea91fece68d" - integrity sha512-9GYUVgXjK66uXXcLXVMXVzlptqMtq1eJENCuDeezQiEFrNA71KkLDg00wESp+LL+bl3wpVTBApArpbF6UEG5hQ== +"@sentry/utils@7.68.0": + version "7.68.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.68.0.tgz#e9fd33f4e856cf6ef3843ae11af3c836d88cbb88" + integrity sha512-NecnQegvKARyeFmBx7mYmbI17mTvjARWs1nfzY5jhPyNc3Zk4M3bQsgIdnJ1t+jo93UYudlNND7hxhDzjcBAVg== dependencies: - "@sentry/types" "7.66.0" + "@sentry/types" "7.68.0" tslib "^2.4.1 || ^1.9.3" "@sindresorhus/is@^4.0.0": From b247856826cb935b62a6574160f4f742c263972a Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 11 Sep 2023 18:04:21 +0200 Subject: [PATCH 140/239] feat: Add integration to track sessions as app in foreground (#725) --- src/main/electron-normalize.ts | 2 + .../integrations/browser-window-session.ts | 96 ++++++++++++++++++ src/main/integrations/index.ts | 1 + src/main/integrations/main-process-session.ts | 46 +-------- src/main/sdk.ts | 27 +++-- src/main/sessions.ts | 41 +++++++- .../test-apps/sessions/window-bad/event.json | 99 +++++++++++++++++++ .../sessions/window-bad/package.json | 8 ++ .../test-apps/sessions/window-bad/recipe.yml | 4 + .../sessions/window-bad/session-first.json | 17 ++++ .../sessions/window-bad/session-second.json | 17 ++++ .../sessions/window-bad/session-third.json | 17 ++++ .../sessions/window-bad/src/index.html | 19 ++++ .../test-apps/sessions/window-bad/src/main.js | 27 +++++ .../sessions/window-good/package.json | 8 ++ .../test-apps/sessions/window-good/recipe.yml | 4 + .../sessions/window-good/session-first.json | 17 ++++ .../sessions/window-good/session-fourth.json | 17 ++++ .../sessions/window-good/session-second.json | 17 ++++ .../sessions/window-good/session-third.json | 17 ++++ .../sessions/window-good/src/index.html | 15 +++ .../sessions/window-good/src/main.js | 35 +++++++ 22 files changed, 498 insertions(+), 53 deletions(-) create mode 100644 src/main/integrations/browser-window-session.ts create mode 100644 test/e2e/test-apps/sessions/window-bad/event.json create mode 100644 test/e2e/test-apps/sessions/window-bad/package.json create mode 100644 test/e2e/test-apps/sessions/window-bad/recipe.yml create mode 100644 test/e2e/test-apps/sessions/window-bad/session-first.json create mode 100644 test/e2e/test-apps/sessions/window-bad/session-second.json create mode 100644 test/e2e/test-apps/sessions/window-bad/session-third.json create mode 100644 test/e2e/test-apps/sessions/window-bad/src/index.html create mode 100644 test/e2e/test-apps/sessions/window-bad/src/main.js create mode 100644 test/e2e/test-apps/sessions/window-good/package.json create mode 100644 test/e2e/test-apps/sessions/window-good/recipe.yml create mode 100644 test/e2e/test-apps/sessions/window-good/session-first.json create mode 100644 test/e2e/test-apps/sessions/window-good/session-fourth.json create mode 100644 test/e2e/test-apps/sessions/window-good/session-second.json create mode 100644 test/e2e/test-apps/sessions/window-good/session-third.json create mode 100644 test/e2e/test-apps/sessions/window-good/src/index.html create mode 100644 test/e2e/test-apps/sessions/window-good/src/main.js diff --git a/src/main/electron-normalize.ts b/src/main/electron-normalize.ts index cbdf4d39..e4f698c7 100644 --- a/src/main/electron-normalize.ts +++ b/src/main/electron-normalize.ts @@ -7,6 +7,8 @@ import { Optional } from '../common/types'; const parsed = parseSemver(process.versions.electron); const version = { major: parsed.major || 0, minor: parsed.minor || 0, patch: parsed.patch || 0 }; +export const ELECTRON_MAJOR_VERSION = version.major; + /** Returns if the app is packaged. Copied from Electron to support < v3 */ export const isPackaged = (() => { const execFile = basename(process.execPath).toLowerCase(); diff --git a/src/main/integrations/browser-window-session.ts b/src/main/integrations/browser-window-session.ts new file mode 100644 index 00000000..142cdf45 --- /dev/null +++ b/src/main/integrations/browser-window-session.ts @@ -0,0 +1,96 @@ +import { Integration } from '@sentry/types'; +import { app, BrowserWindow } from 'electron'; + +import { ELECTRON_MAJOR_VERSION } from '../electron-normalize'; +import { endSession, endSessionOnExit, startSession } from '../sessions'; + +interface Options { + /** + * Number of seconds to wait before ending a session after the app loses focus. + * + * Default: 10 seconds + */ + backgroundTimeoutSeconds?: number; +} + +// The state can be, active, inactive, or waiting for a timeout +type SessionState = { name: 'active' } | { name: 'inactive' } | { name: 'timeout'; timer: NodeJS.Timeout }; + +/** + * Tracks sessions as BrowserWindows focused. + * + * Supports Electron >= v12 + */ +export class BrowserWindowSession implements Integration { + /** @inheritDoc */ + public static id: string = 'BrowserWindowSession'; + + /** @inheritDoc */ + public readonly name: string; + + private _state: SessionState; + + public constructor(private readonly _options: Options = {}) { + if (ELECTRON_MAJOR_VERSION < 12) { + throw new Error('BrowserWindowSession requires Electron >= v12'); + } + + this.name = BrowserWindowSession.id; + this._state = { name: 'inactive' }; + } + + /** @inheritDoc */ + public setupOnce(): void { + app.on('browser-window-created', (_event, window) => { + window.on('focus', this._windowStateChanged); + window.on('blur', this._windowStateChanged); + window.on('show', this._windowStateChanged); + window.on('hide', this._windowStateChanged); + + // when the window is closed we need to remove the listeners + window.once('closed', () => { + window.removeListener('focus', this._windowStateChanged); + window.removeListener('blur', this._windowStateChanged); + window.removeListener('show', this._windowStateChanged); + window.removeListener('hide', this._windowStateChanged); + }); + }); + + // if the app exits while the session is active, end the session + endSessionOnExit(); + } + + private _windowStateChanged = (): void => { + const aWindowIsActive = !!BrowserWindow.getFocusedWindow(); + + if (aWindowIsActive) { + // We are now active + if (this._state.name === 'inactive') { + // If we were inactive, start a new session + void startSession(true); + } else if (this._state.name === 'timeout') { + // Clear the timeout since the app has become active again + clearTimeout(this._state.timer); + } + + this._state = { name: 'active' }; + } else { + if (this._state.name === 'active') { + // We have become inactive, start the timeout + const timeout = (this._options.backgroundTimeoutSeconds ?? 30) * 1_000; + + const timer = setTimeout(() => { + // if the state says we're still waiting for the timeout, end the session + if (this._state.name === 'timeout') { + this._state = { name: 'inactive' }; + void endSession(); + } + }, timeout) + // unref so this timer doesn't block app exit + .unref(); + + this._state = { name: 'timeout', timer }; + } + } + }; +} diff --git a/src/main/integrations/index.ts b/src/main/integrations/index.ts index 313bb41f..e723f064 100644 --- a/src/main/integrations/index.ts +++ b/src/main/integrations/index.ts @@ -5,6 +5,7 @@ export { SentryMinidump } from './sentry-minidump'; export { ElectronMinidump } from './electron-minidump'; export { PreloadInjection } from './preload-injection'; export { MainProcessSession } from './main-process-session'; +export { BrowserWindowSession } from './browser-window-session'; export { AdditionalContext } from './additional-context'; export { Net } from './net-breadcrumbs'; export { ChildProcess } from './child-process'; diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts index 983900d3..3d161681 100644 --- a/src/main/integrations/main-process-session.ts +++ b/src/main/integrations/main-process-session.ts @@ -1,8 +1,6 @@ import { Integration } from '@sentry/types'; -import { logger } from '@sentry/utils'; -import { app } from 'electron'; -import { endSession, startSession } from '../sessions'; +import { endSessionOnExit, startSession } from '../sessions'; interface Options { /** @@ -29,46 +27,6 @@ export class MainProcessSession implements Integration { public setupOnce(): void { void startSession(!!this._options.sendOnCreate); - // We track sessions via the 'will-quit' event which is the last event emitted before close. - // - // We need to be the last 'will-quit' listener so as not to interfere with any user defined listeners which may - // call `event.preventDefault()`. - this._ensureExitHandlerLast(); - - // 'before-quit' is always called before 'will-quit' so we listen there and ensure our 'will-quit' handler is still - // the last listener - app.on('before-quit', () => { - this._ensureExitHandlerLast(); - }); - } - - /** - * Hooks 'will-quit' and ensures the handler is always last - */ - private _ensureExitHandlerLast(): void { - app.removeListener('will-quit', this._exitHandler); - app.on('will-quit', this._exitHandler); + endSessionOnExit(); } - - /** Handles the exit */ - private _exitHandler: (event: Electron.Event) => Promise<void> = async (event: Electron.Event) => { - if (event.defaultPrevented) { - return; - } - - logger.log('[MainProcessSession] Exit Handler'); - - // Stop the exit so we have time to send the session - event.preventDefault(); - - try { - // End the session - await endSession(); - } catch (e) { - // Ignore and log any errors which would prevent app exit - logger.warn('[MainProcessSession] Error ending session:', e); - } - - app.exit(); - }; } diff --git a/src/main/sdk.ts b/src/main/sdk.ts index 80e84d07..94b645d9 100644 --- a/src/main/sdk.ts +++ b/src/main/sdk.ts @@ -128,21 +128,32 @@ export function init(userOptions: ElectronMainOptions): void { nodeInit(options); } -/** Sets the default integrations and ensures that multiple minidump integrations are not enabled */ +/** A list of integrations which cause default integrations to be removed */ +const INTEGRATION_OVERRIDES = [ + { override: 'ElectronMinidump', remove: 'SentryMinidump' }, + { override: 'BrowserWindowSession', remove: 'MainProcessSession' }, +]; + +/** Sets the default integrations and ensures that multiple minidump or session integrations are not enabled */ function setDefaultIntegrations(defaults: Integration[], options: ElectronMainOptions): void { if (options.defaultIntegrations === undefined) { - // If ElectronMinidump has been included, automatically remove SentryMinidump - if (Array.isArray(options.integrations) && options.integrations.some((i) => i.name === 'ElectronMinidump')) { - options.defaultIntegrations = defaults.filter((integration) => integration.name !== 'SentryMinidump'); + const removeDefaultsMatching = (user: Integration[], defaults: Integration[]): Integration[] => { + const toRemove = INTEGRATION_OVERRIDES.filter(({ override }) => user.some((i) => i.name === override)).map( + ({ remove }) => remove, + ); + + return defaults.filter((i) => !toRemove.includes(i.name)); + }; + + if (Array.isArray(options.integrations)) { + options.defaultIntegrations = removeDefaultsMatching(options.integrations, defaults); return; } else if (typeof options.integrations === 'function') { const originalFn = options.integrations; options.integrations = (integrations) => { - const userIntegrations = originalFn(integrations); - return userIntegrations.some((i) => i.name === 'ElectronMinidump') - ? userIntegrations.filter((integration) => integration.name !== 'SentryMinidump') - : userIntegrations; + const resultIntegrations = originalFn(integrations); + return removeDefaultsMatching(resultIntegrations, resultIntegrations); }; } diff --git a/src/main/sessions.ts b/src/main/sessions.ts index f970b2db..080a8522 100644 --- a/src/main/sessions.ts +++ b/src/main/sessions.ts @@ -2,6 +2,7 @@ import { getCurrentHub, makeSession, updateSession } from '@sentry/core'; import { flush, NodeClient } from '@sentry/node'; import { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types'; import { logger } from '@sentry/utils'; +import { app } from 'electron'; import { sentryCachePath } from './fs'; import { Store } from './store'; @@ -11,7 +12,7 @@ const PERSIST_INTERVAL_MS = 60_000; /** Stores the app session in case of termination due to main process crash or app killed */ const sessionStore = new Store<SessionContext | undefined>(sentryCachePath, 'session', undefined); -/** Previous session that did not exit cleanly */ +/** Previous session if it did not exit cleanly */ let previousSession: Promise<Partial<Session> | undefined> | undefined = sessionStore.get(); let persistTimer: NodeJS.Timer | undefined; @@ -145,3 +146,41 @@ export function sessionCrashed(): void { hub.captureSession(); } + +/** + * End the current session on app exit + */ +export function endSessionOnExit(): void { + // 'before-quit' is always called before 'will-quit' so we listen there and ensure our 'will-quit' handler is still + // the last listener + app.on('before-quit', () => { + // We track the end of sessions via the 'will-quit' event which is the last event emitted before close. + // + // We need to be the last 'will-quit' listener so as not to interfere with any user defined listeners which may + // call `event.preventDefault()` to abort the exit. + app.removeListener('will-quit', exitHandler); + app.on('will-quit', exitHandler); + }); +} + +/** Handles the exit */ +const exitHandler: (event: Electron.Event) => Promise<void> = async (event: Electron.Event) => { + if (event.defaultPrevented) { + return; + } + + logger.log('[Session] Exit Handler'); + + // Stop the exit so we have time to send the session + event.preventDefault(); + + try { + // End the session + await endSession(); + } catch (e) { + // Ignore and log any errors which would prevent app exit + logger.warn('[Session] Error ending session:', e); + } + + app.exit(); +}; diff --git a/test/e2e/test-apps/sessions/window-bad/event.json b/test/e2e/test-apps/sessions/window-bad/event.json new file mode 100644 index 00000000..1d07c6b5 --- /dev/null +++ b/test/e2e/test-apps/sessions/window-bad/event.json @@ -0,0 +1,99 @@ +{ + "method": "envelope", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "appId": "277345", + "data": { + "sdk": { + "name": "sentry.javascript.electron", + "packages": [ + { + "name": "npm:@sentry/electron", + "version": "{{version}}" + } + ], + "version": "{{version}}" + }, + "contexts": { + "app": { + "app_name": "bad-session-window", + "app_version": "1.0.0", + "app_start_time": "{{time}}" + }, + "browser": { + "name": "Chrome" + }, + "chrome": { + "name": "Chrome", + "type": "runtime", + "version": "{{version}}" + }, + "device": { + "arch": "{{arch}}", + "family": "Desktop", + "memory_size": 0, + "free_memory": 0, + "processor_count": 0, + "processor_frequency": 0, + "cpu_description": "{{cpu}}", + "screen_resolution":"{{screen}}", + "screen_density": 1, + "language": "{{language}}" + }, + "node": { + "name": "Node", + "type": "runtime", + "version": "{{version}}" + }, + "os": { + "name": "{{platform}}", + "version": "{{version}}" + }, + "runtime": { + "name": "Electron", + "version": "{{version}}" + } + }, + "release": "bad-session-window@1.0.0", + "environment": "development", + "user": { + "ip_address": "{{auto}}" + }, + "exception": { + "values": [ + { + "type": "Error", + "value": "Some renderer error", + "stacktrace": { + "frames": [ + { + "colno": 0, + "filename": "app:///src/index.html", + "function": "{{function}}", + "in_app": true, + "lineno": 0 + } + ] + }, + "mechanism": { + "handled": true, + "type": "instrument" + } + } + ] + }, + "level": "error", + "event_id": "{{id}}", + "platform": "javascript", + "timestamp": 0, + "breadcrumbs": [], + "request": { + "url": "app:///src/index.html" + }, + "tags": { + "event.environment": "javascript", + "event.origin": "electron", + "event.process": "renderer", + "event_type": "javascript" + } + } +} diff --git a/test/e2e/test-apps/sessions/window-bad/package.json b/test/e2e/test-apps/sessions/window-bad/package.json new file mode 100644 index 00000000..8dce09ae --- /dev/null +++ b/test/e2e/test-apps/sessions/window-bad/package.json @@ -0,0 +1,8 @@ +{ + "name": "bad-session-window", + "version": "1.0.0", + "main": "src/main.js", + "dependencies": { + "@sentry/electron": "3.0.0" + } +} diff --git a/test/e2e/test-apps/sessions/window-bad/recipe.yml b/test/e2e/test-apps/sessions/window-bad/recipe.yml new file mode 100644 index 00000000..990c6571 --- /dev/null +++ b/test/e2e/test-apps/sessions/window-bad/recipe.yml @@ -0,0 +1,4 @@ +description: Bad Session - Window +category: Sessions +command: yarn +condition: version.major >= 12 diff --git a/test/e2e/test-apps/sessions/window-bad/session-first.json b/test/e2e/test-apps/sessions/window-bad/session-first.json new file mode 100644 index 00000000..83434cfa --- /dev/null +++ b/test/e2e/test-apps/sessions/window-bad/session-first.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": true, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "bad-session-window@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/window-bad/session-second.json b/test/e2e/test-apps/sessions/window-bad/session-second.json new file mode 100644 index 00000000..ca4ea31d --- /dev/null +++ b/test/e2e/test-apps/sessions/window-bad/session-second.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": false, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 1, + "duration": 0, + "attrs": { + "release": "bad-session-window@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/window-bad/session-third.json b/test/e2e/test-apps/sessions/window-bad/session-third.json new file mode 100644 index 00000000..11b6d849 --- /dev/null +++ b/test/e2e/test-apps/sessions/window-bad/session-third.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": false, + "started": 0, + "timestamp": 0, + "status": "exited", + "errors": 1, + "duration": 0, + "attrs": { + "release": "bad-session-window@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/window-bad/src/index.html b/test/e2e/test-apps/sessions/window-bad/src/index.html new file mode 100644 index 00000000..c30b5ca8 --- /dev/null +++ b/test/e2e/test-apps/sessions/window-bad/src/index.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + </head> + <body> + <script> + const { init } = require('@sentry/electron'); + + init({ + debug: true, + }); + + setTimeout(() => { + throw new Error('Some renderer error'); + }, 1000); + </script> + </body> +</html> diff --git a/test/e2e/test-apps/sessions/window-bad/src/main.js b/test/e2e/test-apps/sessions/window-bad/src/main.js new file mode 100644 index 00000000..c542d786 --- /dev/null +++ b/test/e2e/test-apps/sessions/window-bad/src/main.js @@ -0,0 +1,27 @@ +const path = require('path'); + +const { app, BrowserWindow } = require('electron'); +const { init, Integrations } = require('@sentry/electron'); + +init({ + dsn: '__DSN__', + debug: true, + integrations: [new Integrations.BrowserWindowSession({ backgroundTimeoutSeconds: 1 })], + onFatalError: () => {}, +}); + +app.on('ready', () => { + const mainWindow = new BrowserWindow({ + show: true, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + }, + }); + + mainWindow.loadFile(path.join(__dirname, 'index.html')); + + setTimeout(() => { + app.quit(); + }, 2000); +}); diff --git a/test/e2e/test-apps/sessions/window-good/package.json b/test/e2e/test-apps/sessions/window-good/package.json new file mode 100644 index 00000000..bdabd15f --- /dev/null +++ b/test/e2e/test-apps/sessions/window-good/package.json @@ -0,0 +1,8 @@ +{ + "name": "good-session-window", + "version": "1.0.0", + "main": "src/main.js", + "dependencies": { + "@sentry/electron": "3.0.0" + } +} diff --git a/test/e2e/test-apps/sessions/window-good/recipe.yml b/test/e2e/test-apps/sessions/window-good/recipe.yml new file mode 100644 index 00000000..e3e3a34f --- /dev/null +++ b/test/e2e/test-apps/sessions/window-good/recipe.yml @@ -0,0 +1,4 @@ +description: Good Session - Window +category: Sessions +command: yarn +condition: version.major >= 12 diff --git a/test/e2e/test-apps/sessions/window-good/session-first.json b/test/e2e/test-apps/sessions/window-good/session-first.json new file mode 100644 index 00000000..9ae61330 --- /dev/null +++ b/test/e2e/test-apps/sessions/window-good/session-first.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": true, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "good-session-window@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/window-good/session-fourth.json b/test/e2e/test-apps/sessions/window-good/session-fourth.json new file mode 100644 index 00000000..aaec8549 --- /dev/null +++ b/test/e2e/test-apps/sessions/window-good/session-fourth.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": false, + "started": 0, + "timestamp": 0, + "status": "exited", + "errors": 0, + "duration": 0, + "attrs": { + "release": "good-session-window@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/window-good/session-second.json b/test/e2e/test-apps/sessions/window-good/session-second.json new file mode 100644 index 00000000..aaec8549 --- /dev/null +++ b/test/e2e/test-apps/sessions/window-good/session-second.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": false, + "started": 0, + "timestamp": 0, + "status": "exited", + "errors": 0, + "duration": 0, + "attrs": { + "release": "good-session-window@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/window-good/session-third.json b/test/e2e/test-apps/sessions/window-good/session-third.json new file mode 100644 index 00000000..9ae61330 --- /dev/null +++ b/test/e2e/test-apps/sessions/window-good/session-third.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": true, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "good-session-window@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/window-good/src/index.html b/test/e2e/test-apps/sessions/window-good/src/index.html new file mode 100644 index 00000000..b43f77af --- /dev/null +++ b/test/e2e/test-apps/sessions/window-good/src/index.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + </head> + <body> + <script> + const { init } = require('@sentry/electron'); + + init({ + debug: true, + }); + </script> + </body> +</html> diff --git a/test/e2e/test-apps/sessions/window-good/src/main.js b/test/e2e/test-apps/sessions/window-good/src/main.js new file mode 100644 index 00000000..6e6e5e65 --- /dev/null +++ b/test/e2e/test-apps/sessions/window-good/src/main.js @@ -0,0 +1,35 @@ +const path = require('path'); + +const { app, BrowserWindow } = require('electron'); +const { init, Integrations } = require('@sentry/electron'); + +init({ + dsn: '__DSN__', + debug: true, + integrations: [new Integrations.BrowserWindowSession({ backgroundTimeoutSeconds: 1 })], + onFatalError: () => {}, +}); + +app.on('ready', () => { + const mainWindow = new BrowserWindow({ + show: true, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + }, + }); + + mainWindow.loadFile(path.join(__dirname, 'index.html')); + + setTimeout(() => { + mainWindow.hide(); + + setTimeout(() => { + mainWindow.show(); + + setTimeout(() => { + app.quit(); + }, 2000); + }, 2000); + }, 2000); +}); From cda58862b6f4f82a59bfe0fd6833615e7a4a2c9c Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 12 Sep 2023 16:03:27 +0200 Subject: [PATCH 141/239] test: Fix test failure after merge (#741) --- .../test-apps/sessions/window-bad/event.json | 2 +- .../sessions/window-bad/session-second.json | 2 +- .../sessions/window-bad/session-third.json | 17 ----------------- 3 files changed, 2 insertions(+), 19 deletions(-) delete mode 100644 test/e2e/test-apps/sessions/window-bad/session-third.json diff --git a/test/e2e/test-apps/sessions/window-bad/event.json b/test/e2e/test-apps/sessions/window-bad/event.json index 1d07c6b5..e9fff737 100644 --- a/test/e2e/test-apps/sessions/window-bad/event.json +++ b/test/e2e/test-apps/sessions/window-bad/event.json @@ -75,7 +75,7 @@ ] }, "mechanism": { - "handled": true, + "handled": false, "type": "instrument" } } diff --git a/test/e2e/test-apps/sessions/window-bad/session-second.json b/test/e2e/test-apps/sessions/window-bad/session-second.json index ca4ea31d..450f4e5a 100644 --- a/test/e2e/test-apps/sessions/window-bad/session-second.json +++ b/test/e2e/test-apps/sessions/window-bad/session-second.json @@ -7,7 +7,7 @@ "init": false, "started": 0, "timestamp": 0, - "status": "ok", + "status": "crashed", "errors": 1, "duration": 0, "attrs": { diff --git a/test/e2e/test-apps/sessions/window-bad/session-third.json b/test/e2e/test-apps/sessions/window-bad/session-third.json deleted file mode 100644 index 11b6d849..00000000 --- a/test/e2e/test-apps/sessions/window-bad/session-third.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "appId": "277345", - "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", - "method": "envelope", - "data": { - "sid": "{{id}}", - "init": false, - "started": 0, - "timestamp": 0, - "status": "exited", - "errors": 1, - "duration": 0, - "attrs": { - "release": "bad-session-window@1.0.0" - } - } -} From 8100264a60d5b5490c103dee0c7ebdf84371a28a Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 12 Sep 2023 16:03:55 +0200 Subject: [PATCH 142/239] test: Fix test failure after merge (#741) From 91d4380ede98bea7e7e9b426c240905ba46a78e2 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 12 Sep 2023 16:58:40 +0200 Subject: [PATCH 143/239] chore: changelog for release (#742) --- CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c3a7ff73..5aaab531 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,24 @@ ## Unreleased +## 4.11.0 + +- feat: Add optional `BrowserWindowSession` to track sessions as window in foreground (#725) +- feat: Update from [v7.63.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.63.0) to + [v7.68.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.68.0) of JavaScript SDKs (#738) +- **feat: Mark errors caught by the SDK as unhandled** + +As per the changes in the JavaScript SDKs [for +v7.67.0](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md#7670), this release fixes inconsistent +behaviour of when our SDKs classify captured errors as unhandled. Previously, some of our instrumentations correctly set +unhandled, while others set handled. + +Going forward, all errors caught automatically from our SDKs will be marked as unhandled. +If you manually capture errors (e.g. by calling `Sentry.captureException`), your errors will continue to be reported as handled. + +This change might lead to a decrease in reported crash-free sessions and consequently in your release health score. +If you have concerns about this, feel free to open an issue. + ## 4.10.0 - feat: Optionally send sessions when they're created (#715) From 08339bd1da5581deea2cb4b4ed100ded25a8e645 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 13 Sep 2023 02:36:01 +0200 Subject: [PATCH 144/239] fix: `BrowserWindowSession` should check visibility to work in Electron v12-13 (#744) --- src/main/integrations/browser-window-session.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/integrations/browser-window-session.ts b/src/main/integrations/browser-window-session.ts index 142cdf45..02e1e0ab 100644 --- a/src/main/integrations/browser-window-session.ts +++ b/src/main/integrations/browser-window-session.ts @@ -4,6 +4,19 @@ import { app, BrowserWindow } from 'electron'; import { ELECTRON_MAJOR_VERSION } from '../electron-normalize'; import { endSession, endSessionOnExit, startSession } from '../sessions'; +function focusedWindow(): boolean { + for (const window of BrowserWindow.getAllWindows()) { + if (!window.isDestroyed() && window.webContents && !window.webContents.isDestroyed()) { + // It's important to test both isVisible and isFocused, since + // Electron v12-13 do not report hidden as a loss of focus + if (window.isFocused() && window.isVisible()) { + return true; + } + } + } + return false; +} + interface Options { /** * Number of seconds to wait before ending a session after the app loses focus. @@ -61,9 +74,9 @@ export class BrowserWindowSession implements Integration { } private _windowStateChanged = (): void => { - const aWindowIsActive = !!BrowserWindow.getFocusedWindow(); + const hasFocusedWindow = focusedWindow(); - if (aWindowIsActive) { + if (hasFocusedWindow) { // We are now active if (this._state.name === 'inactive') { // If we were inactive, start a new session From ab8b0580745d58254776e6f087f3b0ff47b61216 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Wed, 13 Sep 2023 00:36:42 +0000 Subject: [PATCH 145/239] release: 4.11.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 2128245e..61e97690 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.10.0", + "version": "4.11.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", @@ -107,4 +107,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} \ No newline at end of file +} From 1c18341a6f025f8213a814b8d1be6415a9157ce1 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 18 Sep 2023 20:41:12 +0200 Subject: [PATCH 146/239] fix: Don't send minidumps that are likely invalid (#748) --- .../integrations/sentry-minidump/minidump-loader.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/integrations/sentry-minidump/minidump-loader.ts b/src/main/integrations/sentry-minidump/minidump-loader.ts index 93022868..20318b95 100644 --- a/src/main/integrations/sentry-minidump/minidump-loader.ts +++ b/src/main/integrations/sentry-minidump/minidump-loader.ts @@ -50,10 +50,18 @@ function createMinidumpLoader(fetchMinidumpsImpl: MinidumpLoader): MinidumpLoade // remove it from the file system. knownPaths.push(dump.path); + const stats = await statAsync(dump.path); + // We do not want to upload minidumps that have been generated before a // certain threshold. Those old files can be deleted immediately. - const stats = await statAsync(dump.path); - if (stats.birthtimeMs < oldestMs) { + const tooOld = stats.birthtimeMs < oldestMs; + const tooSmall = stats.size < 1024; + + if (tooSmall) { + logger.log('Minidump too small to be valid', dump.path); + } + + if (tooOld || tooSmall) { await deleteMinidump(dump); knownPaths.splice(knownPaths.indexOf(dump.path), 1); return false; From 92642faf9a4faff6027b53d3326b39aa58786a59 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 19 Sep 2023 16:37:38 +0100 Subject: [PATCH 147/239] test: New Electron versions (#745) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 8a51c0ec..896b7d46 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.23","23.3.13","24.8.2","25.8.0","26.2.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.24","23.3.13","24.8.3","25.8.1","26.2.1"] From f3a10cd7888f9c2e3c8f32c86e23ac652f44609d Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 28 Sep 2023 21:09:31 +0200 Subject: [PATCH 148/239] chore: Update changelog for release (#754) --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5aaab531..7f4e30f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## 4.11.1 + +fix: Don't send minidumps that are too small to be valid (#748) + ## 4.11.0 - feat: Add optional `BrowserWindowSession` to track sessions as window in foreground (#725) From f7d1adc2aae47128fad3151977767333c9f162a4 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Thu, 28 Sep 2023 19:10:04 +0000 Subject: [PATCH 149/239] release: 4.11.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 61e97690..e7a36d0b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.11.0", + "version": "4.11.1", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From a4278bda7f63d7e132c9d0184ef54aa8b6042652 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 29 Sep 2023 15:03:08 +0200 Subject: [PATCH 150/239] test: New Electron versions (#750) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 896b7d46..013b4af1 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.24","23.3.13","24.8.3","25.8.1","26.2.1"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.25","23.3.13","24.8.5","25.8.4","26.2.4"] From bb5d05f66365e0d3bb31c4524abf26d73b493c3b Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 29 Sep 2023 15:58:09 +0200 Subject: [PATCH 151/239] fix: Flakey session e2e test on Windows (#757) --- .../sessions/abnormal-exit-electron-uploader/src/main.js | 2 +- test/e2e/test-apps/sessions/abnormal-exit/src/main.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js index 9fd8293d..d4596d9a 100644 --- a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js +++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js @@ -34,7 +34,7 @@ app.on('ready', () => { if (process.env.APP_FIRST_RUN) { setTimeout(() => { process.exit(); - }, 2000); + }, 4000); } else { setTimeout(() => { app.quit(); diff --git a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js index ef301ad0..65ada825 100644 --- a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js +++ b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js @@ -27,7 +27,7 @@ app.on('ready', () => { if (process.env.APP_FIRST_RUN) { setTimeout(() => { process.exit(); - }, 2000); + }, 4000); } else { setTimeout(() => { app.quit(); From f701b8323fbe8f779aa17873da7c8a73e35dddce Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 29 Sep 2023 18:22:12 +0200 Subject: [PATCH 152/239] test: Extend more test times (#758) --- .../abnormal-exit-electron-uploader/src/main.js | 12 +++++------- .../e2e/test-apps/sessions/abnormal-exit/src/main.js | 12 +++++------- .../test-apps/sessions/native-crash-main/src/main.js | 12 +++++------- test/e2e/test-apps/sessions/window-bad/src/main.js | 2 +- 4 files changed, 16 insertions(+), 22 deletions(-) diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js index d4596d9a..ee658220 100644 --- a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js +++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js @@ -31,12 +31,10 @@ app.on('ready', () => { // We only exit abnormally on the first run // The second run is where the session is uploaded -if (process.env.APP_FIRST_RUN) { - setTimeout(() => { +setTimeout(() => { + if (process.env.APP_FIRST_RUN) { process.exit(); - }, 4000); -} else { - setTimeout(() => { + } else { app.quit(); - }, 4000); -} + } +}, 2000); diff --git a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js index 65ada825..3611302d 100644 --- a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js +++ b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js @@ -24,12 +24,10 @@ app.on('ready', () => { // We only exit abnormally on the first run // The second run is where the session is uploaded -if (process.env.APP_FIRST_RUN) { - setTimeout(() => { +setTimeout(() => { + if (process.env.APP_FIRST_RUN) { process.exit(); - }, 4000); -} else { - setTimeout(() => { + } else { app.quit(); - }, 4000); -} + } +}, 2000); diff --git a/test/e2e/test-apps/sessions/native-crash-main/src/main.js b/test/e2e/test-apps/sessions/native-crash-main/src/main.js index fd7415dc..3861e739 100644 --- a/test/e2e/test-apps/sessions/native-crash-main/src/main.js +++ b/test/e2e/test-apps/sessions/native-crash-main/src/main.js @@ -24,12 +24,10 @@ app.on('ready', () => { // We only crash on the first run // The second run is where the crash is uploaded -if (process.env.APP_FIRST_RUN) { - setTimeout(() => { +setTimeout(() => { + if (process.env.APP_FIRST_RUN) { process.crash(); - }, 2000); -} else { - setTimeout(() => { + } else { app.quit(); - }, 4000); -} + } +}, 4000); diff --git a/test/e2e/test-apps/sessions/window-bad/src/main.js b/test/e2e/test-apps/sessions/window-bad/src/main.js index c542d786..47675838 100644 --- a/test/e2e/test-apps/sessions/window-bad/src/main.js +++ b/test/e2e/test-apps/sessions/window-bad/src/main.js @@ -23,5 +23,5 @@ app.on('ready', () => { setTimeout(() => { app.quit(); - }, 2000); + }, 4000); }); From 82ae79fc20dc121182998363b4ed2b255a9f471a Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 29 Sep 2023 18:28:52 +0200 Subject: [PATCH 153/239] fix: Deprecate `EventToMain` integration (#759) --- src/integrations.ts | 1 + src/renderer/integrations/event-to-main.ts | 3 +++ src/renderer/integrations/index.ts | 1 + 3 files changed, 5 insertions(+) diff --git a/src/integrations.ts b/src/integrations.ts index 6c467d99..764f1363 100644 --- a/src/integrations.ts +++ b/src/integrations.ts @@ -31,6 +31,7 @@ export interface Integrations { Screenshots: Screenshots; // For renderer process ScopeToMain: ScopeToMain; + // eslint-disable-next-line deprecation/deprecation EventToMain: EventToMain; } diff --git a/src/renderer/integrations/event-to-main.ts b/src/renderer/integrations/event-to-main.ts index a319e709..0d8949b8 100644 --- a/src/renderer/integrations/event-to-main.ts +++ b/src/renderer/integrations/event-to-main.ts @@ -4,6 +4,8 @@ import { normalize } from '@sentry/utils'; import { getIPC } from '../ipc'; /** + * @deprecated Events are now sent to the main process via a custom transport. + * * Passes events to the main process. */ export class EventToMain implements Integration { @@ -14,6 +16,7 @@ export class EventToMain implements Integration { public readonly name: string; public constructor() { + // eslint-disable-next-line deprecation/deprecation this.name = EventToMain.id; } diff --git a/src/renderer/integrations/index.ts b/src/renderer/integrations/index.ts index 4b5b55f7..d8fe8850 100644 --- a/src/renderer/integrations/index.ts +++ b/src/renderer/integrations/index.ts @@ -1,2 +1,3 @@ export { ScopeToMain } from './scope-to-main'; +// eslint-disable-next-line deprecation/deprecation export { EventToMain } from './event-to-main'; From 4397d77cad2f2d2472eab9a0af5689ff8ed1325e Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 29 Sep 2023 19:04:07 +0200 Subject: [PATCH 154/239] CI: Add CI job which can be used to block merging (#760) --- .github/workflows/build.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f870740c..95388eca 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -84,3 +84,15 @@ jobs: - run: yarn install - name: Run E2E Tests run: yarn e2e + + required_jobs_passed: + name: All required jobs passed or were skipped + needs: [build, lint, test, e2e] + # Always run this, even if a dependent job failed + if: always() + runs-on: ubuntu-20.04 + steps: + - name: Check for failures + if: contains(needs.*.result, 'failure') + run: | + echo "One of the dependent jobs have failed. You may need to re-run it." && exit 1 From e52864a95ab095480525bbb080dbda46150c10ad Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 2 Oct 2023 16:50:19 +0200 Subject: [PATCH 155/239] feat: Node compatible ESM build (#756) --- .../electron-react-boilerplate/package.json | 4 +- package.json | 24 +++--- rollup.config.js | 77 +++++++++++++++++++ scripts/build-preload.js | 45 ----------- src/main/electron-normalize.ts | 16 ++-- src/main/fs.ts | 5 +- src/main/integrations/preload-injection.ts | 33 +++++--- src/preload/index.ts | 2 - src/preload/legacy.ts | 2 - tsconfig.build.json | 20 ++--- tsconfig.esm.json | 8 -- tsconfig.json | 12 +-- tsconfig.preload.json | 9 +++ tsconfig.test.json | 9 +++ yarn.lock | 73 ++++++++++++++++++ 15 files changed, 226 insertions(+), 113 deletions(-) create mode 100644 rollup.config.js delete mode 100644 scripts/build-preload.js delete mode 100644 tsconfig.esm.json create mode 100644 tsconfig.preload.json create mode 100644 tsconfig.test.json diff --git a/examples/electron-react-boilerplate/package.json b/examples/electron-react-boilerplate/package.json index c6d46bee..b94bd1ce 100644 --- a/examples/electron-react-boilerplate/package.json +++ b/examples/electron-react-boilerplate/package.json @@ -2,8 +2,8 @@ "name": "electron-react-boilerplate", "scripts": { "build": "concurrently \"npm run build:main\" \"npm run build:renderer\"", - "build:main": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.main.prod.ts", - "build:renderer": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.prod.ts" + "build:main": "cross-env NODE_ENV=production TS_NODE_PROJECT=tsconfig.json TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.main.prod.ts", + "build:renderer": "cross-env NODE_ENV=production TS_NODE_PROJECT=tsconfig.json TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.prod.ts" }, "devDependencies": { "@pmmmwh/react-refresh-webpack-plugin": "0.5.4", diff --git a/package.json b/package.json index e7a36d0b..dbcd87cb 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,10 @@ "require": "./renderer/index.js", "import": "./esm/renderer/index.js" }, - "./preload": "./preload/index.js" + "./preload": { + "require": "./preload/index.js", + "import": "./esm/preload/index.js" + } }, "repository": "https://github.com/getsentry/sentry-electron.git", "author": "Sentry", @@ -35,27 +38,21 @@ }, "scripts": { "prebuild": "yarn clean && node scripts/update-version.js", - "build": "run-p build:es6 build:esm build:preload", - "build:es6": "tsc -p tsconfig.build.json", - "build:esm": "tsc -p tsconfig.esm.json", - "build:preload": "node scripts/build-preload.js", - "build:watch": "run-p build:watch:es6 build:watch:esm", - "build:watch:es6": "tsc -p tsconfig.build.json -w --preserveWatchOutput", - "build:watch:esm": "tsc -p tsconfig.esm.json -w --preserveWatchOutput", + "build": "rollup --config rollup.config.js", "clean": "rimraf coverage esm main preload renderer index.* integrations.* ipc.* sentry-electron*.tgz", "prelint": "node scripts/update-version.js", - "update-electron-versions": "electron-latest-versions --start 2 > ./test/e2e/versions.json", - "update-sdk-versions": "node ./scripts/update-sdk-versions.mjs", "lint": "run-s lint:prettier lint:eslint", "lint:prettier": "prettier --check \"{src,test}/**/*.ts\"", "lint:eslint": "eslint . --cache --format stylish", "fix": "run-s fix:eslint fix:prettier", "fix:prettier": "prettier --write \"{src,test}/**/*.ts\"", "fix:eslint": "eslint . --format stylish --fix", + "update-electron-versions": "electron-latest-versions --start 2 > ./test/e2e/versions.json", + "update-sdk-versions": "node ./scripts/update-sdk-versions.mjs", "pretest": "yarn build", - "test": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe electron-mocha --require ts-node/register/transpile-only --timeout 120000 ./test/unit/**/*.ts", + "test": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe electron-mocha --require ts-node/register/transpile-only --timeout 120000 ./test/unit/**/*.ts", "pree2e": "rimraf test/e2e/dist/**/node_modules/@sentry/** test/e2e/dist/**/yarn.lock test/e2e/dist/**/package-lock.json && node scripts/clean-cache.js && yarn build && npm pack", - "e2e": "cross-env TS_NODE_PROJECT=tsconfig.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" + "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { "@sentry/browser": "7.68.0", @@ -68,6 +65,8 @@ "tslib": "^2.5.0" }, "devDependencies": { + "@rollup/plugin-node-resolve": "^15.2.1", + "@rollup/plugin-typescript": "^11.1.4", "@sentry-internal/eslint-config-sdk": "7.68.0", "@sentry-internal/typescript": "7.68.0", "@types/busboy": "^0.2.3", @@ -97,6 +96,7 @@ "npm-run-all": "^4.1.5", "prettier": "^2.8.4", "rimraf": "^3.0.2", + "rollup": "^3.29.4", "tmp": "^0.2.1", "ts-node": "^10.9.1", "typescript": "^4.9.5", diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 00000000..89734665 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,77 @@ +const { builtinModules } = require('module'); +const { resolve } = require('path'); + +const typescript = require('@rollup/plugin-typescript'); + +const dependencies = Object.keys(require(resolve(process.cwd(), 'package.json')).dependencies || {}); +const external = [...builtinModules, 'electron', ...dependencies]; + +const outputOptions = { + sourcemap: true, + strict: false, + freeze: false, + externalLiveBindings: false, + generatedCode: { + preset: 'es2015', + symbols: false, + }, +}; + +// a simple plugin that adds a package.json file with type: module +const modulePackageJson = { + name: 'package-json-module-type', + generateBundle(_, __) { + this.emitFile({ + type: 'asset', + fileName: 'package.json', + source: '{"type": "module"}', + }); + }, +}; + +function transpileFiles(format, input, outDir) { + return { + input, + output: { + ...outputOptions, + format, + dir: outDir, + preserveModules: true, + }, + treeshake: { moduleSideEffects: false }, + plugins: [ + typescript({ + outDir, + tsconfig: './tsconfig.build.json', + }), + format === 'esm' ? modulePackageJson : {}, + ], + external, + }; +} + +function bundlePreload(format, input, output) { + return { + input, + output: { + ...outputOptions, + format, + file: output, + }, + plugins: [ + typescript({ + tsconfig: './tsconfig.preload.json', + }), + ], + external, + }; +} + +module.exports = [ + transpileFiles('cjs', ['src/index.ts', 'src/main/index.ts', 'src/renderer/index.ts'], '.'), + transpileFiles('esm', ['src/index.ts', 'src/main/index.ts', 'src/renderer/index.ts'], './esm'), + bundlePreload('cjs', 'src/preload/index.ts', './preload/index.js'), + bundlePreload('cjs', 'src/preload/legacy.ts', './preload/legacy.js'), + bundlePreload('esm', 'src/preload/index.ts', './esm/preload/index.js'), + bundlePreload('esm', 'src/preload/legacy.ts', './esm/preload/legacy.js'), +]; diff --git a/scripts/build-preload.js b/scripts/build-preload.js deleted file mode 100644 index e13b0b34..00000000 --- a/scripts/build-preload.js +++ /dev/null @@ -1,45 +0,0 @@ -const { readFileSync, writeFileSync, mkdirSync } = require('fs'); -const { join, dirname } = require('path'); -const ts = require('typescript'); - -function readFile(path) { - return readFileSync(join(__dirname, path), { encoding: 'utf8' }); -} - -function ensureOnlyRequiresElectron(code) { - const result = code.match(/require\("(\S+?)"\)/g); - if (result) { - if (!result.every((r) => r === 'require("electron")')) { - throw new Error('Bundling error. The preload script should only require electron!'); - } - } -} - -const ipcModule = readFile('../src/common/ipc.ts').replace(/export/g, ''); - -function transpileFile(input, output, esm) { - const module = esm ? ts.ModuleKind.ES2020 : ts.ModuleKind.CommonJS; - - // Because we're not using a proper bundler, we need to replace the import for ipc with inlined code - const file = readFile(input).replace("import { IPCChannel } from '../common/ipc'", ipcModule); - const code = ts.transpile(file, { removeComments: true, module }); - - if (!esm) { - ensureOnlyRequiresElectron(code); - } - - const outPath = join(__dirname, output); - try { - mkdirSync(dirname(outPath), { recursive: true }); - } catch (_) {} - writeFileSync(outPath, code); -} - -// Output to ./preload so '@sentry/electron/preload' can be resolved -transpileFile('../src/preload/index.ts', '../preload/index.js', false); -transpileFile('../src/preload/legacy.ts', '../preload/legacy.js', false); - -// The ESM output will never get used, but they need to be there for when webpack tries to -// find them due to `require.resolve('../../preload/index.js')` from esm/main code -transpileFile('../src/preload/index.ts', '../esm/preload/index.js', true); -transpileFile('../src/preload/legacy.ts', '../esm/preload/legacy.js', true); diff --git a/src/main/electron-normalize.ts b/src/main/electron-normalize.ts index e4f698c7..8917e1be 100644 --- a/src/main/electron-normalize.ts +++ b/src/main/electron-normalize.ts @@ -20,13 +20,17 @@ export const isPackaged = (() => { /** A promise that is resolved when the app is ready */ export const whenAppReady: Promise<void> = (() => { - return app.isReady() - ? Promise.resolve() - : new Promise<void>((resolve) => { - app.once('ready', () => { - resolve(); + if (app) { + return app.isReady() + ? Promise.resolve() + : new Promise<void>((resolve) => { + app.once('ready', () => { + resolve(); + }); }); - }); + } else { + return Promise.resolve(); + } })(); /** diff --git a/src/main/fs.ts b/src/main/fs.ts index d174effc..29d01507 100644 --- a/src/main/fs.ts +++ b/src/main/fs.ts @@ -1,9 +1,9 @@ import { app } from 'electron'; -import { mkdir, readdir, readFile, rename, stat, statSync, unlink, writeFile } from 'fs'; +import { mkdir, readdir, readFile, stat, statSync, unlink, writeFile } from 'fs'; import { dirname, join, resolve } from 'path'; import { promisify } from 'util'; -export const sentryCachePath = join(app.getPath('userData'), 'sentry'); +export const sentryCachePath = join(app ? app.getPath('userData') : '', 'sentry'); export const writeFileAsync = promisify(writeFile); export const readFileAsync = promisify(readFile); @@ -11,7 +11,6 @@ export const mkdirAsync = promisify(mkdir); export const statAsync = promisify(stat); export const unlinkAsync = promisify(unlink); export const readDirAsync = promisify(readdir); -export const renameAsync = promisify(rename); // mkdir with recursive was only added in Node 10+ diff --git a/src/main/integrations/preload-injection.ts b/src/main/integrations/preload-injection.ts index 99460f55..7fc04a9e 100644 --- a/src/main/integrations/preload-injection.ts +++ b/src/main/integrations/preload-injection.ts @@ -4,12 +4,34 @@ import { Integration } from '@sentry/types'; import { logger } from '@sentry/utils'; import { app } from 'electron'; import { existsSync } from 'fs'; -import { isAbsolute } from 'path'; +import { isAbsolute, resolve } from 'path'; +import { fileURLToPath } from 'url'; import { IPCMode } from '../../common'; import { rendererRequiresCrashReporterStart } from '../electron-normalize'; import { ElectronMainOptionsInternal } from '../sdk'; +// After bundling with webpack, require.resolve can return number so we include that in the types +// to ensure we check for that! +function getPreloadPath(): string | number | undefined { + try { + return rendererRequiresCrashReporterStart() + ? require.resolve('../../preload/legacy.js') + : require.resolve('../../preload/index.js'); + } catch (_) { + try { + // This could be ESM + const currentDir = fileURLToPath(import.meta.url); + // Use the CJS preload + return resolve(currentDir, '..', '..', '..', '..', 'preload', 'index.js'); + } catch (_) { + // + } + } + + return undefined; +} + /** * Injects the preload script into the provided sessions. * @@ -45,14 +67,7 @@ export class PreloadInjection implements Integration { * Attempts to add the preload script the the provided sessions */ private _addPreloadToSessions(options: ElectronMainOptionsInternal): void { - let path = undefined; - try { - path = rendererRequiresCrashReporterStart() - ? require.resolve('../../preload/legacy.js') - : require.resolve('../../preload/index.js'); - } catch (_) { - // - } + const path = getPreloadPath(); if (path && typeof path === 'string' && isAbsolute(path) && existsSync(path)) { for (const sesh of options.getSessions()) { diff --git a/src/preload/index.ts b/src/preload/index.ts index e7cb8617..99391f04 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -1,7 +1,5 @@ /** * This preload script may be used with sandbox mode enabled which means regular require is not available. - * - * npm script `build:preload` calls `node ./scripts/build-preload.js` which inlines ipc and transpiles to JavaScript */ import { contextBridge, ipcRenderer } from 'electron'; diff --git a/src/preload/legacy.ts b/src/preload/legacy.ts index 38ea7b31..e9d367b0 100644 --- a/src/preload/legacy.ts +++ b/src/preload/legacy.ts @@ -1,7 +1,5 @@ /** * This preload script may be used with sandbox mode enabled which means regular require is not available. - * - * npm script `build:preload` calls `node ./scripts/build-preload.js` which inlines ipc and transpiles to JavaScript */ import { contextBridge, crashReporter, ipcRenderer } from 'electron'; diff --git a/tsconfig.build.json b/tsconfig.build.json index e5d3482a..71c012f2 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -1,23 +1,15 @@ { "extends": "./node_modules/@sentry-internal/typescript/tsconfig.json", - "include": [ - "src/**/*.ts" - ], - "exclude": [ - "node_modules", - "src/preload/*.ts" - ], + "include": ["src/**/*.ts"], + "exclude": ["node_modules", "src/preload/**/*.ts"], "compilerOptions": { "skipLibCheck": true, "baseUrl": ".", - "lib": [ - "es7", - "dom" - ], - "module": "commonjs", + "lib": ["ES7", "DOM"], + "module": "ESNext", "outDir": ".", "rootDir": "src", - "target": "es6", - "esModuleInterop": true, + "target": "ES6", + "esModuleInterop": true } } diff --git a/tsconfig.esm.json b/tsconfig.esm.json deleted file mode 100644 index b4713d16..00000000 --- a/tsconfig.esm.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.build.json", - "compilerOptions": { - "outDir": "esm", - "module": "es6", - "esModuleInterop": true, - } -} diff --git a/tsconfig.json b/tsconfig.json index 4c6c154d..fe78169b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,5 @@ { "extends": "./tsconfig.build.json", - "include": [ - "src/**/*.ts", - "test/**/*.ts" - ], - "exclude": [ - "dist" - ], - "compilerOptions": { - "rootDir": ".", - } + "include": ["src/**/*.ts", "test/**/*.ts"], + "exclude": ["node_modules"] } diff --git a/tsconfig.preload.json b/tsconfig.preload.json new file mode 100644 index 00000000..067a5bbd --- /dev/null +++ b/tsconfig.preload.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.build.json", + "include": ["src/preload/**/*.ts"], + "exclude": ["node_modules"], + "compilerOptions": { + "declaration": false, + "declarationMap": false + } +} diff --git a/tsconfig.test.json b/tsconfig.test.json new file mode 100644 index 00000000..b3f843b4 --- /dev/null +++ b/tsconfig.test.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.build.json", + "include": ["src/**/*.ts", "test/**/*.ts"], + "exclude": ["node_modules"], + "compilerOptions": { + "module": "CommonJS", + "rootDir": "." + } +} diff --git a/yarn.lock b/yarn.lock index f882142a..e5cf4dd9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -135,6 +135,35 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" +"@rollup/plugin-node-resolve@^15.2.1": + version "15.2.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.1.tgz#a15b14fb7969229e26a30feff2816d39eff503f0" + integrity sha512-nsbUg588+GDSu8/NS8T4UAshO6xeaOfINNuXeVHcKV02LJtoRaM1SiOacClw4kws1SFiNhdLGxlbMY9ga/zs/w== + dependencies: + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" + deepmerge "^4.2.2" + is-builtin-module "^3.2.1" + is-module "^1.0.0" + resolve "^1.22.1" + +"@rollup/plugin-typescript@^11.1.4": + version "11.1.4" + resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-11.1.4.tgz#cecb82180563e143481d979e5191953cbd0ee4c9" + integrity sha512-WZRh5LBVLQXdKFICUId5J3eIpmjGURaBqntfg3GSZACgeOAFS+lOSMGTwfzDkELTaZVp/lWdMVNU3UkwCUBg/Q== + dependencies: + "@rollup/pluginutils" "^5.0.1" + resolve "^1.22.1" + +"@rollup/pluginutils@^5.0.1": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.4.tgz#74f808f9053d33bafec0cc98e7b835c9667d32ba" + integrity sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + "@sentry-internal/eslint-config-sdk@7.68.0": version "7.68.0" resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.68.0.tgz#6154af30c5b1125419fb3192c97d96a8ddb98310" @@ -347,6 +376,11 @@ "@types/keygrip" "*" "@types/node" "*" +"@types/estree@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.2.tgz#ff02bc3dc8317cd668dfec247b750ba1f1d62453" + integrity sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA== + "@types/express-serve-static-core@^4.17.33": version "4.17.33" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" @@ -468,6 +502,11 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== + "@types/responselike@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" @@ -856,6 +895,11 @@ buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + busboy@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" @@ -1201,6 +1245,11 @@ deepmerge@4.3.0: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" @@ -1646,6 +1695,11 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2203,6 +2257,13 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" + is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" @@ -2251,6 +2312,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" @@ -3168,6 +3234,13 @@ roarr@^2.15.3: semver-compare "^1.0.0" sprintf-js "^1.1.2" +rollup@^3.29.4: + version "3.29.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" + integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== + optionalDependencies: + fsevents "~2.3.2" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" From a6bf684d079e2db616eec6e6d2c8c06c6613a6f4 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 2 Oct 2023 18:27:11 +0200 Subject: [PATCH 156/239] feat: Identify `webContents` of renderers via custom protocol (#762) --- src/common/ipc.ts | 6 +- src/main/electron-normalize.ts | 4 + src/main/ipc.ts | 63 ++++++++++- src/preload/index.ts | 1 + src/preload/legacy.ts | 1 + src/renderer/ipc.ts | 71 +++++++----- .../custom-renderer-name-protocol/event.json | 106 ++++++++++++++++++ .../package.json | 8 ++ .../custom-renderer-name-protocol/recipe.yml | 3 + .../src/index.html | 19 ++++ .../custom-renderer-name-protocol/src/main.js | 27 +++++ 11 files changed, 273 insertions(+), 36 deletions(-) create mode 100644 test/e2e/test-apps/other/custom-renderer-name-protocol/event.json create mode 100644 test/e2e/test-apps/other/custom-renderer-name-protocol/package.json create mode 100644 test/e2e/test-apps/other/custom-renderer-name-protocol/recipe.yml create mode 100644 test/e2e/test-apps/other/custom-renderer-name-protocol/src/index.html create mode 100644 test/e2e/test-apps/other/custom-renderer-name-protocol/src/main.js diff --git a/src/common/ipc.ts b/src/common/ipc.ts index 0203d5e2..80934a0e 100644 --- a/src/common/ipc.ts +++ b/src/common/ipc.ts @@ -2,7 +2,7 @@ export const PROTOCOL_SCHEME = 'sentry-ipc'; export enum IPCChannel { /** IPC to check main process is listening */ - PING = 'sentry-electron.ping', + RENDERER_START = 'sentry-electron.renderer-start', /** IPC to send a captured event to Sentry. */ EVENT = 'sentry-electron.event', /** IPC to pass scope changes to main process. */ @@ -12,11 +12,14 @@ export enum IPCChannel { } export interface IPCInterface { + sendRendererStart: () => void; sendScope: (scope: string) => void; sendEvent: (event: string) => void; sendEnvelope: (evn: Uint8Array | string) => void; } +export const RENDERER_ID_HEADER = 'sentry-electron-renderer-id'; + /** * We store the IPC interface on window so it's the same for both regular and isolated contexts */ @@ -24,5 +27,6 @@ declare global { interface Window { __SENTRY_IPC__?: IPCInterface; __SENTRY__RENDERER_INIT__?: boolean; + __SENTRY_RENDERER_ID__?: string; } } diff --git a/src/main/electron-normalize.ts b/src/main/electron-normalize.ts index 8917e1be..96866665 100644 --- a/src/main/electron-normalize.ts +++ b/src/main/electron-normalize.ts @@ -2,6 +2,7 @@ import { parseSemver } from '@sentry/utils'; import { app, BrowserWindow, crashReporter, NativeImage, WebContents } from 'electron'; import { basename } from 'path'; +import { RENDERER_ID_HEADER } from '../common/ipc'; import { Optional } from '../common/types'; const parsed = parseSemver(process.versions.electron); @@ -219,6 +220,7 @@ function supportsProtocolHandle(): boolean { } interface InternalRequest { + windowId?: string; url: string; body?: Buffer; } @@ -236,6 +238,7 @@ export function registerProtocol( if (supportsProtocolHandle()) { protocol.handle(scheme, async (request) => { callback({ + windowId: request.headers.get(RENDERER_ID_HEADER) || undefined, url: request.url, body: Buffer.from(await request.arrayBuffer()), }); @@ -246,6 +249,7 @@ export function registerProtocol( // eslint-disable-next-line deprecation/deprecation protocol.registerStringProtocol(scheme, (request, complete) => { callback({ + windowId: request.headers[RENDERER_ID_HEADER], url: request.url, body: request.uploadData?.[0]?.bytes, }); diff --git a/src/main/ipc.ts b/src/main/ipc.ts index b80f9adb..cc8abda1 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -1,13 +1,46 @@ import { captureEvent, configureScope, getCurrentHub, Scope } from '@sentry/core'; import { Attachment, AttachmentItem, Envelope, Event, EventItem } from '@sentry/types'; import { forEachEnvelopeItem, logger, parseEnvelope, SentryError } from '@sentry/utils'; -import { app, ipcMain, protocol, WebContents } from 'electron'; +import { app, ipcMain, protocol, WebContents, webContents } from 'electron'; import { TextDecoder, TextEncoder } from 'util'; import { IPCChannel, IPCMode, mergeEvents, normalizeUrlsInReplayEnvelope, PROTOCOL_SCHEME } from '../common'; import { registerProtocol, supportsFullProtocol, whenAppReady } from './electron-normalize'; import { ElectronMainOptionsInternal } from './sdk'; +let KNOWN_RENDERERS: Set<number> | undefined; +let WINDOW_ID_TO_WEB_CONTENTS: Map<string, number> | undefined; + +async function newProtocolRenderer(): Promise<void> { + KNOWN_RENDERERS = KNOWN_RENDERERS || new Set(); + WINDOW_ID_TO_WEB_CONTENTS = WINDOW_ID_TO_WEB_CONTENTS || new Map(); + + for (const wc of webContents.getAllWebContents()) { + const wcId = wc.id; + if (KNOWN_RENDERERS.has(wcId)) { + continue; + } + + if (!wc.isDestroyed()) { + try { + const windowId: string | undefined = await wc.executeJavaScript('window.__SENTRY_RENDERER_ID__'); + + if (windowId) { + KNOWN_RENDERERS.add(wcId); + WINDOW_ID_TO_WEB_CONTENTS.set(windowId, wcId); + + wc.once('destroyed', () => { + KNOWN_RENDERERS?.delete(wcId); + WINDOW_ID_TO_WEB_CONTENTS?.delete(windowId); + }); + } + } catch (_) { + // ignore + } + } + } +} + function captureEventFromRenderer( options: ElectronMainOptionsInternal, event: Event, @@ -139,14 +172,20 @@ function configureProtocol(options: ElectronMainOptionsInternal): void { .then(() => { for (const sesh of options.getSessions()) { registerProtocol(sesh.protocol, PROTOCOL_SCHEME, (request) => { - const data = request.body; + const getWebContents = (): WebContents | undefined => { + const webContentsId = request.windowId ? WINDOW_ID_TO_WEB_CONTENTS?.get(request.windowId) : undefined; + return webContentsId ? webContents.fromId(webContentsId) : undefined; + }; - if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}`) && data) { - handleEvent(options, data.toString()); + const data = request.body; + if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.RENDERER_START}`)) { + void newProtocolRenderer(); + } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}`) && data) { + handleEvent(options, data.toString(), getWebContents()); } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.SCOPE}`) && data) { handleScope(options, data.toString()); } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.ENVELOPE}`) && data) { - handleEnvelope(options, data); + handleEnvelope(options, data, getWebContents()); } }); } @@ -158,6 +197,20 @@ function configureProtocol(options: ElectronMainOptionsInternal): void { * Hooks IPC for communication with the renderer processes */ function configureClassic(options: ElectronMainOptionsInternal): void { + ipcMain.on(IPCChannel.RENDERER_START, ({ sender }) => { + const id = sender.id; + + // In older Electron, sender can be destroyed before this callback is called + if (!sender.isDestroyed()) { + // Keep track of renderers that are using IPC + KNOWN_RENDERERS = KNOWN_RENDERERS || new Set(); + KNOWN_RENDERERS.add(id); + + sender.once('destroyed', () => { + KNOWN_RENDERERS?.delete(id); + }); + } + }); ipcMain.on(IPCChannel.EVENT, ({ sender }, jsonEvent: string) => handleEvent(options, jsonEvent, sender)); ipcMain.on(IPCChannel.SCOPE, (_, jsonScope: string) => handleScope(options, jsonScope)); ipcMain.on(IPCChannel.ENVELOPE, ({ sender }, env: Uint8Array | string) => handleEnvelope(options, env, sender)); diff --git a/src/preload/index.ts b/src/preload/index.ts index 99391f04..87c80cb7 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -12,6 +12,7 @@ if (window.__SENTRY_IPC__) { console.log('Sentry Electron preload has already been run'); } else { const ipcObject = { + sendRendererStart: () => ipcRenderer.send(IPCChannel.RENDERER_START), sendScope: (scopeJson: string) => ipcRenderer.send(IPCChannel.SCOPE, scopeJson), sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson), sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope), diff --git a/src/preload/legacy.ts b/src/preload/legacy.ts index e9d367b0..4fa233b7 100644 --- a/src/preload/legacy.ts +++ b/src/preload/legacy.ts @@ -23,6 +23,7 @@ if (window.__SENTRY_IPC__) { }); const ipcObject = { + sendRendererStart: () => ipcRenderer.send(IPCChannel.RENDERER_START), sendScope: (scopeJson: string) => ipcRenderer.send(IPCChannel.SCOPE, scopeJson), sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson), sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope), diff --git a/src/renderer/ipc.ts b/src/renderer/ipc.ts index 1de7d225..f018a8dd 100644 --- a/src/renderer/ipc.ts +++ b/src/renderer/ipc.ts @@ -1,44 +1,54 @@ /* eslint-disable no-restricted-globals */ /* eslint-disable no-console */ -import { logger } from '@sentry/utils'; +import { logger, uuid4 } from '@sentry/utils'; -import { IPCChannel, IPCInterface, PROTOCOL_SCHEME } from '../common'; +import { IPCChannel, IPCInterface, PROTOCOL_SCHEME, RENDERER_ID_HEADER } from '../common/ipc'; + +function buildUrl(channel: IPCChannel): string { + // We include sentry_key in the URL so these don't end up in fetch breadcrumbs + // https://github.com/getsentry/sentry-javascript/blob/a3f70d8869121183bec037571a3ee78efaf26b0b/packages/browser/src/integrations/breadcrumbs.ts#L240 + return `${PROTOCOL_SCHEME}://${channel}/sentry_key`; +} /** Gets the available IPC implementation */ function getImplementation(): IPCInterface { // Favour IPC if it's been exposed by a preload script if (window.__SENTRY_IPC__) { return window.__SENTRY_IPC__; - } + } else { + logger.log('IPC was not configured in preload script, falling back to custom protocol and fetch'); - logger.log('IPC was not configured in preload script, falling back to custom protocol and fetch'); + // A unique ID used to identify this renderer and is send in the headers of every request + // Because it added as a global, this can be fetched from the main process via executeJavaScript + const id = (window.__SENTRY_RENDERER_ID__ = uuid4()); + const headers: Record<string, string> = { [RENDERER_ID_HEADER]: id }; - fetch(`${PROTOCOL_SCHEME}://${IPCChannel.PING}/sentry_key`, { method: 'POST', body: '' }).catch(() => - console.error(`Sentry SDK failed to establish connection with the Electron main process. - - Ensure you have initialized the SDK in the main process - - If your renderers use custom sessions, be sure to set 'getSessions' in the main process options - - If you are bundling your main process code and using Electron < v5, you'll need to manually configure a preload script`), - ); - - // We include sentry_key in the URL so these dont end up in fetch breadcrumbs - // https://github.com/getsentry/sentry-javascript/blob/a3f70d8869121183bec037571a3ee78efaf26b0b/packages/browser/src/integrations/breadcrumbs.ts#L240 - return { - sendScope: (body) => { - fetch(`${PROTOCOL_SCHEME}://${IPCChannel.SCOPE}/sentry_key`, { method: 'POST', body }).catch(() => { - // ignore - }); - }, - sendEvent: (body) => { - fetch(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}/sentry_key`, { method: 'POST', body }).catch(() => { - // ignore - }); - }, - sendEnvelope: (body) => { - fetch(`${PROTOCOL_SCHEME}://${IPCChannel.ENVELOPE}/sentry_key`, { method: 'POST', body }).catch(() => { - // ignore - }); - }, - }; + return { + sendRendererStart: () => { + fetch(buildUrl(IPCChannel.RENDERER_START), { method: 'POST', body: '', headers }).catch(() => { + console.error(`Sentry SDK failed to establish connection with the Electron main process. + - Ensure you have initialized the SDK in the main process + - If your renderers use custom sessions, be sure to set 'getSessions' in the main process options + - If you are bundling your main process code and using Electron < v5, you'll need to manually configure a preload script`); + }); + }, + sendScope: (body: string) => { + fetch(buildUrl(IPCChannel.SCOPE), { method: 'POST', body, headers }).catch(() => { + // ignore + }); + }, + sendEvent: (body: string) => { + fetch(buildUrl(IPCChannel.EVENT), { method: 'POST', body, headers }).catch(() => { + // ignore + }); + }, + sendEnvelope: (body: string | Uint8Array) => { + fetch(buildUrl(IPCChannel.ENVELOPE), { method: 'POST', body, headers }).catch(() => { + // ignore + }); + }, + }; + } } let cachedInterface: IPCInterface | undefined; @@ -52,6 +62,7 @@ let cachedInterface: IPCInterface | undefined; export function getIPC(): IPCInterface { if (!cachedInterface) { cachedInterface = getImplementation(); + cachedInterface.sendRendererStart(); } return cachedInterface; diff --git a/test/e2e/test-apps/other/custom-renderer-name-protocol/event.json b/test/e2e/test-apps/other/custom-renderer-name-protocol/event.json new file mode 100644 index 00000000..95dbe935 --- /dev/null +++ b/test/e2e/test-apps/other/custom-renderer-name-protocol/event.json @@ -0,0 +1,106 @@ +{ + "method": "envelope", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "appId": "277345", + "data": { + "sdk": { + "name": "sentry.javascript.electron", + "packages": [ + { + "name": "npm:@sentry/electron", + "version": "{{version}}" + } + ], + "version": "{{version}}" + }, + "contexts": { + "app": { + "app_name": "custom-renderer-name-protocol", + "app_version": "1.0.0", + "app_start_time": "{{time}}" + }, + "browser": { + "name": "Chrome" + }, + "chrome": { + "name": "Chrome", + "type": "runtime", + "version": "{{version}}" + }, + "device": { + "arch": "{{arch}}", + "family": "Desktop", + "memory_size": 0, + "free_memory": 0, + "processor_count": 0, + "processor_frequency": 0, + "cpu_description": "{{cpu}}", + "screen_resolution":"{{screen}}", + "screen_density": 1, + "language": "{{language}}" + }, + "node": { + "name": "Node", + "type": "runtime", + "version": "{{version}}" + }, + "os": { + "name": "{{platform}}", + "version": "{{version}}" + }, + "runtime": { + "name": "Electron", + "version": "{{version}}" + } + }, + "release": "custom-renderer-name-protocol@1.0.0", + "environment": "development", + "user": { + "ip_address": "{{auto}}" + }, + "exception": { + "values": [ + { + "type": "Error", + "value": "Some renderer error", + "stacktrace": { + "frames": [ + { + "colno": 0, + "filename": "app:///src/index.html", + "function": "{{function}}", + "in_app": true, + "lineno": 0 + } + ] + }, + "mechanism": { + "handled": false, + "type": "instrument" + } + } + ] + }, + "level": "error", + "event_id": "{{id}}", + "platform": "javascript", + "timestamp": 0, + "breadcrumbs": [ + { + "timestamp": 0, + "category": "electron", + "message": "SomeWindow.dom-ready", + "type": "ui" + } + ], + "request": { + "url": "app:///src/index.html" + }, + "tags": { + "event.environment": "javascript", + "event.origin": "electron", + "event.process": "SomeWindow", + "event_type": "javascript" + } + } +} diff --git a/test/e2e/test-apps/other/custom-renderer-name-protocol/package.json b/test/e2e/test-apps/other/custom-renderer-name-protocol/package.json new file mode 100644 index 00000000..d11ae966 --- /dev/null +++ b/test/e2e/test-apps/other/custom-renderer-name-protocol/package.json @@ -0,0 +1,8 @@ +{ + "name": "custom-renderer-name-protocol", + "version": "1.0.0", + "main": "src/main.js", + "dependencies": { + "@sentry/electron": "3.0.0" + } +} diff --git a/test/e2e/test-apps/other/custom-renderer-name-protocol/recipe.yml b/test/e2e/test-apps/other/custom-renderer-name-protocol/recipe.yml new file mode 100644 index 00000000..1cdc0b03 --- /dev/null +++ b/test/e2e/test-apps/other/custom-renderer-name-protocol/recipe.yml @@ -0,0 +1,3 @@ +description: Custom Renderer Name via Protocol +command: yarn +condition: version.major >= 5 diff --git a/test/e2e/test-apps/other/custom-renderer-name-protocol/src/index.html b/test/e2e/test-apps/other/custom-renderer-name-protocol/src/index.html new file mode 100644 index 00000000..dd1d6fc5 --- /dev/null +++ b/test/e2e/test-apps/other/custom-renderer-name-protocol/src/index.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + </head> + <body> + <script> + const { init } = require('@sentry/electron'); + + init({ + debug: true, + }); + + setTimeout(() => { + throw new Error('Some renderer error'); + }, 500); + </script> + </body> +</html> \ No newline at end of file diff --git a/test/e2e/test-apps/other/custom-renderer-name-protocol/src/main.js b/test/e2e/test-apps/other/custom-renderer-name-protocol/src/main.js new file mode 100644 index 00000000..27cb3111 --- /dev/null +++ b/test/e2e/test-apps/other/custom-renderer-name-protocol/src/main.js @@ -0,0 +1,27 @@ +const path = require('path'); + +const { app, BrowserWindow } = require('electron'); +const { init, IPCMode } = require('@sentry/electron'); + +init({ + dsn: '__DSN__', + debug: true, + autoSessionTracking: false, + ipcMode: IPCMode.Protocol, + onFatalError: () => {}, + getRendererName(_) { + return 'SomeWindow'; + }, +}); + +app.on('ready', () => { + const mainWindow = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + }, + }); + + mainWindow.loadFile(path.join(__dirname, 'index.html')); +}); From 7cf7b47f8bc145f8c3b54b6f03eef6786c551f2b Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 2 Oct 2023 18:57:38 +0200 Subject: [PATCH 157/239] fix: Re-work Sentry minidump loader (#761) --- package.json | 2 +- .../integrations/sentry-minidump/index.ts | 110 ++++------- .../sentry-minidump/minidump-loader.ts | 176 ++++++++++-------- test/e2e/context.ts | 2 +- .../other/main-process-module/event.json | 39 +--- .../other/main-process-module/src/main.js | 2 +- .../src/main.js | 2 +- .../sessions/abnormal-exit/src/main.js | 2 +- .../src/main.js | 2 +- .../src/main.js | 2 +- .../native-crash-renderer/session-next.json | 17 ++ .../native-crash-renderer/src/main.js | 2 +- test/unit/minidump-loader.test.ts | 151 +++++++++++++++ 13 files changed, 314 insertions(+), 195 deletions(-) create mode 100644 test/e2e/test-apps/sessions/native-crash-renderer/session-next.json create mode 100644 test/unit/minidump-loader.test.ts diff --git a/package.json b/package.json index dbcd87cb..2b8f8619 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "update-electron-versions": "electron-latest-versions --start 2 > ./test/e2e/versions.json", "update-sdk-versions": "node ./scripts/update-sdk-versions.mjs", "pretest": "yarn build", - "test": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe electron-mocha --require ts-node/register/transpile-only --timeout 120000 ./test/unit/**/*.ts", + "test": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe electron-mocha --require ts-node/register/transpile-only --timeout 12000 ./test/unit/**/*.ts", "pree2e": "rimraf test/e2e/dist/**/node_modules/@sentry/** test/e2e/dist/**/yarn.lock test/e2e/dist/**/package-lock.json && node scripts/clean-cache.js && yarn build && npm pack", "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts index efe1723b..a285460b 100644 --- a/src/main/integrations/sentry-minidump/index.ts +++ b/src/main/integrations/sentry-minidump/index.ts @@ -1,7 +1,7 @@ import { captureEvent, getCurrentHub, Scope } from '@sentry/core'; import { NodeClient } from '@sentry/node'; import { Event, Integration } from '@sentry/types'; -import { basename, logger, SentryError } from '@sentry/utils'; +import { logger, SentryError } from '@sentry/utils'; import { app, crashReporter } from 'electron'; import { mergeEvents } from '../../../common'; @@ -12,7 +12,7 @@ import { getRendererProperties, trackRendererProperties } from '../../renderers' import { ElectronMainOptions } from '../../sdk'; import { checkPreviousSession, sessionCrashed } from '../../sessions'; import { BufferedWriteStore } from '../../store'; -import { deleteMinidump, getMinidumpLoader, MinidumpLoader } from './minidump-loader'; +import { getMinidumpLoader, MinidumpLoader } from './minidump-loader'; interface PreviousRun { scope: Scope; @@ -231,79 +231,51 @@ export class SentryMinidump implements Integration { // about it. Just use the breadcrumbs and context information we have // right now and hope that the delay was not too long. - let event: Event | null = eventIn; - if (this._minidumpLoader === undefined) { throw new SentryError('Invariant violation: Native crashes not enabled'); } - try { - const minidumps = await this._minidumpLoader(); - - if (minidumps.length > 0) { - const hub = getCurrentHub(); - const client = hub.getClient(); - - if (!client) { - return true; - } - - const enabled = client.getOptions().enabled; - - // If the SDK is not enabled, we delete the minidump files so they - // don't accumulate and/or get sent later - if (enabled === false) { - minidumps.forEach(deleteMinidump); - return false; - } - - // If this is a native main process crash, we need to apply the scope and context from the previous run - if (event?.tags?.['event.process'] === 'browser') { - const previousRun = await this._scopeLastRun; - - const storedScope = Scope.clone(previousRun?.scope); - event = await storedScope.applyToEvent(event); - - if (event && previousRun) { - event.release = previousRun.event?.release || event.release; - event.environment = previousRun.event?.environment || event.environment; - event.contexts = previousRun.event?.contexts || event.contexts; - } - } - - const hubScope = hub.getScope(); - event = hubScope && event ? await hubScope.applyToEvent(event) : event; - - if (!event) { - return false; - } - - for (const minidump of minidumps) { - const data = await minidump.load(); - - if (data) { - captureEvent(event, { - attachments: [ - { - attachmentType: 'event.minidump', - filename: basename(minidump.path), - data, - }, - ], - }); - } - - void deleteMinidump(minidump); - } - - // Unset to recover memory - this._scopeLastRun = undefined; - return true; + const hub = getCurrentHub(); + const client = hub.getClient(); + + if (!client) { + return true; + } + + let event: Event | null = eventIn; + + // If this is a native main process crash, we need to apply the scope and context from the previous run + if (event.tags?.['event.process'] === 'browser') { + const previousRun = await this._scopeLastRun; + + const storedScope = Scope.clone(previousRun?.scope); + event = await storedScope.applyToEvent(event); + + if (event && previousRun) { + event.release = previousRun.event?.release || event.release; + event.environment = previousRun.event?.environment || event.environment; + event.contexts = previousRun.event?.contexts || event.contexts; } - } catch (_oO) { - logger.error('Error while sending native crash.'); } - return false; + const hubScope = hub.getScope(); + event = hubScope && event ? await hubScope.applyToEvent(event) : event; + + if (!event) { + return false; + } + + // If the SDK is not enabled, tell the loader to delete all minidumps + const deleteAll = client.getOptions().enabled === false; + + let minidumpSent = false; + await this._minidumpLoader(deleteAll, (attachment) => { + captureEvent(event as Event, { attachments: [attachment] }); + minidumpSent = true; + }); + + // Unset to recover memory + this._scopeLastRun = undefined; + return minidumpSent; } } diff --git a/src/main/integrations/sentry-minidump/minidump-loader.ts b/src/main/integrations/sentry-minidump/minidump-loader.ts index 20318b95..e46b9d80 100644 --- a/src/main/integrations/sentry-minidump/minidump-loader.ts +++ b/src/main/integrations/sentry-minidump/minidump-loader.ts @@ -1,73 +1,112 @@ -import { logger } from '@sentry/utils'; +import { Attachment } from '@sentry/types'; +import { basename, logger } from '@sentry/utils'; import { join } from 'path'; +import { Mutex } from '../../../common/mutex'; import { getCrashesDirectory, usesCrashpad } from '../../electron-normalize'; import { readDirAsync, readFileAsync, statAsync, unlinkAsync } from '../../fs'; /** Maximum number of days to keep a minidump before deleting it. */ -const MAX_AGE = 30; - -export interface MinidumpFile { - path: string; - load(): Promise<Uint8Array | undefined>; +const MAX_AGE_DAYS = 30; +const MS_PER_DAY = 24 * 3_600 * 1_000; +/** Minimum number of milliseconds a minidump should not be modified for before we assume writing is complete */ +const NOT_MODIFIED_MS = 1_000; +const MAX_RETRY_MS = 5_000; +const RETRY_DELAY_MS = 500; +const MAX_RETRIES = MAX_RETRY_MS / RETRY_DELAY_MS; + +const MINIDUMP_HEADER = 'MDMP'; + +function delay(ms: number): Promise<void> { + return new Promise((resolve) => setTimeout(resolve, ms)); } -export type MinidumpLoader = () => Promise<MinidumpFile[]>; +/** + * A function that loads minidumps + * @param deleteAll Whether to just delete all minidumps + * @param callback A callback to call with the attachment ready to send + */ +export type MinidumpLoader = (deleteAll: boolean, callback: (attachment: Attachment) => void) => Promise<void>; -async function filterAsync<T>( - array: T[], - predicate: (item: T) => Promise<boolean> | boolean, - thisArg?: any, -): Promise<T[]> { - const verdicts = await Promise.all(array.map(predicate, thisArg)); - return array.filter((_, index) => verdicts[index]); -} +/** + * Creates a minidump loader + * @param getMinidumpPaths A function that returns paths to minidumps + * @param preProcessFile A function that pre-processes the minidump file + * @returns A function to fetch minidumps + */ +export function createMinidumpLoader( + getMinidumpPaths: () => Promise<string[]>, + preProcessFile: (file: Buffer) => Buffer = (file) => file, +): MinidumpLoader { + // The mutex protects against a whole host of reentrancy issues and race conditions. + const mutex = new Mutex(); + + return async (deleteAll, callback) => { + // any calls to this function will be queued and run exclusively + await mutex.runExclusive(async () => { + for (const path of await getMinidumpPaths()) { + try { + if (deleteAll) { + continue; + } -/** Deletes a minidump */ -export async function deleteMinidump(dump: MinidumpFile): Promise<void> { - try { - await unlinkAsync(dump.path); - } catch (e) { - logger.warn('Could not delete', dump.path); - } -} + logger.log('Found minidump', path); -function createMinidumpLoader(fetchMinidumpsImpl: MinidumpLoader): MinidumpLoader { - const knownPaths: string[] = []; + let stats = await statAsync(path); - return async () => { - const minidumps = await fetchMinidumpsImpl(); - logger.log(`Found ${minidumps.length} minidumps`); + const thirtyDaysAgo = new Date().getTime() - MAX_AGE_DAYS * MS_PER_DAY; - const oldestMs = new Date().getTime() - MAX_AGE * 24 * 3_600 * 1_000; - return filterAsync(minidumps, async (dump) => { - // Skip files that we have seen before - if (knownPaths.indexOf(dump.path) >= 0) { - return false; - } + if (stats.mtimeMs < thirtyDaysAgo) { + logger.log(`Ignoring minidump as it is over ${MAX_AGE_DAYS} days old`); + continue; + } - // Lock this minidump until we have uploaded it or an error occurs and we - // remove it from the file system. - knownPaths.push(dump.path); + let retries = 0; - const stats = await statAsync(dump.path); + while (retries <= MAX_RETRIES) { + const twoSecondsAgo = new Date().getTime() - NOT_MODIFIED_MS; - // We do not want to upload minidumps that have been generated before a - // certain threshold. Those old files can be deleted immediately. - const tooOld = stats.birthtimeMs < oldestMs; - const tooSmall = stats.size < 1024; + if (stats.mtimeMs < twoSecondsAgo) { + const file = await readFileAsync(path); + const data = preProcessFile(file); - if (tooSmall) { - logger.log('Minidump too small to be valid', dump.path); - } + if (data.length < 10_000 || data.subarray(0, 4).toString() !== MINIDUMP_HEADER) { + logger.warn('Dropping minidump as it appears invalid.'); + break; + } - if (tooOld || tooSmall) { - await deleteMinidump(dump); - knownPaths.splice(knownPaths.indexOf(dump.path), 1); - return false; - } + logger.log('Sending minidump'); - return true; + callback({ + attachmentType: 'event.minidump', + filename: basename(path), + data, + }); + + break; + } + + logger.log(`Waiting. Minidump has been modified in the last ${NOT_MODIFIED_MS} milliseconds.`); + retries += 1; + await delay(RETRY_DELAY_MS); + // update the stats + stats = await statAsync(path); + } + + if (retries >= MAX_RETRIES) { + logger.warn('Timed out waiting for minidump to stop being modified'); + } + } catch (e) { + logger.error('Failed to load minidump', e); + } finally { + // We always attempt to delete the minidump + try { + await unlinkAsync(path); + } catch (e) { + logger.warn('Could not delete minidump', path); + } + } + } }); }; } @@ -119,24 +158,16 @@ function crashpadMinidumpLoader(): MinidumpLoader { return createMinidumpLoader(async () => { await deleteCrashpadMetadataFile(crashesDirectory).catch((error) => logger.error(error)); - const files = await readDirsAsync(dumpDirectories); - return files - .filter((file) => file.endsWith('.dmp')) - .map((path) => { - return { - path, - load: () => readFileAsync(path), - }; - }); + return files.filter((file) => file.endsWith('.dmp')); }); } /** Crudely parses the minidump from the Breakpad multipart file */ -function minidumpFromBreakpadMultipart(file: Buffer): Buffer | undefined { +function minidumpFromBreakpadMultipart(file: Buffer): Buffer { const binaryStart = file.lastIndexOf('Content-Type: application/octet-stream'); if (binaryStart > 0) { - const dumpStart = file.indexOf('MDMP', binaryStart); + const dumpStart = file.indexOf(MINIDUMP_HEADER, binaryStart); const dumpEnd = file.lastIndexOf('----------------------------'); if (dumpStart > 0 && dumpEnd > 0 && dumpEnd > dumpStart) { @@ -144,7 +175,7 @@ function minidumpFromBreakpadMultipart(file: Buffer): Buffer | undefined { } } - return undefined; + return file; } function removeBreakpadMetadata(crashesDirectory: string, paths: string[]): void { @@ -170,24 +201,9 @@ function breakpadMinidumpLoader(): MinidumpLoader { // Breakpad stores all minidump files along with a metadata file directly in // the crashes directory. const files = await readDirAsync(crashesDirectory); - removeBreakpadMetadata(crashesDirectory, files); - - return files - .filter((file) => file.endsWith('.dmp')) - .map((file) => { - const path = join(crashesDirectory, file); - - return { - path, - load: async () => { - const file = await readFileAsync(path); - return minidumpFromBreakpadMultipart(file) || file; - }, - }; - }) - .filter((m) => !!m); - }); + return files.filter((file) => file.endsWith('.dmp')).map((file) => join(crashesDirectory, file)); + }, minidumpFromBreakpadMultipart); } /** diff --git a/test/e2e/context.ts b/test/e2e/context.ts index 028482d2..80a7ed2c 100644 --- a/test/e2e/context.ts +++ b/test/e2e/context.ts @@ -136,7 +136,7 @@ export class TestContext { public async waitForTrue( method: () => boolean | Promise<boolean>, message: () => string = () => 'Timeout', - timeout: number = 8_000, + timeout: number = 12_000, ): Promise<void> { if (!this.mainProcess) { throw new Error('Invariant violation: Call .start() first'); diff --git a/test/e2e/test-apps/other/main-process-module/event.json b/test/e2e/test-apps/other/main-process-module/event.json index 805e3cb8..9557d8f7 100644 --- a/test/e2e/test-apps/other/main-process-module/event.json +++ b/test/e2e/test-apps/other/main-process-module/event.json @@ -95,44 +95,7 @@ "event_id": "{{id}}", "platform": "node", "timestamp": 0, - "breadcrumbs": [ - { - "timestamp": 0, - "category": "electron", - "message": "app.will-finish-launching", - "type": "ui" - }, - { - "timestamp": 0, - "category": "electron", - "message": "app.ready", - "type": "ui" - }, - { - "timestamp": 0, - "category": "electron", - "message": "app.session-created", - "type": "ui" - }, - { - "timestamp": 0, - "category": "electron", - "message": "app.web-contents-created", - "type": "ui" - }, - { - "timestamp": 0, - "category": "electron", - "message": "app.browser-window-created", - "type": "ui" - }, - { - "timestamp": 0, - "category": "electron", - "message": "renderer.dom-ready", - "type": "ui" - } - ], + "breadcrumbs": [], "tags": { "event.environment": "javascript", "event.origin": "electron", diff --git a/test/e2e/test-apps/other/main-process-module/src/main.js b/test/e2e/test-apps/other/main-process-module/src/main.js index 5aa1da82..bd094b99 100644 --- a/test/e2e/test-apps/other/main-process-module/src/main.js +++ b/test/e2e/test-apps/other/main-process-module/src/main.js @@ -32,5 +32,5 @@ app.on('ready', () => { setTimeout(() => { throw new Error('Some main error'); - }, 500); + }, 2000); }); diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js index ee658220..3004ed38 100644 --- a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js +++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js @@ -37,4 +37,4 @@ setTimeout(() => { } else { app.quit(); } -}, 2000); +}, 4000); diff --git a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js index 3611302d..ccb41cd2 100644 --- a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js +++ b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js @@ -30,4 +30,4 @@ setTimeout(() => { } else { app.quit(); } -}, 2000); +}, 4000); diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js index 0b7294b6..4f168635 100644 --- a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js +++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js @@ -37,4 +37,4 @@ setTimeout(() => { } else { app.quit(); } -}, 4000); +}, 6000); diff --git a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js index aa89b617..958d8ca5 100644 --- a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js +++ b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js @@ -31,4 +31,4 @@ app.on('ready', () => { setTimeout(() => { app.quit(); -}, 4000); +}, 6000); diff --git a/test/e2e/test-apps/sessions/native-crash-renderer/session-next.json b/test/e2e/test-apps/sessions/native-crash-renderer/session-next.json new file mode 100644 index 00000000..71a106c7 --- /dev/null +++ b/test/e2e/test-apps/sessions/native-crash-renderer/session-next.json @@ -0,0 +1,17 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": false, + "started": 0, + "timestamp": 0, + "status": "ok", + "errors": 0, + "duration": 0, + "attrs": { + "release": "session-native-crash-renderer@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js b/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js index 600e177b..529b0d6d 100644 --- a/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js +++ b/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js @@ -24,4 +24,4 @@ app.on('ready', () => { setTimeout(() => { app.quit(); -}, 4000); +}, 6000); diff --git a/test/unit/minidump-loader.test.ts b/test/unit/minidump-loader.test.ts new file mode 100644 index 00000000..cac2f525 --- /dev/null +++ b/test/unit/minidump-loader.test.ts @@ -0,0 +1,151 @@ +import { uuid4 } from '@sentry/utils'; +import { expect } from 'chai'; +import { closeSync, existsSync, openSync, utimesSync, writeFileSync, writeSync } from 'fs'; +import { join } from 'path'; +import * as tmp from 'tmp'; + +import { createMinidumpLoader } from '../../src/main/integrations/sentry-minidump/minidump-loader'; + +function dumpFileName(): string { + return `${uuid4()}.dmp`; +} + +const VALID_LOOKING_MINIDUMP = Buffer.from(`MDMP${'X'.repeat(12_000)}`); +const LOOKS_NOTHING_LIKE_A_MINIDUMP = Buffer.from('X'.repeat(12_000)); +const MINIDUMP_HEADER_BUT_TOO_SMALL = Buffer.from('MDMPdflahfalfhalkfnaklsfnalfkn'); + +describe('createMinidumpLoader', () => { + let tempDir: tmp.DirResult; + before(() => { + tempDir = tmp.dirSync({ unsafeCleanup: true }); + }); + + after(() => { + if (tempDir) { + tempDir.removeCallback(); + } + }); + + it('creates attachment from minidump', (done) => { + const name = dumpFileName(); + const dumpPath = join(tempDir.name, name); + writeFileSync(dumpPath, VALID_LOOKING_MINIDUMP); + + const loader = createMinidumpLoader(() => Promise.resolve([dumpPath])); + + void loader(false, (attachment) => { + expect(attachment).to.eql({ + data: VALID_LOOKING_MINIDUMP, + filename: name, + attachmentType: 'event.minidump', + }); + + setTimeout(() => { + expect(existsSync(dumpPath)).to.be.false; + done(); + }, 1_000); + }); + }); + + it("doesn't send invalid minidumps", (done) => { + const missingHeaderDump = join(tempDir.name, dumpFileName()); + writeFileSync(missingHeaderDump, LOOKS_NOTHING_LIKE_A_MINIDUMP); + const tooSmallDump = join(tempDir.name, dumpFileName()); + writeFileSync(tooSmallDump, MINIDUMP_HEADER_BUT_TOO_SMALL); + + const loader = createMinidumpLoader(() => Promise.resolve([missingHeaderDump, tooSmallDump])); + + let passedAttachment = false; + void loader(false, () => { + passedAttachment = true; + }); + + setTimeout(() => { + expect(passedAttachment).to.be.false; + expect(existsSync(missingHeaderDump)).to.be.false; + expect(existsSync(tooSmallDump)).to.be.false; + done(); + }, 2_000); + }); + + it("doesn't send minidumps that are over 30 days old", (done) => { + const dumpPath = join(tempDir.name, dumpFileName()); + writeFileSync(dumpPath, VALID_LOOKING_MINIDUMP); + const thirtyOneDaysAgo = new Date(new Date().getTime() - 31 * 24 * 3_600 * 1_000); + utimesSync(dumpPath, thirtyOneDaysAgo, thirtyOneDaysAgo); + + const loader = createMinidumpLoader(() => Promise.resolve([dumpPath])); + + let passedAttachment = false; + void loader(false, () => { + passedAttachment = true; + }); + + setTimeout(() => { + expect(passedAttachment).to.be.false; + expect(existsSync(dumpPath)).to.be.false; + done(); + }, 2_000); + }); + + it('deletes minidumps when sdk is disabled', (done) => { + const dumpPath = join(tempDir.name, dumpFileName()); + writeFileSync(dumpPath, VALID_LOOKING_MINIDUMP); + + const loader = createMinidumpLoader(() => Promise.resolve([dumpPath])); + + let passedAttachment = false; + void loader(true, () => { + passedAttachment = true; + }); + + setTimeout(() => { + expect(passedAttachment).to.be.false; + expect(existsSync(dumpPath)).to.be.false; + done(); + }, 2_000); + }); + + it('waits for minidump to stop being modified', (done) => { + const dumpPath = join(tempDir.name, dumpFileName()); + const file = openSync(dumpPath, 'w'); + writeSync(file, VALID_LOOKING_MINIDUMP); + + let count = 0; + // Write the file every 500ms + const timer = setInterval(() => { + count += 500; + writeSync(file, 'X'); + }, 500); + + setTimeout(() => { + clearInterval(timer); + closeSync(file); + }, 4_200); + + const loader = createMinidumpLoader(() => Promise.resolve([dumpPath])); + + void loader(false, (_) => { + expect(count).to.be.greaterThanOrEqual(3_000); + done(); + }); + }); + + it('sending continues after loading failures', (done) => { + const missingPath = join(tempDir.name, dumpFileName()); + const name = dumpFileName(); + const dumpPath = join(tempDir.name, name); + writeFileSync(dumpPath, VALID_LOOKING_MINIDUMP); + + const loader = createMinidumpLoader(() => Promise.resolve([missingPath, dumpPath])); + + void loader(false, (attachment) => { + expect(attachment.filename).to.eql(name); + + setTimeout(() => { + expect(existsSync(dumpPath)).to.be.false; + done(); + }, 1_000); + }); + }); +}); From ed57db8e65227504be822e8efec225bdaf2329a9 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 2 Oct 2023 21:45:29 +0200 Subject: [PATCH 158/239] chore: Changelog for 4.12.0 release (#764) Co-authored-by: Abhijeet Prasad <devabhiprasad@gmail.com> --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f4e30f8..efe9a5f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ ## Unreleased +## 4.12.0 + +- feat: Identify `webContents` of renderers via custom protocol (#762) +- fix: Re-work Sentry minidump loader (#761) +- feat: Node compatible ESM build for main process (#756) + +**Note:** Node ESM support is in beta until Electron v28 has a beta release and can be tested with the full test suite. + ## 4.11.1 fix: Don't send minidumps that are too small to be valid (#748) From d840e72ebe89016e2495b1f70bd790aa1bdb0b39 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Mon, 2 Oct 2023 19:46:30 +0000 Subject: [PATCH 159/239] release: 4.12.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2b8f8619..867a186b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.11.1", + "version": "4.12.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From e9942948b5d3bb78b537a02e2abc16952b455532 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 3 Oct 2023 12:29:39 +0200 Subject: [PATCH 160/239] test: New Sentry SDK version (#746) --- package.json | 16 +++--- src/renderer/sdk.ts | 2 +- yarn.lock | 134 ++++++++++++++++++++++---------------------- 3 files changed, 76 insertions(+), 76 deletions(-) diff --git a/package.json b/package.json index 2b8f8619..1ccdc357 100644 --- a/package.json +++ b/package.json @@ -55,11 +55,11 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.68.0", - "@sentry/core": "7.68.0", - "@sentry/node": "7.68.0", - "@sentry/types": "7.68.0", - "@sentry/utils": "7.68.0", + "@sentry/browser": "7.73.0", + "@sentry/core": "7.73.0", + "@sentry/node": "7.73.0", + "@sentry/types": "7.73.0", + "@sentry/utils": "7.73.0", "deepmerge": "4.3.0", "lru_map": "^0.3.3", "tslib": "^2.5.0" @@ -67,8 +67,8 @@ "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.68.0", - "@sentry-internal/typescript": "7.68.0", + "@sentry-internal/eslint-config-sdk": "7.73.0", + "@sentry-internal/typescript": "7.73.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", @@ -107,4 +107,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} +} \ No newline at end of file diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index e576f03b..bf062ada 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_68_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_73_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index e5cf4dd9..8d5dfcc6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.68.0": - version "7.68.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.68.0.tgz#6154af30c5b1125419fb3192c97d96a8ddb98310" - integrity sha512-24TdQxg/sneTbPV3gBr9wE5hjhTGSQ4b6H8f069DwdJ8BUKmPXMWkX7/3NmgfOqieccLrgsxIMfbkvLveeVBTA== +"@sentry-internal/eslint-config-sdk@7.73.0": + version "7.73.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.73.0.tgz#b2c480aebe86b033697492c1232a4db29f5e64e9" + integrity sha512-tC+GlHtXs2iwkul34WnCYLzMXakLmVY6/ODnkr+25nNo4TSwSqVON4X/98w2IPTbArzU4dLqDzuTmYgbV7TsHg== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.68.0" - "@sentry-internal/typescript" "7.68.0" + "@sentry-internal/eslint-plugin-sdk" "7.73.0" + "@sentry-internal/typescript" "7.73.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,83 +180,83 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.68.0": - version "7.68.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.68.0.tgz#41691a39fa10e66869bbe0418121d8051258433f" - integrity sha512-XYv33e+9KiB+uEghilBoGlve3UhbrXGGVnnhVppoeAQQek/RxnjHSwwZWo98UqxzYLLW4G9XofUUIxNI2AISCg== +"@sentry-internal/eslint-plugin-sdk@7.73.0": + version "7.73.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.73.0.tgz#80b421924b823fd6fe487b014048362577660a15" + integrity sha512-V53mpXiKXQOC3qw8LbAoVfvpDqSDT2L9Zfwctz2+URbny4A8pRMpZ7jOgu2R4ZOu8z7WZYPuCH6P7ZZL8b0iXg== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.68.0": - version "7.68.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.68.0.tgz#cb83a797baa671702cf43caf2280868850a0ef04" - integrity sha512-nNKS/q21+Iqzxs2K7T/l3dZi8Z9s/uxsAazpk2AYhFzx9mFnPj1Xfe3dgbFoygNifE+IrpUuldr6D5HQamTDPQ== +"@sentry-internal/tracing@7.73.0": + version "7.73.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.73.0.tgz#4838f31e41d23a6041ef4520519b80f788bf1cac" + integrity sha512-ig3WL/Nqp8nRQ52P205NaypGKNfIl/G+cIqge9xPW6zfRb5kJdM1YParw9GSJ1SPjEZBkBORGAML0on5H2FILw== dependencies: - "@sentry/core" "7.68.0" - "@sentry/types" "7.68.0" - "@sentry/utils" "7.68.0" + "@sentry/core" "7.73.0" + "@sentry/types" "7.73.0" + "@sentry/utils" "7.73.0" tslib "^2.4.1 || ^1.9.3" -"@sentry-internal/typescript@7.68.0": - version "7.68.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.68.0.tgz#8b38e213b0d6ec98617ab6c9bc42ca529fe93bc4" - integrity sha512-9jE/pYmSJndyKZ1y/95rVzwwDN3CGR1Fm30fvgdKdVcf4cIaLQMk50XVCHPhB5D7omXOeChOIwShJq21C1/KfA== - -"@sentry/browser@7.68.0": - version "7.68.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.68.0.tgz#b94be6385f3b1450e928bacf64479d06c452ff42" - integrity sha512-1RIPLzKcBeUeG8CQc4OIRfQ6F1zmGKku1am7P9QTz0bz//Mu7bEjm75DM69LBoUlP/Ab9cQQA3fZFUvrH0j1Tg== - dependencies: - "@sentry-internal/tracing" "7.68.0" - "@sentry/core" "7.68.0" - "@sentry/replay" "7.68.0" - "@sentry/types" "7.68.0" - "@sentry/utils" "7.68.0" +"@sentry-internal/typescript@7.73.0": + version "7.73.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.73.0.tgz#5fc4b1a90a024b95e0033ec025bd76c6bfe850cc" + integrity sha512-0QUhxUVmktBCfeGwqqM7zKH+RTaR7wuj+aKhSdxVK9+NJnguRqYJZRwUSVqYCMiWCAzNJBztee4GstHDvcVlhw== + +"@sentry/browser@7.73.0": + version "7.73.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.73.0.tgz#a8eaeb50cf16ca32f0039a81719c503d7045495f" + integrity sha512-e301hUixcJ5+HNKCJwajFF5smF4opXEFSclyWsJuFNufv5J/1C1SDhbwG2JjBt5zzdSoKWJKT1ewR6vpICyoDw== + dependencies: + "@sentry-internal/tracing" "7.73.0" + "@sentry/core" "7.73.0" + "@sentry/replay" "7.73.0" + "@sentry/types" "7.73.0" + "@sentry/utils" "7.73.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/core@7.68.0": - version "7.68.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.68.0.tgz#323817afea06b1fc22db37620bf74f3f8a46dbcf" - integrity sha512-mT3ObBWgvAky/QF3dZy4KBoXbRXbNsD6evn+mYi9UEeIZQ5NpnQYDEp78mapiEjI/TAHZIhTIuaBhj1Jk0qUUA== +"@sentry/core@7.73.0": + version "7.73.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.73.0.tgz#1caeeec44f42c4d58c06cc05dec39e5497b65aa3" + integrity sha512-9FEz4Gq848LOgVN2OxJGYuQqxv7cIVw69VlAzWHEm3njt8mjvlTq+7UiFsGRo84+59V2FQuHxzA7vVjl90WfSg== dependencies: - "@sentry/types" "7.68.0" - "@sentry/utils" "7.68.0" + "@sentry/types" "7.73.0" + "@sentry/utils" "7.73.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/node@7.68.0": - version "7.68.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.68.0.tgz#da3407ba7455109cf625c9a134a3f74ec5f5ca6b" - integrity sha512-gtcHoi6Xu6Iu8MpPgKJA4E0nozqLvYF0fKtt+27T0QBzWioO6lkxSQkKGWMyJGL0AmpLCex0E28fck/rlbt0LA== +"@sentry/node@7.73.0": + version "7.73.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.73.0.tgz#7eecf06689cd8f9d21587ca5cbfdc74543cc8c09" + integrity sha512-i50bRfmgkRRx0XXUbg9jGD/RuznDJxJXc4rBILhoJuhl+BjRIaoXA3ayplfJn8JLZxsNh75uJaCq4IUK70SORw== dependencies: - "@sentry-internal/tracing" "7.68.0" - "@sentry/core" "7.68.0" - "@sentry/types" "7.68.0" - "@sentry/utils" "7.68.0" - cookie "^0.4.1" + "@sentry-internal/tracing" "7.73.0" + "@sentry/core" "7.73.0" + "@sentry/types" "7.73.0" + "@sentry/utils" "7.73.0" + cookie "^0.5.0" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^2.4.1 || ^1.9.3" -"@sentry/replay@7.68.0": - version "7.68.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.68.0.tgz#ad6e91586c2c6ac81a42705e846eb74f4d068e76" - integrity sha512-be8QT2pxcLOTuX6HBRkK0mCVwM97dU5ZLCeofI+xJEWcRnoJdbx00nFwvBXvvoCizbtf4YIMCGwaT2k5LrVxsQ== +"@sentry/replay@7.73.0": + version "7.73.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.73.0.tgz#4e6c522bac5c12f596ef76afe15ecb3807407669" + integrity sha512-a8IC9SowBisLYD2IdLkXzx7gN4iVwHDJhQvLp2B8ARs1PyPjJ7gCxSMHeGrYp94V0gOXtorNYkrxvuX8ayPROA== dependencies: - "@sentry/core" "7.68.0" - "@sentry/types" "7.68.0" - "@sentry/utils" "7.68.0" + "@sentry/core" "7.73.0" + "@sentry/types" "7.73.0" + "@sentry/utils" "7.73.0" -"@sentry/types@7.68.0": - version "7.68.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.68.0.tgz#6134511106eed90bf033dc2ce76955f61582b48f" - integrity sha512-5J2pH1Pjx/029zTm3CNY9MaE8Aui81nG7JCtlMp7uEfQ//9Ja4d4Sliz/kV4ARbkIKUZerSgaRAm3xCy5XOXLg== +"@sentry/types@7.73.0": + version "7.73.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.73.0.tgz#6d811bbe413d319df0a592a672d6d72a94a8e716" + integrity sha512-/v8++bly8jW7r4cP2wswYiiVpn7eLLcqwnfPUMeCQze4zj3F3nTRIKc9BGHzU0V+fhHa3RwRC2ksqTGq1oJMDg== -"@sentry/utils@7.68.0": - version "7.68.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.68.0.tgz#e9fd33f4e856cf6ef3843ae11af3c836d88cbb88" - integrity sha512-NecnQegvKARyeFmBx7mYmbI17mTvjARWs1nfzY5jhPyNc3Zk4M3bQsgIdnJ1t+jo93UYudlNND7hxhDzjcBAVg== +"@sentry/utils@7.73.0": + version "7.73.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.73.0.tgz#530cf023f7c395aa7708cd3824e5a45948449c10" + integrity sha512-h3ZK/qpf4k76FhJV9uiSbvMz3V/0Ovy94C+5/9UgPMVCJXFmVsdw8n/dwANJ7LupVPfYP23xFGgebDMFlK1/2w== dependencies: - "@sentry/types" "7.68.0" + "@sentry/types" "7.73.0" tslib "^2.4.1 || ^1.9.3" "@sindresorhus/is@^4.0.0": @@ -1128,10 +1128,10 @@ content-type@^1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== +cookie@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== cookies@~0.8.0: version "0.8.0" From 3ba8684209b30dbfe75421207fefb5dc131c10e6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 14:45:07 +0200 Subject: [PATCH 161/239] test: New Electron versions (#766) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 013b4af1..d7806e21 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.25","23.3.13","24.8.5","25.8.4","26.2.4"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.26","23.3.13","24.8.6","25.9.0","26.3.0"] From 871d57f732e5b09ce4966de00362fa96eca4d4c2 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 5 Oct 2023 16:16:04 +0200 Subject: [PATCH 162/239] feat: Add ANR detection for main process (#753) --- src/index.ts | 36 ++++++++ src/main/anr.ts | 59 ++++++++++++ src/main/index.ts | 1 + src/main/sdk.ts | 5 ++ test/e2e/test-apps/anr/anr-main/event.json | 94 ++++++++++++++++++++ test/e2e/test-apps/anr/anr-main/package.json | 8 ++ test/e2e/test-apps/anr/anr-main/recipe.yml | 4 + test/e2e/test-apps/anr/anr-main/src/main.js | 28 ++++++ 8 files changed, 235 insertions(+) create mode 100644 src/main/anr.ts create mode 100644 test/e2e/test-apps/anr/anr-main/event.json create mode 100644 test/e2e/test-apps/anr/anr-main/package.json create mode 100644 test/e2e/test-apps/anr/anr-main/recipe.yml create mode 100644 test/e2e/test-apps/anr/anr-main/src/main.js diff --git a/src/index.ts b/src/index.ts index 28e105b8..358c4638 100644 --- a/src/index.ts +++ b/src/index.ts @@ -49,6 +49,8 @@ export { trace, } from '@sentry/core'; +import type { enableAnrDetection as enableNodeAnrDetection } from '@sentry/node'; + export const Integrations = getIntegrations(); // eslint-disable-next-line @typescript-eslint/no-empty-interface @@ -62,6 +64,7 @@ interface ProcessEntryPoint { init: (options: Partial<ElectronOptions>) => void; close?: (timeout?: number) => Promise<boolean>; flush?: (timeout?: number) => Promise<boolean>; + enableAnrDetection?(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void>; } /** Fetches the SDK entry point for the current process */ @@ -165,3 +168,36 @@ export async function flush(timeout?: number): Promise<boolean> { throw new Error('The Electron SDK should be flushed from the main process'); } + +/** + * **Note** This feature is still in beta so there may be breaking changes in future releases. + * + * Starts a child process that detects Application Not Responding (ANR) errors. + * + * It's important to await on the returned promise before your app code to ensure this code does not run in the ANR + * child process. + * + * ```js + * import { init, enableAnrDetection } from '@sentry/electron'; + * + * init({ dsn: "__DSN__" }); + * + * // with ESM + Electron v28+ + * await enableAnrDetection({ captureStackTrace: true }); + * runApp(); + * + * // with CJS + * enableAnrDetection({ captureStackTrace: true }).then(() => { + * runApp(); + * }); + * ``` + */ +export async function enableAnrDetection(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void> { + const entryPoint = getEntryPoint(); + + if (entryPoint.enableAnrDetection) { + return entryPoint.enableAnrDetection(options); + } + + throw new Error('ANR detection should be started in the main process'); +} diff --git a/src/main/anr.ts b/src/main/anr.ts new file mode 100644 index 00000000..6ed2738d --- /dev/null +++ b/src/main/anr.ts @@ -0,0 +1,59 @@ +import { enableAnrDetection as enableNodeAnrDetection } from '@sentry/node'; +import { app } from 'electron'; + +import { ELECTRON_MAJOR_VERSION } from './electron-normalize'; + +type MainProcessOptions = Parameters<typeof enableNodeAnrDetection>[0]; + +interface Options { + /** + * Main process ANR options. + * + * Set to false to disable ANR detection in the main process. + */ + mainProcess?: MainProcessOptions | false; +} + +function enableAnrMainProcess(options: MainProcessOptions): Promise<void> { + if (ELECTRON_MAJOR_VERSION < 4) { + throw new Error('Main process ANR detection is only supported on Electron v4+'); + } + + const mainOptions = { + entryScript: app.getAppPath(), + ...options, + }; + + return enableNodeAnrDetection(mainOptions); +} + +/** + * **Note** This feature is still in beta so there may be breaking changes in future releases. + * + * Starts a child process that detects Application Not Responding (ANR) errors. + * + * It's important to await on the returned promise before your app code to ensure this code does not run in the ANR + * child process. + * + * ```js + * import { init, enableAnrDetection } from '@sentry/electron'; + * + * init({ dsn: "__DSN__" }); + * + * // with ESM + Electron v28+ + * await enableAnrDetection({ mainProcess: { captureStackTrace: true }}); + * runApp(); + * + * // with CJS + * enableAnrDetection({ mainProcess: { captureStackTrace: true }}).then(() => { + * runApp(); + * }); + * ``` + */ +export async function enableAnrDetection(options: Options = {}): Promise<void> { + if (options.mainProcess !== false) { + return enableAnrMainProcess(options.mainProcess || {}); + } + + return Promise.resolve(); +} diff --git a/src/main/index.ts b/src/main/index.ts index 7a566c4d..393df934 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -58,3 +58,4 @@ export const Integrations = { ...ElectronMainIntegrations, ...NodeIntegrations } export type { ElectronMainOptions } from './sdk'; export { init, defaultIntegrations } from './sdk'; export { IPCMode } from '../common'; +export { enableAnrDetection } from './anr'; diff --git a/src/main/sdk.ts b/src/main/sdk.ts index 94b645d9..68f48559 100644 --- a/src/main/sdk.ts +++ b/src/main/sdk.ts @@ -96,6 +96,11 @@ export function init(userOptions: ElectronMainOptions): void { const options: ElectronMainOptionsInternal = Object.assign(defaultOptions, userOptions); const defaults = defaultIntegrations; + if (process.env.SENTRY_ANR_CHILD_PROCESS) { + options.autoSessionTracking = false; + options.tracesSampleRate = 0; + } + // If we don't set a release, @sentry/node will automatically fetch from environment variables if (options.release === undefined) { options.release = getDefaultReleaseName(); diff --git a/test/e2e/test-apps/anr/anr-main/event.json b/test/e2e/test-apps/anr/anr-main/event.json new file mode 100644 index 00000000..58c95e39 --- /dev/null +++ b/test/e2e/test-apps/anr/anr-main/event.json @@ -0,0 +1,94 @@ +{ + "method": "envelope", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "appId": "277345", + "data": { + "sdk": { + "name": "sentry.javascript.electron", + "packages": [ + { + "name": "npm:@sentry/electron", + "version": "{{version}}" + } + ], + "version": "{{version}}" + }, + "contexts": { + "app": { + "app_name": "anr-main", + "app_version": "1.0.0", + "app_start_time": "{{time}}" + }, + "browser": { + "name": "Chrome" + }, + "chrome": { + "name": "Chrome", + "type": "runtime", + "version": "{{version}}" + }, + "device": { + "arch": "{{arch}}", + "family": "Desktop", + "memory_size": 0, + "free_memory": 0, + "processor_count": 0, + "processor_frequency": 0, + "cpu_description": "{{cpu}}", + "screen_resolution": "{{screen}}", + "screen_density": 1, + "language": "{{language}}" + }, + "node": { + "name": "Node", + "type": "runtime", + "version": "{{version}}" + }, + "os": { + "name": "{{platform}}", + "version": "{{version}}" + }, + "runtime": { + "name": "Electron", + "version": "{{version}}" + } + }, + "release": "anr-main@1.0.0", + "environment": "development", + "user": { + "ip_address": "{{auto}}" + }, + "exception": { + "values": [ + { + "type": "ApplicationNotResponding", + "value": "Application Not Responding for at least 1000 ms", + "mechanism": { "type": "ANR" }, + "stacktrace": { + "frames": [ + { + "colno": 0, + "function": "{{function}}", + "in_app": false, + "lineno": 0, + "module": "pbkdf2" + } + ] + } + } + ] + }, + "level": "error", + "event_id": "{{id}}", + "platform": "node", + "timestamp": 0, + "breadcrumbs": [], + "tags": { + "event.environment": "javascript", + "event.origin": "electron", + "event.process": "browser", + "event_type": "javascript", + "process.name": "ANR" + } + } +} diff --git a/test/e2e/test-apps/anr/anr-main/package.json b/test/e2e/test-apps/anr/anr-main/package.json new file mode 100644 index 00000000..7fc3834f --- /dev/null +++ b/test/e2e/test-apps/anr/anr-main/package.json @@ -0,0 +1,8 @@ +{ + "name": "anr-main", + "version": "1.0.0", + "main": "src/main.js", + "dependencies": { + "@sentry/electron": "3.0.0" + } +} diff --git a/test/e2e/test-apps/anr/anr-main/recipe.yml b/test/e2e/test-apps/anr/anr-main/recipe.yml new file mode 100644 index 00000000..d65df596 --- /dev/null +++ b/test/e2e/test-apps/anr/anr-main/recipe.yml @@ -0,0 +1,4 @@ +description: ANR Main Event +category: ANR +command: yarn +condition: version.major >= 4 diff --git a/test/e2e/test-apps/anr/anr-main/src/main.js b/test/e2e/test-apps/anr/anr-main/src/main.js new file mode 100644 index 00000000..d622faca --- /dev/null +++ b/test/e2e/test-apps/anr/anr-main/src/main.js @@ -0,0 +1,28 @@ +const crypto = require('crypto'); + +const { app } = require('electron'); +const { init, enableAnrDetection } = require('@sentry/electron/main'); + +init({ + dsn: '__DSN__', + debug: true, + autoSessionTracking: false, + onFatalError: () => {}, +}); + +function longWork() { + for (let i = 0; i < 100; i++) { + const salt = crypto.randomBytes(128).toString('base64'); + // eslint-disable-next-line no-unused-vars + const hash = crypto.pbkdf2Sync('myPassword', salt, 10000, 512, 'sha512'); + } +} + +enableAnrDetection({ mainProcess: { debug: true, anrThreshold: 1000, captureStackTrace: true } }).then(() => { + console.log('main app code'); + app.on('ready', () => { + setTimeout(() => { + longWork(); + }, 1000); + }); +}); From 8d3b3e004eac1ea2dc777ed6c58aa1da5e1ffe09 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 5 Oct 2023 16:19:53 +0200 Subject: [PATCH 163/239] chore: Update changelog for 4.13.0 release (#767) --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index efe9a5f5..1317d618 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +## 4.13.0 + +- feat: Add App Not Responding detection for main process (#753) +- feat: Update from [v7.68.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.68.0) to + [v7.73.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.73.0) of JavaScript SDKs (#766) + ## 4.12.0 - feat: Identify `webContents` of renderers via custom protocol (#762) From 760ef617ac6195c37a49f19fc657365e8199623f Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Thu, 5 Oct 2023 14:23:06 +0000 Subject: [PATCH 164/239] release: 4.13.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 30816909..bf14bb3c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.12.0", + "version": "4.13.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", @@ -107,4 +107,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} \ No newline at end of file +} From c0f780e9334954032f3387245de1883f49064c87 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 10 Oct 2023 13:00:54 +0200 Subject: [PATCH 165/239] test: New Electron versions (#771) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index d7806e21..35d037d7 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.26","23.3.13","24.8.6","25.9.0","26.3.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.7","25.9.0","26.3.0","27.0.0"] From a788a0fbccbd347334ac41b7d7968341541e6b33 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 Oct 2023 23:49:52 +0200 Subject: [PATCH 166/239] test: New Sentry SDK version (#775) --- package.json | 16 ++-- src/renderer/sdk.ts | 2 +- yarn.lock | 214 ++++++++++++++++++++++++++++---------------- 3 files changed, 146 insertions(+), 86 deletions(-) diff --git a/package.json b/package.json index bf14bb3c..a1ac776a 100644 --- a/package.json +++ b/package.json @@ -55,11 +55,11 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.73.0", - "@sentry/core": "7.73.0", - "@sentry/node": "7.73.0", - "@sentry/types": "7.73.0", - "@sentry/utils": "7.73.0", + "@sentry/browser": "7.74.0", + "@sentry/core": "7.74.0", + "@sentry/node": "7.74.0", + "@sentry/types": "7.74.0", + "@sentry/utils": "7.74.0", "deepmerge": "4.3.0", "lru_map": "^0.3.3", "tslib": "^2.5.0" @@ -67,8 +67,8 @@ "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.73.0", - "@sentry-internal/typescript": "7.73.0", + "@sentry-internal/eslint-config-sdk": "7.74.0", + "@sentry-internal/typescript": "7.74.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", @@ -107,4 +107,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} +} \ No newline at end of file diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index bf062ada..131423c7 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -22,7 +22,7 @@ export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMa export function init<O extends BrowserOptions>( options: BrowserOptions & O = {} as BrowserOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_73_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_74_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 8d5dfcc6..9a194ea1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -45,7 +45,7 @@ optionalDependencies: global-agent "^3.0.0" -"@eslint-community/eslint-utils@^4.2.0": +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== @@ -164,99 +164,99 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.73.0": - version "7.73.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.73.0.tgz#b2c480aebe86b033697492c1232a4db29f5e64e9" - integrity sha512-tC+GlHtXs2iwkul34WnCYLzMXakLmVY6/ODnkr+25nNo4TSwSqVON4X/98w2IPTbArzU4dLqDzuTmYgbV7TsHg== +"@sentry-internal/eslint-config-sdk@7.74.0": + version "7.74.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.74.0.tgz#dade78c180cad8aaeb1e239bc5451b15b8a3a7c0" + integrity sha512-ornnUt2BOD/5R5nzKgoExACrLFPfp04cyC2hcGa6U3DPvYb4aQsO2A3xeftsGZRiQ0OfAACvtajIKNkn61nppQ== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.73.0" - "@sentry-internal/typescript" "7.73.0" + "@sentry-internal/eslint-plugin-sdk" "7.74.0" + "@sentry-internal/typescript" "7.74.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" - eslint-plugin-deprecation "^1.1.0" + eslint-plugin-deprecation "^1.5.0" eslint-plugin-import "^2.22.0" eslint-plugin-jest "^27.2.2" eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.73.0": - version "7.73.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.73.0.tgz#80b421924b823fd6fe487b014048362577660a15" - integrity sha512-V53mpXiKXQOC3qw8LbAoVfvpDqSDT2L9Zfwctz2+URbny4A8pRMpZ7jOgu2R4ZOu8z7WZYPuCH6P7ZZL8b0iXg== +"@sentry-internal/eslint-plugin-sdk@7.74.0": + version "7.74.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.74.0.tgz#4ceecc6e84ed2a8e07c41d5f52b15188ce251908" + integrity sha512-j0rTZKn4Mj0ywOIco8SxfI2f0xXo0O7dWlw8jfuPrYtn3BBtJc0/7lilz1ZwYTYKDAbDuhxKITaVP1V1R0ADDg== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.73.0": - version "7.73.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.73.0.tgz#4838f31e41d23a6041ef4520519b80f788bf1cac" - integrity sha512-ig3WL/Nqp8nRQ52P205NaypGKNfIl/G+cIqge9xPW6zfRb5kJdM1YParw9GSJ1SPjEZBkBORGAML0on5H2FILw== +"@sentry-internal/tracing@7.74.0": + version "7.74.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.74.0.tgz#11b0762d0b18b01cc18dfb1e40bbaa41c6f97452" + integrity sha512-JK6IRGgdtZjswGfaGIHNWIThffhOHzVIIaGmglui+VFIzOsOqePjoxaDV0MEvzafxXZD7eWqGE5RGuZ0n6HFVg== dependencies: - "@sentry/core" "7.73.0" - "@sentry/types" "7.73.0" - "@sentry/utils" "7.73.0" + "@sentry/core" "7.74.0" + "@sentry/types" "7.74.0" + "@sentry/utils" "7.74.0" tslib "^2.4.1 || ^1.9.3" -"@sentry-internal/typescript@7.73.0": - version "7.73.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.73.0.tgz#5fc4b1a90a024b95e0033ec025bd76c6bfe850cc" - integrity sha512-0QUhxUVmktBCfeGwqqM7zKH+RTaR7wuj+aKhSdxVK9+NJnguRqYJZRwUSVqYCMiWCAzNJBztee4GstHDvcVlhw== - -"@sentry/browser@7.73.0": - version "7.73.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.73.0.tgz#a8eaeb50cf16ca32f0039a81719c503d7045495f" - integrity sha512-e301hUixcJ5+HNKCJwajFF5smF4opXEFSclyWsJuFNufv5J/1C1SDhbwG2JjBt5zzdSoKWJKT1ewR6vpICyoDw== - dependencies: - "@sentry-internal/tracing" "7.73.0" - "@sentry/core" "7.73.0" - "@sentry/replay" "7.73.0" - "@sentry/types" "7.73.0" - "@sentry/utils" "7.73.0" +"@sentry-internal/typescript@7.74.0": + version "7.74.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.74.0.tgz#2dec70a1eec2684c8fc7abdc6b3ba03944c059c3" + integrity sha512-Xq71bUhZ2GIT76VfhNyJb9k5lmSDVFuaj9uy8PZ0W1DkY0fE4FEx2xWQUXuYy7M5+2QAHesGjCzHxZO2cx1HAQ== + +"@sentry/browser@7.74.0": + version "7.74.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.74.0.tgz#4a01bccb34059894007b9a22a89892f2c4dff130" + integrity sha512-Njr8216Z1dFUcl6NqBOk20dssK9SjoVddY74Xq+Q4p3NfXBG3lkMcACXor7SFoJRZXq8CZWGS13Cc5KwViRw4g== + dependencies: + "@sentry-internal/tracing" "7.74.0" + "@sentry/core" "7.74.0" + "@sentry/replay" "7.74.0" + "@sentry/types" "7.74.0" + "@sentry/utils" "7.74.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/core@7.73.0": - version "7.73.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.73.0.tgz#1caeeec44f42c4d58c06cc05dec39e5497b65aa3" - integrity sha512-9FEz4Gq848LOgVN2OxJGYuQqxv7cIVw69VlAzWHEm3njt8mjvlTq+7UiFsGRo84+59V2FQuHxzA7vVjl90WfSg== +"@sentry/core@7.74.0": + version "7.74.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.74.0.tgz#2cfcb5133a4a3f82fbac09d3573ea9f508fb7c67" + integrity sha512-83NRuqn7nDZkSVBN5yJQqcpXDG4yMYiB7TkYUKrGTzBpRy6KUOrkCdybuKk0oraTIGiGSe5WEwCFySiNgR9FzA== dependencies: - "@sentry/types" "7.73.0" - "@sentry/utils" "7.73.0" + "@sentry/types" "7.74.0" + "@sentry/utils" "7.74.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/node@7.73.0": - version "7.73.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.73.0.tgz#7eecf06689cd8f9d21587ca5cbfdc74543cc8c09" - integrity sha512-i50bRfmgkRRx0XXUbg9jGD/RuznDJxJXc4rBILhoJuhl+BjRIaoXA3ayplfJn8JLZxsNh75uJaCq4IUK70SORw== +"@sentry/node@7.74.0": + version "7.74.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.74.0.tgz#c6b6704a3a238155f047972fd4c6944004347aba" + integrity sha512-uBmW2/z0cz/WFIG74ZF7lSipO0XNzMf9yrdqnZXnGDYsUZE4I4QiqDN0hNi6fkTgf9MYRC8uFem2OkAvyPJ74Q== dependencies: - "@sentry-internal/tracing" "7.73.0" - "@sentry/core" "7.73.0" - "@sentry/types" "7.73.0" - "@sentry/utils" "7.73.0" + "@sentry-internal/tracing" "7.74.0" + "@sentry/core" "7.74.0" + "@sentry/types" "7.74.0" + "@sentry/utils" "7.74.0" cookie "^0.5.0" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^2.4.1 || ^1.9.3" -"@sentry/replay@7.73.0": - version "7.73.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.73.0.tgz#4e6c522bac5c12f596ef76afe15ecb3807407669" - integrity sha512-a8IC9SowBisLYD2IdLkXzx7gN4iVwHDJhQvLp2B8ARs1PyPjJ7gCxSMHeGrYp94V0gOXtorNYkrxvuX8ayPROA== +"@sentry/replay@7.74.0": + version "7.74.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.74.0.tgz#618d40f7c9ecc7589dd14df0c560b20a24839d3f" + integrity sha512-GoYa3cHTTFVI/J1cnZ0i4X128mf/JljaswO3PWNTe2k3lSHq/LM5aV0keClRvwM0W8hlix8oOTT06nnenOUmmw== dependencies: - "@sentry/core" "7.73.0" - "@sentry/types" "7.73.0" - "@sentry/utils" "7.73.0" + "@sentry/core" "7.74.0" + "@sentry/types" "7.74.0" + "@sentry/utils" "7.74.0" -"@sentry/types@7.73.0": - version "7.73.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.73.0.tgz#6d811bbe413d319df0a592a672d6d72a94a8e716" - integrity sha512-/v8++bly8jW7r4cP2wswYiiVpn7eLLcqwnfPUMeCQze4zj3F3nTRIKc9BGHzU0V+fhHa3RwRC2ksqTGq1oJMDg== +"@sentry/types@7.74.0": + version "7.74.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.74.0.tgz#810a62cd28db21c5f15f131da6525d7ddf7a29db" + integrity sha512-rI5eIRbUycWjn6s6o3yAjjWtIvYSxZDdnKv5je2EZINfLKcMPj1dkl6wQd2F4y7gLfD/N6Y0wZYIXC3DUdJQQg== -"@sentry/utils@7.73.0": - version "7.73.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.73.0.tgz#530cf023f7c395aa7708cd3824e5a45948449c10" - integrity sha512-h3ZK/qpf4k76FhJV9uiSbvMz3V/0Ovy94C+5/9UgPMVCJXFmVsdw8n/dwANJ7LupVPfYP23xFGgebDMFlK1/2w== +"@sentry/utils@7.74.0": + version "7.74.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.74.0.tgz#e0a16d345b2af6f8b09d157c8c8a3145d7a2070a" + integrity sha512-k3np8nuTPtx5KDODPtULfFln4UXdE56MZCcF19Jv6Ljxf+YN/Ady1+0Oi3e0XoSvFpWNyWnglauT7M65qCE6kg== dependencies: - "@sentry/types" "7.73.0" + "@sentry/types" "7.74.0" tslib "^2.4.1 || ^1.9.3" "@sindresorhus/is@^4.0.0": @@ -422,6 +422,11 @@ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== +"@types/json-schema@^7.0.12": + version "7.0.13" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" + integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== + "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" @@ -519,6 +524,11 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== +"@types/semver@^7.5.0": + version "7.5.3" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.3.tgz#9a726e116beb26c24f1ccd6850201e1246122e04" + integrity sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw== + "@types/serve-static@*": version "1.15.0" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" @@ -555,13 +565,6 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@^5.0.0": - version "5.51.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.51.0.tgz#936124843a9221863f027a08063b737578838bea" - integrity sha512-8/3+ZyBENl2aog1/QB3S39ptkZ2oRhDB+sJt15UWXBE3skgwL1C8BN9RjpOyhTejwR2hVrvqEjcYcNY6qtZ7nw== - dependencies: - "@typescript-eslint/utils" "5.51.0" - "@typescript-eslint/parser@^5.48.0": version "5.51.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.51.0.tgz#2d74626652096d966ef107f44b9479f02f51f271" @@ -588,6 +591,14 @@ "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" +"@typescript-eslint/scope-manager@6.7.5": + version "6.7.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz#1cf33b991043886cd67f4f3600b8e122fc14e711" + integrity sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A== + dependencies: + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" + "@typescript-eslint/type-utils@5.51.0": version "5.51.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.51.0.tgz#7af48005531700b62a20963501d47dfb27095988" @@ -608,6 +619,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== +"@typescript-eslint/types@6.7.5": + version "6.7.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.5.tgz#4571320fb9cf669de9a95d9849f922c3af809790" + integrity sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ== + "@typescript-eslint/typescript-estree@5.51.0": version "5.51.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.51.0.tgz#0ec8170d7247a892c2b21845b06c11eb0718f8de" @@ -634,6 +650,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@6.7.5": + version "6.7.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz#4578de1a26e9f24950f029a4f00d1bfe41f15a39" + integrity sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg== + dependencies: + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + "@typescript-eslint/utils@5.51.0": version "5.51.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.51.0.tgz#074f4fabd5b12afe9c8aa6fdee881c050f8b4d47" @@ -662,6 +691,19 @@ eslint-scope "^5.1.1" semver "^7.3.7" +"@typescript-eslint/utils@^6.0.0": + version "6.7.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.7.5.tgz#ab847b53d6b65e029314b8247c2336843dba81ab" + integrity sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.7.5" + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/typescript-estree" "6.7.5" + semver "^7.5.4" + "@typescript-eslint/visitor-keys@5.51.0": version "5.51.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.51.0.tgz#c0147dd9a36c0de758aaebd5b48cae1ec59eba87" @@ -678,6 +720,14 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@6.7.5": + version "6.7.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz#84c68d6ceb5b12d5246b918b84f2b79affd6c2f1" + integrity sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg== + dependencies: + "@typescript-eslint/types" "6.7.5" + eslint-visitor-keys "^3.4.1" + "@ungap/promise-all-settled@1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" @@ -1519,12 +1569,12 @@ eslint-module-utils@^2.7.4: dependencies: debug "^3.2.7" -eslint-plugin-deprecation@^1.1.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.3.3.tgz#065b5d36ff220afe139f2b19af57454a13464731" - integrity sha512-Bbkv6ZN2cCthVXz/oZKPwsSY5S/CbgTLRG4Q2s2gpPpgNsT0uJ0dB5oLNiWzFYY8AgKX4ULxXFG1l/rDav9QFA== +eslint-plugin-deprecation@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.6.0.tgz#b12d0c5a9baf3bcde0752ff6337703c059a4ae23" + integrity sha512-rld+Vrneh/NXRtDB0vQifOvgUy0HJYoejaxWlVnsk/LK7iij2tCWQIFcCKG4uzQb+Ef86bDke39w1lh4wnon4Q== dependencies: - "@typescript-eslint/experimental-utils" "^5.0.0" + "@typescript-eslint/utils" "^6.0.0" tslib "^2.3.1" tsutils "^3.21.0" @@ -1611,6 +1661,11 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== +eslint-visitor-keys@^3.4.1: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + eslint@7.32.0: version "7.32.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" @@ -3282,7 +3337,7 @@ semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -3537,6 +3592,11 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +ts-api-utils@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" + integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + ts-node@^10.9.1: version "10.9.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" From eb1f60b6b8beb794e9a90b071fc0328b5b853a98 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 17 Oct 2023 14:55:53 +0100 Subject: [PATCH 167/239] fix: Hide ANR child process from dock (#777) --- src/main/sdk.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/sdk.ts b/src/main/sdk.ts index 68f48559..4ca7e730 100644 --- a/src/main/sdk.ts +++ b/src/main/sdk.ts @@ -3,7 +3,7 @@ ensureProcess('main'); import { defaultIntegrations as defaultNodeIntegrations, init as nodeInit, NodeOptions } from '@sentry/node'; import { Integration, Options } from '@sentry/types'; -import { Session, session, WebContents } from 'electron'; +import { app, Session, session, WebContents } from 'electron'; import { getDefaultEnvironment, getDefaultReleaseName } from './context'; import { @@ -97,6 +97,7 @@ export function init(userOptions: ElectronMainOptions): void { const defaults = defaultIntegrations; if (process.env.SENTRY_ANR_CHILD_PROCESS) { + app.dock?.hide(); options.autoSessionTracking = false; options.tracesSampleRate = 0; } From d5279b2e0615517ec498663a1b1bd3583c0ef144 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 17 Oct 2023 15:08:39 +0100 Subject: [PATCH 168/239] test: Electron v28 main process ESM (#773) --- examples/electron-forge-webpack/recipe.yml | 1 + examples/electron-forge/recipe.yml | 1 + .../electron-react-boilerplate/recipe.yml | 1 + examples/electron-vite/recipe.yml | 1 + .../recipe.yml | 1 + examples/webpack-context-isolation/recipe.yml | 1 + package.json | 2 +- test/e2e/recipe/index.ts | 59 +++++++++++++++++-- test/e2e/recipe/normalize.ts | 1 + test/e2e/recipe/parser.ts | 1 + .../other/error-entry-point/recipe.yml | 1 + .../test-apps/other/error-iframe/recipe.yml | 1 + .../other/main-process-module/recipe.yml | 1 + .../other/net-breadcrumbs-tracing/recipe.yml | 1 + .../other/net-breadcrumbs/recipe.yml | 1 + test/e2e/versions.json | 2 +- 16 files changed, 70 insertions(+), 6 deletions(-) diff --git a/examples/electron-forge-webpack/recipe.yml b/examples/electron-forge-webpack/recipe.yml index d40dea6d..bc7a12a8 100644 --- a/examples/electron-forge-webpack/recipe.yml +++ b/examples/electron-forge-webpack/recipe.yml @@ -2,3 +2,4 @@ description: Electron Forge Webpack with contextIsolation and sandbox command: yarn && yarn package condition: supportsContextIsolation && supportsSandbox timeout: 120 +skipEsmAutoTransform: true diff --git a/examples/electron-forge/recipe.yml b/examples/electron-forge/recipe.yml index 74f484b7..4e3e7233 100644 --- a/examples/electron-forge/recipe.yml +++ b/examples/electron-forge/recipe.yml @@ -1,3 +1,4 @@ description: Electron Forge command: yarn timeout: 120 +skipEsmAutoTransform: true diff --git a/examples/electron-react-boilerplate/recipe.yml b/examples/electron-react-boilerplate/recipe.yml index 9d2d90f2..ec2fb3a6 100644 --- a/examples/electron-react-boilerplate/recipe.yml +++ b/examples/electron-react-boilerplate/recipe.yml @@ -3,3 +3,4 @@ command: npm install && npm run build condition: version.major >= 16 timeout: 120 distPath: release/app +skipEsmAutoTransform: true diff --git a/examples/electron-vite/recipe.yml b/examples/electron-vite/recipe.yml index 38e08e40..48e62d3d 100644 --- a/examples/electron-vite/recipe.yml +++ b/examples/electron-vite/recipe.yml @@ -2,3 +2,4 @@ description: Electron Vite command: yarn && yarn build condition: version.major >= 7 timeout: 120 +skipEsmAutoTransform: true diff --git a/examples/webpack-context-isolation-preload/recipe.yml b/examples/webpack-context-isolation-preload/recipe.yml index 07abca78..02299da2 100644 --- a/examples/webpack-context-isolation-preload/recipe.yml +++ b/examples/webpack-context-isolation-preload/recipe.yml @@ -2,3 +2,4 @@ description: Webpack 5 app with contextIsolation and sandbox with preload command: yarn && yarn build condition: supportsContextIsolation && supportsSandbox timeout: 120 +skipEsmAutoTransform: true diff --git a/examples/webpack-context-isolation/recipe.yml b/examples/webpack-context-isolation/recipe.yml index 18407171..2b9066a5 100644 --- a/examples/webpack-context-isolation/recipe.yml +++ b/examples/webpack-context-isolation/recipe.yml @@ -2,3 +2,4 @@ description: Webpack 5 app with contextIsolation and sandbox command: yarn && yarn build condition: supportsContextIsolation && supportsSandbox timeout: 120 +skipEsmAutoTransform: true diff --git a/package.json b/package.json index a1ac776a..d46b0f81 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "fix": "run-s fix:eslint fix:prettier", "fix:prettier": "prettier --write \"{src,test}/**/*.ts\"", "fix:eslint": "eslint . --format stylish --fix", - "update-electron-versions": "electron-latest-versions --start 2 > ./test/e2e/versions.json", + "update-electron-versions": "electron-latest-versions --start 2 --alpha --beta > ./test/e2e/versions.json", "update-sdk-versions": "node ./scripts/update-sdk-versions.mjs", "pretest": "yarn build", "test": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe electron-mocha --require ts-node/register/transpile-only --timeout 12000 ./test/unit/**/*.ts", diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts index f71e1e32..f18088fd 100644 --- a/test/e2e/recipe/index.ts +++ b/test/e2e/recipe/index.ts @@ -1,4 +1,5 @@ import { Event } from '@sentry/types'; +import { parseSemver } from '@sentry/utils'; import { expect } from 'chai'; import { spawnSync } from 'child_process'; import { mkdirSync, writeFileSync } from 'fs'; @@ -53,6 +54,51 @@ export function getCategorisedTestRecipes(electronVersion: string): Record<strin }, {} as Record<string, RecipeRunner[]>); } +function insertAfterLastImport(content: string, insert: string): string { + const lines = content.split('\n'); + const importCount = lines.filter((l) => l.startsWith('import ')).length; + + let output = ''; + let count = 0; + for (const line of lines) { + output += `${line}\n`; + + if (line.startsWith('import ')) { + count += 1; + } + + if (count === importCount) { + output += `${insert}\n`; + count += 1; + } + } + + return output; +} + +function convertToEsm(filename: string, content: string): [string, string] { + if (filename.endsWith('package.json')) { + const obj = JSON.parse(content); + obj.main = obj.main.replace(/\.js$/, '.mjs'); + return [filename, JSON.stringify(obj)]; + } + + if (filename.endsWith('main.js')) { + return [ + filename.replace(/\.js$/, '.mjs'), + insertAfterLastImport( + content + .replace(/(?:const|var) (\{[\s\S]*?\}) = require\((\S*?)\)/g, 'import $1 from $2') + .replace(/(?:const|var) (\S*) = require\((\S*)\)/g, 'import * as $1 from $2'), + `import * as url from 'url'; +const __dirname = url.fileURLToPath(new url.URL('.', import.meta.url));`, + ), + ]; + } + + return [filename, content]; +} + export class RecipeRunner { private constructor(private readonly _electronVersion: string, private readonly _recipe: TestRecipe) {} @@ -105,9 +151,6 @@ export class RecipeRunner { for (const file of Object.keys(this._recipe.files)) { log(`Writing file '${file}'`); - const path = join(appPath, file); - - mkdirSync(dirname(path), { recursive: true }); let content = this._recipe.files[file]; // Replace with the test server localhost DSN @@ -125,12 +168,20 @@ export class RecipeRunner { /"@sentry\/electron": ".*"/, `"@sentry/electron": "file:./../../../../sentry-electron-${SDK_VERSION}.tgz"`, ) - // We replace the Sentry JavaScript dependency versions to match that of @sentry/electron + // We replace the Sentry JavaScript dependency versions to match that of @sentry/core .replace(/"@sentry\/replay": ".*"/, `"@sentry/replay": "${JS_VERSION}"`) .replace(/"@sentry\/react": ".*"/, `"@sentry/react": "${JS_VERSION}"`) .replace(/"@sentry\/vue": ".*"/, `"@sentry/vue": "${JS_VERSION}"`); } + let filename = file; + + if (!this._recipe.metadata.skipEsmAutoTransform && (parseSemver(this._electronVersion).major || 0) >= 28) { + [filename, content] = convertToEsm(file, content); + } + + const path = join(appPath, filename); + mkdirSync(dirname(path), { recursive: true }); writeFileSync(path, content); } diff --git a/test/e2e/recipe/normalize.ts b/test/e2e/recipe/normalize.ts index ee2ac75a..f65a3ab0 100644 --- a/test/e2e/recipe/normalize.ts +++ b/test/e2e/recipe/normalize.ts @@ -151,6 +151,7 @@ function normalizeEvent(event: Event & ReplayEvent): Event { frame.colno = 0; frame.lineno = 0; frame.function = '{{function}}'; + frame.filename = frame.filename?.replace(/\.mjs$/, '.js'); } } diff --git a/test/e2e/recipe/parser.ts b/test/e2e/recipe/parser.ts index 96235670..31608fb9 100644 --- a/test/e2e/recipe/parser.ts +++ b/test/e2e/recipe/parser.ts @@ -17,6 +17,7 @@ export interface TestMetadata { runTwice?: boolean; expectedError?: string; distPath?: string; + skipEsmAutoTransform?: boolean; } export interface TestRecipe { diff --git a/test/e2e/test-apps/other/error-entry-point/recipe.yml b/test/e2e/test-apps/other/error-entry-point/recipe.yml index d623ac1f..88f76052 100644 --- a/test/e2e/test-apps/other/error-entry-point/recipe.yml +++ b/test/e2e/test-apps/other/error-entry-point/recipe.yml @@ -3,3 +3,4 @@ command: yarn && yarn build condition: version.major >= 15 timeout: 120 expectedError: This code is intended to run in the Electron renderer +skipEsmAutoTransform: true diff --git a/test/e2e/test-apps/other/error-iframe/recipe.yml b/test/e2e/test-apps/other/error-iframe/recipe.yml index 73bace15..593c850d 100644 --- a/test/e2e/test-apps/other/error-iframe/recipe.yml +++ b/test/e2e/test-apps/other/error-iframe/recipe.yml @@ -2,3 +2,4 @@ description: JavaScript Error from <iframe> command: yarn && yarn build condition: supportsContextIsolation && supportsSandbox timeout: 120 +skipEsmAutoTransform: true diff --git a/test/e2e/test-apps/other/main-process-module/recipe.yml b/test/e2e/test-apps/other/main-process-module/recipe.yml index fdd7322b..f2012988 100644 --- a/test/e2e/test-apps/other/main-process-module/recipe.yml +++ b/test/e2e/test-apps/other/main-process-module/recipe.yml @@ -2,3 +2,4 @@ description: Webpack app with error in main process command: yarn && yarn build condition: supportsContextIsolation && supportsSandbox timeout: 120 +skipEsmAutoTransform: true diff --git a/test/e2e/test-apps/other/net-breadcrumbs-tracing/recipe.yml b/test/e2e/test-apps/other/net-breadcrumbs-tracing/recipe.yml index 7880c43c..f52bac34 100644 --- a/test/e2e/test-apps/other/net-breadcrumbs-tracing/recipe.yml +++ b/test/e2e/test-apps/other/net-breadcrumbs-tracing/recipe.yml @@ -1,2 +1,3 @@ description: Electron net Tracing command: yarn +skipEsmAutoTransform: true diff --git a/test/e2e/test-apps/other/net-breadcrumbs/recipe.yml b/test/e2e/test-apps/other/net-breadcrumbs/recipe.yml index 9909938d..c9b3c50c 100644 --- a/test/e2e/test-apps/other/net-breadcrumbs/recipe.yml +++ b/test/e2e/test-apps/other/net-breadcrumbs/recipe.yml @@ -1,2 +1,3 @@ description: Electron net Breadcrumbs command: yarn +skipEsmAutoTransform: true diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 35d037d7..21dd62de 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.7","25.9.0","26.3.0","27.0.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.1","26.4.0","27.0.0","28.0.0-alpha.3"] From 2bf8a549416c1109104175356aa361e699484d9e Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 17 Oct 2023 18:39:24 +0200 Subject: [PATCH 169/239] feat: Renderer process ANR detection with stack traces (#770) --- src/common/ipc.ts | 29 ++++ src/index.ts | 14 +- src/main/anr.ts | 145 +++++++++++++++--- src/main/index.ts | 2 +- src/main/ipc.ts | 21 ++- src/preload/index.ts | 3 +- src/preload/legacy.ts | 3 +- src/renderer/anr.ts | 27 ++++ src/renderer/ipc.ts | 7 +- src/renderer/sdk.ts | 30 +++- test/e2e/test-apps/anr/anr-main/src/main.js | 5 +- .../e2e/test-apps/anr/anr-renderer/event.json | 93 +++++++++++ .../test-apps/anr/anr-renderer/package.json | 8 + .../e2e/test-apps/anr/anr-renderer/recipe.yml | 4 + .../test-apps/anr/anr-renderer/src/index.html | 29 ++++ .../test-apps/anr/anr-renderer/src/main.js | 22 +++ 16 files changed, 398 insertions(+), 44 deletions(-) create mode 100644 src/renderer/anr.ts create mode 100644 test/e2e/test-apps/anr/anr-renderer/event.json create mode 100644 test/e2e/test-apps/anr/anr-renderer/package.json create mode 100644 test/e2e/test-apps/anr/anr-renderer/recipe.yml create mode 100644 test/e2e/test-apps/anr/anr-renderer/src/index.html create mode 100644 test/e2e/test-apps/anr/anr-renderer/src/main.js diff --git a/src/common/ipc.ts b/src/common/ipc.ts index 80934a0e..ac26f837 100644 --- a/src/common/ipc.ts +++ b/src/common/ipc.ts @@ -9,6 +9,34 @@ export enum IPCChannel { SCOPE = 'sentry-electron.scope', /** IPC to pass envelopes to the main process. */ ENVELOPE = 'sentry-electron.envelope', + /** IPC to pass renderer status updates */ + STATUS = 'sentry-electron.status', +} + +export interface RendererProcessAnrOptions { + /** + * Interval to send heartbeat messages to the child process. + * + * Defaults to 1000ms. + */ + pollInterval: number; + /** + * The number of milliseconds to wait before considering the renderer process to be unresponsive. + * + * Defaults to 5000ms. + */ + anrThreshold: number; + /** + * Whether to capture a stack trace when the renderer process is unresponsive. + * + * Defaults to `false`. + */ + captureStackTrace: boolean; +} + +export interface RendererStatus { + status: 'alive' | 'visible' | 'hidden'; + config: RendererProcessAnrOptions; } export interface IPCInterface { @@ -16,6 +44,7 @@ export interface IPCInterface { sendScope: (scope: string) => void; sendEvent: (event: string) => void; sendEnvelope: (evn: Uint8Array | string) => void; + sendStatus: (state: RendererStatus) => void; } export const RENDERER_ID_HEADER = 'sentry-electron-renderer-id'; diff --git a/src/index.ts b/src/index.ts index 358c4638..2984eaa4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -64,7 +64,7 @@ interface ProcessEntryPoint { init: (options: Partial<ElectronOptions>) => void; close?: (timeout?: number) => Promise<boolean>; flush?: (timeout?: number) => Promise<boolean>; - enableAnrDetection?(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void>; + enableMainProcessAnrDetection?(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void>; } /** Fetches the SDK entry point for the current process */ @@ -178,25 +178,25 @@ export async function flush(timeout?: number): Promise<boolean> { * child process. * * ```js - * import { init, enableAnrDetection } from '@sentry/electron'; + * import { init, enableMainProcessAnrDetection } from '@sentry/electron'; * * init({ dsn: "__DSN__" }); * * // with ESM + Electron v28+ - * await enableAnrDetection({ captureStackTrace: true }); + * await enableMainProcessAnrDetection({ captureStackTrace: true }); * runApp(); * * // with CJS - * enableAnrDetection({ captureStackTrace: true }).then(() => { + * enableMainProcessAnrDetection({ captureStackTrace: true }).then(() => { * runApp(); * }); * ``` */ -export async function enableAnrDetection(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void> { +export function enableMainProcessAnrDetection(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void> { const entryPoint = getEntryPoint(); - if (entryPoint.enableAnrDetection) { - return entryPoint.enableAnrDetection(options); + if (entryPoint.enableMainProcessAnrDetection) { + return entryPoint.enableMainProcessAnrDetection(options); } throw new Error('ANR detection should be started in the main process'); diff --git a/src/main/anr.ts b/src/main/anr.ts index 6ed2738d..d74a70d4 100644 --- a/src/main/anr.ts +++ b/src/main/anr.ts @@ -1,30 +1,120 @@ -import { enableAnrDetection as enableNodeAnrDetection } from '@sentry/node'; -import { app } from 'electron'; +import { + captureEvent, + enableAnrDetection as enableNodeAnrDetection, + getCurrentHub, + getModuleFromFilename, + StackFrame, +} from '@sentry/node'; +import { Event } from '@sentry/types'; +import { createDebugPauseMessageHandler, logger, watchdogTimer } from '@sentry/utils'; +import { app, WebContents } from 'electron'; +import { RendererStatus } from '../common'; import { ELECTRON_MAJOR_VERSION } from './electron-normalize'; +import { ElectronMainOptions } from './sdk'; -type MainProcessOptions = Parameters<typeof enableNodeAnrDetection>[0]; +function getRendererName(contents: WebContents): string | undefined { + const options = getCurrentHub().getClient()?.getOptions() as ElectronMainOptions | undefined; + return options?.getRendererName?.(contents); +} + +function sendRendererAnrEvent(contents: WebContents, blockedMs: number, frames?: StackFrame[]): void { + const rendererName = getRendererName(contents) || 'renderer'; -interface Options { - /** - * Main process ANR options. - * - * Set to false to disable ANR detection in the main process. - */ - mainProcess?: MainProcessOptions | false; + const event: Event = { + level: 'error', + exception: { + values: [ + { + type: 'ApplicationNotResponding', + value: `Application Not Responding for at least ${blockedMs} ms`, + stacktrace: { frames }, + mechanism: { + // This ensures the UI doesn't say 'Crashed in' for the stack trace + type: 'ANR', + }, + }, + ], + }, + tags: { + 'event.process': rendererName, + }, + }; + + captureEvent(event); } -function enableAnrMainProcess(options: MainProcessOptions): Promise<void> { - if (ELECTRON_MAJOR_VERSION < 4) { - throw new Error('Main process ANR detection is only supported on Electron v4+'); - } +function rendererDebugger(contents: WebContents, pausedStack: (frames: StackFrame[]) => void): () => void { + contents.debugger.attach('1.3'); - const mainOptions = { - entryScript: app.getAppPath(), - ...options, + const messageHandler = createDebugPauseMessageHandler( + (cmd) => contents.debugger.sendCommand(cmd), + getModuleFromFilename, + pausedStack, + ); + + contents.debugger.on('message', (_, method, params) => { + messageHandler({ method, params } as Parameters<typeof messageHandler>[0]); + }); + + // In node, we enable just before pausing but for Chrome, the debugger must be enabled before he ANR event occurs + void contents.debugger.sendCommand('Debugger.enable'); + + return () => { + return contents.debugger.sendCommand('Debugger.pause'); }; +} - return enableNodeAnrDetection(mainOptions); +let rendererWatchdogTimers: Map<WebContents, ReturnType<typeof watchdogTimer>> | undefined; + +/** Creates a renderer ANR status hook */ +export function createRendererAnrStatusHook(): (status: RendererStatus, contents: WebContents) => void { + function log(message: string, ...args: unknown[]): void { + logger.log(`[Renderer ANR] ${message}`, ...args); + } + + return (message: RendererStatus, contents: WebContents): void => { + rendererWatchdogTimers = rendererWatchdogTimers || new Map(); + + let watchdog = rendererWatchdogTimers.get(contents); + + if (watchdog === undefined) { + log('Renderer sent first status message', message.config); + let pauseAndCapture: (() => void) | undefined; + + if (message.config.captureStackTrace) { + log('Connecting to debugger'); + pauseAndCapture = rendererDebugger(contents, (frames) => { + log('Event captured with stack frames'); + sendRendererAnrEvent(contents, message.config.anrThreshold, frames); + }); + } + + watchdog = watchdogTimer(100, message.config.anrThreshold, async () => { + log('Watchdog timeout'); + if (pauseAndCapture) { + log('Pausing debugger to capture stack trace'); + pauseAndCapture(); + } else { + log('Capturing event'); + sendRendererAnrEvent(contents, message.config.anrThreshold); + } + }); + + contents.once('destroyed', () => { + rendererWatchdogTimers?.delete(contents); + }); + + rendererWatchdogTimers.set(contents, watchdog); + } + + watchdog.poll(); + + if (message.status !== 'alive') { + log('Renderer visibility changed', message.status); + watchdog.enabled(message.status === 'visible'); + } + }; } /** @@ -36,24 +126,29 @@ function enableAnrMainProcess(options: MainProcessOptions): Promise<void> { * child process. * * ```js - * import { init, enableAnrDetection } from '@sentry/electron'; + * import { init, enableMainProcessAnrDetection } from '@sentry/electron'; * * init({ dsn: "__DSN__" }); * * // with ESM + Electron v28+ - * await enableAnrDetection({ mainProcess: { captureStackTrace: true }}); + * await enableMainProcessAnrDetection({ captureStackTrace: true }); * runApp(); * * // with CJS - * enableAnrDetection({ mainProcess: { captureStackTrace: true }}).then(() => { + * enableMainProcessAnrDetection({ captureStackTrace: true }).then(() => { * runApp(); * }); * ``` */ -export async function enableAnrDetection(options: Options = {}): Promise<void> { - if (options.mainProcess !== false) { - return enableAnrMainProcess(options.mainProcess || {}); +export function enableMainProcessAnrDetection(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void> { + if (ELECTRON_MAJOR_VERSION < 4) { + throw new Error('Main process ANR detection is only supported on Electron v4+'); } - return Promise.resolve(); + const mainOptions = { + entryScript: app.getAppPath(), + ...options, + }; + + return enableNodeAnrDetection(mainOptions); } diff --git a/src/main/index.ts b/src/main/index.ts index 393df934..4f17eedf 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -58,4 +58,4 @@ export const Integrations = { ...ElectronMainIntegrations, ...NodeIntegrations } export type { ElectronMainOptions } from './sdk'; export { init, defaultIntegrations } from './sdk'; export { IPCMode } from '../common'; -export { enableAnrDetection } from './anr'; +export { enableMainProcessAnrDetection } from './anr'; diff --git a/src/main/ipc.ts b/src/main/ipc.ts index cc8abda1..4d8bb460 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -4,7 +4,15 @@ import { forEachEnvelopeItem, logger, parseEnvelope, SentryError } from '@sentry import { app, ipcMain, protocol, WebContents, webContents } from 'electron'; import { TextDecoder, TextEncoder } from 'util'; -import { IPCChannel, IPCMode, mergeEvents, normalizeUrlsInReplayEnvelope, PROTOCOL_SCHEME } from '../common'; +import { + IPCChannel, + IPCMode, + mergeEvents, + normalizeUrlsInReplayEnvelope, + PROTOCOL_SCHEME, + RendererStatus, +} from '../common'; +import { createRendererAnrStatusHook } from './anr'; import { registerProtocol, supportsFullProtocol, whenAppReady } from './electron-normalize'; import { ElectronMainOptionsInternal } from './sdk'; @@ -168,6 +176,8 @@ function configureProtocol(options: ElectronMainOptionsInternal): void { }, ]); + const rendererStatusChanged = createRendererAnrStatusHook(); + whenAppReady .then(() => { for (const sesh of options.getSessions()) { @@ -186,6 +196,12 @@ function configureProtocol(options: ElectronMainOptionsInternal): void { handleScope(options, data.toString()); } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.ENVELOPE}`) && data) { handleEnvelope(options, data, getWebContents()); + } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.STATUS}`) && data) { + const contents = getWebContents(); + if (contents) { + const status = (JSON.parse(data.toString()) as { status: RendererStatus }).status; + rendererStatusChanged(status, contents); + } } }); } @@ -214,6 +230,9 @@ function configureClassic(options: ElectronMainOptionsInternal): void { ipcMain.on(IPCChannel.EVENT, ({ sender }, jsonEvent: string) => handleEvent(options, jsonEvent, sender)); ipcMain.on(IPCChannel.SCOPE, (_, jsonScope: string) => handleScope(options, jsonScope)); ipcMain.on(IPCChannel.ENVELOPE, ({ sender }, env: Uint8Array | string) => handleEnvelope(options, env, sender)); + + const rendererStatusChanged = createRendererAnrStatusHook(); + ipcMain.on(IPCChannel.STATUS, ({ sender }, status: RendererStatus) => rendererStatusChanged(status, sender)); } /** Sets up communication channels with the renderer */ diff --git a/src/preload/index.ts b/src/preload/index.ts index 87c80cb7..78f91f99 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -4,7 +4,7 @@ import { contextBridge, ipcRenderer } from 'electron'; -import { IPCChannel } from '../common/ipc'; +import { IPCChannel, RendererStatus } from '../common/ipc'; // eslint-disable-next-line no-restricted-globals if (window.__SENTRY_IPC__) { @@ -16,6 +16,7 @@ if (window.__SENTRY_IPC__) { sendScope: (scopeJson: string) => ipcRenderer.send(IPCChannel.SCOPE, scopeJson), sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson), sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope), + sendStatus: (status: RendererStatus) => ipcRenderer.send(IPCChannel.STATUS, status), }; // eslint-disable-next-line no-restricted-globals diff --git a/src/preload/legacy.ts b/src/preload/legacy.ts index 4fa233b7..9a9d4d15 100644 --- a/src/preload/legacy.ts +++ b/src/preload/legacy.ts @@ -5,7 +5,7 @@ import { contextBridge, crashReporter, ipcRenderer } from 'electron'; import * as electron from 'electron'; -import { IPCChannel } from '../common/ipc'; +import { IPCChannel, RendererStatus } from '../common/ipc'; // eslint-disable-next-line no-restricted-globals if (window.__SENTRY_IPC__) { @@ -27,6 +27,7 @@ if (window.__SENTRY_IPC__) { sendScope: (scopeJson: string) => ipcRenderer.send(IPCChannel.SCOPE, scopeJson), sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson), sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope), + sendStatus: (status: RendererStatus) => ipcRenderer.send(IPCChannel.STATUS, status), }; // eslint-disable-next-line no-restricted-globals diff --git a/src/renderer/anr.ts b/src/renderer/anr.ts new file mode 100644 index 00000000..cfe073c4 --- /dev/null +++ b/src/renderer/anr.ts @@ -0,0 +1,27 @@ +/* eslint-disable no-restricted-globals */ +import { RendererProcessAnrOptions } from '../common/ipc'; +import { getIPC } from './ipc'; + +/** + * Enables the sending of ANR messages to the main process. + */ +export function enableAnrRendererMessages(options: Partial<RendererProcessAnrOptions>): void { + const config: RendererProcessAnrOptions = { + pollInterval: 1_000, + anrThreshold: 5_000, + captureStackTrace: false, + ...options, + }; + + const ipc = getIPC(); + + document.addEventListener('visibilitychange', () => { + ipc.sendStatus({ status: document.visibilityState, config }); + }); + + ipc.sendStatus({ status: document.visibilityState, config }); + + setInterval(() => { + ipc.sendStatus({ status: 'alive', config }); + }, config.pollInterval); +} diff --git a/src/renderer/ipc.ts b/src/renderer/ipc.ts index f018a8dd..549874aa 100644 --- a/src/renderer/ipc.ts +++ b/src/renderer/ipc.ts @@ -2,7 +2,7 @@ /* eslint-disable no-console */ import { logger, uuid4 } from '@sentry/utils'; -import { IPCChannel, IPCInterface, PROTOCOL_SCHEME, RENDERER_ID_HEADER } from '../common/ipc'; +import { IPCChannel, IPCInterface, PROTOCOL_SCHEME, RENDERER_ID_HEADER, RendererStatus } from '../common/ipc'; function buildUrl(channel: IPCChannel): string { // We include sentry_key in the URL so these don't end up in fetch breadcrumbs @@ -47,6 +47,11 @@ function getImplementation(): IPCInterface { // ignore }); }, + sendStatus: (status: RendererStatus) => { + fetch(buildUrl(IPCChannel.STATUS), { method: 'POST', body: JSON.stringify({ status }), headers }).catch(() => { + // ignore + }); + }, }; } } diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 131423c7..19e864bf 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -6,21 +6,39 @@ import { } from '@sentry/browser'; import { logger } from '@sentry/utils'; -import { ensureProcess } from '../common'; +import { ensureProcess, RendererProcessAnrOptions } from '../common'; +import { enableAnrRendererMessages } from './anr'; import { ScopeToMain } from './integrations'; import { electronRendererStackParser } from './stack-parse'; import { makeRendererTransport } from './transport'; export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMain()]; +interface ElectronRendererOptions extends BrowserOptions { + /** + * Enables ANR detection in this renderer process. + * + * Optionally accepts an object of options to configure ANR detection. + * + * { + * pollInterval: number; // Defaults to 1000ms + * anrThreshold: number; // Defaults to 5000ms + * captureStackTrace: boolean; // Defaults to false + * } + * + * Defaults to 'false'. + */ + anrDetection?: Partial<RendererProcessAnrOptions> | boolean; +} + /** * Initialize Sentry in the Electron renderer process * @param options SDK options * @param originalInit Optional init function for a specific framework SDK * @returns */ -export function init<O extends BrowserOptions>( - options: BrowserOptions & O = {} as BrowserOptions & O, +export function init<O extends ElectronRendererOptions>( + options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_74_0: O) => void = browserInit, ): void { @@ -36,7 +54,7 @@ If init has been called in the preload and contextIsolation is disabled, is not window.__SENTRY__RENDERER_INIT__ = true; // We don't want browser session tracking enabled by default because we already have Electron - // specific session tracking + // specific session tracking from the main process. if (options.autoSessionTracking === undefined) { options.autoSessionTracking = false; } @@ -62,6 +80,10 @@ If init has been called in the preload and contextIsolation is disabled, is not options.transport = makeRendererTransport; } + if (options.anrDetection) { + enableAnrRendererMessages(options.anrDetection === true ? {} : options.anrDetection); + } + // We only handle initialScope in the main process otherwise it can cause race conditions over IPC delete options.initialScope; diff --git a/test/e2e/test-apps/anr/anr-main/src/main.js b/test/e2e/test-apps/anr/anr-main/src/main.js index d622faca..c733ffd7 100644 --- a/test/e2e/test-apps/anr/anr-main/src/main.js +++ b/test/e2e/test-apps/anr/anr-main/src/main.js @@ -1,7 +1,7 @@ const crypto = require('crypto'); const { app } = require('electron'); -const { init, enableAnrDetection } = require('@sentry/electron/main'); +const { init, enableMainProcessAnrDetection } = require('@sentry/electron/main'); init({ dsn: '__DSN__', @@ -18,8 +18,7 @@ function longWork() { } } -enableAnrDetection({ mainProcess: { debug: true, anrThreshold: 1000, captureStackTrace: true } }).then(() => { - console.log('main app code'); +enableMainProcessAnrDetection({ anrThreshold: 1000, captureStackTrace: true }).then(() => { app.on('ready', () => { setTimeout(() => { longWork(); diff --git a/test/e2e/test-apps/anr/anr-renderer/event.json b/test/e2e/test-apps/anr/anr-renderer/event.json new file mode 100644 index 00000000..2d99078d --- /dev/null +++ b/test/e2e/test-apps/anr/anr-renderer/event.json @@ -0,0 +1,93 @@ +{ + "method": "envelope", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "appId": "277345", + "data": { + "sdk": { + "name": "sentry.javascript.electron", + "packages": [ + { + "name": "npm:@sentry/electron", + "version": "{{version}}" + } + ], + "version": "{{version}}" + }, + "contexts": { + "app": { + "app_name": "anr-renderer", + "app_version": "1.0.0", + "app_start_time": "{{time}}" + }, + "browser": { + "name": "Chrome" + }, + "chrome": { + "name": "Chrome", + "type": "runtime", + "version": "{{version}}" + }, + "device": { + "arch": "{{arch}}", + "family": "Desktop", + "memory_size": 0, + "free_memory": 0, + "processor_count": 0, + "processor_frequency": 0, + "cpu_description": "{{cpu}}", + "screen_resolution": "{{screen}}", + "screen_density": 1, + "language": "{{language}}" + }, + "node": { + "name": "Node", + "type": "runtime", + "version": "{{version}}" + }, + "os": { + "name": "{{platform}}", + "version": "{{version}}" + }, + "runtime": { + "name": "Electron", + "version": "{{version}}" + } + }, + "release": "anr-renderer@1.0.0", + "environment": "development", + "user": { + "ip_address": "{{auto}}" + }, + "exception": { + "values": [ + { + "type": "ApplicationNotResponding", + "value": "Application Not Responding for at least 1000 ms", + "mechanism": { "type": "ANR" }, + "stacktrace": { + "frames": [ + { + "colno": 0, + "function": "{{function}}", + "in_app": false, + "lineno": 0, + "module": "pbkdf2" + } + ] + } + } + ] + }, + "level": "error", + "event_id": "{{id}}", + "platform": "node", + "timestamp": 0, + "breadcrumbs": [], + "tags": { + "event.environment": "javascript", + "event.origin": "electron", + "event.process": "renderer", + "event_type": "javascript" + } + } +} diff --git a/test/e2e/test-apps/anr/anr-renderer/package.json b/test/e2e/test-apps/anr/anr-renderer/package.json new file mode 100644 index 00000000..c31e4fc1 --- /dev/null +++ b/test/e2e/test-apps/anr/anr-renderer/package.json @@ -0,0 +1,8 @@ +{ + "name": "anr-renderer", + "version": "1.0.0", + "main": "src/main.js", + "dependencies": { + "@sentry/electron": "3.0.0" + } +} diff --git a/test/e2e/test-apps/anr/anr-renderer/recipe.yml b/test/e2e/test-apps/anr/anr-renderer/recipe.yml new file mode 100644 index 00000000..dc3ac921 --- /dev/null +++ b/test/e2e/test-apps/anr/anr-renderer/recipe.yml @@ -0,0 +1,4 @@ +description: ANR Renderer Event +category: ANR +command: yarn +condition: version.major >= 4 diff --git a/test/e2e/test-apps/anr/anr-renderer/src/index.html b/test/e2e/test-apps/anr/anr-renderer/src/index.html new file mode 100644 index 00000000..a160c47c --- /dev/null +++ b/test/e2e/test-apps/anr/anr-renderer/src/index.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + </head> + <body> + <script> + const crypto = require('crypto'); + const { init } = require('@sentry/electron'); + + function longWork() { + for (let i = 0; i < 100; i++) { + const salt = crypto.randomBytes(128).toString('base64'); + // eslint-disable-next-line no-unused-vars + const hash = crypto.pbkdf2Sync('myPassword', salt, 10000, 512, 'sha512'); + } + } + + init({ + debug: true, + anrDetection: { pollInterval: 200, anrThreshold: 1000, captureStackTrace: true }, + }); + + setTimeout(() => { + longWork(); + }, 2000); + </script> + </body> +</html> diff --git a/test/e2e/test-apps/anr/anr-renderer/src/main.js b/test/e2e/test-apps/anr/anr-renderer/src/main.js new file mode 100644 index 00000000..06a7431a --- /dev/null +++ b/test/e2e/test-apps/anr/anr-renderer/src/main.js @@ -0,0 +1,22 @@ +const path = require('path'); + +const { app, BrowserWindow } = require('electron'); +const { init } = require('@sentry/electron/main'); + +init({ + dsn: '__DSN__', + debug: true, + autoSessionTracking: false, + onFatalError: () => {}, +}); + +app.on('ready', () => { + const mainWindow = new BrowserWindow({ + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + }, + }); + + mainWindow.loadFile(path.join(__dirname, 'index.html')); +}); From 9717ee3530c92a2b6c1dc25b5e0186d983b309c1 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 17 Oct 2023 21:47:24 +0200 Subject: [PATCH 170/239] chore: Changelog for 4.14.0 (#778) --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1317d618..38d5a593 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ ## Unreleased +## 4.14.0 + +- feat: Renderer process ANR detection with stack traces (#770) + - Update from [v7.73.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.73.0) to + [v7.74.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.74.0) of JavaScript SDKs +- fix: Hide ANR child process from dock (#777) +- test: Electron v28 main process ESM (#773) + ## 4.13.0 - feat: Add App Not Responding detection for main process (#753) From 47b21bd2f9055d17ce102d5cb4302020c27f290b Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Tue, 17 Oct 2023 20:14:31 +0000 Subject: [PATCH 171/239] release: 4.14.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d46b0f81..0ea2d041 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.13.0", + "version": "4.14.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", @@ -107,4 +107,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} \ No newline at end of file +} From 6105fb58709fe0ccdcb3e06b213ac44c3cc9897d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 19 Oct 2023 19:28:59 +0200 Subject: [PATCH 172/239] test: New Electron versions (#780) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 21dd62de..6b914678 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.1","26.4.0","27.0.0","28.0.0-alpha.3"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.2","26.4.1","27.0.1","28.0.0-alpha.3"] From 060747dc7011c3f916534eafe2db51504c7b33cc Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 1 Nov 2023 10:25:04 +1300 Subject: [PATCH 173/239] feat: Update JavaScript SDKs to 7.76.0 (#783) --- package.json | 15 +- src/main/anr.ts | 24 ++- src/main/integrations/net-breadcrumbs.ts | 2 +- src/main/sdk.ts | 3 +- src/main/sessions.ts | 27 +++ src/renderer/sdk.ts | 2 +- test/e2e/test-apps/anr/anr-main/session.json | 18 ++ test/e2e/test-apps/anr/anr-main/src/main.js | 1 - .../test-apps/anr/anr-renderer/session.json | 18 ++ .../test-apps/anr/anr-renderer/src/main.js | 1 - yarn.lock | 159 ++++++++---------- 11 files changed, 166 insertions(+), 104 deletions(-) create mode 100644 test/e2e/test-apps/anr/anr-main/session.json create mode 100644 test/e2e/test-apps/anr/anr-renderer/session.json diff --git a/package.json b/package.json index 0ea2d041..b6533d9c 100644 --- a/package.json +++ b/package.json @@ -55,20 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.74.0", - "@sentry/core": "7.74.0", - "@sentry/node": "7.74.0", - "@sentry/types": "7.74.0", - "@sentry/utils": "7.74.0", + "@sentry/browser": "7.76.0", + "@sentry/core": "7.76.0", + "@sentry/node": "7.76.0", + "@sentry/types": "7.76.0", + "@sentry/utils": "7.76.0", "deepmerge": "4.3.0", - "lru_map": "^0.3.3", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.74.0", - "@sentry-internal/typescript": "7.74.0", + "@sentry-internal/eslint-config-sdk": "7.76.0", + "@sentry-internal/typescript": "7.76.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/main/anr.ts b/src/main/anr.ts index d74a70d4..a6c8f68e 100644 --- a/src/main/anr.ts +++ b/src/main/anr.ts @@ -12,6 +12,7 @@ import { app, WebContents } from 'electron'; import { RendererStatus } from '../common'; import { ELECTRON_MAJOR_VERSION } from './electron-normalize'; import { ElectronMainOptions } from './sdk'; +import { sessionAnr } from './sessions'; function getRendererName(contents: WebContents): string | undefined { const options = getCurrentHub().getClient()?.getOptions() as ElectronMainOptions | undefined; @@ -19,6 +20,8 @@ function getRendererName(contents: WebContents): string | undefined { } function sendRendererAnrEvent(contents: WebContents, blockedMs: number, frames?: StackFrame[]): void { + sessionAnr(); + const rendererName = getRendererName(contents) || 'renderer'; const event: Event = { @@ -67,6 +70,25 @@ function rendererDebugger(contents: WebContents, pausedStack: (frames: StackFram let rendererWatchdogTimers: Map<WebContents, ReturnType<typeof watchdogTimer>> | undefined; +function createHrTimer(): { getTimeMs: () => number; reset: () => void } { + let lastPoll = process.hrtime(); + + return { + getTimeMs: (): number => { + const [seconds, nanoSeconds] = process.hrtime(lastPoll); + return Math.floor(seconds * 1e3 + nanoSeconds / 1e6); + }, + reset: (): void => { + lastPoll = process.hrtime(); + }, + }; +} + +/** Are we currently running in the ANR child process */ +export function isAnrChildProcess(): boolean { + return !!process.env.SENTRY_ANR_CHILD_PROCESS; +} + /** Creates a renderer ANR status hook */ export function createRendererAnrStatusHook(): (status: RendererStatus, contents: WebContents) => void { function log(message: string, ...args: unknown[]): void { @@ -90,7 +112,7 @@ export function createRendererAnrStatusHook(): (status: RendererStatus, contents }); } - watchdog = watchdogTimer(100, message.config.anrThreshold, async () => { + watchdog = watchdogTimer(createHrTimer, 100, message.config.anrThreshold, async () => { log('Watchdog timeout'); if (pauseAndCapture) { log('Pausing debugger to capture stack trace'); diff --git a/src/main/integrations/net-breadcrumbs.ts b/src/main/integrations/net-breadcrumbs.ts index 237abea8..a6cb4816 100644 --- a/src/main/integrations/net-breadcrumbs.ts +++ b/src/main/integrations/net-breadcrumbs.ts @@ -7,10 +7,10 @@ import { fill, generateSentryTraceHeader, logger, + LRUMap, stringMatchesSomePattern, } from '@sentry/utils'; import { ClientRequest, ClientRequestConstructorOptions, IncomingMessage, net } from 'electron'; -import { LRUMap } from 'lru_map'; import * as urlModule from 'url'; type ShouldTraceFn = (method: string, url: string) => boolean; diff --git a/src/main/sdk.ts b/src/main/sdk.ts index 4ca7e730..b0ab3c04 100644 --- a/src/main/sdk.ts +++ b/src/main/sdk.ts @@ -5,6 +5,7 @@ import { defaultIntegrations as defaultNodeIntegrations, init as nodeInit, NodeO import { Integration, Options } from '@sentry/types'; import { app, Session, session, WebContents } from 'electron'; +import { isAnrChildProcess } from './anr'; import { getDefaultEnvironment, getDefaultReleaseName } from './context'; import { AdditionalContext, @@ -96,7 +97,7 @@ export function init(userOptions: ElectronMainOptions): void { const options: ElectronMainOptionsInternal = Object.assign(defaultOptions, userOptions); const defaults = defaultIntegrations; - if (process.env.SENTRY_ANR_CHILD_PROCESS) { + if (isAnrChildProcess()) { app.dock?.hide(); options.autoSessionTracking = false; options.tracesSampleRate = 0; diff --git a/src/main/sessions.ts b/src/main/sessions.ts index 080a8522..51ec7736 100644 --- a/src/main/sessions.ts +++ b/src/main/sessions.ts @@ -4,6 +4,7 @@ import { SerializedSession, Session, SessionContext, SessionStatus } from '@sent import { logger } from '@sentry/utils'; import { app } from 'electron'; +import { isAnrChildProcess } from './anr'; import { sentryCachePath } from './fs'; import { Store } from './store'; @@ -93,6 +94,11 @@ export async function unreportedDuringLastSession(crashDate: Date | undefined): export async function checkPreviousSession(crashed: boolean): Promise<void> { const client = getCurrentHub().getClient<NodeClient>(); + // We should not check the session storage if we are in an ANR child process + if (isAnrChildProcess()) { + return; + } + const previous = await previousSession; if (previous && client) { @@ -147,6 +153,27 @@ export function sessionCrashed(): void { hub.captureSession(); } +/** Sets the current session as ANR */ +export function sessionAnr(): void { + // stop persisting session + if (persistTimer) { + clearInterval(persistTimer); + } + + const hub = getCurrentHub(); + const session = hub.getScope()?.getSession(); + + if (!session) { + return; + } + + if (session.status === 'ok') { + logger.log('Setting session as abnormal ANR'); + updateSession(session, { status: 'abnormal', abnormal_mechanism: 'anr_foreground' }); + hub.captureSession(); + } +} + /** * End the current session on app exit */ diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 19e864bf..a64b42c3 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -40,7 +40,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_74_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_76_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/test/e2e/test-apps/anr/anr-main/session.json b/test/e2e/test-apps/anr/anr-main/session.json new file mode 100644 index 00000000..aeee20e1 --- /dev/null +++ b/test/e2e/test-apps/anr/anr-main/session.json @@ -0,0 +1,18 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": true, + "started": 0, + "timestamp": 0, + "status": "abnormal", + "abnormal_mechanism": "anr_foreground", + "errors": 0, + "duration": 0, + "attrs": { + "release": "anr-main@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/anr/anr-main/src/main.js b/test/e2e/test-apps/anr/anr-main/src/main.js index c733ffd7..df404fc1 100644 --- a/test/e2e/test-apps/anr/anr-main/src/main.js +++ b/test/e2e/test-apps/anr/anr-main/src/main.js @@ -6,7 +6,6 @@ const { init, enableMainProcessAnrDetection } = require('@sentry/electron/main') init({ dsn: '__DSN__', debug: true, - autoSessionTracking: false, onFatalError: () => {}, }); diff --git a/test/e2e/test-apps/anr/anr-renderer/session.json b/test/e2e/test-apps/anr/anr-renderer/session.json new file mode 100644 index 00000000..95a09dcb --- /dev/null +++ b/test/e2e/test-apps/anr/anr-renderer/session.json @@ -0,0 +1,18 @@ +{ + "appId": "277345", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "method": "envelope", + "data": { + "sid": "{{id}}", + "init": true, + "started": 0, + "timestamp": 0, + "status": "abnormal", + "abnormal_mechanism": "anr_foreground", + "errors": 0, + "duration": 0, + "attrs": { + "release": "anr-renderer@1.0.0" + } + } +} diff --git a/test/e2e/test-apps/anr/anr-renderer/src/main.js b/test/e2e/test-apps/anr/anr-renderer/src/main.js index 06a7431a..f0468b6d 100644 --- a/test/e2e/test-apps/anr/anr-renderer/src/main.js +++ b/test/e2e/test-apps/anr/anr-renderer/src/main.js @@ -6,7 +6,6 @@ const { init } = require('@sentry/electron/main'); init({ dsn: '__DSN__', debug: true, - autoSessionTracking: false, onFatalError: () => {}, }); diff --git a/yarn.lock b/yarn.lock index 9a194ea1..5181de8a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.74.0": - version "7.74.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.74.0.tgz#dade78c180cad8aaeb1e239bc5451b15b8a3a7c0" - integrity sha512-ornnUt2BOD/5R5nzKgoExACrLFPfp04cyC2hcGa6U3DPvYb4aQsO2A3xeftsGZRiQ0OfAACvtajIKNkn61nppQ== +"@sentry-internal/eslint-config-sdk@7.76.0": + version "7.76.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.76.0.tgz#40888c53176c95fd46ff805a5c88207b1e554e8e" + integrity sha512-kUiJhUx2/OgMAiKZ2pfKI9HHmgIdj6DGWSF3Uyzcd+IGix+Gk/Or84D6whyq0+bwvDfi+VcVW/zDxG63lvAYZw== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.74.0" - "@sentry-internal/typescript" "7.74.0" + "@sentry-internal/eslint-plugin-sdk" "7.76.0" + "@sentry-internal/typescript" "7.76.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,84 +180,78 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.74.0": - version "7.74.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.74.0.tgz#4ceecc6e84ed2a8e07c41d5f52b15188ce251908" - integrity sha512-j0rTZKn4Mj0ywOIco8SxfI2f0xXo0O7dWlw8jfuPrYtn3BBtJc0/7lilz1ZwYTYKDAbDuhxKITaVP1V1R0ADDg== +"@sentry-internal/eslint-plugin-sdk@7.76.0": + version "7.76.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.76.0.tgz#a0cca6254fd1e3e9cefdd40b9e3a9f4257b5bf44" + integrity sha512-/F7LcVpiPUfgz2roC3TwoLrQ9y2/lihRNy6xUUGlWlKs41qOvG2LFJCRa0gKpYCodWbWsRsZ2C8kI32vpCOnpw== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.74.0": - version "7.74.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.74.0.tgz#11b0762d0b18b01cc18dfb1e40bbaa41c6f97452" - integrity sha512-JK6IRGgdtZjswGfaGIHNWIThffhOHzVIIaGmglui+VFIzOsOqePjoxaDV0MEvzafxXZD7eWqGE5RGuZ0n6HFVg== - dependencies: - "@sentry/core" "7.74.0" - "@sentry/types" "7.74.0" - "@sentry/utils" "7.74.0" - tslib "^2.4.1 || ^1.9.3" - -"@sentry-internal/typescript@7.74.0": - version "7.74.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.74.0.tgz#2dec70a1eec2684c8fc7abdc6b3ba03944c059c3" - integrity sha512-Xq71bUhZ2GIT76VfhNyJb9k5lmSDVFuaj9uy8PZ0W1DkY0fE4FEx2xWQUXuYy7M5+2QAHesGjCzHxZO2cx1HAQ== - -"@sentry/browser@7.74.0": - version "7.74.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.74.0.tgz#4a01bccb34059894007b9a22a89892f2c4dff130" - integrity sha512-Njr8216Z1dFUcl6NqBOk20dssK9SjoVddY74Xq+Q4p3NfXBG3lkMcACXor7SFoJRZXq8CZWGS13Cc5KwViRw4g== - dependencies: - "@sentry-internal/tracing" "7.74.0" - "@sentry/core" "7.74.0" - "@sentry/replay" "7.74.0" - "@sentry/types" "7.74.0" - "@sentry/utils" "7.74.0" - tslib "^2.4.1 || ^1.9.3" - -"@sentry/core@7.74.0": - version "7.74.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.74.0.tgz#2cfcb5133a4a3f82fbac09d3573ea9f508fb7c67" - integrity sha512-83NRuqn7nDZkSVBN5yJQqcpXDG4yMYiB7TkYUKrGTzBpRy6KUOrkCdybuKk0oraTIGiGSe5WEwCFySiNgR9FzA== - dependencies: - "@sentry/types" "7.74.0" - "@sentry/utils" "7.74.0" - tslib "^2.4.1 || ^1.9.3" - -"@sentry/node@7.74.0": - version "7.74.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.74.0.tgz#c6b6704a3a238155f047972fd4c6944004347aba" - integrity sha512-uBmW2/z0cz/WFIG74ZF7lSipO0XNzMf9yrdqnZXnGDYsUZE4I4QiqDN0hNi6fkTgf9MYRC8uFem2OkAvyPJ74Q== - dependencies: - "@sentry-internal/tracing" "7.74.0" - "@sentry/core" "7.74.0" - "@sentry/types" "7.74.0" - "@sentry/utils" "7.74.0" - cookie "^0.5.0" +"@sentry-internal/tracing@7.76.0": + version "7.76.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.76.0.tgz#36c54425bc20c08e569e6da52e13d325611cad66" + integrity sha512-QQVIv+LS2sbGf/e5P2dRisHzXpy02dAcLqENLPG4sZ9otRaFNjdFYEqnlJ4qko+ORpJGQEQp/BX7Q/qzZQHlAg== + dependencies: + "@sentry/core" "7.76.0" + "@sentry/types" "7.76.0" + "@sentry/utils" "7.76.0" + +"@sentry-internal/typescript@7.76.0": + version "7.76.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.76.0.tgz#0a9845859d6a05a372a3c1bd869ecc9b3085fb84" + integrity sha512-zQUX7ptLml27Qze+BVWtpiujVhRXLaCjI85d7EbySbVXAM3oz1Dp9IEPKXryrqlxD+41O/qcLNG21F01u6866g== + +"@sentry/browser@7.76.0": + version "7.76.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.76.0.tgz#7d73573790023523f7d9c3757b8424b7ad60d664" + integrity sha512-83xA+cWrBhhkNuMllW5ucFsEO2NlUh2iBYtmg07lp3fyVW+6+b1yMKRnc4RFArJ+Wcq6UO+qk2ZEvrSAts1wEw== + dependencies: + "@sentry-internal/tracing" "7.76.0" + "@sentry/core" "7.76.0" + "@sentry/replay" "7.76.0" + "@sentry/types" "7.76.0" + "@sentry/utils" "7.76.0" + +"@sentry/core@7.76.0": + version "7.76.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.76.0.tgz#b0d1dc399a862ea8a1c8a1c60a409e92eaf8e9e1" + integrity sha512-M+ptkCTeCNf6fn7p2MmEb1Wd9/JXUWxIT/0QEc+t11DNR4FYy1ZP2O9Zb3Zp2XacO7ORrlL3Yc+VIfl5JTgjfw== + dependencies: + "@sentry/types" "7.76.0" + "@sentry/utils" "7.76.0" + +"@sentry/node@7.76.0": + version "7.76.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.76.0.tgz#9efc8bbe4825b4a5a4f853210364d21980dd790e" + integrity sha512-C+YZ5S5W9oTphdWTBgV+3nDdcV1ldnupIHylHzf2Co+xNtJ76V06N5NjdJ/l9+qvQjMn0DdSp7Uu7KCEeNBT/g== + dependencies: + "@sentry-internal/tracing" "7.76.0" + "@sentry/core" "7.76.0" + "@sentry/types" "7.76.0" + "@sentry/utils" "7.76.0" https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^2.4.1 || ^1.9.3" -"@sentry/replay@7.74.0": - version "7.74.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.74.0.tgz#618d40f7c9ecc7589dd14df0c560b20a24839d3f" - integrity sha512-GoYa3cHTTFVI/J1cnZ0i4X128mf/JljaswO3PWNTe2k3lSHq/LM5aV0keClRvwM0W8hlix8oOTT06nnenOUmmw== +"@sentry/replay@7.76.0": + version "7.76.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.76.0.tgz#bccf9ea4a6efc332a79d6a78f923697b9b283371" + integrity sha512-OACT7MfMHC/YGKnKST8SF1d6znr3Yu8fpUpfVVh2t9TNeh3+cQJVTOliHDqLy+k9Ljd5FtitgSn4IHtseCHDLQ== dependencies: - "@sentry/core" "7.74.0" - "@sentry/types" "7.74.0" - "@sentry/utils" "7.74.0" + "@sentry-internal/tracing" "7.76.0" + "@sentry/core" "7.76.0" + "@sentry/types" "7.76.0" + "@sentry/utils" "7.76.0" -"@sentry/types@7.74.0": - version "7.74.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.74.0.tgz#810a62cd28db21c5f15f131da6525d7ddf7a29db" - integrity sha512-rI5eIRbUycWjn6s6o3yAjjWtIvYSxZDdnKv5je2EZINfLKcMPj1dkl6wQd2F4y7gLfD/N6Y0wZYIXC3DUdJQQg== +"@sentry/types@7.76.0": + version "7.76.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.76.0.tgz#628c9899bfa82ea762708314c50fd82f2138587d" + integrity sha512-vj6z+EAbVrKAXmJPxSv/clpwS9QjPqzkraMFk2hIdE/kii8s8kwnkBwTSpIrNc8GnzV3qYC4r3qD+BXDxAGPaw== -"@sentry/utils@7.74.0": - version "7.74.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.74.0.tgz#e0a16d345b2af6f8b09d157c8c8a3145d7a2070a" - integrity sha512-k3np8nuTPtx5KDODPtULfFln4UXdE56MZCcF19Jv6Ljxf+YN/Ady1+0Oi3e0XoSvFpWNyWnglauT7M65qCE6kg== +"@sentry/utils@7.76.0": + version "7.76.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.76.0.tgz#6b540b387d3ac539abd20978f4d3ae235114f6ab" + integrity sha512-40jFD+yfQaKpFYINghdhovzec4IEpB7aAuyH/GtE7E0gLpcqnC72r55krEIVILfqIR2Mlr5OKUzyeoCyWAU/yw== dependencies: - "@sentry/types" "7.74.0" - tslib "^2.4.1 || ^1.9.3" + "@sentry/types" "7.76.0" "@sindresorhus/is@^4.0.0": version "4.6.0" @@ -1178,11 +1172,6 @@ content-type@^1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -cookie@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - cookies@~0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90" @@ -2680,11 +2669,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" @@ -3636,11 +3620,6 @@ tslib@^2.3.1, tslib@^2.5.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== -"tslib@^2.4.1 || ^1.9.3": - version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== - tsscmp@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" From eb5f061065a3bf425e1a8b12ddfb7e347c21df7e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 12 Nov 2023 22:29:02 +1300 Subject: [PATCH 174/239] test: New Sentry SDK version (#779) Co-authored-by: timfish <timfish@users.noreply.github.com> --- package.json | 16 ++--- src/renderer/sdk.ts | 2 +- yarn.lock | 138 ++++++++++++++++++++++---------------------- 3 files changed, 78 insertions(+), 78 deletions(-) diff --git a/package.json b/package.json index b6533d9c..6dee5f8e 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.76.0", - "@sentry/core": "7.76.0", - "@sentry/node": "7.76.0", - "@sentry/types": "7.76.0", - "@sentry/utils": "7.76.0", + "@sentry/browser": "7.80.0", + "@sentry/core": "7.80.0", + "@sentry/node": "7.80.0", + "@sentry/types": "7.80.0", + "@sentry/utils": "7.80.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.76.0", - "@sentry-internal/typescript": "7.76.0", + "@sentry-internal/eslint-config-sdk": "7.80.0", + "@sentry-internal/typescript": "7.80.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", @@ -106,4 +106,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} +} \ No newline at end of file diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index a64b42c3..32cc1c16 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -40,7 +40,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_76_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_80_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 5181de8a..224854ea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.76.0": - version "7.76.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.76.0.tgz#40888c53176c95fd46ff805a5c88207b1e554e8e" - integrity sha512-kUiJhUx2/OgMAiKZ2pfKI9HHmgIdj6DGWSF3Uyzcd+IGix+Gk/Or84D6whyq0+bwvDfi+VcVW/zDxG63lvAYZw== +"@sentry-internal/eslint-config-sdk@7.80.0": + version "7.80.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.80.0.tgz#100f164097aaeac99db2e88d8f87e4667920b9ed" + integrity sha512-2jHITL4JQPfKUNIB49Mmcc3NRXIcQoeIYWTeIEldm7BQlWr0H3eMMnd6QdQ8VIXC6t1LAve9See1zB0bqDitlw== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.76.0" - "@sentry-internal/typescript" "7.76.0" + "@sentry-internal/eslint-plugin-sdk" "7.80.0" + "@sentry-internal/typescript" "7.80.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,78 +180,78 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.76.0": - version "7.76.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.76.0.tgz#a0cca6254fd1e3e9cefdd40b9e3a9f4257b5bf44" - integrity sha512-/F7LcVpiPUfgz2roC3TwoLrQ9y2/lihRNy6xUUGlWlKs41qOvG2LFJCRa0gKpYCodWbWsRsZ2C8kI32vpCOnpw== +"@sentry-internal/eslint-plugin-sdk@7.80.0": + version "7.80.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.80.0.tgz#4824350ea3cd9bc0656398384724745e17291231" + integrity sha512-AmfeuXMjOp3MA6BM3xaAhRDQVtXz0lDjg9ACi7s/mgF2oJm12gkqZ/QJNDtyNOldIlo/UfCcQRPeu7zSNBWOng== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.76.0": - version "7.76.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.76.0.tgz#36c54425bc20c08e569e6da52e13d325611cad66" - integrity sha512-QQVIv+LS2sbGf/e5P2dRisHzXpy02dAcLqENLPG4sZ9otRaFNjdFYEqnlJ4qko+ORpJGQEQp/BX7Q/qzZQHlAg== - dependencies: - "@sentry/core" "7.76.0" - "@sentry/types" "7.76.0" - "@sentry/utils" "7.76.0" - -"@sentry-internal/typescript@7.76.0": - version "7.76.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.76.0.tgz#0a9845859d6a05a372a3c1bd869ecc9b3085fb84" - integrity sha512-zQUX7ptLml27Qze+BVWtpiujVhRXLaCjI85d7EbySbVXAM3oz1Dp9IEPKXryrqlxD+41O/qcLNG21F01u6866g== - -"@sentry/browser@7.76.0": - version "7.76.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.76.0.tgz#7d73573790023523f7d9c3757b8424b7ad60d664" - integrity sha512-83xA+cWrBhhkNuMllW5ucFsEO2NlUh2iBYtmg07lp3fyVW+6+b1yMKRnc4RFArJ+Wcq6UO+qk2ZEvrSAts1wEw== - dependencies: - "@sentry-internal/tracing" "7.76.0" - "@sentry/core" "7.76.0" - "@sentry/replay" "7.76.0" - "@sentry/types" "7.76.0" - "@sentry/utils" "7.76.0" - -"@sentry/core@7.76.0": - version "7.76.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.76.0.tgz#b0d1dc399a862ea8a1c8a1c60a409e92eaf8e9e1" - integrity sha512-M+ptkCTeCNf6fn7p2MmEb1Wd9/JXUWxIT/0QEc+t11DNR4FYy1ZP2O9Zb3Zp2XacO7ORrlL3Yc+VIfl5JTgjfw== - dependencies: - "@sentry/types" "7.76.0" - "@sentry/utils" "7.76.0" - -"@sentry/node@7.76.0": - version "7.76.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.76.0.tgz#9efc8bbe4825b4a5a4f853210364d21980dd790e" - integrity sha512-C+YZ5S5W9oTphdWTBgV+3nDdcV1ldnupIHylHzf2Co+xNtJ76V06N5NjdJ/l9+qvQjMn0DdSp7Uu7KCEeNBT/g== - dependencies: - "@sentry-internal/tracing" "7.76.0" - "@sentry/core" "7.76.0" - "@sentry/types" "7.76.0" - "@sentry/utils" "7.76.0" +"@sentry-internal/tracing@7.80.0": + version "7.80.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.80.0.tgz#f9a6c0456b3cbf4a53c986a0b9208572d80e0756" + integrity sha512-P1Ab9gamHLsbH9D82i1HY8xfq9dP8runvc4g50AAd6OXRKaJ45f2KGRZUmnMEVqBQ7YoPYp2LFMkrhNYbcZEoQ== + dependencies: + "@sentry/core" "7.80.0" + "@sentry/types" "7.80.0" + "@sentry/utils" "7.80.0" + +"@sentry-internal/typescript@7.80.0": + version "7.80.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.80.0.tgz#30cae7c5bd8049f1a4083de351f396091d749e60" + integrity sha512-CXXh8vm4a0ZJhlMv4YcapeDmJh1pGtlO7wsdmur4Pu2YF+32z8lDxE5sKrItSdgu7RX5eR7aGQGiJI+YKZgsDQ== + +"@sentry/browser@7.80.0": + version "7.80.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.80.0.tgz#385fb59ac1d52b67919087f3d7044575ae0abbdd" + integrity sha512-Ngwjc+yyf/aH5q7iQM1LeDNlhM1Ilt4ZLUogTghZR/guwNWmCtk3OHcjOLz7fxBBj9wGFUc2pHPyeYM6bQhrEw== + dependencies: + "@sentry-internal/tracing" "7.80.0" + "@sentry/core" "7.80.0" + "@sentry/replay" "7.80.0" + "@sentry/types" "7.80.0" + "@sentry/utils" "7.80.0" + +"@sentry/core@7.80.0": + version "7.80.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.80.0.tgz#7b8a460c19160b81ade20080333189f1a80c1410" + integrity sha512-nJiiymdTSEyI035/rdD3VOq6FlOZ2wWLR5bit9LK8a3rzHU3UXkwScvEo6zYgs0Xp1sC0yu1S9+0BEiYkmi29A== + dependencies: + "@sentry/types" "7.80.0" + "@sentry/utils" "7.80.0" + +"@sentry/node@7.80.0": + version "7.80.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.80.0.tgz#7e060bc934a58a442b786246d46a5a0dd822ae44" + integrity sha512-J35fqe8J5ac/17ZXT0ML3opYGTOclqYNE9Sybs1y9n6BqacHyzH8By72YrdI03F7JJDHwrcGw+/H8hGpkCwi0Q== + dependencies: + "@sentry-internal/tracing" "7.80.0" + "@sentry/core" "7.80.0" + "@sentry/types" "7.80.0" + "@sentry/utils" "7.80.0" https-proxy-agent "^5.0.0" -"@sentry/replay@7.76.0": - version "7.76.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.76.0.tgz#bccf9ea4a6efc332a79d6a78f923697b9b283371" - integrity sha512-OACT7MfMHC/YGKnKST8SF1d6znr3Yu8fpUpfVVh2t9TNeh3+cQJVTOliHDqLy+k9Ljd5FtitgSn4IHtseCHDLQ== +"@sentry/replay@7.80.0": + version "7.80.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.80.0.tgz#0626d85af1d8573038d52ae9e244e3e95fa47385" + integrity sha512-wWnpuJq3OaDLp1LutE4oxWXnau04fvwuzBjuaFvOXOV+pB/kn+pDPuVOC5+FH/RMRZ5ftwX5+dF6fojfcLVGCg== dependencies: - "@sentry-internal/tracing" "7.76.0" - "@sentry/core" "7.76.0" - "@sentry/types" "7.76.0" - "@sentry/utils" "7.76.0" + "@sentry-internal/tracing" "7.80.0" + "@sentry/core" "7.80.0" + "@sentry/types" "7.80.0" + "@sentry/utils" "7.80.0" -"@sentry/types@7.76.0": - version "7.76.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.76.0.tgz#628c9899bfa82ea762708314c50fd82f2138587d" - integrity sha512-vj6z+EAbVrKAXmJPxSv/clpwS9QjPqzkraMFk2hIdE/kii8s8kwnkBwTSpIrNc8GnzV3qYC4r3qD+BXDxAGPaw== +"@sentry/types@7.80.0": + version "7.80.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.80.0.tgz#f6896de2d231a7f8d814cf1c981c474240e96d8a" + integrity sha512-4bpMO+2jWiWLDa8zbTASWWNLWe6yhjfPsa7/6VH5y9x1NGtL8oRbqUsTgsvjF3nmeHEMkHQsC8NHPaQ/ibFmZQ== -"@sentry/utils@7.76.0": - version "7.76.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.76.0.tgz#6b540b387d3ac539abd20978f4d3ae235114f6ab" - integrity sha512-40jFD+yfQaKpFYINghdhovzec4IEpB7aAuyH/GtE7E0gLpcqnC72r55krEIVILfqIR2Mlr5OKUzyeoCyWAU/yw== +"@sentry/utils@7.80.0": + version "7.80.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.80.0.tgz#5bd682fa9a382eea952d4fa3628f0f33e4240ff3" + integrity sha512-XbBCEl6uLvE50ftKwrEo6XWdDaZXHXu+kkHXTPWQEcnbvfZKLuG9V0Hxtxxq3xQgyWmuF05OH1GcqYqiO+v5Yg== dependencies: - "@sentry/types" "7.76.0" + "@sentry/types" "7.80.0" "@sindresorhus/is@^4.0.0": version "4.6.0" From 37e0b6976d43fc7a740fd2c09d9717b2d621aab6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 12 Nov 2023 22:29:24 +1300 Subject: [PATCH 175/239] test: New Electron versions (#781) Co-authored-by: timfish <timfish@users.noreply.github.com> --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 6b914678..fdfff451 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.2","26.4.1","27.0.1","28.0.0-alpha.3"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.4","26.5.0","27.0.4","28.0.0-beta.4"] From a7071338af7fee07d0435c31ef4e4b99c3bd35b6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 10:38:28 +0100 Subject: [PATCH 176/239] test: New Sentry SDK version (#786) --- package.json | 14 ++--- src/renderer/sdk.ts | 2 +- yarn.lock | 138 ++++++++++++++++++++++---------------------- 3 files changed, 77 insertions(+), 77 deletions(-) diff --git a/package.json b/package.json index 6dee5f8e..1e4d8aaf 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.80.0", - "@sentry/core": "7.80.0", - "@sentry/node": "7.80.0", - "@sentry/types": "7.80.0", - "@sentry/utils": "7.80.0", + "@sentry/browser": "7.83.0", + "@sentry/core": "7.83.0", + "@sentry/node": "7.83.0", + "@sentry/types": "7.83.0", + "@sentry/utils": "7.83.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.80.0", - "@sentry-internal/typescript": "7.80.0", + "@sentry-internal/eslint-config-sdk": "7.83.0", + "@sentry-internal/typescript": "7.83.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 32cc1c16..29fdc8b3 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -40,7 +40,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_80_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_83_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 224854ea..3b1764aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.80.0": - version "7.80.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.80.0.tgz#100f164097aaeac99db2e88d8f87e4667920b9ed" - integrity sha512-2jHITL4JQPfKUNIB49Mmcc3NRXIcQoeIYWTeIEldm7BQlWr0H3eMMnd6QdQ8VIXC6t1LAve9See1zB0bqDitlw== +"@sentry-internal/eslint-config-sdk@7.83.0": + version "7.83.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.83.0.tgz#8b738e56bce49d312bc1088d8208215e2ef5773b" + integrity sha512-PndLHW4sKITkSgvB41EGm24XGeEQg8IOun7wgaUF7jlyrHuwGF5kf565nVItWsnfP2tAXlAwqxW+/YBOwETIPA== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.80.0" - "@sentry-internal/typescript" "7.80.0" + "@sentry-internal/eslint-plugin-sdk" "7.83.0" + "@sentry-internal/typescript" "7.83.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,78 +180,78 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.80.0": - version "7.80.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.80.0.tgz#4824350ea3cd9bc0656398384724745e17291231" - integrity sha512-AmfeuXMjOp3MA6BM3xaAhRDQVtXz0lDjg9ACi7s/mgF2oJm12gkqZ/QJNDtyNOldIlo/UfCcQRPeu7zSNBWOng== +"@sentry-internal/eslint-plugin-sdk@7.83.0": + version "7.83.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.83.0.tgz#d7e050b8b713443af6c69e3c6192289218599c6b" + integrity sha512-IToQTETQEQucmtrKuPnJIwOfZcXCqtnk6OxIeHmUI4lRKMPUiUuiTI3doTKXiyFVmgZPjPvZjpjHUDmKngNQlw== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.80.0": - version "7.80.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.80.0.tgz#f9a6c0456b3cbf4a53c986a0b9208572d80e0756" - integrity sha512-P1Ab9gamHLsbH9D82i1HY8xfq9dP8runvc4g50AAd6OXRKaJ45f2KGRZUmnMEVqBQ7YoPYp2LFMkrhNYbcZEoQ== - dependencies: - "@sentry/core" "7.80.0" - "@sentry/types" "7.80.0" - "@sentry/utils" "7.80.0" - -"@sentry-internal/typescript@7.80.0": - version "7.80.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.80.0.tgz#30cae7c5bd8049f1a4083de351f396091d749e60" - integrity sha512-CXXh8vm4a0ZJhlMv4YcapeDmJh1pGtlO7wsdmur4Pu2YF+32z8lDxE5sKrItSdgu7RX5eR7aGQGiJI+YKZgsDQ== - -"@sentry/browser@7.80.0": - version "7.80.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.80.0.tgz#385fb59ac1d52b67919087f3d7044575ae0abbdd" - integrity sha512-Ngwjc+yyf/aH5q7iQM1LeDNlhM1Ilt4ZLUogTghZR/guwNWmCtk3OHcjOLz7fxBBj9wGFUc2pHPyeYM6bQhrEw== - dependencies: - "@sentry-internal/tracing" "7.80.0" - "@sentry/core" "7.80.0" - "@sentry/replay" "7.80.0" - "@sentry/types" "7.80.0" - "@sentry/utils" "7.80.0" - -"@sentry/core@7.80.0": - version "7.80.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.80.0.tgz#7b8a460c19160b81ade20080333189f1a80c1410" - integrity sha512-nJiiymdTSEyI035/rdD3VOq6FlOZ2wWLR5bit9LK8a3rzHU3UXkwScvEo6zYgs0Xp1sC0yu1S9+0BEiYkmi29A== - dependencies: - "@sentry/types" "7.80.0" - "@sentry/utils" "7.80.0" - -"@sentry/node@7.80.0": - version "7.80.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.80.0.tgz#7e060bc934a58a442b786246d46a5a0dd822ae44" - integrity sha512-J35fqe8J5ac/17ZXT0ML3opYGTOclqYNE9Sybs1y9n6BqacHyzH8By72YrdI03F7JJDHwrcGw+/H8hGpkCwi0Q== - dependencies: - "@sentry-internal/tracing" "7.80.0" - "@sentry/core" "7.80.0" - "@sentry/types" "7.80.0" - "@sentry/utils" "7.80.0" +"@sentry-internal/tracing@7.83.0": + version "7.83.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.83.0.tgz#8f69d339569b020c495f8350a8ea527c369586e8" + integrity sha512-fY1ZyOiQaaUTuoq5rO+G4/5Ov3n8BnfNK7ck97yAGxy3w+E1CwhVZkXHEvTngNfdYV3ArxvlrtPRb9STFRqXvQ== + dependencies: + "@sentry/core" "7.83.0" + "@sentry/types" "7.83.0" + "@sentry/utils" "7.83.0" + +"@sentry-internal/typescript@7.83.0": + version "7.83.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.83.0.tgz#88cd4f541b0d65f1fc65a88a2e005dc9874ec058" + integrity sha512-ZN8314Ra5Zxaeeag032D7OUFCmkfloLxNws51YXJ9BRWzKwSlOW8pXplo21t0c73hQv3hlBbqDrPCn+o+88z2A== + +"@sentry/browser@7.83.0": + version "7.83.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.83.0.tgz#01e8ba0d3f4d4652e67c8b0d955d2f3903a19ab0" + integrity sha512-8v7QEaC/fVAHn8pi59ZlJznr7ZdOQIgtz8DAOJeJsC2vHTAxQ9nVkoMkJWjTp/qaDHUjSe5ob6eqaChuhi6t2g== + dependencies: + "@sentry-internal/tracing" "7.83.0" + "@sentry/core" "7.83.0" + "@sentry/replay" "7.83.0" + "@sentry/types" "7.83.0" + "@sentry/utils" "7.83.0" + +"@sentry/core@7.83.0": + version "7.83.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.83.0.tgz#29bdd5aba40a6f25c01c68387b6a9aa13e27f20a" + integrity sha512-fglvpw8aWM6nWXzCjAVXIMTiTEAQ9G9b85IpDd/7L8fuwaFTPQAUSJXupF2PfbpQ3FUYbJt80dxshbERVJG8vQ== + dependencies: + "@sentry/types" "7.83.0" + "@sentry/utils" "7.83.0" + +"@sentry/node@7.83.0": + version "7.83.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.83.0.tgz#199965f4c0cb3cd0d2ae590faa260d2505c38528" + integrity sha512-ibnON+5ovoGOsvcLxcWQu5XAc4rbkvDkzCP74YGnME3/NzRuo3cKam8bUL5Wlm15h68QzxskyNOLuj6BEJ6AfQ== + dependencies: + "@sentry-internal/tracing" "7.83.0" + "@sentry/core" "7.83.0" + "@sentry/types" "7.83.0" + "@sentry/utils" "7.83.0" https-proxy-agent "^5.0.0" -"@sentry/replay@7.80.0": - version "7.80.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.80.0.tgz#0626d85af1d8573038d52ae9e244e3e95fa47385" - integrity sha512-wWnpuJq3OaDLp1LutE4oxWXnau04fvwuzBjuaFvOXOV+pB/kn+pDPuVOC5+FH/RMRZ5ftwX5+dF6fojfcLVGCg== +"@sentry/replay@7.83.0": + version "7.83.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.83.0.tgz#14fd39a638911f60b780d232d2056f0d19ed478e" + integrity sha512-B/rzmjmQ3ZWE68m4Z9rHIN3Fa/wkfVVTK+iSQtqErFflyMETMNwtWRNd6P9FhXnphEINZEbcn/UZF5w5xu/DfA== dependencies: - "@sentry-internal/tracing" "7.80.0" - "@sentry/core" "7.80.0" - "@sentry/types" "7.80.0" - "@sentry/utils" "7.80.0" + "@sentry-internal/tracing" "7.83.0" + "@sentry/core" "7.83.0" + "@sentry/types" "7.83.0" + "@sentry/utils" "7.83.0" -"@sentry/types@7.80.0": - version "7.80.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.80.0.tgz#f6896de2d231a7f8d814cf1c981c474240e96d8a" - integrity sha512-4bpMO+2jWiWLDa8zbTASWWNLWe6yhjfPsa7/6VH5y9x1NGtL8oRbqUsTgsvjF3nmeHEMkHQsC8NHPaQ/ibFmZQ== +"@sentry/types@7.83.0": + version "7.83.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.83.0.tgz#117e45900603190c547e52bba35e1b3d539d47fb" + integrity sha512-Bd+zJcy8p1VgCfQqUprmUaw0QPWUV+GmCt6zJRHrHTb2pwLahXv6sHJvQ8F8Va6S7Keuy088U+kHzUFGQLMZMQ== -"@sentry/utils@7.80.0": - version "7.80.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.80.0.tgz#5bd682fa9a382eea952d4fa3628f0f33e4240ff3" - integrity sha512-XbBCEl6uLvE50ftKwrEo6XWdDaZXHXu+kkHXTPWQEcnbvfZKLuG9V0Hxtxxq3xQgyWmuF05OH1GcqYqiO+v5Yg== +"@sentry/utils@7.83.0": + version "7.83.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.83.0.tgz#ec0fc0a468ec35ab9623603f1ba218dd58233eda" + integrity sha512-7SrZtgAn3pHFBqSSvV/VL0CWTBQ7VenJjok4+WGWd6/FhP3fKrEEd9rjVTUb2Pzq9WLJJYzdvxAG8RlggG+H4g== dependencies: - "@sentry/types" "7.80.0" + "@sentry/types" "7.83.0" "@sindresorhus/is@^4.0.0": version "4.6.0" From c6f8118ce2fe003062977b2f863f146178f4a6a5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 10:38:53 +0100 Subject: [PATCH 177/239] test: New Electron versions (#785) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index fdfff451..02ca32c5 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.4","26.5.0","27.0.4","28.0.0-beta.4"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.6","26.6.1","27.1.2","28.0.0-beta.10"] From c098afa57da4e3c9d563635ceca40b7a64c1836f Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 30 Nov 2023 18:02:46 +0100 Subject: [PATCH 178/239] fix: Patch `registerSchemesAsPrivileged` so sentry scheme isn't overwritten (#787) --- src/main/anr.ts | 2 +- src/main/ipc.ts | 24 ++++++++++++------- .../renderer-error-protocol/src/main.js | 14 ++++++++++- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/main/anr.ts b/src/main/anr.ts index a6c8f68e..01913d15 100644 --- a/src/main/anr.ts +++ b/src/main/anr.ts @@ -90,7 +90,7 @@ export function isAnrChildProcess(): boolean { } /** Creates a renderer ANR status hook */ -export function createRendererAnrStatusHook(): (status: RendererStatus, contents: WebContents) => void { +export function createRendererAnrStatusHandler(): (status: RendererStatus, contents: WebContents) => void { function log(message: string, ...args: unknown[]): void { logger.log(`[Renderer ANR] ${message}`, ...args); } diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 4d8bb460..4a4772de 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -12,13 +12,18 @@ import { PROTOCOL_SCHEME, RendererStatus, } from '../common'; -import { createRendererAnrStatusHook } from './anr'; +import { createRendererAnrStatusHandler } from './anr'; import { registerProtocol, supportsFullProtocol, whenAppReady } from './electron-normalize'; import { ElectronMainOptionsInternal } from './sdk'; let KNOWN_RENDERERS: Set<number> | undefined; let WINDOW_ID_TO_WEB_CONTENTS: Map<string, number> | undefined; +const SENTRY_CUSTOM_SCHEME = { + scheme: PROTOCOL_SCHEME, + privileges: { bypassCSP: true, corsEnabled: true, supportFetchAPI: true, secure: true }, +}; + async function newProtocolRenderer(): Promise<void> { KNOWN_RENDERERS = KNOWN_RENDERERS || new Set(); WINDOW_ID_TO_WEB_CONTENTS = WINDOW_ID_TO_WEB_CONTENTS || new Map(); @@ -169,14 +174,17 @@ function configureProtocol(options: ElectronMainOptionsInternal): void { throw new SentryError("Sentry SDK should be initialized before the Electron app 'ready' event is fired"); } - protocol.registerSchemesAsPrivileged([ - { - scheme: PROTOCOL_SCHEME, - privileges: { bypassCSP: true, corsEnabled: true, supportFetchAPI: true, secure: true }, + protocol.registerSchemesAsPrivileged([SENTRY_CUSTOM_SCHEME]); + + // We Proxy this function so that later user calls to registerSchemesAsPrivileged don't overwrite our custom scheme + // eslint-disable-next-line @typescript-eslint/unbound-method + protocol.registerSchemesAsPrivileged = new Proxy(protocol.registerSchemesAsPrivileged, { + apply: (target, __, args: Parameters<typeof protocol.registerSchemesAsPrivileged>) => { + target([...args[0], SENTRY_CUSTOM_SCHEME]); }, - ]); + }); - const rendererStatusChanged = createRendererAnrStatusHook(); + const rendererStatusChanged = createRendererAnrStatusHandler(); whenAppReady .then(() => { @@ -231,7 +239,7 @@ function configureClassic(options: ElectronMainOptionsInternal): void { ipcMain.on(IPCChannel.SCOPE, (_, jsonScope: string) => handleScope(options, jsonScope)); ipcMain.on(IPCChannel.ENVELOPE, ({ sender }, env: Uint8Array | string) => handleEnvelope(options, env, sender)); - const rendererStatusChanged = createRendererAnrStatusHook(); + const rendererStatusChanged = createRendererAnrStatusHandler(); ipcMain.on(IPCChannel.STATUS, ({ sender }, status: RendererStatus) => rendererStatusChanged(status, sender)); } diff --git a/test/e2e/test-apps/javascript/renderer-error-protocol/src/main.js b/test/e2e/test-apps/javascript/renderer-error-protocol/src/main.js index 72ca4f53..84c3fbd8 100644 --- a/test/e2e/test-apps/javascript/renderer-error-protocol/src/main.js +++ b/test/e2e/test-apps/javascript/renderer-error-protocol/src/main.js @@ -1,6 +1,6 @@ const path = require('path'); -const { app, BrowserWindow } = require('electron'); +const { app, BrowserWindow, protocol } = require('electron'); const { init, IPCMode } = require('@sentry/electron'); init({ @@ -11,6 +11,18 @@ init({ onFatalError: () => {}, }); +// Since we patch registerSchemesAsPrivileged, this should not overwrite the sentry scheme +protocol.registerSchemesAsPrivileged([ + { + scheme: 'custom1', + privileges: { + standard: true, + secure: true, + supportFetchAPI: true, + }, + }, +]); + app.on('ready', () => { const mainWindow = new BrowserWindow({ show: false, From 2beef37d467f767642d84c61c6721fbd657f2f2d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 13:42:25 +0100 Subject: [PATCH 179/239] test: New Sentry SDK version (#788) --- package.json | 14 ++--- src/renderer/sdk.ts | 2 +- yarn.lock | 138 ++++++++++++++++++++++---------------------- 3 files changed, 77 insertions(+), 77 deletions(-) diff --git a/package.json b/package.json index 1e4d8aaf..58398e4b 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.83.0", - "@sentry/core": "7.83.0", - "@sentry/node": "7.83.0", - "@sentry/types": "7.83.0", - "@sentry/utils": "7.83.0", + "@sentry/browser": "7.84.0", + "@sentry/core": "7.84.0", + "@sentry/node": "7.84.0", + "@sentry/types": "7.84.0", + "@sentry/utils": "7.84.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.83.0", - "@sentry-internal/typescript": "7.83.0", + "@sentry-internal/eslint-config-sdk": "7.84.0", + "@sentry-internal/typescript": "7.84.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 29fdc8b3..bdadcef4 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -40,7 +40,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_83_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_84_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 3b1764aa..2df3a98d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.83.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.83.0.tgz#8b738e56bce49d312bc1088d8208215e2ef5773b" - integrity sha512-PndLHW4sKITkSgvB41EGm24XGeEQg8IOun7wgaUF7jlyrHuwGF5kf565nVItWsnfP2tAXlAwqxW+/YBOwETIPA== +"@sentry-internal/eslint-config-sdk@7.84.0": + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.84.0.tgz#235e2cab61f7ee31e83798369d28af0928e8e952" + integrity sha512-p+W1WmFNtgY1iO8Metk4HHlrJqJ2CpDHQbYWuS4kc8Ry+wuyhWdYs/zD4H80rao6Thl0S6x5ywiv/M4lsaQrMw== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.83.0" - "@sentry-internal/typescript" "7.83.0" + "@sentry-internal/eslint-plugin-sdk" "7.84.0" + "@sentry-internal/typescript" "7.84.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,78 +180,78 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.83.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.83.0.tgz#d7e050b8b713443af6c69e3c6192289218599c6b" - integrity sha512-IToQTETQEQucmtrKuPnJIwOfZcXCqtnk6OxIeHmUI4lRKMPUiUuiTI3doTKXiyFVmgZPjPvZjpjHUDmKngNQlw== +"@sentry-internal/eslint-plugin-sdk@7.84.0": + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.84.0.tgz#e2fc9aeef835adcc358311fa73a937e90642e060" + integrity sha512-RiJPEhzaC8LUMPnxG5QcxPqVKmTCOypzkXH+6RfGQusYYiQHQxr4PzaKKnHlCTMRelRTiiPoJ/SJLMv0NbMDbw== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.83.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.83.0.tgz#8f69d339569b020c495f8350a8ea527c369586e8" - integrity sha512-fY1ZyOiQaaUTuoq5rO+G4/5Ov3n8BnfNK7ck97yAGxy3w+E1CwhVZkXHEvTngNfdYV3ArxvlrtPRb9STFRqXvQ== - dependencies: - "@sentry/core" "7.83.0" - "@sentry/types" "7.83.0" - "@sentry/utils" "7.83.0" - -"@sentry-internal/typescript@7.83.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.83.0.tgz#88cd4f541b0d65f1fc65a88a2e005dc9874ec058" - integrity sha512-ZN8314Ra5Zxaeeag032D7OUFCmkfloLxNws51YXJ9BRWzKwSlOW8pXplo21t0c73hQv3hlBbqDrPCn+o+88z2A== - -"@sentry/browser@7.83.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.83.0.tgz#01e8ba0d3f4d4652e67c8b0d955d2f3903a19ab0" - integrity sha512-8v7QEaC/fVAHn8pi59ZlJznr7ZdOQIgtz8DAOJeJsC2vHTAxQ9nVkoMkJWjTp/qaDHUjSe5ob6eqaChuhi6t2g== - dependencies: - "@sentry-internal/tracing" "7.83.0" - "@sentry/core" "7.83.0" - "@sentry/replay" "7.83.0" - "@sentry/types" "7.83.0" - "@sentry/utils" "7.83.0" - -"@sentry/core@7.83.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.83.0.tgz#29bdd5aba40a6f25c01c68387b6a9aa13e27f20a" - integrity sha512-fglvpw8aWM6nWXzCjAVXIMTiTEAQ9G9b85IpDd/7L8fuwaFTPQAUSJXupF2PfbpQ3FUYbJt80dxshbERVJG8vQ== - dependencies: - "@sentry/types" "7.83.0" - "@sentry/utils" "7.83.0" - -"@sentry/node@7.83.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.83.0.tgz#199965f4c0cb3cd0d2ae590faa260d2505c38528" - integrity sha512-ibnON+5ovoGOsvcLxcWQu5XAc4rbkvDkzCP74YGnME3/NzRuo3cKam8bUL5Wlm15h68QzxskyNOLuj6BEJ6AfQ== - dependencies: - "@sentry-internal/tracing" "7.83.0" - "@sentry/core" "7.83.0" - "@sentry/types" "7.83.0" - "@sentry/utils" "7.83.0" +"@sentry-internal/tracing@7.84.0": + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.84.0.tgz#430da253ee5b075be4ef57f20ea842c0208bc6b0" + integrity sha512-y9bGYA0OM6PEREfd+nk4UURZy29tpIw+7vQwpxWfEVs2fqq0/5TBFX/tKFb8AKUI9lVM8v0bcF0bNSCnuPQZHQ== + dependencies: + "@sentry/core" "7.84.0" + "@sentry/types" "7.84.0" + "@sentry/utils" "7.84.0" + +"@sentry-internal/typescript@7.84.0": + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.84.0.tgz#d7c29d8791c75f639fe6fdf5bacff146a5e7295f" + integrity sha512-Ls/2JCwjrROwaMcJwMwjkqlM5akjXX4SoYD7BwEpie/N7EkPIxM+gQTBS1lX7I7AUMVclyEu2xnDXSfb017aIQ== + +"@sentry/browser@7.84.0": + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.84.0.tgz#7c82470f0afbb6178f26127894e40e9ce2b1e6d6" + integrity sha512-X50TlTKY9WzAnHsYc4FYrCWgm+CdVo0h02ggmodVBUpRLUBjj+cs5Q1plov/v/XeorSwmorNEMUu/n+XZNSsrA== + dependencies: + "@sentry-internal/tracing" "7.84.0" + "@sentry/core" "7.84.0" + "@sentry/replay" "7.84.0" + "@sentry/types" "7.84.0" + "@sentry/utils" "7.84.0" + +"@sentry/core@7.84.0": + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.84.0.tgz#01d33fc452044ffd8ea57b20f60304b9cfa2b9e1" + integrity sha512-tbuwunbBx2kSex15IHCqHDnrMfIlqPc6w/76fwkGqokz3oh9GSEGlLICwmBWL8AypWimUg13IDtFpD0TJTriWA== + dependencies: + "@sentry/types" "7.84.0" + "@sentry/utils" "7.84.0" + +"@sentry/node@7.84.0": + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.84.0.tgz#c06167106796b2b83c0a9b52fa56f8ca820034ca" + integrity sha512-Xm3fIXT3TZOQi+6uQBavI8iOehD3PkY7v0y3hog0d4lQTH88vQK9BBsI+jZEq81Em+RG/u7vZNiFo6YMTnWF7Q== + dependencies: + "@sentry-internal/tracing" "7.84.0" + "@sentry/core" "7.84.0" + "@sentry/types" "7.84.0" + "@sentry/utils" "7.84.0" https-proxy-agent "^5.0.0" -"@sentry/replay@7.83.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.83.0.tgz#14fd39a638911f60b780d232d2056f0d19ed478e" - integrity sha512-B/rzmjmQ3ZWE68m4Z9rHIN3Fa/wkfVVTK+iSQtqErFflyMETMNwtWRNd6P9FhXnphEINZEbcn/UZF5w5xu/DfA== +"@sentry/replay@7.84.0": + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.84.0.tgz#7e17876d9a1802ee33800e2b2cbda4e026c0a2af" + integrity sha512-c4PxT0ZpvkR9zXNfmAk3ojkm6eZ9+NlDze09RFBOCNo69QwIN90hnvbjXFC1+vRIJsfgo78Zr0ya/Wzb3Rog7Q== dependencies: - "@sentry-internal/tracing" "7.83.0" - "@sentry/core" "7.83.0" - "@sentry/types" "7.83.0" - "@sentry/utils" "7.83.0" + "@sentry-internal/tracing" "7.84.0" + "@sentry/core" "7.84.0" + "@sentry/types" "7.84.0" + "@sentry/utils" "7.84.0" -"@sentry/types@7.83.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.83.0.tgz#117e45900603190c547e52bba35e1b3d539d47fb" - integrity sha512-Bd+zJcy8p1VgCfQqUprmUaw0QPWUV+GmCt6zJRHrHTb2pwLahXv6sHJvQ8F8Va6S7Keuy088U+kHzUFGQLMZMQ== +"@sentry/types@7.84.0": + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.84.0.tgz#e8db86c36c61659c3b2558f0aa8b6a073a756117" + integrity sha512-VqGLIF3JOUrk7yIXjLXJvAORkZL1e3dDX0Q1okRehwyt/5CRE+mdUTeJZkBo9P9mBwgMyvtwklzOGGrzjb4eMA== -"@sentry/utils@7.83.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.83.0.tgz#ec0fc0a468ec35ab9623603f1ba218dd58233eda" - integrity sha512-7SrZtgAn3pHFBqSSvV/VL0CWTBQ7VenJjok4+WGWd6/FhP3fKrEEd9rjVTUb2Pzq9WLJJYzdvxAG8RlggG+H4g== +"@sentry/utils@7.84.0": + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.84.0.tgz#32861d922fa31e86dd2863a1d9dfc5a369e98952" + integrity sha512-qdUVuxnRBvaf05AU+28R+xYtZmi/Ymf8os3Njq9g4XuA+QEkZLbzmIpRK5W9Ja7vUtjOeg29Xgg43A8znde9LQ== dependencies: - "@sentry/types" "7.83.0" + "@sentry/types" "7.84.0" "@sindresorhus/is@^4.0.0": version "4.6.0" From c643b47db1247cc638fdb8a8ecd5ca7859270514 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 1 Dec 2023 15:36:43 +0100 Subject: [PATCH 180/239] fix: Add missing exports (#790) --- src/index.ts | 12 ++++++++++-- src/main/index.ts | 7 +++++++ src/renderer/index.ts | 17 ++++++++++++++++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/index.ts b/src/index.ts index 2984eaa4..8c05fdd2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,24 +19,32 @@ export type { StackFrame, Stacktrace, Thread, + Transaction, User, } from '@sentry/types'; export { addGlobalEventProcessor, addBreadcrumb, + addIntegration, captureException, captureEvent, captureMessage, configureScope, createTransport, - getActiveTransaction, getHubFromCarrier, getCurrentHub, Hub, + lastEventId, makeMain, Scope, startTransaction, + getActiveSpan, + startSpan, + startInactiveSpan, + startSpanManual, + continueTrace, + SDK_VERSION, setContext, setExtra, setExtras, @@ -46,8 +54,8 @@ export { withScope, FunctionToString, InboundFilters, - trace, } from '@sentry/core'; +export type { SpanStatusType } from '@sentry/core'; import type { enableAnrDetection as enableNodeAnrDetection } from '@sentry/node'; diff --git a/src/main/index.ts b/src/main/index.ts index 4f17eedf..8e637f32 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -26,6 +26,7 @@ export type { export { addGlobalEventProcessor, addBreadcrumb, + addIntegration, captureException, captureEvent, captureMessage, @@ -37,6 +38,11 @@ export { makeMain, Scope, startTransaction, + getActiveSpan, + startSpan, + startInactiveSpan, + startSpanManual, + continueTrace, setContext, setExtra, setExtras, @@ -47,6 +53,7 @@ export { FunctionToString, InboundFilters, } from '@sentry/core'; +export type { SpanStatusType } from '@sentry/core'; export type { NodeOptions } from '@sentry/node'; export { flush, close, NodeClient, lastEventId } from '@sentry/node'; diff --git a/src/renderer/index.ts b/src/renderer/index.ts index d3f5a14c..6e267b84 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -23,6 +23,7 @@ export type { export { addGlobalEventProcessor, addBreadcrumb, + addIntegration, captureException, captureEvent, captureMessage, @@ -34,6 +35,11 @@ export { makeMain, Scope, startTransaction, + getActiveSpan, + startSpan, + startInactiveSpan, + startSpanManual, + continueTrace, setContext, setExtra, setExtras, @@ -44,8 +50,17 @@ export { FunctionToString, InboundFilters, } from '@sentry/core'; +export type { SpanStatusType } from '@sentry/core'; -export { BrowserClient, BrowserTracing, lastEventId, showReportDialog, Replay } from '@sentry/browser'; +export { + addTracingExtensions, + BrowserClient, + BrowserTracing, + BrowserProfilingIntegration, + lastEventId, + showReportDialog, + Replay, +} from '@sentry/browser'; export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser'; export const Integrations = { ...ElectronRendererIntegrations, ...BrowserIntegrations }; From b7cf8b46637c4bae0a307781f5de7c01e895331b Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 1 Dec 2023 15:59:43 +0100 Subject: [PATCH 181/239] meta: Update changelog for 4.15.0 release (#791) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 38d5a593..4c0035a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ ## Unreleased +## 4.15.0 + +- feat: Update from [v7.74.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.74.0) to + [v7.84.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.84.0) of JavaScript SDKs (#779, #786, #788) +- fix: Patch registerSchemesAsPrivileged so sentry scheme isn't overwritten (#787) +- fix: Add missing exports (#790) + ## 4.14.0 - feat: Renderer process ANR detection with stack traces (#770) From 7e351a72b2dacfdcd7495ce08a06f2c8a65dc046 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 1 Dec 2023 19:04:01 +0100 Subject: [PATCH 182/239] test: Only test ANR on newer versions of Electron (#793) --- test/e2e/test-apps/anr/anr-main/recipe.yml | 2 +- test/e2e/test-apps/anr/anr-renderer/recipe.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/test-apps/anr/anr-main/recipe.yml b/test/e2e/test-apps/anr/anr-main/recipe.yml index d65df596..db0bca0a 100644 --- a/test/e2e/test-apps/anr/anr-main/recipe.yml +++ b/test/e2e/test-apps/anr/anr-main/recipe.yml @@ -1,4 +1,4 @@ description: ANR Main Event category: ANR command: yarn -condition: version.major >= 4 +condition: version.major >= 13 diff --git a/test/e2e/test-apps/anr/anr-renderer/recipe.yml b/test/e2e/test-apps/anr/anr-renderer/recipe.yml index dc3ac921..e88f26b5 100644 --- a/test/e2e/test-apps/anr/anr-renderer/recipe.yml +++ b/test/e2e/test-apps/anr/anr-renderer/recipe.yml @@ -1,4 +1,4 @@ description: ANR Renderer Event category: ANR command: yarn -condition: version.major >= 4 +condition: version.major >= 13 From 7c7323d06c6b50a6b0b0e58e1e2507aa75d9ec03 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Fri, 1 Dec 2023 18:38:30 +0000 Subject: [PATCH 183/239] release: 4.15.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 58398e4b..eb62ea3c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.14.0", + "version": "4.15.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", @@ -106,4 +106,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} \ No newline at end of file +} From e84a302694d1aff52cd1019f3724f6bf343792a8 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 5 Dec 2023 11:32:31 +0100 Subject: [PATCH 184/239] fix: Don't call `app.getPath('userData')` before SDK `init` (#797) --- CHANGELOG.md | 4 ++++ src/main/fs.ts | 5 +++- .../integrations/sentry-minidump/index.ts | 4 ++-- src/main/sessions.ts | 24 ++++++++++++------- src/main/transports/electron-offline-net.ts | 4 ++-- test/unit/getPath-test-app/main.js | 13 ++++++++++ test/unit/getPath-test-app/package.json | 9 +++++++ test/unit/getPath.test.ts | 13 ++++++++++ 8 files changed, 63 insertions(+), 13 deletions(-) create mode 100644 test/unit/getPath-test-app/main.js create mode 100644 test/unit/getPath-test-app/package.json create mode 100644 test/unit/getPath.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c0035a3..9a133eb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## 4.15.1 + +- fix: Don't call `app.getPath('userData')` before SDK `init` (#797) + ## 4.15.0 - feat: Update from [v7.74.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.74.0) to diff --git a/src/main/fs.ts b/src/main/fs.ts index 29d01507..3539ffe0 100644 --- a/src/main/fs.ts +++ b/src/main/fs.ts @@ -3,7 +3,10 @@ import { mkdir, readdir, readFile, stat, statSync, unlink, writeFile } from 'fs' import { dirname, join, resolve } from 'path'; import { promisify } from 'util'; -export const sentryCachePath = join(app ? app.getPath('userData') : '', 'sentry'); +/** Gets the Sentry Cache path */ +export function getSentryCachePath(): string { + return join(app.getPath('userData'), 'sentry'); +} export const writeFileAsync = promisify(writeFile); export const readFileAsync = promisify(readFile); diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts index a285460b..94b72158 100644 --- a/src/main/integrations/sentry-minidump/index.ts +++ b/src/main/integrations/sentry-minidump/index.ts @@ -7,7 +7,7 @@ import { app, crashReporter } from 'electron'; import { mergeEvents } from '../../../common'; import { getDefaultEnvironment, getDefaultReleaseName, getEventDefaults } from '../../context'; import { EXIT_REASONS, onChildProcessGone, onRendererProcessGone } from '../../electron-normalize'; -import { sentryCachePath } from '../../fs'; +import { getSentryCachePath } from '../../fs'; import { getRendererProperties, trackRendererProperties } from '../../renderers'; import { ElectronMainOptions } from '../../sdk'; import { checkPreviousSession, sessionCrashed } from '../../sessions'; @@ -50,7 +50,7 @@ export class SentryMinidump implements Integration { this._startCrashReporter(); - this._scopeStore = new BufferedWriteStore<PreviousRun>(sentryCachePath, 'scope_v3', { + this._scopeStore = new BufferedWriteStore<PreviousRun>(getSentryCachePath(), 'scope_v3', { scope: new Scope(), }); diff --git a/src/main/sessions.ts b/src/main/sessions.ts index 51ec7736..df78b67c 100644 --- a/src/main/sessions.ts +++ b/src/main/sessions.ts @@ -5,16 +5,24 @@ import { logger } from '@sentry/utils'; import { app } from 'electron'; import { isAnrChildProcess } from './anr'; -import { sentryCachePath } from './fs'; +import { getSentryCachePath } from './fs'; import { Store } from './store'; const PERSIST_INTERVAL_MS = 60_000; /** Stores the app session in case of termination due to main process crash or app killed */ -const sessionStore = new Store<SessionContext | undefined>(sentryCachePath, 'session', undefined); - +let sessionStore: Store<SessionContext | undefined> | undefined; /** Previous session if it did not exit cleanly */ -let previousSession: Promise<Partial<Session> | undefined> | undefined = sessionStore.get(); +let previousSession: Promise<Partial<Session> | undefined> | undefined; + +function getSessionStore(): Store<SessionContext | undefined> { + if (!sessionStore) { + sessionStore = new Store<SessionContext | undefined>(getSentryCachePath(), 'session', undefined); + previousSession = sessionStore.get(); + } + + return sessionStore; +} let persistTimer: NodeJS.Timer | undefined; @@ -27,14 +35,14 @@ export async function startSession(sendOnCreate: boolean): Promise<void> { hub.captureSession(); } - await sessionStore.set(session); + await getSessionStore().set(session); // Every PERSIST_INTERVAL, write the session to disk persistTimer = setInterval(async () => { const currentSession = hub.getScope()?.getSession(); // Only bother saving if it hasn't already ended if (currentSession && currentSession.status === 'ok') { - await sessionStore.set(currentSession); + await getSessionStore().set(currentSession); } }, PERSIST_INTERVAL_MS); } @@ -60,7 +68,7 @@ export async function endSession(): Promise<void> { logger.log('No session'); } - await sessionStore.clear(); + await getSessionStore().clear(); await flush(2_000); } @@ -71,7 +79,7 @@ export async function unreportedDuringLastSession(crashDate: Date | undefined): return false; } - const previousSessionModified = await sessionStore.getModifiedDate(); + const previousSessionModified = await getSessionStore().getModifiedDate(); // There is no previous session if (previousSessionModified == undefined) { return false; diff --git a/src/main/transports/electron-offline-net.ts b/src/main/transports/electron-offline-net.ts index ef45dd6b..ac59a014 100644 --- a/src/main/transports/electron-offline-net.ts +++ b/src/main/transports/electron-offline-net.ts @@ -4,7 +4,7 @@ import { logger } from '@sentry/utils'; import { net } from 'electron'; import { join } from 'path'; -import { sentryCachePath } from '../fs'; +import { getSentryCachePath } from '../fs'; import { createElectronNetRequestExecutor, ElectronNetTransportOptions } from './electron-net'; import { PersistedRequestQueue } from './queue'; @@ -59,7 +59,7 @@ function isRateLimited(result: TransportMakeRequestResponse): boolean { export function makeElectronOfflineTransport(options: ElectronOfflineTransportOptions): Transport { const netMakeRequest = createElectronNetRequestExecutor(options.url, options.headers || {}); const queue: PersistedRequestQueue = new PersistedRequestQueue( - join(sentryCachePath, 'queue'), + join(getSentryCachePath(), 'queue'), options.maxQueueAgeDays, options.maxQueueCount, ); diff --git a/test/unit/getPath-test-app/main.js b/test/unit/getPath-test-app/main.js new file mode 100644 index 00000000..8355bfbf --- /dev/null +++ b/test/unit/getPath-test-app/main.js @@ -0,0 +1,13 @@ +const { app } = require('electron'); + +process.on('uncaughtException', () => { + app.exit(1); +}); + +app.getPath = () => { + app.exit(1); +}; + +require('../../../main'); + +app.exit(0); diff --git a/test/unit/getPath-test-app/package.json b/test/unit/getPath-test-app/package.json new file mode 100644 index 00000000..a3e1e5fc --- /dev/null +++ b/test/unit/getPath-test-app/package.json @@ -0,0 +1,9 @@ +{ + "name": "electron-test", + "version": "1.0.0", + "main": "main.js", + "scripts": { + + "start": "../../../node_modules/.bin/electron ." + } +} diff --git a/test/unit/getPath.test.ts b/test/unit/getPath.test.ts new file mode 100644 index 00000000..945a3349 --- /dev/null +++ b/test/unit/getPath.test.ts @@ -0,0 +1,13 @@ +import { expect } from 'chai'; +import { spawnSync } from 'child_process'; +import { join } from 'path'; + +describe('app.getPath', () => { + it('not called before init', () => { + const result = spawnSync('yarn', ['start'], { cwd: join(__dirname, 'getPath-test-app') }); + // status is null on Windows in CI for some unknown reason + if (process.platform !== 'win32') { + expect(result.status).to.equal(0); + } + }); +}); From 3101a2da137d733a48042e83cfa62581b2cd03dc Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Tue, 5 Dec 2023 10:33:05 +0000 Subject: [PATCH 185/239] release: 4.15.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index eb62ea3c..2b6245b4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.15.0", + "version": "4.15.1", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From 85c6177279f6ff16c26e38fd7194db5e0c63db2e Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 6 Dec 2023 08:53:41 +0100 Subject: [PATCH 186/239] test: Test less old Electron versions (#794) --- scripts/e2e-test-versions.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/e2e-test-versions.js b/scripts/e2e-test-versions.js index ff6f32a7..37d406b7 100644 --- a/scripts/e2e-test-versions.js +++ b/scripts/e2e-test-versions.js @@ -6,6 +6,7 @@ if (process.env.GITHUB_REF && process.env.GITHUB_REF.includes('release/')) { // For release builds we test all versions console.log(JSON.stringify(versions)); } else { + const versionCount = process.platform === 'darwin' ? -3 : -7; // Otherwise we test the oldest version and the last 10 versions - console.log(JSON.stringify([versions[0], ...versions.slice(-10)])); + console.log(JSON.stringify([versions[0], ...versions.slice(versionCount)])); } From b279708a5b3b28151d6abd83ac48cfd1fbb08717 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 18 Dec 2023 13:01:55 +0100 Subject: [PATCH 187/239] feat: Browser profiling (#799) --- src/common/normalize.ts | 13 +- src/main/integrations/index.ts | 1 + src/main/integrations/renderer-profiling.ts | 136 +++++++++++++++++ src/main/ipc.ts | 19 ++- src/main/sdk.ts | 9 ++ test/e2e/recipe/index.ts | 2 +- test/e2e/recipe/normalize.ts | 29 ++-- test/e2e/server/index.ts | 10 +- .../other/browser-profiling/event.json | 141 ++++++++++++++++++ .../other/browser-profiling/package.json | 8 + .../other/browser-profiling/recipe.yml | 4 + .../other/browser-profiling/src/index.html | 47 ++++++ .../other/browser-profiling/src/main.js | 25 ++++ 13 files changed, 427 insertions(+), 17 deletions(-) create mode 100644 src/main/integrations/renderer-profiling.ts create mode 100644 test/e2e/test-apps/other/browser-profiling/event.json create mode 100644 test/e2e/test-apps/other/browser-profiling/package.json create mode 100644 test/e2e/test-apps/other/browser-profiling/recipe.yml create mode 100644 test/e2e/test-apps/other/browser-profiling/src/index.html create mode 100644 test/e2e/test-apps/other/browser-profiling/src/main.js diff --git a/src/common/normalize.ts b/src/common/normalize.ts index 4ccb50d9..c2eda157 100644 --- a/src/common/normalize.ts +++ b/src/common/normalize.ts @@ -1,4 +1,4 @@ -import { Envelope, Event, ReplayEvent } from '@sentry/types'; +import { Envelope, Event, Profile, ReplayEvent } from '@sentry/types'; import { addItemToEnvelope, createEnvelope, forEachEnvelopeItem } from '@sentry/utils'; /** @@ -111,3 +111,14 @@ export function normalizeUrlsInReplayEnvelope(envelope: Envelope, basePath: stri return isReplay ? modifiedEnvelope : envelope; } + +/** + * Normalizes all URLs in a profile + */ +export function normaliseProfile(profile: Profile, basePath: string): void { + for (const frame of profile.profile.frames) { + if (frame.abs_path) { + frame.abs_path = normalizeUrl(frame.abs_path, basePath); + } + } +} diff --git a/src/main/integrations/index.ts b/src/main/integrations/index.ts index e723f064..9c3a5fd3 100644 --- a/src/main/integrations/index.ts +++ b/src/main/integrations/index.ts @@ -10,3 +10,4 @@ export { AdditionalContext } from './additional-context'; export { Net } from './net-breadcrumbs'; export { ChildProcess } from './child-process'; export { Screenshots } from './screenshots'; +export { RendererProfiling } from './renderer-profiling'; diff --git a/src/main/integrations/renderer-profiling.ts b/src/main/integrations/renderer-profiling.ts new file mode 100644 index 00000000..84ff10e5 --- /dev/null +++ b/src/main/integrations/renderer-profiling.ts @@ -0,0 +1,136 @@ +import { NodeClient } from '@sentry/node'; +import { Event, Integration, Profile } from '@sentry/types'; +import { forEachEnvelopeItem, LRUMap } from '@sentry/utils'; +import { app } from 'electron'; + +import { normaliseProfile } from '../../common'; +import { getDefaultEnvironment, getDefaultReleaseName } from '../context'; +import { ELECTRON_MAJOR_VERSION } from '../electron-normalize'; +import { ElectronMainOptionsInternal } from '../sdk'; + +const DOCUMENT_POLICY_HEADER = 'Document-Policy'; +const JS_PROFILING_HEADER = 'js-profiling'; + +// A cache of renderer profiles which need attaching to events +let RENDERER_PROFILES: LRUMap<string, Profile> | undefined; + +/** + * Caches a profile to later be re-attached to an event + */ +export function rendererProfileFromIpc(event: Event, profile: Profile): void { + if (!RENDERER_PROFILES) { + return; + } + + const profile_id = profile.event_id; + RENDERER_PROFILES.set(profile_id, profile); + + if (event) { + event.contexts = { + ...event.contexts, + // Re-add the profile context which we can later use to find the correct profile + profile: { + profile_id, + }, + }; + } +} + +function addJsProfilingHeader( + responseHeaders: Record<string, string | string[]> = {}, +): Electron.HeadersReceivedResponse { + if (responseHeaders[DOCUMENT_POLICY_HEADER]) { + const docPolicy = responseHeaders[DOCUMENT_POLICY_HEADER]; + + if (Array.isArray(docPolicy)) { + docPolicy.push(JS_PROFILING_HEADER); + } else { + responseHeaders[DOCUMENT_POLICY_HEADER] = [docPolicy, JS_PROFILING_HEADER]; + } + } else { + responseHeaders[DOCUMENT_POLICY_HEADER] = JS_PROFILING_HEADER; + } + + return { responseHeaders }; +} + +/** + * Injects 'js-profiling' document policy headers and ensures that profiles get forwarded with transactions + */ +export class RendererProfiling implements Integration { + /** @inheritDoc */ + public static id: string = 'RendererProfiling'; + + /** @inheritDoc */ + public readonly name: string; + + public constructor() { + this.name = RendererProfiling.id; + } + + /** @inheritDoc */ + public setupOnce(): void { + // + } + + /** @inheritDoc */ + public setup(client: NodeClient): void { + const options = client.getOptions() as ElectronMainOptionsInternal; + if (!options.enableRendererProfiling) { + return; + } + + if (ELECTRON_MAJOR_VERSION < 15) { + throw new Error('Renderer profiling requires Electron 15+ (Chromium 94+)'); + } + + RENDERER_PROFILES = new LRUMap(10); + + app.on('ready', () => { + // Ensure the correct headers are set to enable the browser profiler + for (const sesh of options.getSessions()) { + sesh.webRequest.onHeadersReceived((details, callback) => { + callback(addJsProfilingHeader(details.responseHeaders)); + }); + } + }); + + // Copy the profiles back into the event envelopes + client.on('beforeEnvelope', (envelope) => { + let profile_id: string | undefined; + + forEachEnvelopeItem(envelope, (item, type) => { + if (type !== 'transaction') { + return; + } + + for (let j = 1; j < item.length; j++) { + const event = item[j] as Event; + + if (event && event.contexts && event.contexts.profile && event.contexts.profile.profile_id) { + profile_id = event.contexts.profile.profile_id as string; + // This can be removed as it's no longer needed + delete event.contexts.profile; + } + } + }); + + if (!profile_id) { + return; + } + + const profile = RENDERER_PROFILES?.remove(profile_id); + + if (!profile) { + return; + } + + normaliseProfile(profile, app.getAppPath()); + profile.release = options.release || getDefaultReleaseName(); + profile.environment = options.environment || getDefaultEnvironment(); + + // @ts-expect-error untyped envelope + envelope[1].push([{ type: 'profile' }, profile]); + }); + } +} diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 4a4772de..8d80a37a 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -1,5 +1,5 @@ import { captureEvent, configureScope, getCurrentHub, Scope } from '@sentry/core'; -import { Attachment, AttachmentItem, Envelope, Event, EventItem } from '@sentry/types'; +import { Attachment, AttachmentItem, Envelope, Event, EventItem, Profile } from '@sentry/types'; import { forEachEnvelopeItem, logger, parseEnvelope, SentryError } from '@sentry/utils'; import { app, ipcMain, protocol, WebContents, webContents } from 'electron'; import { TextDecoder, TextEncoder } from 'util'; @@ -14,6 +14,7 @@ import { } from '../common'; import { createRendererAnrStatusHandler } from './anr'; import { registerProtocol, supportsFullProtocol, whenAppReady } from './electron-normalize'; +import { rendererProfileFromIpc } from './integrations/renderer-profiling'; import { ElectronMainOptionsInternal } from './sdk'; let KNOWN_RENDERERS: Set<number> | undefined; @@ -88,9 +89,10 @@ function handleEvent(options: ElectronMainOptionsInternal, jsonEvent: string, co captureEventFromRenderer(options, event, [], contents); } -function eventFromEnvelope(envelope: Envelope): [Event, Attachment[]] | undefined { +function eventFromEnvelope(envelope: Envelope): [Event, Attachment[], Profile | undefined] | undefined { let event: Event | undefined; const attachments: Attachment[] = []; + let profile: Profile | undefined; forEachEnvelopeItem(envelope, (item, type) => { if (type === 'event' || type === 'transaction') { @@ -104,10 +106,12 @@ function eventFromEnvelope(envelope: Envelope): [Event, Attachment[]] | undefine contentType: headers.content_type, data, }); + } else if (type === 'profile') { + profile = item[1] as unknown as Profile; } }); - return event ? [event, attachments] : undefined; + return event ? [event, attachments, profile] : undefined; } function handleEnvelope(options: ElectronMainOptionsInternal, env: Uint8Array | string, contents?: WebContents): void { @@ -115,7 +119,14 @@ function handleEnvelope(options: ElectronMainOptionsInternal, env: Uint8Array | const eventAndAttachments = eventFromEnvelope(envelope); if (eventAndAttachments) { - const [event, attachments] = eventAndAttachments; + const [event, attachments, profile] = eventAndAttachments; + + if (profile) { + // We have a 'profile' item and there is no way for us to pass this through event capture + // so store them in a cache and reattach them via the `beforeEnvelope` hook before sending + rendererProfileFromIpc(event, profile); + } + captureEventFromRenderer(options, event, attachments, contents); } else { const normalizedEnvelope = normalizeUrlsInReplayEnvelope(envelope, app.getAppPath()); diff --git a/src/main/sdk.ts b/src/main/sdk.ts index b0ab3c04..81755ff6 100644 --- a/src/main/sdk.ts +++ b/src/main/sdk.ts @@ -16,6 +16,7 @@ import { Net, OnUncaughtException, PreloadInjection, + RendererProfiling, Screenshots, SentryMinidump, } from './integrations'; @@ -34,6 +35,7 @@ export const defaultIntegrations: Integration[] = [ new PreloadInjection(), new AdditionalContext(), new Screenshots(), + new RendererProfiling(), ...defaultNodeIntegrations.filter( (integration) => integration.name !== 'OnUncaughtException' && integration.name !== 'Context', ), @@ -77,6 +79,13 @@ export interface ElectronMainOptionsInternal extends Options<ElectronOfflineTran * renderers. */ attachScreenshot?: boolean; + + /** + * Enables injection of 'js-profiling' document policy headers and ensure profiles are forwarded with transactions + * + * Requires Electron 15+ + */ + enableRendererProfiling?: boolean; } // getSessions and ipcMode properties are optional because they have defaults diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts index f18088fd..4f37dca1 100644 --- a/test/e2e/recipe/index.ts +++ b/test/e2e/recipe/index.ts @@ -257,7 +257,7 @@ export class RecipeRunner { } for (const event of testServer.events) { - event.data = normalize(event.data); + normalize(event); } for (const [i, expectedEvent] of expectedEvents.entries()) { diff --git a/test/e2e/recipe/normalize.ts b/test/e2e/recipe/normalize.ts index f65a3ab0..69a1bb46 100644 --- a/test/e2e/recipe/normalize.ts +++ b/test/e2e/recipe/normalize.ts @@ -1,14 +1,18 @@ /* eslint-disable complexity */ -import { Event, ReplayEvent, Session, Transaction } from '@sentry/types'; +import { Event, Profile, ReplayEvent, Session, Transaction } from '@sentry/types'; + +import { TestServerEvent } from '../server'; type EventOrSession = Event | Transaction | Session; -export function normalize(event: EventOrSession): EventOrSession { - if (eventIsSession(event)) { - return normalizeSession(event as Session); +export function normalize(event: TestServerEvent<Event | Transaction | Session>): void { + if (eventIsSession(event.data)) { + normalizeSession(event.data as Session); } else { - return normalizeEvent(event as Event & ReplayEvent); + normalizeEvent(event.data as Event & ReplayEvent); } + + normalizeProfile(event.profile); } export function eventIsSession(data: EventOrSession): boolean { @@ -21,7 +25,7 @@ export function eventIsSession(data: EventOrSession): boolean { * All properties that are timestamps, versions, ids or variables that may vary * by platform are replaced with placeholder strings */ -function normalizeSession(session: Session): Session { +function normalizeSession(session: Session): void { if (session.sid) { session.sid = '{{id}}'; } @@ -37,8 +41,6 @@ function normalizeSession(session: Session): Session { if (session.duration) { session.duration = 0; } - - return session; } /** @@ -47,7 +49,7 @@ function normalizeSession(session: Session): Session { * All properties that are timestamps, versions, ids or variables that may vary * by platform are replaced with placeholder strings */ -function normalizeEvent(event: Event & ReplayEvent): Event { +function normalizeEvent(event: Event & ReplayEvent): void { if (event.sdk?.version) { event.sdk.version = '{{version}}'; } @@ -193,6 +195,13 @@ function normalizeEvent(event: Event & ReplayEvent): Event { breadcrumb.timestamp = 0; } } +} + +export function normalizeProfile(profile: Profile | undefined): void { + if (!profile) { + return; + } - return event; + profile.event_id = '{{id}}'; + profile.timestamp = '{{time}}'; } diff --git a/test/e2e/server/index.ts b/test/e2e/server/index.ts index aee950a9..00e501f3 100644 --- a/test/e2e/server/index.ts +++ b/test/e2e/server/index.ts @@ -1,4 +1,4 @@ -import { Event, ReplayEvent, Session, Transaction } from '@sentry/types'; +import { Event, Profile, ReplayEvent, Session, Transaction } from '@sentry/types'; import { forEachEnvelopeItem, parseEnvelope } from '@sentry/utils'; import { Server } from 'http'; import Koa from 'koa'; @@ -38,6 +38,8 @@ export interface TestServerEvent<T = unknown> { namespacedData?: Record<string, any>; /** Attachments */ attachments?: Attachment[]; + /** Profiling data */ + profile?: Profile; /** API method used for submission */ method: 'envelope' | 'minidump' | 'store'; } @@ -121,6 +123,7 @@ export class TestServer { let data: Event | Transaction | Session | ReplayEvent | undefined; const attachments: Attachment[] = []; + let profile: Profile | undefined; forEachEnvelopeItem(envelope, ([headers, item]) => { if (headers.type === 'event' || headers.type === 'transaction' || headers.type === 'session') { @@ -138,12 +141,17 @@ export class TestServer { if (headers.type === 'attachment') { attachments.push(headers); } + + if (headers.type === 'profile') { + profile = item as unknown as Profile; + } }); if (data) { this._addEvent({ data, attachments, + profile, appId: ctx.params.id, sentryKey: keyMatch[1], method: 'envelope', diff --git a/test/e2e/test-apps/other/browser-profiling/event.json b/test/e2e/test-apps/other/browser-profiling/event.json new file mode 100644 index 00000000..b2e74eaf --- /dev/null +++ b/test/e2e/test-apps/other/browser-profiling/event.json @@ -0,0 +1,141 @@ +{ + "method": "envelope", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "appId": "277345", + "data": { + "sdk": { + "name": "sentry.javascript.electron", + "packages": [ + { + "name": "npm:@sentry/electron", + "version": "{{version}}" + } + ], + "version": "{{version}}" + }, + "contexts": { + "app": { + "app_name": "browser-profiling", + "app_version": "1.0.0", + "app_start_time": "{{time}}" + }, + "browser": { + "name": "Chrome" + }, + "chrome": { + "name": "Chrome", + "type": "runtime", + "version": "{{version}}" + }, + "device": { + "arch": "{{arch}}", + "family": "Desktop", + "memory_size": 0, + "free_memory": 0, + "processor_count": 0, + "processor_frequency": 0, + "cpu_description": "{{cpu}}", + "screen_resolution": "{{screen}}", + "screen_density": 1, + "language": "{{language}}" + }, + "node": { + "name": "Node", + "type": "runtime", + "version": "{{version}}" + }, + "os": { + "name": "{{platform}}", + "version": "{{version}}" + }, + "runtime": { + "name": "Electron", + "version": "{{version}}" + } + }, + "spans": [ + { + "description": "PBKDF2", + "origin": "manual", + "parent_span_id": "{{id}}", + "span_id": "{{id}}", + "start_timestamp": 0, + "timestamp": 0, + "trace_id": "{{id}}" + }, + { + "description": "PBKDF2", + "origin": "manual", + "parent_span_id": "{{id}}", + "span_id": "{{id}}", + "start_timestamp": 0, + "timestamp": 0, + "trace_id": "{{id}}" + }, + { + "description": "PBKDF2", + "origin": "manual", + "parent_span_id": "{{id}}", + "span_id": "{{id}}", + "start_timestamp": 0, + "timestamp": 0, + "trace_id": "{{id}}" + }, + { + "description": "PBKDF2", + "origin": "manual", + "parent_span_id": "{{id}}", + "span_id": "{{id}}", + "start_timestamp": 0, + "timestamp": 0, + "trace_id": "{{id}}" + } + ], + "release": "some-release", + "environment": "development", + "user": { + "ip_address": "{{auto}}" + }, + "event_id": "{{id}}", + "platform": "javascript", + "start_timestamp": 0, + "timestamp": 0, + "breadcrumbs": [], + "request": { + "url": "app:///src/index.html" + }, + "tags": { + "event.environment": "javascript", + "event.origin": "electron", + "event_type": "javascript" + } + }, + "profile": { + "event_id": "{{id}}", + "timestamp": "{{time}}", + "release": "some-release", + "environment": "development", + "profile": { + "samples": [ + { + "stack_id": 0, + "thread_id": "0" + }, + { + "stack_id": 0, + "thread_id": "0" + }, + { + "stack_id": 0, + "thread_id": "0" + } + ], + "thread_metadata": { "0": { "name": "main" } } + }, + "transactions": [ + { + "name": "Long work" + } + ] + } +} diff --git a/test/e2e/test-apps/other/browser-profiling/package.json b/test/e2e/test-apps/other/browser-profiling/package.json new file mode 100644 index 00000000..a9f501c7 --- /dev/null +++ b/test/e2e/test-apps/other/browser-profiling/package.json @@ -0,0 +1,8 @@ +{ + "name": "browser-profiling", + "version": "1.0.0", + "main": "src/main.js", + "dependencies": { + "@sentry/electron": "3.0.0" + } +} diff --git a/test/e2e/test-apps/other/browser-profiling/recipe.yml b/test/e2e/test-apps/other/browser-profiling/recipe.yml new file mode 100644 index 00000000..ea4705f3 --- /dev/null +++ b/test/e2e/test-apps/other/browser-profiling/recipe.yml @@ -0,0 +1,4 @@ +description: Browser Profiling +command: yarn +# Browser Tracing fails on Electron v24 +condition: version.major >= 15 diff --git a/test/e2e/test-apps/other/browser-profiling/src/index.html b/test/e2e/test-apps/other/browser-profiling/src/index.html new file mode 100644 index 00000000..4b296c44 --- /dev/null +++ b/test/e2e/test-apps/other/browser-profiling/src/index.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + </head> + <body> + <script> + const crypto = require('crypto'); + const { + addTracingExtensions, + init, + BrowserProfilingIntegration, + startSpan, + } = require('@sentry/electron/renderer'); + + addTracingExtensions(); + + init({ + debug: true, + integrations: [new BrowserProfilingIntegration()], + tracesSampleRate: 1, + profilesSampleRate: 1, + }); + + function pbkdf2() { + return new Promise((resolve) => { + const salt = crypto.randomBytes(128).toString('base64'); + crypto.pbkdf2('myPassword', salt, 10000, 512, 'sha512', resolve); + }); + } + + async function longWork() { + for (let i = 0; i < 10; i++) { + await startSpan({ name: 'PBKDF2' }, async () => { + await pbkdf2(); + }); + } + } + + setTimeout(() => { + startSpan({ name: 'Long work' }, async () => { + await longWork(); + }); + }, 500); + </script> + </body> +</html> diff --git a/test/e2e/test-apps/other/browser-profiling/src/main.js b/test/e2e/test-apps/other/browser-profiling/src/main.js new file mode 100644 index 00000000..21736f0d --- /dev/null +++ b/test/e2e/test-apps/other/browser-profiling/src/main.js @@ -0,0 +1,25 @@ +const path = require('path'); + +const { app, BrowserWindow } = require('electron'); +const { init } = require('@sentry/electron'); + +init({ + dsn: '__DSN__', + debug: true, + release: 'some-release', + autoSessionTracking: false, + enableRendererProfiling: true, + onFatalError: () => {}, +}); + +app.on('ready', () => { + const mainWindow = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + }, + }); + + mainWindow.loadFile(path.join(__dirname, 'index.html')); +}); From 02e834132ce06e44d5382ee24d77c077eb9a9819 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 2 Jan 2024 11:47:14 +0100 Subject: [PATCH 188/239] feat: Update JavaScript SDKs to v7.90.0 (#800) --- package.json | 14 +- src/index.ts | 32 +++- src/main/anr.ts | 4 +- src/main/index.ts | 32 +++- src/main/integrations/additional-context.ts | 29 ++-- .../integrations/browser-window-session.ts | 6 +- src/main/integrations/electron-breadcrumbs.ts | 23 +-- src/main/integrations/electron-minidump.ts | 25 ++- src/main/integrations/main-process-session.ts | 2 +- src/main/integrations/onuncaughtexception.ts | 74 +++++---- .../integrations/sentry-minidump/index.ts | 34 ++-- .../sentry-minidump/minidump-loader.ts | 6 +- src/main/ipc.ts | 61 ++++---- src/main/sessions.ts | 8 +- src/main/store.ts | 4 +- src/main/transports/queue.ts | 16 +- src/renderer/index.ts | 32 +++- src/renderer/integrations/scope-to-main.ts | 2 +- src/renderer/sdk.ts | 2 +- .../main-custom-release/src/main.js | 2 +- test/unit/net.test.ts | 10 +- yarn.lock | 148 ++++++++++-------- 22 files changed, 315 insertions(+), 251 deletions(-) diff --git a/package.json b/package.json index 2b6245b4..bab79fe5 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.84.0", - "@sentry/core": "7.84.0", - "@sentry/node": "7.84.0", - "@sentry/types": "7.84.0", - "@sentry/utils": "7.84.0", + "@sentry/browser": "7.90.0", + "@sentry/core": "7.90.0", + "@sentry/node": "7.90.0", + "@sentry/types": "7.90.0", + "@sentry/utils": "7.90.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.84.0", - "@sentry-internal/typescript": "7.84.0", + "@sentry-internal/eslint-config-sdk": "7.90.0", + "@sentry-internal/typescript": "7.90.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/index.ts b/src/index.ts index 8c05fdd2..5887fe37 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,6 +7,7 @@ import { BrowserOptions } from './renderer'; export type { Breadcrumb, BreadcrumbHint, + PolymorphicRequest, Request, SdkInfo, Event, @@ -16,6 +17,7 @@ export type { // eslint-disable-next-line deprecation/deprecation Severity, SeverityLevel, + Span, StackFrame, Stacktrace, Thread, @@ -24,36 +26,50 @@ export type { } from '@sentry/types'; export { + // eslint-disable-next-line deprecation/deprecation addGlobalEventProcessor, + addEventProcessor, addBreadcrumb, addIntegration, captureException, captureEvent, captureMessage, + // eslint-disable-next-line deprecation/deprecation configureScope, createTransport, + // eslint-disable-next-line deprecation/deprecation + extractTraceparentData, + getActiveTransaction, getHubFromCarrier, getCurrentHub, + getClient, + getCurrentScope, Hub, lastEventId, makeMain, + runWithAsyncContext, Scope, startTransaction, - getActiveSpan, - startSpan, - startInactiveSpan, - startSpanManual, - continueTrace, - SDK_VERSION, setContext, setExtra, setExtras, setTag, setTags, setUser, + spanStatusfromHttpCode, + trace, withScope, - FunctionToString, - InboundFilters, + captureCheckIn, + withMonitor, + setMeasurement, + getActiveSpan, + startSpan, + // eslint-disable-next-line deprecation/deprecation + startActiveSpan, + startInactiveSpan, + startSpanManual, + continueTrace, + metrics, } from '@sentry/core'; export type { SpanStatusType } from '@sentry/core'; diff --git a/src/main/anr.ts b/src/main/anr.ts index 01913d15..e6de9047 100644 --- a/src/main/anr.ts +++ b/src/main/anr.ts @@ -61,7 +61,9 @@ function rendererDebugger(contents: WebContents, pausedStack: (frames: StackFram }); // In node, we enable just before pausing but for Chrome, the debugger must be enabled before he ANR event occurs - void contents.debugger.sendCommand('Debugger.enable'); + contents.debugger.sendCommand('Debugger.enable').catch(() => { + // ignore + }); return () => { return contents.debugger.sendCommand('Debugger.pause'); diff --git a/src/main/index.ts b/src/main/index.ts index 8e637f32..0b55870c 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -8,6 +8,7 @@ import * as ElectronMainIntegrations from './integrations'; export type { Breadcrumb, BreadcrumbHint, + PolymorphicRequest, Request, SdkInfo, Event, @@ -17,41 +18,58 @@ export type { // eslint-disable-next-line deprecation/deprecation Severity, SeverityLevel, + Span, StackFrame, Stacktrace, Thread, + Transaction, User, } from '@sentry/types'; export { + // eslint-disable-next-line deprecation/deprecation addGlobalEventProcessor, + addEventProcessor, addBreadcrumb, addIntegration, captureException, captureEvent, captureMessage, + // eslint-disable-next-line deprecation/deprecation configureScope, createTransport, + // eslint-disable-next-line deprecation/deprecation + extractTraceparentData, + getActiveTransaction, getHubFromCarrier, getCurrentHub, + getClient, + getCurrentScope, Hub, makeMain, + runWithAsyncContext, Scope, startTransaction, - getActiveSpan, - startSpan, - startInactiveSpan, - startSpanManual, - continueTrace, setContext, setExtra, setExtras, setTag, setTags, setUser, + spanStatusfromHttpCode, + trace, withScope, - FunctionToString, - InboundFilters, + captureCheckIn, + withMonitor, + setMeasurement, + getActiveSpan, + startSpan, + // eslint-disable-next-line deprecation/deprecation + startActiveSpan, + startInactiveSpan, + startSpanManual, + continueTrace, + metrics, } from '@sentry/core'; export type { SpanStatusType } from '@sentry/core'; diff --git a/src/main/integrations/additional-context.ts b/src/main/integrations/additional-context.ts index b2d4713b..32ebf7d3 100644 --- a/src/main/integrations/additional-context.ts +++ b/src/main/integrations/additional-context.ts @@ -44,21 +44,26 @@ export class AdditionalContext implements Integration { addGlobalEventProcessor(async (event: Event) => this._addAdditionalContext(event)); // Some metrics are only available after app ready so we lazily load them - void whenAppReady.then(() => { - const { language, screen } = this._options; + whenAppReady.then( + () => { + const { language, screen } = this._options; - if (language) { - this._lazyDeviceContext.language = app.getLocale(); - } - - if (screen) { - this._setPrimaryDisplayInfo(); + if (language) { + this._lazyDeviceContext.language = app.getLocale(); + } - electronScreen.on('display-metrics-changed', () => { + if (screen) { this._setPrimaryDisplayInfo(); - }); - } - }); + + electronScreen.on('display-metrics-changed', () => { + this._setPrimaryDisplayInfo(); + }); + } + }, + () => { + // ignore + }, + ); } /** Adds additional context to event */ diff --git a/src/main/integrations/browser-window-session.ts b/src/main/integrations/browser-window-session.ts index 02e1e0ab..5ce27244 100644 --- a/src/main/integrations/browser-window-session.ts +++ b/src/main/integrations/browser-window-session.ts @@ -80,7 +80,7 @@ export class BrowserWindowSession implements Integration { // We are now active if (this._state.name === 'inactive') { // If we were inactive, start a new session - void startSession(true); + startSession(true); } else if (this._state.name === 'timeout') { // Clear the timeout since the app has become active again clearTimeout(this._state.timer); @@ -96,7 +96,9 @@ export class BrowserWindowSession implements Integration { // if the state says we're still waiting for the timeout, end the session if (this._state.name === 'timeout') { this._state = { name: 'inactive' }; - void endSession(); + endSession().catch(() => { + // ignore + }); } }, timeout) // unref so this timer doesn't block app exit diff --git a/src/main/integrations/electron-breadcrumbs.ts b/src/main/integrations/electron-breadcrumbs.ts index a9ebf36a..ebc2a0bc 100644 --- a/src/main/integrations/electron-breadcrumbs.ts +++ b/src/main/integrations/electron-breadcrumbs.ts @@ -127,16 +127,21 @@ export class ElectronBreadcrumbs implements Integration { trackRendererProperties(); - void whenAppReady.then(() => { - // We can't access these until app 'ready' - if (this._options.screen) { - this._patchEventEmitter(screen, 'screen', this._options.screen); - } + whenAppReady.then( + () => { + // We can't access these until app 'ready' + if (this._options.screen) { + this._patchEventEmitter(screen, 'screen', this._options.screen); + } - if (this._options.powerMonitor) { - this._patchEventEmitter(powerMonitor, 'powerMonitor', this._options.powerMonitor); - } - }); + if (this._options.powerMonitor) { + this._patchEventEmitter(powerMonitor, 'powerMonitor', this._options.powerMonitor); + } + }, + () => { + // ignore + }, + ); if (this._options.app) { this._patchEventEmitter(app, 'app', this._options.app); diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts index 8e162c7f..ad3be97c 100644 --- a/src/main/integrations/electron-minidump.ts +++ b/src/main/integrations/electron-minidump.ts @@ -1,6 +1,6 @@ -import { getCurrentHub, Scope } from '@sentry/core'; +import { applyScopeDataToEvent, getCurrentHub } from '@sentry/core'; import { NodeClient, NodeOptions } from '@sentry/node'; -import { Event, Integration } from '@sentry/types'; +import { Event, Integration, ScopeData } from '@sentry/types'; import { logger, makeDsn, SentryError } from '@sentry/utils'; import { app, crashReporter } from 'electron'; @@ -105,10 +105,10 @@ export class ElectronMinidump implements Integration { } // Check if last crash report was likely to have been unreported in the last session - void unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date).then((crashed) => { + unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date).then((crashed) => { // Check if a previous session was not closed - checkPreviousSession(crashed).catch((error) => logger.error(error)); - }); + return checkPreviousSession(crashed); + }, logger.error); } /** @@ -145,19 +145,15 @@ export class ElectronMinidump implements Integration { const hubScope = getCurrentHub().getScope(); if (hubScope) { hubScope.addScopeListener((updatedScope) => { - const scope = Scope.clone(updatedScope); - /* eslint-disable @typescript-eslint/no-unsafe-member-access */ - (scope as any)._eventProcessors = []; - (scope as any)._scopeListeners = []; - /* eslint-enable @typescript-eslint/no-unsafe-member-access */ - + const scope = updatedScope.getScopeData(); + scope.eventProcessors = []; this._updateExtraParams(scope); }); } } /** Updates Electron uploader extra params */ - private _updateExtraParams(scope: Scope): void { + private _updateExtraParams(scope: ScopeData): void { this._updateEpoch += 1; const currentEpoch = this._updateEpoch; @@ -175,15 +171,14 @@ export class ElectronMinidump implements Integration { } /** Builds up an event to send with the native Electron uploader */ - private async _getNativeUploaderEvent(scope: Scope): Promise<Event> { + private async _getNativeUploaderEvent(scope: ScopeData): Promise<Event> { const event = mergeEvents(await getEventDefaults(this._customRelease), { level: 'fatal', platform: 'native', tags: { 'event.environment': 'native', event_type: 'native' }, }); - // Apply the scope to the event - await scope.applyToEvent(event); + applyScopeDataToEvent(event, scope); delete event.sdkProcessingMetadata; diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts index 3d161681..af12d8c0 100644 --- a/src/main/integrations/main-process-session.ts +++ b/src/main/integrations/main-process-session.ts @@ -25,7 +25,7 @@ export class MainProcessSession implements Integration { /** @inheritDoc */ public setupOnce(): void { - void startSession(!!this._options.sendOnCreate); + startSession(!!this._options.sendOnCreate); endSessionOnExit(); } diff --git a/src/main/integrations/onuncaughtexception.ts b/src/main/integrations/onuncaughtexception.ts index 8a4d4798..7bd8bdaa 100644 --- a/src/main/integrations/onuncaughtexception.ts +++ b/src/main/integrations/onuncaughtexception.ts @@ -1,4 +1,4 @@ -import { getCurrentHub } from '@sentry/core'; +import { getCurrentHub, getCurrentScope } from '@sentry/core'; import { NodeClient } from '@sentry/node'; import { Event, Integration } from '@sentry/types'; import { dialog } from 'electron'; @@ -24,43 +24,49 @@ export class OnUncaughtException implements Integration { global.process.on('uncaughtException', (error: Error) => { const self = getCurrentHub().getIntegration(OnUncaughtException); if (self) { - getCurrentHub().withScope(async (scope) => { - scope.addEventProcessor(async (event: Event) => ({ - ...event, - level: 'fatal', - })); + const scope = getCurrentScope(); - const nodeClient = getCurrentHub().getClient() as NodeClient; - nodeClient.captureException( - error, - { - originalException: error, - data: { - mechanism: { - handled: false, - type: 'generic', - }, + scope.addEventProcessor(async (event: Event) => ({ + ...event, + level: 'fatal', + })); + + const nodeClient = getCurrentHub().getClient() as NodeClient; + nodeClient.captureException( + error, + { + originalException: error, + data: { + mechanism: { + handled: false, + type: 'generic', }, }, - getCurrentHub().getScope(), - ); - await nodeClient.flush(nodeClient.getOptions().shutdownTimeout || 2000); + }, + getCurrentHub().getScope(), + ); - if (options?.onFatalError) { - options.onFatalError(error); - } else if (global.process.listenerCount('uncaughtException') <= 2) { - // In addition to this handler there is always one in Electron - // The dialog is only shown if there are no other handlers - // eslint-disable-next-line no-console - console.error('Uncaught Exception:'); - // eslint-disable-next-line no-console - console.error(error); - const ref = error.stack; - const stack = ref !== undefined ? ref : `${error.name}: ${error.message}`; - const message = `Uncaught Exception:\n${stack}`; - dialog.showErrorBox('A JavaScript error occurred in the main process', message); - } - }); + nodeClient.flush(nodeClient.getOptions().shutdownTimeout || 2000).then( + () => { + if (options?.onFatalError) { + options.onFatalError(error); + } else if (global.process.listenerCount('uncaughtException') <= 2) { + // In addition to this handler there is always one in Electron + // The dialog is only shown if there are no other handlers + // eslint-disable-next-line no-console + console.error('Uncaught Exception:'); + // eslint-disable-next-line no-console + console.error(error); + const ref = error.stack; + const stack = ref !== undefined ? ref : `${error.name}: ${error.message}`; + const message = `Uncaught Exception:\n${stack}`; + dialog.showErrorBox('A JavaScript error occurred in the main process', message); + } + }, + () => { + // ignore + }, + ); } }); } diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts index 94b72158..c3c8e69e 100644 --- a/src/main/integrations/sentry-minidump/index.ts +++ b/src/main/integrations/sentry-minidump/index.ts @@ -1,6 +1,6 @@ -import { captureEvent, getCurrentHub, Scope } from '@sentry/core'; +import { applyScopeDataToEvent, captureEvent, getCurrentHub, getCurrentScope, Scope } from '@sentry/core'; import { NodeClient } from '@sentry/node'; -import { Event, Integration } from '@sentry/types'; +import { Event, Integration, ScopeData } from '@sentry/types'; import { logger, SentryError } from '@sentry/utils'; import { app, crashReporter } from 'electron'; @@ -15,7 +15,7 @@ import { BufferedWriteStore } from '../../store'; import { getMinidumpLoader, MinidumpLoader } from './minidump-loader'; interface PreviousRun { - scope: Scope; + scope: ScopeData; event?: Event; } @@ -51,7 +51,7 @@ export class SentryMinidump implements Integration { this._startCrashReporter(); this._scopeStore = new BufferedWriteStore<PreviousRun>(getSentryCachePath(), 'scope_v3', { - scope: new Scope(), + scope: new Scope().getScopeData(), }); // We need to store the scope in a variable here so it can be attached to minidumps @@ -187,24 +187,17 @@ export class SentryMinidump implements Integration { */ private _setupScopeListener(currentRelease: string, currentEnvironment: string): void { const scopeChanged = (updatedScope: Scope): void => { - const scope = Scope.clone(updatedScope); - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - (scope as any)._eventProcessors = []; - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - (scope as any)._scopeListeners = []; - // Since the initial scope read is async, we need to ensure that any writes do not beat that // https://github.com/getsentry/sentry-electron/issues/585 setImmediate(async () => { - const event = await getEventDefaults(currentRelease, currentEnvironment); void this._scopeStore?.set({ - scope, - event, + scope: updatedScope.getScopeData(), + event: await getEventDefaults(currentRelease, currentEnvironment), }); }); }; - const scope = getCurrentHub().getScope(); + const scope = getCurrentScope(); if (scope) { scope.addScopeListener(scopeChanged); @@ -242,25 +235,22 @@ export class SentryMinidump implements Integration { return true; } - let event: Event | null = eventIn; + const event = eventIn; // If this is a native main process crash, we need to apply the scope and context from the previous run if (event.tags?.['event.process'] === 'browser') { const previousRun = await this._scopeLastRun; + if (previousRun) { + if (previousRun.scope) { + applyScopeDataToEvent(event, previousRun.scope); + } - const storedScope = Scope.clone(previousRun?.scope); - event = await storedScope.applyToEvent(event); - - if (event && previousRun) { event.release = previousRun.event?.release || event.release; event.environment = previousRun.event?.environment || event.environment; event.contexts = previousRun.event?.contexts || event.contexts; } } - const hubScope = hub.getScope(); - event = hubScope && event ? await hubScope.applyToEvent(event) : event; - if (!event) { return false; } diff --git a/src/main/integrations/sentry-minidump/minidump-loader.ts b/src/main/integrations/sentry-minidump/minidump-loader.ts index e46b9d80..135ef785 100644 --- a/src/main/integrations/sentry-minidump/minidump-loader.ts +++ b/src/main/integrations/sentry-minidump/minidump-loader.ts @@ -180,7 +180,7 @@ function minidumpFromBreakpadMultipart(file: Buffer): Buffer { function removeBreakpadMetadata(crashesDirectory: string, paths: string[]): void { // Remove all metadata files and forget about them. - void Promise.all( + Promise.all( paths .filter((file) => file.endsWith('.txt') && !file.endsWith('log.txt')) .map(async (file) => { @@ -191,7 +191,9 @@ function removeBreakpadMetadata(crashesDirectory: string, paths: string[]): void logger.warn('Could not delete', path); } }), - ); + ).catch(() => { + // ignore since we catch each unlink individually + }); } function breakpadMinidumpLoader(): MinidumpLoader { diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 8d80a37a..49748cf7 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -1,5 +1,5 @@ -import { captureEvent, configureScope, getCurrentHub, Scope } from '@sentry/core'; -import { Attachment, AttachmentItem, Envelope, Event, EventItem, Profile } from '@sentry/types'; +import { captureEvent, getCurrentHub, getCurrentScope } from '@sentry/core'; +import { Attachment, AttachmentItem, Envelope, Event, EventItem, Profile, ScopeData } from '@sentry/types'; import { forEachEnvelopeItem, logger, parseEnvelope, SentryError } from '@sentry/utils'; import { app, ipcMain, protocol, WebContents, webContents } from 'electron'; import { TextDecoder, TextEncoder } from 'util'; @@ -25,7 +25,7 @@ const SENTRY_CUSTOM_SCHEME = { privileges: { bypassCSP: true, corsEnabled: true, supportFetchAPI: true, secure: true }, }; -async function newProtocolRenderer(): Promise<void> { +function newProtocolRenderer(): void { KNOWN_RENDERERS = KNOWN_RENDERERS || new Set(); WINDOW_ID_TO_WEB_CONTENTS = WINDOW_ID_TO_WEB_CONTENTS || new Map(); @@ -36,10 +36,8 @@ async function newProtocolRenderer(): Promise<void> { } if (!wc.isDestroyed()) { - try { - const windowId: string | undefined = await wc.executeJavaScript('window.__SENTRY_RENDERER_ID__'); - - if (windowId) { + wc.executeJavaScript('window.__SENTRY_RENDERER_ID__').then((windowId: string | undefined) => { + if (windowId && KNOWN_RENDERERS && WINDOW_ID_TO_WEB_CONTENTS) { KNOWN_RENDERERS.add(wcId); WINDOW_ID_TO_WEB_CONTENTS.set(windowId, wcId); @@ -48,9 +46,7 @@ async function newProtocolRenderer(): Promise<void> { WINDOW_ID_TO_WEB_CONTENTS?.delete(windowId); }); } - } catch (_) { - // ignore - } + }, logger.error); } } } @@ -144,39 +140,36 @@ function hasKeys(obj: any): boolean { * Handle scope updates from renderer processes */ function handleScope(options: ElectronMainOptionsInternal, jsonScope: string): void { - let rendererScope: Scope; + let sentScope: ScopeData; try { - rendererScope = JSON.parse(jsonScope) as Scope; + sentScope = JSON.parse(jsonScope) as ScopeData; } catch { logger.warn('sentry-electron received an invalid scope message'); return; } - const sentScope = Scope.clone(rendererScope) as any; - /* eslint-disable @typescript-eslint/no-unsafe-member-access */ - configureScope((scope) => { - if (hasKeys(sentScope._user)) { - scope.setUser(sentScope._user); - } + const scope = getCurrentScope(); - if (hasKeys(sentScope._tags)) { - scope.setTags(sentScope._tags); - } + if (hasKeys(sentScope.user)) { + scope.setUser(sentScope.user); + } - if (hasKeys(sentScope._extra)) { - scope.setExtras(sentScope._extra); - } + if (hasKeys(sentScope.tags)) { + scope.setTags(sentScope.tags); + } - for (const attachment of sentScope._attachments || []) { - scope.addAttachment(attachment); - } + if (hasKeys(sentScope.extra)) { + scope.setExtras(sentScope.extra); + } - const breadcrumb = sentScope._breadcrumbs.pop(); - if (breadcrumb) { - scope.addBreadcrumb(breadcrumb, options?.maxBreadcrumbs || 100); - } - }); - /* eslint-enable @typescript-eslint/no-unsafe-member-access */ + for (const attachment of sentScope.attachments || []) { + scope.addAttachment(attachment); + } + + const breadcrumb = sentScope.breadcrumbs.pop(); + if (breadcrumb) { + scope.addBreadcrumb(breadcrumb, options?.maxBreadcrumbs || 100); + } } /** Enables Electron protocol handling */ @@ -208,7 +201,7 @@ function configureProtocol(options: ElectronMainOptionsInternal): void { const data = request.body; if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.RENDERER_START}`)) { - void newProtocolRenderer(); + newProtocolRenderer(); } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.EVENT}`) && data) { handleEvent(options, data.toString(), getWebContents()); } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.SCOPE}`) && data) { diff --git a/src/main/sessions.ts b/src/main/sessions.ts index df78b67c..ac0ae9c9 100644 --- a/src/main/sessions.ts +++ b/src/main/sessions.ts @@ -27,7 +27,7 @@ function getSessionStore(): Store<SessionContext | undefined> { let persistTimer: NodeJS.Timer | undefined; /** Starts a session */ -export async function startSession(sendOnCreate: boolean): Promise<void> { +export function startSession(sendOnCreate: boolean): void { const hub = getCurrentHub(); const session = hub.startSession(); @@ -35,7 +35,11 @@ export async function startSession(sendOnCreate: boolean): Promise<void> { hub.captureSession(); } - await getSessionStore().set(session); + getSessionStore() + .set(session) + .catch(() => { + // Does not throw + }); // Every PERSIST_INTERVAL, write the session to disk persistTimer = setInterval(async () => { diff --git a/src/main/store.ts b/src/main/store.ts index 359ffffe..06a18651 100644 --- a/src/main/store.ts +++ b/src/main/store.ts @@ -151,7 +151,9 @@ export class BufferedWriteStore<T> extends Store<T> { const data = this._pendingWrite.data; // Clear the pending write immediately so that subsequent writes can be queued this._pendingWrite = undefined; - void super.set(data); + super.set(data).catch(() => { + // ignore + }); } } } diff --git a/src/main/transports/queue.ts b/src/main/transports/queue.ts index b65911fa..3f506579 100644 --- a/src/main/transports/queue.ts +++ b/src/main/transports/queue.ts @@ -50,7 +50,7 @@ export class PersistedRequestQueue { while (queue.length > this._maxCount) { const removed = queue.shift(); if (removed) { - void this._removeBody(removed.bodyPath); + this._removeBody(removed.bodyPath); } } @@ -78,7 +78,7 @@ export class PersistedRequestQueue { // We drop events created in v3 of the SDK or before the cut-off if ('type' in found || found.date.getTime() < cutOff) { // we're dropping this event so delete the body - void this._removeBody(found.bodyPath); + this._removeBody(found.bodyPath); found = undefined; } else { pendingCount = queue.length; @@ -91,7 +91,7 @@ export class PersistedRequestQueue { if (found) { try { const body = await readFileAsync(join(this._queuePath, found.bodyPath)); - void this._removeBody(found.bodyPath); + this._removeBody(found.bodyPath); return { request: { @@ -109,11 +109,9 @@ export class PersistedRequestQueue { } /** Removes the body of the request */ - private async _removeBody(bodyPath: string): Promise<void> { - try { - await unlinkAsync(join(this._queuePath, bodyPath)); - } catch (_) { - // - } + private _removeBody(bodyPath: string): void { + unlinkAsync(join(this._queuePath, bodyPath)).catch(() => { + // ignore + }); } } diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 6e267b84..03cdc3ef 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -5,6 +5,7 @@ import * as ElectronRendererIntegrations from './integrations'; export type { Breadcrumb, BreadcrumbHint, + PolymorphicRequest, Request, SdkInfo, Event, @@ -14,41 +15,58 @@ export type { // eslint-disable-next-line deprecation/deprecation Severity, SeverityLevel, + Span, StackFrame, Stacktrace, Thread, + Transaction, User, } from '@sentry/types'; export { + // eslint-disable-next-line deprecation/deprecation addGlobalEventProcessor, + addEventProcessor, addBreadcrumb, addIntegration, captureException, captureEvent, captureMessage, + // eslint-disable-next-line deprecation/deprecation configureScope, createTransport, + // eslint-disable-next-line deprecation/deprecation + extractTraceparentData, + getActiveTransaction, getHubFromCarrier, getCurrentHub, + getClient, + getCurrentScope, Hub, makeMain, + runWithAsyncContext, Scope, startTransaction, - getActiveSpan, - startSpan, - startInactiveSpan, - startSpanManual, - continueTrace, setContext, setExtra, setExtras, setTag, setTags, setUser, + spanStatusfromHttpCode, + trace, withScope, - FunctionToString, - InboundFilters, + captureCheckIn, + withMonitor, + setMeasurement, + getActiveSpan, + startSpan, + // eslint-disable-next-line deprecation/deprecation + startActiveSpan, + startInactiveSpan, + startSpanManual, + continueTrace, + metrics, } from '@sentry/core'; export type { SpanStatusType } from '@sentry/core'; diff --git a/src/renderer/integrations/scope-to-main.ts b/src/renderer/integrations/scope-to-main.ts index 37e527ba..c2ae4ff4 100644 --- a/src/renderer/integrations/scope-to-main.ts +++ b/src/renderer/integrations/scope-to-main.ts @@ -32,7 +32,7 @@ export class ScopeToMain implements Integration { const ipc = getIPC(); scope.addScopeListener((updatedScope) => { - ipc.sendScope(JSON.stringify(normalize(updatedScope, 20, 2_000))); + ipc.sendScope(JSON.stringify(normalize(updatedScope.getScopeData(), 20, 2_000))); scope.clearBreadcrumbs(); scope.clearAttachments(); }); diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index bdadcef4..d22e92ef 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -40,7 +40,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_84_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_90_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/test/e2e/test-apps/native-sentry/main-custom-release/src/main.js b/test/e2e/test-apps/native-sentry/main-custom-release/src/main.js index 396d9bf7..18952408 100644 --- a/test/e2e/test-apps/native-sentry/main-custom-release/src/main.js +++ b/test/e2e/test-apps/native-sentry/main-custom-release/src/main.js @@ -28,6 +28,6 @@ app.on('ready', () => { if (process.env.APP_FIRST_RUN) { setTimeout(() => { process.crash(); - }, 500); + }, 1000); } }); diff --git a/test/unit/net.test.ts b/test/unit/net.test.ts index d4d98544..5e538911 100644 --- a/test/unit/net.test.ts +++ b/test/unit/net.test.ts @@ -68,12 +68,10 @@ function createHubOnScope(customOptions: Partial<ClientOptions> = {}): Hub { hub.bindClient(new NodeClient(options)); - hub.configureScope((scope) => - scope.setUser({ - id: 'uid123', - segment: 'segmentA', - }), - ); + hub.getScope().setUser({ + id: 'uid123', + segment: 'segmentA', + }); return hub; } diff --git a/yarn.lock b/yarn.lock index 2df3a98d..c00e6ca3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.84.0": - version "7.84.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.84.0.tgz#235e2cab61f7ee31e83798369d28af0928e8e952" - integrity sha512-p+W1WmFNtgY1iO8Metk4HHlrJqJ2CpDHQbYWuS4kc8Ry+wuyhWdYs/zD4H80rao6Thl0S6x5ywiv/M4lsaQrMw== +"@sentry-internal/eslint-config-sdk@7.90.0": + version "7.90.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.90.0.tgz#0a765a209ca3499bbc08856b8228613ee4e715f9" + integrity sha512-PvjJ/Dsp9eofcZz6wBaPEDfc5R9mLMgDR8WfWECiMhfYu7KBT2GgMx1dWe2g0ylqDzoBmY15+8gGELhf90kfrA== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.84.0" - "@sentry-internal/typescript" "7.84.0" + "@sentry-internal/eslint-plugin-sdk" "7.90.0" + "@sentry-internal/typescript" "7.90.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,78 +180,88 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.84.0": - version "7.84.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.84.0.tgz#e2fc9aeef835adcc358311fa73a937e90642e060" - integrity sha512-RiJPEhzaC8LUMPnxG5QcxPqVKmTCOypzkXH+6RfGQusYYiQHQxr4PzaKKnHlCTMRelRTiiPoJ/SJLMv0NbMDbw== +"@sentry-internal/eslint-plugin-sdk@7.90.0": + version "7.90.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.90.0.tgz#4e9238816011d8a22173644db7fe72ff54e1ceb4" + integrity sha512-4/1GA6KNyBm+721DGlVgKgUC8qbI9netOZLZetVOUQ2oNiJHHdYn0jHGZzB5zMcut+/S6Nr9MqiFgjLzI8E3PA== dependencies: requireindex "~1.1.0" -"@sentry-internal/tracing@7.84.0": - version "7.84.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.84.0.tgz#430da253ee5b075be4ef57f20ea842c0208bc6b0" - integrity sha512-y9bGYA0OM6PEREfd+nk4UURZy29tpIw+7vQwpxWfEVs2fqq0/5TBFX/tKFb8AKUI9lVM8v0bcF0bNSCnuPQZHQ== - dependencies: - "@sentry/core" "7.84.0" - "@sentry/types" "7.84.0" - "@sentry/utils" "7.84.0" - -"@sentry-internal/typescript@7.84.0": - version "7.84.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.84.0.tgz#d7c29d8791c75f639fe6fdf5bacff146a5e7295f" - integrity sha512-Ls/2JCwjrROwaMcJwMwjkqlM5akjXX4SoYD7BwEpie/N7EkPIxM+gQTBS1lX7I7AUMVclyEu2xnDXSfb017aIQ== - -"@sentry/browser@7.84.0": - version "7.84.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.84.0.tgz#7c82470f0afbb6178f26127894e40e9ce2b1e6d6" - integrity sha512-X50TlTKY9WzAnHsYc4FYrCWgm+CdVo0h02ggmodVBUpRLUBjj+cs5Q1plov/v/XeorSwmorNEMUu/n+XZNSsrA== - dependencies: - "@sentry-internal/tracing" "7.84.0" - "@sentry/core" "7.84.0" - "@sentry/replay" "7.84.0" - "@sentry/types" "7.84.0" - "@sentry/utils" "7.84.0" - -"@sentry/core@7.84.0": - version "7.84.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.84.0.tgz#01d33fc452044ffd8ea57b20f60304b9cfa2b9e1" - integrity sha512-tbuwunbBx2kSex15IHCqHDnrMfIlqPc6w/76fwkGqokz3oh9GSEGlLICwmBWL8AypWimUg13IDtFpD0TJTriWA== - dependencies: - "@sentry/types" "7.84.0" - "@sentry/utils" "7.84.0" - -"@sentry/node@7.84.0": - version "7.84.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.84.0.tgz#c06167106796b2b83c0a9b52fa56f8ca820034ca" - integrity sha512-Xm3fIXT3TZOQi+6uQBavI8iOehD3PkY7v0y3hog0d4lQTH88vQK9BBsI+jZEq81Em+RG/u7vZNiFo6YMTnWF7Q== - dependencies: - "@sentry-internal/tracing" "7.84.0" - "@sentry/core" "7.84.0" - "@sentry/types" "7.84.0" - "@sentry/utils" "7.84.0" +"@sentry-internal/feedback@7.90.0": + version "7.90.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.90.0.tgz#053e36b4d01dd94c948e5eb6902f264c1d4436e6" + integrity sha512-ZIdpwK9KmiE/UYGUgNE3N9A5MWm92rbC/0u04LxQfZh0tGqN2EchwivQpFCWuu5QsKMlsza7aO6YQXsKvwt1Ww== + dependencies: + "@sentry/core" "7.90.0" + "@sentry/types" "7.90.0" + "@sentry/utils" "7.90.0" + +"@sentry-internal/tracing@7.90.0": + version "7.90.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.90.0.tgz#cd21662dbfa3d90d34e91eabd875a1616717d3d3" + integrity sha512-74jEtpdio9aRkiVBcrY1ZJXek0oFMqxDJK6BkJNCA+aUK1z96V9viehANRk3Nbxm01rWjmH1U4e1siuo9FhjuQ== + dependencies: + "@sentry/core" "7.90.0" + "@sentry/types" "7.90.0" + "@sentry/utils" "7.90.0" + +"@sentry-internal/typescript@7.90.0": + version "7.90.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.90.0.tgz#fcf4e9c35f56b9331d4dc93ce1f35a89bd3ad361" + integrity sha512-m8VDDATpnBgLfFLl1tISA2B5Yw5UUcHdoYlOGAVFnIV22wzM4M7mO8PP6vZ2teA7Rh9TINiTgJu8ZN06mkmATw== + +"@sentry/browser@7.90.0": + version "7.90.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.90.0.tgz#a5a696a328364f3bf15405d03112c06f53bb2923" + integrity sha512-ik3Jwo+TYjoEesJlt3PlHDcPE9h//WwyUsVkV9ZsVx0MSXb8c1VC4uDMsyUqjA+gPImmw1l9KlWZtvaOooZEhg== + dependencies: + "@sentry-internal/feedback" "7.90.0" + "@sentry-internal/tracing" "7.90.0" + "@sentry/core" "7.90.0" + "@sentry/replay" "7.90.0" + "@sentry/types" "7.90.0" + "@sentry/utils" "7.90.0" + +"@sentry/core@7.90.0": + version "7.90.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.90.0.tgz#dfd8e3e4eec4b140681ddb21a3fea848fcab7a01" + integrity sha512-HolpdHjULCwehKPWHR6IPQM0NBjmORhlBU7FtCh/e8TtSkZ9ztPsuofNBomMS1+mdbL+yxOIc9KUYEl0zRfeAQ== + dependencies: + "@sentry/types" "7.90.0" + "@sentry/utils" "7.90.0" + +"@sentry/node@7.90.0": + version "7.90.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.90.0.tgz#083bbdc053426d491281bff6f8a238600dd93e99" + integrity sha512-VjDI2MCkidoFEzrMa1gqmwYt1sUhYnu+zoFF5P5jgapTVVJ5xc2b7k/lS62U6IsfxHNrIdTtQHsrbCS5+s0GvQ== + dependencies: + "@sentry-internal/tracing" "7.90.0" + "@sentry/core" "7.90.0" + "@sentry/types" "7.90.0" + "@sentry/utils" "7.90.0" https-proxy-agent "^5.0.0" -"@sentry/replay@7.84.0": - version "7.84.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.84.0.tgz#7e17876d9a1802ee33800e2b2cbda4e026c0a2af" - integrity sha512-c4PxT0ZpvkR9zXNfmAk3ojkm6eZ9+NlDze09RFBOCNo69QwIN90hnvbjXFC1+vRIJsfgo78Zr0ya/Wzb3Rog7Q== +"@sentry/replay@7.90.0": + version "7.90.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.90.0.tgz#98e181c495422a13b088dcb030556511824eaa95" + integrity sha512-fsABtzQ5JQI7G5CC4fg05lVI5DTbd1uwKi41xVKFRmCB5NVTHvK7bHgP8n6uSbnle+gp9rUxVPLLBIPjKfaTmw== dependencies: - "@sentry-internal/tracing" "7.84.0" - "@sentry/core" "7.84.0" - "@sentry/types" "7.84.0" - "@sentry/utils" "7.84.0" + "@sentry-internal/tracing" "7.90.0" + "@sentry/core" "7.90.0" + "@sentry/types" "7.90.0" + "@sentry/utils" "7.90.0" -"@sentry/types@7.84.0": - version "7.84.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.84.0.tgz#e8db86c36c61659c3b2558f0aa8b6a073a756117" - integrity sha512-VqGLIF3JOUrk7yIXjLXJvAORkZL1e3dDX0Q1okRehwyt/5CRE+mdUTeJZkBo9P9mBwgMyvtwklzOGGrzjb4eMA== +"@sentry/types@7.90.0": + version "7.90.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.90.0.tgz#72797abd790fc3de546d42600752004a7f7d07d0" + integrity sha512-dA0Mtba5jYlcQ6xBsGILZuFq4NGrWLfr2ys036z2JE4H1+3PxOVERlD3Di7p+WKYM5gjFw10Hn3EgUV979E3dA== -"@sentry/utils@7.84.0": - version "7.84.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.84.0.tgz#32861d922fa31e86dd2863a1d9dfc5a369e98952" - integrity sha512-qdUVuxnRBvaf05AU+28R+xYtZmi/Ymf8os3Njq9g4XuA+QEkZLbzmIpRK5W9Ja7vUtjOeg29Xgg43A8znde9LQ== +"@sentry/utils@7.90.0": + version "7.90.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.90.0.tgz#d4eea6392af7498c7be03205151ad11ea8707915" + integrity sha512-6BpqAzONm/HQbdlL4TY2W2vBSmaG/eVvwUaHoz0wB49EkWwpF6j/SO9Kb/XkiA/qp9GoJVXpnGBFQLPx7kv/Yw== dependencies: - "@sentry/types" "7.84.0" + "@sentry/types" "7.90.0" "@sindresorhus/is@^4.0.0": version "4.6.0" From 70c640672c133dafb1070e4a10651132862da1d2 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 2 Jan 2024 13:42:06 +0100 Subject: [PATCH 189/239] meta: Update changelog for 4.16.0 release (#807) --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a133eb7..ed4bd981 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +## 4.16.0 + +- feat: Update from [v7.84.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.84.0) to + [v7.90.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.90.0) of JavaScript SDKs (#800) +- feat: Browser profiling (#799) + ## 4.15.1 - fix: Don't call `app.getPath('userData')` before SDK `init` (#797) From 60531849242bad80750e3eba2024c11892a66b0b Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 2 Jan 2024 13:42:22 +0100 Subject: [PATCH 190/239] test: Update tested Electron versions (#806) --- package.json | 2 +- test/e2e/versions.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index bab79fe5..901b6380 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "fix": "run-s fix:eslint fix:prettier", "fix:prettier": "prettier --write \"{src,test}/**/*.ts\"", "fix:eslint": "eslint . --format stylish --fix", - "update-electron-versions": "electron-latest-versions --start 2 --alpha --beta > ./test/e2e/versions.json", + "update-electron-versions": "electron-latest-versions --start 2 --beta > ./test/e2e/versions.json", "update-sdk-versions": "node ./scripts/update-sdk-versions.mjs", "pretest": "yarn build", "test": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe electron-mocha --require ts-node/register/transpile-only --timeout 12000 ./test/unit/**/*.ts", diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 02ca32c5..b3fcf09e 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.6","26.6.1","27.1.2","28.0.0-beta.10"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.3","27.2.0","28.1.0"] From 25ebceac073e13a1a12594c54c4211036dcd7ff6 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Tue, 2 Jan 2024 12:42:52 +0000 Subject: [PATCH 191/239] release: 4.16.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 901b6380..d277597b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.15.1", + "version": "4.16.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From 1453ec20b59704dc67eeddf977676e3521af993d Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 4 Jan 2024 14:16:41 +0100 Subject: [PATCH 192/239] feat: Migrate to functional integration APIs (#808) --- src/integrations.ts | 22 +- src/main/integrations/additional-context.ts | 142 ++++----- .../integrations/browser-window-session.ts | 101 +++--- src/main/integrations/child-process.ts | 144 +++++---- src/main/integrations/electron-breadcrumbs.ts | 135 ++++---- src/main/integrations/electron-minidump.ts | 256 ++++++++-------- src/main/integrations/main-context.ts | 39 +-- src/main/integrations/main-process-session.ts | 33 +- src/main/integrations/net-breadcrumbs.ts | 56 ++-- src/main/integrations/onuncaughtexception.ts | 49 ++- src/main/integrations/preload-injection.ts | 85 +++--- src/main/integrations/renderer-profiling.ts | 122 ++++---- src/main/integrations/screenshots.ts | 83 +++-- .../integrations/sentry-minidump/index.ts | 287 ++++++++---------- src/renderer/integrations/scope-to-main.ts | 58 ++-- 15 files changed, 742 insertions(+), 870 deletions(-) diff --git a/src/integrations.ts b/src/integrations.ts index 764f1363..0052a092 100644 --- a/src/integrations.ts +++ b/src/integrations.ts @@ -19,18 +19,18 @@ import { EventToMain, ScopeToMain } from './renderer/integrations'; /** Convenience interface used to expose Integrations */ export interface Integrations { // For main process - SentryMinidump: SentryMinidump; - ElectronMinidump: ElectronMinidump; - ElectronBreadcrumbs: ElectronBreadcrumbs; - MainContext: MainContext; - OnUncaughtExcept: OnUncaughtException; - PreloadInjection: PreloadInjection; - MainProcessSession: MainProcessSession; - AdditionalContext: AdditionalContext; - ChildProcess: ChildProcess; - Screenshots: Screenshots; + SentryMinidump: typeof SentryMinidump; + ElectronMinidump: typeof ElectronMinidump; + ElectronBreadcrumbs: typeof ElectronBreadcrumbs; + MainContext: typeof MainContext; + OnUncaughtExcept: typeof OnUncaughtException; + PreloadInjection: typeof PreloadInjection; + MainProcessSession: typeof MainProcessSession; + AdditionalContext: typeof AdditionalContext; + ChildProcess: typeof ChildProcess; + Screenshots: typeof Screenshots; // For renderer process - ScopeToMain: ScopeToMain; + ScopeToMain: typeof ScopeToMain; // eslint-disable-next-line deprecation/deprecation EventToMain: EventToMain; } diff --git a/src/main/integrations/additional-context.ts b/src/main/integrations/additional-context.ts index 32ebf7d3..5c606838 100644 --- a/src/main/integrations/additional-context.ts +++ b/src/main/integrations/additional-context.ts @@ -1,4 +1,5 @@ -import { DeviceContext, Event, EventProcessor, Integration } from '@sentry/types'; +import { convertIntegrationFnToClass } from '@sentry/core'; +import { DeviceContext, IntegrationFn } from '@sentry/types'; import { app, screen as electronScreen } from 'electron'; import { CpuInfo, cpus } from 'os'; @@ -19,89 +20,80 @@ const DEFAULT_OPTIONS: AdditionalContextOptions = { language: true, }; -/** Adds Electron context to events and normalises paths. */ -export class AdditionalContext implements Integration { - /** @inheritDoc */ - public static id: string = 'AdditionalContext'; - - /** @inheritDoc */ - public readonly name: string; - - private readonly _options: AdditionalContextOptions; - private readonly _lazyDeviceContext: DeviceContext; - - public constructor(options: Partial<AdditionalContextOptions> = {}) { - this._lazyDeviceContext = {}; - this.name = AdditionalContext.id; - this._options = { - ...DEFAULT_OPTIONS, - ...options, - }; - } - - /** @inheritDoc */ - public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void): void { - addGlobalEventProcessor(async (event: Event) => this._addAdditionalContext(event)); +const INTEGRATION_NAME = 'AdditionalContext'; - // Some metrics are only available after app ready so we lazily load them - whenAppReady.then( - () => { - const { language, screen } = this._options; - - if (language) { - this._lazyDeviceContext.language = app.getLocale(); - } +const additionalContext: IntegrationFn = (userOptions: Partial<AdditionalContextOptions> = {}) => { + const _lazyDeviceContext: DeviceContext = {}; - if (screen) { - this._setPrimaryDisplayInfo(); + const options = { + ...DEFAULT_OPTIONS, + ...userOptions, + }; - electronScreen.on('display-metrics-changed', () => { - this._setPrimaryDisplayInfo(); - }); - } - }, - () => { - // ignore - }, - ); + function _setPrimaryDisplayInfo(): void { + const display = electronScreen.getPrimaryDisplay(); + const width = Math.floor(display.size.width * display.scaleFactor); + const height = Math.floor(display.size.height * display.scaleFactor); + _lazyDeviceContext.screen_density = display.scaleFactor; + _lazyDeviceContext.screen_resolution = `${width}x${height}`; } - /** Adds additional context to event */ - private _addAdditionalContext(event: Event): Event { - const device: DeviceContext = this._lazyDeviceContext; - - const { memory, cpu } = this._options; - - if (memory) { - const { total, free } = process.getSystemMemoryInfo(); - device.memory_size = total * 1024; - device.free_memory = free * 1024; - } + return { + name: INTEGRATION_NAME, + setup() { + // Some metrics are only available after app ready so we lazily load them + whenAppReady.then( + () => { + const { language, screen } = options; + + if (language) { + _lazyDeviceContext.language = app.getLocale(); + } + + if (screen) { + _setPrimaryDisplayInfo(); + + electronScreen.on('display-metrics-changed', () => { + _setPrimaryDisplayInfo(); + }); + } + }, + () => { + // ignore + }, + ); + }, + processEvent(event) { + const device: DeviceContext = _lazyDeviceContext; + + const { memory, cpu } = options; + + if (memory) { + const { total, free } = process.getSystemMemoryInfo(); + device.memory_size = total * 1024; + device.free_memory = free * 1024; + } - if (cpu) { - const cpuInfo: CpuInfo[] | undefined = cpus(); - if (cpuInfo && cpuInfo.length) { - const firstCpu = cpuInfo[0]; + if (cpu) { + const cpuInfo: CpuInfo[] | undefined = cpus(); + if (cpuInfo && cpuInfo.length) { + const firstCpu = cpuInfo[0]; - device.processor_count = cpuInfo.length; - device.cpu_description = firstCpu.model; - device.processor_frequency = firstCpu.speed; + device.processor_count = cpuInfo.length; + device.cpu_description = firstCpu.model; + device.processor_frequency = firstCpu.speed; - if (app.runningUnderARM64Translation) { - device.machine_arch = 'arm64'; + if (app.runningUnderARM64Translation) { + device.machine_arch = 'arm64'; + } } } - } - return mergeEvents(event, { contexts: { device } }); - } + return mergeEvents(event, { contexts: { device } }); + }, + }; +}; - /** Sets the display info */ - private _setPrimaryDisplayInfo(): void { - const display = electronScreen.getPrimaryDisplay(); - const width = Math.floor(display.size.width * display.scaleFactor); - const height = Math.floor(display.size.height * display.scaleFactor); - this._lazyDeviceContext.screen_density = display.scaleFactor; - this._lazyDeviceContext.screen_resolution = `${width}x${height}`; - } -} +/** Adds Electron context to events and normalises paths. */ +// eslint-disable-next-line deprecation/deprecation +export const AdditionalContext = convertIntegrationFnToClass(INTEGRATION_NAME, additionalContext); diff --git a/src/main/integrations/browser-window-session.ts b/src/main/integrations/browser-window-session.ts index 5ce27244..c95b1097 100644 --- a/src/main/integrations/browser-window-session.ts +++ b/src/main/integrations/browser-window-session.ts @@ -1,4 +1,5 @@ -import { Integration } from '@sentry/types'; +import { convertIntegrationFnToClass } from '@sentry/core'; +import { IntegrationFn } from '@sentry/types'; import { app, BrowserWindow } from 'electron'; import { ELECTRON_MAJOR_VERSION } from '../electron-normalize'; @@ -29,73 +30,38 @@ interface Options { // The state can be, active, inactive, or waiting for a timeout type SessionState = { name: 'active' } | { name: 'inactive' } | { name: 'timeout'; timer: NodeJS.Timeout }; -/** - * Tracks sessions as BrowserWindows focused. - * - * Supports Electron >= v12 - */ -export class BrowserWindowSession implements Integration { - /** @inheritDoc */ - public static id: string = 'BrowserWindowSession'; - - /** @inheritDoc */ - public readonly name: string; +const INTEGRATION_NAME = 'BrowserWindowSession'; - private _state: SessionState; - - public constructor(private readonly _options: Options = {}) { - if (ELECTRON_MAJOR_VERSION < 12) { - throw new Error('BrowserWindowSession requires Electron >= v12'); - } - - this.name = BrowserWindowSession.id; - this._state = { name: 'inactive' }; +const browserWindowSession: IntegrationFn = (options: Options = {}) => { + if (ELECTRON_MAJOR_VERSION < 12) { + throw new Error('BrowserWindowSession requires Electron >= v12'); } - /** @inheritDoc */ - public setupOnce(): void { - app.on('browser-window-created', (_event, window) => { - window.on('focus', this._windowStateChanged); - window.on('blur', this._windowStateChanged); - window.on('show', this._windowStateChanged); - window.on('hide', this._windowStateChanged); - - // when the window is closed we need to remove the listeners - window.once('closed', () => { - window.removeListener('focus', this._windowStateChanged); - window.removeListener('blur', this._windowStateChanged); - window.removeListener('show', this._windowStateChanged); - window.removeListener('hide', this._windowStateChanged); - }); - }); - - // if the app exits while the session is active, end the session - endSessionOnExit(); - } + let _state: SessionState = { name: 'inactive' }; - private _windowStateChanged = (): void => { + function windowStateChanged(): void { const hasFocusedWindow = focusedWindow(); if (hasFocusedWindow) { // We are now active - if (this._state.name === 'inactive') { + if (_state.name === 'inactive') { // If we were inactive, start a new session startSession(true); - } else if (this._state.name === 'timeout') { + } else if (_state.name === 'timeout') { // Clear the timeout since the app has become active again - clearTimeout(this._state.timer); + clearTimeout(_state.timer); } - this._state = { name: 'active' }; + _state = { name: 'active' }; } else { - if (this._state.name === 'active') { + if (_state.name === 'active') { // We have become inactive, start the timeout - const timeout = (this._options.backgroundTimeoutSeconds ?? 30) * 1_000; + const timeout = (options.backgroundTimeoutSeconds ?? 30) * 1_000; const timer = setTimeout(() => { // if the state says we're still waiting for the timeout, end the session - if (this._state.name === 'timeout') { - this._state = { name: 'inactive' }; + if (_state.name === 'timeout') { + _state = { name: 'inactive' }; endSession().catch(() => { // ignore }); @@ -104,8 +70,39 @@ export class BrowserWindowSession implements Integration { // unref so this timer doesn't block app exit .unref(); - this._state = { name: 'timeout', timer }; + _state = { name: 'timeout', timer }; } } + } + + return { + name: INTEGRATION_NAME, + setup() { + app.on('browser-window-created', (_event, window) => { + window.on('focus', windowStateChanged); + window.on('blur', windowStateChanged); + window.on('show', windowStateChanged); + window.on('hide', windowStateChanged); + + // when the window is closed we need to remove the listeners + window.once('closed', () => { + window.removeListener('focus', windowStateChanged); + window.removeListener('blur', windowStateChanged); + window.removeListener('show', windowStateChanged); + window.removeListener('hide', windowStateChanged); + }); + }); + + // if the app exits while the session is active, end the session + endSessionOnExit(); + }, }; -} +}; + +/** + * Tracks sessions as BrowserWindows focused. + * + * Supports Electron >= v12 + */ +// eslint-disable-next-line deprecation/deprecation +export const BrowserWindowSession = convertIntegrationFnToClass(INTEGRATION_NAME, browserWindowSession); diff --git a/src/main/integrations/child-process.ts b/src/main/integrations/child-process.ts index 7baa1f71..d160fa14 100644 --- a/src/main/integrations/child-process.ts +++ b/src/main/integrations/child-process.ts @@ -1,6 +1,6 @@ -import { addBreadcrumb, captureMessage, getCurrentHub } from '@sentry/core'; +import { addBreadcrumb, captureMessage, convertIntegrationFnToClass } from '@sentry/core'; import { NodeClient } from '@sentry/node'; -import { Integration, SeverityLevel } from '@sentry/types'; +import { IntegrationFn, SeverityLevel } from '@sentry/types'; import { OrBool } from '../../common/types'; import { EXIT_REASONS, ExitReason, onChildProcessGone, onRendererProcessGone } from '../electron-normalize'; @@ -36,77 +36,71 @@ function getMessageAndSeverity(reason: ExitReason, proc?: string): { message: st } } -/** Adds breadcrumbs for Electron events. */ -export class ChildProcess implements Integration { - /** @inheritDoc */ - public static id: string = 'ChildProcess'; - - /** @inheritDoc */ - public readonly name: string; - - private readonly _options: ChildProcessOptions; - - /** - * @param _options Integration options - */ - public constructor(options: Partial<OrBool<ChildProcessOptions>> = {}) { - this.name = ChildProcess.id; - const { breadcrumbs, events } = options; - this._options = { - breadcrumbs: Array.isArray(breadcrumbs) ? breadcrumbs : breadcrumbs == false ? [] : DEFAULT_OPTIONS.breadcrumbs, - events: Array.isArray(events) ? events : events == false ? [] : DEFAULT_OPTIONS.events, - }; - } +const INTEGRATION_NAME = 'ChildProcess'; + +const childProcess: IntegrationFn = (userOptions: Partial<OrBool<ChildProcessOptions>> = {}) => { + const { breadcrumbs, events } = userOptions; + + const options: ChildProcessOptions = { + breadcrumbs: Array.isArray(breadcrumbs) ? breadcrumbs : breadcrumbs == false ? [] : DEFAULT_OPTIONS.breadcrumbs, + events: Array.isArray(events) ? events : events == false ? [] : DEFAULT_OPTIONS.events, + }; + + return { + name: INTEGRATION_NAME, + setup(client: NodeClient) { + const { breadcrumbs, events } = options; + const allReasons = Array.from(new Set([...breadcrumbs, ...events])); + + // only hook these events if we're after more than just the unresponsive event + if (allReasons.length > 0) { + const clientOptions = client.getOptions() as ElectronMainOptions; + + onChildProcessGone(allReasons, (details) => { + const { reason } = details; + + // Capture message first + if (events.includes(reason)) { + const { message, level } = getMessageAndSeverity(details.reason, details.type); + captureMessage(message, { level, tags: { 'event.process': details.type } }); + } + + // And then add breadcrumbs for subsequent events + if (breadcrumbs.includes(reason)) { + addBreadcrumb({ + type: 'process', + category: 'child-process', + ...getMessageAndSeverity(details.reason, details.type), + data: details, + }); + } + }); + + onRendererProcessGone(allReasons, (contents, details) => { + const { reason } = details; + const name = clientOptions?.getRendererName?.(contents) || 'renderer'; + + // Capture message first + if (events.includes(reason)) { + const { message, level } = getMessageAndSeverity(details.reason, name); + captureMessage(message, level); + } + + // And then add breadcrumbs for subsequent events + if (breadcrumbs.includes(reason)) { + addBreadcrumb({ + type: 'process', + category: 'child-process', + ...getMessageAndSeverity(details.reason, name), + data: details, + }); + } + }); + } + }, + }; +}; - /** @inheritDoc */ - public setupOnce(): void { - const { breadcrumbs, events } = this._options; - const allReasons = Array.from(new Set([...breadcrumbs, ...events])); - - // only hook these events if we're after more than just the unresponsive event - if (allReasons.length > 0) { - const options = getCurrentHub().getClient<NodeClient>()?.getOptions() as ElectronMainOptions | undefined; - - onChildProcessGone(allReasons, (details) => { - const { reason } = details; - - // Capture message first - if (events.includes(reason)) { - const { message, level } = getMessageAndSeverity(details.reason, details.type); - captureMessage(message, { level, tags: { 'event.process': details.type } }); - } - - // And then add breadcrumbs for subsequent events - if (breadcrumbs.includes(reason)) { - addBreadcrumb({ - type: 'process', - category: 'child-process', - ...getMessageAndSeverity(details.reason, details.type), - data: details, - }); - } - }); - - onRendererProcessGone(allReasons, (contents, details) => { - const { reason } = details; - const name = options?.getRendererName?.(contents) || 'renderer'; - - // Capture message first - if (events.includes(reason)) { - const { message, level } = getMessageAndSeverity(details.reason, name); - captureMessage(message, level); - } - - // And then add breadcrumbs for subsequent events - if (breadcrumbs.includes(reason)) { - addBreadcrumb({ - type: 'process', - category: 'child-process', - ...getMessageAndSeverity(details.reason, name), - data: details, - }); - } - }); - } - } -} +/** Adds breadcrumbs for Electron events. */ +// eslint-disable-next-line deprecation/deprecation +export const ChildProcess = convertIntegrationFnToClass(INTEGRATION_NAME, childProcess); diff --git a/src/main/integrations/electron-breadcrumbs.ts b/src/main/integrations/electron-breadcrumbs.ts index ebc2a0bc..815740af 100644 --- a/src/main/integrations/electron-breadcrumbs.ts +++ b/src/main/integrations/electron-breadcrumbs.ts @@ -1,6 +1,6 @@ -import { addBreadcrumb, getCurrentHub } from '@sentry/core'; +import { addBreadcrumb, convertIntegrationFnToClass } from '@sentry/core'; import { NodeClient } from '@sentry/node'; -import { Breadcrumb, Integration } from '@sentry/types'; +import { Breadcrumb, IntegrationFn } from '@sentry/types'; import { app, autoUpdater, BrowserWindow, powerMonitor, screen, WebContents } from 'electron'; import { onBrowserWindowCreated, onWebContentsCreated, whenAppReady } from '../electron-normalize'; @@ -103,75 +103,15 @@ export function normalizeOptions( }, {} as Partial<ElectronBreadcrumbsOptions<EventFunction | false>>); } -/** Adds breadcrumbs for Electron events. */ -export class ElectronBreadcrumbs implements Integration { - /** @inheritDoc */ - public static id: string = 'ElectronBreadcrumbs'; - - /** @inheritDoc */ - public readonly name: string; - - private readonly _options: ElectronBreadcrumbsOptions<EventFunction | false>; - - /** - * @param _options Integration options - */ - public constructor(options: Partial<ElectronBreadcrumbsOptions<EventTypes>> = {}) { - this.name = ElectronBreadcrumbs.id; - this._options = { ...DEFAULT_OPTIONS, ...normalizeOptions(options) }; - } - - /** @inheritDoc */ - public setupOnce(): void { - const initOptions = getCurrentHub().getClient<NodeClient>()?.getOptions() as ElectronMainOptions | undefined; - - trackRendererProperties(); - - whenAppReady.then( - () => { - // We can't access these until app 'ready' - if (this._options.screen) { - this._patchEventEmitter(screen, 'screen', this._options.screen); - } - - if (this._options.powerMonitor) { - this._patchEventEmitter(powerMonitor, 'powerMonitor', this._options.powerMonitor); - } - }, - () => { - // ignore - }, - ); - - if (this._options.app) { - this._patchEventEmitter(app, 'app', this._options.app); - } - - if (this._options.autoUpdater) { - this._patchEventEmitter(autoUpdater, 'autoUpdater', this._options.autoUpdater); - } - - if (this._options.browserWindow) { - onBrowserWindowCreated((window) => { - const id = window.webContents.id; - const windowName = initOptions?.getRendererName?.(window.webContents) || 'window'; - this._patchEventEmitter(window, windowName, this._options.browserWindow, id); - }); - } +const INTEGRATION_NAME = 'ElectronBreadcrumbs'; - if (this._options.webContents) { - onWebContentsCreated((contents) => { - const id = contents.id; - const webContentsName = initOptions?.getRendererName?.(contents) || 'renderer'; - this._patchEventEmitter(contents, webContentsName, this._options.webContents, id); - }); - } - } +const electronBreadcrumbs: IntegrationFn = (userOptions: Partial<ElectronBreadcrumbsOptions<EventTypes>> = {}) => { + const options: ElectronBreadcrumbsOptions<EventFunction | false> = { + ...DEFAULT_OPTIONS, + ...normalizeOptions(userOptions), + }; - /** - * Monkey patches the EventEmitter to capture breadcrumbs for the specified events. 🙈 - */ - private _patchEventEmitter( + function patchEventEmitter( emitter: NodeJS.EventEmitter | WebContents | BrowserWindow, category: string, shouldCapture: EventFunction | undefined | false, @@ -191,7 +131,7 @@ export class ElectronBreadcrumbs implements Integration { if (id) { breadcrumb.data = { ...getRendererProperties(id) }; - if (!this._options.captureWindowTitles && breadcrumb.data?.title) { + if (!options.captureWindowTitles && breadcrumb.data?.title) { delete breadcrumb.data?.title; } } @@ -202,4 +142,57 @@ export class ElectronBreadcrumbs implements Integration { return emit(event, ...args); }; } -} + + return { + name: INTEGRATION_NAME, + setup(client: NodeClient) { + const clientOptions = client.getOptions() as ElectronMainOptions | undefined; + + trackRendererProperties(); + + whenAppReady.then( + () => { + // We can't access these until app 'ready' + if (options.screen) { + patchEventEmitter(screen, 'screen', options.screen); + } + + if (options.powerMonitor) { + patchEventEmitter(powerMonitor, 'powerMonitor', options.powerMonitor); + } + }, + () => { + // ignore + }, + ); + + if (options.app) { + patchEventEmitter(app, 'app', options.app); + } + + if (options.autoUpdater) { + patchEventEmitter(autoUpdater, 'autoUpdater', options.autoUpdater); + } + + if (options.browserWindow) { + onBrowserWindowCreated((window) => { + const id = window.webContents.id; + const windowName = clientOptions?.getRendererName?.(window.webContents) || 'window'; + patchEventEmitter(window, windowName, options.browserWindow, id); + }); + } + + if (options.webContents) { + onWebContentsCreated((contents) => { + const id = contents.id; + const webContentsName = clientOptions?.getRendererName?.(contents) || 'renderer'; + patchEventEmitter(contents, webContentsName, options.webContents, id); + }); + } + }, + }; +}; + +/** Adds breadcrumbs for Electron events. */ +// eslint-disable-next-line deprecation/deprecation +export const ElectronBreadcrumbs = convertIntegrationFnToClass(INTEGRATION_NAME, electronBreadcrumbs); diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts index ad3be97c..3b2be5c8 100644 --- a/src/main/integrations/electron-minidump.ts +++ b/src/main/integrations/electron-minidump.ts @@ -1,6 +1,6 @@ -import { applyScopeDataToEvent, getCurrentHub } from '@sentry/core'; +import { applyScopeDataToEvent, convertIntegrationFnToClass, getCurrentScope } from '@sentry/core'; import { NodeClient, NodeOptions } from '@sentry/node'; -import { Event, Integration, ScopeData } from '@sentry/types'; +import { Event, IntegrationFn, ScopeData } from '@sentry/types'; import { logger, makeDsn, SentryError } from '@sentry/utils'; import { app, crashReporter } from 'electron'; @@ -21,7 +21,7 @@ function hasKeys(obj: any): boolean { /** Gets a Scope object with user, tags and extra */ function getScope(options: NodeOptions): Event { - const scope = getCurrentHub().getScope() as any | undefined; + const scope = getCurrentScope().getScopeData(); if (!scope) { return {}; @@ -31,13 +31,53 @@ function getScope(options: NodeOptions): Event { release: options.release, environment: options.environment, /* eslint-disable @typescript-eslint/no-unsafe-member-access */ - ...(hasKeys(scope._user) && { user: scope._user }), - ...(hasKeys(scope._tags) && { tags: scope._tags }), - ...(hasKeys(scope._extra) && { extra: scope._extra }), + ...(hasKeys(scope.user) && { user: scope.user }), + ...(hasKeys(scope.tags) && { tags: scope.tags }), + ...(hasKeys(scope.extra) && { extra: scope.extra }), /* eslint-enable @typescript-eslint/no-unsafe-member-access */ }; } +/** Chunks up event JSON into 1 or more parameters for use with the native Electron uploader + * + * Returns chunks with keys and values: + * { + * sentry__1: '{ json...', + * sentry__2: 'more json...', + * sentry__x: 'end json }', + * } + */ +function getNativeUploaderExtraParams(event: Event): { [key: string]: string } { + const maxBytes = 20300; + + /** Max chunk sizes are in bytes so we can't chunk by characters or UTF8 could bite us. + * + * We attempt to split by space (32) and double quote characters (34) as there are plenty in JSON + * and they are guaranteed to not be the first byte of a multi-byte UTF8 character. + */ + let buf = Buffer.from(JSON.stringify(event)); + const chunks = []; + while (buf.length) { + // Find last '"' + let i = buf.lastIndexOf(34, maxBytes + 1); + // Or find last ' ' + if (i < 0) i = buf.lastIndexOf(32, maxBytes + 1); + // Or find first '"' + if (i < 0) i = buf.indexOf(34, maxBytes); + // Or find first ' ' + if (i < 0) i = buf.indexOf(32, maxBytes); + // We couldn't find any space or quote chars so split at maxBytes and hope for the best 🤷♂️ + if (i < 0) i = maxBytes; + chunks.push(buf.subarray(0, i + 1).toString()); + buf = buf.subarray(i + 1); + } + + return chunks.reduce((acc, cur, i) => { + acc[`sentry__${i + 1}`] = cur; + return acc; + }, {} as { [key: string]: string }); +} + /** * Returns the minidump endpoint in Sentry * @param dsn Dsn @@ -53,68 +93,48 @@ export function minidumpUrlFromDsn(dsn: string): string | undefined { }/api/${projectId}/minidump/?sentry_key=${publicKey}`; } -/** Sends minidumps via the Electron built-in uploader. */ -export class ElectronMinidump implements Integration { - /** @inheritDoc */ - public static id: string = 'ElectronMinidump'; - - /** @inheritDoc */ - public readonly name: string; +const INTEGRATION_NAME = 'ElectronMinidump'; +const electronMinidump: IntegrationFn = () => { /** Counter used to ensure no race condition when updating extra params */ - private _updateEpoch: number; - - private _customRelease: string | undefined; - - public constructor() { - this.name = ElectronMinidump.id; - this._updateEpoch = 0; - } - - /** @inheritDoc */ - public setupOnce(): void { - // Mac AppStore builds cannot run the crash reporter due to the sandboxing - // requirements. In this case, we prevent enabling native crashes entirely. - // https://electronjs.org/docs/tutorial/mac-app-store-submission-guide#limitations-of-mas-build - if (process.mas) { - return; - } - - if (rendererRequiresCrashReporterStart()) { - throw new SentryError(`The '${this.name}' integration is only supported with Electron >= v9`); - } + let updateEpoch: number = 0; + let customRelease: string | undefined; - const options = getCurrentHub().getClient<NodeClient>()?.getOptions(); + async function getNativeUploaderEvent(scope: ScopeData): Promise<Event> { + const event = mergeEvents(await getEventDefaults(customRelease), { + level: 'fatal', + platform: 'native', + tags: { 'event.environment': 'native', event_type: 'native' }, + }); - if (!options?.dsn) { - throw new SentryError('Attempted to enable Electron native crash reporter but no DSN was supplied'); - } + applyScopeDataToEvent(event, scope); - this._customRelease = options.release; + delete event.sdkProcessingMetadata; - this._startCrashReporter(options); + // Normalise paths + return normalizeEvent(event, app.getAppPath()); + } - // If a renderer process crashes, mark any existing session as crashed - onRendererProcessGone(CRASH_REASONS, (_, __) => { - sessionCrashed(); - }); + function updateExtraParams(scope: ScopeData): void { + updateEpoch += 1; + const currentEpoch = updateEpoch; - // If we're using the Crashpad minidump uploader, we set extra parameters whenever the scope updates - if (usesCrashpad()) { - this._setupScopeListener(); - } + getNativeUploaderEvent(scope) + .then((event) => { + if (currentEpoch !== updateEpoch) { + return; + } - // Check if last crash report was likely to have been unreported in the last session - unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date).then((crashed) => { - // Check if a previous session was not closed - return checkPreviousSession(crashed); - }, logger.error); + // Update the extra parameters in the main process + const mainParams = getNativeUploaderExtraParams(event); + for (const key of Object.keys(mainParams)) { + crashReporter.addExtraParameter(key, mainParams[key]); + } + }) + .catch((error) => logger.error(error)); } - /** - * Starts the native crash reporter - */ - private _startCrashReporter(options: NodeOptions): void { + function startCrashReporter(options: NodeOptions): void { const submitURL = minidumpUrlFromDsn(options.dsn || ''); if (!submitURL) { logger.log('Invalid DSN. Cannot start Electron crashReporter'); @@ -138,91 +158,57 @@ export class ElectronMinidump implements Integration { }); } - /** - * Adds a scope listener to persist changes to disk. - */ - private _setupScopeListener(): void { - const hubScope = getCurrentHub().getScope(); - if (hubScope) { - hubScope.addScopeListener((updatedScope) => { - const scope = updatedScope.getScopeData(); - scope.eventProcessors = []; - this._updateExtraParams(scope); - }); - } + function setupScopeListener(): void { + getCurrentScope().addScopeListener((updatedScope) => { + const scope = updatedScope.getScopeData(); + scope.eventProcessors = []; + updateExtraParams(scope); + }); } - /** Updates Electron uploader extra params */ - private _updateExtraParams(scope: ScopeData): void { - this._updateEpoch += 1; - const currentEpoch = this._updateEpoch; + return { + name: INTEGRATION_NAME, + setup(client: NodeClient) { + // Mac AppStore builds cannot run the crash reporter due to the sandboxing + // requirements. In this case, we prevent enabling native crashes entirely. + // https://electronjs.org/docs/tutorial/mac-app-store-submission-guide#limitations-of-mas-build + if (process.mas) { + return; + } - this._getNativeUploaderEvent(scope) - .then((event) => { - if (currentEpoch !== this._updateEpoch) return; + if (rendererRequiresCrashReporterStart()) { + throw new SentryError(`The '${INTEGRATION_NAME}' integration is only supported with Electron >= v9`); + } - // Update the extra parameters in the main process - const mainParams = this._getNativeUploaderExtraParams(event); - for (const key of Object.keys(mainParams)) { - crashReporter.addExtraParameter(key, mainParams[key]); - } - }) - .catch((error) => logger.error(error)); - } + const clientOptions = client.getOptions(); - /** Builds up an event to send with the native Electron uploader */ - private async _getNativeUploaderEvent(scope: ScopeData): Promise<Event> { - const event = mergeEvents(await getEventDefaults(this._customRelease), { - level: 'fatal', - platform: 'native', - tags: { 'event.environment': 'native', event_type: 'native' }, - }); + if (!clientOptions?.dsn) { + throw new SentryError('Attempted to enable Electron native crash reporter but no DSN was supplied'); + } - applyScopeDataToEvent(event, scope); + customRelease = clientOptions.release; - delete event.sdkProcessingMetadata; + startCrashReporter(clientOptions); - // Normalise paths - return normalizeEvent(event, app.getAppPath()); - } + // If a renderer process crashes, mark any existing session as crashed + onRendererProcessGone(CRASH_REASONS, (_, __) => { + sessionCrashed(); + }); - /** Chunks up event JSON into 1 or more parameters for use with the native Electron uploader - * - * Returns chunks with keys and values: - * { - * sentry__1: '{ json...', - * sentry__2: 'more json...', - * sentry__x: 'end json }', - * } - */ - private _getNativeUploaderExtraParams(event: Event): { [key: string]: string } { - const maxBytes = 20300; - - /** Max chunk sizes are in bytes so we can't chunk by characters or UTF8 could bite us. - * - * We attempt to split by space (32) and double quote characters (34) as there are plenty in JSON - * and they are guaranteed to not be the first byte of a multi-byte UTF8 character. - */ - let buf = Buffer.from(JSON.stringify(event)); - const chunks = []; - while (buf.length) { - // Find last '"' - let i = buf.lastIndexOf(34, maxBytes + 1); - // Or find last ' ' - if (i < 0) i = buf.lastIndexOf(32, maxBytes + 1); - // Or find first '"' - if (i < 0) i = buf.indexOf(34, maxBytes); - // Or find first ' ' - if (i < 0) i = buf.indexOf(32, maxBytes); - // We couldn't find any space or quote chars so split at maxBytes and hope for the best 🤷♂️ - if (i < 0) i = maxBytes; - chunks.push(buf.subarray(0, i + 1).toString()); - buf = buf.subarray(i + 1); - } + // If we're using the Crashpad minidump uploader, we set extra parameters whenever the scope updates + if (usesCrashpad()) { + setupScopeListener(); + } + + // Check if last crash report was likely to have been unreported in the last session + unreportedDuringLastSession(crashReporter.getLastCrashReport()?.date).then((crashed) => { + // Check if a previous session was not closed + return checkPreviousSession(crashed); + }, logger.error); + }, + }; +}; - return chunks.reduce((acc, cur, i) => { - acc[`sentry__${i + 1}`] = cur; - return acc; - }, {} as { [key: string]: string }); - } -} +/** Sends minidumps via the Electron built-in uploader. */ +// eslint-disable-next-line deprecation/deprecation +export const ElectronMinidump = convertIntegrationFnToClass(INTEGRATION_NAME, electronMinidump); diff --git a/src/main/integrations/main-context.ts b/src/main/integrations/main-context.ts index 174beff7..5b6ab478 100644 --- a/src/main/integrations/main-context.ts +++ b/src/main/integrations/main-context.ts @@ -1,31 +1,24 @@ -import { getCurrentHub } from '@sentry/core'; -import { NodeClient } from '@sentry/node'; -import { Event, EventProcessor, Integration } from '@sentry/types'; +import { convertIntegrationFnToClass } from '@sentry/core'; +import { IntegrationFn } from '@sentry/types'; import { app } from 'electron'; import { mergeEvents, normalizeEvent } from '../../common'; import { getEventDefaults } from '../context'; -/** Adds Electron context to events and normalises paths. */ -export class MainContext implements Integration { - /** @inheritDoc */ - public static id: string = 'MainContext'; - - /** @inheritDoc */ - public readonly name: string; - - public constructor() { - this.name = MainContext.id; - } +const INTEGRATION_NAME = 'MainContext'; - /** @inheritDoc */ - public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void): void { - const options = getCurrentHub().getClient<NodeClient>()?.getOptions(); - - addGlobalEventProcessor(async (event: Event) => { +const mainContext: IntegrationFn = () => { + return { + name: INTEGRATION_NAME, + async processEvent(event, _, client) { + const clientOptions = client.getOptions(); const normalized = normalizeEvent(event, app.getAppPath()); - const defaults = await getEventDefaults(options?.release, options?.environment); + const defaults = await getEventDefaults(clientOptions.release, clientOptions.environment); return mergeEvents(defaults, normalized); - }); - } -} + }, + }; +}; + +/** Adds Electron context to events and normalises paths. */ +// eslint-disable-next-line deprecation/deprecation +export const MainContext = convertIntegrationFnToClass(INTEGRATION_NAME, mainContext); diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts index af12d8c0..dc4fdab9 100644 --- a/src/main/integrations/main-process-session.ts +++ b/src/main/integrations/main-process-session.ts @@ -1,4 +1,5 @@ -import { Integration } from '@sentry/types'; +import { convertIntegrationFnToClass } from '@sentry/core'; +import { IntegrationFn } from '@sentry/types'; import { endSessionOnExit, startSession } from '../sessions'; @@ -11,22 +12,18 @@ interface Options { sendOnCreate?: boolean; } -/** Tracks sessions as the main process lifetime. */ -export class MainProcessSession implements Integration { - /** @inheritDoc */ - public static id: string = 'MainProcessSession'; - - /** @inheritDoc */ - public readonly name: string; - - public constructor(private readonly _options: Options = {}) { - this.name = MainProcessSession.id; - } +const INTEGRATION_NAME = 'MainProcessSession'; - /** @inheritDoc */ - public setupOnce(): void { - startSession(!!this._options.sendOnCreate); +const mainProcessSession: IntegrationFn = (options: Options = {}) => { + return { + name: INTEGRATION_NAME, + setup() { + startSession(!!options.sendOnCreate); + endSessionOnExit(); + }, + }; +}; - endSessionOnExit(); - } -} +/** Tracks sessions as the main process lifetime. */ +// eslint-disable-next-line deprecation/deprecation +export const MainProcessSession = convertIntegrationFnToClass(INTEGRATION_NAME, mainProcessSession); diff --git a/src/main/integrations/net-breadcrumbs.ts b/src/main/integrations/net-breadcrumbs.ts index a6cb4816..3ef3005b 100644 --- a/src/main/integrations/net-breadcrumbs.ts +++ b/src/main/integrations/net-breadcrumbs.ts @@ -1,7 +1,7 @@ /* eslint-disable deprecation/deprecation */ -import { getDynamicSamplingContextFromClient } from '@sentry/core'; +import { convertIntegrationFnToClass, getDynamicSamplingContextFromClient } from '@sentry/core'; import { getCurrentHub } from '@sentry/node'; -import { DynamicSamplingContext, EventProcessor, Hub, Integration, Span, TracePropagationTargets } from '@sentry/types'; +import { DynamicSamplingContext, IntegrationFn, Span, TracePropagationTargets } from '@sentry/types'; import { dynamicSamplingContextToSentryBaggageHeader, fill, @@ -10,7 +10,7 @@ import { LRUMap, stringMatchesSomePattern, } from '@sentry/utils'; -import { ClientRequest, ClientRequestConstructorOptions, IncomingMessage, net } from 'electron'; +import { ClientRequest, ClientRequestConstructorOptions, IncomingMessage, net as electronNet } from 'electron'; import * as urlModule from 'url'; type ShouldTraceFn = (method: string, url: string) => boolean; @@ -40,32 +40,6 @@ interface NetOptions { tracingOrigins?: ShouldTraceFn | boolean; } -/** http module integration */ -export class Net implements Integration { - /** @inheritDoc */ - public static id: string = 'Net'; - - /** @inheritDoc */ - public readonly name: string; - - /** @inheritDoc */ - public constructor(private readonly _options: NetOptions = {}) { - this.name = Net.id; - } - - /** @inheritDoc */ - public setupOnce(_addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void { - const clientOptions = getCurrentHub().getClient()?.getOptions(); - - // No need to instrument if we don't want to track anything - if (this._options.breadcrumbs === false && this._options.tracing === false) { - return; - } - - fill(net, 'request', createWrappedRequestFactory(this._options, clientOptions?.tracePropagationTargets)); - } -} - /** * Trimmed down version of the code from Electron here: * https://github.com/electron/electron/blob/f3df76dbdc58cb704637b89357e1400791c92cfe/lib/browser/api/net.ts#L209-L269 @@ -199,7 +173,7 @@ function createWrappedRequestFactory( }; return function wrappedRequestMethodFactory(originalRequestMethod: RequestMethod): RequestMethod { - return function requestMethod(this: typeof net, reqOptions: RequestOptions): ClientRequest { + return function requestMethod(this: typeof electronNet, reqOptions: RequestOptions): ClientRequest { // eslint-disable-next-line @typescript-eslint/no-this-alias const netModule = this; @@ -300,3 +274,25 @@ function addRequestBreadcrumb( }, ); } + +const INTEGRATION_NAME = 'Net'; + +const net: IntegrationFn = (options: NetOptions = {}) => { + return { + name: INTEGRATION_NAME, + setup() { + const clientOptions = getCurrentHub().getClient()?.getOptions(); + + // No need to instrument if we don't want to track anything + if (options.breadcrumbs === false && options.tracing === false) { + return; + } + + fill(electronNet, 'request', createWrappedRequestFactory(options, clientOptions?.tracePropagationTargets)); + }, + }; +}; + +/** http module integration */ +// eslint-disable-next-line deprecation/deprecation +export const Net = convertIntegrationFnToClass(INTEGRATION_NAME, net); diff --git a/src/main/integrations/onuncaughtexception.ts b/src/main/integrations/onuncaughtexception.ts index 7bd8bdaa..16ce8ef7 100644 --- a/src/main/integrations/onuncaughtexception.ts +++ b/src/main/integrations/onuncaughtexception.ts @@ -1,29 +1,17 @@ -import { getCurrentHub, getCurrentScope } from '@sentry/core'; +import { convertIntegrationFnToClass, getCurrentScope } from '@sentry/core'; import { NodeClient } from '@sentry/node'; -import { Event, Integration } from '@sentry/types'; +import { Event, IntegrationFn } from '@sentry/types'; import { dialog } from 'electron'; -/** Capture unhandled errors. */ -export class OnUncaughtException implements Integration { - /** @inheritDoc */ - public static id: string = 'OnUncaughtException'; - - /** @inheritDoc */ - public readonly name: string; - - public constructor() { - this.name = OnUncaughtException.id; - } +const INTEGRATION_NAME = 'OnUncaughtException'; - /** - * @inheritDoc - */ - public setupOnce(): void { - const options = getCurrentHub().getClient<NodeClient>()?.getOptions(); +const onUncaughtException: IntegrationFn = () => { + return { + name: INTEGRATION_NAME, + setup(client: NodeClient) { + const options = client.getOptions(); - global.process.on('uncaughtException', (error: Error) => { - const self = getCurrentHub().getIntegration(OnUncaughtException); - if (self) { + global.process.on('uncaughtException', (error: Error) => { const scope = getCurrentScope(); scope.addEventProcessor(async (event: Event) => ({ @@ -31,8 +19,7 @@ export class OnUncaughtException implements Integration { level: 'fatal', })); - const nodeClient = getCurrentHub().getClient() as NodeClient; - nodeClient.captureException( + client.captureException( error, { originalException: error, @@ -43,10 +30,10 @@ export class OnUncaughtException implements Integration { }, }, }, - getCurrentHub().getScope(), + scope, ); - nodeClient.flush(nodeClient.getOptions().shutdownTimeout || 2000).then( + client.flush(options.shutdownTimeout || 2000).then( () => { if (options?.onFatalError) { options.onFatalError(error); @@ -67,7 +54,11 @@ export class OnUncaughtException implements Integration { // ignore }, ); - } - }); - } -} + }); + }, + }; +}; + +/** Capture unhandled errors. */ +// eslint-disable-next-line deprecation/deprecation +export const OnUncaughtException = convertIntegrationFnToClass(INTEGRATION_NAME, onUncaughtException); diff --git a/src/main/integrations/preload-injection.ts b/src/main/integrations/preload-injection.ts index 7fc04a9e..d0ba6a1e 100644 --- a/src/main/integrations/preload-injection.ts +++ b/src/main/integrations/preload-injection.ts @@ -1,6 +1,5 @@ -import { getCurrentHub } from '@sentry/core'; -import { NodeClient } from '@sentry/node'; -import { Integration } from '@sentry/types'; +import { convertIntegrationFnToClass } from '@sentry/core'; +import { IntegrationFn } from '@sentry/types'; import { logger } from '@sentry/utils'; import { app } from 'electron'; import { existsSync } from 'fs'; @@ -32,53 +31,43 @@ function getPreloadPath(): string | number | undefined { return undefined; } -/** - * Injects the preload script into the provided sessions. - * - * Defaults to injecting into the defaultSession - */ -export class PreloadInjection implements Integration { - /** @inheritDoc */ - public static id: string = 'PreloadInjection'; +const INTEGRATION_NAME = 'PreloadInjection'; - /** @inheritDoc */ - public readonly name: string; +const preloadInjection: IntegrationFn = () => { + return { + name: INTEGRATION_NAME, + setup(client) { + const options = client.getOptions() as ElectronMainOptionsInternal; - public constructor() { - this.name = PreloadInjection.id; - } - - /** @inheritDoc */ - public setupOnce(): void { - const options = getCurrentHub().getClient<NodeClient>()?.getOptions() as ElectronMainOptionsInternal; - - // If classic IPC mode is disabled, we shouldn't attempt to inject preload scripts - // eslint-disable-next-line no-bitwise - if ((options.ipcMode & IPCMode.Classic) == 0) { - return; - } + // If classic IPC mode is disabled, we shouldn't attempt to inject preload scripts + // eslint-disable-next-line no-bitwise + if ((options.ipcMode & IPCMode.Classic) == 0) { + return; + } - app.once('ready', () => { - this._addPreloadToSessions(options); - }); - } + app.once('ready', () => { + const path = getPreloadPath(); - /** - * Attempts to add the preload script the the provided sessions - */ - private _addPreloadToSessions(options: ElectronMainOptionsInternal): void { - const path = getPreloadPath(); + if (path && typeof path === 'string' && isAbsolute(path) && existsSync(path)) { + for (const sesh of options.getSessions()) { + // Fetch any existing preloads so we don't overwrite them + const existing = sesh.getPreloads(); + sesh.setPreloads([path, ...existing]); + } + } else { + logger.log( + 'The preload script could not be injected automatically. This is most likely caused by bundling of the main process', + ); + } + }); + }, + }; +}; - if (path && typeof path === 'string' && isAbsolute(path) && existsSync(path)) { - for (const sesh of options.getSessions()) { - // Fetch any existing preloads so we don't overwrite them - const existing = sesh.getPreloads(); - sesh.setPreloads([path, ...existing]); - } - } else { - logger.log( - 'The preload script could not be injected automatically. This is most likely caused by bundling of the main process', - ); - } - } -} +/** + * Injects the preload script into the provided sessions. + * + * Defaults to injecting into the defaultSession + */ +// eslint-disable-next-line deprecation/deprecation +export const PreloadInjection = convertIntegrationFnToClass(INTEGRATION_NAME, preloadInjection); diff --git a/src/main/integrations/renderer-profiling.ts b/src/main/integrations/renderer-profiling.ts index 84ff10e5..abf06bfa 100644 --- a/src/main/integrations/renderer-profiling.ts +++ b/src/main/integrations/renderer-profiling.ts @@ -1,5 +1,5 @@ -import { NodeClient } from '@sentry/node'; -import { Event, Integration, Profile } from '@sentry/types'; +import { convertIntegrationFnToClass } from '@sentry/core'; +import { Event, IntegrationFn, Profile } from '@sentry/types'; import { forEachEnvelopeItem, LRUMap } from '@sentry/utils'; import { app } from 'electron'; @@ -54,83 +54,75 @@ function addJsProfilingHeader( return { responseHeaders }; } -/** - * Injects 'js-profiling' document policy headers and ensures that profiles get forwarded with transactions - */ -export class RendererProfiling implements Integration { - /** @inheritDoc */ - public static id: string = 'RendererProfiling'; +const INTEGRATION_NAME = 'RendererProfiling'; - /** @inheritDoc */ - public readonly name: string; +const rendererProfiling: IntegrationFn = () => { + return { + name: INTEGRATION_NAME, + setup(client) { + const options = client.getOptions() as ElectronMainOptionsInternal; + if (!options.enableRendererProfiling) { + return; + } - public constructor() { - this.name = RendererProfiling.id; - } + if (ELECTRON_MAJOR_VERSION < 15) { + throw new Error('Renderer profiling requires Electron 15+ (Chromium 94+)'); + } - /** @inheritDoc */ - public setupOnce(): void { - // - } + RENDERER_PROFILES = new LRUMap(10); - /** @inheritDoc */ - public setup(client: NodeClient): void { - const options = client.getOptions() as ElectronMainOptionsInternal; - if (!options.enableRendererProfiling) { - return; - } + app.on('ready', () => { + // Ensure the correct headers are set to enable the browser profiler + for (const sesh of options.getSessions()) { + sesh.webRequest.onHeadersReceived((details, callback) => { + callback(addJsProfilingHeader(details.responseHeaders)); + }); + } + }); - if (ELECTRON_MAJOR_VERSION < 15) { - throw new Error('Renderer profiling requires Electron 15+ (Chromium 94+)'); - } + // Copy the profiles back into the event envelopes + client.on?.('beforeEnvelope', (envelope) => { + let profile_id: string | undefined; - RENDERER_PROFILES = new LRUMap(10); + forEachEnvelopeItem(envelope, (item, type) => { + if (type !== 'transaction') { + return; + } - app.on('ready', () => { - // Ensure the correct headers are set to enable the browser profiler - for (const sesh of options.getSessions()) { - sesh.webRequest.onHeadersReceived((details, callback) => { - callback(addJsProfilingHeader(details.responseHeaders)); - }); - } - }); + for (let j = 1; j < item.length; j++) { + const event = item[j] as Event; - // Copy the profiles back into the event envelopes - client.on('beforeEnvelope', (envelope) => { - let profile_id: string | undefined; + if (event && event.contexts && event.contexts.profile && event.contexts.profile.profile_id) { + profile_id = event.contexts.profile.profile_id as string; + // This can be removed as it's no longer needed + delete event.contexts.profile; + } + } + }); - forEachEnvelopeItem(envelope, (item, type) => { - if (type !== 'transaction') { + if (!profile_id) { return; } - for (let j = 1; j < item.length; j++) { - const event = item[j] as Event; + const profile = RENDERER_PROFILES?.remove(profile_id); - if (event && event.contexts && event.contexts.profile && event.contexts.profile.profile_id) { - profile_id = event.contexts.profile.profile_id as string; - // This can be removed as it's no longer needed - delete event.contexts.profile; - } + if (!profile) { + return; } - }); - - if (!profile_id) { - return; - } - - const profile = RENDERER_PROFILES?.remove(profile_id); - if (!profile) { - return; - } + normaliseProfile(profile, app.getAppPath()); + profile.release = options.release || getDefaultReleaseName(); + profile.environment = options.environment || getDefaultEnvironment(); - normaliseProfile(profile, app.getAppPath()); - profile.release = options.release || getDefaultReleaseName(); - profile.environment = options.environment || getDefaultEnvironment(); + // @ts-expect-error untyped envelope + envelope[1].push([{ type: 'profile' }, profile]); + }); + }, + }; +}; - // @ts-expect-error untyped envelope - envelope[1].push([{ type: 'profile' }, profile]); - }); - } -} +/** + * Injects 'js-profiling' document policy headers and ensures that profiles get forwarded with transactions + */ +// eslint-disable-next-line deprecation/deprecation +export const RendererProfiling = convertIntegrationFnToClass(INTEGRATION_NAME, rendererProfiling); diff --git a/src/main/integrations/screenshots.ts b/src/main/integrations/screenshots.ts index 751eb78e..c44293df 100644 --- a/src/main/integrations/screenshots.ts +++ b/src/main/integrations/screenshots.ts @@ -1,56 +1,53 @@ -import { getCurrentHub } from '@sentry/core'; -import { Event, EventHint, EventProcessor, Integration } from '@sentry/types'; +import { convertIntegrationFnToClass } from '@sentry/core'; +import { IntegrationFn } from '@sentry/types'; import { logger } from '@sentry/utils'; import { BrowserWindow } from 'electron'; import { capturePage } from '../electron-normalize'; import { ElectronMainOptions } from '../sdk'; -/** Adds Screenshots to events */ -export class Screenshots implements Integration { - /** @inheritDoc */ - public static id: string = 'Screenshots'; - - /** @inheritDoc */ - public readonly name: string; - - public constructor() { - this.name = Screenshots.id; - } - - /** @inheritDoc */ - public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void): void { - const attachScreenshot = !!(getCurrentHub().getClient()?.getOptions() as ElectronMainOptions).attachScreenshot; - - if (attachScreenshot) { - addGlobalEventProcessor(async (event: Event, hint: EventHint) => { - // We don't capture screenshots for transactions or native crashes - if (!event.transaction && event.platform !== 'native') { - let count = 1; - - for (const window of BrowserWindow.getAllWindows()) { - if (!hint.attachments) { - hint.attachments = []; - } +const INTEGRATION_NAME = 'Screenshots'; + +const screenshots: IntegrationFn = () => { + return { + name: INTEGRATION_NAME, + async processEvent(event, hint, client) { + const attachScreenshot = !!(client.getOptions() as ElectronMainOptions).attachScreenshot; - try { - if (!window.isDestroyed() && window.isVisible()) { - const filename = count === 1 ? 'screenshot.png' : `screenshot-${count}.png`; - const image = await capturePage(window); + if (!attachScreenshot) { + return event; + } + + // We don't capture screenshots for transactions or native crashes + if (!event.transaction && event.platform !== 'native') { + let count = 1; - hint.attachments.push({ filename, data: image.toPNG(), contentType: 'image/png' }); + for (const window of BrowserWindow.getAllWindows()) { + if (!hint.attachments) { + hint.attachments = []; + } - count += 1; - } - } catch (e) { - // Catch all errors so we don't break event submission if something goes wrong - logger.error('Error capturing screenshot', e); + try { + if (!window.isDestroyed() && window.isVisible()) { + const filename = count === 1 ? 'screenshot.png' : `screenshot-${count}.png`; + const image = await capturePage(window); + + hint.attachments.push({ filename, data: image.toPNG(), contentType: 'image/png' }); + + count += 1; } + } catch (e) { + // Catch all errors so we don't break event submission if something goes wrong + logger.error('Error capturing screenshot', e); } } + } - return event; - }); - } - } -} + return event; + }, + }; +}; + +/** Adds Screenshots to events */ +// eslint-disable-next-line deprecation/deprecation +export const Screenshots = convertIntegrationFnToClass(INTEGRATION_NAME, screenshots); diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts index c3c8e69e..6952b911 100644 --- a/src/main/integrations/sentry-minidump/index.ts +++ b/src/main/integrations/sentry-minidump/index.ts @@ -1,6 +1,6 @@ -import { applyScopeDataToEvent, captureEvent, getCurrentHub, getCurrentScope, Scope } from '@sentry/core'; +import { applyScopeDataToEvent, captureEvent, convertIntegrationFnToClass, getCurrentScope, Scope } from '@sentry/core'; import { NodeClient } from '@sentry/node'; -import { Event, Integration, ScopeData } from '@sentry/types'; +import { Event, IntegrationFn, ScopeData } from '@sentry/types'; import { logger, SentryError } from '@sentry/utils'; import { app, crashReporter } from 'electron'; @@ -19,102 +19,98 @@ interface PreviousRun { event?: Event; } -/** Sends minidumps via the Sentry uploader */ -export class SentryMinidump implements Integration { - /** @inheritDoc */ - public static id: string = 'SentryMinidump'; - - /** @inheritDoc */ - public readonly name: string; +const INTEGRATION_NAME = 'SentryMinidump'; +const sentryMinidump: IntegrationFn = () => { /** Store to persist context information beyond application crashes. */ - private _scopeStore?: BufferedWriteStore<PreviousRun>; - - /** Temp store for the scope of last run */ - private _scopeLastRun?: Promise<PreviousRun>; + let scopeStore: BufferedWriteStore<PreviousRun> | undefined; + // We need to store the scope in a variable here so it can be attached to minidumps + let scopeLastRun: Promise<PreviousRun> | undefined; + let minidumpLoader: MinidumpLoader | undefined; - private _minidumpLoader?: MinidumpLoader; + function startCrashReporter(): void { + logger.log('Starting Electron crashReporter'); - public constructor() { - this.name = SentryMinidump.id; + crashReporter.start({ + companyName: '', + ignoreSystemCrashHandler: true, + productName: app.name || app.getName(), + // Empty string doesn't work for Linux Crashpad and no submitURL doesn't work for older versions of Electron + submitURL: 'https://f.a.k/e', + uploadToServer: false, + compress: true, + }); } - /** @inheritDoc */ - public setupOnce(): void { - // Mac AppStore builds cannot run the crash reporter due to the sandboxing - // requirements. In this case, we prevent enabling native crashes entirely. - // https://electronjs.org/docs/tutorial/mac-app-store-submission-guide#limitations-of-mas-build - if (process.mas) { - return; - } - - this._startCrashReporter(); + function setupScopeListener(currentRelease: string, currentEnvironment: string): void { + const scopeChanged = (updatedScope: Scope): void => { + // Since the initial scope read is async, we need to ensure that any writes do not beat that + // https://github.com/getsentry/sentry-electron/issues/585 + setImmediate(async () => + scopeStore?.set({ + scope: updatedScope.getScopeData(), + event: await getEventDefaults(currentRelease, currentEnvironment), + }), + ); + }; - this._scopeStore = new BufferedWriteStore<PreviousRun>(getSentryCachePath(), 'scope_v3', { - scope: new Scope().getScopeData(), - }); + const scope = getCurrentScope(); - // We need to store the scope in a variable here so it can be attached to minidumps - this._scopeLastRun = this._scopeStore.get(); + if (scope) { + scope.addScopeListener(scopeChanged); + // Ensure at least one event is written to disk + scopeChanged(scope); + } + } - const hub = getCurrentHub(); - const client = hub.getClient<NodeClient>(); - const options = client?.getOptions() as ElectronMainOptions; + async function sendNativeCrashes(client: NodeClient, eventIn: Event): Promise<boolean> { + // Whenever we are called, assume that the crashes we are going to load down + // below have occurred recently. This means, we can use the same event data + // for all minidumps that we load now. There are two conditions: + // + // 1. The application crashed and we are just starting up. The stored + // breadcrumbs and context reflect the state during the application + // crash. + // + // 2. A renderer process crashed recently and we have just been notified + // about it. Just use the breadcrumbs and context information we have + // right now and hope that the delay was not too long. - const currentRelease = options?.release || getDefaultReleaseName(); - const currentEnvironment = options?.environment || getDefaultEnvironment(); + const event = eventIn; - this._setupScopeListener(currentRelease, currentEnvironment); + // If this is a native main process crash, we need to apply the scope and context from the previous run + if (event.tags?.['event.process'] === 'browser') { + const previousRun = await scopeLastRun; + if (previousRun) { + if (previousRun.scope) { + applyScopeDataToEvent(event, previousRun.scope); + } - if (!options?.dsn) { - throw new SentryError('Attempted to enable Electron native crash reporter but no DSN was supplied'); + event.release = previousRun.event?.release || event.release; + event.environment = previousRun.event?.environment || event.environment; + event.contexts = previousRun.event?.contexts || event.contexts; + } } - trackRendererProperties(); - - this._minidumpLoader = getMinidumpLoader(); - - onRendererProcessGone(EXIT_REASONS, (contents, details) => this._sendRendererCrash(options, contents, details)); - onChildProcessGone(EXIT_REASONS, (details) => this._sendChildProcessCrash(options, details)); - - // Start to submit recent minidump crashes. This will load breadcrumbs and - // context information that was cached on disk prior to the crash. - this._sendNativeCrashes({ - level: 'fatal', - platform: 'native', - tags: { - 'event.environment': 'native', - 'event.process': 'browser', - event_type: 'native', - }, - }) - .then((minidumpsFound) => - // Check for previous uncompleted session. If a previous session exists - // and no minidumps were found, its likely an abnormal exit - checkPreviousSession(minidumpsFound), - ) - .catch((error) => logger.error(error)); - } + if (!event) { + return false; + } - /** Starts the native crash reporter */ - private _startCrashReporter(): void { - logger.log('Starting Electron crashReporter'); + // If the SDK is not enabled, tell the loader to delete all minidumps + const deleteAll = client.getOptions().enabled === false; - crashReporter.start({ - companyName: '', - ignoreSystemCrashHandler: true, - productName: app.name || app.getName(), - // Empty string doesn't work for Linux Crashpad and no submitURL doesn't work for older versions of Electron - submitURL: 'https://f.a.k/e', - uploadToServer: false, - compress: true, + let minidumpSent = false; + await minidumpLoader?.(deleteAll, (attachment) => { + captureEvent(event as Event, { attachments: [attachment] }); + minidumpSent = true; }); + + // Unset to recover memory + return minidumpSent; } - /** - * Helper function for sending renderer crashes - */ - private async _sendRendererCrash( + async function sendRendererCrash( + client: NodeClient, options: ElectronMainOptions, contents: Electron.WebContents, details: Partial<Electron.RenderProcessGoneDetails>, @@ -142,17 +138,15 @@ export class SentryMinidump implements Integration { }, }); - const found = await this._sendNativeCrashes(event); + const found = await sendNativeCrashes(client, event); if (found) { sessionCrashed(); } } - /** - * Helper function for sending child process crashes - */ - private async _sendChildProcessCrash( + async function sendChildProcessCrash( + client: NodeClient, options: ElectronMainOptions, details: Omit<Electron.Details, 'exitCode'>, ): Promise<void> { @@ -175,97 +169,68 @@ export class SentryMinidump implements Integration { }, }); - const found = await this._sendNativeCrashes(event); + const found = await sendNativeCrashes(client, event); if (found) { sessionCrashed(); } } - /** - * Adds a scope listener to persist changes to disk. - */ - private _setupScopeListener(currentRelease: string, currentEnvironment: string): void { - const scopeChanged = (updatedScope: Scope): void => { - // Since the initial scope read is async, we need to ensure that any writes do not beat that - // https://github.com/getsentry/sentry-electron/issues/585 - setImmediate(async () => { - void this._scopeStore?.set({ - scope: updatedScope.getScopeData(), - event: await getEventDefaults(currentRelease, currentEnvironment), - }); - }); - }; - - const scope = getCurrentScope(); - - if (scope) { - scope.addScopeListener(scopeChanged); - // Ensure at least one event is written to disk - scopeChanged(scope); - } - } - - /** - * Loads new native crashes from disk and sends them to Sentry. - * - * Returns true if one or more minidumps were found - */ - private async _sendNativeCrashes(eventIn: Event): Promise<boolean> { - // Whenever we are called, assume that the crashes we are going to load down - // below have occurred recently. This means, we can use the same event data - // for all minidumps that we load now. There are two conditions: - // - // 1. The application crashed and we are just starting up. The stored - // breadcrumbs and context reflect the state during the application - // crash. - // - // 2. A renderer process crashed recently and we have just been notified - // about it. Just use the breadcrumbs and context information we have - // right now and hope that the delay was not too long. + return { + name: INTEGRATION_NAME, + setup(client: NodeClient): void { + // Mac AppStore builds cannot run the crash reporter due to the sandboxing + // requirements. In this case, we prevent enabling native crashes entirely. + // https://electronjs.org/docs/tutorial/mac-app-store-submission-guide#limitations-of-mas-build + if (process.mas) { + return; + } - if (this._minidumpLoader === undefined) { - throw new SentryError('Invariant violation: Native crashes not enabled'); - } + startCrashReporter(); - const hub = getCurrentHub(); - const client = hub.getClient(); + scopeStore = new BufferedWriteStore<PreviousRun>(getSentryCachePath(), 'scope_v3', { + scope: new Scope().getScopeData(), + }); + scopeLastRun = scopeStore.get(); + minidumpLoader = getMinidumpLoader(); - if (!client) { - return true; - } + const options = client.getOptions(); - const event = eventIn; + const currentRelease = options?.release || getDefaultReleaseName(); + const currentEnvironment = options?.environment || getDefaultEnvironment(); - // If this is a native main process crash, we need to apply the scope and context from the previous run - if (event.tags?.['event.process'] === 'browser') { - const previousRun = await this._scopeLastRun; - if (previousRun) { - if (previousRun.scope) { - applyScopeDataToEvent(event, previousRun.scope); - } + setupScopeListener(currentRelease, currentEnvironment); - event.release = previousRun.event?.release || event.release; - event.environment = previousRun.event?.environment || event.environment; - event.contexts = previousRun.event?.contexts || event.contexts; + if (!options?.dsn) { + throw new SentryError('Attempted to enable Electron native crash reporter but no DSN was supplied'); } - } - if (!event) { - return false; - } + trackRendererProperties(); - // If the SDK is not enabled, tell the loader to delete all minidumps - const deleteAll = client.getOptions().enabled === false; + onRendererProcessGone(EXIT_REASONS, (contents, details) => sendRendererCrash(client, options, contents, details)); + onChildProcessGone(EXIT_REASONS, (details) => sendChildProcessCrash(client, options, details)); - let minidumpSent = false; - await this._minidumpLoader(deleteAll, (attachment) => { - captureEvent(event as Event, { attachments: [attachment] }); - minidumpSent = true; - }); + // Start to submit recent minidump crashes. This will load breadcrumbs and + // context information that was cached on disk prior to the crash. + sendNativeCrashes(client, { + level: 'fatal', + platform: 'native', + tags: { + 'event.environment': 'native', + 'event.process': 'browser', + event_type: 'native', + }, + }) + .then((minidumpsFound) => + // Check for previous uncompleted session. If a previous session exists + // and no minidumps were found, its likely an abnormal exit + checkPreviousSession(minidumpsFound), + ) + .catch((error) => logger.error(error)); + }, + }; +}; - // Unset to recover memory - this._scopeLastRun = undefined; - return minidumpSent; - } -} +/** Sends minidumps via the Sentry uploader */ +// eslint-disable-next-line deprecation/deprecation +export const SentryMinidump = convertIntegrationFnToClass(INTEGRATION_NAME, sentryMinidump); diff --git a/src/renderer/integrations/scope-to-main.ts b/src/renderer/integrations/scope-to-main.ts index c2ae4ff4..66ab2243 100644 --- a/src/renderer/integrations/scope-to-main.ts +++ b/src/renderer/integrations/scope-to-main.ts @@ -1,41 +1,31 @@ -import { getCurrentHub } from '@sentry/core'; -import { Integration } from '@sentry/types'; +import { convertIntegrationFnToClass, getCurrentScope } from '@sentry/core'; +import { IntegrationFn } from '@sentry/types'; import { normalize } from '@sentry/utils'; import { getIPC } from '../ipc'; -/** - * Passes scope changes to the main process. - */ -export class ScopeToMain implements Integration { - /** @inheritDoc */ - public static id: string = 'ScopeToMain'; - - /** @inheritDoc */ - public readonly name: string; +const INTEGRATION_NAME = 'ScopeToMain'; - public constructor() { - this.name = ScopeToMain.id; - } +const scopeToMain: IntegrationFn = () => { + return { + name: INTEGRATION_NAME, + setup() { + const scope = getCurrentScope(); + if (scope) { + const ipc = getIPC(); - /** @inheritDoc */ - public setupOnce(): void { - this._setupScopeListener(); - } + scope.addScopeListener((updatedScope) => { + ipc.sendScope(JSON.stringify(normalize(updatedScope.getScopeData(), 20, 2_000))); + scope.clearBreadcrumbs(); + scope.clearAttachments(); + }); + } + }, + }; +}; - /** - * Sends the scope to the main process when it updates. - */ - private _setupScopeListener(): void { - const scope = getCurrentHub().getScope(); - if (scope) { - const ipc = getIPC(); - - scope.addScopeListener((updatedScope) => { - ipc.sendScope(JSON.stringify(normalize(updatedScope.getScopeData(), 20, 2_000))); - scope.clearBreadcrumbs(); - scope.clearAttachments(); - }); - } - } -} +/** + * Passes scope changes to the main process. + */ +// eslint-disable-next-line deprecation/deprecation +export const ScopeToMain = convertIntegrationFnToClass(INTEGRATION_NAME, scopeToMain); From bac2501e083c9a86d210d04bdce6d41df9ec7dd9 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Fri, 5 Jan 2024 19:44:08 +0100 Subject: [PATCH 193/239] feat: Update to v7.92.0 of JavaScript SDKs (#810) --- package.json | 14 +- src/common/normalize.ts | 43 +---- src/index.ts | 27 ++- src/main/anr.ts | 119 +++++++------ src/main/context.ts | 1 - src/main/index.ts | 7 +- src/main/integrations/anr.ts | 66 ++++++++ src/main/integrations/electron-minidump.ts | 6 +- src/main/integrations/index.ts | 1 + src/main/renderers.ts | 4 +- src/main/sdk.ts | 14 +- src/main/sessions.ts | 6 - src/main/stack-parse.ts | 6 +- src/renderer/index.ts | 5 + src/renderer/sdk.ts | 2 +- test/e2e/recipe/normalize.ts | 13 +- test/e2e/test-apps/anr/anr-main/event.json | 27 +-- test/e2e/test-apps/anr/anr-main/recipe.yml | 2 +- test/e2e/test-apps/anr/anr-main/src/main.js | 13 +- .../e2e/test-apps/anr/anr-renderer/recipe.yml | 2 +- .../test-apps/native-electron/gpu/event.json | 9 +- .../event-no-crashpad.json | 7 +- .../main-custom-release/event.json | 1 - .../main/event-no-crashpad.json | 7 +- .../test-apps/native-electron/main/event.json | 1 - .../event-no-crashpad.json | 7 +- .../renderer-custom-release/event.json | 7 +- .../native-electron/renderer/event.json | 9 +- .../event.json | 1 - .../event-no-crashpad.json | 7 +- .../event.json | 9 +- test/unit/normalize.test.ts | 70 -------- yarn.lock | 158 +++++++++--------- 33 files changed, 312 insertions(+), 359 deletions(-) create mode 100644 src/main/integrations/anr.ts delete mode 100644 test/unit/normalize.test.ts diff --git a/package.json b/package.json index d277597b..84af72a4 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.90.0", - "@sentry/core": "7.90.0", - "@sentry/node": "7.90.0", - "@sentry/types": "7.90.0", - "@sentry/utils": "7.90.0", + "@sentry/browser": "7.92.0", + "@sentry/core": "7.92.0", + "@sentry/node": "7.92.0", + "@sentry/types": "7.92.0", + "@sentry/utils": "7.92.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.90.0", - "@sentry-internal/typescript": "7.90.0", + "@sentry-internal/eslint-config-sdk": "7.92.0", + "@sentry-internal/typescript": "7.92.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/common/normalize.ts b/src/common/normalize.ts index c2eda157..ab191b89 100644 --- a/src/common/normalize.ts +++ b/src/common/normalize.ts @@ -1,32 +1,5 @@ import { Envelope, Event, Profile, ReplayEvent } from '@sentry/types'; -import { addItemToEnvelope, createEnvelope, forEachEnvelopeItem } from '@sentry/utils'; - -/** - * Normalizes URLs in exceptions and stacktraces so Sentry can fingerprint - * across platforms. - * - * @param url The URL to be normalized. - * @param basePath The application base path. - * @returns The normalized URL. - */ -export function normalizeUrl(url: string, basePath: string): string { - const escapedBase = basePath - // Backslash to forward - .replace(/\\/g, '/') - // Escape RegExp special characters - .replace(/[|\\{}()[\]^$+*?.]/g, '\\$&'); - - let newUrl = url; - try { - newUrl = decodeURI(url); - } catch (_Oo) { - // Sometime this breaks - } - return newUrl - .replace(/\\/g, '/') - .replace(/webpack:\/?/g, '') // Remove intermediate base path - .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///'); -} +import { addItemToEnvelope, createEnvelope, forEachEnvelopeItem, normalizeUrlToBase } from '@sentry/utils'; /** * Normalizes all URLs in an event. See {@link normalizeUrl} for more @@ -40,7 +13,7 @@ export function normalizeEvent(event: Event, basePath: string): Event { for (const exception of event.exception?.values || []) { for (const frame of exception.stacktrace?.frames || []) { if (frame.filename) { - frame.filename = normalizeUrl(frame.filename, basePath); + frame.filename = normalizeUrlToBase(frame.filename, basePath); } } } @@ -48,17 +21,17 @@ export function normalizeEvent(event: Event, basePath: string): Event { // We need to normalize debug ID images the same way as the stack frames for symbolicator to match them correctly for (const debugImage of event.debug_meta?.images || []) { if (debugImage.type === 'sourcemap') { - debugImage.code_file = normalizeUrl(debugImage.code_file, basePath); + debugImage.code_file = normalizeUrlToBase(debugImage.code_file, basePath); } } if (event.transaction) { - event.transaction = normalizeUrl(event.transaction, basePath); + event.transaction = normalizeUrlToBase(event.transaction, basePath); } const { request = {} } = event; if (request.url) { - request.url = normalizeUrl(request.url, basePath); + request.url = normalizeUrlToBase(request.url, basePath); } event.contexts = { @@ -96,11 +69,11 @@ export function normalizeUrlsInReplayEnvelope(envelope: Envelope, basePath: stri const [headers, event] = item as [{ type: 'replay_event' }, ReplayEvent]; if (Array.isArray(event.urls)) { - event.urls = event.urls.map((url) => normalizeUrl(url, basePath)); + event.urls = event.urls.map((url) => normalizeUrlToBase(url, basePath)); } if (event?.request?.url) { - event.request.url = normalizeUrl(event.request.url, basePath); + event.request.url = normalizeUrlToBase(event.request.url, basePath); } modifiedEnvelope = addItemToEnvelope(modifiedEnvelope, [headers, event]); @@ -118,7 +91,7 @@ export function normalizeUrlsInReplayEnvelope(envelope: Envelope, basePath: stri export function normaliseProfile(profile: Profile, basePath: string): void { for (const frame of profile.profile.frames) { if (frame.abs_path) { - frame.abs_path = normalizeUrl(frame.abs_path, basePath); + frame.abs_path = normalizeUrlToBase(frame.abs_path, basePath); } } } diff --git a/src/index.ts b/src/index.ts index 5887fe37..aaf4462a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -44,7 +44,10 @@ export { getCurrentHub, getClient, getCurrentScope, + getGlobalScope, + getIsolationScope, Hub, + // eslint-disable-next-line deprecation/deprecation lastEventId, makeMain, runWithAsyncContext, @@ -57,6 +60,7 @@ export { setTags, setUser, spanStatusfromHttpCode, + // eslint-disable-next-line deprecation/deprecation trace, withScope, captureCheckIn, @@ -88,6 +92,7 @@ interface ProcessEntryPoint { init: (options: Partial<ElectronOptions>) => void; close?: (timeout?: number) => Promise<boolean>; flush?: (timeout?: number) => Promise<boolean>; + // eslint-disable-next-line deprecation/deprecation enableMainProcessAnrDetection?(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void>; } @@ -194,28 +199,18 @@ export async function flush(timeout?: number): Promise<boolean> { } /** - * **Note** This feature is still in beta so there may be breaking changes in future releases. - * - * Starts a child process that detects Application Not Responding (ANR) errors. - * - * It's important to await on the returned promise before your app code to ensure this code does not run in the ANR - * child process. + * @deprecated Use `Anr` integration instead. * * ```js - * import { init, enableMainProcessAnrDetection } from '@sentry/electron'; - * - * init({ dsn: "__DSN__" }); + * import { init, Integrations } from '@sentry/electron'; * - * // with ESM + Electron v28+ - * await enableMainProcessAnrDetection({ captureStackTrace: true }); - * runApp(); - * - * // with CJS - * enableMainProcessAnrDetection({ captureStackTrace: true }).then(() => { - * runApp(); + * init({ + * dsn: "__DSN__", + * integrations: [new Integrations.Anr({ captureStackTrace: true })], * }); * ``` */ +// eslint-disable-next-line deprecation/deprecation export function enableMainProcessAnrDetection(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void> { const entryPoint = getEntryPoint(); diff --git a/src/main/anr.ts b/src/main/anr.ts index e6de9047..250b524c 100644 --- a/src/main/anr.ts +++ b/src/main/anr.ts @@ -1,16 +1,10 @@ -import { - captureEvent, - enableAnrDetection as enableNodeAnrDetection, - getCurrentHub, - getModuleFromFilename, - StackFrame, -} from '@sentry/node'; +import { captureEvent, getClient, getCurrentHub, getModuleFromFilename, NodeClient, StackFrame } from '@sentry/node'; import { Event } from '@sentry/types'; -import { createDebugPauseMessageHandler, logger, watchdogTimer } from '@sentry/utils'; -import { app, WebContents } from 'electron'; +import { callFrameToStackFrame, logger, stripSentryFramesAndReverse, watchdogTimer } from '@sentry/utils'; +import { WebContents } from 'electron'; import { RendererStatus } from '../common'; -import { ELECTRON_MAJOR_VERSION } from './electron-normalize'; +import { Anr } from './integrations/anr'; import { ElectronMainOptions } from './sdk'; import { sessionAnr } from './sessions'; @@ -47,17 +41,60 @@ function sendRendererAnrEvent(contents: WebContents, blockedMs: number, frames?: captureEvent(event); } +interface ScriptParsedEventDataType { + scriptId: string; + url: string; +} + +interface Location { + scriptId: string; + lineNumber: number; + columnNumber?: number; +} + +interface CallFrame { + functionName: string; + location: Location; + url: string; +} + +interface PausedEventDataType { + callFrames: CallFrame[]; + reason: string; +} + function rendererDebugger(contents: WebContents, pausedStack: (frames: StackFrame[]) => void): () => void { contents.debugger.attach('1.3'); - const messageHandler = createDebugPauseMessageHandler( - (cmd) => contents.debugger.sendCommand(cmd), - getModuleFromFilename, - pausedStack, - ); + // Collect scriptId -> url map so we can look up the filenames later + const scripts = new Map<string, string>(); contents.debugger.on('message', (_, method, params) => { - messageHandler({ method, params } as Parameters<typeof messageHandler>[0]); + if (method === 'Debugger.scriptParsed') { + const param = params as ScriptParsedEventDataType; + scripts.set(param.scriptId, param.url); + } else if (method === 'Debugger.paused') { + const param = params as PausedEventDataType; + + if (param.reason !== 'other') { + return; + } + + // copy the frames + const callFrames = [...param.callFrames]; + + contents.debugger.sendCommand('Debugger.resume').then(null, () => { + // ignore + }); + + const stackFrames = stripSentryFramesAndReverse( + callFrames.map((frame) => + callFrameToStackFrame(frame, scripts.get(frame.location.scriptId), getModuleFromFilename), + ), + ); + + pausedStack(stackFrames); + } }); // In node, we enable just before pausing but for Chrome, the debugger must be enabled before he ANR event occurs @@ -86,11 +123,6 @@ function createHrTimer(): { getTimeMs: () => number; reset: () => void } { }; } -/** Are we currently running in the ANR child process */ -export function isAnrChildProcess(): boolean { - return !!process.env.SENTRY_ANR_CHILD_PROCESS; -} - /** Creates a renderer ANR status hook */ export function createRendererAnrStatusHandler(): (status: RendererStatus, contents: WebContents) => void { function log(message: string, ...args: unknown[]): void { @@ -141,38 +173,29 @@ export function createRendererAnrStatusHandler(): (status: RendererStatus, conte }; } +interface LegacyOptions { + entryScript: string; + pollInterval: number; + anrThreshold: number; + captureStackTrace: boolean; + debug: boolean; +} + /** - * **Note** This feature is still in beta so there may be breaking changes in future releases. - * - * Starts a child process that detects Application Not Responding (ANR) errors. - * - * It's important to await on the returned promise before your app code to ensure this code does not run in the ANR - * child process. + * @deprecated Use `Anr` integration instead. * * ```js - * import { init, enableMainProcessAnrDetection } from '@sentry/electron'; + * import { init, Integrations } from '@sentry/electron'; * - * init({ dsn: "__DSN__" }); - * - * // with ESM + Electron v28+ - * await enableMainProcessAnrDetection({ captureStackTrace: true }); - * runApp(); - * - * // with CJS - * enableMainProcessAnrDetection({ captureStackTrace: true }).then(() => { - * runApp(); + * init({ + * dsn: "__DSN__", + * integrations: [new Integrations.Anr({ captureStackTrace: true })], * }); * ``` */ -export function enableMainProcessAnrDetection(options: Parameters<typeof enableNodeAnrDetection>[0]): Promise<void> { - if (ELECTRON_MAJOR_VERSION < 4) { - throw new Error('Main process ANR detection is only supported on Electron v4+'); - } - - const mainOptions = { - entryScript: app.getAppPath(), - ...options, - }; - - return enableNodeAnrDetection(mainOptions); +export function enableMainProcessAnrDetection(options: Partial<LegacyOptions> = {}): Promise<void> { + const integration = new Anr(options); + const client = getClient() as NodeClient; + integration.setup?.(client); + return Promise.resolve(); } diff --git a/src/main/context.ts b/src/main/context.ts index 6bff27e9..0a5f9786 100644 --- a/src/main/context.ts +++ b/src/main/context.ts @@ -297,7 +297,6 @@ export function getDefaultEnvironment(): string { */ async function _getEventDefaults(release?: string, environment?: string): Promise<Event> { return { - sdk: getSdkInfo(), contexts: await getContexts(), environment: environment || getDefaultEnvironment(), release: release || getDefaultReleaseName(), diff --git a/src/main/index.ts b/src/main/index.ts index 0b55870c..c9ee1017 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -45,6 +45,8 @@ export { getCurrentHub, getClient, getCurrentScope, + getGlobalScope, + getIsolationScope, Hub, makeMain, runWithAsyncContext, @@ -57,6 +59,7 @@ export { setTags, setUser, spanStatusfromHttpCode, + // eslint-disable-next-line deprecation/deprecation trace, withScope, captureCheckIn, @@ -74,13 +77,15 @@ export { export type { SpanStatusType } from '@sentry/core'; export type { NodeOptions } from '@sentry/node'; +// eslint-disable-next-line deprecation/deprecation export { flush, close, NodeClient, lastEventId } from '@sentry/node'; export { makeElectronTransport } from './transports/electron-net'; export { makeElectronOfflineTransport } from './transports/electron-offline-net'; -export const Integrations = { ...ElectronMainIntegrations, ...NodeIntegrations }; +export const Integrations = { ...NodeIntegrations, ...ElectronMainIntegrations }; export type { ElectronMainOptions } from './sdk'; export { init, defaultIntegrations } from './sdk'; export { IPCMode } from '../common'; +// eslint-disable-next-line deprecation/deprecation export { enableMainProcessAnrDetection } from './anr'; diff --git a/src/main/integrations/anr.ts b/src/main/integrations/anr.ts new file mode 100644 index 00000000..090ebdd3 --- /dev/null +++ b/src/main/integrations/anr.ts @@ -0,0 +1,66 @@ +import { Integrations } from '@sentry/node'; +import { Primitive } from '@sentry/types'; +import { app } from 'electron'; + +import { ELECTRON_MAJOR_VERSION } from '../electron-normalize'; + +/** + * ConstructorParameters<typeof Integrations.Anr> doesn't work below because integration constructor types are broken here: + * https://github.com/getsentry/sentry-javascript/blob/f28f3a968c52075694ecef4efef354f806fec100/packages/node/src/index.ts#L100-L116 + */ +interface Options { + /** + * Interval to send heartbeat messages to the ANR worker. + * + * Defaults to 50ms. + */ + pollInterval: number; + /** + * Threshold in milliseconds to trigger an ANR event. + * + * Defaults to 5000ms. + */ + anrThreshold: number; + /** + * Whether to capture a stack trace when the ANR event is triggered. + * + * Defaults to `false`. + * + * This uses the node debugger which enables the inspector API and opens the required ports. + */ + captureStackTrace: boolean; + /** + * Tags to include with ANR events. + */ + staticTags: { [key: string]: Primitive }; + /** + * @ignore Internal use only. + * + * If this is supplied, stack frame filenames will be rewritten to be relative to this path. + */ + appRootPath: string | undefined; +} + +// We can't use the functional style of integration until they are exported as functions... + +/** + * Starts a worker thread to detect App Not Responding (ANR) events + */ +export class Anr extends Integrations.Anr { + public constructor(options: Partial<Options> = {}) { + if (ELECTRON_MAJOR_VERSION < 15) { + throw new Error('Main process ANR detection requires Electron >= v15'); + } + + super({ + ...options, + staticTags: { + 'event.environment': 'javascript', + 'event.origin': 'electron', + 'event.process': 'browser', + ...options.staticTags, + }, + appRootPath: app.getAppPath(), + }); + } +} diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts index 3b2be5c8..434d41d9 100644 --- a/src/main/integrations/electron-minidump.ts +++ b/src/main/integrations/electron-minidump.ts @@ -1,11 +1,11 @@ import { applyScopeDataToEvent, convertIntegrationFnToClass, getCurrentScope } from '@sentry/core'; import { NodeClient, NodeOptions } from '@sentry/node'; import { Event, IntegrationFn, ScopeData } from '@sentry/types'; -import { logger, makeDsn, SentryError } from '@sentry/utils'; +import { logger, makeDsn, SentryError, uuid4 } from '@sentry/utils'; import { app, crashReporter } from 'electron'; import { mergeEvents, normalizeEvent } from '../../common'; -import { getEventDefaults } from '../context'; +import { getEventDefaults, getSdkInfo } from '../context'; import { CRASH_REASONS, onRendererProcessGone, @@ -102,6 +102,8 @@ const electronMinidump: IntegrationFn = () => { async function getNativeUploaderEvent(scope: ScopeData): Promise<Event> { const event = mergeEvents(await getEventDefaults(customRelease), { + sdk: getSdkInfo(), + event_id: uuid4(), level: 'fatal', platform: 'native', tags: { 'event.environment': 'native', event_type: 'native' }, diff --git a/src/main/integrations/index.ts b/src/main/integrations/index.ts index 9c3a5fd3..c21649fe 100644 --- a/src/main/integrations/index.ts +++ b/src/main/integrations/index.ts @@ -11,3 +11,4 @@ export { Net } from './net-breadcrumbs'; export { ChildProcess } from './child-process'; export { Screenshots } from './screenshots'; export { RendererProfiling } from './renderer-profiling'; +export { Anr } from './anr'; diff --git a/src/main/renderers.ts b/src/main/renderers.ts index 37e3cd6d..463f8cee 100644 --- a/src/main/renderers.ts +++ b/src/main/renderers.ts @@ -1,6 +1,6 @@ +import { normalizeUrlToBase } from '@sentry/utils'; import { app } from 'electron'; -import { normalizeUrl } from '../common'; import { onWebContentsCreated } from './electron-normalize'; interface Renderer { @@ -25,7 +25,7 @@ export function trackRendererProperties(): void { function updateUrl(id: number, url: string): void { const state = renderers.get(id) || { id }; - state.url = normalizeUrl(url, app.getAppPath()); + state.url = normalizeUrlToBase(url, app.getAppPath()); renderers.set(id, state); } diff --git a/src/main/sdk.ts b/src/main/sdk.ts index 81755ff6..cfd6d2ba 100644 --- a/src/main/sdk.ts +++ b/src/main/sdk.ts @@ -3,10 +3,9 @@ ensureProcess('main'); import { defaultIntegrations as defaultNodeIntegrations, init as nodeInit, NodeOptions } from '@sentry/node'; import { Integration, Options } from '@sentry/types'; -import { app, Session, session, WebContents } from 'electron'; +import { Session, session, WebContents } from 'electron'; -import { isAnrChildProcess } from './anr'; -import { getDefaultEnvironment, getDefaultReleaseName } from './context'; +import { getDefaultEnvironment, getDefaultReleaseName, getSdkInfo } from './context'; import { AdditionalContext, ChildProcess, @@ -23,7 +22,6 @@ import { import { configureIPC } from './ipc'; import { defaultStackParser } from './stack-parse'; import { ElectronOfflineTransportOptions, makeElectronOfflineTransport } from './transports/electron-offline-net'; -import { SDK_VERSION } from './version'; export const defaultIntegrations: Integration[] = [ new SentryMinidump(), @@ -94,7 +92,7 @@ export type ElectronMainOptions = Pick<Partial<ElectronMainOptionsInternal>, 'ge NodeOptions; const defaultOptions: ElectronMainOptionsInternal = { - _metadata: { sdk: { name: 'sentry.javascript.electron', version: SDK_VERSION } }, + _metadata: { sdk: getSdkInfo() }, ipcMode: IPCMode.Both, getSessions: () => [session.defaultSession], }; @@ -106,12 +104,6 @@ export function init(userOptions: ElectronMainOptions): void { const options: ElectronMainOptionsInternal = Object.assign(defaultOptions, userOptions); const defaults = defaultIntegrations; - if (isAnrChildProcess()) { - app.dock?.hide(); - options.autoSessionTracking = false; - options.tracesSampleRate = 0; - } - // If we don't set a release, @sentry/node will automatically fetch from environment variables if (options.release === undefined) { options.release = getDefaultReleaseName(); diff --git a/src/main/sessions.ts b/src/main/sessions.ts index ac0ae9c9..d0632289 100644 --- a/src/main/sessions.ts +++ b/src/main/sessions.ts @@ -4,7 +4,6 @@ import { SerializedSession, Session, SessionContext, SessionStatus } from '@sent import { logger } from '@sentry/utils'; import { app } from 'electron'; -import { isAnrChildProcess } from './anr'; import { getSentryCachePath } from './fs'; import { Store } from './store'; @@ -106,11 +105,6 @@ export async function unreportedDuringLastSession(crashDate: Date | undefined): export async function checkPreviousSession(crashed: boolean): Promise<void> { const client = getCurrentHub().getClient<NodeClient>(); - // We should not check the session storage if we are in an ANR child process - if (isAnrChildProcess()) { - return; - } - const previous = await previousSession; if (previous && client) { diff --git a/src/main/stack-parse.ts b/src/main/stack-parse.ts index 78f51a0d..0e36632c 100644 --- a/src/main/stack-parse.ts +++ b/src/main/stack-parse.ts @@ -1,17 +1,15 @@ import { getModuleFromFilename as getModuleFromFilenameNode } from '@sentry/node'; import { StackParser } from '@sentry/types'; -import { createStackParser, nodeStackLineParser } from '@sentry/utils'; +import { createStackParser, nodeStackLineParser, normalizeUrlToBase } from '@sentry/utils'; import { app } from 'electron'; -import { normalizeUrl } from '../common'; - /** Parses the module name form a filename */ function getModuleFromFilename(filename: string | undefined): string | undefined { if (!filename) { return; } - const normalizedFilename = normalizeUrl(filename, app.getAppPath()); + const normalizedFilename = normalizeUrlToBase(filename, app.getAppPath()); return getModuleFromFilenameNode(normalizedFilename); } diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 03cdc3ef..34211124 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -42,6 +42,8 @@ export { getCurrentHub, getClient, getCurrentScope, + getGlobalScope, + getIsolationScope, Hub, makeMain, runWithAsyncContext, @@ -54,6 +56,7 @@ export { setTags, setUser, spanStatusfromHttpCode, + // eslint-disable-next-line deprecation/deprecation trace, withScope, captureCheckIn, @@ -75,10 +78,12 @@ export { BrowserClient, BrowserTracing, BrowserProfilingIntegration, + // eslint-disable-next-line deprecation/deprecation lastEventId, showReportDialog, Replay, } from '@sentry/browser'; +// eslint-disable-next-line deprecation/deprecation export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser'; export const Integrations = { ...ElectronRendererIntegrations, ...BrowserIntegrations }; diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index d22e92ef..38b05809 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -40,7 +40,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_90_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_92_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/test/e2e/recipe/normalize.ts b/test/e2e/recipe/normalize.ts index 69a1bb46..535ec10c 100644 --- a/test/e2e/recipe/normalize.ts +++ b/test/e2e/recipe/normalize.ts @@ -152,17 +152,24 @@ function normalizeEvent(event: Event & ReplayEvent): void { for (const frame of event.exception?.values?.[0].stacktrace?.frames || []) { frame.colno = 0; frame.lineno = 0; - frame.function = '{{function}}'; + if (frame.function !== 'longWork') { + frame.function = '{{function}}'; + } frame.filename = frame.filename?.replace(/\.mjs$/, '.js'); } } - event.timestamp = 0; + if (event.timestamp) { + event.timestamp = 0; + } + if ((event as any).start_timestamp) { (event as any).start_timestamp = 0; } - event.event_id = '{{id}}'; + if (event.event_id) { + event.event_id = '{{id}}'; + } if (event.spans) { for (const span of event.spans) { diff --git a/test/e2e/test-apps/anr/anr-main/event.json b/test/e2e/test-apps/anr/anr-main/event.json index 58c95e39..7305ef1a 100644 --- a/test/e2e/test-apps/anr/anr-main/event.json +++ b/test/e2e/test-apps/anr/anr-main/event.json @@ -31,13 +31,9 @@ "arch": "{{arch}}", "family": "Desktop", "memory_size": 0, - "free_memory": 0, "processor_count": 0, "processor_frequency": 0, - "cpu_description": "{{cpu}}", - "screen_resolution": "{{screen}}", - "screen_density": 1, - "language": "{{language}}" + "cpu_description": "{{cpu}}" }, "node": { "name": "Node", @@ -51,13 +47,14 @@ "runtime": { "name": "Electron", "version": "{{version}}" + }, + "trace": { + "span_id": "{{id}}", + "trace_id": "{{id}}" } }, "release": "anr-main@1.0.0", "environment": "development", - "user": { - "ip_address": "{{auto}}" - }, "exception": { "values": [ { @@ -68,10 +65,9 @@ "frames": [ { "colno": 0, - "function": "{{function}}", - "in_app": false, - "lineno": 0, - "module": "pbkdf2" + "function": "longWork", + "in_app": true, + "lineno": 0 } ] } @@ -79,16 +75,11 @@ ] }, "level": "error", - "event_id": "{{id}}", "platform": "node", - "timestamp": 0, - "breadcrumbs": [], "tags": { "event.environment": "javascript", "event.origin": "electron", - "event.process": "browser", - "event_type": "javascript", - "process.name": "ANR" + "event.process": "browser" } } } diff --git a/test/e2e/test-apps/anr/anr-main/recipe.yml b/test/e2e/test-apps/anr/anr-main/recipe.yml index db0bca0a..707d3ad6 100644 --- a/test/e2e/test-apps/anr/anr-main/recipe.yml +++ b/test/e2e/test-apps/anr/anr-main/recipe.yml @@ -1,4 +1,4 @@ description: ANR Main Event category: ANR command: yarn -condition: version.major >= 13 +condition: version.major >= 15 diff --git a/test/e2e/test-apps/anr/anr-main/src/main.js b/test/e2e/test-apps/anr/anr-main/src/main.js index df404fc1..d30d2748 100644 --- a/test/e2e/test-apps/anr/anr-main/src/main.js +++ b/test/e2e/test-apps/anr/anr-main/src/main.js @@ -1,12 +1,13 @@ const crypto = require('crypto'); const { app } = require('electron'); -const { init, enableMainProcessAnrDetection } = require('@sentry/electron/main'); +const { init, Integrations } = require('@sentry/electron/main'); init({ dsn: '__DSN__', debug: true, onFatalError: () => {}, + integrations: [new Integrations.Anr({ captureStackTrace: true, anrThreshold: 1000 })], }); function longWork() { @@ -17,10 +18,8 @@ function longWork() { } } -enableMainProcessAnrDetection({ anrThreshold: 1000, captureStackTrace: true }).then(() => { - app.on('ready', () => { - setTimeout(() => { - longWork(); - }, 1000); - }); +app.on('ready', () => { + setTimeout(() => { + longWork(); + }, 2000); }); diff --git a/test/e2e/test-apps/anr/anr-renderer/recipe.yml b/test/e2e/test-apps/anr/anr-renderer/recipe.yml index e88f26b5..da97fae8 100644 --- a/test/e2e/test-apps/anr/anr-renderer/recipe.yml +++ b/test/e2e/test-apps/anr/anr-renderer/recipe.yml @@ -1,4 +1,4 @@ description: ANR Renderer Event category: ANR command: yarn -condition: version.major >= 13 +condition: version.major >= 15 diff --git a/test/e2e/test-apps/native-electron/gpu/event.json b/test/e2e/test-apps/native-electron/gpu/event.json index 6b57887b..27a6d484 100644 --- a/test/e2e/test-apps/native-electron/gpu/event.json +++ b/test/e2e/test-apps/native-electron/gpu/event.json @@ -2,7 +2,7 @@ "method": "minidump", "namespacedData": { "initialScope": { - "release":"native-electron-gpu@1.0.0", + "release": "native-electron-gpu@1.0.0", "user": { "username": "some_user" } @@ -10,9 +10,6 @@ }, "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", "appId": "277345", - "data": { - "event_id": "{{id}}", - "timestamp": 0 - }, - "attachments": [ { "attachment_type": "event.minidump" } ] + "data": {}, + "attachments": [{ "attachment_type": "event.minidump" }] } diff --git a/test/e2e/test-apps/native-electron/main-custom-release/event-no-crashpad.json b/test/e2e/test-apps/native-electron/main-custom-release/event-no-crashpad.json index ed7efbf5..cf221085 100644 --- a/test/e2e/test-apps/native-electron/main-custom-release/event-no-crashpad.json +++ b/test/e2e/test-apps/native-electron/main-custom-release/event-no-crashpad.json @@ -3,9 +3,6 @@ "method": "minidump", "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", "appId": "277345", - "data": { - "event_id": "{{id}}", - "timestamp": 0 - }, - "attachments": [ { "attachment_type": "event.minidump" } ] + "data": {}, + "attachments": [{ "attachment_type": "event.minidump" }] } diff --git a/test/e2e/test-apps/native-electron/main-custom-release/event.json b/test/e2e/test-apps/native-electron/main-custom-release/event.json index 6d76eff8..d3b2587a 100644 --- a/test/e2e/test-apps/native-electron/main-custom-release/event.json +++ b/test/e2e/test-apps/native-electron/main-custom-release/event.json @@ -61,7 +61,6 @@ "username": "some_user" }, "event_id": "{{id}}", - "timestamp": 0, "breadcrumbs": [], "tags": { "event.environment": "native", diff --git a/test/e2e/test-apps/native-electron/main/event-no-crashpad.json b/test/e2e/test-apps/native-electron/main/event-no-crashpad.json index ed7efbf5..cf221085 100644 --- a/test/e2e/test-apps/native-electron/main/event-no-crashpad.json +++ b/test/e2e/test-apps/native-electron/main/event-no-crashpad.json @@ -3,9 +3,6 @@ "method": "minidump", "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", "appId": "277345", - "data": { - "event_id": "{{id}}", - "timestamp": 0 - }, - "attachments": [ { "attachment_type": "event.minidump" } ] + "data": {}, + "attachments": [{ "attachment_type": "event.minidump" }] } diff --git a/test/e2e/test-apps/native-electron/main/event.json b/test/e2e/test-apps/native-electron/main/event.json index e39ccb85..1a9cb412 100644 --- a/test/e2e/test-apps/native-electron/main/event.json +++ b/test/e2e/test-apps/native-electron/main/event.json @@ -61,7 +61,6 @@ "username": "some_user" }, "event_id": "{{id}}", - "timestamp": 0, "breadcrumbs": [], "tags": { "event.environment": "native", diff --git a/test/e2e/test-apps/native-electron/renderer-custom-release/event-no-crashpad.json b/test/e2e/test-apps/native-electron/renderer-custom-release/event-no-crashpad.json index ed7efbf5..cf221085 100644 --- a/test/e2e/test-apps/native-electron/renderer-custom-release/event-no-crashpad.json +++ b/test/e2e/test-apps/native-electron/renderer-custom-release/event-no-crashpad.json @@ -3,9 +3,6 @@ "method": "minidump", "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", "appId": "277345", - "data": { - "event_id": "{{id}}", - "timestamp": 0 - }, - "attachments": [ { "attachment_type": "event.minidump" } ] + "data": {}, + "attachments": [{ "attachment_type": "event.minidump" }] } diff --git a/test/e2e/test-apps/native-electron/renderer-custom-release/event.json b/test/e2e/test-apps/native-electron/renderer-custom-release/event.json index 752eb8e9..fc396348 100644 --- a/test/e2e/test-apps/native-electron/renderer-custom-release/event.json +++ b/test/e2e/test-apps/native-electron/renderer-custom-release/event.json @@ -11,9 +11,6 @@ }, "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", "appId": "277345", - "data": { - "event_id": "{{id}}", - "timestamp": 0 - }, - "attachments": [ { "attachment_type": "event.minidump" } ] + "data": {}, + "attachments": [{ "attachment_type": "event.minidump" }] } diff --git a/test/e2e/test-apps/native-electron/renderer/event.json b/test/e2e/test-apps/native-electron/renderer/event.json index 019d319f..8e88d6bf 100644 --- a/test/e2e/test-apps/native-electron/renderer/event.json +++ b/test/e2e/test-apps/native-electron/renderer/event.json @@ -3,7 +3,7 @@ "method": "minidump", "namespacedData": { "initialScope": { - "release":"native-electron-renderer@1.0.0", + "release": "native-electron-renderer@1.0.0", "user": { "username": "some_user" } @@ -11,9 +11,6 @@ }, "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", "appId": "277345", - "data": { - "event_id": "{{id}}", - "timestamp": 0 - }, - "attachments": [ { "attachment_type": "event.minidump" } ] + "data": {}, + "attachments": [{ "attachment_type": "event.minidump" }] } diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/event.json b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/event.json index 2acac19b..4eee4824 100644 --- a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/event.json +++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/event.json @@ -60,7 +60,6 @@ "username": "some_user" }, "event_id": "{{id}}", - "timestamp": 0, "breadcrumbs": [], "tags": { "event.environment": "native", diff --git a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event-no-crashpad.json b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event-no-crashpad.json index ed7efbf5..cf221085 100644 --- a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event-no-crashpad.json +++ b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event-no-crashpad.json @@ -3,9 +3,6 @@ "method": "minidump", "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", "appId": "277345", - "data": { - "event_id": "{{id}}", - "timestamp": 0 - }, - "attachments": [ { "attachment_type": "event.minidump" } ] + "data": {}, + "attachments": [{ "attachment_type": "event.minidump" }] } diff --git a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event.json b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event.json index 844585f8..6332cefc 100644 --- a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event.json +++ b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/event.json @@ -3,7 +3,7 @@ "method": "minidump", "namespacedData": { "initialScope": { - "release":"session-native-crash-renderer-electron-uploader@1.0.0", + "release": "session-native-crash-renderer-electron-uploader@1.0.0", "user": { "username": "some_user" } @@ -11,9 +11,6 @@ }, "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", "appId": "277345", - "data": { - "event_id": "{{id}}", - "timestamp": 0 - }, - "attachments": [ { "attachment_type": "event.minidump" } ] + "data": {}, + "attachments": [{ "attachment_type": "event.minidump" }] } diff --git a/test/unit/normalize.test.ts b/test/unit/normalize.test.ts deleted file mode 100644 index 3b79c849..00000000 --- a/test/unit/normalize.test.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { expect, should, use } from 'chai'; -import chaiAsPromised = require('chai-as-promised'); - -import { normalizeUrl } from '../../src/common/normalize'; - -should(); -use(chaiAsPromised); - -describe('Normalize URLs', () => { - it('Example app on Windows', () => { - const base = 'c:/Users/Username/sentry-electron/example'; - - expect(normalizeUrl('C:\\Users\\Username\\sentry-electron\\example\\renderer.js', base)).to.equal( - 'app:///renderer.js', - ); - - expect(normalizeUrl('C:\\Users\\Username\\sentry-electron\\example\\sub-directory\\renderer.js', base)).to.equal( - 'app:///sub-directory/renderer.js', - ); - - expect(normalizeUrl('file:///C:/Users/Username/sentry-electron/example/index.html', base)).to.equal( - 'app:///index.html', - ); - }); - - it('Example app with parentheses', () => { - const base = 'c:/Users/Username/sentry-electron (beta)/example'; - - expect(normalizeUrl('C:\\Users\\Username\\sentry-electron%20(beta)\\example\\renderer.js', base)).to.equal( - 'app:///renderer.js', - ); - - expect( - normalizeUrl('C:\\Users\\Username\\sentry-electron%20(beta)\\example\\sub-directory\\renderer.js', base), - ).to.equal('app:///sub-directory/renderer.js'); - - expect(normalizeUrl('file:///C:/Users/Username/sentry-electron%20(beta)/example/index.html', base)).to.equal( - 'app:///index.html', - ); - }); - - it('Asar packaged app in Windows Program Files', () => { - const base = 'C:/Program Files/My App/resources/app.asar'; - - expect(normalizeUrl('/C:/Program%20Files/My%20App/resources/app.asar/dist/bundle-app.js', base)).to.equal( - 'app:///dist/bundle-app.js', - ); - - expect(normalizeUrl('file:///C:/Program%20Files/My%20App/resources/app.asar/index.html', base)).to.equal( - 'app:///index.html', - ); - - expect(normalizeUrl('file:///C:/Program%20Files/My%20App/resources/app.asar/a/index.html', base)).to.equal( - 'app:///a/index.html', - ); - }); - - it('Webpack builds', () => { - const base = '/home/haza/Desktop/foo/app/'; - expect( - normalizeUrl('/home/haza/Desktop/foo/app/webpack:/electron/src/common/models/ipc-request.ts', base), - ).to.equal('app:///electron/src/common/models/ipc-request.ts'); - }); - - it('Only modifies file URLS', () => { - const base = 'c:/Users/Username/sentry-electron/example'; - expect(normalizeUrl('https://some.host/index.html', base)).to.equal('https://some.host/index.html'); - expect(normalizeUrl('http://localhost:43288/index.html', base)).to.equal('http://localhost:43288/index.html'); - }); -}); diff --git a/yarn.lock b/yarn.lock index c00e6ca3..50ea3561 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.90.0": - version "7.90.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.90.0.tgz#0a765a209ca3499bbc08856b8228613ee4e715f9" - integrity sha512-PvjJ/Dsp9eofcZz6wBaPEDfc5R9mLMgDR8WfWECiMhfYu7KBT2GgMx1dWe2g0ylqDzoBmY15+8gGELhf90kfrA== +"@sentry-internal/eslint-config-sdk@7.92.0": + version "7.92.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.92.0.tgz#a4532463a22a59dfb115cd2392f02e27c95b7f66" + integrity sha512-1TtJkV4Wmqf/CbXUL8tkS/yxDAVbvUnvCQZguD6s1LZTWMJ+4coEkeSkgn1qRSjBz0YIREr1DXSmPbXU2TugiQ== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.90.0" - "@sentry-internal/typescript" "7.90.0" + "@sentry-internal/eslint-plugin-sdk" "7.92.0" + "@sentry-internal/typescript" "7.92.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,88 +180,88 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.90.0": - version "7.90.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.90.0.tgz#4e9238816011d8a22173644db7fe72ff54e1ceb4" - integrity sha512-4/1GA6KNyBm+721DGlVgKgUC8qbI9netOZLZetVOUQ2oNiJHHdYn0jHGZzB5zMcut+/S6Nr9MqiFgjLzI8E3PA== +"@sentry-internal/eslint-plugin-sdk@7.92.0": + version "7.92.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.92.0.tgz#9c6dae628adecfd7047afa504cc8809276ad2bad" + integrity sha512-hccEHqZwO9kEsDOlPso7b7Tz+sSBiyyJ1KW+EOx65H3AAgGGHPkoU074fA0S+yyuRVEk0wCKR1xQ7jgfWxJSQw== dependencies: requireindex "~1.1.0" -"@sentry-internal/feedback@7.90.0": - version "7.90.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.90.0.tgz#053e36b4d01dd94c948e5eb6902f264c1d4436e6" - integrity sha512-ZIdpwK9KmiE/UYGUgNE3N9A5MWm92rbC/0u04LxQfZh0tGqN2EchwivQpFCWuu5QsKMlsza7aO6YQXsKvwt1Ww== - dependencies: - "@sentry/core" "7.90.0" - "@sentry/types" "7.90.0" - "@sentry/utils" "7.90.0" - -"@sentry-internal/tracing@7.90.0": - version "7.90.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.90.0.tgz#cd21662dbfa3d90d34e91eabd875a1616717d3d3" - integrity sha512-74jEtpdio9aRkiVBcrY1ZJXek0oFMqxDJK6BkJNCA+aUK1z96V9viehANRk3Nbxm01rWjmH1U4e1siuo9FhjuQ== - dependencies: - "@sentry/core" "7.90.0" - "@sentry/types" "7.90.0" - "@sentry/utils" "7.90.0" - -"@sentry-internal/typescript@7.90.0": - version "7.90.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.90.0.tgz#fcf4e9c35f56b9331d4dc93ce1f35a89bd3ad361" - integrity sha512-m8VDDATpnBgLfFLl1tISA2B5Yw5UUcHdoYlOGAVFnIV22wzM4M7mO8PP6vZ2teA7Rh9TINiTgJu8ZN06mkmATw== - -"@sentry/browser@7.90.0": - version "7.90.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.90.0.tgz#a5a696a328364f3bf15405d03112c06f53bb2923" - integrity sha512-ik3Jwo+TYjoEesJlt3PlHDcPE9h//WwyUsVkV9ZsVx0MSXb8c1VC4uDMsyUqjA+gPImmw1l9KlWZtvaOooZEhg== - dependencies: - "@sentry-internal/feedback" "7.90.0" - "@sentry-internal/tracing" "7.90.0" - "@sentry/core" "7.90.0" - "@sentry/replay" "7.90.0" - "@sentry/types" "7.90.0" - "@sentry/utils" "7.90.0" - -"@sentry/core@7.90.0": - version "7.90.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.90.0.tgz#dfd8e3e4eec4b140681ddb21a3fea848fcab7a01" - integrity sha512-HolpdHjULCwehKPWHR6IPQM0NBjmORhlBU7FtCh/e8TtSkZ9ztPsuofNBomMS1+mdbL+yxOIc9KUYEl0zRfeAQ== - dependencies: - "@sentry/types" "7.90.0" - "@sentry/utils" "7.90.0" - -"@sentry/node@7.90.0": - version "7.90.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.90.0.tgz#083bbdc053426d491281bff6f8a238600dd93e99" - integrity sha512-VjDI2MCkidoFEzrMa1gqmwYt1sUhYnu+zoFF5P5jgapTVVJ5xc2b7k/lS62U6IsfxHNrIdTtQHsrbCS5+s0GvQ== - dependencies: - "@sentry-internal/tracing" "7.90.0" - "@sentry/core" "7.90.0" - "@sentry/types" "7.90.0" - "@sentry/utils" "7.90.0" +"@sentry-internal/feedback@7.92.0": + version "7.92.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.92.0.tgz#1293b0a332f81cdf3970abd36894b9d25670c4e6" + integrity sha512-/jEALRtVqboxB9kcK2tag8QCO6XANTlGBb9RV3oeGXJe0DDNJXRq6wVZbfgztXJRrfgx4XVDcNt1pRVoGGG++g== + dependencies: + "@sentry/core" "7.92.0" + "@sentry/types" "7.92.0" + "@sentry/utils" "7.92.0" + +"@sentry-internal/tracing@7.92.0": + version "7.92.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.92.0.tgz#505d94a93b5df965ec6bfb35da43389988259d4d" + integrity sha512-ur55vPcUUUWFUX4eVLNP71ohswK7ZZpleNZw9Y1GfLqyI+0ILQUwjtzqItJrdClvVsdRZJMRmDV40Hp9Lbb9mA== + dependencies: + "@sentry/core" "7.92.0" + "@sentry/types" "7.92.0" + "@sentry/utils" "7.92.0" + +"@sentry-internal/typescript@7.92.0": + version "7.92.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.92.0.tgz#25196d80b127a8a22f32a4b95f691f512d0ad117" + integrity sha512-fCMKhG+J3VV+afyyWu6rsuhMppugKj8ubk8b2Ss7BggzPF5GEA6njTUBJYpFNkvy/RGLy6gDy3Qpqb/cH3NT2g== + +"@sentry/browser@7.92.0": + version "7.92.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.92.0.tgz#f4c65f2af6f38c2dd5e32153e9b358c0c80275f2" + integrity sha512-loMr02/zQ38u8aQhYLtIBg0i5n3ps2e3GUXrt3CdsJQdkRYfa62gcrE7SzvoEpMVHTk7VOI4fWGht8cWw/1k3A== + dependencies: + "@sentry-internal/feedback" "7.92.0" + "@sentry-internal/tracing" "7.92.0" + "@sentry/core" "7.92.0" + "@sentry/replay" "7.92.0" + "@sentry/types" "7.92.0" + "@sentry/utils" "7.92.0" + +"@sentry/core@7.92.0": + version "7.92.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.92.0.tgz#4e74c1959348b698226c49ead7a24e165502b55c" + integrity sha512-1Tly7YB2I1byI5xb0Cwrxs56Rhww+6mQ7m9P7rTmdC3/ijOzbEoohtYIUPwcooCEarpbEJe/tAayRx6BrH2UbQ== + dependencies: + "@sentry/types" "7.92.0" + "@sentry/utils" "7.92.0" + +"@sentry/node@7.92.0": + version "7.92.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.92.0.tgz#880d3be5cb8ef805a6856c619db3951b1678f726" + integrity sha512-LZeQL1r6kikEoOzA9K61OmMl32/lK/6PzmFNDH6z7UYwQopCZgVA6IP+CZuln8K2ys5c9hCyF7ICQMysXfpNJA== + dependencies: + "@sentry-internal/tracing" "7.92.0" + "@sentry/core" "7.92.0" + "@sentry/types" "7.92.0" + "@sentry/utils" "7.92.0" https-proxy-agent "^5.0.0" -"@sentry/replay@7.90.0": - version "7.90.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.90.0.tgz#98e181c495422a13b088dcb030556511824eaa95" - integrity sha512-fsABtzQ5JQI7G5CC4fg05lVI5DTbd1uwKi41xVKFRmCB5NVTHvK7bHgP8n6uSbnle+gp9rUxVPLLBIPjKfaTmw== +"@sentry/replay@7.92.0": + version "7.92.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.92.0.tgz#d94e9f6b72e540e73378a74ca1190068edd447f2" + integrity sha512-G1t9Uvc9cR8VpNkElwvHIMGzykjIKikb10n0tfVd3e+rBPMCCjCPWOduwG6jZYxcvCjTpqmJh6NSLXxL/Mt4JA== dependencies: - "@sentry-internal/tracing" "7.90.0" - "@sentry/core" "7.90.0" - "@sentry/types" "7.90.0" - "@sentry/utils" "7.90.0" + "@sentry-internal/tracing" "7.92.0" + "@sentry/core" "7.92.0" + "@sentry/types" "7.92.0" + "@sentry/utils" "7.92.0" -"@sentry/types@7.90.0": - version "7.90.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.90.0.tgz#72797abd790fc3de546d42600752004a7f7d07d0" - integrity sha512-dA0Mtba5jYlcQ6xBsGILZuFq4NGrWLfr2ys036z2JE4H1+3PxOVERlD3Di7p+WKYM5gjFw10Hn3EgUV979E3dA== +"@sentry/types@7.92.0": + version "7.92.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.92.0.tgz#4c308fdb316c0272f55f0816230fe87e7b9b551a" + integrity sha512-APmSOuZuoRGpbPpPeYIbMSplPjiWNLZRQa73QiXuTflW4Tu/ItDlU8hOa2+A6JKVkJCuD2EN6yUrxDGSMyNXeg== -"@sentry/utils@7.90.0": - version "7.90.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.90.0.tgz#d4eea6392af7498c7be03205151ad11ea8707915" - integrity sha512-6BpqAzONm/HQbdlL4TY2W2vBSmaG/eVvwUaHoz0wB49EkWwpF6j/SO9Kb/XkiA/qp9GoJVXpnGBFQLPx7kv/Yw== +"@sentry/utils@7.92.0": + version "7.92.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.92.0.tgz#20ed29742594eab007f9ff72e008b5262456a319" + integrity sha512-3nEfrQ1z28b/2zgFGANPh5yMVtgwXmrasZxTvKbrAj+KWJpjrJHrIR84r9W277J44NMeZ5RhRW2uoDmuBslPnA== dependencies: - "@sentry/types" "7.90.0" + "@sentry/types" "7.92.0" "@sindresorhus/is@^4.0.0": version "4.6.0" From 3e5a2c0f2a0e4a466b6bd04d04b6a5f88f6bbee7 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 8 Jan 2024 15:40:07 +0100 Subject: [PATCH 194/239] test: Ensure correct scope for main process native crashes (#812) --- .../test-apps/native-sentry/main/event.json | 18 +++++++++++++++++- .../native-sentry/main/src/index.html | 4 ++++ .../test-apps/native-sentry/main/src/main.js | 6 +++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/test/e2e/test-apps/native-sentry/main/event.json b/test/e2e/test-apps/native-sentry/main/event.json index d5ec4f9d..d1bd9e95 100644 --- a/test/e2e/test-apps/native-sentry/main/event.json +++ b/test/e2e/test-apps/native-sentry/main/event.json @@ -60,7 +60,23 @@ }, "event_id": "{{id}}", "timestamp": 0, - "breadcrumbs": [], + "breadcrumbs": [ + { + "category": "console", + "level": "log", + "message": "main process breadcrumb from first crashing run" + }, + { + "category": "console", + "level": "log", + "message": "renderer process breadcrumb from first crashing run" + }, + { + "category": "console", + "level": "log", + "message": "main process breadcrumb from second run" + } + ], "tags": { "event.environment": "native", "event.origin": "electron", diff --git a/test/e2e/test-apps/native-sentry/main/src/index.html b/test/e2e/test-apps/native-sentry/main/src/index.html index 2707fc4f..096b4f9f 100644 --- a/test/e2e/test-apps/native-sentry/main/src/index.html +++ b/test/e2e/test-apps/native-sentry/main/src/index.html @@ -10,6 +10,10 @@ init({ debug: true, }); + + if (process.env.APP_FIRST_RUN) { + console.log('renderer process breadcrumb from first crashing run'); + } </script> </body> </html> \ No newline at end of file diff --git a/test/e2e/test-apps/native-sentry/main/src/main.js b/test/e2e/test-apps/native-sentry/main/src/main.js index c723921e..47c6b9e1 100644 --- a/test/e2e/test-apps/native-sentry/main/src/main.js +++ b/test/e2e/test-apps/native-sentry/main/src/main.js @@ -28,8 +28,12 @@ app.on('ready', () => { // We only crash on the first run // The second run is where the crash is uploaded if (process.env.APP_FIRST_RUN) { + console.log('main process breadcrumb from first crashing run'); + setTimeout(() => { process.crash(); - }, 1000); + }, 2000); + } else { + console.log('main process breadcrumb from second run'); } }); From 1bf073f99b1dda7872dd1e9924470893f7c2ba07 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 8 Jan 2024 17:45:11 +0100 Subject: [PATCH 195/239] feat: Add support for performance metrics (#811) --- src/common/ipc.ts | 14 +++++++ src/main/ipc.ts | 39 +++++++++++++++-- src/preload/index.ts | 3 +- src/preload/legacy.ts | 3 +- src/renderer/index.ts | 13 +++++- .../integrations/metrics-aggregator.ts | 24 +++++++++++ src/renderer/ipc.ts | 14 ++++++- src/renderer/metrics.ts | 42 +++++++++++++++++++ src/renderer/sdk.ts | 3 +- test/e2e/recipe/normalize.ts | 4 ++ test/e2e/server/index.ts | 12 +++++- test/e2e/test-apps/other/metrics/event.json | 6 +++ test/e2e/test-apps/other/metrics/package.json | 8 ++++ test/e2e/test-apps/other/metrics/recipe.yml | 3 ++ .../test-apps/other/metrics/src/index.html | 14 +++++++ test/e2e/test-apps/other/metrics/src/main.js | 32 ++++++++++++++ 16 files changed, 223 insertions(+), 11 deletions(-) create mode 100644 src/renderer/integrations/metrics-aggregator.ts create mode 100644 src/renderer/metrics.ts create mode 100644 test/e2e/test-apps/other/metrics/event.json create mode 100644 test/e2e/test-apps/other/metrics/package.json create mode 100644 test/e2e/test-apps/other/metrics/recipe.yml create mode 100644 test/e2e/test-apps/other/metrics/src/index.html create mode 100644 test/e2e/test-apps/other/metrics/src/main.js diff --git a/src/common/ipc.ts b/src/common/ipc.ts index ac26f837..76f86547 100644 --- a/src/common/ipc.ts +++ b/src/common/ipc.ts @@ -1,3 +1,5 @@ +import { MeasurementUnit, Primitive } from '@sentry/types'; + export const PROTOCOL_SCHEME = 'sentry-ipc'; export enum IPCChannel { @@ -11,6 +13,8 @@ export enum IPCChannel { ENVELOPE = 'sentry-electron.envelope', /** IPC to pass renderer status updates */ STATUS = 'sentry-electron.status', + /** IPC to pass renderer metric additions to the main process */ + ADD_METRIC = 'sentry-electron.add-metric', } export interface RendererProcessAnrOptions { @@ -39,12 +43,22 @@ export interface RendererStatus { config: RendererProcessAnrOptions; } +export interface MetricIPCMessage { + metricType: 'c' | 'g' | 's' | 'd'; + name: string; + value: number | string; + unit?: MeasurementUnit; + tags?: Record<string, Primitive>; + timestamp?: number; +} + export interface IPCInterface { sendRendererStart: () => void; sendScope: (scope: string) => void; sendEvent: (event: string) => void; sendEnvelope: (evn: Uint8Array | string) => void; sendStatus: (state: RendererStatus) => void; + sendAddMetric: (metric: MetricIPCMessage) => void; } export const RENDERER_ID_HEADER = 'sentry-electron-renderer-id'; diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 49748cf7..6b17547b 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -1,5 +1,14 @@ -import { captureEvent, getCurrentHub, getCurrentScope } from '@sentry/core'; -import { Attachment, AttachmentItem, Envelope, Event, EventItem, Profile, ScopeData } from '@sentry/types'; +import { BaseClient, captureEvent, getClient, getCurrentScope } from '@sentry/core'; +import { + Attachment, + AttachmentItem, + ClientOptions, + Envelope, + Event, + EventItem, + Profile, + ScopeData, +} from '@sentry/types'; import { forEachEnvelopeItem, logger, parseEnvelope, SentryError } from '@sentry/utils'; import { app, ipcMain, protocol, WebContents, webContents } from 'electron'; import { TextDecoder, TextEncoder } from 'util'; @@ -8,6 +17,7 @@ import { IPCChannel, IPCMode, mergeEvents, + MetricIPCMessage, normalizeUrlsInReplayEnvelope, PROTOCOL_SCHEME, RendererStatus, @@ -127,7 +137,26 @@ function handleEnvelope(options: ElectronMainOptionsInternal, env: Uint8Array | } else { const normalizedEnvelope = normalizeUrlsInReplayEnvelope(envelope, app.getAppPath()); // Pass other types of envelope straight to the transport - void getCurrentHub().getClient()?.getTransport()?.send(normalizedEnvelope); + void getClient()?.getTransport()?.send(normalizedEnvelope); + } +} + +function handleMetric(metric: MetricIPCMessage): void { + const client = getClient<BaseClient<ClientOptions>>(); + + if (client?.metricsAggregator) { + client.metricsAggregator.add( + metric.metricType, + metric.name, + metric.value, + metric.unit, + metric.tags, + metric.timestamp, + ); + } else { + logger.warn( + `Metric was dropped because the aggregator is not configured in the main process. Enable via '_experiments.metricsAggregator: true' in your init call.`, + ); } } @@ -208,6 +237,8 @@ function configureProtocol(options: ElectronMainOptionsInternal): void { handleScope(options, data.toString()); } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.ENVELOPE}`) && data) { handleEnvelope(options, data, getWebContents()); + } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.ADD_METRIC}`) && data) { + handleMetric(JSON.parse(data.toString()) as MetricIPCMessage); } else if (request.url.startsWith(`${PROTOCOL_SCHEME}://${IPCChannel.STATUS}`) && data) { const contents = getWebContents(); if (contents) { @@ -245,6 +276,8 @@ function configureClassic(options: ElectronMainOptionsInternal): void { const rendererStatusChanged = createRendererAnrStatusHandler(); ipcMain.on(IPCChannel.STATUS, ({ sender }, status: RendererStatus) => rendererStatusChanged(status, sender)); + + ipcMain.on(IPCChannel.ADD_METRIC, (_, metric: MetricIPCMessage) => handleMetric(metric)); } /** Sets up communication channels with the renderer */ diff --git a/src/preload/index.ts b/src/preload/index.ts index 78f91f99..1fecd68d 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -4,7 +4,7 @@ import { contextBridge, ipcRenderer } from 'electron'; -import { IPCChannel, RendererStatus } from '../common/ipc'; +import { IPCChannel, MetricIPCMessage, RendererStatus } from '../common/ipc'; // eslint-disable-next-line no-restricted-globals if (window.__SENTRY_IPC__) { @@ -17,6 +17,7 @@ if (window.__SENTRY_IPC__) { sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson), sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope), sendStatus: (status: RendererStatus) => ipcRenderer.send(IPCChannel.STATUS, status), + sendAddMetric: (metric: MetricIPCMessage) => ipcRenderer.send(IPCChannel.ADD_METRIC, metric), }; // eslint-disable-next-line no-restricted-globals diff --git a/src/preload/legacy.ts b/src/preload/legacy.ts index 9a9d4d15..cc9e8589 100644 --- a/src/preload/legacy.ts +++ b/src/preload/legacy.ts @@ -5,7 +5,7 @@ import { contextBridge, crashReporter, ipcRenderer } from 'electron'; import * as electron from 'electron'; -import { IPCChannel, RendererStatus } from '../common/ipc'; +import { IPCChannel, MetricIPCMessage, RendererStatus } from '../common/ipc'; // eslint-disable-next-line no-restricted-globals if (window.__SENTRY_IPC__) { @@ -28,6 +28,7 @@ if (window.__SENTRY_IPC__) { sendEvent: (eventJson: string) => ipcRenderer.send(IPCChannel.EVENT, eventJson), sendEnvelope: (envelope: Uint8Array | string) => ipcRenderer.send(IPCChannel.ENVELOPE, envelope), sendStatus: (status: RendererStatus) => ipcRenderer.send(IPCChannel.STATUS, status), + sendAddMetric: (metric: MetricIPCMessage) => ipcRenderer.send(IPCChannel.ADD_METRIC, metric), }; // eslint-disable-next-line no-restricted-globals diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 34211124..1c9a7335 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -69,10 +69,19 @@ export { startInactiveSpan, startSpanManual, continueTrace, - metrics, } from '@sentry/core'; export type { SpanStatusType } from '@sentry/core'; +import { metrics as coreMetrics } from '@sentry/core'; + +import { MetricsAggregator } from './integrations/metrics-aggregator'; + +export const metrics = { + ...coreMetrics, + // Override the default browser metrics aggregator with the Electron renderer one + MetricsAggregator, +}; + export { addTracingExtensions, BrowserClient, @@ -86,5 +95,5 @@ export { // eslint-disable-next-line deprecation/deprecation export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser'; -export const Integrations = { ...ElectronRendererIntegrations, ...BrowserIntegrations }; +export const Integrations = { ...BrowserIntegrations, ...ElectronRendererIntegrations }; export { init, defaultIntegrations } from './sdk'; diff --git a/src/renderer/integrations/metrics-aggregator.ts b/src/renderer/integrations/metrics-aggregator.ts new file mode 100644 index 00000000..a52faf81 --- /dev/null +++ b/src/renderer/integrations/metrics-aggregator.ts @@ -0,0 +1,24 @@ +import { BrowserClient } from '@sentry/browser'; +import { convertIntegrationFnToClass } from '@sentry/core'; +import type { IntegrationFn } from '@sentry/types'; + +import { ElectronRendererMetricsAggregator } from '../metrics'; + +const INTEGRATION_NAME = 'MetricsAggregator'; + +const metricsAggregatorIntegration: IntegrationFn = () => { + return { + name: INTEGRATION_NAME, + setup(client: BrowserClient) { + client.metricsAggregator = new ElectronRendererMetricsAggregator(); + }, + }; +}; + +/** + * Enables Sentry metrics monitoring. + * + * @experimental This API is experimental and might having breaking changes in the future. + */ +// eslint-disable-next-line deprecation/deprecation +export const MetricsAggregator = convertIntegrationFnToClass(INTEGRATION_NAME, metricsAggregatorIntegration); diff --git a/src/renderer/ipc.ts b/src/renderer/ipc.ts index 549874aa..2b72eea4 100644 --- a/src/renderer/ipc.ts +++ b/src/renderer/ipc.ts @@ -2,7 +2,14 @@ /* eslint-disable no-console */ import { logger, uuid4 } from '@sentry/utils'; -import { IPCChannel, IPCInterface, PROTOCOL_SCHEME, RENDERER_ID_HEADER, RendererStatus } from '../common/ipc'; +import { + IPCChannel, + IPCInterface, + MetricIPCMessage, + PROTOCOL_SCHEME, + RENDERER_ID_HEADER, + RendererStatus, +} from '../common/ipc'; function buildUrl(channel: IPCChannel): string { // We include sentry_key in the URL so these don't end up in fetch breadcrumbs @@ -52,6 +59,11 @@ function getImplementation(): IPCInterface { // ignore }); }, + sendAddMetric: (metric: MetricIPCMessage) => { + fetch(buildUrl(IPCChannel.ADD_METRIC), { method: 'POST', body: JSON.stringify(metric), headers }).catch(() => { + // ignore + }); + }, }; } } diff --git a/src/renderer/metrics.ts b/src/renderer/metrics.ts new file mode 100644 index 00000000..83648689 --- /dev/null +++ b/src/renderer/metrics.ts @@ -0,0 +1,42 @@ +import { MeasurementUnit, MetricsAggregator, Primitive } from '@sentry/types'; + +import { IPCInterface } from '../common/ipc'; +import { getIPC } from './ipc'; + +/** + * Sends metrics to the Electron main process where they can be aggregated in a single process + */ +export class ElectronRendererMetricsAggregator implements MetricsAggregator { + private readonly _ipc: IPCInterface; + + public constructor() { + this._ipc = getIPC(); + } + + /** @inheritdoc */ + public add( + metricType: 'c' | 'g' | 's' | 'd', + name: string, + value: string | number, + unit?: MeasurementUnit | undefined, + tags?: Record<string, Primitive> | undefined, + timestamp?: number | undefined, + ): void { + this._ipc.sendAddMetric({ metricType, name, value, unit, tags, timestamp }); + } + + /** @inheritdoc */ + public flush(): void { + // do nothing + } + + /** @inheritdoc */ + public close(): void { + // do nothing + } + + /** @inheritdoc */ + public toString(): string { + return ''; + } +} diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 38b05809..e29a45ef 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -9,10 +9,11 @@ import { logger } from '@sentry/utils'; import { ensureProcess, RendererProcessAnrOptions } from '../common'; import { enableAnrRendererMessages } from './anr'; import { ScopeToMain } from './integrations'; +import { MetricsAggregator } from './integrations/metrics-aggregator'; import { electronRendererStackParser } from './stack-parse'; import { makeRendererTransport } from './transport'; -export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMain()]; +export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMain(), new MetricsAggregator()]; interface ElectronRendererOptions extends BrowserOptions { /** diff --git a/test/e2e/recipe/normalize.ts b/test/e2e/recipe/normalize.ts index 535ec10c..e4d63413 100644 --- a/test/e2e/recipe/normalize.ts +++ b/test/e2e/recipe/normalize.ts @@ -13,6 +13,10 @@ export function normalize(event: TestServerEvent<Event | Transaction | Session>) } normalizeProfile(event.profile); + + if (event.metrics) { + event.metrics = event.metrics.replace(/T\d{1,10}\n/g, 'T0000000000\n'); + } } export function eventIsSession(data: EventOrSession): boolean { diff --git a/test/e2e/server/index.ts b/test/e2e/server/index.ts index 00e501f3..3e1b7be4 100644 --- a/test/e2e/server/index.ts +++ b/test/e2e/server/index.ts @@ -40,6 +40,8 @@ export interface TestServerEvent<T = unknown> { attachments?: Attachment[]; /** Profiling data */ profile?: Profile; + /** Metrics data */ + metrics?: string; /** API method used for submission */ method: 'envelope' | 'minidump' | 'store'; } @@ -124,6 +126,7 @@ export class TestServer { let data: Event | Transaction | Session | ReplayEvent | undefined; const attachments: Attachment[] = []; let profile: Profile | undefined; + let metrics: string | undefined; forEachEnvelopeItem(envelope, ([headers, item]) => { if (headers.type === 'event' || headers.type === 'transaction' || headers.type === 'session') { @@ -142,16 +145,21 @@ export class TestServer { attachments.push(headers); } + if (headers.type === 'statsd') { + metrics = item.toString(); + } + if (headers.type === 'profile') { profile = item as unknown as Profile; } }); - if (data) { + if (data || metrics) { this._addEvent({ - data, + data: data || {}, attachments, profile, + metrics, appId: ctx.params.id, sentryKey: keyMatch[1], method: 'envelope', diff --git a/test/e2e/test-apps/other/metrics/event.json b/test/e2e/test-apps/other/metrics/event.json new file mode 100644 index 00000000..9570aaf3 --- /dev/null +++ b/test/e2e/test-apps/other/metrics/event.json @@ -0,0 +1,6 @@ +{ + "method": "envelope", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "appId": "277345", + "metrics": "parallel_requests@none:2:2:2:2:1|g|#release:metrics@1.0.0,environment:development,type:a|T0000000000\nhits@none:4|c|T0000000000\n" +} diff --git a/test/e2e/test-apps/other/metrics/package.json b/test/e2e/test-apps/other/metrics/package.json new file mode 100644 index 00000000..c0ca402b --- /dev/null +++ b/test/e2e/test-apps/other/metrics/package.json @@ -0,0 +1,8 @@ +{ + "name": "metrics", + "version": "1.0.0", + "main": "src/main.js", + "dependencies": { + "@sentry/electron": "3.0.0" + } +} diff --git a/test/e2e/test-apps/other/metrics/recipe.yml b/test/e2e/test-apps/other/metrics/recipe.yml new file mode 100644 index 00000000..3ce62df7 --- /dev/null +++ b/test/e2e/test-apps/other/metrics/recipe.yml @@ -0,0 +1,3 @@ +description: Metrics +command: yarn + diff --git a/test/e2e/test-apps/other/metrics/src/index.html b/test/e2e/test-apps/other/metrics/src/index.html new file mode 100644 index 00000000..78319a0a --- /dev/null +++ b/test/e2e/test-apps/other/metrics/src/index.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + </head> + <body> + <script> + const Sentry = require('@sentry/electron/renderer'); + + Sentry.init(); + Sentry.metrics.increment('hits', 4); + </script> + </body> +</html> diff --git a/test/e2e/test-apps/other/metrics/src/main.js b/test/e2e/test-apps/other/metrics/src/main.js new file mode 100644 index 00000000..ad6eb1b1 --- /dev/null +++ b/test/e2e/test-apps/other/metrics/src/main.js @@ -0,0 +1,32 @@ +const path = require('path'); + +const { app, BrowserWindow } = require('electron'); +const Sentry = require('@sentry/electron'); + +Sentry.init({ + dsn: '__DSN__', + debug: true, + autoSessionTracking: false, + onFatalError: () => {}, + _experiments: { + metricsAggregator: true, + }, +}); + +Sentry.metrics.gauge('parallel_requests', 2, { tags: { type: 'a' } }); + +app.on('ready', () => { + const mainWindow = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + }, + }); + + mainWindow.loadFile(path.join(__dirname, 'index.html')); + + setTimeout(() => { + Sentry.flush(2000); + }, 2000); +}); From 6f30541d32bb446768d6af773f1ba88435c1c016 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 8 Jan 2024 19:39:21 +0100 Subject: [PATCH 196/239] meta: Changelog for 4.17.0 release (#813) --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed4bd981..d0968d07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ ## Unreleased +## 4.17.0 + +- feat: Update from [v7.90.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.90.0) to + [v7.92.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.92.0) of JavaScript SDKs (#810) +- feat: Re-work ANR detection to use worker thread (#810) +- feat: Add support for performance metrics (#811) +- test: Ensure correct scope for main process native crashes (#812) + ## 4.16.0 - feat: Update from [v7.84.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.84.0) to From ee5d52aeb8208252de29eb65959ca25ebfbe207f Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 8 Jan 2024 20:24:18 +0100 Subject: [PATCH 197/239] fix: Change ANR minimum Electron version to v22 (#814) --- src/main/integrations/anr.ts | 4 ++-- test/e2e/test-apps/anr/anr-main/recipe.yml | 2 +- .../native-electron/renderer/event-no-crashpad.json | 5 +---- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/integrations/anr.ts b/src/main/integrations/anr.ts index 090ebdd3..50fcda95 100644 --- a/src/main/integrations/anr.ts +++ b/src/main/integrations/anr.ts @@ -48,8 +48,8 @@ interface Options { */ export class Anr extends Integrations.Anr { public constructor(options: Partial<Options> = {}) { - if (ELECTRON_MAJOR_VERSION < 15) { - throw new Error('Main process ANR detection requires Electron >= v15'); + if (ELECTRON_MAJOR_VERSION < 22) { + throw new Error('Main process ANR detection requires Electron v22+'); } super({ diff --git a/test/e2e/test-apps/anr/anr-main/recipe.yml b/test/e2e/test-apps/anr/anr-main/recipe.yml index 707d3ad6..17b7ad18 100644 --- a/test/e2e/test-apps/anr/anr-main/recipe.yml +++ b/test/e2e/test-apps/anr/anr-main/recipe.yml @@ -1,4 +1,4 @@ description: ANR Main Event category: ANR command: yarn -condition: version.major >= 15 +condition: version.major >= 22 diff --git a/test/e2e/test-apps/native-electron/renderer/event-no-crashpad.json b/test/e2e/test-apps/native-electron/renderer/event-no-crashpad.json index ed7efbf5..67f67ed0 100644 --- a/test/e2e/test-apps/native-electron/renderer/event-no-crashpad.json +++ b/test/e2e/test-apps/native-electron/renderer/event-no-crashpad.json @@ -3,9 +3,6 @@ "method": "minidump", "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", "appId": "277345", - "data": { - "event_id": "{{id}}", - "timestamp": 0 - }, + "data": {}, "attachments": [ { "attachment_type": "event.minidump" } ] } From e962a03274ad5ec33ebb83703d15183bc83d9851 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Mon, 8 Jan 2024 19:47:43 +0000 Subject: [PATCH 198/239] release: 4.17.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 84af72a4..24fb8e41 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.16.0", + "version": "4.17.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From 35568761645afb64a0f02b7c913dc154022a2517 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 9 Jan 2024 17:44:14 +0100 Subject: [PATCH 199/239] test: New Electron versions (#809) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index b3fcf09e..ba77349c 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.3","27.2.0","28.1.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.4","27.2.1","28.1.2"] From 0ee6624f517dd58b73e7870e78adbe03fb4a2788 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Jan 2024 01:03:14 +0100 Subject: [PATCH 200/239] chore(deps-dev): bump vite from 3.2.7 to 3.2.8 in /examples/electron-vite (#819) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/electron-vite/package.json | 2 +- examples/electron-vite/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/electron-vite/package.json b/examples/electron-vite/package.json index 58951181..3766f8d3 100644 --- a/examples/electron-vite/package.json +++ b/examples/electron-vite/package.json @@ -17,6 +17,6 @@ "devDependencies": { "@vitejs/plugin-vue": "^3.1.2", "electron": "23.0.0", - "vite": "^3.2.7" + "vite": "^3.2.8" } } diff --git a/examples/electron-vite/yarn.lock b/examples/electron-vite/yarn.lock index 486488f1..cb88e102 100644 --- a/examples/electron-vite/yarn.lock +++ b/examples/electron-vite/yarn.lock @@ -1286,10 +1286,10 @@ unplugin@1.0.1: webpack-sources "^3.2.3" webpack-virtual-modules "^0.5.0" -vite@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.7.tgz#35a62826bd4d6b778ae5db8766d023bcd4e7bef3" - integrity sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g== +vite@^3.2.8: + version "3.2.8" + resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.8.tgz#0697e13addf99ed44b838b8462a3a922fdd9d37b" + integrity sha512-EtQU16PLIJpAZol2cTLttNP1mX6L0SyI0pgQB1VOoWeQnMSvtiwovV3D6NcjN8CZQWWyESD2v5NGnpz5RvgOZA== dependencies: esbuild "^0.15.9" postcss "^8.4.18" From 9c160be4225eefdd7f36a7f065995e1917d96534 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 24 Jan 2024 15:54:00 +0100 Subject: [PATCH 201/239] feat: Update JavaScript SDKs to v7.94.1 (#815) --- package.json | 14 +- src/common/merge.ts | 1 + src/index.ts | 4 + src/integrations.ts | 2 +- src/main/anr.ts | 7 +- src/main/electron-normalize.ts | 4 +- src/main/index.ts | 4 + src/main/integrations/additional-context.ts | 5 +- .../integrations/browser-window-session.ts | 3 + src/main/integrations/child-process.ts | 7 +- src/main/integrations/electron-breadcrumbs.ts | 3 + src/main/integrations/electron-minidump.ts | 9 +- src/main/integrations/main-context.ts | 3 + src/main/integrations/main-process-session.ts | 3 + src/main/integrations/net-breadcrumbs.ts | 39 ++-- src/main/integrations/onuncaughtexception.ts | 3 + src/main/integrations/preload-injection.ts | 5 +- src/main/integrations/renderer-profiling.ts | 5 +- src/main/integrations/screenshots.ts | 3 + .../integrations/sentry-minidump/index.ts | 3 + src/main/sessions.ts | 39 ++-- src/main/stack-parse.ts | 19 +- src/renderer/index.ts | 4 + src/renderer/integrations/event-to-main.ts | 4 +- .../integrations/metrics-aggregator.ts | 3 + src/renderer/integrations/scope-to-main.ts | 3 + src/renderer/sdk.ts | 2 +- .../javascript/main-error/event.json | 2 +- .../other/error-main-in-renderer/package.json | 8 - .../other/error-main-in-renderer/recipe.yml | 3 - .../error-main-in-renderer/src/index.html | 15 -- .../other/error-main-in-renderer/src/main.js | 27 --- .../other/main-process-module/event.json | 2 +- test/unit/net.test.ts | 24 +- yarn.lock | 208 +++++++++--------- 35 files changed, 247 insertions(+), 243 deletions(-) delete mode 100644 test/e2e/test-apps/other/error-main-in-renderer/package.json delete mode 100644 test/e2e/test-apps/other/error-main-in-renderer/recipe.yml delete mode 100644 test/e2e/test-apps/other/error-main-in-renderer/src/index.html delete mode 100644 test/e2e/test-apps/other/error-main-in-renderer/src/main.js diff --git a/package.json b/package.json index 24fb8e41..36274de2 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.92.0", - "@sentry/core": "7.92.0", - "@sentry/node": "7.92.0", - "@sentry/types": "7.92.0", - "@sentry/utils": "7.92.0", + "@sentry/browser": "7.94.1", + "@sentry/core": "7.94.1", + "@sentry/node": "7.94.1", + "@sentry/types": "7.94.1", + "@sentry/utils": "7.94.1", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.92.0", - "@sentry-internal/typescript": "7.92.0", + "@sentry-internal/eslint-config-sdk": "7.94.1", + "@sentry-internal/typescript": "7.94.1", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/common/merge.ts b/src/common/merge.ts index cdab8c92..483a5dda 100644 --- a/src/common/merge.ts +++ b/src/common/merge.ts @@ -6,6 +6,7 @@ function removePrivateProperties(event: Event): void { for (const span of event.spans || []) { // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access delete (span as any).spanRecorder; + // eslint-disable-next-line deprecation/deprecation delete span.transaction; } } diff --git a/src/index.ts b/src/index.ts index aaf4462a..aef5a7f1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -39,8 +39,10 @@ export { createTransport, // eslint-disable-next-line deprecation/deprecation extractTraceparentData, + // eslint-disable-next-line deprecation/deprecation getActiveTransaction, getHubFromCarrier, + // eslint-disable-next-line deprecation/deprecation getCurrentHub, getClient, getCurrentScope, @@ -49,9 +51,11 @@ export { Hub, // eslint-disable-next-line deprecation/deprecation lastEventId, + // eslint-disable-next-line deprecation/deprecation makeMain, runWithAsyncContext, Scope, + // eslint-disable-next-line deprecation/deprecation startTransaction, setContext, setExtra, diff --git a/src/integrations.ts b/src/integrations.ts index 0052a092..a34446fd 100644 --- a/src/integrations.ts +++ b/src/integrations.ts @@ -76,7 +76,7 @@ export function getIntegrations(): Integrations { */ class EmptyIntegration implements Integration { /** @inheritDoc */ - public static id: string = 'EmptyIntegration'; + public static id = 'EmptyIntegration'; /** @inheritDoc */ public readonly name: string; diff --git a/src/main/anr.ts b/src/main/anr.ts index 250b524c..b7f47f25 100644 --- a/src/main/anr.ts +++ b/src/main/anr.ts @@ -1,7 +1,7 @@ -import { captureEvent, getClient, getCurrentHub, getModuleFromFilename, NodeClient, StackFrame } from '@sentry/node'; +import { captureEvent, createGetModuleFromFilename, getClient, NodeClient, StackFrame } from '@sentry/node'; import { Event } from '@sentry/types'; import { callFrameToStackFrame, logger, stripSentryFramesAndReverse, watchdogTimer } from '@sentry/utils'; -import { WebContents } from 'electron'; +import { app, WebContents } from 'electron'; import { RendererStatus } from '../common'; import { Anr } from './integrations/anr'; @@ -9,7 +9,7 @@ import { ElectronMainOptions } from './sdk'; import { sessionAnr } from './sessions'; function getRendererName(contents: WebContents): string | undefined { - const options = getCurrentHub().getClient()?.getOptions() as ElectronMainOptions | undefined; + const options = getClient()?.getOptions() as ElectronMainOptions | undefined; return options?.getRendererName?.(contents); } @@ -68,6 +68,7 @@ function rendererDebugger(contents: WebContents, pausedStack: (frames: StackFram // Collect scriptId -> url map so we can look up the filenames later const scripts = new Map<string, string>(); + const getModuleFromFilename = createGetModuleFromFilename(app.getAppPath()); contents.debugger.on('message', (_, method, params) => { if (method === 'Debugger.scriptParsed') { diff --git a/src/main/electron-normalize.ts b/src/main/electron-normalize.ts index 96866665..7e12dc89 100644 --- a/src/main/electron-normalize.ts +++ b/src/main/electron-normalize.ts @@ -29,9 +29,9 @@ export const whenAppReady: Promise<void> = (() => { resolve(); }); }); - } else { - return Promise.resolve(); } + + return Promise.resolve(); })(); /** diff --git a/src/main/index.ts b/src/main/index.ts index c9ee1017..32d637d6 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -40,17 +40,21 @@ export { createTransport, // eslint-disable-next-line deprecation/deprecation extractTraceparentData, + // eslint-disable-next-line deprecation/deprecation getActiveTransaction, getHubFromCarrier, + // eslint-disable-next-line deprecation/deprecation getCurrentHub, getClient, getCurrentScope, getGlobalScope, getIsolationScope, Hub, + // eslint-disable-next-line deprecation/deprecation makeMain, runWithAsyncContext, Scope, + // eslint-disable-next-line deprecation/deprecation startTransaction, setContext, setExtra, diff --git a/src/main/integrations/additional-context.ts b/src/main/integrations/additional-context.ts index 5c606838..1f65f6e2 100644 --- a/src/main/integrations/additional-context.ts +++ b/src/main/integrations/additional-context.ts @@ -40,6 +40,9 @@ const additionalContext: IntegrationFn = (userOptions: Partial<AdditionalContext return { name: INTEGRATION_NAME, + setupOnce() { + // noop + }, setup() { // Some metrics are only available after app ready so we lazily load them whenAppReady.then( @@ -76,7 +79,7 @@ const additionalContext: IntegrationFn = (userOptions: Partial<AdditionalContext if (cpu) { const cpuInfo: CpuInfo[] | undefined = cpus(); - if (cpuInfo && cpuInfo.length) { + if (cpuInfo?.length) { const firstCpu = cpuInfo[0]; device.processor_count = cpuInfo.length; diff --git a/src/main/integrations/browser-window-session.ts b/src/main/integrations/browser-window-session.ts index c95b1097..75778d4e 100644 --- a/src/main/integrations/browser-window-session.ts +++ b/src/main/integrations/browser-window-session.ts @@ -77,6 +77,9 @@ const browserWindowSession: IntegrationFn = (options: Options = {}) => { return { name: INTEGRATION_NAME, + setupOnce() { + // noop + }, setup() { app.on('browser-window-created', (_event, window) => { window.on('focus', windowStateChanged); diff --git a/src/main/integrations/child-process.ts b/src/main/integrations/child-process.ts index d160fa14..1545759c 100644 --- a/src/main/integrations/child-process.ts +++ b/src/main/integrations/child-process.ts @@ -42,12 +42,15 @@ const childProcess: IntegrationFn = (userOptions: Partial<OrBool<ChildProcessOpt const { breadcrumbs, events } = userOptions; const options: ChildProcessOptions = { - breadcrumbs: Array.isArray(breadcrumbs) ? breadcrumbs : breadcrumbs == false ? [] : DEFAULT_OPTIONS.breadcrumbs, - events: Array.isArray(events) ? events : events == false ? [] : DEFAULT_OPTIONS.events, + breadcrumbs: Array.isArray(breadcrumbs) ? breadcrumbs : breadcrumbs === false ? [] : DEFAULT_OPTIONS.breadcrumbs, + events: Array.isArray(events) ? events : events === false ? [] : DEFAULT_OPTIONS.events, }; return { name: INTEGRATION_NAME, + setupOnce() { + // noop + }, setup(client: NodeClient) { const { breadcrumbs, events } = options; const allReasons = Array.from(new Set([...breadcrumbs, ...events])); diff --git a/src/main/integrations/electron-breadcrumbs.ts b/src/main/integrations/electron-breadcrumbs.ts index 815740af..f5ec9361 100644 --- a/src/main/integrations/electron-breadcrumbs.ts +++ b/src/main/integrations/electron-breadcrumbs.ts @@ -145,6 +145,9 @@ const electronBreadcrumbs: IntegrationFn = (userOptions: Partial<ElectronBreadcr return { name: INTEGRATION_NAME, + setupOnce() { + // noop + }, setup(client: NodeClient) { const clientOptions = client.getOptions() as ElectronMainOptions | undefined; diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts index 434d41d9..e0a5f834 100644 --- a/src/main/integrations/electron-minidump.ts +++ b/src/main/integrations/electron-minidump.ts @@ -15,8 +15,8 @@ import { import { checkPreviousSession, sessionCrashed, unreportedDuringLastSession } from '../sessions'; /** Is object defined and has keys */ -function hasKeys(obj: any): boolean { - return obj != undefined && Object.keys(obj).length > 0; +function hasKeys(obj: object | undefined): boolean { + return obj !== undefined && Object.keys(obj).length > 0; } /** Gets a Scope object with user, tags and extra */ @@ -97,7 +97,7 @@ const INTEGRATION_NAME = 'ElectronMinidump'; const electronMinidump: IntegrationFn = () => { /** Counter used to ensure no race condition when updating extra params */ - let updateEpoch: number = 0; + let updateEpoch = 0; let customRelease: string | undefined; async function getNativeUploaderEvent(scope: ScopeData): Promise<Event> { @@ -170,6 +170,9 @@ const electronMinidump: IntegrationFn = () => { return { name: INTEGRATION_NAME, + setupOnce() { + // noop + }, setup(client: NodeClient) { // Mac AppStore builds cannot run the crash reporter due to the sandboxing // requirements. In this case, we prevent enabling native crashes entirely. diff --git a/src/main/integrations/main-context.ts b/src/main/integrations/main-context.ts index 5b6ab478..f4c44c22 100644 --- a/src/main/integrations/main-context.ts +++ b/src/main/integrations/main-context.ts @@ -10,6 +10,9 @@ const INTEGRATION_NAME = 'MainContext'; const mainContext: IntegrationFn = () => { return { name: INTEGRATION_NAME, + setupOnce() { + // noop + }, async processEvent(event, _, client) { const clientOptions = client.getOptions(); const normalized = normalizeEvent(event, app.getAppPath()); diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts index dc4fdab9..ca038284 100644 --- a/src/main/integrations/main-process-session.ts +++ b/src/main/integrations/main-process-session.ts @@ -17,6 +17,9 @@ const INTEGRATION_NAME = 'MainProcessSession'; const mainProcessSession: IntegrationFn = (options: Options = {}) => { return { name: INTEGRATION_NAME, + setupOnce() { + // noop + }, setup() { startSession(!!options.sendOnCreate); endSessionOnExit(); diff --git a/src/main/integrations/net-breadcrumbs.ts b/src/main/integrations/net-breadcrumbs.ts index 3ef3005b..2c257435 100644 --- a/src/main/integrations/net-breadcrumbs.ts +++ b/src/main/integrations/net-breadcrumbs.ts @@ -1,6 +1,11 @@ -/* eslint-disable deprecation/deprecation */ -import { convertIntegrationFnToClass, getDynamicSamplingContextFromClient } from '@sentry/core'; -import { getCurrentHub } from '@sentry/node'; +import { + addBreadcrumb, + /* eslint-disable deprecation/deprecation */ + convertIntegrationFnToClass, + getClient, + getCurrentScope, + getDynamicSamplingContextFromClient, +} from '@sentry/core'; import { DynamicSamplingContext, IntegrationFn, Span, TracePropagationTargets } from '@sentry/types'; import { dynamicSamplingContextToSentryBaggageHeader, @@ -174,11 +179,8 @@ function createWrappedRequestFactory( return function wrappedRequestMethodFactory(originalRequestMethod: RequestMethod): RequestMethod { return function requestMethod(this: typeof electronNet, reqOptions: RequestOptions): ClientRequest { - // eslint-disable-next-line @typescript-eslint/no-this-alias - const netModule = this; - const { url, method } = parseOptions(reqOptions); - const request = originalRequestMethod.apply(netModule, [reqOptions]) as ClientRequest; + const request = originalRequestMethod.apply(this, [reqOptions]) as ClientRequest; if (url.match(/sentry_key/) || request.getHeader('x-sentry-auth')) { return request; @@ -186,8 +188,7 @@ function createWrappedRequestFactory( let span: Span | undefined; - const hub = getCurrentHub(); - const scope = hub.getScope(); + const scope = getCurrentScope(); if (scope && shouldCreateSpan(method, url)) { const parentSpan = scope.getSpan(); @@ -208,7 +209,7 @@ function createWrappedRequestFactory( const { traceId, sampled, dsc } = scope.getPropagationContext(); const sentryTraceHeader = generateSentryTraceHeader(traceId, undefined, sampled); - const client = hub.getClient(); + const client = getClient(); const dynamicSamplingContext = dsc || (client ? getDynamicSamplingContextFromClient(traceId, client, scope) : undefined); @@ -219,10 +220,8 @@ function createWrappedRequestFactory( return request .once('response', function (this: ClientRequest, res: IncomingMessage): void { - // eslint-disable-next-line @typescript-eslint/no-this-alias - const req = this; if (options.breadcrumbs !== false) { - addRequestBreadcrumb('response', method, url, req, res); + addRequestBreadcrumb('response', method, url, this, res); } if (span) { if (res.statusCode) { @@ -232,11 +231,8 @@ function createWrappedRequestFactory( } }) .once('error', function (this: ClientRequest, _error: Error): void { - // eslint-disable-next-line @typescript-eslint/no-this-alias - const req = this; - if (options.breadcrumbs !== false) { - addRequestBreadcrumb('error', method, url, req, undefined); + addRequestBreadcrumb('error', method, url, this, undefined); } if (span) { span.setHttpStatus(500); @@ -257,14 +253,14 @@ function addRequestBreadcrumb( req: ClientRequest, res?: IncomingMessage, ): void { - getCurrentHub().addBreadcrumb( + addBreadcrumb( { type: 'http', category: 'electron.net', data: { url, method: method, - status_code: res && res.statusCode, + status_code: res?.statusCode, }, }, { @@ -280,8 +276,11 @@ const INTEGRATION_NAME = 'Net'; const net: IntegrationFn = (options: NetOptions = {}) => { return { name: INTEGRATION_NAME, + setupOnce() { + // noop + }, setup() { - const clientOptions = getCurrentHub().getClient()?.getOptions(); + const clientOptions = getClient()?.getOptions(); // No need to instrument if we don't want to track anything if (options.breadcrumbs === false && options.tracing === false) { diff --git a/src/main/integrations/onuncaughtexception.ts b/src/main/integrations/onuncaughtexception.ts index 16ce8ef7..8b009dd7 100644 --- a/src/main/integrations/onuncaughtexception.ts +++ b/src/main/integrations/onuncaughtexception.ts @@ -8,6 +8,9 @@ const INTEGRATION_NAME = 'OnUncaughtException'; const onUncaughtException: IntegrationFn = () => { return { name: INTEGRATION_NAME, + setupOnce() { + // noop + }, setup(client: NodeClient) { const options = client.getOptions(); diff --git a/src/main/integrations/preload-injection.ts b/src/main/integrations/preload-injection.ts index d0ba6a1e..bd49f6c1 100644 --- a/src/main/integrations/preload-injection.ts +++ b/src/main/integrations/preload-injection.ts @@ -36,12 +36,15 @@ const INTEGRATION_NAME = 'PreloadInjection'; const preloadInjection: IntegrationFn = () => { return { name: INTEGRATION_NAME, + setupOnce() { + // noop + }, setup(client) { const options = client.getOptions() as ElectronMainOptionsInternal; // If classic IPC mode is disabled, we shouldn't attempt to inject preload scripts // eslint-disable-next-line no-bitwise - if ((options.ipcMode & IPCMode.Classic) == 0) { + if ((options.ipcMode & IPCMode.Classic) === 0) { return; } diff --git a/src/main/integrations/renderer-profiling.ts b/src/main/integrations/renderer-profiling.ts index abf06bfa..a7825274 100644 --- a/src/main/integrations/renderer-profiling.ts +++ b/src/main/integrations/renderer-profiling.ts @@ -59,6 +59,9 @@ const INTEGRATION_NAME = 'RendererProfiling'; const rendererProfiling: IntegrationFn = () => { return { name: INTEGRATION_NAME, + setupOnce() { + // noop + }, setup(client) { const options = client.getOptions() as ElectronMainOptionsInternal; if (!options.enableRendererProfiling) { @@ -92,7 +95,7 @@ const rendererProfiling: IntegrationFn = () => { for (let j = 1; j < item.length; j++) { const event = item[j] as Event; - if (event && event.contexts && event.contexts.profile && event.contexts.profile.profile_id) { + if (event?.contexts?.profile?.profile_id) { profile_id = event.contexts.profile.profile_id as string; // This can be removed as it's no longer needed delete event.contexts.profile; diff --git a/src/main/integrations/screenshots.ts b/src/main/integrations/screenshots.ts index c44293df..1011405f 100644 --- a/src/main/integrations/screenshots.ts +++ b/src/main/integrations/screenshots.ts @@ -11,6 +11,9 @@ const INTEGRATION_NAME = 'Screenshots'; const screenshots: IntegrationFn = () => { return { name: INTEGRATION_NAME, + setupOnce() { + // noop + }, async processEvent(event, hint, client) { const attachScreenshot = !!(client.getOptions() as ElectronMainOptions).attachScreenshot; diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts index 6952b911..6544de67 100644 --- a/src/main/integrations/sentry-minidump/index.ts +++ b/src/main/integrations/sentry-minidump/index.ts @@ -178,6 +178,9 @@ const sentryMinidump: IntegrationFn = () => { return { name: INTEGRATION_NAME, + setupOnce() { + // noop + }, setup(client: NodeClient): void { // Mac AppStore builds cannot run the crash reporter due to the sandboxing // requirements. In this case, we prevent enabling native crashes entirely. diff --git a/src/main/sessions.ts b/src/main/sessions.ts index d0632289..7c30074c 100644 --- a/src/main/sessions.ts +++ b/src/main/sessions.ts @@ -1,4 +1,12 @@ -import { getCurrentHub, makeSession, updateSession } from '@sentry/core'; +import { + captureSession, + endSession as endSessionCore, + getClient, + getCurrentScope, + makeSession, + startSession as startSessionCore, + updateSession, +} from '@sentry/core'; import { flush, NodeClient } from '@sentry/node'; import { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types'; import { logger } from '@sentry/utils'; @@ -27,11 +35,10 @@ let persistTimer: NodeJS.Timer | undefined; /** Starts a session */ export function startSession(sendOnCreate: boolean): void { - const hub = getCurrentHub(); - const session = hub.startSession(); + const session = startSessionCore(); if (sendOnCreate) { - hub.captureSession(); + captureSession(); } getSessionStore() @@ -42,7 +49,7 @@ export function startSession(sendOnCreate: boolean): void { // Every PERSIST_INTERVAL, write the session to disk persistTimer = setInterval(async () => { - const currentSession = hub.getScope()?.getSession(); + const currentSession = getCurrentScope().getSession(); // Only bother saving if it hasn't already ended if (currentSession && currentSession.status === 'ok') { await getSessionStore().set(currentSession); @@ -57,13 +64,12 @@ export async function endSession(): Promise<void> { clearInterval(persistTimer); } - const hub = getCurrentHub(); - const session = hub.getScope()?.getSession(); + const session = getCurrentScope().getSession(); if (session) { if (session.status === 'ok') { logger.log('Ending session'); - hub.endSession(); + endSessionCore(); } else { logger.log('Session was already ended'); } @@ -84,7 +90,7 @@ export async function unreportedDuringLastSession(crashDate: Date | undefined): const previousSessionModified = await getSessionStore().getModifiedDate(); // There is no previous session - if (previousSessionModified == undefined) { + if (previousSessionModified === undefined) { return false; } @@ -103,7 +109,7 @@ export async function unreportedDuringLastSession(crashDate: Date | undefined): /** Checks if the previous session needs sending as crashed or abnormal */ export async function checkPreviousSession(crashed: boolean): Promise<void> { - const client = getCurrentHub().getClient<NodeClient>(); + const client = getClient<NodeClient>(); const previous = await previousSession; @@ -141,8 +147,7 @@ export function sessionCrashed(): void { } logger.log('Session Crashed'); - const hub = getCurrentHub(); - const session = hub.getScope()?.getSession(); + const session = getCurrentScope().getSession(); if (!session) { logger.log('No session to update'); @@ -151,12 +156,13 @@ export function sessionCrashed(): void { if (session.status === 'ok') { logger.log('Setting session as crashed'); - updateSession(session, { status: 'crashed', errors: (session.errors += 1) }); + const errors = session.errors + 1; + updateSession(session, { status: 'crashed', errors }); } else { logger.log('Session already ended'); } - hub.captureSession(); + captureSession(); } /** Sets the current session as ANR */ @@ -166,8 +172,7 @@ export function sessionAnr(): void { clearInterval(persistTimer); } - const hub = getCurrentHub(); - const session = hub.getScope()?.getSession(); + const session = getCurrentScope().getSession(); if (!session) { return; @@ -176,7 +181,7 @@ export function sessionAnr(): void { if (session.status === 'ok') { logger.log('Setting session as abnormal ANR'); updateSession(session, { status: 'abnormal', abnormal_mechanism: 'anr_foreground' }); - hub.captureSession(); + captureSession(); } } diff --git a/src/main/stack-parse.ts b/src/main/stack-parse.ts index 0e36632c..c60f17dc 100644 --- a/src/main/stack-parse.ts +++ b/src/main/stack-parse.ts @@ -1,18 +1,9 @@ -import { getModuleFromFilename as getModuleFromFilenameNode } from '@sentry/node'; +import { createGetModuleFromFilename } from '@sentry/node'; import { StackParser } from '@sentry/types'; -import { createStackParser, nodeStackLineParser, normalizeUrlToBase } from '@sentry/utils'; +import { createStackParser, nodeStackLineParser } from '@sentry/utils'; import { app } from 'electron'; -/** Parses the module name form a filename */ -function getModuleFromFilename(filename: string | undefined): string | undefined { - if (!filename) { - return; - } - - const normalizedFilename = normalizeUrlToBase(filename, app.getAppPath()); - - return getModuleFromFilenameNode(normalizedFilename); -} - // node.js stack parser but filename normalized before parsing the module -export const defaultStackParser: StackParser = createStackParser(nodeStackLineParser(getModuleFromFilename)); +export const defaultStackParser: StackParser = createStackParser( + nodeStackLineParser(createGetModuleFromFilename(app.getAppPath())), +); diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 1c9a7335..7b7000e1 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -37,17 +37,21 @@ export { createTransport, // eslint-disable-next-line deprecation/deprecation extractTraceparentData, + // eslint-disable-next-line deprecation/deprecation getActiveTransaction, getHubFromCarrier, + // eslint-disable-next-line deprecation/deprecation getCurrentHub, getClient, getCurrentScope, getGlobalScope, getIsolationScope, Hub, + // eslint-disable-next-line deprecation/deprecation makeMain, runWithAsyncContext, Scope, + // eslint-disable-next-line deprecation/deprecation startTransaction, setContext, setExtra, diff --git a/src/renderer/integrations/event-to-main.ts b/src/renderer/integrations/event-to-main.ts index 0d8949b8..075640f6 100644 --- a/src/renderer/integrations/event-to-main.ts +++ b/src/renderer/integrations/event-to-main.ts @@ -10,7 +10,7 @@ import { getIPC } from '../ipc'; */ export class EventToMain implements Integration { /** @inheritDoc */ - public static id: string = 'EventToMain'; + public static id = 'EventToMain'; /** @inheritDoc */ public readonly name: string; @@ -29,7 +29,7 @@ export class EventToMain implements Integration { event.breadcrumbs = event.breadcrumbs || []; // Remove the environment as it defaults to 'production' and overwrites the main process environment - delete event.environment; + event.environment = undefined; ipc.sendEvent(JSON.stringify(normalize(event, 20, 2_000))); // Events are handled and sent from the main process so we return null here so nothing is sent from the renderer diff --git a/src/renderer/integrations/metrics-aggregator.ts b/src/renderer/integrations/metrics-aggregator.ts index a52faf81..5dea307e 100644 --- a/src/renderer/integrations/metrics-aggregator.ts +++ b/src/renderer/integrations/metrics-aggregator.ts @@ -9,6 +9,9 @@ const INTEGRATION_NAME = 'MetricsAggregator'; const metricsAggregatorIntegration: IntegrationFn = () => { return { name: INTEGRATION_NAME, + setupOnce() { + // noop + }, setup(client: BrowserClient) { client.metricsAggregator = new ElectronRendererMetricsAggregator(); }, diff --git a/src/renderer/integrations/scope-to-main.ts b/src/renderer/integrations/scope-to-main.ts index 66ab2243..8f54d90f 100644 --- a/src/renderer/integrations/scope-to-main.ts +++ b/src/renderer/integrations/scope-to-main.ts @@ -9,6 +9,9 @@ const INTEGRATION_NAME = 'ScopeToMain'; const scopeToMain: IntegrationFn = () => { return { name: INTEGRATION_NAME, + setupOnce() { + // noop + }, setup() { const scope = getCurrentScope(); if (scope) { diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index e29a45ef..cf0d5696 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -41,7 +41,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_92_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_94_1: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/test/e2e/test-apps/javascript/main-error/event.json b/test/e2e/test-apps/javascript/main-error/event.json index fa14bfaf..16309c04 100644 --- a/test/e2e/test-apps/javascript/main-error/event.json +++ b/test/e2e/test-apps/javascript/main-error/event.json @@ -69,7 +69,7 @@ "colno": 0, "filename": "app:///src/main.js", "function": "{{function}}", - "module": "main", + "module": "src:main", "in_app": true, "lineno": 0 } diff --git a/test/e2e/test-apps/other/error-main-in-renderer/package.json b/test/e2e/test-apps/other/error-main-in-renderer/package.json deleted file mode 100644 index aa40ff54..00000000 --- a/test/e2e/test-apps/other/error-main-in-renderer/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "error-main-in-renderer", - "version": "1.0.0", - "main": "src/main.js", - "dependencies": { - "@sentry/electron": "3.0.0" - } -} diff --git a/test/e2e/test-apps/other/error-main-in-renderer/recipe.yml b/test/e2e/test-apps/other/error-main-in-renderer/recipe.yml deleted file mode 100644 index 1ec86923..00000000 --- a/test/e2e/test-apps/other/error-main-in-renderer/recipe.yml +++ /dev/null @@ -1,3 +0,0 @@ -description: Error logged when main code loaded in renderer process -command: yarn -expectedError: This code is intended to run in the Electron main diff --git a/test/e2e/test-apps/other/error-main-in-renderer/src/index.html b/test/e2e/test-apps/other/error-main-in-renderer/src/index.html deleted file mode 100644 index 3bcdb6bf..00000000 --- a/test/e2e/test-apps/other/error-main-in-renderer/src/index.html +++ /dev/null @@ -1,15 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="UTF-8" /> - </head> - <body> - <script> - const { init } = require('@sentry/electron/main'); - - init({ - debug: true, - }); - </script> - </body> -</html> diff --git a/test/e2e/test-apps/other/error-main-in-renderer/src/main.js b/test/e2e/test-apps/other/error-main-in-renderer/src/main.js deleted file mode 100644 index 87359380..00000000 --- a/test/e2e/test-apps/other/error-main-in-renderer/src/main.js +++ /dev/null @@ -1,27 +0,0 @@ -const path = require('path'); - -const { app, BrowserWindow } = require('electron'); -const { init } = require('@sentry/electron'); - -init({ - dsn: '__DSN__', - debug: true, - autoSessionTracking: false, - onFatalError: () => {}, -}); - -app.on('ready', () => { - const mainWindow = new BrowserWindow({ - show: false, - webPreferences: { - nodeIntegration: true, - contextIsolation: false, - }, - }); - - mainWindow.loadFile(path.join(__dirname, 'index.html')); -}); - -setTimeout(() => { - process.exit(); -}, 2000); diff --git a/test/e2e/test-apps/other/main-process-module/event.json b/test/e2e/test-apps/other/main-process-module/event.json index 9557d8f7..998b6b8f 100644 --- a/test/e2e/test-apps/other/main-process-module/event.json +++ b/test/e2e/test-apps/other/main-process-module/event.json @@ -80,7 +80,7 @@ "function": "{{function}}", "in_app": true, "lineno": 0, - "module": "main" + "module": "dist:main" } ] }, diff --git a/test/unit/net.test.ts b/test/unit/net.test.ts index 5e538911..7be521dc 100644 --- a/test/unit/net.test.ts +++ b/test/unit/net.test.ts @@ -1,7 +1,8 @@ import { expect, should, use } from 'chai'; import * as http from 'http'; import chaiAsPromised = require('chai-as-promised'); -import { getActiveTransaction, setAsyncContextStrategy, Span } from '@sentry/core'; +// eslint-disable-next-line deprecation/deprecation +import { getActiveTransaction, setAsyncContextStrategy, Span, spanToJSON } from '@sentry/core'; import { createTransport, Hub, NodeClient } from '@sentry/node'; import { ClientOptions, Transaction, TransactionContext } from '@sentry/types'; import { resolvedSyncPromise } from '@sentry/utils'; @@ -66,8 +67,10 @@ function createHubOnScope(customOptions: Partial<ClientOptions> = {}): Hub { ...customOptions, }); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(new NodeClient(options)); + // eslint-disable-next-line deprecation/deprecation hub.getScope().setUser({ id: 'uid123', segment: 'segmentA', @@ -82,18 +85,21 @@ function createTransactionOnScope( ): [Transaction, Hub] { const hub = createHubOnScope(customOptions); + // eslint-disable-next-line deprecation/deprecation const transaction = hub.startTransaction({ name: 'dogpark', traceId: '12312012123120121231201212312012', ...customContext, }); + // eslint-disable-next-line deprecation/deprecation hub.getScope().setSpan(transaction); return [transaction, hub]; } function getSpans(transaction: Transaction): Span[] { + // eslint-disable-next-line deprecation/deprecation return (transaction as unknown as Span).spanRecorder?.spans as Span[]; } @@ -120,7 +126,8 @@ describe.skip('net integration', () => { expect(spans.length).to.equal(2); // our span is at index 1 because the transaction itself is at index 0 - expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`); + expect(spanToJSON(spans[1]).description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`); + // eslint-disable-next-line deprecation/deprecation expect(spans[1].op).to.equal('http.client'); expect(headers['sentry-trace']).not.to.be.empty; @@ -163,7 +170,8 @@ describe.skip('net integration', () => { expect(spans.length).to.equal(2); // our span is at index 1 because the transaction itself is at index 0 - expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`); + expect(spanToJSON(spans[1]).description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`); + // eslint-disable-next-line deprecation/deprecation expect(spans[1].op).to.equal('http.client'); expect(headers['sentry-trace']).not.to.be.empty; @@ -179,7 +187,8 @@ describe.skip('net integration', () => { expect(spans.length).to.equal(2); // our span is at index 1 because the transaction itself is at index 0 - expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`); + expect(spanToJSON(spans[1]).description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`); + // eslint-disable-next-line deprecation/deprecation expect(spans[1].op).to.equal('http.client'); expect(headers['sentry-trace']).to.be.undefined; @@ -198,7 +207,8 @@ describe.skip('net integration', () => { expect(spans.length).to.equal(2); // our span is at index 1 because the transaction itself is at index 0 - expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`); + expect(spanToJSON(spans[1]).description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`); + // eslint-disable-next-line deprecation/deprecation expect(spans[1].op).to.equal('http.client'); expect(headers['sentry-trace']).not.to.be.empty; @@ -215,7 +225,8 @@ describe.skip('net integration', () => { expect(spans.length).to.equal(2); // our span is at index 1 because the transaction itself is at index 0 - expect(spans[1].description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`); + expect(spanToJSON(spans[1]).description).to.equal(`GET http://localhost:${TEST_SERVER_PORT}/`); + // eslint-disable-next-line deprecation/deprecation expect(spans[1].op).to.equal('http.client'); expect(headers['sentry-trace']).to.be.undefined; @@ -229,6 +240,7 @@ describe.skip('net integration', () => { integrations: [new Net()], }); const headers = await makeRequest(); + // eslint-disable-next-line deprecation/deprecation const transaction = getActiveTransaction(); expect(transaction).to.be.undefined; diff --git a/yarn.lock b/yarn.lock index 50ea3561..51b68bd3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.92.0": - version "7.92.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.92.0.tgz#a4532463a22a59dfb115cd2392f02e27c95b7f66" - integrity sha512-1TtJkV4Wmqf/CbXUL8tkS/yxDAVbvUnvCQZguD6s1LZTWMJ+4coEkeSkgn1qRSjBz0YIREr1DXSmPbXU2TugiQ== +"@sentry-internal/eslint-config-sdk@7.94.1": + version "7.94.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.94.1.tgz#87af85dff9a2330101144e26db1e0d0e94a79fdf" + integrity sha512-SlYJEFPHeNPfl3EwE9omqIVZ8kQ+khlAMSka0YpM1dKXmzMRQN60iuzDoqf243SJt3HXyORVbghdAAYC5Svqtg== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.92.0" - "@sentry-internal/typescript" "7.92.0" + "@sentry-internal/eslint-plugin-sdk" "7.94.1" + "@sentry-internal/typescript" "7.94.1" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,88 +180,97 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.92.0": - version "7.92.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.92.0.tgz#9c6dae628adecfd7047afa504cc8809276ad2bad" - integrity sha512-hccEHqZwO9kEsDOlPso7b7Tz+sSBiyyJ1KW+EOx65H3AAgGGHPkoU074fA0S+yyuRVEk0wCKR1xQ7jgfWxJSQw== +"@sentry-internal/eslint-plugin-sdk@7.94.1": + version "7.94.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.94.1.tgz#f2f0ff83d2caf4e2a496a1a5ed58d9c55244eff4" + integrity sha512-nn8x1y47vAhINglbwBNZWmVflOHgkFcnOfKeEWSGTZ35QPuO6cD+S6Kc62S5o3wA1hgQHOII+b1Hl7w9NtrtMg== dependencies: requireindex "~1.1.0" -"@sentry-internal/feedback@7.92.0": - version "7.92.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.92.0.tgz#1293b0a332f81cdf3970abd36894b9d25670c4e6" - integrity sha512-/jEALRtVqboxB9kcK2tag8QCO6XANTlGBb9RV3oeGXJe0DDNJXRq6wVZbfgztXJRrfgx4XVDcNt1pRVoGGG++g== - dependencies: - "@sentry/core" "7.92.0" - "@sentry/types" "7.92.0" - "@sentry/utils" "7.92.0" - -"@sentry-internal/tracing@7.92.0": - version "7.92.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.92.0.tgz#505d94a93b5df965ec6bfb35da43389988259d4d" - integrity sha512-ur55vPcUUUWFUX4eVLNP71ohswK7ZZpleNZw9Y1GfLqyI+0ILQUwjtzqItJrdClvVsdRZJMRmDV40Hp9Lbb9mA== - dependencies: - "@sentry/core" "7.92.0" - "@sentry/types" "7.92.0" - "@sentry/utils" "7.92.0" - -"@sentry-internal/typescript@7.92.0": - version "7.92.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.92.0.tgz#25196d80b127a8a22f32a4b95f691f512d0ad117" - integrity sha512-fCMKhG+J3VV+afyyWu6rsuhMppugKj8ubk8b2Ss7BggzPF5GEA6njTUBJYpFNkvy/RGLy6gDy3Qpqb/cH3NT2g== - -"@sentry/browser@7.92.0": - version "7.92.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.92.0.tgz#f4c65f2af6f38c2dd5e32153e9b358c0c80275f2" - integrity sha512-loMr02/zQ38u8aQhYLtIBg0i5n3ps2e3GUXrt3CdsJQdkRYfa62gcrE7SzvoEpMVHTk7VOI4fWGht8cWw/1k3A== - dependencies: - "@sentry-internal/feedback" "7.92.0" - "@sentry-internal/tracing" "7.92.0" - "@sentry/core" "7.92.0" - "@sentry/replay" "7.92.0" - "@sentry/types" "7.92.0" - "@sentry/utils" "7.92.0" - -"@sentry/core@7.92.0": - version "7.92.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.92.0.tgz#4e74c1959348b698226c49ead7a24e165502b55c" - integrity sha512-1Tly7YB2I1byI5xb0Cwrxs56Rhww+6mQ7m9P7rTmdC3/ijOzbEoohtYIUPwcooCEarpbEJe/tAayRx6BrH2UbQ== - dependencies: - "@sentry/types" "7.92.0" - "@sentry/utils" "7.92.0" - -"@sentry/node@7.92.0": - version "7.92.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.92.0.tgz#880d3be5cb8ef805a6856c619db3951b1678f726" - integrity sha512-LZeQL1r6kikEoOzA9K61OmMl32/lK/6PzmFNDH6z7UYwQopCZgVA6IP+CZuln8K2ys5c9hCyF7ICQMysXfpNJA== - dependencies: - "@sentry-internal/tracing" "7.92.0" - "@sentry/core" "7.92.0" - "@sentry/types" "7.92.0" - "@sentry/utils" "7.92.0" - https-proxy-agent "^5.0.0" - -"@sentry/replay@7.92.0": - version "7.92.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.92.0.tgz#d94e9f6b72e540e73378a74ca1190068edd447f2" - integrity sha512-G1t9Uvc9cR8VpNkElwvHIMGzykjIKikb10n0tfVd3e+rBPMCCjCPWOduwG6jZYxcvCjTpqmJh6NSLXxL/Mt4JA== - dependencies: - "@sentry-internal/tracing" "7.92.0" - "@sentry/core" "7.92.0" - "@sentry/types" "7.92.0" - "@sentry/utils" "7.92.0" - -"@sentry/types@7.92.0": - version "7.92.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.92.0.tgz#4c308fdb316c0272f55f0816230fe87e7b9b551a" - integrity sha512-APmSOuZuoRGpbPpPeYIbMSplPjiWNLZRQa73QiXuTflW4Tu/ItDlU8hOa2+A6JKVkJCuD2EN6yUrxDGSMyNXeg== - -"@sentry/utils@7.92.0": - version "7.92.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.92.0.tgz#20ed29742594eab007f9ff72e008b5262456a319" - integrity sha512-3nEfrQ1z28b/2zgFGANPh5yMVtgwXmrasZxTvKbrAj+KWJpjrJHrIR84r9W277J44NMeZ5RhRW2uoDmuBslPnA== - dependencies: - "@sentry/types" "7.92.0" +"@sentry-internal/feedback@7.94.1": + version "7.94.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.94.1.tgz#332212255568b1b18c08814bb7f8d37187e1e6c0" + integrity sha512-NlJn/TEX1MOPfY4bb6FU0Equ6YuaewZ+lIAqYt3HuEoYI7nYApeRGaPuVLkkezN0cmI7oU/+pJ7v83PtYXCFZw== + dependencies: + "@sentry/core" "7.94.1" + "@sentry/types" "7.94.1" + "@sentry/utils" "7.94.1" + +"@sentry-internal/replay-canvas@7.94.1": + version "7.94.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.94.1.tgz#fdf9743c3051d468ae7c42ecf534beb803204154" + integrity sha512-kCFxdIJTbo2z8wnAQ3IqNVI8y2lSOtaSSZeBgeqiertro8Pe/DS8AXUnhXnAQkluM2i2koA+AgUo6/4bUeZXuQ== + dependencies: + "@sentry/core" "7.94.1" + "@sentry/replay" "7.94.1" + "@sentry/types" "7.94.1" + +"@sentry-internal/tracing@7.94.1": + version "7.94.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.94.1.tgz#27909da03c1541a83002cab655814ec208242b9e" + integrity sha512-znxCdrz7tPXm9Bwoe46PW72Zr0Iv7bXT6+b2LNg5fxWiCQVBbQFrMuVvtXEmHxeRRJVEgTh/4TdulB7wrtQIUQ== + dependencies: + "@sentry/core" "7.94.1" + "@sentry/types" "7.94.1" + "@sentry/utils" "7.94.1" + +"@sentry-internal/typescript@7.94.1": + version "7.94.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.94.1.tgz#1dd9100c6f253a06143d1b369898e993432a1619" + integrity sha512-hgPK7YOmVhJXCfkDwHt3KPDS54jA/DLV4zEo9xuhDtb6YpQIfMY0F7ufsxI2i3JFWiyNmeuWaHzgOt2Jh9jRtQ== + +"@sentry/browser@7.94.1": + version "7.94.1" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.94.1.tgz#d9a4a1c00138bf799e8559fd1df3eff2fa12155b" + integrity sha512-IUR8B/AEPEzLijZ4Uo5qJsgmIBnCudBqAWd3zAiuk3TWYYOQUEvleddFxffN3n6pFhGx3ArksB+AIQBruttLGA== + dependencies: + "@sentry-internal/feedback" "7.94.1" + "@sentry-internal/replay-canvas" "7.94.1" + "@sentry-internal/tracing" "7.94.1" + "@sentry/core" "7.94.1" + "@sentry/replay" "7.94.1" + "@sentry/types" "7.94.1" + "@sentry/utils" "7.94.1" + +"@sentry/core@7.94.1": + version "7.94.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.94.1.tgz#3696cd78b2196ac27fda5bcfb2338f46241a3ff8" + integrity sha512-4sjiMnkbGpv9O98YHVZe7fHNwwdYl+zLoCOoEOadtrJ1EYYvnK/MSixN2HJF7g/0s22xd4xY958QyNIRVR+Iiw== + dependencies: + "@sentry/types" "7.94.1" + "@sentry/utils" "7.94.1" + +"@sentry/node@7.94.1": + version "7.94.1" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.94.1.tgz#3e123e546330d89e71004f9f5cad1f9ba7581598" + integrity sha512-30nyrfVbY1vNoWg5ptGW+soykU532VvKLuXiKty3SKEXjp5bv23JrCcVtuwp9KrW4josHOJbxZUqeNni85YplQ== + dependencies: + "@sentry-internal/tracing" "7.94.1" + "@sentry/core" "7.94.1" + "@sentry/types" "7.94.1" + "@sentry/utils" "7.94.1" + +"@sentry/replay@7.94.1": + version "7.94.1" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.94.1.tgz#cba88d4de453c90aa21db3fd3cb7e66e0ecad0a1" + integrity sha512-4wf3CZ1LR2Neh9IiZD0rY8AORS5Dc5HlKfMug026f8KM2aeoDyneM2JFBnPT/ulRnbD2gNciV+kdZiRd5K5jiw== + dependencies: + "@sentry-internal/tracing" "7.94.1" + "@sentry/core" "7.94.1" + "@sentry/types" "7.94.1" + "@sentry/utils" "7.94.1" + +"@sentry/types@7.94.1": + version "7.94.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.94.1.tgz#97b653a6e73078fc82a2c9d2129e22c7ae1ee248" + integrity sha512-A7CdEXFSgGyWv2BT2p9cAvJfb+dypvOtsY8ZvZvdPLUa7kqCV7ndhURUqKjvMBzsL2GParHn3ehDTl2eVc7pvA== + +"@sentry/utils@7.94.1": + version "7.94.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.94.1.tgz#1164934cf6e2277fb404744b27de38a04310895d" + integrity sha512-gQ2EaMpUU1gGH3S+iqpog9gkXbCo8tlhGYA9a5FUtEtER3D3OAlp8dGFwClwzWDAwzjdLT1+X55zmEptU1cP/A== + dependencies: + "@sentry/types" "7.94.1" "@sindresorhus/is@^4.0.0": version "4.6.0" @@ -765,13 +774,6 @@ acorn@^8.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -1227,13 +1229,6 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - debug@4.3.3: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" @@ -1241,6 +1236,13 @@ debug@4.3.3: dependencies: ms "2.1.2" +debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + debug@^2.2.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -2205,14 +2207,6 @@ http2-wrapper@^2.1.10: quick-lru "^5.1.1" resolve-alpn "^1.2.0" -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" From 3c00c12fb65f423445fd58ca7027738c05bed5ba Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 25 Jan 2024 17:38:30 +0100 Subject: [PATCH 202/239] feat: Update to v7.98.0 of JavaScript SDKs (#821) --- package.json | 14 +- src/main/index.ts | 5 + src/main/sdk.ts | 1 + src/renderer/index.ts | 18 ++ src/renderer/sdk.ts | 3 +- .../other/browser-replay/src/index.html | 4 +- yarn.lock | 189 +++++++++--------- 7 files changed, 130 insertions(+), 104 deletions(-) diff --git a/package.json b/package.json index 36274de2..30525cce 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.94.1", - "@sentry/core": "7.94.1", - "@sentry/node": "7.94.1", - "@sentry/types": "7.94.1", - "@sentry/utils": "7.94.1", + "@sentry/browser": "7.98.0", + "@sentry/core": "7.98.0", + "@sentry/node": "7.98.0", + "@sentry/types": "7.98.0", + "@sentry/utils": "7.98.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.94.1", - "@sentry-internal/typescript": "7.94.1", + "@sentry-internal/eslint-config-sdk": "7.98.0", + "@sentry-internal/typescript": "7.98.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/main/index.ts b/src/main/index.ts index 32d637d6..20ef218a 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -76,7 +76,12 @@ export { startInactiveSpan, startSpanManual, continueTrace, + parameterize, metrics, + functionToStringIntegration, + inboundFiltersIntegration, + linkedErrorsIntegration, + requestDataIntegration, } from '@sentry/core'; export type { SpanStatusType } from '@sentry/core'; diff --git a/src/main/sdk.ts b/src/main/sdk.ts index cfd6d2ba..a0e9465c 100644 --- a/src/main/sdk.ts +++ b/src/main/sdk.ts @@ -34,6 +34,7 @@ export const defaultIntegrations: Integration[] = [ new AdditionalContext(), new Screenshots(), new RendererProfiling(), + // eslint-disable-next-line deprecation/deprecation ...defaultNodeIntegrations.filter( (integration) => integration.name !== 'OnUncaughtException' && integration.name !== 'Context', ), diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 7b7000e1..51828d02 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -73,6 +73,12 @@ export { startInactiveSpan, startSpanManual, continueTrace, + // eslint-disable-next-line deprecation/deprecation + ModuleMetadata, + moduleMetadataIntegration, + functionToStringIntegration, + inboundFiltersIntegration, + parameterize, } from '@sentry/core'; export type { SpanStatusType } from '@sentry/core'; @@ -94,10 +100,22 @@ export { // eslint-disable-next-line deprecation/deprecation lastEventId, showReportDialog, + // eslint-disable-next-line deprecation/deprecation Replay, + replayIntegration, + replayCanvasIntegration, + feedbackIntegration, + sendFeedback, + breadcrumbsIntegration, + dedupeIntegration, + globalHandlersIntegration, + httpContextIntegration, + linkedErrorsIntegration, + browserApiErrorsIntegration, } from '@sentry/browser'; // eslint-disable-next-line deprecation/deprecation export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser'; +// eslint-disable-next-line deprecation/deprecation export const Integrations = { ...BrowserIntegrations, ...ElectronRendererIntegrations }; export { init, defaultIntegrations } from './sdk'; diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index cf0d5696..015f588a 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -13,6 +13,7 @@ import { MetricsAggregator } from './integrations/metrics-aggregator'; import { electronRendererStackParser } from './stack-parse'; import { makeRendererTransport } from './transport'; +// eslint-disable-next-line deprecation/deprecation export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMain(), new MetricsAggregator()]; interface ElectronRendererOptions extends BrowserOptions { @@ -41,7 +42,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_94_1: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_98_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/test/e2e/test-apps/other/browser-replay/src/index.html b/test/e2e/test-apps/other/browser-replay/src/index.html index b6e3a5aa..352e174c 100644 --- a/test/e2e/test-apps/other/browser-replay/src/index.html +++ b/test/e2e/test-apps/other/browser-replay/src/index.html @@ -5,11 +5,11 @@ </head> <body> <script> - const { init, Replay } = require('@sentry/electron/renderer'); + const { init, replayIntegration } = require('@sentry/electron/renderer'); init({ debug: true, - integrations: [new Replay()], + integrations: [replayIntegration()], replaysSessionSampleRate: 0, replaysOnErrorSampleRate: 1, }); diff --git a/yarn.lock b/yarn.lock index 51b68bd3..2ca0744c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.94.1": - version "7.94.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.94.1.tgz#87af85dff9a2330101144e26db1e0d0e94a79fdf" - integrity sha512-SlYJEFPHeNPfl3EwE9omqIVZ8kQ+khlAMSka0YpM1dKXmzMRQN60iuzDoqf243SJt3HXyORVbghdAAYC5Svqtg== +"@sentry-internal/eslint-config-sdk@7.98.0": + version "7.98.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.98.0.tgz#138327174d9f6727cd38d2da5564a45ca6a82c6c" + integrity sha512-dfUmTCAEqFjzFxAk8HT3q3gwgbGbG6K9gwNwFaWJnPuw1I8mvvtsN15r0+VlQWowB+BcbIVHnEH8HNP1XtnBgg== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.94.1" - "@sentry-internal/typescript" "7.94.1" + "@sentry-internal/eslint-plugin-sdk" "7.98.0" + "@sentry-internal/typescript" "7.98.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,97 +180,98 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.94.1": - version "7.94.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.94.1.tgz#f2f0ff83d2caf4e2a496a1a5ed58d9c55244eff4" - integrity sha512-nn8x1y47vAhINglbwBNZWmVflOHgkFcnOfKeEWSGTZ35QPuO6cD+S6Kc62S5o3wA1hgQHOII+b1Hl7w9NtrtMg== +"@sentry-internal/eslint-plugin-sdk@7.98.0": + version "7.98.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.98.0.tgz#64dc7c809a50d4c1ca0a4169a8616b54398c8518" + integrity sha512-EGWacj/Y0z4w2dlfpRmjiKfJV3Ap+bHGPeMB0ui/rMAGwLAn97hF4wBNeSEEFBuFGisD+TztelfqZkmV3LQNbA== dependencies: requireindex "~1.1.0" -"@sentry-internal/feedback@7.94.1": - version "7.94.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.94.1.tgz#332212255568b1b18c08814bb7f8d37187e1e6c0" - integrity sha512-NlJn/TEX1MOPfY4bb6FU0Equ6YuaewZ+lIAqYt3HuEoYI7nYApeRGaPuVLkkezN0cmI7oU/+pJ7v83PtYXCFZw== - dependencies: - "@sentry/core" "7.94.1" - "@sentry/types" "7.94.1" - "@sentry/utils" "7.94.1" - -"@sentry-internal/replay-canvas@7.94.1": - version "7.94.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.94.1.tgz#fdf9743c3051d468ae7c42ecf534beb803204154" - integrity sha512-kCFxdIJTbo2z8wnAQ3IqNVI8y2lSOtaSSZeBgeqiertro8Pe/DS8AXUnhXnAQkluM2i2koA+AgUo6/4bUeZXuQ== - dependencies: - "@sentry/core" "7.94.1" - "@sentry/replay" "7.94.1" - "@sentry/types" "7.94.1" - -"@sentry-internal/tracing@7.94.1": - version "7.94.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.94.1.tgz#27909da03c1541a83002cab655814ec208242b9e" - integrity sha512-znxCdrz7tPXm9Bwoe46PW72Zr0Iv7bXT6+b2LNg5fxWiCQVBbQFrMuVvtXEmHxeRRJVEgTh/4TdulB7wrtQIUQ== - dependencies: - "@sentry/core" "7.94.1" - "@sentry/types" "7.94.1" - "@sentry/utils" "7.94.1" - -"@sentry-internal/typescript@7.94.1": - version "7.94.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.94.1.tgz#1dd9100c6f253a06143d1b369898e993432a1619" - integrity sha512-hgPK7YOmVhJXCfkDwHt3KPDS54jA/DLV4zEo9xuhDtb6YpQIfMY0F7ufsxI2i3JFWiyNmeuWaHzgOt2Jh9jRtQ== - -"@sentry/browser@7.94.1": - version "7.94.1" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.94.1.tgz#d9a4a1c00138bf799e8559fd1df3eff2fa12155b" - integrity sha512-IUR8B/AEPEzLijZ4Uo5qJsgmIBnCudBqAWd3zAiuk3TWYYOQUEvleddFxffN3n6pFhGx3ArksB+AIQBruttLGA== - dependencies: - "@sentry-internal/feedback" "7.94.1" - "@sentry-internal/replay-canvas" "7.94.1" - "@sentry-internal/tracing" "7.94.1" - "@sentry/core" "7.94.1" - "@sentry/replay" "7.94.1" - "@sentry/types" "7.94.1" - "@sentry/utils" "7.94.1" - -"@sentry/core@7.94.1": - version "7.94.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.94.1.tgz#3696cd78b2196ac27fda5bcfb2338f46241a3ff8" - integrity sha512-4sjiMnkbGpv9O98YHVZe7fHNwwdYl+zLoCOoEOadtrJ1EYYvnK/MSixN2HJF7g/0s22xd4xY958QyNIRVR+Iiw== - dependencies: - "@sentry/types" "7.94.1" - "@sentry/utils" "7.94.1" - -"@sentry/node@7.94.1": - version "7.94.1" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.94.1.tgz#3e123e546330d89e71004f9f5cad1f9ba7581598" - integrity sha512-30nyrfVbY1vNoWg5ptGW+soykU532VvKLuXiKty3SKEXjp5bv23JrCcVtuwp9KrW4josHOJbxZUqeNni85YplQ== - dependencies: - "@sentry-internal/tracing" "7.94.1" - "@sentry/core" "7.94.1" - "@sentry/types" "7.94.1" - "@sentry/utils" "7.94.1" - -"@sentry/replay@7.94.1": - version "7.94.1" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.94.1.tgz#cba88d4de453c90aa21db3fd3cb7e66e0ecad0a1" - integrity sha512-4wf3CZ1LR2Neh9IiZD0rY8AORS5Dc5HlKfMug026f8KM2aeoDyneM2JFBnPT/ulRnbD2gNciV+kdZiRd5K5jiw== - dependencies: - "@sentry-internal/tracing" "7.94.1" - "@sentry/core" "7.94.1" - "@sentry/types" "7.94.1" - "@sentry/utils" "7.94.1" - -"@sentry/types@7.94.1": - version "7.94.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.94.1.tgz#97b653a6e73078fc82a2c9d2129e22c7ae1ee248" - integrity sha512-A7CdEXFSgGyWv2BT2p9cAvJfb+dypvOtsY8ZvZvdPLUa7kqCV7ndhURUqKjvMBzsL2GParHn3ehDTl2eVc7pvA== - -"@sentry/utils@7.94.1": - version "7.94.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.94.1.tgz#1164934cf6e2277fb404744b27de38a04310895d" - integrity sha512-gQ2EaMpUU1gGH3S+iqpog9gkXbCo8tlhGYA9a5FUtEtER3D3OAlp8dGFwClwzWDAwzjdLT1+X55zmEptU1cP/A== - dependencies: - "@sentry/types" "7.94.1" +"@sentry-internal/feedback@7.98.0": + version "7.98.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.98.0.tgz#2dabbdc060dca49e79536ae99a9bd55f9c6f806f" + integrity sha512-t/mATvwkLcQLKRlx8SO5vlUjaadF6sT3lfR0PdWYyBy8qglbMTHDW4KP6JKh1gdzTVQGnwMByy+/4h9gy4AVzw== + dependencies: + "@sentry/core" "7.98.0" + "@sentry/types" "7.98.0" + "@sentry/utils" "7.98.0" + +"@sentry-internal/replay-canvas@7.98.0": + version "7.98.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.98.0.tgz#108160c49f714a6021368fd60e08b7291fe44450" + integrity sha512-vAR6KIycyazaY9HwxG5UONrPTe8jeKtZr6k04svPC8OvcoI0xF+l1jMEYcarffuzKpZlPfssYb5ChHtKuXCB+Q== + dependencies: + "@sentry/core" "7.98.0" + "@sentry/replay" "7.98.0" + "@sentry/types" "7.98.0" + "@sentry/utils" "7.98.0" + +"@sentry-internal/tracing@7.98.0": + version "7.98.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.98.0.tgz#812ef7fce6b64794784f3279c66bc6b5cfd29d7f" + integrity sha512-FnhD2uMLIAJvv4XsYPv3qsTTtxrImyLxiZacudJyaWFhxoeVQ8bKKbWJ/Ar68FAwqTtjXMeY5evnEBbRMcQlaA== + dependencies: + "@sentry/core" "7.98.0" + "@sentry/types" "7.98.0" + "@sentry/utils" "7.98.0" + +"@sentry-internal/typescript@7.98.0": + version "7.98.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.98.0.tgz#c1032a0563b26cc136a65f9131692004ae1e255d" + integrity sha512-7tBQTLcNAPo86Xz2DUWLqjGCo2LjXwGOUGozb7RRTUH5jIVTSzPohkZbsWUkefqHdnCVt1fz9coTig8/p3r9eQ== + +"@sentry/browser@7.98.0": + version "7.98.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.98.0.tgz#f249e6e38351de4cea1142f498e1169006e5dd76" + integrity sha512-/MzTS31N2iM6Qwyh4PSpHihgmkVD5xdfE5qi1mTlwQZz5Yz8t7MdMriX8bEDPlLB8sNxl7+D6/+KUJO8akX0nQ== + dependencies: + "@sentry-internal/feedback" "7.98.0" + "@sentry-internal/replay-canvas" "7.98.0" + "@sentry-internal/tracing" "7.98.0" + "@sentry/core" "7.98.0" + "@sentry/replay" "7.98.0" + "@sentry/types" "7.98.0" + "@sentry/utils" "7.98.0" + +"@sentry/core@7.98.0": + version "7.98.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.98.0.tgz#e4f5353bc3986e510b8dd2507355787440d6e25d" + integrity sha512-baRUcpCNGyk7cApQHMfqEZJkXdvAKK+z/dVWiMqWc5T5uhzMnPE8/gjP1JZsMtJSQ8g5nHimBdI5TwOyZtxPaA== + dependencies: + "@sentry/types" "7.98.0" + "@sentry/utils" "7.98.0" + +"@sentry/node@7.98.0": + version "7.98.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.98.0.tgz#49d0a46e72f4e6116b4929d033322951e5a7e88b" + integrity sha512-9cHW217DnU9wC4iR+QxmY3q59N1Touh23hPMDtpMRmbRHSgrmLMoHTVPhK9zHsXRs0mUeidmMqY1ubAWauQByw== + dependencies: + "@sentry-internal/tracing" "7.98.0" + "@sentry/core" "7.98.0" + "@sentry/types" "7.98.0" + "@sentry/utils" "7.98.0" + +"@sentry/replay@7.98.0": + version "7.98.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.98.0.tgz#21ba96d501260c1a33bc1af445f5cfbe02d0ba30" + integrity sha512-CQabv/3KnpMkpc2TzIquPu5krpjeMRAaDIO0OpTj5SQeH2RqSq3fVWNZkHa8tLsADxcfLFINxqOg2jd1NxvwxA== + dependencies: + "@sentry-internal/tracing" "7.98.0" + "@sentry/core" "7.98.0" + "@sentry/types" "7.98.0" + "@sentry/utils" "7.98.0" + +"@sentry/types@7.98.0": + version "7.98.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.98.0.tgz#6a88bf60679aea88ac6cba4d1517958726c2bafb" + integrity sha512-pc034ziM0VTETue4bfBcBqTWGy4w0okidtoZJjGVrYAfE95ObZnUGVj/XYIQ3FeCYWIa7NFN2MvdsCS0buwivQ== + +"@sentry/utils@7.98.0": + version "7.98.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.98.0.tgz#54355a197f7f71a6d17354a3d043022df402b502" + integrity sha512-0/LY+kpHxItVRY0xPDXPXVsKRb95cXsGSQf8sVMtfSjz++0bLL1U4k7PFz1c5s2/Vk0B8hS6duRrgMv6dMIZDw== + dependencies: + "@sentry/types" "7.98.0" "@sindresorhus/is@^4.0.0": version "4.6.0" From 756f519a27c805bcf69412def54d9e740ca89c65 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 15 Feb 2024 13:34:32 -0400 Subject: [PATCH 203/239] feat: Update JavaScript SDKs to v7.101.0 (#826) --- package.json | 14 +- src/index.ts | 1 + src/main/index.ts | 1 + src/renderer/index.ts | 5 + src/renderer/sdk.ts | 2 +- .../other/browser-profiling/src/index.html | 4 +- .../other/browser-tracing/src/index.html | 4 +- test/unit/net.test.ts | 1 + yarn.lock | 190 +++++++++--------- 9 files changed, 115 insertions(+), 107 deletions(-) diff --git a/package.json b/package.json index 30525cce..203bab9f 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.98.0", - "@sentry/core": "7.98.0", - "@sentry/node": "7.98.0", - "@sentry/types": "7.98.0", - "@sentry/utils": "7.98.0", + "@sentry/browser": "7.101.0", + "@sentry/core": "7.101.0", + "@sentry/node": "7.101.0", + "@sentry/types": "7.101.0", + "@sentry/utils": "7.101.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.98.0", - "@sentry-internal/typescript": "7.98.0", + "@sentry-internal/eslint-config-sdk": "7.101.0", + "@sentry-internal/typescript": "7.101.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/index.ts b/src/index.ts index aef5a7f1..4abdc545 100644 --- a/src/index.ts +++ b/src/index.ts @@ -63,6 +63,7 @@ export { setTag, setTags, setUser, + // eslint-disable-next-line deprecation/deprecation spanStatusfromHttpCode, // eslint-disable-next-line deprecation/deprecation trace, diff --git a/src/main/index.ts b/src/main/index.ts index 20ef218a..1be22eb7 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -62,6 +62,7 @@ export { setTag, setTags, setUser, + // eslint-disable-next-line deprecation/deprecation spanStatusfromHttpCode, // eslint-disable-next-line deprecation/deprecation trace, diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 51828d02..6c309fdf 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -59,6 +59,7 @@ export { setTag, setTags, setUser, + // eslint-disable-next-line deprecation/deprecation spanStatusfromHttpCode, // eslint-disable-next-line deprecation/deprecation trace, @@ -95,7 +96,9 @@ export const metrics = { export { addTracingExtensions, BrowserClient, + // eslint-disable-next-line deprecation/deprecation BrowserTracing, + // eslint-disable-next-line deprecation/deprecation BrowserProfilingIntegration, // eslint-disable-next-line deprecation/deprecation lastEventId, @@ -112,6 +115,8 @@ export { httpContextIntegration, linkedErrorsIntegration, browserApiErrorsIntegration, + browserTracingIntegration, + browserProfilingIntegration, } from '@sentry/browser'; // eslint-disable-next-line deprecation/deprecation export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser'; diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 015f588a..fb753a30 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -42,7 +42,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_98_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_101_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/test/e2e/test-apps/other/browser-profiling/src/index.html b/test/e2e/test-apps/other/browser-profiling/src/index.html index 4b296c44..e4c0c2cb 100644 --- a/test/e2e/test-apps/other/browser-profiling/src/index.html +++ b/test/e2e/test-apps/other/browser-profiling/src/index.html @@ -9,7 +9,7 @@ const { addTracingExtensions, init, - BrowserProfilingIntegration, + browserProfilingIntegration, startSpan, } = require('@sentry/electron/renderer'); @@ -17,7 +17,7 @@ init({ debug: true, - integrations: [new BrowserProfilingIntegration()], + integrations: [browserProfilingIntegration()], tracesSampleRate: 1, profilesSampleRate: 1, }); diff --git a/test/e2e/test-apps/other/browser-tracing/src/index.html b/test/e2e/test-apps/other/browser-tracing/src/index.html index 4a2e6477..b3e0fb75 100644 --- a/test/e2e/test-apps/other/browser-tracing/src/index.html +++ b/test/e2e/test-apps/other/browser-tracing/src/index.html @@ -5,11 +5,11 @@ </head> <body> <script> - const { init, BrowserTracing } = require('@sentry/electron/renderer'); + const { init, browserTracingIntegration } = require('@sentry/electron/renderer'); init({ debug: true, - integrations: [new BrowserTracing()], + integrations: [browserTracingIntegration()], tracesSampleRate: 1, }); </script> diff --git a/test/unit/net.test.ts b/test/unit/net.test.ts index 7be521dc..f7a293a7 100644 --- a/test/unit/net.test.ts +++ b/test/unit/net.test.ts @@ -55,6 +55,7 @@ function mockAsyncContextStrategy(getHub: () => Hub): void { } function createHubOnScope(customOptions: Partial<ClientOptions> = {}): Hub { + // eslint-disable-next-line deprecation/deprecation const hub = new Hub(); mockAsyncContextStrategy(() => hub); diff --git a/yarn.lock b/yarn.lock index 2ca0744c..a4d8f1f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.98.0": - version "7.98.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.98.0.tgz#138327174d9f6727cd38d2da5564a45ca6a82c6c" - integrity sha512-dfUmTCAEqFjzFxAk8HT3q3gwgbGbG6K9gwNwFaWJnPuw1I8mvvtsN15r0+VlQWowB+BcbIVHnEH8HNP1XtnBgg== +"@sentry-internal/eslint-config-sdk@7.101.0": + version "7.101.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.101.0.tgz#cd9edca823f1d4b8cbb730ea7a7a942b043f2037" + integrity sha512-g3D6so/T3Hn3Wq8EvohhrNjsGxKSzvIoLAMjdWuEcK0k7sC0ZWh887jU9jiGDzhh74Y78AR8frlqy8qk7wlicA== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.98.0" - "@sentry-internal/typescript" "7.98.0" + "@sentry-internal/eslint-plugin-sdk" "7.101.0" + "@sentry-internal/typescript" "7.101.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,98 +180,98 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.98.0": - version "7.98.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.98.0.tgz#64dc7c809a50d4c1ca0a4169a8616b54398c8518" - integrity sha512-EGWacj/Y0z4w2dlfpRmjiKfJV3Ap+bHGPeMB0ui/rMAGwLAn97hF4wBNeSEEFBuFGisD+TztelfqZkmV3LQNbA== +"@sentry-internal/eslint-plugin-sdk@7.101.0": + version "7.101.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.101.0.tgz#fa8edbb7a214e6c87244f70b6e56f48a07bd025f" + integrity sha512-LesYGx/gKVPpAR80u6yDn10O5beUoRpExmVRoe2a4kOQaAxaU9Gj9gTP2ZtosuUhGfrKGXN/ljxDlFZiZkevoA== dependencies: requireindex "~1.1.0" -"@sentry-internal/feedback@7.98.0": - version "7.98.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.98.0.tgz#2dabbdc060dca49e79536ae99a9bd55f9c6f806f" - integrity sha512-t/mATvwkLcQLKRlx8SO5vlUjaadF6sT3lfR0PdWYyBy8qglbMTHDW4KP6JKh1gdzTVQGnwMByy+/4h9gy4AVzw== - dependencies: - "@sentry/core" "7.98.0" - "@sentry/types" "7.98.0" - "@sentry/utils" "7.98.0" - -"@sentry-internal/replay-canvas@7.98.0": - version "7.98.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.98.0.tgz#108160c49f714a6021368fd60e08b7291fe44450" - integrity sha512-vAR6KIycyazaY9HwxG5UONrPTe8jeKtZr6k04svPC8OvcoI0xF+l1jMEYcarffuzKpZlPfssYb5ChHtKuXCB+Q== - dependencies: - "@sentry/core" "7.98.0" - "@sentry/replay" "7.98.0" - "@sentry/types" "7.98.0" - "@sentry/utils" "7.98.0" - -"@sentry-internal/tracing@7.98.0": - version "7.98.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.98.0.tgz#812ef7fce6b64794784f3279c66bc6b5cfd29d7f" - integrity sha512-FnhD2uMLIAJvv4XsYPv3qsTTtxrImyLxiZacudJyaWFhxoeVQ8bKKbWJ/Ar68FAwqTtjXMeY5evnEBbRMcQlaA== - dependencies: - "@sentry/core" "7.98.0" - "@sentry/types" "7.98.0" - "@sentry/utils" "7.98.0" - -"@sentry-internal/typescript@7.98.0": - version "7.98.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.98.0.tgz#c1032a0563b26cc136a65f9131692004ae1e255d" - integrity sha512-7tBQTLcNAPo86Xz2DUWLqjGCo2LjXwGOUGozb7RRTUH5jIVTSzPohkZbsWUkefqHdnCVt1fz9coTig8/p3r9eQ== - -"@sentry/browser@7.98.0": - version "7.98.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.98.0.tgz#f249e6e38351de4cea1142f498e1169006e5dd76" - integrity sha512-/MzTS31N2iM6Qwyh4PSpHihgmkVD5xdfE5qi1mTlwQZz5Yz8t7MdMriX8bEDPlLB8sNxl7+D6/+KUJO8akX0nQ== - dependencies: - "@sentry-internal/feedback" "7.98.0" - "@sentry-internal/replay-canvas" "7.98.0" - "@sentry-internal/tracing" "7.98.0" - "@sentry/core" "7.98.0" - "@sentry/replay" "7.98.0" - "@sentry/types" "7.98.0" - "@sentry/utils" "7.98.0" - -"@sentry/core@7.98.0": - version "7.98.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.98.0.tgz#e4f5353bc3986e510b8dd2507355787440d6e25d" - integrity sha512-baRUcpCNGyk7cApQHMfqEZJkXdvAKK+z/dVWiMqWc5T5uhzMnPE8/gjP1JZsMtJSQ8g5nHimBdI5TwOyZtxPaA== - dependencies: - "@sentry/types" "7.98.0" - "@sentry/utils" "7.98.0" - -"@sentry/node@7.98.0": - version "7.98.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.98.0.tgz#49d0a46e72f4e6116b4929d033322951e5a7e88b" - integrity sha512-9cHW217DnU9wC4iR+QxmY3q59N1Touh23hPMDtpMRmbRHSgrmLMoHTVPhK9zHsXRs0mUeidmMqY1ubAWauQByw== - dependencies: - "@sentry-internal/tracing" "7.98.0" - "@sentry/core" "7.98.0" - "@sentry/types" "7.98.0" - "@sentry/utils" "7.98.0" - -"@sentry/replay@7.98.0": - version "7.98.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.98.0.tgz#21ba96d501260c1a33bc1af445f5cfbe02d0ba30" - integrity sha512-CQabv/3KnpMkpc2TzIquPu5krpjeMRAaDIO0OpTj5SQeH2RqSq3fVWNZkHa8tLsADxcfLFINxqOg2jd1NxvwxA== - dependencies: - "@sentry-internal/tracing" "7.98.0" - "@sentry/core" "7.98.0" - "@sentry/types" "7.98.0" - "@sentry/utils" "7.98.0" - -"@sentry/types@7.98.0": - version "7.98.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.98.0.tgz#6a88bf60679aea88ac6cba4d1517958726c2bafb" - integrity sha512-pc034ziM0VTETue4bfBcBqTWGy4w0okidtoZJjGVrYAfE95ObZnUGVj/XYIQ3FeCYWIa7NFN2MvdsCS0buwivQ== - -"@sentry/utils@7.98.0": - version "7.98.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.98.0.tgz#54355a197f7f71a6d17354a3d043022df402b502" - integrity sha512-0/LY+kpHxItVRY0xPDXPXVsKRb95cXsGSQf8sVMtfSjz++0bLL1U4k7PFz1c5s2/Vk0B8hS6duRrgMv6dMIZDw== - dependencies: - "@sentry/types" "7.98.0" +"@sentry-internal/feedback@7.101.0": + version "7.101.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.101.0.tgz#cce033c80c498212a5b9a9540ff3ab8297eefbe2" + integrity sha512-uQBMYhZp/qkBEA/GXRMm1OfSkRkZojxBrCrFmzkWhJzXT+YbL57/M1uCcwkKmorKlg393Soh7MLULInwmcwWkA== + dependencies: + "@sentry/core" "7.101.0" + "@sentry/types" "7.101.0" + "@sentry/utils" "7.101.0" + +"@sentry-internal/replay-canvas@7.101.0": + version "7.101.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.101.0.tgz#0e32e1bebd4d125126e481c0df5f7186edeadbf4" + integrity sha512-fiz4kPpz/j6ZaD+vOcUXuO1HqD49djs4QwyTsRwCCi77EKZOGAaijpqWckDWyZs0dOOnbGGGC5x3o+CfTJcjKA== + dependencies: + "@sentry/core" "7.101.0" + "@sentry/replay" "7.101.0" + "@sentry/types" "7.101.0" + "@sentry/utils" "7.101.0" + +"@sentry-internal/tracing@7.101.0": + version "7.101.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.101.0.tgz#9a92ee722d071449a61c061867aa43a5beefcfb6" + integrity sha512-rp9oOLQs6vMuzvAnAHRRCNu5Z0o/ZVRI3WPYedxpdMWKD1Z3G9o+0joP+ZIUqHsamWWYiIgPqXgL9AK6AWjFRg== + dependencies: + "@sentry/core" "7.101.0" + "@sentry/types" "7.101.0" + "@sentry/utils" "7.101.0" + +"@sentry-internal/typescript@7.101.0": + version "7.101.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.101.0.tgz#376705403a17e282f1b9f540b9a1ffd2e4069b36" + integrity sha512-Pxpp18Z1H3T+THbRXLYiS327clCh/eOMC85+AQACK/URkU3cC8sQ4Qw27mIAgYLZVjYdGVa7fFrNoPJBI40NLQ== + +"@sentry/browser@7.101.0": + version "7.101.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.101.0.tgz#53ecfa8a9b0076b95930dff5bbb616e827608606" + integrity sha512-wj9YLfS/caR20Yq0hdEjsZHuhnYLU7Ht0SlcJx5MNMnArtmW1k2CWZz3PCqcW/rTZe53npVTe6eMqMccB4aPrQ== + dependencies: + "@sentry-internal/feedback" "7.101.0" + "@sentry-internal/replay-canvas" "7.101.0" + "@sentry-internal/tracing" "7.101.0" + "@sentry/core" "7.101.0" + "@sentry/replay" "7.101.0" + "@sentry/types" "7.101.0" + "@sentry/utils" "7.101.0" + +"@sentry/core@7.101.0": + version "7.101.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.101.0.tgz#7ddae48771bad6d3170df0d9807f86c39824dd0a" + integrity sha512-dRNrNV5OLGARkOGgxJsVDhA98Pev5G1LVJcud5E83cRg49BCUx2riqEtDP6iIS1nvem6cApkSnLC1kvl/T5/Cw== + dependencies: + "@sentry/types" "7.101.0" + "@sentry/utils" "7.101.0" + +"@sentry/node@7.101.0": + version "7.101.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.101.0.tgz#acafd4efc81035bb3ffe73ef92f348099c7c5df1" + integrity sha512-4z01VAFjRYk7XcajbWPJlhkPN6PBG4nVX8n1dl+OH2OeqTxFxcnmY5zR5v+AtEbNJgg5PMwy8mnnGZRG/wLZgA== + dependencies: + "@sentry-internal/tracing" "7.101.0" + "@sentry/core" "7.101.0" + "@sentry/types" "7.101.0" + "@sentry/utils" "7.101.0" + +"@sentry/replay@7.101.0": + version "7.101.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.101.0.tgz#66d199316be3f0fc2ed82a5294f519d58a2c2260" + integrity sha512-DSWkGKI/QhCAY+qm4mBnPob3/YsewisskVTak7KMDotJ75H85WFJhVwOMtvaEWIzVezCOItPv7ql51jTwhR3wA== + dependencies: + "@sentry-internal/tracing" "7.101.0" + "@sentry/core" "7.101.0" + "@sentry/types" "7.101.0" + "@sentry/utils" "7.101.0" + +"@sentry/types@7.101.0": + version "7.101.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.101.0.tgz#0174a32d6c12def73f438dc2a10bd52cc0ba0c81" + integrity sha512-YC+ltO/AlbEyJHjCUYQ4is1HcDT2zSMuLkIAcyQmK7fUdlGT4iR5sfENriY9ZopYHgjPdJKfhI8ohScam7zp/A== + +"@sentry/utils@7.101.0": + version "7.101.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.101.0.tgz#0eadb9709c9b6fbc03d509acf7fe6a00ab4e6220" + integrity sha512-px1NUkCLsD9UKLE4W4DghpyzmAVHgYhskrjRt30ubyUKqlggtHkOXRvS8MjuWowR/i0wF0GuTCbU9StBd7JMrw== + dependencies: + "@sentry/types" "7.101.0" "@sindresorhus/is@^4.0.0": version "4.6.0" From 4d13458c9c109d161eed087141d6c21205c7e2f3 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 15 Feb 2024 13:34:42 -0400 Subject: [PATCH 204/239] meta: Update changelog for v4.18.0 release (#827) --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d0968d07..0110034a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## Unreleased +## 4.18.0 + +- feat: Update from [v7.92.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.92.0) to + [v7.101.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.101.0) of JavaScript SDKs (#815, #821, #826) + ## 4.17.0 - feat: Update from [v7.90.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.90.0) to From 79d53b332e1773fa4df1d4e088f9cd87ee45da38 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Thu, 15 Feb 2024 18:13:39 +0000 Subject: [PATCH 205/239] release: 4.18.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 203bab9f..795316e8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.17.0", + "version": "4.18.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From 3ddf5a72197e57e9f96584ea940df7c7986e5e63 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 15 Feb 2024 14:21:44 -0400 Subject: [PATCH 206/239] feat: Deprecate class based integrations (#822) --- src/integrations.ts | 1 + src/main/index.ts | 14 ++ src/main/integrations/additional-context.ts | 19 +- .../integrations/browser-window-session.ts | 20 +- src/main/integrations/child-process.ts | 21 +- src/main/integrations/electron-breadcrumbs.ts | 187 +++++++++--------- src/main/integrations/electron-minidump.ts | 19 +- src/main/integrations/index.ts | 1 + src/main/integrations/main-context.ts | 16 +- src/main/integrations/main-process-session.ts | 18 +- src/main/integrations/net-breadcrumbs.ts | 21 +- src/main/integrations/onuncaughtexception.ts | 17 +- src/main/integrations/preload-injection.ts | 16 +- src/main/integrations/renderer-profiling.ts | 15 +- src/main/integrations/screenshots.ts | 18 +- .../integrations/sentry-minidump/index.ts | 26 ++- src/main/sdk.ts | 46 +++-- src/renderer/index.ts | 3 + src/renderer/integrations/index.ts | 1 + .../integrations/metrics-aggregator.ts | 9 +- src/renderer/integrations/scope-to-main.ts | 14 +- src/renderer/sdk.ts | 12 +- .../test-apps/native-electron/gpu/src/main.js | 4 +- .../main-custom-release/src/main.js | 6 +- .../native-electron/main/src/main.js | 6 +- .../renderer-custom-release/src/main.js | 6 +- .../native-electron/renderer/src/main.js | 6 +- .../test-apps/other/child-process/src/main.js | 4 +- .../src/main.js | 6 +- .../sessions/abnormal-exit/src/main.js | 4 +- test/e2e/test-apps/sessions/good/src/main.js | 4 +- .../sessions/javascript-error/src/main.js | 4 +- .../src/main.js | 6 +- .../sessions/native-crash-main/src/main.js | 4 +- .../src/main.js | 6 +- .../native-crash-renderer/src/main.js | 4 +- .../test-apps/sessions/window-bad/src/main.js | 4 +- .../sessions/window-good/src/main.js | 4 +- test/unit/net.test.ts | 1 + 39 files changed, 357 insertions(+), 236 deletions(-) diff --git a/src/integrations.ts b/src/integrations.ts index a34446fd..8bc32879 100644 --- a/src/integrations.ts +++ b/src/integrations.ts @@ -1,3 +1,4 @@ +/* eslint-disable deprecation/deprecation */ import { Integration } from '@sentry/types'; import { dynamicRequire } from '@sentry/utils'; diff --git a/src/main/index.ts b/src/main/index.ts index 1be22eb7..9c8b9ae6 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -86,6 +86,20 @@ export { } from '@sentry/core'; export type { SpanStatusType } from '@sentry/core'; +export { electronBreadcrumbsIntegration } from './integrations/electron-breadcrumbs'; +export { onUncaughtExceptionIntegration } from './integrations/onuncaughtexception'; +export { mainContextIntegration } from './integrations/main-context'; +export { sentryMinidumpIntegration } from './integrations/sentry-minidump'; +export { electronMinidumpIntegration } from './integrations/electron-minidump'; +export { preloadInjectionIntegration } from './integrations/preload-injection'; +export { mainProcessSessionIntegration } from './integrations/main-process-session'; +export { browserWindowSessionIntegration } from './integrations/browser-window-session'; +export { additionalContextIntegration } from './integrations/additional-context'; +export { electronNetIntegration } from './integrations/net-breadcrumbs'; +export { childProcessIntegration } from './integrations/child-process'; +export { screenshotsIntegration } from './integrations/screenshots'; +export { rendererProfileFromIpc } from './integrations/renderer-profiling'; + export type { NodeOptions } from '@sentry/node'; // eslint-disable-next-line deprecation/deprecation export { flush, close, NodeClient, lastEventId } from '@sentry/node'; diff --git a/src/main/integrations/additional-context.ts b/src/main/integrations/additional-context.ts index 1f65f6e2..505b9d7c 100644 --- a/src/main/integrations/additional-context.ts +++ b/src/main/integrations/additional-context.ts @@ -1,5 +1,5 @@ -import { convertIntegrationFnToClass } from '@sentry/core'; -import { DeviceContext, IntegrationFn } from '@sentry/types'; +import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core'; +import { DeviceContext } from '@sentry/types'; import { app, screen as electronScreen } from 'electron'; import { CpuInfo, cpus } from 'os'; @@ -22,7 +22,10 @@ const DEFAULT_OPTIONS: AdditionalContextOptions = { const INTEGRATION_NAME = 'AdditionalContext'; -const additionalContext: IntegrationFn = (userOptions: Partial<AdditionalContextOptions> = {}) => { +/** + * Adds additional Electron context to events + */ +export const additionalContextIntegration = defineIntegration((userOptions: Partial<AdditionalContextOptions> = {}) => { const _lazyDeviceContext: DeviceContext = {}; const options = { @@ -95,8 +98,12 @@ const additionalContext: IntegrationFn = (userOptions: Partial<AdditionalContext return mergeEvents(event, { contexts: { device } }); }, }; -}; +}); -/** Adds Electron context to events and normalises paths. */ +/** + * Adds additional Electron context to events + * + * @deprecated Use `additionalContextIntegration()z instead + */ // eslint-disable-next-line deprecation/deprecation -export const AdditionalContext = convertIntegrationFnToClass(INTEGRATION_NAME, additionalContext); +export const AdditionalContext = convertIntegrationFnToClass(INTEGRATION_NAME, additionalContextIntegration); diff --git a/src/main/integrations/browser-window-session.ts b/src/main/integrations/browser-window-session.ts index 75778d4e..55721ad4 100644 --- a/src/main/integrations/browser-window-session.ts +++ b/src/main/integrations/browser-window-session.ts @@ -1,5 +1,4 @@ -import { convertIntegrationFnToClass } from '@sentry/core'; -import { IntegrationFn } from '@sentry/types'; +import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core'; import { app, BrowserWindow } from 'electron'; import { ELECTRON_MAJOR_VERSION } from '../electron-normalize'; @@ -18,7 +17,7 @@ function focusedWindow(): boolean { return false; } -interface Options { +export interface Options { /** * Number of seconds to wait before ending a session after the app loses focus. * @@ -32,7 +31,12 @@ type SessionState = { name: 'active' } | { name: 'inactive' } | { name: 'timeout const INTEGRATION_NAME = 'BrowserWindowSession'; -const browserWindowSession: IntegrationFn = (options: Options = {}) => { +/** + * Tracks sessions as BrowserWindows focus. + * + * Supports Electron >= v12 + */ +export const browserWindowSessionIntegration = defineIntegration((options: Options = {}) => { if (ELECTRON_MAJOR_VERSION < 12) { throw new Error('BrowserWindowSession requires Electron >= v12'); } @@ -100,12 +104,14 @@ const browserWindowSession: IntegrationFn = (options: Options = {}) => { endSessionOnExit(); }, }; -}; +}); /** - * Tracks sessions as BrowserWindows focused. + * Tracks sessions as BrowserWindows focus. * * Supports Electron >= v12 + * + * @deprecated Use `browserWindowSessionIntegration()` instead */ // eslint-disable-next-line deprecation/deprecation -export const BrowserWindowSession = convertIntegrationFnToClass(INTEGRATION_NAME, browserWindowSession); +export const BrowserWindowSession = convertIntegrationFnToClass(INTEGRATION_NAME, browserWindowSessionIntegration); diff --git a/src/main/integrations/child-process.ts b/src/main/integrations/child-process.ts index 1545759c..29da73fb 100644 --- a/src/main/integrations/child-process.ts +++ b/src/main/integrations/child-process.ts @@ -1,12 +1,12 @@ -import { addBreadcrumb, captureMessage, convertIntegrationFnToClass } from '@sentry/core'; +import { addBreadcrumb, captureMessage, convertIntegrationFnToClass, defineIntegration } from '@sentry/core'; import { NodeClient } from '@sentry/node'; -import { IntegrationFn, SeverityLevel } from '@sentry/types'; +import { SeverityLevel } from '@sentry/types'; import { OrBool } from '../../common/types'; import { EXIT_REASONS, ExitReason, onChildProcessGone, onRendererProcessGone } from '../electron-normalize'; import { ElectronMainOptions } from '../sdk'; -interface ChildProcessOptions { +export interface ChildProcessOptions { /** Child process events that generate breadcrumbs */ breadcrumbs: Readonly<ExitReason[]>; /** Child process events that generate Sentry events */ @@ -38,7 +38,10 @@ function getMessageAndSeverity(reason: ExitReason, proc?: string): { message: st const INTEGRATION_NAME = 'ChildProcess'; -const childProcess: IntegrationFn = (userOptions: Partial<OrBool<ChildProcessOptions>> = {}) => { +/** + * Adds breadcrumbs for Electron child process events. + */ +export const childProcessIntegration = defineIntegration((userOptions: Partial<OrBool<ChildProcessOptions>> = {}) => { const { breadcrumbs, events } = userOptions; const options: ChildProcessOptions = { @@ -102,8 +105,12 @@ const childProcess: IntegrationFn = (userOptions: Partial<OrBool<ChildProcessOpt } }, }; -}; +}); -/** Adds breadcrumbs for Electron events. */ +/** + * Adds breadcrumbs for Electron child process events. + * + * @deprecated Use `childProcessIntegration()` instead + */ // eslint-disable-next-line deprecation/deprecation -export const ChildProcess = convertIntegrationFnToClass(INTEGRATION_NAME, childProcess); +export const ChildProcess = convertIntegrationFnToClass(INTEGRATION_NAME, childProcessIntegration); diff --git a/src/main/integrations/electron-breadcrumbs.ts b/src/main/integrations/electron-breadcrumbs.ts index f5ec9361..3d31f96c 100644 --- a/src/main/integrations/electron-breadcrumbs.ts +++ b/src/main/integrations/electron-breadcrumbs.ts @@ -1,6 +1,6 @@ -import { addBreadcrumb, convertIntegrationFnToClass } from '@sentry/core'; +import { addBreadcrumb, convertIntegrationFnToClass, defineIntegration } from '@sentry/core'; import { NodeClient } from '@sentry/node'; -import { Breadcrumb, IntegrationFn } from '@sentry/types'; +import { Breadcrumb } from '@sentry/types'; import { app, autoUpdater, BrowserWindow, powerMonitor, screen, WebContents } from 'electron'; import { onBrowserWindowCreated, onWebContentsCreated, whenAppReady } from '../electron-normalize'; @@ -11,7 +11,7 @@ import { ElectronMainOptions } from '../sdk'; type EventFunction = (name: string) => boolean; type EventTypes = boolean | string[] | EventFunction | undefined; -interface ElectronBreadcrumbsOptions<T> { +export interface ElectronBreadcrumbsOptions<T> { /** * app events * @@ -105,97 +105,106 @@ export function normalizeOptions( const INTEGRATION_NAME = 'ElectronBreadcrumbs'; -const electronBreadcrumbs: IntegrationFn = (userOptions: Partial<ElectronBreadcrumbsOptions<EventTypes>> = {}) => { - const options: ElectronBreadcrumbsOptions<EventFunction | false> = { - ...DEFAULT_OPTIONS, - ...normalizeOptions(userOptions), - }; - - function patchEventEmitter( - emitter: NodeJS.EventEmitter | WebContents | BrowserWindow, - category: string, - shouldCapture: EventFunction | undefined | false, - id?: number | undefined, - ): void { - const emit = emitter.emit.bind(emitter) as (event: string, ...args: unknown[]) => boolean; - - emitter.emit = (event: string, ...args: unknown[]) => { - if (shouldCapture && shouldCapture(event)) { - const breadcrumb: Breadcrumb = { - category: 'electron', - message: `${category}.${event}`, - timestamp: new Date().getTime() / 1_000, - type: 'ui', - }; - - if (id) { - breadcrumb.data = { ...getRendererProperties(id) }; - - if (!options.captureWindowTitles && breadcrumb.data?.title) { - delete breadcrumb.data?.title; - } - } - - addBreadcrumb(breadcrumb); - } - - return emit(event, ...args); +/** + * Adds breadcrumbs for Electron events. + */ +export const electronBreadcrumbsIntegration = defineIntegration( + (userOptions: Partial<ElectronBreadcrumbsOptions<EventTypes>> = {}) => { + const options: ElectronBreadcrumbsOptions<EventFunction | false> = { + ...DEFAULT_OPTIONS, + ...normalizeOptions(userOptions), }; - } - - return { - name: INTEGRATION_NAME, - setupOnce() { - // noop - }, - setup(client: NodeClient) { - const clientOptions = client.getOptions() as ElectronMainOptions | undefined; - - trackRendererProperties(); - - whenAppReady.then( - () => { - // We can't access these until app 'ready' - if (options.screen) { - patchEventEmitter(screen, 'screen', options.screen); - } - if (options.powerMonitor) { - patchEventEmitter(powerMonitor, 'powerMonitor', options.powerMonitor); + function patchEventEmitter( + emitter: NodeJS.EventEmitter | WebContents | BrowserWindow, + category: string, + shouldCapture: EventFunction | undefined | false, + id?: number | undefined, + ): void { + const emit = emitter.emit.bind(emitter) as (event: string, ...args: unknown[]) => boolean; + + emitter.emit = (event: string, ...args: unknown[]) => { + if (shouldCapture && shouldCapture(event)) { + const breadcrumb: Breadcrumb = { + category: 'electron', + message: `${category}.${event}`, + timestamp: new Date().getTime() / 1_000, + type: 'ui', + }; + + if (id) { + breadcrumb.data = { ...getRendererProperties(id) }; + + if (!options.captureWindowTitles && breadcrumb.data?.title) { + delete breadcrumb.data?.title; + } } - }, - () => { - // ignore - }, - ); - - if (options.app) { - patchEventEmitter(app, 'app', options.app); - } - if (options.autoUpdater) { - patchEventEmitter(autoUpdater, 'autoUpdater', options.autoUpdater); - } + addBreadcrumb(breadcrumb); + } - if (options.browserWindow) { - onBrowserWindowCreated((window) => { - const id = window.webContents.id; - const windowName = clientOptions?.getRendererName?.(window.webContents) || 'window'; - patchEventEmitter(window, windowName, options.browserWindow, id); - }); - } + return emit(event, ...args); + }; + } - if (options.webContents) { - onWebContentsCreated((contents) => { - const id = contents.id; - const webContentsName = clientOptions?.getRendererName?.(contents) || 'renderer'; - patchEventEmitter(contents, webContentsName, options.webContents, id); - }); - } - }, - }; -}; + return { + name: INTEGRATION_NAME, + setupOnce() { + // noop + }, + setup(client: NodeClient) { + const clientOptions = client.getOptions() as ElectronMainOptions | undefined; + + trackRendererProperties(); + + whenAppReady.then( + () => { + // We can't access these until app 'ready' + if (options.screen) { + patchEventEmitter(screen, 'screen', options.screen); + } + + if (options.powerMonitor) { + patchEventEmitter(powerMonitor, 'powerMonitor', options.powerMonitor); + } + }, + () => { + // ignore + }, + ); + + if (options.app) { + patchEventEmitter(app, 'app', options.app); + } + + if (options.autoUpdater) { + patchEventEmitter(autoUpdater, 'autoUpdater', options.autoUpdater); + } + + if (options.browserWindow) { + onBrowserWindowCreated((window) => { + const id = window.webContents.id; + const windowName = clientOptions?.getRendererName?.(window.webContents) || 'window'; + patchEventEmitter(window, windowName, options.browserWindow, id); + }); + } -/** Adds breadcrumbs for Electron events. */ + if (options.webContents) { + onWebContentsCreated((contents) => { + const id = contents.id; + const webContentsName = clientOptions?.getRendererName?.(contents) || 'renderer'; + patchEventEmitter(contents, webContentsName, options.webContents, id); + }); + } + }, + }; + }, +); + +/** + * Adds breadcrumbs for Electron events. + * + * @deprecated Use `electronBreadcrumbsIntegration()` instead + */ // eslint-disable-next-line deprecation/deprecation -export const ElectronBreadcrumbs = convertIntegrationFnToClass(INTEGRATION_NAME, electronBreadcrumbs); +export const ElectronBreadcrumbs = convertIntegrationFnToClass(INTEGRATION_NAME, electronBreadcrumbsIntegration); diff --git a/src/main/integrations/electron-minidump.ts b/src/main/integrations/electron-minidump.ts index e0a5f834..169cb731 100644 --- a/src/main/integrations/electron-minidump.ts +++ b/src/main/integrations/electron-minidump.ts @@ -1,6 +1,6 @@ -import { applyScopeDataToEvent, convertIntegrationFnToClass, getCurrentScope } from '@sentry/core'; +import { applyScopeDataToEvent, convertIntegrationFnToClass, defineIntegration, getCurrentScope } from '@sentry/core'; import { NodeClient, NodeOptions } from '@sentry/node'; -import { Event, IntegrationFn, ScopeData } from '@sentry/types'; +import { Event, ScopeData } from '@sentry/types'; import { logger, makeDsn, SentryError, uuid4 } from '@sentry/utils'; import { app, crashReporter } from 'electron'; @@ -95,7 +95,10 @@ export function minidumpUrlFromDsn(dsn: string): string | undefined { const INTEGRATION_NAME = 'ElectronMinidump'; -const electronMinidump: IntegrationFn = () => { +/** + * Sends minidumps via the Electron built-in uploader. + */ +export const electronMinidumpIntegration = defineIntegration(() => { /** Counter used to ensure no race condition when updating extra params */ let updateEpoch = 0; let customRelease: string | undefined; @@ -212,8 +215,12 @@ const electronMinidump: IntegrationFn = () => { }, logger.error); }, }; -}; +}); -/** Sends minidumps via the Electron built-in uploader. */ +/** + * Sends minidumps via the Electron built-in uploader. + * + * @deprecated Use `electronMinidumpIntegration()` instead + */ // eslint-disable-next-line deprecation/deprecation -export const ElectronMinidump = convertIntegrationFnToClass(INTEGRATION_NAME, electronMinidump); +export const ElectronMinidump = convertIntegrationFnToClass(INTEGRATION_NAME, electronMinidumpIntegration); diff --git a/src/main/integrations/index.ts b/src/main/integrations/index.ts index c21649fe..0b0c61f6 100644 --- a/src/main/integrations/index.ts +++ b/src/main/integrations/index.ts @@ -1,3 +1,4 @@ +/* eslint-disable deprecation/deprecation */ export { ElectronBreadcrumbs } from './electron-breadcrumbs'; export { OnUncaughtException } from './onuncaughtexception'; export { MainContext } from './main-context'; diff --git a/src/main/integrations/main-context.ts b/src/main/integrations/main-context.ts index f4c44c22..12562d99 100644 --- a/src/main/integrations/main-context.ts +++ b/src/main/integrations/main-context.ts @@ -1,5 +1,4 @@ -import { convertIntegrationFnToClass } from '@sentry/core'; -import { IntegrationFn } from '@sentry/types'; +import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core'; import { app } from 'electron'; import { mergeEvents, normalizeEvent } from '../../common'; @@ -7,7 +6,8 @@ import { getEventDefaults } from '../context'; const INTEGRATION_NAME = 'MainContext'; -const mainContext: IntegrationFn = () => { +/** Adds Electron context to events and normalises paths. */ +export const mainContextIntegration = defineIntegration(() => { return { name: INTEGRATION_NAME, setupOnce() { @@ -20,8 +20,12 @@ const mainContext: IntegrationFn = () => { return mergeEvents(defaults, normalized); }, }; -}; +}); -/** Adds Electron context to events and normalises paths. */ +/** + * Adds Electron context to events and normalises paths. + * + * @deprecated Use `mainContextIntegration()` instead + */ // eslint-disable-next-line deprecation/deprecation -export const MainContext = convertIntegrationFnToClass(INTEGRATION_NAME, mainContext); +export const MainContext = convertIntegrationFnToClass(INTEGRATION_NAME, mainContextIntegration); diff --git a/src/main/integrations/main-process-session.ts b/src/main/integrations/main-process-session.ts index ca038284..00a98e88 100644 --- a/src/main/integrations/main-process-session.ts +++ b/src/main/integrations/main-process-session.ts @@ -1,9 +1,8 @@ -import { convertIntegrationFnToClass } from '@sentry/core'; -import { IntegrationFn } from '@sentry/types'; +import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core'; import { endSessionOnExit, startSession } from '../sessions'; -interface Options { +export interface Options { /** * Whether sessions should be sent immediately on creation * @@ -14,7 +13,8 @@ interface Options { const INTEGRATION_NAME = 'MainProcessSession'; -const mainProcessSession: IntegrationFn = (options: Options = {}) => { +/** Tracks sessions as the main process lifetime. */ +export const mainProcessSessionIntegration = defineIntegration((options: Options = {}) => { return { name: INTEGRATION_NAME, setupOnce() { @@ -25,8 +25,12 @@ const mainProcessSession: IntegrationFn = (options: Options = {}) => { endSessionOnExit(); }, }; -}; +}); -/** Tracks sessions as the main process lifetime. */ +/** + * Tracks sessions as the main process lifetime. + * + * @deprecated Use `mainProcessSessionIntegration()` instead + */ // eslint-disable-next-line deprecation/deprecation -export const MainProcessSession = convertIntegrationFnToClass(INTEGRATION_NAME, mainProcessSession); +export const MainProcessSession = convertIntegrationFnToClass(INTEGRATION_NAME, mainProcessSessionIntegration); diff --git a/src/main/integrations/net-breadcrumbs.ts b/src/main/integrations/net-breadcrumbs.ts index 2c257435..2f470c9e 100644 --- a/src/main/integrations/net-breadcrumbs.ts +++ b/src/main/integrations/net-breadcrumbs.ts @@ -2,11 +2,12 @@ import { addBreadcrumb, /* eslint-disable deprecation/deprecation */ convertIntegrationFnToClass, + defineIntegration, getClient, getCurrentScope, getDynamicSamplingContextFromClient, } from '@sentry/core'; -import { DynamicSamplingContext, IntegrationFn, Span, TracePropagationTargets } from '@sentry/types'; +import { DynamicSamplingContext, Span, TracePropagationTargets } from '@sentry/types'; import { dynamicSamplingContextToSentryBaggageHeader, fill, @@ -20,7 +21,7 @@ import * as urlModule from 'url'; type ShouldTraceFn = (method: string, url: string) => boolean; -interface NetOptions { +export interface NetOptions { /** * Whether breadcrumbs should be captured for net requests * @@ -109,7 +110,6 @@ type RequestOptions = string | ClientRequestConstructorOptions; type RequestMethod = (opt: RequestOptions) => ClientRequest; type WrappedRequestMethodFactory = (original: RequestMethod) => RequestMethod; -/** */ function createWrappedRequestFactory( options: NetOptions, tracePropagationTargets: TracePropagationTargets | undefined, @@ -273,7 +273,10 @@ function addRequestBreadcrumb( const INTEGRATION_NAME = 'Net'; -const net: IntegrationFn = (options: NetOptions = {}) => { +/** + * Electron 'net' module integration + */ +export const electronNetIntegration = defineIntegration((options: NetOptions = {}) => { return { name: INTEGRATION_NAME, setupOnce() { @@ -290,8 +293,12 @@ const net: IntegrationFn = (options: NetOptions = {}) => { fill(electronNet, 'request', createWrappedRequestFactory(options, clientOptions?.tracePropagationTargets)); }, }; -}; +}); -/** http module integration */ +/** + * Electron 'net' module integration + * + * @deprecated Use `electronNetIntegration()` instead + */ // eslint-disable-next-line deprecation/deprecation -export const Net = convertIntegrationFnToClass(INTEGRATION_NAME, net); +export const Net = convertIntegrationFnToClass(INTEGRATION_NAME, electronNetIntegration); diff --git a/src/main/integrations/onuncaughtexception.ts b/src/main/integrations/onuncaughtexception.ts index 8b009dd7..1e125a10 100644 --- a/src/main/integrations/onuncaughtexception.ts +++ b/src/main/integrations/onuncaughtexception.ts @@ -1,11 +1,12 @@ -import { convertIntegrationFnToClass, getCurrentScope } from '@sentry/core'; +import { convertIntegrationFnToClass, defineIntegration, getCurrentScope } from '@sentry/core'; import { NodeClient } from '@sentry/node'; -import { Event, IntegrationFn } from '@sentry/types'; +import { Event } from '@sentry/types'; import { dialog } from 'electron'; const INTEGRATION_NAME = 'OnUncaughtException'; -const onUncaughtException: IntegrationFn = () => { +/** Capture unhandled errors. */ +export const onUncaughtExceptionIntegration = defineIntegration(() => { return { name: INTEGRATION_NAME, setupOnce() { @@ -60,8 +61,12 @@ const onUncaughtException: IntegrationFn = () => { }); }, }; -}; +}); -/** Capture unhandled errors. */ +/** + * Capture unhandled errors. + * + * @deprecated Use `onUncaughtExceptionIntegration()` instead + */ // eslint-disable-next-line deprecation/deprecation -export const OnUncaughtException = convertIntegrationFnToClass(INTEGRATION_NAME, onUncaughtException); +export const OnUncaughtException = convertIntegrationFnToClass(INTEGRATION_NAME, onUncaughtExceptionIntegration); diff --git a/src/main/integrations/preload-injection.ts b/src/main/integrations/preload-injection.ts index bd49f6c1..5c76665c 100644 --- a/src/main/integrations/preload-injection.ts +++ b/src/main/integrations/preload-injection.ts @@ -1,5 +1,4 @@ -import { convertIntegrationFnToClass } from '@sentry/core'; -import { IntegrationFn } from '@sentry/types'; +import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core'; import { logger } from '@sentry/utils'; import { app } from 'electron'; import { existsSync } from 'fs'; @@ -33,7 +32,12 @@ function getPreloadPath(): string | number | undefined { const INTEGRATION_NAME = 'PreloadInjection'; -const preloadInjection: IntegrationFn = () => { +/** + * Injects the preload script into the provided sessions. + * + * Defaults to injecting into the defaultSession + */ +export const preloadInjectionIntegration = defineIntegration(() => { return { name: INTEGRATION_NAME, setupOnce() { @@ -65,12 +69,14 @@ const preloadInjection: IntegrationFn = () => { }); }, }; -}; +}); /** * Injects the preload script into the provided sessions. * * Defaults to injecting into the defaultSession + * + * @deprecated Use `preloadInjectionIntegration()` instead */ // eslint-disable-next-line deprecation/deprecation -export const PreloadInjection = convertIntegrationFnToClass(INTEGRATION_NAME, preloadInjection); +export const PreloadInjection = convertIntegrationFnToClass(INTEGRATION_NAME, preloadInjectionIntegration); diff --git a/src/main/integrations/renderer-profiling.ts b/src/main/integrations/renderer-profiling.ts index a7825274..67acb85a 100644 --- a/src/main/integrations/renderer-profiling.ts +++ b/src/main/integrations/renderer-profiling.ts @@ -1,5 +1,5 @@ -import { convertIntegrationFnToClass } from '@sentry/core'; -import { Event, IntegrationFn, Profile } from '@sentry/types'; +import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core'; +import { Event, Profile } from '@sentry/types'; import { forEachEnvelopeItem, LRUMap } from '@sentry/utils'; import { app } from 'electron'; @@ -56,7 +56,10 @@ function addJsProfilingHeader( const INTEGRATION_NAME = 'RendererProfiling'; -const rendererProfiling: IntegrationFn = () => { +/** + * Injects 'js-profiling' document policy headers and ensures that profiles get forwarded with transactions + */ +export const rendererProfilingIntegration = defineIntegration(() => { return { name: INTEGRATION_NAME, setupOnce() { @@ -122,10 +125,12 @@ const rendererProfiling: IntegrationFn = () => { }); }, }; -}; +}); /** * Injects 'js-profiling' document policy headers and ensures that profiles get forwarded with transactions + * + * @deprecated Use `rendererProfilingIntegration()` instead */ // eslint-disable-next-line deprecation/deprecation -export const RendererProfiling = convertIntegrationFnToClass(INTEGRATION_NAME, rendererProfiling); +export const RendererProfiling = convertIntegrationFnToClass(INTEGRATION_NAME, rendererProfilingIntegration); diff --git a/src/main/integrations/screenshots.ts b/src/main/integrations/screenshots.ts index 1011405f..b896256e 100644 --- a/src/main/integrations/screenshots.ts +++ b/src/main/integrations/screenshots.ts @@ -1,5 +1,4 @@ -import { convertIntegrationFnToClass } from '@sentry/core'; -import { IntegrationFn } from '@sentry/types'; +import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core'; import { logger } from '@sentry/utils'; import { BrowserWindow } from 'electron'; @@ -8,7 +7,10 @@ import { ElectronMainOptions } from '../sdk'; const INTEGRATION_NAME = 'Screenshots'; -const screenshots: IntegrationFn = () => { +/** + * Captures and attaches screenshots to events + */ +export const screenshotsIntegration = defineIntegration(() => { return { name: INTEGRATION_NAME, setupOnce() { @@ -49,8 +51,12 @@ const screenshots: IntegrationFn = () => { return event; }, }; -}; +}); -/** Adds Screenshots to events */ +/** + * Adds Screenshots to events + * + * @deprecated Use `screenshotsIntegration()` instead + */ // eslint-disable-next-line deprecation/deprecation -export const Screenshots = convertIntegrationFnToClass(INTEGRATION_NAME, screenshots); +export const Screenshots = convertIntegrationFnToClass(INTEGRATION_NAME, screenshotsIntegration); diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts index 6544de67..2ff036ec 100644 --- a/src/main/integrations/sentry-minidump/index.ts +++ b/src/main/integrations/sentry-minidump/index.ts @@ -1,6 +1,13 @@ -import { applyScopeDataToEvent, captureEvent, convertIntegrationFnToClass, getCurrentScope, Scope } from '@sentry/core'; +import { + applyScopeDataToEvent, + captureEvent, + convertIntegrationFnToClass, + defineIntegration, + getCurrentScope, + Scope, +} from '@sentry/core'; import { NodeClient } from '@sentry/node'; -import { Event, IntegrationFn, ScopeData } from '@sentry/types'; +import { Event, ScopeData } from '@sentry/types'; import { logger, SentryError } from '@sentry/utils'; import { app, crashReporter } from 'electron'; @@ -21,7 +28,10 @@ interface PreviousRun { const INTEGRATION_NAME = 'SentryMinidump'; -const sentryMinidump: IntegrationFn = () => { +/** + * Sends minidumps via the Sentry uploader + */ +export const sentryMinidumpIntegration = defineIntegration(() => { /** Store to persist context information beyond application crashes. */ let scopeStore: BufferedWriteStore<PreviousRun> | undefined; // We need to store the scope in a variable here so it can be attached to minidumps @@ -232,8 +242,12 @@ const sentryMinidump: IntegrationFn = () => { .catch((error) => logger.error(error)); }, }; -}; +}); -/** Sends minidumps via the Sentry uploader */ +/** + * Sends minidumps via the Sentry uploader + * + * @deprecated Use `sentryMinidumpIntegration()` instead + */ // eslint-disable-next-line deprecation/deprecation -export const SentryMinidump = convertIntegrationFnToClass(INTEGRATION_NAME, sentryMinidump); +export const SentryMinidump = convertIntegrationFnToClass(INTEGRATION_NAME, sentryMinidumpIntegration); diff --git a/src/main/sdk.ts b/src/main/sdk.ts index a0e9465c..a05627de 100644 --- a/src/main/sdk.ts +++ b/src/main/sdk.ts @@ -6,34 +6,32 @@ import { Integration, Options } from '@sentry/types'; import { Session, session, WebContents } from 'electron'; import { getDefaultEnvironment, getDefaultReleaseName, getSdkInfo } from './context'; -import { - AdditionalContext, - ChildProcess, - ElectronBreadcrumbs, - MainContext, - MainProcessSession, - Net, - OnUncaughtException, - PreloadInjection, - RendererProfiling, - Screenshots, - SentryMinidump, -} from './integrations'; +import { additionalContextIntegration } from './integrations/additional-context'; +import { childProcessIntegration } from './integrations/child-process'; +import { electronBreadcrumbsIntegration } from './integrations/electron-breadcrumbs'; +import { mainContextIntegration } from './integrations/main-context'; +import { mainProcessSessionIntegration } from './integrations/main-process-session'; +import { electronNetIntegration } from './integrations/net-breadcrumbs'; +import { onUncaughtExceptionIntegration } from './integrations/onuncaughtexception'; +import { preloadInjectionIntegration } from './integrations/preload-injection'; +import { rendererProfilingIntegration } from './integrations/renderer-profiling'; +import { screenshotsIntegration } from './integrations/screenshots'; +import { sentryMinidumpIntegration } from './integrations/sentry-minidump'; import { configureIPC } from './ipc'; import { defaultStackParser } from './stack-parse'; import { ElectronOfflineTransportOptions, makeElectronOfflineTransport } from './transports/electron-offline-net'; export const defaultIntegrations: Integration[] = [ - new SentryMinidump(), - new ElectronBreadcrumbs(), - new Net(), - new MainContext(), - new ChildProcess(), - new OnUncaughtException(), - new PreloadInjection(), - new AdditionalContext(), - new Screenshots(), - new RendererProfiling(), + sentryMinidumpIntegration(), + electronBreadcrumbsIntegration(), + electronNetIntegration(), + mainContextIntegration(), + childProcessIntegration(), + onUncaughtExceptionIntegration(), + preloadInjectionIntegration(), + additionalContextIntegration(), + screenshotsIntegration(), + rendererProfilingIntegration(), // eslint-disable-next-line deprecation/deprecation ...defaultNodeIntegrations.filter( (integration) => integration.name !== 'OnUncaughtException' && integration.name !== 'Context', @@ -118,7 +116,7 @@ export function init(userOptions: ElectronMainOptions): void { // Unless autoSessionTracking is specifically disabled, we track sessions as the // lifetime of the Electron main process if (options.autoSessionTracking !== false) { - defaults.push(new MainProcessSession()); + defaults.push(mainProcessSessionIntegration()); // We don't want nodejs autoSessionTracking options.autoSessionTracking = false; } diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 6c309fdf..8e5e1c7f 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -83,6 +83,9 @@ export { } from '@sentry/core'; export type { SpanStatusType } from '@sentry/core'; +export { scopeToMainIntegration } from './integrations/scope-to-main'; +export { metricsAggregatorIntegration } from './integrations/metrics-aggregator'; + import { metrics as coreMetrics } from '@sentry/core'; import { MetricsAggregator } from './integrations/metrics-aggregator'; diff --git a/src/renderer/integrations/index.ts b/src/renderer/integrations/index.ts index d8fe8850..a7ef3eeb 100644 --- a/src/renderer/integrations/index.ts +++ b/src/renderer/integrations/index.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line deprecation/deprecation export { ScopeToMain } from './scope-to-main'; // eslint-disable-next-line deprecation/deprecation export { EventToMain } from './event-to-main'; diff --git a/src/renderer/integrations/metrics-aggregator.ts b/src/renderer/integrations/metrics-aggregator.ts index 5dea307e..80af5fb8 100644 --- a/src/renderer/integrations/metrics-aggregator.ts +++ b/src/renderer/integrations/metrics-aggregator.ts @@ -6,7 +6,12 @@ import { ElectronRendererMetricsAggregator } from '../metrics'; const INTEGRATION_NAME = 'MetricsAggregator'; -const metricsAggregatorIntegration: IntegrationFn = () => { +/** + * Enables Sentry metrics monitoring. + * + * @experimental This API is experimental and might having breaking changes in the future. + */ +export const metricsAggregatorIntegration: IntegrationFn = () => { return { name: INTEGRATION_NAME, setupOnce() { @@ -22,6 +27,8 @@ const metricsAggregatorIntegration: IntegrationFn = () => { * Enables Sentry metrics monitoring. * * @experimental This API is experimental and might having breaking changes in the future. + * + * @deprecated Use `metricsAggregatorIntegration()` instead */ // eslint-disable-next-line deprecation/deprecation export const MetricsAggregator = convertIntegrationFnToClass(INTEGRATION_NAME, metricsAggregatorIntegration); diff --git a/src/renderer/integrations/scope-to-main.ts b/src/renderer/integrations/scope-to-main.ts index 8f54d90f..540e4a0f 100644 --- a/src/renderer/integrations/scope-to-main.ts +++ b/src/renderer/integrations/scope-to-main.ts @@ -1,12 +1,14 @@ -import { convertIntegrationFnToClass, getCurrentScope } from '@sentry/core'; -import { IntegrationFn } from '@sentry/types'; +import { convertIntegrationFnToClass, defineIntegration, getCurrentScope } from '@sentry/core'; import { normalize } from '@sentry/utils'; import { getIPC } from '../ipc'; const INTEGRATION_NAME = 'ScopeToMain'; -const scopeToMain: IntegrationFn = () => { +/** + * Passes scope changes to the main process. + */ +export const scopeToMainIntegration = defineIntegration(() => { return { name: INTEGRATION_NAME, setupOnce() { @@ -25,10 +27,12 @@ const scopeToMain: IntegrationFn = () => { } }, }; -}; +}); /** * Passes scope changes to the main process. + * + * @deprecated Use `scopeToMainIntegration()` instead */ // eslint-disable-next-line deprecation/deprecation -export const ScopeToMain = convertIntegrationFnToClass(INTEGRATION_NAME, scopeToMain); +export const ScopeToMain = convertIntegrationFnToClass(INTEGRATION_NAME, scopeToMainIntegration); diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index fb753a30..1b52c8fa 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -8,13 +8,17 @@ import { logger } from '@sentry/utils'; import { ensureProcess, RendererProcessAnrOptions } from '../common'; import { enableAnrRendererMessages } from './anr'; -import { ScopeToMain } from './integrations'; -import { MetricsAggregator } from './integrations/metrics-aggregator'; +import { metricsAggregatorIntegration } from './integrations/metrics-aggregator'; +import { scopeToMainIntegration } from './integrations/scope-to-main'; import { electronRendererStackParser } from './stack-parse'; import { makeRendererTransport } from './transport'; -// eslint-disable-next-line deprecation/deprecation -export const defaultIntegrations = [...defaultBrowserIntegrations, new ScopeToMain(), new MetricsAggregator()]; +export const defaultIntegrations = [ + // eslint-disable-next-line deprecation/deprecation + ...defaultBrowserIntegrations, + scopeToMainIntegration(), + metricsAggregatorIntegration(), +]; interface ElectronRendererOptions extends BrowserOptions { /** diff --git a/test/e2e/test-apps/native-electron/gpu/src/main.js b/test/e2e/test-apps/native-electron/gpu/src/main.js index 745ce163..55e5870c 100644 --- a/test/e2e/test-apps/native-electron/gpu/src/main.js +++ b/test/e2e/test-apps/native-electron/gpu/src/main.js @@ -1,7 +1,7 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, electronMinidumpIntegration } = require('@sentry/electron/main'); app.commandLine.appendSwitch('enable-crashpad'); @@ -9,7 +9,7 @@ init({ dsn: '__DSN__', debug: true, autoSessionTracking: false, - integrations: [new Integrations.ElectronMinidump()], + integrations: [electronMinidumpIntegration()], initialScope: { user: { username: 'some_user' } }, onFatalError: () => {}, }); diff --git a/test/e2e/test-apps/native-electron/main-custom-release/src/main.js b/test/e2e/test-apps/native-electron/main-custom-release/src/main.js index 09948ed3..4ef55135 100644 --- a/test/e2e/test-apps/native-electron/main-custom-release/src/main.js +++ b/test/e2e/test-apps/native-electron/main-custom-release/src/main.js @@ -1,7 +1,7 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, electronMinidumpIntegration } = require('@sentry/electron/main'); app.commandLine.appendSwitch('enable-crashpad'); @@ -10,7 +10,7 @@ init({ debug: true, release: 'custom-name', autoSessionTracking: false, - integrations: [new Integrations.ElectronMinidump()], + integrations: [electronMinidumpIntegration()], initialScope: { user: { username: 'some_user' } }, onFatalError: () => {}, }); @@ -29,4 +29,4 @@ app.on('ready', () => { setTimeout(() => { process.crash(); }, 500); -}); \ No newline at end of file +}); diff --git a/test/e2e/test-apps/native-electron/main/src/main.js b/test/e2e/test-apps/native-electron/main/src/main.js index 57bb6d32..bfc09963 100644 --- a/test/e2e/test-apps/native-electron/main/src/main.js +++ b/test/e2e/test-apps/native-electron/main/src/main.js @@ -1,7 +1,7 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, electronMinidumpIntegration } = require('@sentry/electron/main'); app.commandLine.appendSwitch('enable-crashpad'); @@ -9,7 +9,7 @@ init({ dsn: '__DSN__', debug: true, autoSessionTracking: false, - integrations: [new Integrations.ElectronMinidump()], + integrations: [electronMinidumpIntegration()], initialScope: { user: { username: 'some_user' } }, onFatalError: () => {}, }); @@ -28,4 +28,4 @@ app.on('ready', () => { setTimeout(() => { process.crash(); }, 500); -}); \ No newline at end of file +}); diff --git a/test/e2e/test-apps/native-electron/renderer-custom-release/src/main.js b/test/e2e/test-apps/native-electron/renderer-custom-release/src/main.js index ba060c91..7e3a9ba3 100644 --- a/test/e2e/test-apps/native-electron/renderer-custom-release/src/main.js +++ b/test/e2e/test-apps/native-electron/renderer-custom-release/src/main.js @@ -1,7 +1,7 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, electronMinidumpIntegration } = require('@sentry/electron/main'); app.commandLine.appendSwitch('enable-crashpad'); @@ -10,7 +10,7 @@ init({ debug: true, release: 'custom-name', autoSessionTracking: false, - integrations: [new Integrations.ElectronMinidump()], + integrations: [electronMinidumpIntegration()], initialScope: { user: { username: 'some_user' } }, onFatalError: () => {}, }); @@ -25,4 +25,4 @@ app.on('ready', () => { }); mainWindow.loadFile(path.join(__dirname, 'index.html')); -}); \ No newline at end of file +}); diff --git a/test/e2e/test-apps/native-electron/renderer/src/main.js b/test/e2e/test-apps/native-electron/renderer/src/main.js index 70c42d1a..cc033a1a 100644 --- a/test/e2e/test-apps/native-electron/renderer/src/main.js +++ b/test/e2e/test-apps/native-electron/renderer/src/main.js @@ -1,7 +1,7 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, electronMinidumpIntegration } = require('@sentry/electron/main'); app.commandLine.appendSwitch('enable-crashpad'); @@ -9,7 +9,7 @@ init({ dsn: '__DSN__', debug: true, autoSessionTracking: false, - integrations: [new Integrations.ElectronMinidump()], + integrations: [electronMinidumpIntegration()], initialScope: { user: { username: 'some_user' } }, onFatalError: () => {}, }); @@ -24,4 +24,4 @@ app.on('ready', () => { }); mainWindow.loadFile(path.join(__dirname, 'index.html')); -}); \ No newline at end of file +}); diff --git a/test/e2e/test-apps/other/child-process/src/main.js b/test/e2e/test-apps/other/child-process/src/main.js index 7f2f2504..5f5ba027 100644 --- a/test/e2e/test-apps/other/child-process/src/main.js +++ b/test/e2e/test-apps/other/child-process/src/main.js @@ -1,13 +1,13 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, childProcessIntegration } = require('@sentry/electron/main'); init({ dsn: '__DSN__', debug: true, autoSessionTracking: false, - integrations: [new Integrations.ChildProcess({ events: ['killed'] })], + integrations: [childProcessIntegration({ events: ['killed'] })], onFatalError: () => {}, }); diff --git a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js index 3004ed38..84e83fcb 100644 --- a/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js +++ b/test/e2e/test-apps/sessions/abnormal-exit-electron-uploader/src/main.js @@ -1,7 +1,7 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, electronMinidumpIntegration, mainProcessSessionIntegration } = require('@sentry/electron/main'); app.commandLine.appendSwitch('enable-crashpad'); @@ -9,8 +9,8 @@ init({ dsn: '__DSN__', debug: true, integrations: (defaults) => [ - new Integrations.ElectronMinidump(), - new Integrations.MainProcessSession({ sendOnCreate: true }), + electronMinidumpIntegration(), + mainProcessSessionIntegration({ sendOnCreate: true }), ...defaults, ], initialScope: { user: { username: 'some_user' } }, diff --git a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js index ccb41cd2..dc80109c 100644 --- a/test/e2e/test-apps/sessions/abnormal-exit/src/main.js +++ b/test/e2e/test-apps/sessions/abnormal-exit/src/main.js @@ -1,12 +1,12 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, mainProcessSessionIntegration } = require('@sentry/electron/main'); init({ dsn: '__DSN__', debug: true, - integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })], + integrations: [mainProcessSessionIntegration({ sendOnCreate: true })], onFatalError: () => {}, }); diff --git a/test/e2e/test-apps/sessions/good/src/main.js b/test/e2e/test-apps/sessions/good/src/main.js index caa82591..3cc3f4be 100644 --- a/test/e2e/test-apps/sessions/good/src/main.js +++ b/test/e2e/test-apps/sessions/good/src/main.js @@ -1,12 +1,12 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, mainProcessSessionIntegration } = require('@sentry/electron/main'); init({ dsn: '__DSN__', debug: true, - integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })], + integrations: [mainProcessSessionIntegration({ sendOnCreate: true })], onFatalError: () => {}, }); diff --git a/test/e2e/test-apps/sessions/javascript-error/src/main.js b/test/e2e/test-apps/sessions/javascript-error/src/main.js index caa82591..3cc3f4be 100644 --- a/test/e2e/test-apps/sessions/javascript-error/src/main.js +++ b/test/e2e/test-apps/sessions/javascript-error/src/main.js @@ -1,12 +1,12 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, mainProcessSessionIntegration } = require('@sentry/electron/main'); init({ dsn: '__DSN__', debug: true, - integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })], + integrations: [mainProcessSessionIntegration({ sendOnCreate: true })], onFatalError: () => {}, }); diff --git a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js index 4f168635..ef629501 100644 --- a/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js +++ b/test/e2e/test-apps/sessions/native-crash-main-electron-uploader/src/main.js @@ -1,7 +1,7 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, mainProcessSessionIntegration, electronMinidumpIntegration } = require('@sentry/electron/main'); app.commandLine.appendSwitch('enable-crashpad'); @@ -9,8 +9,8 @@ init({ dsn: '__DSN__', debug: true, integrations: (defaults) => [ - new Integrations.ElectronMinidump(), - new Integrations.MainProcessSession({ sendOnCreate: true }), + electronMinidumpIntegration(), + mainProcessSessionIntegration({ sendOnCreate: true }), ...defaults, ], initialScope: { user: { username: 'some_user' } }, diff --git a/test/e2e/test-apps/sessions/native-crash-main/src/main.js b/test/e2e/test-apps/sessions/native-crash-main/src/main.js index 3861e739..4039a988 100644 --- a/test/e2e/test-apps/sessions/native-crash-main/src/main.js +++ b/test/e2e/test-apps/sessions/native-crash-main/src/main.js @@ -1,12 +1,12 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, mainProcessSessionIntegration } = require('@sentry/electron/main'); init({ dsn: '__DSN__', debug: true, - integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })], + integrations: [mainProcessSessionIntegration({ sendOnCreate: true })], onFatalError: () => {}, }); diff --git a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js index 958d8ca5..a7ba20ea 100644 --- a/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js +++ b/test/e2e/test-apps/sessions/native-crash-renderer-electron-uploader/src/main.js @@ -1,7 +1,7 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, mainProcessSessionIntegration, electronMinidumpIntegration } = require('@sentry/electron/main'); app.commandLine.appendSwitch('enable-crashpad'); @@ -9,8 +9,8 @@ init({ dsn: '__DSN__', debug: true, integrations: (defaults) => [ - new Integrations.ElectronMinidump(), - new Integrations.MainProcessSession({ sendOnCreate: true }), + electronMinidumpIntegration(), + mainProcessSessionIntegration({ sendOnCreate: true }), ...defaults, ], initialScope: { user: { username: 'some_user' } }, diff --git a/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js b/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js index 529b0d6d..4d244680 100644 --- a/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js +++ b/test/e2e/test-apps/sessions/native-crash-renderer/src/main.js @@ -1,12 +1,12 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, mainProcessSessionIntegration } = require('@sentry/electron/main'); init({ dsn: '__DSN__', debug: true, - integrations: [new Integrations.MainProcessSession({ sendOnCreate: true })], + integrations: [mainProcessSessionIntegration({ sendOnCreate: true })], onFatalError: () => {}, }); diff --git a/test/e2e/test-apps/sessions/window-bad/src/main.js b/test/e2e/test-apps/sessions/window-bad/src/main.js index 47675838..39c193f1 100644 --- a/test/e2e/test-apps/sessions/window-bad/src/main.js +++ b/test/e2e/test-apps/sessions/window-bad/src/main.js @@ -1,12 +1,12 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, browserWindowSessionIntegration } = require('@sentry/electron/main'); init({ dsn: '__DSN__', debug: true, - integrations: [new Integrations.BrowserWindowSession({ backgroundTimeoutSeconds: 1 })], + integrations: [browserWindowSessionIntegration({ backgroundTimeoutSeconds: 1 })], onFatalError: () => {}, }); diff --git a/test/e2e/test-apps/sessions/window-good/src/main.js b/test/e2e/test-apps/sessions/window-good/src/main.js index 6e6e5e65..f0b1e5aa 100644 --- a/test/e2e/test-apps/sessions/window-good/src/main.js +++ b/test/e2e/test-apps/sessions/window-good/src/main.js @@ -1,12 +1,12 @@ const path = require('path'); const { app, BrowserWindow } = require('electron'); -const { init, Integrations } = require('@sentry/electron'); +const { init, browserWindowSessionIntegration } = require('@sentry/electron/main'); init({ dsn: '__DSN__', debug: true, - integrations: [new Integrations.BrowserWindowSession({ backgroundTimeoutSeconds: 1 })], + integrations: [browserWindowSessionIntegration({ backgroundTimeoutSeconds: 1 })], onFatalError: () => {}, }); diff --git a/test/unit/net.test.ts b/test/unit/net.test.ts index f7a293a7..a0777b22 100644 --- a/test/unit/net.test.ts +++ b/test/unit/net.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable deprecation/deprecation */ import { expect, should, use } from 'chai'; import * as http from 'http'; import chaiAsPromised = require('chai-as-promised'); From 5a31360497238c9acb96c3c40e4d84d26bc2c4aa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 18 Feb 2024 10:45:51 -0400 Subject: [PATCH 207/239] test: New Electron versions (#829) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index ba77349c..e7655f57 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.4","27.2.1","28.1.2"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.9","27.3.2","28.2.3","29.0.0-beta.12"] From 58729ae01f951807f2c96013b1aa96666573d595 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 22 Feb 2024 12:13:38 -0400 Subject: [PATCH 208/239] test: New Electron versions (#831) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index e7655f57..6b06ecb0 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.9","27.3.2","28.2.3","29.0.0-beta.12"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.10","27.3.3","28.2.4","29.0.1"] From 6c03509dcc08028aed3e39a84fd7348184365a10 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 25 Feb 2024 19:14:35 -0400 Subject: [PATCH 209/239] test: Update Sentry SDKs to v7.102.1 (#823) --- package.json | 16 ++-- src/renderer/sdk.ts | 2 +- yarn.lock | 190 ++++++++++++++++++++++---------------------- 3 files changed, 104 insertions(+), 104 deletions(-) diff --git a/package.json b/package.json index 795316e8..f0c3dbf6 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.101.0", - "@sentry/core": "7.101.0", - "@sentry/node": "7.101.0", - "@sentry/types": "7.101.0", - "@sentry/utils": "7.101.0", + "@sentry/browser": "7.102.1", + "@sentry/core": "7.102.1", + "@sentry/node": "7.102.1", + "@sentry/types": "7.102.1", + "@sentry/utils": "7.102.1", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.101.0", - "@sentry-internal/typescript": "7.101.0", + "@sentry-internal/eslint-config-sdk": "7.102.1", + "@sentry-internal/typescript": "7.102.1", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", @@ -106,4 +106,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} +} \ No newline at end of file diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 1b52c8fa..630f78a1 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_101_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_102_1: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index a4d8f1f5..666b198f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.101.0": - version "7.101.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.101.0.tgz#cd9edca823f1d4b8cbb730ea7a7a942b043f2037" - integrity sha512-g3D6so/T3Hn3Wq8EvohhrNjsGxKSzvIoLAMjdWuEcK0k7sC0ZWh887jU9jiGDzhh74Y78AR8frlqy8qk7wlicA== +"@sentry-internal/eslint-config-sdk@7.102.1": + version "7.102.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.102.1.tgz#0d9aabf6af5d8387dfb9bd2576b1b83291d643a2" + integrity sha512-ZoQb+t2c5axa8Kqxr8l4axwASsZnIrDhdvqOnrL3OkroDjCj01KbsOZqZzNXa7eyJwZDf65avZajylqGikRerw== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.101.0" - "@sentry-internal/typescript" "7.101.0" + "@sentry-internal/eslint-plugin-sdk" "7.102.1" + "@sentry-internal/typescript" "7.102.1" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,98 +180,98 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.101.0": - version "7.101.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.101.0.tgz#fa8edbb7a214e6c87244f70b6e56f48a07bd025f" - integrity sha512-LesYGx/gKVPpAR80u6yDn10O5beUoRpExmVRoe2a4kOQaAxaU9Gj9gTP2ZtosuUhGfrKGXN/ljxDlFZiZkevoA== +"@sentry-internal/eslint-plugin-sdk@7.102.1": + version "7.102.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.102.1.tgz#2f78ba11e9ae2b34cf6f41af58eb16ef1bb68118" + integrity sha512-qM2mGyOIVslbdqxGYkDLgPNY9zWFiUT4PbX0+ngZv/FmaG+5jJpLzh19++Xv28WxI13yTdOGwgEg+zb/JfSM4A== dependencies: requireindex "~1.1.0" -"@sentry-internal/feedback@7.101.0": - version "7.101.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.101.0.tgz#cce033c80c498212a5b9a9540ff3ab8297eefbe2" - integrity sha512-uQBMYhZp/qkBEA/GXRMm1OfSkRkZojxBrCrFmzkWhJzXT+YbL57/M1uCcwkKmorKlg393Soh7MLULInwmcwWkA== - dependencies: - "@sentry/core" "7.101.0" - "@sentry/types" "7.101.0" - "@sentry/utils" "7.101.0" - -"@sentry-internal/replay-canvas@7.101.0": - version "7.101.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.101.0.tgz#0e32e1bebd4d125126e481c0df5f7186edeadbf4" - integrity sha512-fiz4kPpz/j6ZaD+vOcUXuO1HqD49djs4QwyTsRwCCi77EKZOGAaijpqWckDWyZs0dOOnbGGGC5x3o+CfTJcjKA== - dependencies: - "@sentry/core" "7.101.0" - "@sentry/replay" "7.101.0" - "@sentry/types" "7.101.0" - "@sentry/utils" "7.101.0" - -"@sentry-internal/tracing@7.101.0": - version "7.101.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.101.0.tgz#9a92ee722d071449a61c061867aa43a5beefcfb6" - integrity sha512-rp9oOLQs6vMuzvAnAHRRCNu5Z0o/ZVRI3WPYedxpdMWKD1Z3G9o+0joP+ZIUqHsamWWYiIgPqXgL9AK6AWjFRg== - dependencies: - "@sentry/core" "7.101.0" - "@sentry/types" "7.101.0" - "@sentry/utils" "7.101.0" - -"@sentry-internal/typescript@7.101.0": - version "7.101.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.101.0.tgz#376705403a17e282f1b9f540b9a1ffd2e4069b36" - integrity sha512-Pxpp18Z1H3T+THbRXLYiS327clCh/eOMC85+AQACK/URkU3cC8sQ4Qw27mIAgYLZVjYdGVa7fFrNoPJBI40NLQ== - -"@sentry/browser@7.101.0": - version "7.101.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.101.0.tgz#53ecfa8a9b0076b95930dff5bbb616e827608606" - integrity sha512-wj9YLfS/caR20Yq0hdEjsZHuhnYLU7Ht0SlcJx5MNMnArtmW1k2CWZz3PCqcW/rTZe53npVTe6eMqMccB4aPrQ== - dependencies: - "@sentry-internal/feedback" "7.101.0" - "@sentry-internal/replay-canvas" "7.101.0" - "@sentry-internal/tracing" "7.101.0" - "@sentry/core" "7.101.0" - "@sentry/replay" "7.101.0" - "@sentry/types" "7.101.0" - "@sentry/utils" "7.101.0" - -"@sentry/core@7.101.0": - version "7.101.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.101.0.tgz#7ddae48771bad6d3170df0d9807f86c39824dd0a" - integrity sha512-dRNrNV5OLGARkOGgxJsVDhA98Pev5G1LVJcud5E83cRg49BCUx2riqEtDP6iIS1nvem6cApkSnLC1kvl/T5/Cw== - dependencies: - "@sentry/types" "7.101.0" - "@sentry/utils" "7.101.0" - -"@sentry/node@7.101.0": - version "7.101.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.101.0.tgz#acafd4efc81035bb3ffe73ef92f348099c7c5df1" - integrity sha512-4z01VAFjRYk7XcajbWPJlhkPN6PBG4nVX8n1dl+OH2OeqTxFxcnmY5zR5v+AtEbNJgg5PMwy8mnnGZRG/wLZgA== - dependencies: - "@sentry-internal/tracing" "7.101.0" - "@sentry/core" "7.101.0" - "@sentry/types" "7.101.0" - "@sentry/utils" "7.101.0" - -"@sentry/replay@7.101.0": - version "7.101.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.101.0.tgz#66d199316be3f0fc2ed82a5294f519d58a2c2260" - integrity sha512-DSWkGKI/QhCAY+qm4mBnPob3/YsewisskVTak7KMDotJ75H85WFJhVwOMtvaEWIzVezCOItPv7ql51jTwhR3wA== - dependencies: - "@sentry-internal/tracing" "7.101.0" - "@sentry/core" "7.101.0" - "@sentry/types" "7.101.0" - "@sentry/utils" "7.101.0" - -"@sentry/types@7.101.0": - version "7.101.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.101.0.tgz#0174a32d6c12def73f438dc2a10bd52cc0ba0c81" - integrity sha512-YC+ltO/AlbEyJHjCUYQ4is1HcDT2zSMuLkIAcyQmK7fUdlGT4iR5sfENriY9ZopYHgjPdJKfhI8ohScam7zp/A== - -"@sentry/utils@7.101.0": - version "7.101.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.101.0.tgz#0eadb9709c9b6fbc03d509acf7fe6a00ab4e6220" - integrity sha512-px1NUkCLsD9UKLE4W4DghpyzmAVHgYhskrjRt30ubyUKqlggtHkOXRvS8MjuWowR/i0wF0GuTCbU9StBd7JMrw== - dependencies: - "@sentry/types" "7.101.0" +"@sentry-internal/feedback@7.102.1": + version "7.102.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.102.1.tgz#747f88c2881c76fddd16bce57cc4bc17b4c2af93" + integrity sha512-vY4hpLLMNLjICtWiizc7KeGbWOTUMGrF7C+9dPCztZww3CLgzWy9A7DvPj5hodRiYzpdRnAMl8yQnMFbYXh7bA== + dependencies: + "@sentry/core" "7.102.1" + "@sentry/types" "7.102.1" + "@sentry/utils" "7.102.1" + +"@sentry-internal/replay-canvas@7.102.1": + version "7.102.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.102.1.tgz#f098814ce21fdf95ef6d440d7ff8a6d3bfe73054" + integrity sha512-GUX4RWI10uRjdjeyvCLtAAhWRVqnAnG6+yNxWfqUQ3qMA7B7XxG43KT2UhSnulmErNzODQ6hA68rGPwwYeRIww== + dependencies: + "@sentry/core" "7.102.1" + "@sentry/replay" "7.102.1" + "@sentry/types" "7.102.1" + "@sentry/utils" "7.102.1" + +"@sentry-internal/tracing@7.102.1": + version "7.102.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.102.1.tgz#5c39c8f04a4a1a665fb6d368e1cd13605152f18b" + integrity sha512-RkFlFyAC0fQOvBbBqnq0CLmFW5m3JJz9pKbZd5vXPraWAlniKSb1bC/4DF9SlNx0FN1LWG+IU3ISdpzwwTeAGg== + dependencies: + "@sentry/core" "7.102.1" + "@sentry/types" "7.102.1" + "@sentry/utils" "7.102.1" + +"@sentry-internal/typescript@7.102.1": + version "7.102.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.102.1.tgz#9d9db74a361970feb8437f176d66b741ad561ed3" + integrity sha512-/nSDQ4LRm4/2Fzu4jQl60Yx/m81a2jV8F3loY+4NfKC2m+7xgkh1UyjrNZg0NsuNUWavicGLyLu+QS8iL/gMhg== + +"@sentry/browser@7.102.1": + version "7.102.1" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.102.1.tgz#30d3da587b2b6542b3d9e39d923ed28a2704d454" + integrity sha512-7BOfPBiM7Kp6q/iy0JIbsBTxIASV+zWXByqqjuEMWGj3X2u4oRIfm3gv4erPU/l+CORQUVQZLSPGoIoM1gbB/A== + dependencies: + "@sentry-internal/feedback" "7.102.1" + "@sentry-internal/replay-canvas" "7.102.1" + "@sentry-internal/tracing" "7.102.1" + "@sentry/core" "7.102.1" + "@sentry/replay" "7.102.1" + "@sentry/types" "7.102.1" + "@sentry/utils" "7.102.1" + +"@sentry/core@7.102.1": + version "7.102.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.102.1.tgz#855d37b6bba9986a9380864c823e696d3fc5aa01" + integrity sha512-QjY+LSP3du3J/C8x/FfEbRxgZgsWd0jfTJ4P7s9f219I1csK4OeBMC3UA1HwEa0pY/9OF6H/egW2CjOcMM5Pdg== + dependencies: + "@sentry/types" "7.102.1" + "@sentry/utils" "7.102.1" + +"@sentry/node@7.102.1": + version "7.102.1" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.102.1.tgz#3e787ab2628c5950916f25c335a4eb6c0ea93ea5" + integrity sha512-mb3vmM3SGuCruckPiv/Vafeh89UQavTfpPFoU6Jwe6dSpQ39BO8fO8k8Zev+/nP6r/FKLtX17mJobErHECXsYw== + dependencies: + "@sentry-internal/tracing" "7.102.1" + "@sentry/core" "7.102.1" + "@sentry/types" "7.102.1" + "@sentry/utils" "7.102.1" + +"@sentry/replay@7.102.1": + version "7.102.1" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.102.1.tgz#d6c17332d14dc312b124bbbda8f35d6a982b893c" + integrity sha512-HR/j9dGIvbrId8fh8mQlODx7JrhRmawEd9e9P3laPtogWCg/5TI+XPb2VGSaXOX9VWtb/6Z2UjHsaGjgg6YcuA== + dependencies: + "@sentry-internal/tracing" "7.102.1" + "@sentry/core" "7.102.1" + "@sentry/types" "7.102.1" + "@sentry/utils" "7.102.1" + +"@sentry/types@7.102.1": + version "7.102.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.102.1.tgz#18c35f32ecbd12afb9860ca2de7bfff542d10b27" + integrity sha512-htKorf3t/D0XYtM7foTcmG+rM47rDP6XdbvCcX5gBCuCYlzpM1vqCt2rl3FLktZC6TaIpFRJw1TLfx6m+x5jdA== + +"@sentry/utils@7.102.1": + version "7.102.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.102.1.tgz#45ddcdf2e700d40160347bbdf4233aff3179d398" + integrity sha512-+8WcFjHVV/HROXSAwMuUzveElBFC43EiTG7SNEBNgOUeQzQVTmbUZXyTVgLrUmtoWqvnIxCacoLxtZo1o67kdg== + dependencies: + "@sentry/types" "7.102.1" "@sindresorhus/is@^4.0.0": version "4.6.0" From a6fb53b9339949674aa026368fccef3626a9e9a6 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 28 Feb 2024 12:59:40 -0400 Subject: [PATCH 210/239] meta: Update changelog for v4.19.0 release (#836) --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0110034a..bd3bf299 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +## 4.19.0 + +- feat: Update from [v7.101.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.101.0) to + [v7.102.1](https://github.com/getsentry/sentry-javascript/releases/tag/7.102.1) of JavaScript SDKs (#823) +- feat: Deprecate class based integrations in favor of new functional style (#822) + ## 4.18.0 - feat: Update from [v7.92.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.92.0) to From 113a4554c3d94863b4ef147d59dc0be22927d93c Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Wed, 28 Feb 2024 17:00:26 +0000 Subject: [PATCH 211/239] release: 4.19.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index f0c3dbf6..9990a4d3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.18.0", + "version": "4.19.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", @@ -106,4 +106,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} \ No newline at end of file +} From 013a1bdae37022b9d2df341f7c7a2ee7f162d536 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 29 Feb 2024 13:15:41 +0000 Subject: [PATCH 212/239] test: New Electron versions (#838) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index 6b06ecb0..bbe1bd44 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.10","27.3.3","28.2.4","29.0.1"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.10","27.3.4","28.2.5","29.1.0"] From 4075a756d510aa5fc31c23b84550e98127ac50cb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 29 Feb 2024 13:15:52 +0000 Subject: [PATCH 213/239] test: New Sentry SDK version (#837) --- package.json | 16 ++-- src/renderer/sdk.ts | 2 +- yarn.lock | 190 ++++++++++++++++++++++---------------------- 3 files changed, 104 insertions(+), 104 deletions(-) diff --git a/package.json b/package.json index 9990a4d3..f5bd1bdf 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.102.1", - "@sentry/core": "7.102.1", - "@sentry/node": "7.102.1", - "@sentry/types": "7.102.1", - "@sentry/utils": "7.102.1", + "@sentry/browser": "7.103.0", + "@sentry/core": "7.103.0", + "@sentry/node": "7.103.0", + "@sentry/types": "7.103.0", + "@sentry/utils": "7.103.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.102.1", - "@sentry-internal/typescript": "7.102.1", + "@sentry-internal/eslint-config-sdk": "7.103.0", + "@sentry-internal/typescript": "7.103.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", @@ -106,4 +106,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} +} \ No newline at end of file diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 630f78a1..409f4064 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_102_1: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_103_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 666b198f..6b26588f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.102.1": - version "7.102.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.102.1.tgz#0d9aabf6af5d8387dfb9bd2576b1b83291d643a2" - integrity sha512-ZoQb+t2c5axa8Kqxr8l4axwASsZnIrDhdvqOnrL3OkroDjCj01KbsOZqZzNXa7eyJwZDf65avZajylqGikRerw== +"@sentry-internal/eslint-config-sdk@7.103.0": + version "7.103.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.103.0.tgz#6d372172ed44d6ab4c34bcfcb22149933442eba8" + integrity sha512-YUnPtNMv0ERPOr7eQcuwXlWfccdXITIsw84PCg+9LtDFWtUfmpopCQ0H40Xfp5+Meg90moEPd17cGqAb4vbHyA== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.102.1" - "@sentry-internal/typescript" "7.102.1" + "@sentry-internal/eslint-plugin-sdk" "7.103.0" + "@sentry-internal/typescript" "7.103.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,98 +180,98 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.102.1": - version "7.102.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.102.1.tgz#2f78ba11e9ae2b34cf6f41af58eb16ef1bb68118" - integrity sha512-qM2mGyOIVslbdqxGYkDLgPNY9zWFiUT4PbX0+ngZv/FmaG+5jJpLzh19++Xv28WxI13yTdOGwgEg+zb/JfSM4A== +"@sentry-internal/eslint-plugin-sdk@7.103.0": + version "7.103.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.103.0.tgz#015a5a655c80f51371dea1da4513cc5b8ed05a2c" + integrity sha512-kBzBmOgIFipTmKYQkCGgSndZHuVCLVjt2VCKXssy6KNXMAU6DhvMXFkhjv1d+bjCH0+F9gA3n0ys87mJA18o3g== dependencies: requireindex "~1.1.0" -"@sentry-internal/feedback@7.102.1": - version "7.102.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.102.1.tgz#747f88c2881c76fddd16bce57cc4bc17b4c2af93" - integrity sha512-vY4hpLLMNLjICtWiizc7KeGbWOTUMGrF7C+9dPCztZww3CLgzWy9A7DvPj5hodRiYzpdRnAMl8yQnMFbYXh7bA== - dependencies: - "@sentry/core" "7.102.1" - "@sentry/types" "7.102.1" - "@sentry/utils" "7.102.1" - -"@sentry-internal/replay-canvas@7.102.1": - version "7.102.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.102.1.tgz#f098814ce21fdf95ef6d440d7ff8a6d3bfe73054" - integrity sha512-GUX4RWI10uRjdjeyvCLtAAhWRVqnAnG6+yNxWfqUQ3qMA7B7XxG43KT2UhSnulmErNzODQ6hA68rGPwwYeRIww== - dependencies: - "@sentry/core" "7.102.1" - "@sentry/replay" "7.102.1" - "@sentry/types" "7.102.1" - "@sentry/utils" "7.102.1" - -"@sentry-internal/tracing@7.102.1": - version "7.102.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.102.1.tgz#5c39c8f04a4a1a665fb6d368e1cd13605152f18b" - integrity sha512-RkFlFyAC0fQOvBbBqnq0CLmFW5m3JJz9pKbZd5vXPraWAlniKSb1bC/4DF9SlNx0FN1LWG+IU3ISdpzwwTeAGg== - dependencies: - "@sentry/core" "7.102.1" - "@sentry/types" "7.102.1" - "@sentry/utils" "7.102.1" - -"@sentry-internal/typescript@7.102.1": - version "7.102.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.102.1.tgz#9d9db74a361970feb8437f176d66b741ad561ed3" - integrity sha512-/nSDQ4LRm4/2Fzu4jQl60Yx/m81a2jV8F3loY+4NfKC2m+7xgkh1UyjrNZg0NsuNUWavicGLyLu+QS8iL/gMhg== - -"@sentry/browser@7.102.1": - version "7.102.1" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.102.1.tgz#30d3da587b2b6542b3d9e39d923ed28a2704d454" - integrity sha512-7BOfPBiM7Kp6q/iy0JIbsBTxIASV+zWXByqqjuEMWGj3X2u4oRIfm3gv4erPU/l+CORQUVQZLSPGoIoM1gbB/A== - dependencies: - "@sentry-internal/feedback" "7.102.1" - "@sentry-internal/replay-canvas" "7.102.1" - "@sentry-internal/tracing" "7.102.1" - "@sentry/core" "7.102.1" - "@sentry/replay" "7.102.1" - "@sentry/types" "7.102.1" - "@sentry/utils" "7.102.1" - -"@sentry/core@7.102.1": - version "7.102.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.102.1.tgz#855d37b6bba9986a9380864c823e696d3fc5aa01" - integrity sha512-QjY+LSP3du3J/C8x/FfEbRxgZgsWd0jfTJ4P7s9f219I1csK4OeBMC3UA1HwEa0pY/9OF6H/egW2CjOcMM5Pdg== - dependencies: - "@sentry/types" "7.102.1" - "@sentry/utils" "7.102.1" - -"@sentry/node@7.102.1": - version "7.102.1" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.102.1.tgz#3e787ab2628c5950916f25c335a4eb6c0ea93ea5" - integrity sha512-mb3vmM3SGuCruckPiv/Vafeh89UQavTfpPFoU6Jwe6dSpQ39BO8fO8k8Zev+/nP6r/FKLtX17mJobErHECXsYw== - dependencies: - "@sentry-internal/tracing" "7.102.1" - "@sentry/core" "7.102.1" - "@sentry/types" "7.102.1" - "@sentry/utils" "7.102.1" - -"@sentry/replay@7.102.1": - version "7.102.1" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.102.1.tgz#d6c17332d14dc312b124bbbda8f35d6a982b893c" - integrity sha512-HR/j9dGIvbrId8fh8mQlODx7JrhRmawEd9e9P3laPtogWCg/5TI+XPb2VGSaXOX9VWtb/6Z2UjHsaGjgg6YcuA== - dependencies: - "@sentry-internal/tracing" "7.102.1" - "@sentry/core" "7.102.1" - "@sentry/types" "7.102.1" - "@sentry/utils" "7.102.1" - -"@sentry/types@7.102.1": - version "7.102.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.102.1.tgz#18c35f32ecbd12afb9860ca2de7bfff542d10b27" - integrity sha512-htKorf3t/D0XYtM7foTcmG+rM47rDP6XdbvCcX5gBCuCYlzpM1vqCt2rl3FLktZC6TaIpFRJw1TLfx6m+x5jdA== - -"@sentry/utils@7.102.1": - version "7.102.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.102.1.tgz#45ddcdf2e700d40160347bbdf4233aff3179d398" - integrity sha512-+8WcFjHVV/HROXSAwMuUzveElBFC43EiTG7SNEBNgOUeQzQVTmbUZXyTVgLrUmtoWqvnIxCacoLxtZo1o67kdg== - dependencies: - "@sentry/types" "7.102.1" +"@sentry-internal/feedback@7.103.0": + version "7.103.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.103.0.tgz#0b382b8fc9fc583be1164ff80df07fbe87b565b3" + integrity sha512-2nYoCfP7FpiUR+xxO5y5BL2ajHrhM4fL7HSup6QKNn7gI7vLyllYOOuYFNHhSmsXCD0i00U8DBClGLcn+6DQqw== + dependencies: + "@sentry/core" "7.103.0" + "@sentry/types" "7.103.0" + "@sentry/utils" "7.103.0" + +"@sentry-internal/replay-canvas@7.103.0": + version "7.103.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.103.0.tgz#d601e56c04fd51b226f6c2933e28a8ce6955e3ba" + integrity sha512-EyDRMdlSqtwY8zGFhOWwl+nwwo98hlhJz+bpF5PQ6VmFpbplh6Wqfx2p+cPXQr40TGMMC4+vPFlSWTOMjcO9zQ== + dependencies: + "@sentry/core" "7.103.0" + "@sentry/replay" "7.103.0" + "@sentry/types" "7.103.0" + "@sentry/utils" "7.103.0" + +"@sentry-internal/tracing@7.103.0": + version "7.103.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.103.0.tgz#b18ef65f610099ee2fc74f91f9ccfdb0353580c4" + integrity sha512-sZ/Wao8HOvGaBs7WlOdflMpHGAFkOBWL6hBiirHaOy5d+IDm7n7et5U6zhvcfiyYBO4nY36gy1Tg5mw+aNO0Vw== + dependencies: + "@sentry/core" "7.103.0" + "@sentry/types" "7.103.0" + "@sentry/utils" "7.103.0" + +"@sentry-internal/typescript@7.103.0": + version "7.103.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.103.0.tgz#87bce84d0830613cb8b32145c31a0add927af738" + integrity sha512-USR+iORlHVChJ/VW2bAMOu9lWIlEmboADU6rbyZoJaWT10NF3F4+yE2Ik17tB181/DHkpaEwiNQbLkGM96eeKQ== + +"@sentry/browser@7.103.0": + version "7.103.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.103.0.tgz#b509394d238e67f6225339c242701710ea347508" + integrity sha512-lP3Oplnwo1lY8ltk8SWzQURbxnSfVhYA099mVs1T95sdwXS16Za6SX7Ld/9T506ZW/WyoU4VCq7eKtG2kPFhMQ== + dependencies: + "@sentry-internal/feedback" "7.103.0" + "@sentry-internal/replay-canvas" "7.103.0" + "@sentry-internal/tracing" "7.103.0" + "@sentry/core" "7.103.0" + "@sentry/replay" "7.103.0" + "@sentry/types" "7.103.0" + "@sentry/utils" "7.103.0" + +"@sentry/core@7.103.0": + version "7.103.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.103.0.tgz#8f626362c96f9aa4b4a52042c431d16372491dc1" + integrity sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw== + dependencies: + "@sentry/types" "7.103.0" + "@sentry/utils" "7.103.0" + +"@sentry/node@7.103.0": + version "7.103.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.103.0.tgz#9cf488086717c2920c43568432d14232b6783a9e" + integrity sha512-/bS/WNeO+PEd0r3o3LN0XGJV+l7hLNy1dTcn61VRgWGVs8SqMBb3uAvXAibZ9zGTCkaX/Ky3JumMcOOoxmNCtg== + dependencies: + "@sentry-internal/tracing" "7.103.0" + "@sentry/core" "7.103.0" + "@sentry/types" "7.103.0" + "@sentry/utils" "7.103.0" + +"@sentry/replay@7.103.0": + version "7.103.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.103.0.tgz#6b420f1a33784e76533bb72ea9743e8ad34c0b23" + integrity sha512-I37komyb+DruQG8lPPPOFxLLbOijNXeTxiWLsIn+KFZqRtKqxxQWdNnk56V4YSTpFzxnMEFMRCpXhncuTWu4LA== + dependencies: + "@sentry-internal/tracing" "7.103.0" + "@sentry/core" "7.103.0" + "@sentry/types" "7.103.0" + "@sentry/utils" "7.103.0" + +"@sentry/types@7.103.0": + version "7.103.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.103.0.tgz#f413f922216c97ec86bae39f9d527669d8afedbd" + integrity sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw== + +"@sentry/utils@7.103.0": + version "7.103.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.103.0.tgz#803b76e2adfdcec0d4ab6369cc8990dde19b55f4" + integrity sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg== + dependencies: + "@sentry/types" "7.103.0" "@sindresorhus/is@^4.0.0": version "4.6.0" From 0db67356157aad9d9520b509637962362c2d12b5 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 29 Feb 2024 16:08:45 +0000 Subject: [PATCH 214/239] test: Add test for `captureConsoleIntegration` (#835) --- test/e2e/recipe/index.ts | 1 + .../other/capture-console/event.json | 75 +++++++++++++++++++ .../other/capture-console/package.json | 9 +++ .../other/capture-console/recipe.yml | 2 + .../other/capture-console/src/index.html | 21 ++++++ .../other/capture-console/src/main.js | 23 ++++++ 6 files changed, 131 insertions(+) create mode 100644 test/e2e/test-apps/other/capture-console/event.json create mode 100644 test/e2e/test-apps/other/capture-console/package.json create mode 100644 test/e2e/test-apps/other/capture-console/recipe.yml create mode 100644 test/e2e/test-apps/other/capture-console/src/index.html create mode 100644 test/e2e/test-apps/other/capture-console/src/main.js diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts index 4f37dca1..44b33262 100644 --- a/test/e2e/recipe/index.ts +++ b/test/e2e/recipe/index.ts @@ -171,6 +171,7 @@ export class RecipeRunner { // We replace the Sentry JavaScript dependency versions to match that of @sentry/core .replace(/"@sentry\/replay": ".*"/, `"@sentry/replay": "${JS_VERSION}"`) .replace(/"@sentry\/react": ".*"/, `"@sentry/react": "${JS_VERSION}"`) + .replace(/"@sentry\/integrations": ".*"/, `"@sentry/integrations": "${JS_VERSION}"`) .replace(/"@sentry\/vue": ".*"/, `"@sentry/vue": "${JS_VERSION}"`); } diff --git a/test/e2e/test-apps/other/capture-console/event.json b/test/e2e/test-apps/other/capture-console/event.json new file mode 100644 index 00000000..e055c092 --- /dev/null +++ b/test/e2e/test-apps/other/capture-console/event.json @@ -0,0 +1,75 @@ +{ + "method": "envelope", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "appId": "277345", + "data": { + "sdk": { + "name": "sentry.javascript.electron", + "packages": [ + { + "name": "npm:@sentry/electron", + "version": "{{version}}" + } + ], + "version": "{{version}}" + }, + "contexts": { + "app": { + "app_name": "capture-console", + "app_version": "1.0.0", + "app_start_time": "{{time}}" + }, + "browser": { + "name": "Chrome" + }, + "chrome": { + "name": "Chrome", + "type": "runtime", + "version": "{{version}}" + }, + "device": { + "arch": "{{arch}}", + "family": "Desktop", + "memory_size": 0, + "free_memory": 0, + "processor_count": 0, + "processor_frequency": 0, + "cpu_description": "{{cpu}}", + "screen_resolution":"{{screen}}", + "screen_density": 1, + "language": "{{language}}" + }, + "node": { + "name": "Node", + "type": "runtime", + "version": "{{version}}" + }, + "os": { + "name": "{{platform}}", + "version": "{{version}}" + }, + "runtime": { + "name": "Electron", + "version": "{{version}}" + } + }, + "message": "This is an error message", + "release": "capture-console@1.0.0", + "environment": "development", + "user": { + "ip_address": "{{auto}}" + }, + "event_id": "{{id}}", + "platform": "javascript", + "timestamp": 0, + "breadcrumbs": [], + "request": { + "url": "app:///src/index.html" + }, + "tags": { + "event.environment": "javascript", + "event.origin": "electron", + "event_type": "javascript" + } + } +} diff --git a/test/e2e/test-apps/other/capture-console/package.json b/test/e2e/test-apps/other/capture-console/package.json new file mode 100644 index 00000000..637f0b66 --- /dev/null +++ b/test/e2e/test-apps/other/capture-console/package.json @@ -0,0 +1,9 @@ +{ + "name": "capture-console", + "version": "1.0.0", + "main": "src/main.js", + "dependencies": { + "@sentry/electron": "3.0.0", + "@sentry/integrations": "7.0.0" + } +} diff --git a/test/e2e/test-apps/other/capture-console/recipe.yml b/test/e2e/test-apps/other/capture-console/recipe.yml new file mode 100644 index 00000000..fe01d299 --- /dev/null +++ b/test/e2e/test-apps/other/capture-console/recipe.yml @@ -0,0 +1,2 @@ +description: Browser Tracing +command: yarn diff --git a/test/e2e/test-apps/other/capture-console/src/index.html b/test/e2e/test-apps/other/capture-console/src/index.html new file mode 100644 index 00000000..272654c0 --- /dev/null +++ b/test/e2e/test-apps/other/capture-console/src/index.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + </head> + <body> + <script> + const { init } = require('@sentry/electron/renderer'); + const { captureConsoleIntegration } = require('@sentry/integrations'); + + init({ + debug: true, + integrations: [captureConsoleIntegration()], + }); + + setTimeout(() => { + console.error('This is an error message'); + }, 1000); + </script> + </body> +</html> diff --git a/test/e2e/test-apps/other/capture-console/src/main.js b/test/e2e/test-apps/other/capture-console/src/main.js new file mode 100644 index 00000000..bede8faa --- /dev/null +++ b/test/e2e/test-apps/other/capture-console/src/main.js @@ -0,0 +1,23 @@ +const path = require('path'); + +const { app, BrowserWindow } = require('electron'); +const { init } = require('@sentry/electron'); + +init({ + dsn: '__DSN__', + debug: true, + autoSessionTracking: false, + onFatalError: () => {}, +}); + +app.on('ready', () => { + const mainWindow = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + }, + }); + + mainWindow.loadFile(path.join(__dirname, 'index.html')); +}); From 935dcd58077f853f70ff940a627d3ce4eb2ef1a4 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 29 Feb 2024 19:26:39 +0000 Subject: [PATCH 215/239] feat: Deprecate last class based integration (#840) --- src/index.ts | 4 +- src/main/anr.ts | 5 +- src/main/index.ts | 5 ++ src/main/integrations/anr.ts | 77 ++++++--------------- src/renderer/index.ts | 3 + test/e2e/test-apps/anr/anr-main/src/main.js | 4 +- 6 files changed, 36 insertions(+), 62 deletions(-) diff --git a/src/index.ts b/src/index.ts index 4abdc545..053b9368 100644 --- a/src/index.ts +++ b/src/index.ts @@ -207,11 +207,11 @@ export async function flush(timeout?: number): Promise<boolean> { * @deprecated Use `Anr` integration instead. * * ```js - * import { init, Integrations } from '@sentry/electron'; + * import { init, anrIntegration } from '@sentry/electron'; * * init({ * dsn: "__DSN__", - * integrations: [new Integrations.Anr({ captureStackTrace: true })], + * integrations: [anrIntegration({ captureStackTrace: true })], * }); * ``` */ diff --git a/src/main/anr.ts b/src/main/anr.ts index b7f47f25..353f0bc4 100644 --- a/src/main/anr.ts +++ b/src/main/anr.ts @@ -186,15 +186,16 @@ interface LegacyOptions { * @deprecated Use `Anr` integration instead. * * ```js - * import { init, Integrations } from '@sentry/electron'; + * import { init, anrIntegration } from '@sentry/electron'; * * init({ * dsn: "__DSN__", - * integrations: [new Integrations.Anr({ captureStackTrace: true })], + * integrations: [anrIntegration({ captureStackTrace: true })], * }); * ``` */ export function enableMainProcessAnrDetection(options: Partial<LegacyOptions> = {}): Promise<void> { + // eslint-disable-next-line deprecation/deprecation const integration = new Anr(options); const client = getClient() as NodeClient; integration.setup?.(client); diff --git a/src/main/index.ts b/src/main/index.ts index 9c8b9ae6..96e6a1f9 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -99,6 +99,7 @@ export { electronNetIntegration } from './integrations/net-breadcrumbs'; export { childProcessIntegration } from './integrations/child-process'; export { screenshotsIntegration } from './integrations/screenshots'; export { rendererProfileFromIpc } from './integrations/renderer-profiling'; +export { anrIntegration } from './integrations/anr'; export type { NodeOptions } from '@sentry/node'; // eslint-disable-next-line deprecation/deprecation @@ -106,6 +107,10 @@ export { flush, close, NodeClient, lastEventId } from '@sentry/node'; export { makeElectronTransport } from './transports/electron-net'; export { makeElectronOfflineTransport } from './transports/electron-offline-net'; + +/** + * @deprecated All integrations are now exported from the root of the package. + */ export const Integrations = { ...NodeIntegrations, ...ElectronMainIntegrations }; export type { ElectronMainOptions } from './sdk'; diff --git a/src/main/integrations/anr.ts b/src/main/integrations/anr.ts index 50fcda95..624868e1 100644 --- a/src/main/integrations/anr.ts +++ b/src/main/integrations/anr.ts @@ -1,66 +1,31 @@ -import { Integrations } from '@sentry/node'; -import { Primitive } from '@sentry/types'; +import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core'; +import { anrIntegration as nodeAnrIntegration } from '@sentry/node'; import { app } from 'electron'; import { ELECTRON_MAJOR_VERSION } from '../electron-normalize'; /** - * ConstructorParameters<typeof Integrations.Anr> doesn't work below because integration constructor types are broken here: - * https://github.com/getsentry/sentry-javascript/blob/f28f3a968c52075694ecef4efef354f806fec100/packages/node/src/index.ts#L100-L116 + * Starts a worker thread to detect App Not Responding (ANR) events */ -interface Options { - /** - * Interval to send heartbeat messages to the ANR worker. - * - * Defaults to 50ms. - */ - pollInterval: number; - /** - * Threshold in milliseconds to trigger an ANR event. - * - * Defaults to 5000ms. - */ - anrThreshold: number; - /** - * Whether to capture a stack trace when the ANR event is triggered. - * - * Defaults to `false`. - * - * This uses the node debugger which enables the inspector API and opens the required ports. - */ - captureStackTrace: boolean; - /** - * Tags to include with ANR events. - */ - staticTags: { [key: string]: Primitive }; - /** - * @ignore Internal use only. - * - * If this is supplied, stack frame filenames will be rewritten to be relative to this path. - */ - appRootPath: string | undefined; -} +export const anrIntegration = defineIntegration((options: Parameters<typeof nodeAnrIntegration>[0] = {}) => { + if (ELECTRON_MAJOR_VERSION < 22) { + throw new Error('Main process ANR detection requires Electron v22+'); + } -// We can't use the functional style of integration until they are exported as functions... + return nodeAnrIntegration({ + ...options, + staticTags: { + 'event.environment': 'javascript', + 'event.origin': 'electron', + 'event.process': 'browser', + ...options.staticTags, + }, + appRootPath: app.getAppPath(), + }); +}); /** - * Starts a worker thread to detect App Not Responding (ANR) events + * @deprecated Use `anrIntegration()` instead. */ -export class Anr extends Integrations.Anr { - public constructor(options: Partial<Options> = {}) { - if (ELECTRON_MAJOR_VERSION < 22) { - throw new Error('Main process ANR detection requires Electron v22+'); - } - - super({ - ...options, - staticTags: { - 'event.environment': 'javascript', - 'event.origin': 'electron', - 'event.process': 'browser', - ...options.staticTags, - }, - appRootPath: app.getAppPath(), - }); - } -} +// eslint-disable-next-line deprecation/deprecation +export const Anr = convertIntegrationFnToClass(anrIntegration.name, anrIntegration); diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 8e5e1c7f..73f4c7d1 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -124,6 +124,9 @@ export { // eslint-disable-next-line deprecation/deprecation export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser'; +/** + * @deprecated All integrations are now exported from the root of the package. + */ // eslint-disable-next-line deprecation/deprecation export const Integrations = { ...BrowserIntegrations, ...ElectronRendererIntegrations }; export { init, defaultIntegrations } from './sdk'; diff --git a/test/e2e/test-apps/anr/anr-main/src/main.js b/test/e2e/test-apps/anr/anr-main/src/main.js index d30d2748..81f65bb3 100644 --- a/test/e2e/test-apps/anr/anr-main/src/main.js +++ b/test/e2e/test-apps/anr/anr-main/src/main.js @@ -1,13 +1,13 @@ const crypto = require('crypto'); const { app } = require('electron'); -const { init, Integrations } = require('@sentry/electron/main'); +const { init, anrIntegration } = require('@sentry/electron/main'); init({ dsn: '__DSN__', debug: true, onFatalError: () => {}, - integrations: [new Integrations.Anr({ captureStackTrace: true, anrThreshold: 1000 })], + integrations: [anrIntegration({ captureStackTrace: true, anrThreshold: 1000 })], }); function longWork() { From e4c75977b73c91b500960e5ef089a880cab76b5c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 11:05:41 +0000 Subject: [PATCH 216/239] test: New Sentry SDK version (#841) --- package.json | 14 ++-- src/renderer/sdk.ts | 2 +- yarn.lock | 190 ++++++++++++++++++++++---------------------- 3 files changed, 103 insertions(+), 103 deletions(-) diff --git a/package.json b/package.json index f5bd1bdf..c61b8dd0 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.103.0", - "@sentry/core": "7.103.0", - "@sentry/node": "7.103.0", - "@sentry/types": "7.103.0", - "@sentry/utils": "7.103.0", + "@sentry/browser": "7.105.0", + "@sentry/core": "7.105.0", + "@sentry/node": "7.105.0", + "@sentry/types": "7.105.0", + "@sentry/utils": "7.105.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.103.0", - "@sentry-internal/typescript": "7.103.0", + "@sentry-internal/eslint-config-sdk": "7.105.0", + "@sentry-internal/typescript": "7.105.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 409f4064..ff155999 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_103_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_105_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 6b26588f..03df5b6d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.103.0": - version "7.103.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.103.0.tgz#6d372172ed44d6ab4c34bcfcb22149933442eba8" - integrity sha512-YUnPtNMv0ERPOr7eQcuwXlWfccdXITIsw84PCg+9LtDFWtUfmpopCQ0H40Xfp5+Meg90moEPd17cGqAb4vbHyA== +"@sentry-internal/eslint-config-sdk@7.105.0": + version "7.105.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.105.0.tgz#7eff67686b835c64117a0d4a8b669875f2ad413a" + integrity sha512-ml6V8uGqkGVd9BDXUzoixPtE8ny0CJKxlWoOepQ8Gp5rzLSr1hE2kP/gVwKTr6RFYXAFVTKADdwEa3RljtVqPg== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.103.0" - "@sentry-internal/typescript" "7.103.0" + "@sentry-internal/eslint-plugin-sdk" "7.105.0" + "@sentry-internal/typescript" "7.105.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,98 +180,98 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.103.0": - version "7.103.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.103.0.tgz#015a5a655c80f51371dea1da4513cc5b8ed05a2c" - integrity sha512-kBzBmOgIFipTmKYQkCGgSndZHuVCLVjt2VCKXssy6KNXMAU6DhvMXFkhjv1d+bjCH0+F9gA3n0ys87mJA18o3g== +"@sentry-internal/eslint-plugin-sdk@7.105.0": + version "7.105.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.105.0.tgz#1fea2f32394089a72617f97821871e446e4851cb" + integrity sha512-nKnoy26ma2jm4dks6Qkq8UM6sKabINzRRVwgKhzLnhEqNbilq2GJhQAoKPQ1JCGKg+okfBBOs6WdWPcwPJBYWQ== dependencies: requireindex "~1.1.0" -"@sentry-internal/feedback@7.103.0": - version "7.103.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.103.0.tgz#0b382b8fc9fc583be1164ff80df07fbe87b565b3" - integrity sha512-2nYoCfP7FpiUR+xxO5y5BL2ajHrhM4fL7HSup6QKNn7gI7vLyllYOOuYFNHhSmsXCD0i00U8DBClGLcn+6DQqw== - dependencies: - "@sentry/core" "7.103.0" - "@sentry/types" "7.103.0" - "@sentry/utils" "7.103.0" - -"@sentry-internal/replay-canvas@7.103.0": - version "7.103.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.103.0.tgz#d601e56c04fd51b226f6c2933e28a8ce6955e3ba" - integrity sha512-EyDRMdlSqtwY8zGFhOWwl+nwwo98hlhJz+bpF5PQ6VmFpbplh6Wqfx2p+cPXQr40TGMMC4+vPFlSWTOMjcO9zQ== - dependencies: - "@sentry/core" "7.103.0" - "@sentry/replay" "7.103.0" - "@sentry/types" "7.103.0" - "@sentry/utils" "7.103.0" - -"@sentry-internal/tracing@7.103.0": - version "7.103.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.103.0.tgz#b18ef65f610099ee2fc74f91f9ccfdb0353580c4" - integrity sha512-sZ/Wao8HOvGaBs7WlOdflMpHGAFkOBWL6hBiirHaOy5d+IDm7n7et5U6zhvcfiyYBO4nY36gy1Tg5mw+aNO0Vw== - dependencies: - "@sentry/core" "7.103.0" - "@sentry/types" "7.103.0" - "@sentry/utils" "7.103.0" - -"@sentry-internal/typescript@7.103.0": - version "7.103.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.103.0.tgz#87bce84d0830613cb8b32145c31a0add927af738" - integrity sha512-USR+iORlHVChJ/VW2bAMOu9lWIlEmboADU6rbyZoJaWT10NF3F4+yE2Ik17tB181/DHkpaEwiNQbLkGM96eeKQ== - -"@sentry/browser@7.103.0": - version "7.103.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.103.0.tgz#b509394d238e67f6225339c242701710ea347508" - integrity sha512-lP3Oplnwo1lY8ltk8SWzQURbxnSfVhYA099mVs1T95sdwXS16Za6SX7Ld/9T506ZW/WyoU4VCq7eKtG2kPFhMQ== - dependencies: - "@sentry-internal/feedback" "7.103.0" - "@sentry-internal/replay-canvas" "7.103.0" - "@sentry-internal/tracing" "7.103.0" - "@sentry/core" "7.103.0" - "@sentry/replay" "7.103.0" - "@sentry/types" "7.103.0" - "@sentry/utils" "7.103.0" - -"@sentry/core@7.103.0": - version "7.103.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.103.0.tgz#8f626362c96f9aa4b4a52042c431d16372491dc1" - integrity sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw== - dependencies: - "@sentry/types" "7.103.0" - "@sentry/utils" "7.103.0" - -"@sentry/node@7.103.0": - version "7.103.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.103.0.tgz#9cf488086717c2920c43568432d14232b6783a9e" - integrity sha512-/bS/WNeO+PEd0r3o3LN0XGJV+l7hLNy1dTcn61VRgWGVs8SqMBb3uAvXAibZ9zGTCkaX/Ky3JumMcOOoxmNCtg== - dependencies: - "@sentry-internal/tracing" "7.103.0" - "@sentry/core" "7.103.0" - "@sentry/types" "7.103.0" - "@sentry/utils" "7.103.0" - -"@sentry/replay@7.103.0": - version "7.103.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.103.0.tgz#6b420f1a33784e76533bb72ea9743e8ad34c0b23" - integrity sha512-I37komyb+DruQG8lPPPOFxLLbOijNXeTxiWLsIn+KFZqRtKqxxQWdNnk56V4YSTpFzxnMEFMRCpXhncuTWu4LA== - dependencies: - "@sentry-internal/tracing" "7.103.0" - "@sentry/core" "7.103.0" - "@sentry/types" "7.103.0" - "@sentry/utils" "7.103.0" - -"@sentry/types@7.103.0": - version "7.103.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.103.0.tgz#f413f922216c97ec86bae39f9d527669d8afedbd" - integrity sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw== - -"@sentry/utils@7.103.0": - version "7.103.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.103.0.tgz#803b76e2adfdcec0d4ab6369cc8990dde19b55f4" - integrity sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg== - dependencies: - "@sentry/types" "7.103.0" +"@sentry-internal/feedback@7.105.0": + version "7.105.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.105.0.tgz#f2a25b55e5368509cfd540c21e74503568492057" + integrity sha512-17doUQFKYgLfG7EmZXjZQ7HR/aBzuLDd+GVaCNthUPyiz/tltV7EFECDWwHpXqzQgYRgroSbY8PruMVujFGUUw== + dependencies: + "@sentry/core" "7.105.0" + "@sentry/types" "7.105.0" + "@sentry/utils" "7.105.0" + +"@sentry-internal/replay-canvas@7.105.0": + version "7.105.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.105.0.tgz#fed7d67d976837ef7c1b72a6db461179703fa6f5" + integrity sha512-XMBdkjIDhap5Gwrub5wlUJhuUVJM4aL4lZV8KcxJZZSXgXsnyGYbEh9SPZOHO05jtbxTxVeL3Pik5qtYjdGnPA== + dependencies: + "@sentry/core" "7.105.0" + "@sentry/replay" "7.105.0" + "@sentry/types" "7.105.0" + "@sentry/utils" "7.105.0" + +"@sentry-internal/tracing@7.105.0": + version "7.105.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.105.0.tgz#9cb06f8281454343215cfe4b119c8198f032ec72" + integrity sha512-b+AFYB7Bc9vmyxl2jbmuT4esX5G0oPfpz35A0sxFzmJIhvMg1YMDNio2c81BtKN+VSPORCnKMLhfk3kyKKvWMQ== + dependencies: + "@sentry/core" "7.105.0" + "@sentry/types" "7.105.0" + "@sentry/utils" "7.105.0" + +"@sentry-internal/typescript@7.105.0": + version "7.105.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.105.0.tgz#022d2feb01d4a582d76aa64d65c1a5bdca12b83f" + integrity sha512-FxfQZbI97wjeCKNC9/bTsfhwrUyyjsgzNPrO6eRE6bQOeSr2qUMYV0p6lNm5QJppFODeQGecjIthpUwtuQnNxg== + +"@sentry/browser@7.105.0": + version "7.105.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.105.0.tgz#3eb56785cfc1cf58528b29ea954b73093e6f9481" + integrity sha512-OlYJzsZG109T1VpZ7O7KXf9IXCUUpp41lkkQM7ICBOBsfiHRUKmV5piTGCG5UgAvyb/gI/I1uQQtO4jthcHKEA== + dependencies: + "@sentry-internal/feedback" "7.105.0" + "@sentry-internal/replay-canvas" "7.105.0" + "@sentry-internal/tracing" "7.105.0" + "@sentry/core" "7.105.0" + "@sentry/replay" "7.105.0" + "@sentry/types" "7.105.0" + "@sentry/utils" "7.105.0" + +"@sentry/core@7.105.0": + version "7.105.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.105.0.tgz#89db519dd9aa7326de63a7eaccf861de3769ab1c" + integrity sha512-5xsaTG6jZincTeJUmZomlv20mVRZUEF1U/g89lmrSOybyk2+opEnB1JeBn4ODwnvmSik8r2QLr6/RiYlaxRJCg== + dependencies: + "@sentry/types" "7.105.0" + "@sentry/utils" "7.105.0" + +"@sentry/node@7.105.0": + version "7.105.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.105.0.tgz#cfe8e5602dff2cc754a95412f44c9ca8156422ff" + integrity sha512-b0QwZ7vT4hcJi6LmNRh3dcaYpLtXnkYXkL0rfhMb8hN8sUx8zuOWFMI7j0cfAloVThUeJVwGyv9dERfzGS2r2w== + dependencies: + "@sentry-internal/tracing" "7.105.0" + "@sentry/core" "7.105.0" + "@sentry/types" "7.105.0" + "@sentry/utils" "7.105.0" + +"@sentry/replay@7.105.0": + version "7.105.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.105.0.tgz#61784e3e88afa66a0d9b1b9d222153ab54ea4bd0" + integrity sha512-hZD2m6fNL9gorUOaaEpqxeH7zNP4y2Ej0TdieM1HMQ2q9Zrm9yOzk9/7ALfbRLIZFRMFTqo9vvVztLs3E+Hx+g== + dependencies: + "@sentry-internal/tracing" "7.105.0" + "@sentry/core" "7.105.0" + "@sentry/types" "7.105.0" + "@sentry/utils" "7.105.0" + +"@sentry/types@7.105.0": + version "7.105.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.105.0.tgz#51dadb7ad650e883459acf18df2ecbb5b4b6e5c2" + integrity sha512-80o0KMVM+X2Ym9hoQxvJetkJJwkpCg7o6tHHFXI+Rp7fawc2iCMTa0IRQMUiSkFvntQLYIdDoNNuKdzz2PbQGA== + +"@sentry/utils@7.105.0": + version "7.105.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.105.0.tgz#727187d252b97cb9e6c78bcdd0e9a1d14e60f313" + integrity sha512-YVAV0c2KLM8+VZCicQ/E/P2+J9Vs0hGhrXwV7w6ZEAtvxrg4oF270toL1WRhvcaf8JO4J1v4V+LuU6Txs4uEeQ== + dependencies: + "@sentry/types" "7.105.0" "@sindresorhus/is@^4.0.0": version "4.6.0" From 668c03f210c4e762492e9d367f90eb538eaa2007 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 4 Mar 2024 22:14:34 +0000 Subject: [PATCH 217/239] feat: Support and test `Sentry.sendFeedback` (#839) --- src/common/normalize.ts | 4 +++ src/main/ipc.ts | 2 +- test/e2e/server/index.ts | 29 ++++++++++++------- test/e2e/test-apps/other/feedback/event.json | 17 +++++++++++ .../e2e/test-apps/other/feedback/package.json | 8 +++++ test/e2e/test-apps/other/feedback/recipe.yml | 2 ++ .../test-apps/other/feedback/src/index.html | 24 +++++++++++++++ test/e2e/test-apps/other/feedback/src/main.js | 23 +++++++++++++++ 8 files changed, 97 insertions(+), 12 deletions(-) create mode 100644 test/e2e/test-apps/other/feedback/event.json create mode 100644 test/e2e/test-apps/other/feedback/package.json create mode 100644 test/e2e/test-apps/other/feedback/recipe.yml create mode 100644 test/e2e/test-apps/other/feedback/src/index.html create mode 100644 test/e2e/test-apps/other/feedback/src/main.js diff --git a/src/common/normalize.ts b/src/common/normalize.ts index ab191b89..26988187 100644 --- a/src/common/normalize.ts +++ b/src/common/normalize.ts @@ -34,6 +34,10 @@ export function normalizeEvent(event: Event, basePath: string): Event { request.url = normalizeUrlToBase(request.url, basePath); } + if (event.contexts?.feedback?.url && typeof event.contexts.feedback.url === 'string') { + event.contexts.feedback.url = normalizeUrlToBase(event.contexts.feedback.url, basePath); + } + event.contexts = { ...event.contexts, runtime: { diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 6b17547b..56750786 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -101,7 +101,7 @@ function eventFromEnvelope(envelope: Envelope): [Event, Attachment[], Profile | let profile: Profile | undefined; forEachEnvelopeItem(envelope, (item, type) => { - if (type === 'event' || type === 'transaction') { + if (type === 'event' || type === 'transaction' || type === 'feedback') { event = Array.isArray(item) ? (item as EventItem)[1] : undefined; } else if (type === 'attachment') { const [headers, data] = item as AttachmentItem; diff --git a/test/e2e/server/index.ts b/test/e2e/server/index.ts index 3e1b7be4..80feef9a 100644 --- a/test/e2e/server/index.ts +++ b/test/e2e/server/index.ts @@ -1,5 +1,5 @@ import { Event, Profile, ReplayEvent, Session, Transaction } from '@sentry/types'; -import { forEachEnvelopeItem, parseEnvelope } from '@sentry/utils'; +import { dropUndefinedKeys, forEachEnvelopeItem, parseEnvelope } from '@sentry/utils'; import { Server } from 'http'; import Koa from 'koa'; import bodyParser from 'koa-bodyparser'; @@ -129,7 +129,12 @@ export class TestServer { let metrics: string | undefined; forEachEnvelopeItem(envelope, ([headers, item]) => { - if (headers.type === 'event' || headers.type === 'transaction' || headers.type === 'session') { + if ( + headers.type === 'event' || + headers.type === 'transaction' || + headers.type === 'session' || + headers.type === 'feedback' + ) { data = item as Event | Transaction | Session; } @@ -155,15 +160,17 @@ export class TestServer { }); if (data || metrics) { - this._addEvent({ - data: data || {}, - attachments, - profile, - metrics, - appId: ctx.params.id, - sentryKey: keyMatch[1], - method: 'envelope', - }); + this._addEvent( + dropUndefinedKeys({ + data: data || {}, + attachments, + profile, + metrics, + appId: ctx.params.id, + sentryKey: keyMatch[1], + method: 'envelope', + }), + ); ctx.status = 200; ctx.body = 'Success'; diff --git a/test/e2e/test-apps/other/feedback/event.json b/test/e2e/test-apps/other/feedback/event.json new file mode 100644 index 00000000..94925be2 --- /dev/null +++ b/test/e2e/test-apps/other/feedback/event.json @@ -0,0 +1,17 @@ +{ + "method": "envelope", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "appId": "277345", + "data": { + "contexts": { + "feedback": { + "contact_email": "john@doe.com", + "name": "John Doe", + "message": "I really like your App, thanks!", + "url": "app:///src/index.html", + "source": "api" + } + }, + "type": "feedback" + } +} diff --git a/test/e2e/test-apps/other/feedback/package.json b/test/e2e/test-apps/other/feedback/package.json new file mode 100644 index 00000000..cc1c7cac --- /dev/null +++ b/test/e2e/test-apps/other/feedback/package.json @@ -0,0 +1,8 @@ +{ + "name": "feedback", + "version": "1.0.0", + "main": "src/main.js", + "dependencies": { + "@sentry/electron": "3.0.0" + } +} diff --git a/test/e2e/test-apps/other/feedback/recipe.yml b/test/e2e/test-apps/other/feedback/recipe.yml new file mode 100644 index 00000000..bf5ce753 --- /dev/null +++ b/test/e2e/test-apps/other/feedback/recipe.yml @@ -0,0 +1,2 @@ +description: User Feedback +command: yarn diff --git a/test/e2e/test-apps/other/feedback/src/index.html b/test/e2e/test-apps/other/feedback/src/index.html new file mode 100644 index 00000000..af0e4955 --- /dev/null +++ b/test/e2e/test-apps/other/feedback/src/index.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + </head> + <body> + <script> + const crypto = require('crypto'); + const { init, sendFeedback } = require('@sentry/electron/renderer'); + + init({ + debug: true, + }); + + setTimeout(() => { + sendFeedback({ + name: 'John Doe', + email: 'john@doe.com', + message: 'I really like your App, thanks!', + }); + }, 500); + </script> + </body> +</html> diff --git a/test/e2e/test-apps/other/feedback/src/main.js b/test/e2e/test-apps/other/feedback/src/main.js new file mode 100644 index 00000000..bede8faa --- /dev/null +++ b/test/e2e/test-apps/other/feedback/src/main.js @@ -0,0 +1,23 @@ +const path = require('path'); + +const { app, BrowserWindow } = require('electron'); +const { init } = require('@sentry/electron'); + +init({ + dsn: '__DSN__', + debug: true, + autoSessionTracking: false, + onFatalError: () => {}, +}); + +app.on('ready', () => { + const mainWindow = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + }, + }); + + mainWindow.loadFile(path.join(__dirname, 'index.html')); +}); From 79f9d0e5974618ef413d81c3d60d1d06446c016a Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 5 Mar 2024 11:10:01 +0000 Subject: [PATCH 218/239] meta: Update changelog for 4.20.0 release (#842) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd3bf299..6c3e0ff3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ ## Unreleased +## 4.20.0 + +- feat: Update from [v7.102.1](https://github.com/getsentry/sentry-javascript/releases/tag/7.102.1) to + [v7.105.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.105.0) of JavaScript SDKs (#837, #841) +- feat: Deprecate `Anr` class based integration in favor of new functional style (#822) +- feat: Support and test `Sentry.sendFeedback` (#839) + ## 4.19.0 - feat: Update from [v7.101.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.101.0) to From e9e2b101846631567e39284b75a850d2e707c30b Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Tue, 5 Mar 2024 11:10:40 +0000 Subject: [PATCH 219/239] release: 4.20.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index c61b8dd0..7391c6ec 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.19.0", + "version": "4.20.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", @@ -106,4 +106,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} \ No newline at end of file +} From a5142484c86fef2fd8309ba8f8b763bc34781c3e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 17:18:06 +0000 Subject: [PATCH 220/239] test: New Electron versions (#843) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index bbe1bd44..dfc427c5 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.10","27.3.4","28.2.5","29.1.0"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.10","27.3.6","28.2.7","29.1.4"] From effcb3997f8a9fa4616d922105ebb20687d22bd6 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 18 Mar 2024 17:19:08 +0000 Subject: [PATCH 221/239] feat: Limit minidumps sent per app session (#846) --- .../integrations/sentry-minidump/index.ts | 39 +++++++--- test/e2e/recipe/index.ts | 6 ++ test/e2e/recipe/parser.ts | 1 + .../native-sentry/renderer-limit/event.json | 75 +++++++++++++++++++ .../native-sentry/renderer-limit/package.json | 8 ++ .../native-sentry/renderer-limit/recipe.yml | 4 + .../renderer-limit/src/index.html | 19 +++++ .../native-sentry/renderer-limit/src/main.js | 30 ++++++++ 8 files changed, 172 insertions(+), 10 deletions(-) create mode 100644 test/e2e/test-apps/native-sentry/renderer-limit/event.json create mode 100644 test/e2e/test-apps/native-sentry/renderer-limit/package.json create mode 100644 test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml create mode 100644 test/e2e/test-apps/native-sentry/renderer-limit/src/index.html create mode 100644 test/e2e/test-apps/native-sentry/renderer-limit/src/main.js diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts index 2ff036ec..9b9e3eca 100644 --- a/src/main/integrations/sentry-minidump/index.ts +++ b/src/main/integrations/sentry-minidump/index.ts @@ -28,11 +28,23 @@ interface PreviousRun { const INTEGRATION_NAME = 'SentryMinidump'; +interface Options { + /** + * Maximum number of minidumps to send per session + * Once this number has been reached, no more minidumps will be sent + * + * default: 10 + */ + maxMinidumpsPerSession?: number; +} + /** * Sends minidumps via the Sentry uploader */ -export const sentryMinidumpIntegration = defineIntegration(() => { - /** Store to persist context information beyond application crashes. */ +export const sentryMinidumpIntegration = defineIntegration((options: Options = {}) => { + // The remaining number of minidumps that can be sent in this session + let minidumpsRemaining = options.maxMinidumpsPerSession || 10; + // Store to persist context information beyond application crashes. let scopeStore: BufferedWriteStore<PreviousRun> | undefined; // We need to store the scope in a variable here so it can be attached to minidumps let scopeLastRun: Promise<PreviousRun> | undefined; @@ -106,17 +118,24 @@ export const sentryMinidumpIntegration = defineIntegration(() => { return false; } - // If the SDK is not enabled, tell the loader to delete all minidumps - const deleteAll = client.getOptions().enabled === false; + if (minidumpsRemaining <= 0) { + logger.log('Not sending minidumps because the limit has been reached'); + } + + // If the SDK is not enabled, or we've already reached the minidump limit, tell the loader to delete all minidumps + const deleteAll = client.getOptions().enabled === false || minidumpsRemaining <= 0; - let minidumpSent = false; + let minidumpFound = false; await minidumpLoader?.(deleteAll, (attachment) => { - captureEvent(event as Event, { attachments: [attachment] }); - minidumpSent = true; + minidumpFound = true; + + if (minidumpsRemaining > 0) { + minidumpsRemaining -= 1; + captureEvent(event as Event, { attachments: [attachment] }); + } }); - // Unset to recover memory - return minidumpSent; + return minidumpFound; } async function sendRendererCrash( @@ -224,7 +243,7 @@ export const sentryMinidumpIntegration = defineIntegration(() => { onChildProcessGone(EXIT_REASONS, (details) => sendChildProcessCrash(client, options, details)); // Start to submit recent minidump crashes. This will load breadcrumbs and - // context information that was cached on disk prior to the crash. + // context information that was cached on disk in the previous app run, prior to the crash. sendNativeCrashes(client, { level: 'fatal', platform: 'native', diff --git a/test/e2e/recipe/index.ts b/test/e2e/recipe/index.ts index 44b33262..b31959f8 100644 --- a/test/e2e/recipe/index.ts +++ b/test/e2e/recipe/index.ts @@ -235,6 +235,12 @@ export class RecipeRunner { await context.waitForEvents(testServer, totalEvents); + // If a test need to ensure no other events are received after the expected number of events, wait a bit longer + if (this._recipe.metadata.waitAfterExpectedEvents) { + log(`Waiting ${this._recipe.metadata.waitAfterExpectedEvents}ms to see if any more events are sent...`); + await delay(this._recipe.metadata.waitAfterExpectedEvents); + } + if (totalEvents !== testServer.events.length) { throw new Error(`Expected ${expectedEvents.length} events but server has ${testServer.events.length} events`); } diff --git a/test/e2e/recipe/parser.ts b/test/e2e/recipe/parser.ts index 31608fb9..1d03f6d2 100644 --- a/test/e2e/recipe/parser.ts +++ b/test/e2e/recipe/parser.ts @@ -18,6 +18,7 @@ export interface TestMetadata { expectedError?: string; distPath?: string; skipEsmAutoTransform?: boolean; + waitAfterExpectedEvents?: number; } export interface TestRecipe { diff --git a/test/e2e/test-apps/native-sentry/renderer-limit/event.json b/test/e2e/test-apps/native-sentry/renderer-limit/event.json new file mode 100644 index 00000000..9b082304 --- /dev/null +++ b/test/e2e/test-apps/native-sentry/renderer-limit/event.json @@ -0,0 +1,75 @@ +{ + "method": "envelope", + "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", + "appId": "277345", + "data": { + "sdk": { + "name": "sentry.javascript.electron", + "packages": [ + { + "name": "npm:@sentry/electron", + "version": "{{version}}" + } + ], + "version": "{{version}}" + }, + "contexts": { + "app": { + "app_name": "native-crash-limits", + "app_version": "1.0.0", + "app_start_time": "{{time}}" + }, + "browser": { + "name": "Chrome" + }, + "chrome": { + "name": "Chrome", + "type": "runtime", + "version": "{{version}}" + }, + "device": { + "arch": "{{arch}}", + "family": "Desktop", + "memory_size": 0, + "free_memory": 0, + "processor_count": 0, + "processor_frequency": 0, + "cpu_description": "{{cpu}}", + "screen_resolution":"{{screen}}", + "screen_density": 1, + "language": "{{language}}" + }, + "node": { + "name": "Node", + "type": "runtime", + "version": "{{version}}" + }, + "os": { + "name": "{{platform}}", + "version": "{{version}}" + }, + "runtime": { + "name": "Electron", + "version": "{{version}}" + }, + "electron": { + "crashed_url": "app:///src/index.html" + } + }, + "release": "native-crash-limits@1.0.0", + "environment": "development", + "user": { + "ip_address": "{{auto}}" + }, + "event_id": "{{id}}", + "timestamp": 0, + "breadcrumbs": [], + "tags": { + "event.environment": "native", + "event.origin": "electron", + "event.process": "renderer", + "event_type": "native" + } + }, + "attachments": [ { "attachment_type": "event.minidump" } ] +} diff --git a/test/e2e/test-apps/native-sentry/renderer-limit/package.json b/test/e2e/test-apps/native-sentry/renderer-limit/package.json new file mode 100644 index 00000000..aaa7cf28 --- /dev/null +++ b/test/e2e/test-apps/native-sentry/renderer-limit/package.json @@ -0,0 +1,8 @@ +{ + "name": "native-crash-limits", + "version": "1.0.0", + "main": "src/main.js", + "dependencies": { + "@sentry/electron": "3.0.0" + } +} diff --git a/test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml b/test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml new file mode 100644 index 00000000..223865e1 --- /dev/null +++ b/test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml @@ -0,0 +1,4 @@ +description: Native Crash Limits +category: Native (Sentry Uploader) +command: yarn +waitAfterExpectedEvents: 10000 diff --git a/test/e2e/test-apps/native-sentry/renderer-limit/src/index.html b/test/e2e/test-apps/native-sentry/renderer-limit/src/index.html new file mode 100644 index 00000000..f2787cc1 --- /dev/null +++ b/test/e2e/test-apps/native-sentry/renderer-limit/src/index.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + </head> + <body> + <script> + const { init } = require('@sentry/electron'); + + init({ + debug: true, + }); + + setTimeout(() => { + process.crash(); + }, 500); + </script> + </body> +</html> \ No newline at end of file diff --git a/test/e2e/test-apps/native-sentry/renderer-limit/src/main.js b/test/e2e/test-apps/native-sentry/renderer-limit/src/main.js new file mode 100644 index 00000000..19bc82ca --- /dev/null +++ b/test/e2e/test-apps/native-sentry/renderer-limit/src/main.js @@ -0,0 +1,30 @@ +const path = require('path'); + +const { app, BrowserWindow } = require('electron'); +const { init, sentryMinidumpIntegration } = require('@sentry/electron/main'); + +init({ + dsn: '__DSN__', + debug: true, + autoSessionTracking: false, + integrations: [sentryMinidumpIntegration({ maxMinidumpsPerSession: 1 })], + onFatalError: () => {}, +}); + +app.on('ready', () => { + const mainWindow = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + }, + }); + + mainWindow.loadFile(path.join(__dirname, 'index.html')); + + // Keep reloading the window to cause multiple crash events + app.on('render-process-gone', () => { + console.log('Reloading window'); + mainWindow.reload(); + }); +}); From 26de29260aa7e49a458286002891733469d470f7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 18:06:52 +0000 Subject: [PATCH 222/239] test: New Sentry SDK version (#844) --- package.json | 16 ++-- src/renderer/sdk.ts | 2 +- yarn.lock | 190 ++++++++++++++++++++++---------------------- 3 files changed, 104 insertions(+), 104 deletions(-) diff --git a/package.json b/package.json index 7391c6ec..39918915 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.105.0", - "@sentry/core": "7.105.0", - "@sentry/node": "7.105.0", - "@sentry/types": "7.105.0", - "@sentry/utils": "7.105.0", + "@sentry/browser": "7.107.0", + "@sentry/core": "7.107.0", + "@sentry/node": "7.107.0", + "@sentry/types": "7.107.0", + "@sentry/utils": "7.107.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.105.0", - "@sentry-internal/typescript": "7.105.0", + "@sentry-internal/eslint-config-sdk": "7.107.0", + "@sentry-internal/typescript": "7.107.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", @@ -106,4 +106,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} +} \ No newline at end of file diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index ff155999..5dfdc960 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_105_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_107_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 03df5b6d..0ebc4cc9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.105.0.tgz#7eff67686b835c64117a0d4a8b669875f2ad413a" - integrity sha512-ml6V8uGqkGVd9BDXUzoixPtE8ny0CJKxlWoOepQ8Gp5rzLSr1hE2kP/gVwKTr6RFYXAFVTKADdwEa3RljtVqPg== +"@sentry-internal/eslint-config-sdk@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.107.0.tgz#1958771bb73dc2426aebeaac2e019ee12fcf4fb1" + integrity sha512-rBgB72bF4vZSXteeHvPlRvjr2XHfydVGBcAnMySyuqp8iKLKZCvhg5rNIACXMJzEZVbsQqwDEUZpCKkUe2HzSw== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.105.0" - "@sentry-internal/typescript" "7.105.0" + "@sentry-internal/eslint-plugin-sdk" "7.107.0" + "@sentry-internal/typescript" "7.107.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,98 +180,98 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.105.0.tgz#1fea2f32394089a72617f97821871e446e4851cb" - integrity sha512-nKnoy26ma2jm4dks6Qkq8UM6sKabINzRRVwgKhzLnhEqNbilq2GJhQAoKPQ1JCGKg+okfBBOs6WdWPcwPJBYWQ== +"@sentry-internal/eslint-plugin-sdk@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.107.0.tgz#91e9e80125941cdbbab38695d764250279515843" + integrity sha512-vBN4ibmEciITYKdY/OxMN6RpBsPSNkrzJBAV7+4HHw8eBPN1Hh7IbRy4d+sjcPrPwABEhwoFvnFXkjx18VukJQ== dependencies: requireindex "~1.1.0" -"@sentry-internal/feedback@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.105.0.tgz#f2a25b55e5368509cfd540c21e74503568492057" - integrity sha512-17doUQFKYgLfG7EmZXjZQ7HR/aBzuLDd+GVaCNthUPyiz/tltV7EFECDWwHpXqzQgYRgroSbY8PruMVujFGUUw== - dependencies: - "@sentry/core" "7.105.0" - "@sentry/types" "7.105.0" - "@sentry/utils" "7.105.0" - -"@sentry-internal/replay-canvas@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.105.0.tgz#fed7d67d976837ef7c1b72a6db461179703fa6f5" - integrity sha512-XMBdkjIDhap5Gwrub5wlUJhuUVJM4aL4lZV8KcxJZZSXgXsnyGYbEh9SPZOHO05jtbxTxVeL3Pik5qtYjdGnPA== - dependencies: - "@sentry/core" "7.105.0" - "@sentry/replay" "7.105.0" - "@sentry/types" "7.105.0" - "@sentry/utils" "7.105.0" - -"@sentry-internal/tracing@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.105.0.tgz#9cb06f8281454343215cfe4b119c8198f032ec72" - integrity sha512-b+AFYB7Bc9vmyxl2jbmuT4esX5G0oPfpz35A0sxFzmJIhvMg1YMDNio2c81BtKN+VSPORCnKMLhfk3kyKKvWMQ== - dependencies: - "@sentry/core" "7.105.0" - "@sentry/types" "7.105.0" - "@sentry/utils" "7.105.0" - -"@sentry-internal/typescript@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.105.0.tgz#022d2feb01d4a582d76aa64d65c1a5bdca12b83f" - integrity sha512-FxfQZbI97wjeCKNC9/bTsfhwrUyyjsgzNPrO6eRE6bQOeSr2qUMYV0p6lNm5QJppFODeQGecjIthpUwtuQnNxg== - -"@sentry/browser@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.105.0.tgz#3eb56785cfc1cf58528b29ea954b73093e6f9481" - integrity sha512-OlYJzsZG109T1VpZ7O7KXf9IXCUUpp41lkkQM7ICBOBsfiHRUKmV5piTGCG5UgAvyb/gI/I1uQQtO4jthcHKEA== - dependencies: - "@sentry-internal/feedback" "7.105.0" - "@sentry-internal/replay-canvas" "7.105.0" - "@sentry-internal/tracing" "7.105.0" - "@sentry/core" "7.105.0" - "@sentry/replay" "7.105.0" - "@sentry/types" "7.105.0" - "@sentry/utils" "7.105.0" - -"@sentry/core@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.105.0.tgz#89db519dd9aa7326de63a7eaccf861de3769ab1c" - integrity sha512-5xsaTG6jZincTeJUmZomlv20mVRZUEF1U/g89lmrSOybyk2+opEnB1JeBn4ODwnvmSik8r2QLr6/RiYlaxRJCg== - dependencies: - "@sentry/types" "7.105.0" - "@sentry/utils" "7.105.0" - -"@sentry/node@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.105.0.tgz#cfe8e5602dff2cc754a95412f44c9ca8156422ff" - integrity sha512-b0QwZ7vT4hcJi6LmNRh3dcaYpLtXnkYXkL0rfhMb8hN8sUx8zuOWFMI7j0cfAloVThUeJVwGyv9dERfzGS2r2w== - dependencies: - "@sentry-internal/tracing" "7.105.0" - "@sentry/core" "7.105.0" - "@sentry/types" "7.105.0" - "@sentry/utils" "7.105.0" - -"@sentry/replay@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.105.0.tgz#61784e3e88afa66a0d9b1b9d222153ab54ea4bd0" - integrity sha512-hZD2m6fNL9gorUOaaEpqxeH7zNP4y2Ej0TdieM1HMQ2q9Zrm9yOzk9/7ALfbRLIZFRMFTqo9vvVztLs3E+Hx+g== - dependencies: - "@sentry-internal/tracing" "7.105.0" - "@sentry/core" "7.105.0" - "@sentry/types" "7.105.0" - "@sentry/utils" "7.105.0" - -"@sentry/types@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.105.0.tgz#51dadb7ad650e883459acf18df2ecbb5b4b6e5c2" - integrity sha512-80o0KMVM+X2Ym9hoQxvJetkJJwkpCg7o6tHHFXI+Rp7fawc2iCMTa0IRQMUiSkFvntQLYIdDoNNuKdzz2PbQGA== - -"@sentry/utils@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.105.0.tgz#727187d252b97cb9e6c78bcdd0e9a1d14e60f313" - integrity sha512-YVAV0c2KLM8+VZCicQ/E/P2+J9Vs0hGhrXwV7w6ZEAtvxrg4oF270toL1WRhvcaf8JO4J1v4V+LuU6Txs4uEeQ== - dependencies: - "@sentry/types" "7.105.0" +"@sentry-internal/feedback@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.107.0.tgz#144cf01b1c1739d61db3990519f59b49a356fef1" + integrity sha512-okF0B9AJHrpkwNMxNs/Lffw3N5ZNbGwz4uvCfyOfnMxc7E2VfDM18QzUvTBRvNr3bA9wl+InJ+EMG3aZhyPunA== + dependencies: + "@sentry/core" "7.107.0" + "@sentry/types" "7.107.0" + "@sentry/utils" "7.107.0" + +"@sentry-internal/replay-canvas@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.107.0.tgz#ce2a8f6bf63ab962e696f26b509cfb87aa931302" + integrity sha512-dmDL9g3QDfo7axBOsVnpiKdJ/DXrdeuRv1AqsLgwzJKvItsv0ZizX0u+rj5b1UoxcwbXRMxJ0hit5a1yt3t/ow== + dependencies: + "@sentry/core" "7.107.0" + "@sentry/replay" "7.107.0" + "@sentry/types" "7.107.0" + "@sentry/utils" "7.107.0" + +"@sentry-internal/tracing@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.107.0.tgz#a10b4abcbc9e0d8da948e3a95029574387ca7b16" + integrity sha512-le9wM8+OHBbq7m/8P7JUJ1UhSPIty+Z/HmRXc5Z64ODZcOwFV6TmDpYx729IXDdz36XUKmeI+BeM7yQdTTZPfQ== + dependencies: + "@sentry/core" "7.107.0" + "@sentry/types" "7.107.0" + "@sentry/utils" "7.107.0" + +"@sentry-internal/typescript@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.107.0.tgz#570f498f5101b8cc8bf1410e448ebd5b5915a41e" + integrity sha512-Pz1OkfAzhIqETRWpuP6bTuPnAhdCGDgFpcCUMdTBrgrQKsbmXqR4Cl78Z+1C9YRJJARSqxVJWReL7rh3ikFNLw== + +"@sentry/browser@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.107.0.tgz#a1caf4a3c39857862ba3314b9d4ed03f9259f338" + integrity sha512-KnqaQDhxv6w9dJ+mYLsNwPeGZfgbpM3vaismBNyJCKLgWn2V75kxkSq+bDX8LQT/13AyK7iFp317L6P8EuNa3g== + dependencies: + "@sentry-internal/feedback" "7.107.0" + "@sentry-internal/replay-canvas" "7.107.0" + "@sentry-internal/tracing" "7.107.0" + "@sentry/core" "7.107.0" + "@sentry/replay" "7.107.0" + "@sentry/types" "7.107.0" + "@sentry/utils" "7.107.0" + +"@sentry/core@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.107.0.tgz#926838ba2c2861d6bd2bced0232e1f9d1ead6c75" + integrity sha512-C7ogye6+KPyBi8NVL0P8Rxx3Ur7Td8ufnjxosVy678lqY+dcYPk/HONROrzUFYW5fMKWL4/KYnwP+x9uHnkDmw== + dependencies: + "@sentry/types" "7.107.0" + "@sentry/utils" "7.107.0" + +"@sentry/node@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.107.0.tgz#d60c2e28953f2ba14d12ada9190f1fc577b2b280" + integrity sha512-UZXkG7uThT2YyPW8AOSKRXp1LbVcBHufa4r1XAwBukA2FKO6HHJPjMUgY6DYVQ6k+BmA56CNfVjYrdLbyjBYYA== + dependencies: + "@sentry-internal/tracing" "7.107.0" + "@sentry/core" "7.107.0" + "@sentry/types" "7.107.0" + "@sentry/utils" "7.107.0" + +"@sentry/replay@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.107.0.tgz#d714f864ef8602e6d009b2fa8ff8e4ef63c3e9e4" + integrity sha512-BNJDEVaEwr/YnV22qnyVA1almx/3p615m3+KaF8lPo7YleYgJGSJv1auH64j1G8INkrJ0J0wFBujb1EFjMYkxA== + dependencies: + "@sentry-internal/tracing" "7.107.0" + "@sentry/core" "7.107.0" + "@sentry/types" "7.107.0" + "@sentry/utils" "7.107.0" + +"@sentry/types@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.107.0.tgz#5ba4b472be6ccad9aecd58dbc0141a09dafb68c1" + integrity sha512-H7qcPjPSUWHE/Zf5bR1EE24G0pGVuJgrSx8Tvvl5nKEepswMYlbXHRVSDN0gTk/E5Z7cqf+hUBOpkQgZyps77w== + +"@sentry/utils@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.107.0.tgz#b8524539d052a40f9c5f34a8347501f0f81a0751" + integrity sha512-C6PbN5gHh73MRHohnReeQ60N8rrLYa9LciHue3Ru2290eSThg4CzsPnx4SzkGpkSeVlhhptKtKZ+hp/ha3iVuw== + dependencies: + "@sentry/types" "7.107.0" "@sindresorhus/is@^4.0.0": version "4.6.0" From fdfb3fdacd2934853b9e23f4900ee14d010f7260 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 18 Mar 2024 23:35:55 +0000 Subject: [PATCH 223/239] fix: Duplicate event hookup (#849) --- src/main/ipc.ts | 8 ++++-- .../other/event-listener/package.json | 8 ++++++ .../test-apps/other/event-listener/recipe.yml | 4 +++ .../other/event-listener/src/index.html | 17 ++++++++++++ .../other/event-listener/src/main.js | 27 +++++++++++++++++++ 5 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 test/e2e/test-apps/other/event-listener/package.json create mode 100644 test/e2e/test-apps/other/event-listener/recipe.yml create mode 100644 test/e2e/test-apps/other/event-listener/src/index.html create mode 100644 test/e2e/test-apps/other/event-listener/src/main.js diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 56750786..f5e4f8e6 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -258,11 +258,15 @@ function configureProtocol(options: ElectronMainOptionsInternal): void { function configureClassic(options: ElectronMainOptionsInternal): void { ipcMain.on(IPCChannel.RENDERER_START, ({ sender }) => { const id = sender.id; + // Keep track of renderers that are using IPC + KNOWN_RENDERERS = KNOWN_RENDERERS || new Set(); + + if (KNOWN_RENDERERS.has(id)) { + return; + } // In older Electron, sender can be destroyed before this callback is called if (!sender.isDestroyed()) { - // Keep track of renderers that are using IPC - KNOWN_RENDERERS = KNOWN_RENDERERS || new Set(); KNOWN_RENDERERS.add(id); sender.once('destroyed', () => { diff --git a/test/e2e/test-apps/other/event-listener/package.json b/test/e2e/test-apps/other/event-listener/package.json new file mode 100644 index 00000000..49900190 --- /dev/null +++ b/test/e2e/test-apps/other/event-listener/package.json @@ -0,0 +1,8 @@ +{ + "name": "event-listener-max", + "version": "1.0.0", + "main": "src/main.js", + "dependencies": { + "@sentry/electron": "3.0.0" + } +} diff --git a/test/e2e/test-apps/other/event-listener/recipe.yml b/test/e2e/test-apps/other/event-listener/recipe.yml new file mode 100644 index 00000000..37e652b3 --- /dev/null +++ b/test/e2e/test-apps/other/event-listener/recipe.yml @@ -0,0 +1,4 @@ +description: Event Listener Max +command: yarn +condition: version.major >= 25 +expectedError: Listener count = 2 diff --git a/test/e2e/test-apps/other/event-listener/src/index.html b/test/e2e/test-apps/other/event-listener/src/index.html new file mode 100644 index 00000000..e5d1ea98 --- /dev/null +++ b/test/e2e/test-apps/other/event-listener/src/index.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + <!-- Refresh the page so the renderer SDK gets loaded multiple times --> + <meta http-equiv="refresh" content="1" /> + </head> + <body> + <script> + const { init } = require('@sentry/electron'); + + init({ + debug: true, + }); + </script> + </body> +</html> diff --git a/test/e2e/test-apps/other/event-listener/src/main.js b/test/e2e/test-apps/other/event-listener/src/main.js new file mode 100644 index 00000000..66f714e1 --- /dev/null +++ b/test/e2e/test-apps/other/event-listener/src/main.js @@ -0,0 +1,27 @@ +const path = require('path'); + +const { app, BrowserWindow } = require('electron'); +const { init } = require('@sentry/electron'); + +init({ + dsn: '__HANG_DSN__', + debug: true, + onFatalError: () => {}, +}); + +app.on('ready', () => { + const mainWindow = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + }, + }); + + setTimeout(() => { + console.log(`Listener count = ${mainWindow.webContents.listenerCount('destroyed')}`); + app.quit(); + }, 8000); + + mainWindow.loadFile(path.join(__dirname, 'index.html')); +}); From c6839e770b7ffa7cd4985af93633596ec3e6ee61 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 19 Mar 2024 12:26:01 +0000 Subject: [PATCH 224/239] meta: Update changelog for v4.21.0 release (#852) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c3e0ff3..dc94c5b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ ## Unreleased +## 4.21.0 + +- feat: Update from [v7.105.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.105.0) to + [v7.107.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.107.0) of JavaScript SDKs (#844) +- feat: Limit minidumps sent per app session (#846) +- fix: Duplicate event hookup (#849) + ## 4.20.0 - feat: Update from [v7.102.1](https://github.com/getsentry/sentry-javascript/releases/tag/7.102.1) to From e03e2bfa0b01eed6c0d5a62b9fa3294eea78f70c Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 19 Mar 2024 13:45:38 +0000 Subject: [PATCH 225/239] test: Limit crash limits test to latest Electron versions (#853) --- test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml b/test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml index 223865e1..b48574f3 100644 --- a/test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml +++ b/test/e2e/test-apps/native-sentry/renderer-limit/recipe.yml @@ -2,3 +2,4 @@ description: Native Crash Limits category: Native (Sentry Uploader) command: yarn waitAfterExpectedEvents: 10000 +condition: version.major >= 20 From 50611551bde156b888cc068375b6854e822139ea Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Tue, 19 Mar 2024 13:46:17 +0000 Subject: [PATCH 226/239] release: 4.21.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 39918915..ca674a06 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.20.0", + "version": "4.21.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", @@ -106,4 +106,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} \ No newline at end of file +} From 46d3e88e22763baaabc642ec6814e0d57dd477c2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 14:43:28 +0000 Subject: [PATCH 227/239] test: New Electron versions (#851) --- test/e2e/versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/versions.json b/test/e2e/versions.json index dfc427c5..7dffd769 100644 --- a/test/e2e/versions.json +++ b/test/e2e/versions.json @@ -1 +1 @@ -["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.10","27.3.6","28.2.7","29.1.4"] +["2.0.18","3.1.13","4.2.12","5.0.13","6.1.12","7.3.3","8.5.5","9.4.4","10.4.7","11.5.0","12.2.3","13.6.9","14.2.9","15.5.7","16.2.8","17.4.11","18.3.15","19.1.9","20.3.12","21.4.4","22.3.27","23.3.13","24.8.8","25.9.8","26.6.10","27.3.6","28.2.7","29.1.4","30.0.0-beta.1"] From b2204aedf998df8ad628cd6b593c4e6a0f181ef6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 22 Mar 2024 15:55:39 +0000 Subject: [PATCH 228/239] test: New Sentry SDK version (#856) --- package.json | 16 ++-- src/renderer/sdk.ts | 2 +- yarn.lock | 190 ++++++++++++++++++++++---------------------- 3 files changed, 104 insertions(+), 104 deletions(-) diff --git a/package.json b/package.json index ca674a06..5761706c 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.107.0", - "@sentry/core": "7.107.0", - "@sentry/node": "7.107.0", - "@sentry/types": "7.107.0", - "@sentry/utils": "7.107.0", + "@sentry/browser": "7.108.0", + "@sentry/core": "7.108.0", + "@sentry/node": "7.108.0", + "@sentry/types": "7.108.0", + "@sentry/utils": "7.108.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.107.0", - "@sentry-internal/typescript": "7.107.0", + "@sentry-internal/eslint-config-sdk": "7.108.0", + "@sentry-internal/typescript": "7.108.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", @@ -106,4 +106,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} +} \ No newline at end of file diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 5dfdc960..201d5e99 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_107_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_108_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 0ebc4cc9..177a0061 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.107.0": - version "7.107.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.107.0.tgz#1958771bb73dc2426aebeaac2e019ee12fcf4fb1" - integrity sha512-rBgB72bF4vZSXteeHvPlRvjr2XHfydVGBcAnMySyuqp8iKLKZCvhg5rNIACXMJzEZVbsQqwDEUZpCKkUe2HzSw== +"@sentry-internal/eslint-config-sdk@7.108.0": + version "7.108.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.108.0.tgz#4ec2a06f5eda349f42af069f61d5e2cb6ff219c1" + integrity sha512-MsA4pzayvJZB9QtxlKjQabRFAOwAl1Z0Vd3v+dCA28H3ek59533m30TwcPtv6uOmHUXOcIqzpaF6SM564xlUoQ== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.107.0" - "@sentry-internal/typescript" "7.107.0" + "@sentry-internal/eslint-plugin-sdk" "7.108.0" + "@sentry-internal/typescript" "7.108.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,98 +180,98 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.107.0": - version "7.107.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.107.0.tgz#91e9e80125941cdbbab38695d764250279515843" - integrity sha512-vBN4ibmEciITYKdY/OxMN6RpBsPSNkrzJBAV7+4HHw8eBPN1Hh7IbRy4d+sjcPrPwABEhwoFvnFXkjx18VukJQ== +"@sentry-internal/eslint-plugin-sdk@7.108.0": + version "7.108.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.108.0.tgz#42e65c8d470b4a55ea76cc8d5aff570f512edfe9" + integrity sha512-Od5cnoeQb2RUoYtjI062JTgcb6SRxlcD6++5INQDtEQjkBqNvThL+/GZ7b5wCjiaPsyPTbbAd1kEgzeVzYo4oQ== dependencies: requireindex "~1.1.0" -"@sentry-internal/feedback@7.107.0": - version "7.107.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.107.0.tgz#144cf01b1c1739d61db3990519f59b49a356fef1" - integrity sha512-okF0B9AJHrpkwNMxNs/Lffw3N5ZNbGwz4uvCfyOfnMxc7E2VfDM18QzUvTBRvNr3bA9wl+InJ+EMG3aZhyPunA== - dependencies: - "@sentry/core" "7.107.0" - "@sentry/types" "7.107.0" - "@sentry/utils" "7.107.0" - -"@sentry-internal/replay-canvas@7.107.0": - version "7.107.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.107.0.tgz#ce2a8f6bf63ab962e696f26b509cfb87aa931302" - integrity sha512-dmDL9g3QDfo7axBOsVnpiKdJ/DXrdeuRv1AqsLgwzJKvItsv0ZizX0u+rj5b1UoxcwbXRMxJ0hit5a1yt3t/ow== - dependencies: - "@sentry/core" "7.107.0" - "@sentry/replay" "7.107.0" - "@sentry/types" "7.107.0" - "@sentry/utils" "7.107.0" - -"@sentry-internal/tracing@7.107.0": - version "7.107.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.107.0.tgz#a10b4abcbc9e0d8da948e3a95029574387ca7b16" - integrity sha512-le9wM8+OHBbq7m/8P7JUJ1UhSPIty+Z/HmRXc5Z64ODZcOwFV6TmDpYx729IXDdz36XUKmeI+BeM7yQdTTZPfQ== - dependencies: - "@sentry/core" "7.107.0" - "@sentry/types" "7.107.0" - "@sentry/utils" "7.107.0" - -"@sentry-internal/typescript@7.107.0": - version "7.107.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.107.0.tgz#570f498f5101b8cc8bf1410e448ebd5b5915a41e" - integrity sha512-Pz1OkfAzhIqETRWpuP6bTuPnAhdCGDgFpcCUMdTBrgrQKsbmXqR4Cl78Z+1C9YRJJARSqxVJWReL7rh3ikFNLw== - -"@sentry/browser@7.107.0": - version "7.107.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.107.0.tgz#a1caf4a3c39857862ba3314b9d4ed03f9259f338" - integrity sha512-KnqaQDhxv6w9dJ+mYLsNwPeGZfgbpM3vaismBNyJCKLgWn2V75kxkSq+bDX8LQT/13AyK7iFp317L6P8EuNa3g== - dependencies: - "@sentry-internal/feedback" "7.107.0" - "@sentry-internal/replay-canvas" "7.107.0" - "@sentry-internal/tracing" "7.107.0" - "@sentry/core" "7.107.0" - "@sentry/replay" "7.107.0" - "@sentry/types" "7.107.0" - "@sentry/utils" "7.107.0" - -"@sentry/core@7.107.0": - version "7.107.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.107.0.tgz#926838ba2c2861d6bd2bced0232e1f9d1ead6c75" - integrity sha512-C7ogye6+KPyBi8NVL0P8Rxx3Ur7Td8ufnjxosVy678lqY+dcYPk/HONROrzUFYW5fMKWL4/KYnwP+x9uHnkDmw== - dependencies: - "@sentry/types" "7.107.0" - "@sentry/utils" "7.107.0" - -"@sentry/node@7.107.0": - version "7.107.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.107.0.tgz#d60c2e28953f2ba14d12ada9190f1fc577b2b280" - integrity sha512-UZXkG7uThT2YyPW8AOSKRXp1LbVcBHufa4r1XAwBukA2FKO6HHJPjMUgY6DYVQ6k+BmA56CNfVjYrdLbyjBYYA== - dependencies: - "@sentry-internal/tracing" "7.107.0" - "@sentry/core" "7.107.0" - "@sentry/types" "7.107.0" - "@sentry/utils" "7.107.0" - -"@sentry/replay@7.107.0": - version "7.107.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.107.0.tgz#d714f864ef8602e6d009b2fa8ff8e4ef63c3e9e4" - integrity sha512-BNJDEVaEwr/YnV22qnyVA1almx/3p615m3+KaF8lPo7YleYgJGSJv1auH64j1G8INkrJ0J0wFBujb1EFjMYkxA== - dependencies: - "@sentry-internal/tracing" "7.107.0" - "@sentry/core" "7.107.0" - "@sentry/types" "7.107.0" - "@sentry/utils" "7.107.0" - -"@sentry/types@7.107.0": - version "7.107.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.107.0.tgz#5ba4b472be6ccad9aecd58dbc0141a09dafb68c1" - integrity sha512-H7qcPjPSUWHE/Zf5bR1EE24G0pGVuJgrSx8Tvvl5nKEepswMYlbXHRVSDN0gTk/E5Z7cqf+hUBOpkQgZyps77w== - -"@sentry/utils@7.107.0": - version "7.107.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.107.0.tgz#b8524539d052a40f9c5f34a8347501f0f81a0751" - integrity sha512-C6PbN5gHh73MRHohnReeQ60N8rrLYa9LciHue3Ru2290eSThg4CzsPnx4SzkGpkSeVlhhptKtKZ+hp/ha3iVuw== - dependencies: - "@sentry/types" "7.107.0" +"@sentry-internal/feedback@7.108.0": + version "7.108.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.108.0.tgz#7033352abd304f1383ec47640e056a0dfd5132b7" + integrity sha512-8JcgZEnk1uWrXJhsd3iRvFtEiVeaWOEhN0NZwhwQXHfvODqep6JtrkY1yCIyxbpA37aZmrPc2JhyotRERGfUjg== + dependencies: + "@sentry/core" "7.108.0" + "@sentry/types" "7.108.0" + "@sentry/utils" "7.108.0" + +"@sentry-internal/replay-canvas@7.108.0": + version "7.108.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.108.0.tgz#641133c19c0e1c423617b8d791f53d6cd0b0a862" + integrity sha512-R5tvjGqWUV5vSk0N1eBgVW7wIADinrkfDEBZ9FyKP2mXHBobsyNGt30heJDEqYmVqluRqjU2NuIRapsnnrpGnA== + dependencies: + "@sentry/core" "7.108.0" + "@sentry/replay" "7.108.0" + "@sentry/types" "7.108.0" + "@sentry/utils" "7.108.0" + +"@sentry-internal/tracing@7.108.0": + version "7.108.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.108.0.tgz#d1e660701fb860cfae72b6ebfa8fb267533421fa" + integrity sha512-zuK5XsTsb+U+hgn3SPetYDAogrXsM16U/LLoMW7+TlC6UjlHGYQvmX3o+M2vntejoU1QZS8m1bCAZSMWEypAEw== + dependencies: + "@sentry/core" "7.108.0" + "@sentry/types" "7.108.0" + "@sentry/utils" "7.108.0" + +"@sentry-internal/typescript@7.108.0": + version "7.108.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.108.0.tgz#ea13a460e1d4c5a1eea939c85fa7d177d8d52b92" + integrity sha512-PXJgGg038sVSG4fl4a0Up1PPWLqTgFKTrAt+lawaRkDQT4nOS8dUGtzCMhYcgv6EsWArf16NF8I2UtmYHpW3oQ== + +"@sentry/browser@7.108.0": + version "7.108.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.108.0.tgz#b95810bb6572b63781f253615896f5afb1a3a5c0" + integrity sha512-FNpzsdTvGvdHJMUelqEouUXMZU7jC+dpN7CdT6IoHVVFEkoAgrjMVUhXZoQ/dmCkdKWHmFSQhJ8Fm6V+e9Aq0A== + dependencies: + "@sentry-internal/feedback" "7.108.0" + "@sentry-internal/replay-canvas" "7.108.0" + "@sentry-internal/tracing" "7.108.0" + "@sentry/core" "7.108.0" + "@sentry/replay" "7.108.0" + "@sentry/types" "7.108.0" + "@sentry/utils" "7.108.0" + +"@sentry/core@7.108.0": + version "7.108.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.108.0.tgz#a27e8d6f85f59c5730ce86071474f15ac899fde0" + integrity sha512-I/VNZCFgLASxHZaD0EtxZRM34WG9w2gozqgrKGNMzAymwmQ3K9g/1qmBy4e6iS3YRptb7J5UhQkZQHrcwBbjWQ== + dependencies: + "@sentry/types" "7.108.0" + "@sentry/utils" "7.108.0" + +"@sentry/node@7.108.0": + version "7.108.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.108.0.tgz#ed113dc1d39aaae32f7e9f681dcea41cf28eb5f1" + integrity sha512-pMxc9txnDDkU4Z8k2Uw/DPSLPehNtWV3mjJ3+my0AMORGYrXLkJI93tddlE5z/7k+GEJdj1HsOLgxUN0OU+HGA== + dependencies: + "@sentry-internal/tracing" "7.108.0" + "@sentry/core" "7.108.0" + "@sentry/types" "7.108.0" + "@sentry/utils" "7.108.0" + +"@sentry/replay@7.108.0": + version "7.108.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.108.0.tgz#baa679bd19b4e3729e607d3f84cff5048aeb3415" + integrity sha512-jo8fDOzcZJclP1+4n9jUtVxTlBFT9hXwxhAMrhrt70FV/nfmCtYQMD3bzIj79nwbhUtFP6pN39JH1o7Xqt1hxQ== + dependencies: + "@sentry-internal/tracing" "7.108.0" + "@sentry/core" "7.108.0" + "@sentry/types" "7.108.0" + "@sentry/utils" "7.108.0" + +"@sentry/types@7.108.0": + version "7.108.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.108.0.tgz#5ceb959c4dabe511fc441fec8c2465f2d624900f" + integrity sha512-bKtHITmBN3kqtqE5eVvL8mY8znM05vEodENwRpcm6TSrrBjC2RnwNWVwGstYDdHpNfFuKwC8mLY9bgMJcENo8g== + +"@sentry/utils@7.108.0": + version "7.108.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.108.0.tgz#0231042956aed2ef35809891592238530349dfd9" + integrity sha512-a45yEFD5qtgZaIFRAcFkG8C8lnDzn6t4LfLXuV4OafGAy/3ZAN3XN8wDnrruHkiUezSSANGsLg3bXaLW/JLvJw== + dependencies: + "@sentry/types" "7.108.0" "@sindresorhus/is@^4.0.0": version "4.6.0" From e4e9f23278c48827758d608ab6396936404d0c0d Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 25 Mar 2024 16:11:30 +0000 Subject: [PATCH 229/239] fix: Stop Anr worker when app suspends (#858) --- src/main/integrations/anr.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/integrations/anr.ts b/src/main/integrations/anr.ts index 624868e1..a43479cf 100644 --- a/src/main/integrations/anr.ts +++ b/src/main/integrations/anr.ts @@ -1,6 +1,6 @@ import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core'; import { anrIntegration as nodeAnrIntegration } from '@sentry/node'; -import { app } from 'electron'; +import { app, powerMonitor } from 'electron'; import { ELECTRON_MAJOR_VERSION } from '../electron-normalize'; @@ -12,7 +12,7 @@ export const anrIntegration = defineIntegration((options: Parameters<typeof node throw new Error('Main process ANR detection requires Electron v22+'); } - return nodeAnrIntegration({ + const integration = nodeAnrIntegration({ ...options, staticTags: { 'event.environment': 'javascript', @@ -22,6 +22,16 @@ export const anrIntegration = defineIntegration((options: Parameters<typeof node }, appRootPath: app.getAppPath(), }); + + powerMonitor.on('suspend', () => { + integration.stopWorker(); + }); + + powerMonitor.on('resume', () => { + integration.startWorker(); + }); + + return integration; }); /** From c5d9ce23e21c8aa08b395f05d3f289856f2d9415 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 3 Apr 2024 17:07:59 +0200 Subject: [PATCH 230/239] feat: Update Sentry SDKs to v7.109.0 (#867) --- package.json | 14 ++-- src/renderer/sdk.ts | 2 +- yarn.lock | 190 ++++++++++++++++++++++---------------------- 3 files changed, 103 insertions(+), 103 deletions(-) diff --git a/package.json b/package.json index 5761706c..9f69cd6f 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.108.0", - "@sentry/core": "7.108.0", - "@sentry/node": "7.108.0", - "@sentry/types": "7.108.0", - "@sentry/utils": "7.108.0", + "@sentry/browser": "7.109.0", + "@sentry/core": "7.109.0", + "@sentry/node": "7.109.0", + "@sentry/types": "7.109.0", + "@sentry/utils": "7.109.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.108.0", - "@sentry-internal/typescript": "7.108.0", + "@sentry-internal/eslint-config-sdk": "7.109.0", + "@sentry-internal/typescript": "7.109.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 201d5e99..afba995d 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_108_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_109_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 177a0061..6a7b7c12 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.108.0": - version "7.108.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.108.0.tgz#4ec2a06f5eda349f42af069f61d5e2cb6ff219c1" - integrity sha512-MsA4pzayvJZB9QtxlKjQabRFAOwAl1Z0Vd3v+dCA28H3ek59533m30TwcPtv6uOmHUXOcIqzpaF6SM564xlUoQ== +"@sentry-internal/eslint-config-sdk@7.109.0": + version "7.109.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.109.0.tgz#3ad12a060855956acec1c0a84f134e3be3ec8f41" + integrity sha512-nfxSIofPgj9QWvHahv8KTIj6eNhPLSLHkN6MRfXHkJYkVjF2QpTVFRCeV3Wz80/Z8/tMOvkrYJEVv+42tsWeWQ== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.108.0" - "@sentry-internal/typescript" "7.108.0" + "@sentry-internal/eslint-plugin-sdk" "7.109.0" + "@sentry-internal/typescript" "7.109.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,98 +180,98 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.108.0": - version "7.108.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.108.0.tgz#42e65c8d470b4a55ea76cc8d5aff570f512edfe9" - integrity sha512-Od5cnoeQb2RUoYtjI062JTgcb6SRxlcD6++5INQDtEQjkBqNvThL+/GZ7b5wCjiaPsyPTbbAd1kEgzeVzYo4oQ== +"@sentry-internal/eslint-plugin-sdk@7.109.0": + version "7.109.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.109.0.tgz#0ba78e0d02d857312a95143b6cbbc92bf62e33ca" + integrity sha512-rsL3xWvJJPTPvmty8n2rdY6cJiQ9Bj2mVmMOPrMb82IA00fQazqxurloIPDDfFE25hsENZb/WxOBmczwKyPhJQ== dependencies: requireindex "~1.1.0" -"@sentry-internal/feedback@7.108.0": - version "7.108.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.108.0.tgz#7033352abd304f1383ec47640e056a0dfd5132b7" - integrity sha512-8JcgZEnk1uWrXJhsd3iRvFtEiVeaWOEhN0NZwhwQXHfvODqep6JtrkY1yCIyxbpA37aZmrPc2JhyotRERGfUjg== - dependencies: - "@sentry/core" "7.108.0" - "@sentry/types" "7.108.0" - "@sentry/utils" "7.108.0" - -"@sentry-internal/replay-canvas@7.108.0": - version "7.108.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.108.0.tgz#641133c19c0e1c423617b8d791f53d6cd0b0a862" - integrity sha512-R5tvjGqWUV5vSk0N1eBgVW7wIADinrkfDEBZ9FyKP2mXHBobsyNGt30heJDEqYmVqluRqjU2NuIRapsnnrpGnA== - dependencies: - "@sentry/core" "7.108.0" - "@sentry/replay" "7.108.0" - "@sentry/types" "7.108.0" - "@sentry/utils" "7.108.0" - -"@sentry-internal/tracing@7.108.0": - version "7.108.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.108.0.tgz#d1e660701fb860cfae72b6ebfa8fb267533421fa" - integrity sha512-zuK5XsTsb+U+hgn3SPetYDAogrXsM16U/LLoMW7+TlC6UjlHGYQvmX3o+M2vntejoU1QZS8m1bCAZSMWEypAEw== - dependencies: - "@sentry/core" "7.108.0" - "@sentry/types" "7.108.0" - "@sentry/utils" "7.108.0" - -"@sentry-internal/typescript@7.108.0": - version "7.108.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.108.0.tgz#ea13a460e1d4c5a1eea939c85fa7d177d8d52b92" - integrity sha512-PXJgGg038sVSG4fl4a0Up1PPWLqTgFKTrAt+lawaRkDQT4nOS8dUGtzCMhYcgv6EsWArf16NF8I2UtmYHpW3oQ== - -"@sentry/browser@7.108.0": - version "7.108.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.108.0.tgz#b95810bb6572b63781f253615896f5afb1a3a5c0" - integrity sha512-FNpzsdTvGvdHJMUelqEouUXMZU7jC+dpN7CdT6IoHVVFEkoAgrjMVUhXZoQ/dmCkdKWHmFSQhJ8Fm6V+e9Aq0A== - dependencies: - "@sentry-internal/feedback" "7.108.0" - "@sentry-internal/replay-canvas" "7.108.0" - "@sentry-internal/tracing" "7.108.0" - "@sentry/core" "7.108.0" - "@sentry/replay" "7.108.0" - "@sentry/types" "7.108.0" - "@sentry/utils" "7.108.0" - -"@sentry/core@7.108.0": - version "7.108.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.108.0.tgz#a27e8d6f85f59c5730ce86071474f15ac899fde0" - integrity sha512-I/VNZCFgLASxHZaD0EtxZRM34WG9w2gozqgrKGNMzAymwmQ3K9g/1qmBy4e6iS3YRptb7J5UhQkZQHrcwBbjWQ== - dependencies: - "@sentry/types" "7.108.0" - "@sentry/utils" "7.108.0" - -"@sentry/node@7.108.0": - version "7.108.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.108.0.tgz#ed113dc1d39aaae32f7e9f681dcea41cf28eb5f1" - integrity sha512-pMxc9txnDDkU4Z8k2Uw/DPSLPehNtWV3mjJ3+my0AMORGYrXLkJI93tddlE5z/7k+GEJdj1HsOLgxUN0OU+HGA== - dependencies: - "@sentry-internal/tracing" "7.108.0" - "@sentry/core" "7.108.0" - "@sentry/types" "7.108.0" - "@sentry/utils" "7.108.0" - -"@sentry/replay@7.108.0": - version "7.108.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.108.0.tgz#baa679bd19b4e3729e607d3f84cff5048aeb3415" - integrity sha512-jo8fDOzcZJclP1+4n9jUtVxTlBFT9hXwxhAMrhrt70FV/nfmCtYQMD3bzIj79nwbhUtFP6pN39JH1o7Xqt1hxQ== - dependencies: - "@sentry-internal/tracing" "7.108.0" - "@sentry/core" "7.108.0" - "@sentry/types" "7.108.0" - "@sentry/utils" "7.108.0" - -"@sentry/types@7.108.0": - version "7.108.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.108.0.tgz#5ceb959c4dabe511fc441fec8c2465f2d624900f" - integrity sha512-bKtHITmBN3kqtqE5eVvL8mY8znM05vEodENwRpcm6TSrrBjC2RnwNWVwGstYDdHpNfFuKwC8mLY9bgMJcENo8g== - -"@sentry/utils@7.108.0": - version "7.108.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.108.0.tgz#0231042956aed2ef35809891592238530349dfd9" - integrity sha512-a45yEFD5qtgZaIFRAcFkG8C8lnDzn6t4LfLXuV4OafGAy/3ZAN3XN8wDnrruHkiUezSSANGsLg3bXaLW/JLvJw== - dependencies: - "@sentry/types" "7.108.0" +"@sentry-internal/feedback@7.109.0": + version "7.109.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.109.0.tgz#4657d7f36a1de3be466f42735d295e212b7eca11" + integrity sha512-EL7N++poxvJP9rYvh6vSu24tsKkOveNCcCj4IM7+irWPjsuD2GLYYlhp/A/Mtt9l7iqO4plvtiQU5HGk7smcTQ== + dependencies: + "@sentry/core" "7.109.0" + "@sentry/types" "7.109.0" + "@sentry/utils" "7.109.0" + +"@sentry-internal/replay-canvas@7.109.0": + version "7.109.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.109.0.tgz#9a00857994a9487428296feed4a9ddf2d62bab84" + integrity sha512-Lh/K60kmloR6lkPUcQP0iamw7B/MdEUEx/ImAx4tUSMrLj+IoUEcq/ECgnnVyQkJq59+8nPEKrVLt7x6PUPEjw== + dependencies: + "@sentry/core" "7.109.0" + "@sentry/replay" "7.109.0" + "@sentry/types" "7.109.0" + "@sentry/utils" "7.109.0" + +"@sentry-internal/tracing@7.109.0": + version "7.109.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.109.0.tgz#3effaa132c41a65378fa98146aea61228d528953" + integrity sha512-PzK/joC5tCuh2R/PRh+7dp+uuZl7pTsBIjPhVZHMTtb9+ls65WkdZJ1/uKXPouyz8NOo9Xok7aEvEo9seongyw== + dependencies: + "@sentry/core" "7.109.0" + "@sentry/types" "7.109.0" + "@sentry/utils" "7.109.0" + +"@sentry-internal/typescript@7.109.0": + version "7.109.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.109.0.tgz#134b07ed0ac68af90cfe8e622e29fa35d98e08f1" + integrity sha512-Ui1lchy1CdP8iUwyAMn/99sycU3EGFcw2GaQ7zWPzEr39c4Qp3iSvfIK+RPZREWA6y8FKHrqU80Xtww5XxHoSA== + +"@sentry/browser@7.109.0": + version "7.109.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.109.0.tgz#13b2623f43047f292cf7d6070128a7501e008693" + integrity sha512-yx+OFG+Ab9qUDDgV9ZDv8M9O9Mqr0fjKta/LMlWALYLjzkMvxsPlRPFj7oMBlHqOTVLDeg7lFYmsA8wyWQ8Z8g== + dependencies: + "@sentry-internal/feedback" "7.109.0" + "@sentry-internal/replay-canvas" "7.109.0" + "@sentry-internal/tracing" "7.109.0" + "@sentry/core" "7.109.0" + "@sentry/replay" "7.109.0" + "@sentry/types" "7.109.0" + "@sentry/utils" "7.109.0" + +"@sentry/core@7.109.0": + version "7.109.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.109.0.tgz#7a02f4af4a676950f6555f552a2a232d4458fcd5" + integrity sha512-xwD4U0IlvvlE/x/g/W1I8b4Cfb16SsCMmiEuBf6XxvAa3OfWBxKoqLifb3GyrbxMC4LbIIZCN/SvLlnGJPgszA== + dependencies: + "@sentry/types" "7.109.0" + "@sentry/utils" "7.109.0" + +"@sentry/node@7.109.0": + version "7.109.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.109.0.tgz#dbf152212e42a9b1648ff758ec5bffcb6bb0fa49" + integrity sha512-tqMNAES4X/iBl1eZRCmc29p//0id01FBLEiesNo5nk6ECl6/SaGMFAEwu1gsn90h/Bjgr04slwFOS4cR45V2PQ== + dependencies: + "@sentry-internal/tracing" "7.109.0" + "@sentry/core" "7.109.0" + "@sentry/types" "7.109.0" + "@sentry/utils" "7.109.0" + +"@sentry/replay@7.109.0": + version "7.109.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.109.0.tgz#f50fb0140c81fce660c44cc93c35988898b8348b" + integrity sha512-hCDjbTNO7ErW/XsaBXlyHFsUhneyBUdTec1Swf98TFEfVqNsTs6q338aUcaR8dGRLbLrJ9YU9D1qKq++v5h2CA== + dependencies: + "@sentry-internal/tracing" "7.109.0" + "@sentry/core" "7.109.0" + "@sentry/types" "7.109.0" + "@sentry/utils" "7.109.0" + +"@sentry/types@7.109.0": + version "7.109.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.109.0.tgz#d8778358114ed05be734661cc9e1e261f4494947" + integrity sha512-egCBnDv3YpVFoNzRLdP0soVrxVLCQ+rovREKJ1sw3rA2/MFH9WJ+DZZexsX89yeAFzy1IFsCp7/dEqudusml6g== + +"@sentry/utils@7.109.0": + version "7.109.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.109.0.tgz#7078e1400197abc1b0c436679bef980639500a86" + integrity sha512-3RjxMOLMBwZ5VSiH84+o/3NY2An4Zldjz0EbfEQNRY9yffRiCPJSQiCJID8EoylCFOh/PAhPimBhqbtWJxX6iw== + dependencies: + "@sentry/types" "7.109.0" "@sindresorhus/is@^4.0.0": version "4.6.0" From 3124d366c36de716a5d8bf842c525342cbd91e3f Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 3 Apr 2024 18:27:09 +0200 Subject: [PATCH 231/239] meta: Changelog for 4.22.0 release (#868) --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc94c5b2..fbe7763a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +## 4.22.0 + +- feat: Update from [v7.107.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.107.0) to + [v7.109.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.109.0) of JavaScript SDKs (#856, #867) +- fix: Stop Anr worker when app suspends (#858) + ## 4.21.0 - feat: Update from [v7.105.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.105.0) to From a71fa2dee63b061628e9cd3071e1969ebf2968ed Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Wed, 3 Apr 2024 16:28:09 +0000 Subject: [PATCH 232/239] release: 4.22.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9f69cd6f..49252b3f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.21.0", + "version": "4.22.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", @@ -106,4 +106,4 @@ "node": "18.12.1", "yarn": "1.22.19" } -} \ No newline at end of file +} From f5826ed520e8b8cb610926152cd2b6b3308260a0 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 18 Apr 2024 14:18:25 +0200 Subject: [PATCH 233/239] feat: Update Sentry SKDs to v7.110.0 (#878) --- package.json | 14 ++-- src/index.ts | 1 + src/main/index.ts | 1 + src/renderer/index.ts | 1 + src/renderer/sdk.ts | 2 +- yarn.lock | 190 +++++++++++++++++++++--------------------- 6 files changed, 106 insertions(+), 103 deletions(-) diff --git a/package.json b/package.json index 49252b3f..45e106c0 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.109.0", - "@sentry/core": "7.109.0", - "@sentry/node": "7.109.0", - "@sentry/types": "7.109.0", - "@sentry/utils": "7.109.0", + "@sentry/browser": "7.110.0", + "@sentry/core": "7.110.0", + "@sentry/node": "7.110.0", + "@sentry/types": "7.110.0", + "@sentry/utils": "7.110.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.109.0", - "@sentry-internal/typescript": "7.109.0", + "@sentry-internal/eslint-config-sdk": "7.110.0", + "@sentry-internal/typescript": "7.110.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/index.ts b/src/index.ts index 053b9368..d5874bcd 100644 --- a/src/index.ts +++ b/src/index.ts @@ -48,6 +48,7 @@ export { getCurrentScope, getGlobalScope, getIsolationScope, + // eslint-disable-next-line deprecation/deprecation Hub, // eslint-disable-next-line deprecation/deprecation lastEventId, diff --git a/src/main/index.ts b/src/main/index.ts index 96e6a1f9..56fca272 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -49,6 +49,7 @@ export { getCurrentScope, getGlobalScope, getIsolationScope, + // eslint-disable-next-line deprecation/deprecation Hub, // eslint-disable-next-line deprecation/deprecation makeMain, diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 73f4c7d1..5514f0f2 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -46,6 +46,7 @@ export { getCurrentScope, getGlobalScope, getIsolationScope, + // eslint-disable-next-line deprecation/deprecation Hub, // eslint-disable-next-line deprecation/deprecation makeMain, diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index afba995d..7f104723 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_109_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_110_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index 6a7b7c12..cafc3f17 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.109.0": - version "7.109.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.109.0.tgz#3ad12a060855956acec1c0a84f134e3be3ec8f41" - integrity sha512-nfxSIofPgj9QWvHahv8KTIj6eNhPLSLHkN6MRfXHkJYkVjF2QpTVFRCeV3Wz80/Z8/tMOvkrYJEVv+42tsWeWQ== +"@sentry-internal/eslint-config-sdk@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.110.0.tgz#d928ba988fab46a52a6499e852fe2521ba29f1bc" + integrity sha512-SC/ybGO6a+dzNkMIhTkX5nsOLT30U3ZJ3K3SV7PDnIqDlSdI1tZyjct/9xUqC78Ajnbo/6j4aX37lB28jMLeFA== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.109.0" - "@sentry-internal/typescript" "7.109.0" + "@sentry-internal/eslint-plugin-sdk" "7.110.0" + "@sentry-internal/typescript" "7.110.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,98 +180,98 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.109.0": - version "7.109.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.109.0.tgz#0ba78e0d02d857312a95143b6cbbc92bf62e33ca" - integrity sha512-rsL3xWvJJPTPvmty8n2rdY6cJiQ9Bj2mVmMOPrMb82IA00fQazqxurloIPDDfFE25hsENZb/WxOBmczwKyPhJQ== +"@sentry-internal/eslint-plugin-sdk@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.110.0.tgz#4f6d72cd3d33e6c3436bd872423bc1edd2ab563d" + integrity sha512-45tBX57Qbv+1V54IYl1lngAkjf5ycaP0e1br7yeNRLidRW2vNl/6nfWw4BO59ZNCJoE98cqeijHHYQvzPZKmzA== dependencies: requireindex "~1.1.0" -"@sentry-internal/feedback@7.109.0": - version "7.109.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.109.0.tgz#4657d7f36a1de3be466f42735d295e212b7eca11" - integrity sha512-EL7N++poxvJP9rYvh6vSu24tsKkOveNCcCj4IM7+irWPjsuD2GLYYlhp/A/Mtt9l7iqO4plvtiQU5HGk7smcTQ== - dependencies: - "@sentry/core" "7.109.0" - "@sentry/types" "7.109.0" - "@sentry/utils" "7.109.0" - -"@sentry-internal/replay-canvas@7.109.0": - version "7.109.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.109.0.tgz#9a00857994a9487428296feed4a9ddf2d62bab84" - integrity sha512-Lh/K60kmloR6lkPUcQP0iamw7B/MdEUEx/ImAx4tUSMrLj+IoUEcq/ECgnnVyQkJq59+8nPEKrVLt7x6PUPEjw== - dependencies: - "@sentry/core" "7.109.0" - "@sentry/replay" "7.109.0" - "@sentry/types" "7.109.0" - "@sentry/utils" "7.109.0" - -"@sentry-internal/tracing@7.109.0": - version "7.109.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.109.0.tgz#3effaa132c41a65378fa98146aea61228d528953" - integrity sha512-PzK/joC5tCuh2R/PRh+7dp+uuZl7pTsBIjPhVZHMTtb9+ls65WkdZJ1/uKXPouyz8NOo9Xok7aEvEo9seongyw== - dependencies: - "@sentry/core" "7.109.0" - "@sentry/types" "7.109.0" - "@sentry/utils" "7.109.0" - -"@sentry-internal/typescript@7.109.0": - version "7.109.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.109.0.tgz#134b07ed0ac68af90cfe8e622e29fa35d98e08f1" - integrity sha512-Ui1lchy1CdP8iUwyAMn/99sycU3EGFcw2GaQ7zWPzEr39c4Qp3iSvfIK+RPZREWA6y8FKHrqU80Xtww5XxHoSA== - -"@sentry/browser@7.109.0": - version "7.109.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.109.0.tgz#13b2623f43047f292cf7d6070128a7501e008693" - integrity sha512-yx+OFG+Ab9qUDDgV9ZDv8M9O9Mqr0fjKta/LMlWALYLjzkMvxsPlRPFj7oMBlHqOTVLDeg7lFYmsA8wyWQ8Z8g== - dependencies: - "@sentry-internal/feedback" "7.109.0" - "@sentry-internal/replay-canvas" "7.109.0" - "@sentry-internal/tracing" "7.109.0" - "@sentry/core" "7.109.0" - "@sentry/replay" "7.109.0" - "@sentry/types" "7.109.0" - "@sentry/utils" "7.109.0" - -"@sentry/core@7.109.0": - version "7.109.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.109.0.tgz#7a02f4af4a676950f6555f552a2a232d4458fcd5" - integrity sha512-xwD4U0IlvvlE/x/g/W1I8b4Cfb16SsCMmiEuBf6XxvAa3OfWBxKoqLifb3GyrbxMC4LbIIZCN/SvLlnGJPgszA== - dependencies: - "@sentry/types" "7.109.0" - "@sentry/utils" "7.109.0" - -"@sentry/node@7.109.0": - version "7.109.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.109.0.tgz#dbf152212e42a9b1648ff758ec5bffcb6bb0fa49" - integrity sha512-tqMNAES4X/iBl1eZRCmc29p//0id01FBLEiesNo5nk6ECl6/SaGMFAEwu1gsn90h/Bjgr04slwFOS4cR45V2PQ== - dependencies: - "@sentry-internal/tracing" "7.109.0" - "@sentry/core" "7.109.0" - "@sentry/types" "7.109.0" - "@sentry/utils" "7.109.0" - -"@sentry/replay@7.109.0": - version "7.109.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.109.0.tgz#f50fb0140c81fce660c44cc93c35988898b8348b" - integrity sha512-hCDjbTNO7ErW/XsaBXlyHFsUhneyBUdTec1Swf98TFEfVqNsTs6q338aUcaR8dGRLbLrJ9YU9D1qKq++v5h2CA== - dependencies: - "@sentry-internal/tracing" "7.109.0" - "@sentry/core" "7.109.0" - "@sentry/types" "7.109.0" - "@sentry/utils" "7.109.0" - -"@sentry/types@7.109.0": - version "7.109.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.109.0.tgz#d8778358114ed05be734661cc9e1e261f4494947" - integrity sha512-egCBnDv3YpVFoNzRLdP0soVrxVLCQ+rovREKJ1sw3rA2/MFH9WJ+DZZexsX89yeAFzy1IFsCp7/dEqudusml6g== - -"@sentry/utils@7.109.0": - version "7.109.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.109.0.tgz#7078e1400197abc1b0c436679bef980639500a86" - integrity sha512-3RjxMOLMBwZ5VSiH84+o/3NY2An4Zldjz0EbfEQNRY9yffRiCPJSQiCJID8EoylCFOh/PAhPimBhqbtWJxX6iw== - dependencies: - "@sentry/types" "7.109.0" +"@sentry-internal/feedback@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.110.0.tgz#7103a08cd6bfb43583087d7476a5f24c5857cc22" + integrity sha512-hrfWa3WkSOiBO5Srcr1j4kuGOlbsQic+REpLOofllVIs56DOo9+Aj9svxT+dcvZERv/nlFSV/E0BfGy9g08IEg== + dependencies: + "@sentry/core" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry-internal/replay-canvas@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.110.0.tgz#af21b56157f44c44a2eedf4326ef37f4ea440fa8" + integrity sha512-SNa+AfyfX+vc6Xw0pIfDsa5Qnc9cpexU6M2D19gadtVhmep7qoFBuhBVZrSv6BtdCxvrb5EyYsHYGfjQdIDcvg== + dependencies: + "@sentry/core" "7.110.0" + "@sentry/replay" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry-internal/tracing@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.110.0.tgz#00f2086b0efb8dd5a67831074e52b176aa542d32" + integrity sha512-IIHHa9e/mE7uOMJfNELI8adyoELxOy6u6TNCn5t6fphmq84w8FTc9adXkG/FY2AQpglkIvlILojfMROFB2aaAQ== + dependencies: + "@sentry/core" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry-internal/typescript@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.110.0.tgz#643868b601fac03cfdc36b2fb8c1b3eececee1d0" + integrity sha512-ANRip5PD184omixtJtpI7c25oCW8wmYi7Suk0nV4kY0X1IIxMEHZhTBWnSBadnJeofjh/PnZzvYoZLePb8RGOA== + +"@sentry/browser@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.110.0.tgz#40900d76a8f423a7163a594ec9267a2e0ebd8a5b" + integrity sha512-gIxedVm6ZgkjQfgCDgLWJgAsolq6OxV8hQ2j1+RaDL2RngvelFo/vlX5f2sD6EbjVp77Cri8u5GkMJF+v4p84g== + dependencies: + "@sentry-internal/feedback" "7.110.0" + "@sentry-internal/replay-canvas" "7.110.0" + "@sentry-internal/tracing" "7.110.0" + "@sentry/core" "7.110.0" + "@sentry/replay" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry/core@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.110.0.tgz#2945d3ac0ef116ed313fbfb9da4f483b66fe5bca" + integrity sha512-g4suCQO94mZsKVaAbyD1zLFC5YSuBQCIPHXx9fdgtfoPib7BWjWWePkllkrvsKAv4u8Oq05RfnKOhOMRHpOKqg== + dependencies: + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry/node@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.110.0.tgz#c75a7568e641ddb48d1636e62aaa37e9589e8806" + integrity sha512-YPfweCSzo/omnx5q1xOEZfI8Em3jnPqj7OM4ObXmoSKEK+kM1oUF3BTRzw5BJOaOCSTBFY1RAsGyfVIyrwxWnA== + dependencies: + "@sentry-internal/tracing" "7.110.0" + "@sentry/core" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry/replay@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.110.0.tgz#e185c88cec573724b46b79ada7ef5a7098acd1b6" + integrity sha512-EEpGPf3iBJjWejvoxKLVMnLtLNwPTUxHJV1oxUkbcSi3B/tG5hW7LArYDjAcvkfa4VmA8JLCwj2vYU5MQ8tj6g== + dependencies: + "@sentry-internal/tracing" "7.110.0" + "@sentry/core" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry/types@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.110.0.tgz#c3f252b008cab905097fc71e174191f20bdaf4f3" + integrity sha512-DqYBLyE8thC5P5MuPn+sj8tL60nCd/f5cerFFPcudn5nJ4Zs1eI6lKlwwyHYTEu5c4KFjCB0qql6kXfwAHmTyA== + +"@sentry/utils@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.110.0.tgz#68ef59359d608a1a6a7205b780196a042ad73ab2" + integrity sha512-VBsdLLN+5tf73fhf/Cm7JIsUJ6y9DkJj8h4I6Mxx0rszrvOyH6S5px40K+V4jdLBzMEvVinC7q2Cbf1YM18BSw== + dependencies: + "@sentry/types" "7.110.0" "@sindresorhus/is@^4.0.0": version "4.6.0" From 68023643e8162b007279cf497ee56f06c574e1a7 Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Thu, 18 Apr 2024 16:03:29 +0200 Subject: [PATCH 234/239] meta: Changelog for v4.23.0 release (#882) --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fbe7763a..20ec6f00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## Unreleased +## 4.23.0 + +- feat: Update from [v7.109.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.109.0) to + [v7.110.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.110.0) of JavaScript SDKs (#878) + ## 4.22.0 - feat: Update from [v7.107.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.107.0) to From 9f1b48179607bbf3629b867e934a253c3d3f2866 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad <aprasad@sentry.io> Date: Thu, 18 Apr 2024 12:28:55 -0400 Subject: [PATCH 235/239] release: 4.23.0 (#883) Co-authored-by: getsentry-bot <bot@sentry.io> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 45e106c0..f81dfa4d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.22.0", + "version": "4.23.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js", From d248e073c318ec471021b3b431d5249ca905e2af Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Mon, 22 Apr 2024 22:52:52 +0200 Subject: [PATCH 236/239] fix: Missing replay scope (v4) (#887) --- src/common/normalize.ts | 6 ++++++ test/e2e/test-apps/other/browser-replay/event-replay.json | 7 ++++++- test/e2e/test-apps/other/browser-replay/src/index.html | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/common/normalize.ts b/src/common/normalize.ts index 26988187..04376ce2 100644 --- a/src/common/normalize.ts +++ b/src/common/normalize.ts @@ -1,3 +1,4 @@ +import { getCurrentScope } from '@sentry/node'; import { Envelope, Event, Profile, ReplayEvent } from '@sentry/types'; import { addItemToEnvelope, createEnvelope, forEachEnvelopeItem, normalizeUrlToBase } from '@sentry/utils'; @@ -72,6 +73,11 @@ export function normalizeUrlsInReplayEnvelope(envelope: Envelope, basePath: stri isReplay = true; const [headers, event] = item as [{ type: 'replay_event' }, ReplayEvent]; + const currentScope = getCurrentScope().getScopeData(); + event.breadcrumbs = currentScope.breadcrumbs; + event.tags = currentScope.tags; + event.user = currentScope.user; + if (Array.isArray(event.urls)) { event.urls = event.urls.map((url) => normalizeUrlToBase(url, basePath)); } diff --git a/test/e2e/test-apps/other/browser-replay/event-replay.json b/test/e2e/test-apps/other/browser-replay/event-replay.json index e5389c24..435b10b9 100644 --- a/test/e2e/test-apps/other/browser-replay/event-replay.json +++ b/test/e2e/test-apps/other/browser-replay/event-replay.json @@ -22,7 +22,12 @@ "request": { "url": "app:///src/index.html" }, - "platform": "javascript" + "platform": "javascript", + "breadcrumbs": [ + { + "message": "Some renderer message" + } + ] }, "attachments": [], "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", diff --git a/test/e2e/test-apps/other/browser-replay/src/index.html b/test/e2e/test-apps/other/browser-replay/src/index.html index 352e174c..41b5fb8e 100644 --- a/test/e2e/test-apps/other/browser-replay/src/index.html +++ b/test/e2e/test-apps/other/browser-replay/src/index.html @@ -14,6 +14,8 @@ replaysOnErrorSampleRate: 1, }); + console.log('Some renderer message'); + setTimeout(() => { throw new Error('Some renderer error'); }, 1000); From d180989ce9c7600bb51ebc6509403da2d855aeae Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Tue, 23 Apr 2024 16:50:45 +0200 Subject: [PATCH 237/239] feat: Update to v7.112.0 of the JavaScript SDKs (#888) --- package.json | 14 +-- src/renderer/sdk.ts | 2 +- yarn.lock | 221 +++++++++++++++++++++++++------------------- 3 files changed, 134 insertions(+), 103 deletions(-) diff --git a/package.json b/package.json index f81dfa4d..e6de65fc 100644 --- a/package.json +++ b/package.json @@ -55,19 +55,19 @@ "e2e": "cross-env TS_NODE_PROJECT=tsconfig.test.json xvfb-maybe mocha --require ts-node/register/transpile-only --retries 3 ./test/e2e/*.ts" }, "dependencies": { - "@sentry/browser": "7.110.0", - "@sentry/core": "7.110.0", - "@sentry/node": "7.110.0", - "@sentry/types": "7.110.0", - "@sentry/utils": "7.110.0", + "@sentry/browser": "7.112.0", + "@sentry/core": "7.112.0", + "@sentry/node": "7.112.0", + "@sentry/types": "7.112.0", + "@sentry/utils": "7.112.0", "deepmerge": "4.3.0", "tslib": "^2.5.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-typescript": "^11.1.4", - "@sentry-internal/eslint-config-sdk": "7.110.0", - "@sentry-internal/typescript": "7.110.0", + "@sentry-internal/eslint-config-sdk": "7.112.0", + "@sentry-internal/typescript": "7.112.0", "@types/busboy": "^0.2.3", "@types/chai": "^4.2.10", "@types/chai-as-promised": "^7.1.5", diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index 7f104723..28b1bf50 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -46,7 +46,7 @@ interface ElectronRendererOptions extends BrowserOptions { export function init<O extends ElectronRendererOptions>( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_110_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v7_112_0: O) => void = browserInit, ): void { ensureProcess('renderer'); diff --git a/yarn.lock b/yarn.lock index cafc3f17..dc21f233 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry-internal/eslint-config-sdk@7.110.0": - version "7.110.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.110.0.tgz#d928ba988fab46a52a6499e852fe2521ba29f1bc" - integrity sha512-SC/ybGO6a+dzNkMIhTkX5nsOLT30U3ZJ3K3SV7PDnIqDlSdI1tZyjct/9xUqC78Ajnbo/6j4aX37lB28jMLeFA== +"@sentry-internal/eslint-config-sdk@7.112.0": + version "7.112.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.112.0.tgz#e6cdad04f7fdf6eebc672836fc90d3cdfe9b6571" + integrity sha512-bkWmtRuwWv1NLOB6DX0bFb+NdiwInamvNzOCiu+Qa2i1+wqJNMT4b8babol4+YXfvVEJN58/iG8D3EMlVAWIlg== dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.110.0" - "@sentry-internal/typescript" "7.110.0" + "@sentry-internal/eslint-plugin-sdk" "7.112.0" + "@sentry-internal/typescript" "7.112.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -180,98 +180,110 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@7.110.0": - version "7.110.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.110.0.tgz#4f6d72cd3d33e6c3436bd872423bc1edd2ab563d" - integrity sha512-45tBX57Qbv+1V54IYl1lngAkjf5ycaP0e1br7yeNRLidRW2vNl/6nfWw4BO59ZNCJoE98cqeijHHYQvzPZKmzA== +"@sentry-internal/eslint-plugin-sdk@7.112.0": + version "7.112.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.112.0.tgz#83cb175c581baa5698eb15b4d8e8ca8ccb0047f3" + integrity sha512-n1lhJZf7Q9XCv7LIT+GjG2pNsxGlW1mguzrflM7NuIxOT2CUDmWgFvszaApjtq2gPj7I8sphklSf1eyH7KaR/g== dependencies: requireindex "~1.1.0" -"@sentry-internal/feedback@7.110.0": - version "7.110.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.110.0.tgz#7103a08cd6bfb43583087d7476a5f24c5857cc22" - integrity sha512-hrfWa3WkSOiBO5Srcr1j4kuGOlbsQic+REpLOofllVIs56DOo9+Aj9svxT+dcvZERv/nlFSV/E0BfGy9g08IEg== - dependencies: - "@sentry/core" "7.110.0" - "@sentry/types" "7.110.0" - "@sentry/utils" "7.110.0" - -"@sentry-internal/replay-canvas@7.110.0": - version "7.110.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.110.0.tgz#af21b56157f44c44a2eedf4326ef37f4ea440fa8" - integrity sha512-SNa+AfyfX+vc6Xw0pIfDsa5Qnc9cpexU6M2D19gadtVhmep7qoFBuhBVZrSv6BtdCxvrb5EyYsHYGfjQdIDcvg== - dependencies: - "@sentry/core" "7.110.0" - "@sentry/replay" "7.110.0" - "@sentry/types" "7.110.0" - "@sentry/utils" "7.110.0" - -"@sentry-internal/tracing@7.110.0": - version "7.110.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.110.0.tgz#00f2086b0efb8dd5a67831074e52b176aa542d32" - integrity sha512-IIHHa9e/mE7uOMJfNELI8adyoELxOy6u6TNCn5t6fphmq84w8FTc9adXkG/FY2AQpglkIvlILojfMROFB2aaAQ== - dependencies: - "@sentry/core" "7.110.0" - "@sentry/types" "7.110.0" - "@sentry/utils" "7.110.0" - -"@sentry-internal/typescript@7.110.0": - version "7.110.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.110.0.tgz#643868b601fac03cfdc36b2fb8c1b3eececee1d0" - integrity sha512-ANRip5PD184omixtJtpI7c25oCW8wmYi7Suk0nV4kY0X1IIxMEHZhTBWnSBadnJeofjh/PnZzvYoZLePb8RGOA== - -"@sentry/browser@7.110.0": - version "7.110.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.110.0.tgz#40900d76a8f423a7163a594ec9267a2e0ebd8a5b" - integrity sha512-gIxedVm6ZgkjQfgCDgLWJgAsolq6OxV8hQ2j1+RaDL2RngvelFo/vlX5f2sD6EbjVp77Cri8u5GkMJF+v4p84g== - dependencies: - "@sentry-internal/feedback" "7.110.0" - "@sentry-internal/replay-canvas" "7.110.0" - "@sentry-internal/tracing" "7.110.0" - "@sentry/core" "7.110.0" - "@sentry/replay" "7.110.0" - "@sentry/types" "7.110.0" - "@sentry/utils" "7.110.0" - -"@sentry/core@7.110.0": - version "7.110.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.110.0.tgz#2945d3ac0ef116ed313fbfb9da4f483b66fe5bca" - integrity sha512-g4suCQO94mZsKVaAbyD1zLFC5YSuBQCIPHXx9fdgtfoPib7BWjWWePkllkrvsKAv4u8Oq05RfnKOhOMRHpOKqg== - dependencies: - "@sentry/types" "7.110.0" - "@sentry/utils" "7.110.0" - -"@sentry/node@7.110.0": - version "7.110.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.110.0.tgz#c75a7568e641ddb48d1636e62aaa37e9589e8806" - integrity sha512-YPfweCSzo/omnx5q1xOEZfI8Em3jnPqj7OM4ObXmoSKEK+kM1oUF3BTRzw5BJOaOCSTBFY1RAsGyfVIyrwxWnA== - dependencies: - "@sentry-internal/tracing" "7.110.0" - "@sentry/core" "7.110.0" - "@sentry/types" "7.110.0" - "@sentry/utils" "7.110.0" - -"@sentry/replay@7.110.0": - version "7.110.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.110.0.tgz#e185c88cec573724b46b79ada7ef5a7098acd1b6" - integrity sha512-EEpGPf3iBJjWejvoxKLVMnLtLNwPTUxHJV1oxUkbcSi3B/tG5hW7LArYDjAcvkfa4VmA8JLCwj2vYU5MQ8tj6g== - dependencies: - "@sentry-internal/tracing" "7.110.0" - "@sentry/core" "7.110.0" - "@sentry/types" "7.110.0" - "@sentry/utils" "7.110.0" - -"@sentry/types@7.110.0": - version "7.110.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.110.0.tgz#c3f252b008cab905097fc71e174191f20bdaf4f3" - integrity sha512-DqYBLyE8thC5P5MuPn+sj8tL60nCd/f5cerFFPcudn5nJ4Zs1eI6lKlwwyHYTEu5c4KFjCB0qql6kXfwAHmTyA== - -"@sentry/utils@7.110.0": - version "7.110.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.110.0.tgz#68ef59359d608a1a6a7205b780196a042ad73ab2" - integrity sha512-VBsdLLN+5tf73fhf/Cm7JIsUJ6y9DkJj8h4I6Mxx0rszrvOyH6S5px40K+V4jdLBzMEvVinC7q2Cbf1YM18BSw== - dependencies: - "@sentry/types" "7.110.0" +"@sentry-internal/feedback@7.112.0": + version "7.112.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.112.0.tgz#3dd9ccf7a57fe6a0d643a4ae534dcd0f346d607c" + integrity sha512-aqndxnTvZnqo/uUhuWLNWY/0W3zOxNs9FofLYi1SK5+QzMqDIyFY1dc9+ZqQH3/9GIlEGao+zveGAHeUEtpE8g== + dependencies: + "@sentry/core" "7.112.0" + "@sentry/types" "7.112.0" + "@sentry/utils" "7.112.0" + +"@sentry-internal/replay-canvas@7.112.0": + version "7.112.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.112.0.tgz#339d4cbf97c7a1573402459c700331b3375b0de7" + integrity sha512-DwpGY5oZf0ab4Jm9HtM8fB3xqnpAcxBKORqiVHZizz7eo0arrb1n9HCXcxsRNNOAuMRBS8aEHKberfdL6rYpyw== + dependencies: + "@sentry/core" "7.112.0" + "@sentry/replay" "7.112.0" + "@sentry/types" "7.112.0" + "@sentry/utils" "7.112.0" + +"@sentry-internal/tracing@7.112.0": + version "7.112.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.112.0.tgz#bf77cbf613a95379e6ae4dfe0f53bfe445cd32b6" + integrity sha512-PkA3NaSg4nTWp9pwVsV9x0EBiY0pEAnIboIpMuLGE5MJ/FL10NC5Fn1GPebcxNnOou62dM7P/z7Wtcm8czAn6A== + dependencies: + "@sentry/core" "7.112.0" + "@sentry/types" "7.112.0" + "@sentry/utils" "7.112.0" + +"@sentry-internal/typescript@7.112.0": + version "7.112.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.112.0.tgz#9f7e26903f1c15c60a936b46dd665337ef3fb90d" + integrity sha512-f7tAj2/VZVkesrmk36teyV1ew3NmNe5M47ODPMZvDwxItAIfOpxwrnu90QGyXEpIrv/SaE332P1Q+dcARwuU5A== + +"@sentry/browser@7.112.0": + version "7.112.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.112.0.tgz#9d20bb62f848738c0711cdd2c01a122bac917b37" + integrity sha512-xqxtlQ/GMHxYcJYAhWR0ELO4kCnQV9GuIcBUEHlU/mYbPBDPxNYFzXkoz3514DBKxRVTHDkVle6vLuG0yKvXsg== + dependencies: + "@sentry-internal/feedback" "7.112.0" + "@sentry-internal/replay-canvas" "7.112.0" + "@sentry-internal/tracing" "7.112.0" + "@sentry/core" "7.112.0" + "@sentry/integrations" "7.112.0" + "@sentry/replay" "7.112.0" + "@sentry/types" "7.112.0" + "@sentry/utils" "7.112.0" + +"@sentry/core@7.112.0": + version "7.112.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.112.0.tgz#081516c160c1e35ebb09d2110cee84a4c84a23d5" + integrity sha512-q4K0fTULXMf9vb0Je6qFwQyVjfMvuPiKRRvRHcpWvWudV7oTcfPixlbbIQaj3OiY3nrjk5q86hktqboI/Z6ISw== + dependencies: + "@sentry/types" "7.112.0" + "@sentry/utils" "7.112.0" + +"@sentry/integrations@7.112.0": + version "7.112.0" + resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.112.0.tgz#bfe2ec6bac6228ef1b2f31e6484131283e654599" + integrity sha512-brN6eZkXuz1e/OKhMGJsAZjc0cUU+5G+LQWet+gGXWVGM2v7uY7mKDHr5Yl/c8WxeJBurjJzJn7YmtmR9++ZKQ== + dependencies: + "@sentry/core" "7.112.0" + "@sentry/types" "7.112.0" + "@sentry/utils" "7.112.0" + localforage "^1.8.1" + +"@sentry/node@7.112.0": + version "7.112.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.112.0.tgz#ab32ac0d0c1908bd39484123e30024029a313b9c" + integrity sha512-Me0Um3PbPQADHhm5zJ1EM4/me+i1OMT3w+1ZUgkPGX+2Wtqfp0djHF/SzCOL45X1IR+YLVrcCTpyAWRhPZAdVw== + dependencies: + "@sentry-internal/tracing" "7.112.0" + "@sentry/core" "7.112.0" + "@sentry/integrations" "7.112.0" + "@sentry/types" "7.112.0" + "@sentry/utils" "7.112.0" + +"@sentry/replay@7.112.0": + version "7.112.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.112.0.tgz#ddd0a3c1d93456fbb189ffe625cbb07456a84b27" + integrity sha512-uP38yQpYKdU9onJEl77nSJslajXMbTLp3j+8EK4tNnXDMv+yDnSouODEdHQyX9fajKHsFi/FjjOIrVujR0Qd7w== + dependencies: + "@sentry-internal/tracing" "7.112.0" + "@sentry/core" "7.112.0" + "@sentry/types" "7.112.0" + "@sentry/utils" "7.112.0" + +"@sentry/types@7.112.0": + version "7.112.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.112.0.tgz#1bd482e21db854e0235875bc57d9649e2bd07ba1" + integrity sha512-ASonavVCSrgDjMyWjuNMSytKMGYJq7d/1+IoBJsQFLgLe1gLIXuDNbhfUAM4A+muQUGZepV9iRX4ZYhiROMHVQ== + +"@sentry/utils@7.112.0": + version "7.112.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.112.0.tgz#e9f09d63148f30a452905c9079de78fb52b3af9c" + integrity sha512-dNGcNWKoJE9VwIAZxQsqC6/7BC+8wn1rT7Km9S8xltcjhRvaK4n3QZwXoNLHjNWT0mS2lZaFyRx2hsHjblQqLg== + dependencies: + "@sentry/types" "7.112.0" "@sindresorhus/is@^4.0.0": version "4.6.0" @@ -2225,6 +2237,11 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -2610,6 +2627,13 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +lie@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" + integrity sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw== + dependencies: + immediate "~3.0.5" + load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -2620,6 +2644,13 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" +localforage@^1.8.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4" + integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg== + dependencies: + lie "3.1.1" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" From 8d0abdc2a78706b3a7a39ee218aee1aeb4332a3e Mon Sep 17 00:00:00 2001 From: Tim Fish <tim@timfish.uk> Date: Wed, 24 Apr 2024 22:14:16 +0200 Subject: [PATCH 238/239] meta: Changelog for v4.24.0 release (#892) --- .github/workflows/build.yml | 2 +- CHANGELOG.md | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 95388eca..2034a94e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -72,7 +72,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, windows-latest, macos-latest] + os: [ubuntu-latest, windows-latest, macos-13] electron: ${{ fromJson(needs.build.outputs.matrix) }} env: ELECTRON_VERSION: ${{ matrix.electron }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 20ec6f00..0b875313 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +## 4.24.0 + +- feat: Update from [v7.110.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.110.0) to + [v7.112.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.112.0) of JavaScript SDKs (#888) +- fix: Missing Replay scope (#887) + ## 4.23.0 - feat: Update from [v7.109.0](https://github.com/getsentry/sentry-javascript/releases/tag/7.109.0) to From c293981f35c33bbb11f13d04fe21003f770f2b12 Mon Sep 17 00:00:00 2001 From: getsentry-bot <bot@sentry.io> Date: Wed, 24 Apr 2024 20:15:01 +0000 Subject: [PATCH 239/239] release: 4.24.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e6de65fc..d27da33f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sentry/electron", "description": "Official Sentry SDK for Electron", - "version": "4.23.0", + "version": "4.24.0", "main": "./index.js", "module": "./esm/main/index.js", "browser": "./esm/renderer/index.js",