From 3fcb84a56a98b2e9a3d89d32d9fc205e014e231c Mon Sep 17 00:00:00 2001 From: Yousif Ahmed Date: Fri, 25 Nov 2022 14:14:54 +0000 Subject: [PATCH 01/28] clear state from renderer config once synched --- .../client-state-updates.js | 7 +++++++ .../test/client-state-updates.test.ts | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/packages/plugin-electron-renderer-client-state-updates/client-state-updates.js b/packages/plugin-electron-renderer-client-state-updates/client-state-updates.js index 7a2f560d34..00523bda64 100644 --- a/packages/plugin-electron-renderer-client-state-updates/client-state-updates.js +++ b/packages/plugin-electron-renderer-client-state-updates/client-state-updates.js @@ -52,6 +52,13 @@ module.exports = (BugsnagIpcRenderer = window.__bugsnag_ipc__) => ({ client._logger.error(e) } + // Clear synched state from the renderer config + client._metadata = {} + client._featuresIndex = {} + client._features = [] + client._context = undefined + client._user = {} + // use main process state once configured properties are synched client.getContext = safeExec(client, BugsnagIpcRenderer, 'getContext') diff --git a/packages/plugin-electron-renderer-client-state-updates/test/client-state-updates.test.ts b/packages/plugin-electron-renderer-client-state-updates/test/client-state-updates.test.ts index 37e42f0483..95d493d7c8 100644 --- a/packages/plugin-electron-renderer-client-state-updates/test/client-state-updates.test.ts +++ b/packages/plugin-electron-renderer-client-state-updates/test/client-state-updates.test.ts @@ -202,6 +202,25 @@ describe('clientStateUpdatesPlugin', () => { }) }) + it('does not store state in renderer client', () => { + const mockBugsnagIpcRenderer = { + update: jest.fn() + } + + const client = new Client({ + apiKey: '123', + metadata: { section: { key: 'value' } }, + featureFlags: [{ name: 'abc' }, { name: 'xyz', variant: '123' }], + context: 'renderer config', + user: { id: 'ab23' } + }, undefined, [clientStateUpdatesPlugin(mockBugsnagIpcRenderer)]) + + expect(client._metadata).toEqual({}) + expect(client._user).toEqual({}) + expect(client._features).toStrictEqual([]) + expect(client._context).toEqual(undefined) + }) + it('starts sessions', () => { const mockBugsnagIpcRenderer = { startSession: jest.fn() } From da59de8a8f3da82c4628316fd30520b930f3df06 Mon Sep 17 00:00:00 2001 From: Yousif Ahmed Date: Tue, 20 Dec 2022 17:28:03 +0000 Subject: [PATCH 02/28] Update feature flag integration tests --- test/electron/features/feature-flags.feature | 49 ++++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/test/electron/features/feature-flags.feature b/test/electron/features/feature-flags.feature index fcedb3e8c7..1e7a14198f 100644 --- a/test/electron/features/feature-flags.feature +++ b/test/electron/features/feature-flags.feature @@ -94,10 +94,10 @@ Scenario: feature flags are attached to unhandled errors in a renderer process | Bugsnag-Integrity | {BODY_SHA1} | And the event contains the following feature flags: | featureFlag | variant | - | from renderer config | | | from main config 1 | 1234 | | from main config 2 | | | from main at runtime | runtime 1 | + | from renderer config | | | from renderer at runtime 1 | runtime | | from renderer at runtime 2 | | | from renderer on error | on error | @@ -119,10 +119,10 @@ Scenario: feature flags are attached to handled errors in a renderer process | Bugsnag-Integrity | {BODY_SHA1} | And the event contains the following feature flags: | featureFlag | variant | - | from renderer config | | | from main config 1 | 1234 | | from main config 2 | | | from main at runtime | runtime 1 | + | from renderer config | | | from renderer at runtime 1 | runtime | | from renderer at runtime 2 | | | from renderer on error | on error | @@ -130,6 +130,49 @@ Scenario: feature flags are attached to handled errors in a renderer process And the contents of an event request matches "renderer/handled-error/default.json" Scenario: feature flags can be cleared entirely in a renderer process with an unhandled error + Given I launch an app with configuration: + | bugsnag | feature-flags | + | renderer_config | { "featureFlags": [{ "name": "from renderer config" }] } | + When I click "renderer-clear-feature-flags-now" + And I click "renderer-uncaught-exception" + Then the total requests received by the server matches: + | events | 1 | + | sessions | 1 | + And the headers of every event request contains: + | Bugsnag-API-Key | 6425093c6530f554a9897d2d7d38e248 | + | Content-Type | application/json | + | Bugsnag-Integrity | {BODY_SHA1} | + # the renderer and main process on error callbacks each add a feature flag after + # the flags are cleared, so there are still two feature flags present + And the event contains the following feature flags: + | featureFlag | variant | + | from renderer on error | on error | + | from main on error | on error 1 | + And the contents of an event request matches "renderer/uncaught-exception/default.json" + +Scenario: feature flags can be cleared entirely in a renderer process with a handled error + Given I launch an app with configuration: + | bugsnag | feature-flags | + | renderer_config | { "featureFlags": [{ "name": "from renderer config" }] } | + When I click "renderer-clear-feature-flags-now" + And I click "custom-breadcrumb" + And I click "renderer-notify" + Then the total requests received by the server matches: + | events | 1 | + | sessions | 1 | + And the headers of every event request contains: + | Bugsnag-API-Key | 6425093c6530f554a9897d2d7d38e248 | + | Content-Type | application/json | + | Bugsnag-Integrity | {BODY_SHA1} | + # the renderer and main process on error callbacks each add a feature flag after + # the flags are cleared, so there are still two feature flags present + And the event contains the following feature flags: + | featureFlag | variant | + | from renderer on error | on error | + | from main on error | on error 1 | + And the contents of an event request matches "renderer/handled-error/default.json" + +Scenario: feature flags can be cleared entirely via a callback in a renderer process with an unhandled error Given I launch an app with configuration: | bugsnag | feature-flags | | renderer_config | { "featureFlags": [{ "name": "from renderer config" }] } | @@ -150,7 +193,7 @@ Scenario: feature flags can be cleared entirely in a renderer process with an un | from main on error | on error 1 | And the contents of an event request matches "renderer/uncaught-exception/default.json" -Scenario: feature flags can be cleared entirely in a renderer process with a handled error +Scenario: feature flags can be cleared entirely via a callback in a renderer process with a handled error Given I launch an app with configuration: | bugsnag | feature-flags | | renderer_config | { "featureFlags": [{ "name": "from renderer config" }] } | From d2aa25f3414e827bdc0cae26704d504b610ad096 Mon Sep 17 00:00:00 2001 From: Yousif Ahmed Date: Wed, 21 Dec 2022 11:23:16 +0000 Subject: [PATCH 03/28] Add integration tests for clearing user, context and metadata set in renderer --- .../electron/features/renderer-config.feature | 22 +++++ test/electron/fixtures/app/index.html | 5 + test/electron/fixtures/app/renderer.js | 12 +++ .../events/renderer/config/clear-context.json | 92 ++++++++++++++++++ .../renderer/config/clear-metadata.json | 92 ++++++++++++++++++ .../events/renderer/config/clear-user.json | 92 ++++++++++++++++++ .../events/renderer/config/context.json | 93 ++++++++++++++++++ .../events/renderer/config/metadata.json | 95 +++++++++++++++++++ .../fixtures/events/renderer/config/user.json | 94 ++++++++++++++++++ 9 files changed, 597 insertions(+) create mode 100644 test/electron/fixtures/events/renderer/config/clear-context.json create mode 100644 test/electron/fixtures/events/renderer/config/clear-metadata.json create mode 100644 test/electron/fixtures/events/renderer/config/clear-user.json create mode 100644 test/electron/fixtures/events/renderer/config/context.json create mode 100644 test/electron/fixtures/events/renderer/config/metadata.json create mode 100644 test/electron/fixtures/events/renderer/config/user.json diff --git a/test/electron/features/renderer-config.feature b/test/electron/features/renderer-config.feature index 24a7169e73..d8ede118ca 100644 --- a/test/electron/features/renderer-config.feature +++ b/test/electron/features/renderer-config.feature @@ -16,3 +16,25 @@ Feature: Setting config options in renderers | property | config | | appType | { "appType": "real great" } | | codeBundleId | { "codeBundleId": "1.0.0-r0123" } | + | user | { "user": { "id": "3", "name": "Bugs Nag", "email": "bugs.nag@bugsnag.com" } } | + | context | { "context": "renderer context" } | + | metadata | { "metadata": { "renderer": { "key": "value" } } } | + + Scenario Outline: Clearing config options set in renderer config + Given I launch an app with configuration: + | renderer_config | | + When I click "renderer-" + And I click "renderer-notify" + Then the total requests received by the server matches: + | events | 1 | + Then the headers of every event request contains: + | Bugsnag-API-Key | 6425093c6530f554a9897d2d7d38e248 | + | Content-Type | application/json | + | Bugsnag-Integrity | {BODY_SHA1} | + Then the contents of an event request matches "renderer/config/.json" + + Examples: + | property | config | + | clear-user | { "user": { "id": "3", "name": "Bugs Nag", "email": "bugs.nag@bugsnag.com" } } | + | clear-context | { "context": "renderer context" } | + | clear-metadata | { "metadata": { "renderer": { "key": "value" } } } | \ No newline at end of file diff --git a/test/electron/fixtures/app/index.html b/test/electron/fixtures/app/index.html index 4ca6f03f6a..085a088ae2 100644 --- a/test/electron/fixtures/app/index.html +++ b/test/electron/fixtures/app/index.html @@ -59,5 +59,10 @@

actions

  • immediately clear feature flags in main process
  • immediately clear feature flags in renderer
  • + diff --git a/test/electron/fixtures/app/renderer.js b/test/electron/fixtures/app/renderer.js index 34ac818885..fab57ec896 100644 --- a/test/electron/fixtures/app/renderer.js +++ b/test/electron/fixtures/app/renderer.js @@ -83,3 +83,15 @@ document.getElementById('renderer-clear-feature-flags-now').onclick = () => { } Bugsnag.addFeatureFlag('from renderer at runtime 2') + +document.getElementById('renderer-clear-user').onclick = () => { + Bugsnag.setUser('', '', '') +} + +document.getElementById('renderer-clear-context').onclick = () => { + Bugsnag.setContext(null) +} + +document.getElementById('renderer-clear-metadata').onclick = () => { + Bugsnag.clearMetadata('renderer') +} diff --git a/test/electron/fixtures/events/renderer/config/clear-context.json b/test/electron/fixtures/events/renderer/config/clear-context.json new file mode 100644 index 0000000000..f8aa92aa7d --- /dev/null +++ b/test/electron/fixtures/events/renderer/config/clear-context.json @@ -0,0 +1,92 @@ +{ + "apiKey": "6425093c6530f554a9897d2d7d38e248", + "notifier": { + "name": "Bugsnag Electron", + "url": "https://github.com/bugsnag/bugsnag-electron", + "version": "{REGEX:^200\\.1\\.0-canary\\.[0-9a-f]{24}$}" + }, + "events": [ + { + "payloadVersion": "4", + "app": { + "duration": "{TYPE:number}", + "releaseStage": "production", + "inForeground": "{TYPE:boolean}", + "isLaunching": "{TYPE:boolean}", + "version": "1.0.2", + "type": "{PLATFORM_LINUX:Linux|PLATFORM_MACOS:macOS|PLATFORM_WINDOWS:Windows}" + }, + "device": { + "runtimeVersions": { + "node": "{TYPE:string}", + "chrome": "{TYPE:string}", + "electron": "{TYPE:string}" + }, + "id": "{REGEX:[0-9a-f]{64}}", + "freeMemory": "{TYPE:number}", + "time": "{TIMESTAMP}", + "totalMemory": "{TYPE:number}", + "osVersion": "{REGEX:\\d+\\.\\d+}" + }, + "user": { + "id": "{REGEX:[0-9a-f]{64}}" + }, + "metaData": { + "app": { + "name": "Runner", + "CFBundleVersion": "{PLATFORM_MACOS:1.0.2}" + }, + "device": { + "online": "{TYPE:boolean}", + "idleTime": "{TYPE:number}", + "screenResolution": { + "width": "{TYPE:number}", + "height": "{TYPE:number}" + } + } + }, + "severity": "warning", + "unhandled": false, + "severityReason": { + "type": "handledException" + }, + "breadcrumbs": [ + { + "type": "state", + "name": "App became ready", + "timestamp": "{TIMESTAMP}" + }, + { + "type": "state", + "name": "Browser window 1 created", + "timestamp": "{TIMESTAMP}", + "metaData": { + "id": 1 + } + }, + { + "type": "state", + "name": "Browser window 1 was shown", + "timestamp": "{TIMESTAMP}", + "metaData": { + "id": 1, + "title": "Runner" + } + } + ], + "exceptions": [ + { + "errorMessage": "{REGEX:ALERT!$}", + "errorClass": "Error", + "stacktrace": [ + { + "lineNumber": 31, + "file": "./renderer.js" + } + ], + "type": "electronrendererjs" + } + ] + } + ] +} diff --git a/test/electron/fixtures/events/renderer/config/clear-metadata.json b/test/electron/fixtures/events/renderer/config/clear-metadata.json new file mode 100644 index 0000000000..f8aa92aa7d --- /dev/null +++ b/test/electron/fixtures/events/renderer/config/clear-metadata.json @@ -0,0 +1,92 @@ +{ + "apiKey": "6425093c6530f554a9897d2d7d38e248", + "notifier": { + "name": "Bugsnag Electron", + "url": "https://github.com/bugsnag/bugsnag-electron", + "version": "{REGEX:^200\\.1\\.0-canary\\.[0-9a-f]{24}$}" + }, + "events": [ + { + "payloadVersion": "4", + "app": { + "duration": "{TYPE:number}", + "releaseStage": "production", + "inForeground": "{TYPE:boolean}", + "isLaunching": "{TYPE:boolean}", + "version": "1.0.2", + "type": "{PLATFORM_LINUX:Linux|PLATFORM_MACOS:macOS|PLATFORM_WINDOWS:Windows}" + }, + "device": { + "runtimeVersions": { + "node": "{TYPE:string}", + "chrome": "{TYPE:string}", + "electron": "{TYPE:string}" + }, + "id": "{REGEX:[0-9a-f]{64}}", + "freeMemory": "{TYPE:number}", + "time": "{TIMESTAMP}", + "totalMemory": "{TYPE:number}", + "osVersion": "{REGEX:\\d+\\.\\d+}" + }, + "user": { + "id": "{REGEX:[0-9a-f]{64}}" + }, + "metaData": { + "app": { + "name": "Runner", + "CFBundleVersion": "{PLATFORM_MACOS:1.0.2}" + }, + "device": { + "online": "{TYPE:boolean}", + "idleTime": "{TYPE:number}", + "screenResolution": { + "width": "{TYPE:number}", + "height": "{TYPE:number}" + } + } + }, + "severity": "warning", + "unhandled": false, + "severityReason": { + "type": "handledException" + }, + "breadcrumbs": [ + { + "type": "state", + "name": "App became ready", + "timestamp": "{TIMESTAMP}" + }, + { + "type": "state", + "name": "Browser window 1 created", + "timestamp": "{TIMESTAMP}", + "metaData": { + "id": 1 + } + }, + { + "type": "state", + "name": "Browser window 1 was shown", + "timestamp": "{TIMESTAMP}", + "metaData": { + "id": 1, + "title": "Runner" + } + } + ], + "exceptions": [ + { + "errorMessage": "{REGEX:ALERT!$}", + "errorClass": "Error", + "stacktrace": [ + { + "lineNumber": 31, + "file": "./renderer.js" + } + ], + "type": "electronrendererjs" + } + ] + } + ] +} diff --git a/test/electron/fixtures/events/renderer/config/clear-user.json b/test/electron/fixtures/events/renderer/config/clear-user.json new file mode 100644 index 0000000000..f8aa92aa7d --- /dev/null +++ b/test/electron/fixtures/events/renderer/config/clear-user.json @@ -0,0 +1,92 @@ +{ + "apiKey": "6425093c6530f554a9897d2d7d38e248", + "notifier": { + "name": "Bugsnag Electron", + "url": "https://github.com/bugsnag/bugsnag-electron", + "version": "{REGEX:^200\\.1\\.0-canary\\.[0-9a-f]{24}$}" + }, + "events": [ + { + "payloadVersion": "4", + "app": { + "duration": "{TYPE:number}", + "releaseStage": "production", + "inForeground": "{TYPE:boolean}", + "isLaunching": "{TYPE:boolean}", + "version": "1.0.2", + "type": "{PLATFORM_LINUX:Linux|PLATFORM_MACOS:macOS|PLATFORM_WINDOWS:Windows}" + }, + "device": { + "runtimeVersions": { + "node": "{TYPE:string}", + "chrome": "{TYPE:string}", + "electron": "{TYPE:string}" + }, + "id": "{REGEX:[0-9a-f]{64}}", + "freeMemory": "{TYPE:number}", + "time": "{TIMESTAMP}", + "totalMemory": "{TYPE:number}", + "osVersion": "{REGEX:\\d+\\.\\d+}" + }, + "user": { + "id": "{REGEX:[0-9a-f]{64}}" + }, + "metaData": { + "app": { + "name": "Runner", + "CFBundleVersion": "{PLATFORM_MACOS:1.0.2}" + }, + "device": { + "online": "{TYPE:boolean}", + "idleTime": "{TYPE:number}", + "screenResolution": { + "width": "{TYPE:number}", + "height": "{TYPE:number}" + } + } + }, + "severity": "warning", + "unhandled": false, + "severityReason": { + "type": "handledException" + }, + "breadcrumbs": [ + { + "type": "state", + "name": "App became ready", + "timestamp": "{TIMESTAMP}" + }, + { + "type": "state", + "name": "Browser window 1 created", + "timestamp": "{TIMESTAMP}", + "metaData": { + "id": 1 + } + }, + { + "type": "state", + "name": "Browser window 1 was shown", + "timestamp": "{TIMESTAMP}", + "metaData": { + "id": 1, + "title": "Runner" + } + } + ], + "exceptions": [ + { + "errorMessage": "{REGEX:ALERT!$}", + "errorClass": "Error", + "stacktrace": [ + { + "lineNumber": 31, + "file": "./renderer.js" + } + ], + "type": "electronrendererjs" + } + ] + } + ] +} diff --git a/test/electron/fixtures/events/renderer/config/context.json b/test/electron/fixtures/events/renderer/config/context.json new file mode 100644 index 0000000000..20b29226ae --- /dev/null +++ b/test/electron/fixtures/events/renderer/config/context.json @@ -0,0 +1,93 @@ +{ + "apiKey": "6425093c6530f554a9897d2d7d38e248", + "notifier": { + "name": "Bugsnag Electron", + "url": "https://github.com/bugsnag/bugsnag-electron", + "version": "{REGEX:^200\\.1\\.0-canary\\.[0-9a-f]{24}$}" + }, + "events": [ + { + "payloadVersion": "4", + "app": { + "duration": "{TYPE:number}", + "releaseStage": "production", + "inForeground": "{TYPE:boolean}", + "isLaunching": "{TYPE:boolean}", + "version": "1.0.2", + "type": "{PLATFORM_LINUX:Linux|PLATFORM_MACOS:macOS|PLATFORM_WINDOWS:Windows}" + }, + "device": { + "runtimeVersions": { + "node": "{TYPE:string}", + "chrome": "{TYPE:string}", + "electron": "{TYPE:string}" + }, + "id": "{REGEX:[0-9a-f]{64}}", + "freeMemory": "{TYPE:number}", + "time": "{TIMESTAMP}", + "totalMemory": "{TYPE:number}", + "osVersion": "{REGEX:\\d+\\.\\d+}" + }, + "user": { + "id": "{REGEX:[0-9a-f]{64}}" + }, + "context": "renderer context", + "metaData": { + "app": { + "name": "Runner", + "CFBundleVersion": "{PLATFORM_MACOS:1.0.2}" + }, + "device": { + "online": "{TYPE:boolean}", + "idleTime": "{TYPE:number}", + "screenResolution": { + "width": "{TYPE:number}", + "height": "{TYPE:number}" + } + } + }, + "severity": "warning", + "unhandled": false, + "severityReason": { + "type": "handledException" + }, + "breadcrumbs": [ + { + "type": "state", + "name": "App became ready", + "timestamp": "{TIMESTAMP}" + }, + { + "type": "state", + "name": "Browser window 1 created", + "timestamp": "{TIMESTAMP}", + "metaData": { + "id": 1 + } + }, + { + "type": "state", + "name": "Browser window 1 was shown", + "timestamp": "{TIMESTAMP}", + "metaData": { + "id": 1, + "title": "Runner" + } + } + ], + "exceptions": [ + { + "errorMessage": "{REGEX:ALERT!$}", + "errorClass": "Error", + "stacktrace": [ + { + "lineNumber": 31, + "file": "./renderer.js" + } + ], + "type": "electronrendererjs" + } + ] + } + ] +} diff --git a/test/electron/fixtures/events/renderer/config/metadata.json b/test/electron/fixtures/events/renderer/config/metadata.json new file mode 100644 index 0000000000..350c9a071c --- /dev/null +++ b/test/electron/fixtures/events/renderer/config/metadata.json @@ -0,0 +1,95 @@ +{ + "apiKey": "6425093c6530f554a9897d2d7d38e248", + "notifier": { + "name": "Bugsnag Electron", + "url": "https://github.com/bugsnag/bugsnag-electron", + "version": "{REGEX:^200\\.1\\.0-canary\\.[0-9a-f]{24}$}" + }, + "events": [ + { + "payloadVersion": "4", + "app": { + "duration": "{TYPE:number}", + "releaseStage": "production", + "inForeground": "{TYPE:boolean}", + "isLaunching": "{TYPE:boolean}", + "version": "1.0.2", + "type": "{PLATFORM_LINUX:Linux|PLATFORM_MACOS:macOS|PLATFORM_WINDOWS:Windows}" + }, + "device": { + "runtimeVersions": { + "node": "{TYPE:string}", + "chrome": "{TYPE:string}", + "electron": "{TYPE:string}" + }, + "id": "{REGEX:[0-9a-f]{64}}", + "freeMemory": "{TYPE:number}", + "time": "{TIMESTAMP}", + "totalMemory": "{TYPE:number}", + "osVersion": "{REGEX:\\d+\\.\\d+}" + }, + "user": { + "id": "{REGEX:[0-9a-f]{64}}" + }, + "metaData": { + "app": { + "name": "Runner", + "CFBundleVersion": "{PLATFORM_MACOS:1.0.2}" + }, + "device": { + "online": "{TYPE:boolean}", + "idleTime": "{TYPE:number}", + "screenResolution": { + "width": "{TYPE:number}", + "height": "{TYPE:number}" + } + }, + "renderer": { + "key": "value" + } + }, + "severity": "warning", + "unhandled": false, + "severityReason": { + "type": "handledException" + }, + "breadcrumbs": [ + { + "type": "state", + "name": "App became ready", + "timestamp": "{TIMESTAMP}" + }, + { + "type": "state", + "name": "Browser window 1 created", + "timestamp": "{TIMESTAMP}", + "metaData": { + "id": 1 + } + }, + { + "type": "state", + "name": "Browser window 1 was shown", + "timestamp": "{TIMESTAMP}", + "metaData": { + "id": 1, + "title": "Runner" + } + } + ], + "exceptions": [ + { + "errorMessage": "{REGEX:ALERT!$}", + "errorClass": "Error", + "stacktrace": [ + { + "lineNumber": 31, + "file": "./renderer.js" + } + ], + "type": "electronrendererjs" + } + ] + } + ] +} diff --git a/test/electron/fixtures/events/renderer/config/user.json b/test/electron/fixtures/events/renderer/config/user.json new file mode 100644 index 0000000000..b1f23b3dcf --- /dev/null +++ b/test/electron/fixtures/events/renderer/config/user.json @@ -0,0 +1,94 @@ +{ + "apiKey": "6425093c6530f554a9897d2d7d38e248", + "notifier": { + "name": "Bugsnag Electron", + "url": "https://github.com/bugsnag/bugsnag-electron", + "version": "{REGEX:^200\\.1\\.0-canary\\.[0-9a-f]{24}$}" + }, + "events": [ + { + "payloadVersion": "4", + "app": { + "duration": "{TYPE:number}", + "releaseStage": "production", + "inForeground": "{TYPE:boolean}", + "isLaunching": "{TYPE:boolean}", + "version": "1.0.2", + "type": "{PLATFORM_LINUX:Linux|PLATFORM_MACOS:macOS|PLATFORM_WINDOWS:Windows}" + }, + "device": { + "runtimeVersions": { + "node": "{TYPE:string}", + "chrome": "{TYPE:string}", + "electron": "{TYPE:string}" + }, + "id": "{REGEX:[0-9a-f]{64}}", + "freeMemory": "{TYPE:number}", + "time": "{TIMESTAMP}", + "totalMemory": "{TYPE:number}", + "osVersion": "{REGEX:\\d+\\.\\d+}" + }, + "user": { + "id": "3", + "name": "Bugs Nag", + "email": "bugs.nag@bugsnag.com" + }, + "metaData": { + "app": { + "name": "Runner", + "CFBundleVersion": "{PLATFORM_MACOS:1.0.2}" + }, + "device": { + "online": "{TYPE:boolean}", + "idleTime": "{TYPE:number}", + "screenResolution": { + "width": "{TYPE:number}", + "height": "{TYPE:number}" + } + } + }, + "severity": "warning", + "unhandled": false, + "severityReason": { + "type": "handledException" + }, + "breadcrumbs": [ + { + "type": "state", + "name": "App became ready", + "timestamp": "{TIMESTAMP}" + }, + { + "type": "state", + "name": "Browser window 1 created", + "timestamp": "{TIMESTAMP}", + "metaData": { + "id": 1 + } + }, + { + "type": "state", + "name": "Browser window 1 was shown", + "timestamp": "{TIMESTAMP}", + "metaData": { + "id": 1, + "title": "Runner" + } + } + ], + "exceptions": [ + { + "errorMessage": "{REGEX:ALERT!$}", + "errorClass": "Error", + "stacktrace": [ + { + "lineNumber": 31, + "file": "./renderer.js" + } + ], + "type": "electronrendererjs" + } + ] + } + ] +} From d7aa9cd800ca40cf10a501b4d8b0458cef56685d Mon Sep 17 00:00:00 2001 From: Yousif Ahmed Date: Wed, 21 Dec 2022 12:53:37 +0000 Subject: [PATCH 04/28] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca0ea66981..4e7230c2f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - (plugin-express|plugin-koa|plugin-restify) Fix parts of request metadata being missing from some events [#1879](https://github.com/bugsnag/bugsnag-js/pull/1879) - (plugin-aws-lambda) Fix a bug when used with a server plugin (Express, Koa or Restify) causing internal callbacks to be added multiple times and reporting the wrong request data [#1887](https://github.com/bugsnag/bugsnag-js/pull/1887) +- (plugin-electron-renderer-client-state-updates) Fix a bug where state set in renderer config could not be cleared or updated [1893](https://github.com/bugsnag/bugsnag-js/pull/1893) ## v7.18.2 (2022-11-01) From 2261d1308a8c54bbf6f093fa89339d85345a96ae Mon Sep 17 00:00:00 2001 From: Yousif <74918474+yousif-bugsnag@users.noreply.github.com> Date: Wed, 21 Dec 2022 15:29:48 +0000 Subject: [PATCH 05/28] simplify clear user Co-authored-by: Joe Haines --- test/electron/fixtures/app/renderer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/electron/fixtures/app/renderer.js b/test/electron/fixtures/app/renderer.js index fab57ec896..c8f41cd222 100644 --- a/test/electron/fixtures/app/renderer.js +++ b/test/electron/fixtures/app/renderer.js @@ -85,7 +85,7 @@ document.getElementById('renderer-clear-feature-flags-now').onclick = () => { Bugsnag.addFeatureFlag('from renderer at runtime 2') document.getElementById('renderer-clear-user').onclick = () => { - Bugsnag.setUser('', '', '') + Bugsnag.setUser() } document.getElementById('renderer-clear-context').onclick = () => { From 3361d29f3c0b8859827ab478f29ff4757eec5b1c Mon Sep 17 00:00:00 2001 From: Yousif <74918474+yousif-bugsnag@users.noreply.github.com> Date: Wed, 21 Dec 2022 15:30:11 +0000 Subject: [PATCH 06/28] simplify clear context Co-authored-by: Joe Haines --- test/electron/fixtures/app/renderer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/electron/fixtures/app/renderer.js b/test/electron/fixtures/app/renderer.js index c8f41cd222..907c370ba6 100644 --- a/test/electron/fixtures/app/renderer.js +++ b/test/electron/fixtures/app/renderer.js @@ -89,7 +89,7 @@ document.getElementById('renderer-clear-user').onclick = () => { } document.getElementById('renderer-clear-context').onclick = () => { - Bugsnag.setContext(null) + Bugsnag.setContext() } document.getElementById('renderer-clear-metadata').onclick = () => { From eaade5dcb50a052c58147124cf8c576b75492647 Mon Sep 17 00:00:00 2001 From: Yousif <74918474+yousif-bugsnag@users.noreply.github.com> Date: Wed, 21 Dec 2022 15:47:54 +0000 Subject: [PATCH 07/28] fix test fixture button text Co-authored-by: Joe Haines --- test/electron/fixtures/app/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/electron/fixtures/app/index.html b/test/electron/fixtures/app/index.html index 085a088ae2..e6e468712a 100644 --- a/test/electron/fixtures/app/index.html +++ b/test/electron/fixtures/app/index.html @@ -60,9 +60,9 @@

    actions

  • immediately clear feature flags in renderer
  • From 52cfae31ae6a89b8efe1140ec8b5c86cfa61d031 Mon Sep 17 00:00:00 2001 From: Yousif Ahmed Date: Wed, 21 Dec 2022 16:50:43 +0000 Subject: [PATCH 08/28] Explicitly check for absence of properties in integration tests --- .../fixtures/events/renderer/config/clear-context.json | 1 + .../fixtures/events/renderer/config/clear-metadata.json | 3 ++- test/electron/fixtures/events/renderer/config/clear-user.json | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/test/electron/fixtures/events/renderer/config/clear-context.json b/test/electron/fixtures/events/renderer/config/clear-context.json index f8aa92aa7d..5e6bf63f45 100644 --- a/test/electron/fixtures/events/renderer/config/clear-context.json +++ b/test/electron/fixtures/events/renderer/config/clear-context.json @@ -31,6 +31,7 @@ "user": { "id": "{REGEX:[0-9a-f]{64}}" }, + "context": "Runner", "metaData": { "app": { "name": "Runner", diff --git a/test/electron/fixtures/events/renderer/config/clear-metadata.json b/test/electron/fixtures/events/renderer/config/clear-metadata.json index f8aa92aa7d..e447126f48 100644 --- a/test/electron/fixtures/events/renderer/config/clear-metadata.json +++ b/test/electron/fixtures/events/renderer/config/clear-metadata.json @@ -43,7 +43,8 @@ "width": "{TYPE:number}", "height": "{TYPE:number}" } - } + }, + "renderer": "{TYPE:undefined}" }, "severity": "warning", "unhandled": false, diff --git a/test/electron/fixtures/events/renderer/config/clear-user.json b/test/electron/fixtures/events/renderer/config/clear-user.json index f8aa92aa7d..751dcdb19c 100644 --- a/test/electron/fixtures/events/renderer/config/clear-user.json +++ b/test/electron/fixtures/events/renderer/config/clear-user.json @@ -29,7 +29,9 @@ "osVersion": "{REGEX:\\d+\\.\\d+}" }, "user": { - "id": "{REGEX:[0-9a-f]{64}}" + "id": "{REGEX:[0-9a-f]{64}}", + "name": "{TYPE:undefined}", + "email": "{TYPE:undefined}" }, "metaData": { "app": { From ee52b2e6d19bf46ed0bdf54201875e5411b3bc6b Mon Sep 17 00:00:00 2001 From: Yousif Ahmed Date: Wed, 21 Dec 2022 17:16:37 +0000 Subject: [PATCH 09/28] Update renderer-clear-metadata button text --- test/electron/fixtures/app/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/electron/fixtures/app/index.html b/test/electron/fixtures/app/index.html index e6e468712a..f5ba7b7ad0 100644 --- a/test/electron/fixtures/app/index.html +++ b/test/electron/fixtures/app/index.html @@ -62,7 +62,7 @@

    actions

    From 590215b1b301bc00ff08f9a9759d4d3e02619d26 Mon Sep 17 00:00:00 2001 From: Yousif Ahmed Date: Thu, 22 Dec 2022 08:06:46 +0000 Subject: [PATCH 10/28] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e7230c2f0..4ed22e7fd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ - (plugin-express|plugin-koa|plugin-restify) Fix parts of request metadata being missing from some events [#1879](https://github.com/bugsnag/bugsnag-js/pull/1879) - (plugin-aws-lambda) Fix a bug when used with a server plugin (Express, Koa or Restify) causing internal callbacks to be added multiple times and reporting the wrong request data [#1887](https://github.com/bugsnag/bugsnag-js/pull/1887) -- (plugin-electron-renderer-client-state-updates) Fix a bug where state set in renderer config could not be cleared or updated [1893](https://github.com/bugsnag/bugsnag-js/pull/1893) +- (plugin-electron-renderer-client-state-updates) Fix a bug where state set in renderer config could not be cleared or updated [#1893](https://github.com/bugsnag/bugsnag-js/pull/1893) ## v7.18.2 (2022-11-01) From 039b331ce79260569b3e68be5acffeebaa5f9043 Mon Sep 17 00:00:00 2001 From: Ben Wilson Date: Fri, 6 Jan 2023 17:12:14 +0000 Subject: [PATCH 11/28] test: :construction_worker: upload test failure logs to buildkite from bitbar --- .buildkite/browser-pipeline.yml | 90 ++++++++++++++++++++++++++------- docker-compose.yml | 4 ++ 2 files changed, 76 insertions(+), 18 deletions(-) diff --git a/.buildkite/browser-pipeline.yml b/.buildkite/browser-pipeline.yml index f4ddd361d9..03597b21c5 100644 --- a/.buildkite/browser-pipeline.yml +++ b/.buildkite/browser-pipeline.yml @@ -39,7 +39,7 @@ steps: # - label: ":firefox: v107 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -48,12 +48,15 @@ steps: command: - --farm=bb - --browser=firefox_107 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" concurrency: 5 concurrency_group: "bitbar-web" - label: ":chrome: v108 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -62,12 +65,15 @@ steps: command: - --farm=bb - --browser=chrome_108 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" concurrency: 5 concurrency_group: "bitbar-web" - label: ":ie: v11 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -76,6 +82,9 @@ steps: command: - --farm=bb - --browser=ie_11 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" env: HOST: "localhost" # IE11 needs the host set to localhost for some reason concurrency: 5 @@ -83,7 +92,7 @@ steps: - label: ":edge: v106 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -92,12 +101,15 @@ steps: command: - --farm=bb - --browser=edge_106 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" concurrency: 5 concurrency_group: "bitbar-web" - label: ":safari: 16 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -106,6 +118,9 @@ steps: command: - --farm=bb - --browser=safari_16 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" concurrency: 5 concurrency_group: "bitbar-web" @@ -114,7 +129,7 @@ steps: # - label: ":android: Android 4.4 Browser tests" depends_on: "browser-maze-runner-legacy" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner-legacy @@ -123,12 +138,15 @@ steps: command: - --farm=bs - --browser=android_nexus5 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" concurrency: 5 concurrency_group: "browserstack" - label: ":chrome: v43 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -137,12 +155,15 @@ steps: command: - --farm=bs - --browser=chrome_43 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" concurrency: 2 concurrency_group: "browserstack" - label: ":chrome: v72 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -151,12 +172,15 @@ steps: command: - --farm=bs - --browser=chrome_72 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" concurrency: 2 concurrency_group: "browserstack" - label: ":ie: v8 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -165,12 +189,15 @@ steps: command: - --farm=bs - --browser=ie_8 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" concurrency: 2 concurrency_group: "browserstack" - label: ":ie: v9 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -179,12 +206,15 @@ steps: command: - --farm=bs - --browser=ie_9 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" concurrency: 2 concurrency_group: "browserstack" - label: ":ie: v10 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -193,12 +223,15 @@ steps: command: - --farm=bs - --browser=ie_10 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" concurrency: 2 concurrency_group: "browserstack" - label: ":edge: v17 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -207,12 +240,15 @@ steps: command: - --farm=bs - --browser=edge_17 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" concurrency: 2 concurrency_group: "browserstack" - label: ":safari: v10 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -221,12 +257,15 @@ steps: command: - --farm=bs - --browser=safari_10 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" concurrency: 2 concurrency_group: "browserstack" - label: ":iphone: iOS 10.3 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -235,6 +274,9 @@ steps: command: - --farm=bs - --browser=iphone_7 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" env: HOST: "bs-local.com" concurrency: 2 @@ -242,7 +284,7 @@ steps: - label: ":iphone: iOS 15.4 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -251,6 +293,9 @@ steps: command: - --farm=bs - --browser=iphone_13 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" env: HOST: "bs-local.com" concurrency: 5 @@ -258,7 +303,7 @@ steps: - label: ":android: Android 6.0 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -267,12 +312,15 @@ steps: command: - --farm=bs - --browser=android_s7 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" concurrency: 5 concurrency_group: "browserstack" - label: ":android: Android 7.0 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -281,12 +329,15 @@ steps: command: - --farm=bs - --browser=android_s8 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" concurrency: 2 concurrency_group: "browserstack" - label: ":firefox: v78 Browser tests" depends_on: "browser-maze-runner" - timeout_in_minutes: 20 + timeout_in_minutes: 30 plugins: docker-compose#v3.9.0: pull: browser-maze-runner @@ -295,5 +346,8 @@ steps: command: - --farm=bs - --browser=firefox_78 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" concurrency: 2 concurrency_group: "browserstack" diff --git a/docker-compose.yml b/docker-compose.yml index 0afcead286..c7ca1dad66 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -59,6 +59,8 @@ services: default: aliases: - maze-runner + volumes: + - ./test/browser/maze_output:/app/test/browser/maze_output browser-maze-runner-legacy: build: @@ -98,6 +100,8 @@ services: default: aliases: - maze-runner + volumes: + - ./test/browser/maze_output:/app/test/browser/maze_output node-maze-runner: build: From 2a06d6b811919c390892e98f4b14c515542d2933 Mon Sep 17 00:00:00 2001 From: Ben Wilson Date: Fri, 6 Jan 2023 17:13:18 +0000 Subject: [PATCH 12/28] refactor: :recycle: combine skip steps into a reusable step --- test/browser/features/support/env.rb | 34 ++++------------------------ 1 file changed, 5 insertions(+), 29 deletions(-) diff --git a/test/browser/features/support/env.rb b/test/browser/features/support/env.rb index 558ca2afd7..19c064ee3a 100644 --- a/test/browser/features/support/env.rb +++ b/test/browser/features/support/env.rb @@ -28,41 +28,17 @@ def get_error_message id skip_this_scenario unless Maze.driver.local_storage? end -Before('@skip_ie_8') do |scenario| - browser = Maze.config.browser - skip_this_scenario unless browser != "ie_8" -end - -Before('@skip_ie_9') do |scenario| - browser = Maze.config.browser - skip_this_scenario unless browser != "ie_9" -end +ERRORS = YAML::load_file('features/fixtures/browser_errors.yml') -Before('@skip_ie_10') do |scenario| - browser = Maze.config.browser - skip_this_scenario unless browser != "ie_10" -end - -Before('@skip_ie_11') do |scenario| - browser = Maze.config.browser - skip_this_scenario unless browser != "ie_11" -end - -Before('@skip_safari_6') do |scenario| - browser = Maze.config.browser - skip_this_scenario unless browser != "safari_6" -end - -Before('@skip_firefox_30') do |scenario| - browser = Maze.config.browser - skip_this_scenario unless browser != "firefox_30" +ERRORS.keys.each do |browser| + Before("@skip_#{browser}") do |scenario| + skip_this_scenario if Maze.config.browser == browser + end end - BeforeAll do Maze.config.receive_no_requests_wait = 15 Maze.config.enforce_bugsnag_integrity = false - ERRORS = YAML::load open 'features/fixtures/browser_errors.yml' FIXTURES_SERVER_PORT = '9020' # start a web server to serve fixtures From d82a3a3b771caecc2a1bf40aae880111df5b594e Mon Sep 17 00:00:00 2001 From: Ben Wilson Date: Fri, 6 Jan 2023 17:13:36 +0000 Subject: [PATCH 13/28] ci: :construction_worker: update maze-runner --- test/browser/Gemfile | 2 +- test/browser/Gemfile.lock | 70 ++++++++++++++++++++++----------------- 2 files changed, 41 insertions(+), 31 deletions(-) diff --git a/test/browser/Gemfile b/test/browser/Gemfile index 6e35b5c314..91abe7711a 100644 --- a/test/browser/Gemfile +++ b/test/browser/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -gem 'bugsnag-maze-runner', git: 'https://github.com/bugsnag/maze-runner', tag: 'v6.8.0' +gem 'bugsnag-maze-runner', git: 'https://github.com/bugsnag/maze-runner', tag: 'v7.8.0' # Use a branch of Maze Runner #gem 'bugsnag-maze-runner', git: 'https://github.com/bugsnag/maze-runner', branch: 'tms/use-maze-check' diff --git a/test/browser/Gemfile.lock b/test/browser/Gemfile.lock index b9ab0e431d..ab062bdf49 100644 --- a/test/browser/Gemfile.lock +++ b/test/browser/Gemfile.lock @@ -1,37 +1,41 @@ GIT remote: https://github.com/bugsnag/maze-runner - revision: fe12189f83aad154f54221ee0fcd41b483d3c0d1 - tag: v6.8.0 + revision: 4d6e5a515fab519342fdb3c5da2fa10451213c0a + tag: v7.8.0 specs: - bugsnag-maze-runner (6.8.0) - appium_lib (~> 11.2.0) + bugsnag-maze-runner (7.8.0) + appium_lib (~> 12.0.0) + appium_lib_core (~> 5.4.0) bugsnag (~> 6.24) cucumber (~> 7.1) cucumber-expressions (~> 6.0.0) curb (~> 0.9.6) + json-schema (~> 2.8.1) optimist (~> 3.0.1) os (~> 1.0.0) rake (~> 12.3.3) rubyzip (~> 2.3.2) - selenium-webdriver (~> 3.11) + selenium-webdriver (~> 4.0) test-unit (~> 3.5.2) webrick (~> 1.7.0) GEM remote: https://rubygems.org/ specs: - appium_lib (11.2.0) - appium_lib_core (~> 4.1) + addressable (2.8.1) + public_suffix (>= 2.0.2, < 6.0) + appium_lib (12.0.1) + appium_lib_core (~> 5.0) nokogiri (~> 1.8, >= 1.8.1) - tomlrb (~> 1.1) - appium_lib_core (4.7.1) + tomlrb (>= 1.1, < 3.0) + appium_lib_core (5.4.0) faye-websocket (~> 0.11.0) - selenium-webdriver (~> 3.14, >= 3.14.1) - bugsnag (6.24.1) + selenium-webdriver (~> 4.2, < 4.6) + bugsnag (6.25.0) concurrent-ruby (~> 1.0) builder (3.2.4) - childprocess (3.0.0) - concurrent-ruby (1.1.9) + childprocess (4.1.0) + concurrent-ruby (1.1.10) cucumber (7.1.0) builder (~> 3.2, >= 3.2.4) cucumber-core (~> 10.1, >= 10.1.0) @@ -45,10 +49,10 @@ GEM mime-types (~> 3.3, >= 3.3.1) multi_test (~> 0.1, >= 0.1.2) sys-uname (~> 1.2, >= 1.2.2) - cucumber-core (10.1.0) + cucumber-core (10.1.1) cucumber-gherkin (~> 22.0, >= 22.0.0) cucumber-messages (~> 17.1, >= 17.1.1) - cucumber-tag-expressions (~> 4.0, >= 4.0.2) + cucumber-tag-expressions (~> 4.1, >= 4.1.0) cucumber-create-meta (6.0.4) cucumber-messages (~> 17.1, >= 17.1.1) sys-uname (~> 1.2, >= 1.2.2) @@ -60,40 +64,46 @@ GEM cucumber-messages (~> 17.1, >= 17.1.0) cucumber-messages (17.1.1) cucumber-tag-expressions (4.1.0) - cucumber-wire (6.2.0) + cucumber-wire (6.2.1) cucumber-core (~> 10.1, >= 10.1.0) cucumber-cucumber-expressions (~> 14.0, >= 14.0.0) - cucumber-messages (~> 17.1, >= 17.1.1) curb (0.9.11) - diff-lcs (1.4.4) + diff-lcs (1.5.0) eventmachine (1.2.7) faye-websocket (0.11.1) eventmachine (>= 0.12.0) websocket-driver (>= 0.5.1) - ffi (1.15.4) + ffi (1.15.5) + json-schema (2.8.1) + addressable (>= 2.4) mime-types (3.4.1) mime-types-data (~> 3.2015) - mime-types-data (3.2021.1115) - mini_portile2 (2.6.1) + mime-types-data (3.2022.0105) + mini_portile2 (2.8.0) multi_test (0.1.2) - nokogiri (1.12.5) - mini_portile2 (~> 2.6.1) + nokogiri (1.13.10) + mini_portile2 (~> 2.8.0) racc (~> 1.4) optimist (3.0.1) os (1.0.1) - power_assert (2.0.1) - racc (1.6.0) + power_assert (2.0.2) + public_suffix (5.0.1) + racc (1.6.1) rake (12.3.3) + rexml (3.2.5) rubyzip (2.3.2) - selenium-webdriver (3.142.7) - childprocess (>= 0.5, < 4.0) - rubyzip (>= 1.2.2) + selenium-webdriver (4.5.0) + childprocess (>= 0.5, < 5.0) + rexml (~> 3.2, >= 3.2.5) + rubyzip (>= 1.2.2, < 3.0) + websocket (~> 1.0) sys-uname (1.2.2) ffi (~> 1.1) - test-unit (3.5.3) + test-unit (3.5.5) power_assert - tomlrb (1.3.0) + tomlrb (2.0.3) webrick (1.7.0) + websocket (1.2.9) websocket-driver (0.7.5) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) From c455ae4b6b7afa40bf52d59751faa0558992326c Mon Sep 17 00:00:00 2001 From: Dan Skinner Date: Mon, 9 Jan 2023 13:56:39 +0000 Subject: [PATCH 14/28] revert to running Safari 16 tests on browser stack --- .buildkite/browser-pipeline.yml | 34 ++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.buildkite/browser-pipeline.yml b/.buildkite/browser-pipeline.yml index 03597b21c5..da1ca846ff 100644 --- a/.buildkite/browser-pipeline.yml +++ b/.buildkite/browser-pipeline.yml @@ -107,23 +107,6 @@ steps: concurrency: 5 concurrency_group: "bitbar-web" - - label: ":safari: 16 Browser tests" - depends_on: "browser-maze-runner" - timeout_in_minutes: 30 - plugins: - docker-compose#v3.9.0: - pull: browser-maze-runner - run: browser-maze-runner - use-aliases: true - command: - - --farm=bb - - --browser=safari_16 - artifacts#v1.5.0: - upload: - - "./test/browser/maze_output/failed/**/*" - concurrency: 5 - concurrency_group: "bitbar-web" - # # BrowserStack tests # @@ -263,6 +246,23 @@ steps: concurrency: 2 concurrency_group: "browserstack" + - label: ":safari: 16 Browser tests" + depends_on: "browser-maze-runner" + timeout_in_minutes: 30 + plugins: + docker-compose#v3.9.0: + pull: browser-maze-runner + run: browser-maze-runner + use-aliases: true + command: + - --farm=bs + - --browser=safari_16 + artifacts#v1.5.0: + upload: + - "./test/browser/maze_output/failed/**/*" + concurrency: 2 + concurrency_group: "browserstack" + - label: ":iphone: iOS 10.3 Browser tests" depends_on: "browser-maze-runner" timeout_in_minutes: 30 From cf593a7bbe3fe8d59a1e759c1b12654411505bb1 Mon Sep 17 00:00:00 2001 From: Yousif Ahmed Date: Fri, 6 Jan 2023 14:19:15 +0000 Subject: [PATCH 15/28] Pin electron-forge version to 6.0.0-beta.54 in test fixture --- test/electron/fixtures/app/package.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/electron/fixtures/app/package.json b/test/electron/fixtures/app/package.json index 6b714b6e07..74db88c833 100644 --- a/test/electron/fixtures/app/package.json +++ b/test/electron/fixtures/app/package.json @@ -8,13 +8,13 @@ "make": "electron-forge make" }, "devDependencies": { - "@electron-forge/cli": "^6.0.0-beta.54", - "@electron-forge/maker-deb": "^6.0.0-beta.54", - "@electron-forge/maker-dmg": "^6.0.0-beta.54", - "@electron-forge/maker-rpm": "^6.0.0-beta.54", - "@electron-forge/maker-squirrel": "^6.0.0-beta.54", - "@electron-forge/maker-zip": "^6.0.0-beta.54", - "@electron-forge/plugin-webpack": "^6.0.0-beta.54", + "@electron-forge/cli": "6.0.0-beta.54", + "@electron-forge/maker-deb": "6.0.0-beta.54", + "@electron-forge/maker-dmg": "6.0.0-beta.54", + "@electron-forge/maker-rpm": "6.0.0-beta.54", + "@electron-forge/maker-squirrel": "6.0.0-beta.54", + "@electron-forge/maker-zip": "6.0.0-beta.54", + "@electron-forge/plugin-webpack": "6.0.0-beta.54", "@marshallofsound/webpack-asset-relocator-loader": "^0.5.0", "@webpack-cli/init": "^1.1.3", "electron": "*", From 345dcfaa73c2a396237a078a7f96f865b0e8dc30 Mon Sep 17 00:00:00 2001 From: Karl Stenerud Date: Thu, 19 Jan 2023 12:13:36 +0100 Subject: [PATCH 16/28] deps(react-native): Update bugsnag-cocoa to v6.25.2 --- CHANGELOG.md | 1 + packages/react-native/ios/vendor/bugsnag-cocoa | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef609a31c6..c42e66da30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Changed +- (react-native) Update bugsnag-cocoa from v6.25.0 to [v6.25.2](https://github.com/bugsnag/bugsnag-cocoa/blob/master/CHANGELOG.md#6252-2023-01-18) - After trimming, attempt to send all event and session payloads, even if believed oversize [#1823](https://github.com/bugsnag/bugsnag-js/pull/1823) - (react-native) Update bugsnag-android from v5.28.1 to [v5.28.3](https://github.com/bugsnag/bugsnag-android/blob/master/CHANGELOG.md#5283-2022-11-16) diff --git a/packages/react-native/ios/vendor/bugsnag-cocoa b/packages/react-native/ios/vendor/bugsnag-cocoa index 056b1c1c22..b260ddb557 160000 --- a/packages/react-native/ios/vendor/bugsnag-cocoa +++ b/packages/react-native/ios/vendor/bugsnag-cocoa @@ -1 +1 @@ -Subproject commit 056b1c1c221fba4775147b7a683672beb67f6b5c +Subproject commit b260ddb5570883ee8fd35860d8d7ff381250d4a1 From 11b48d8b6fafd88c03b057301645af2163eeefed Mon Sep 17 00:00:00 2001 From: Ben Wilson Date: Wed, 25 Jan 2023 10:02:52 +0000 Subject: [PATCH 17/28] update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c42e66da30..330d5d8fb6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## TBD +## 7.19.0 (2023-01-26) ### Changed From 95d2c3dd978e7dc5a6fda5664cfa9cf437b03b76 Mon Sep 17 00:00:00 2001 From: Ben Wilson Date: Thu, 26 Jan 2023 10:40:41 +0000 Subject: [PATCH 18/28] v7.19.0 --- lerna.json | 2 +- packages/browser/package-lock.json | 2 +- packages/browser/package.json | 38 ++++++------ packages/core/package-lock.json | 2 +- packages/core/package.json | 2 +- packages/delivery-electron/package-lock.json | 2 +- packages/delivery-electron/package.json | 8 +-- packages/delivery-node/package-lock.json | 2 +- packages/delivery-node/package.json | 4 +- .../delivery-react-native/package-lock.json | 2 +- packages/delivery-react-native/package.json | 4 +- .../package-lock.json | 2 +- .../delivery-x-domain-request/package.json | 4 +- .../package-lock.json | 2 +- .../delivery-xml-http-request/package.json | 4 +- packages/electron-network-status/package.json | 6 +- .../electron-test-helpers/package-lock.json | 2 +- packages/electron-test-helpers/package.json | 4 +- packages/electron/package-lock.json | 2 +- packages/electron/package.json | 60 +++++++++---------- packages/in-flight/package-lock.json | 2 +- packages/in-flight/package.json | 4 +- packages/js/package-lock.json | 2 +- packages/js/package.json | 6 +- packages/node/package-lock.json | 2 +- packages/node/package.json | 28 ++++----- packages/plugin-angular/package-lock.json | 2 +- packages/plugin-angular/package.json | 4 +- packages/plugin-app-duration/package.json | 4 +- packages/plugin-aws-lambda/package-lock.json | 2 +- packages/plugin-aws-lambda/package.json | 8 +-- .../plugin-browser-context/package-lock.json | 2 +- packages/plugin-browser-context/package.json | 4 +- .../plugin-browser-device/package-lock.json | 2 +- packages/plugin-browser-device/package.json | 4 +- .../plugin-browser-request/package-lock.json | 2 +- packages/plugin-browser-request/package.json | 4 +- .../plugin-browser-session/package-lock.json | 2 +- packages/plugin-browser-session/package.json | 4 +- packages/plugin-client-ip/package-lock.json | 2 +- packages/plugin-client-ip/package.json | 4 +- .../package-lock.json | 2 +- .../plugin-console-breadcrumbs/package.json | 4 +- .../plugin-contextualize/package-lock.json | 2 +- packages/plugin-contextualize/package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 6 +- .../plugin-electron-app/package-lock.json | 2 +- packages/plugin-electron-app/package.json | 6 +- .../package-lock.json | 2 +- .../package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 6 +- .../package-lock.json | 2 +- .../package.json | 6 +- .../plugin-electron-device/package-lock.json | 2 +- packages/plugin-electron-device/package.json | 6 +- .../plugin-electron-ipc/package-lock.json | 2 +- packages/plugin-electron-ipc/package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 6 +- .../package-lock.json | 2 +- .../package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 6 +- .../package-lock.json | 2 +- .../package.json | 6 +- .../package-lock.json | 2 +- .../plugin-electron-process-info/package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 8 +-- .../package-lock.json | 2 +- .../package.json | 6 +- .../package-lock.json | 2 +- .../package.json | 6 +- .../plugin-electron-session/package-lock.json | 2 +- packages/plugin-electron-session/package.json | 8 +-- packages/plugin-express/package-lock.json | 2 +- packages/plugin-express/package.json | 4 +- .../package-lock.json | 2 +- .../plugin-inline-script-content/package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 4 +- packages/plugin-intercept/package-lock.json | 2 +- packages/plugin-intercept/package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 4 +- packages/plugin-koa/package-lock.json | 2 +- packages/plugin-koa/package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 4 +- .../package-lock.json | 2 +- .../plugin-network-breadcrumbs/package.json | 4 +- packages/plugin-node-device/package-lock.json | 2 +- packages/plugin-node-device/package.json | 4 +- .../plugin-node-in-project/package-lock.json | 2 +- packages/plugin-node-in-project/package.json | 4 +- .../package-lock.json | 2 +- .../plugin-node-surrounding-code/package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 4 +- .../plugin-react-native-hermes/package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 4 +- .../package-lock.json | 2 +- .../plugin-react-native-session/package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 4 +- .../plugin-react-navigation/package-lock.json | 2 +- packages/plugin-react-navigation/package.json | 4 +- packages/plugin-react/package-lock.json | 2 +- packages/plugin-react/package.json | 4 +- packages/plugin-restify/package-lock.json | 2 +- packages/plugin-restify/package.json | 4 +- .../plugin-server-session/package-lock.json | 2 +- packages/plugin-server-session/package.json | 4 +- .../plugin-simple-throttle/package-lock.json | 2 +- packages/plugin-simple-throttle/package.json | 4 +- .../package.json | 4 +- .../package-lock.json | 2 +- .../plugin-strip-project-root/package.json | 4 +- .../package-lock.json | 2 +- .../plugin-strip-query-string/package.json | 4 +- packages/plugin-vue/package-lock.json | 2 +- packages/plugin-vue/package.json | 4 +- .../plugin-window-onerror/package-lock.json | 2 +- packages/plugin-window-onerror/package.json | 4 +- .../package-lock.json | 2 +- .../package.json | 4 +- packages/react-native/package-lock.json | 2 +- packages/react-native/package.json | 24 ++++---- 143 files changed, 302 insertions(+), 302 deletions(-) diff --git a/lerna.json b/lerna.json index 5ab7884ef9..4a29fbf3f7 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages": [ "packages/*" ], - "version": "7.18.2" + "version": "7.19.0" } diff --git a/packages/browser/package-lock.json b/packages/browser/package-lock.json index a53a65896c..be70f3ccb0 100644 --- a/packages/browser/package-lock.json +++ b/packages/browser/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/browser", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/browser/package.json b/packages/browser/package.json index 02a5ddb30b..e981dece10 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/browser", - "version": "7.18.0", + "version": "7.19.0", "main": "dist/bugsnag.js", "types": "types/bugsnag.d.ts", "description": "Bugsnag error reporter for browser JavaScript", @@ -31,29 +31,29 @@ "license": "MIT", "devDependencies": { "@bugsnag/core": "^7.0.1", - "@bugsnag/delivery-x-domain-request": "^7.18.0", - "@bugsnag/delivery-xml-http-request": "^7.18.0", - "@bugsnag/plugin-app-duration": "^7.18.0", - "@bugsnag/plugin-browser-context": "^7.18.0", - "@bugsnag/plugin-browser-device": "^7.18.0", - "@bugsnag/plugin-browser-request": "^7.18.0", - "@bugsnag/plugin-browser-session": "^7.18.0", - "@bugsnag/plugin-client-ip": "^7.18.0", - "@bugsnag/plugin-console-breadcrumbs": "^7.18.0", - "@bugsnag/plugin-inline-script-content": "^7.18.0", - "@bugsnag/plugin-interaction-breadcrumbs": "^7.18.0", - "@bugsnag/plugin-navigation-breadcrumbs": "^7.18.0", - "@bugsnag/plugin-network-breadcrumbs": "^7.18.0", - "@bugsnag/plugin-simple-throttle": "^7.18.0", - "@bugsnag/plugin-strip-query-string": "^7.18.0", - "@bugsnag/plugin-window-onerror": "^7.18.0", - "@bugsnag/plugin-window-unhandled-rejection": "^7.18.0", + "@bugsnag/delivery-x-domain-request": "^7.19.0", + "@bugsnag/delivery-xml-http-request": "^7.19.0", + "@bugsnag/plugin-app-duration": "^7.19.0", + "@bugsnag/plugin-browser-context": "^7.19.0", + "@bugsnag/plugin-browser-device": "^7.19.0", + "@bugsnag/plugin-browser-request": "^7.19.0", + "@bugsnag/plugin-browser-session": "^7.19.0", + "@bugsnag/plugin-client-ip": "^7.19.0", + "@bugsnag/plugin-console-breadcrumbs": "^7.19.0", + "@bugsnag/plugin-inline-script-content": "^7.19.0", + "@bugsnag/plugin-interaction-breadcrumbs": "^7.19.0", + "@bugsnag/plugin-navigation-breadcrumbs": "^7.19.0", + "@bugsnag/plugin-network-breadcrumbs": "^7.19.0", + "@bugsnag/plugin-simple-throttle": "^7.19.0", + "@bugsnag/plugin-strip-query-string": "^7.19.0", + "@bugsnag/plugin-window-onerror": "^7.19.0", + "@bugsnag/plugin-window-unhandled-rejection": "^7.19.0", "cloudfront": "^0.4.1", "knox": "^0.9.2", "mime": "1.4.1", "semver": "^5.5.1" }, "dependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" } } diff --git a/packages/core/package-lock.json b/packages/core/package-lock.json index bdaeeb3f68..1728b6f88a 100644 --- a/packages/core/package-lock.json +++ b/packages/core/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/core", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/core/package.json b/packages/core/package.json index 758bd7ae86..52dd6af639 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@bugsnag/core", "main": "index.js", - "version": "7.18.0", + "version": "7.19.0", "types": "types/index.d.ts", "description": "Core classes and utilities for Bugsnag notifiers", "homepage": "https://www.bugsnag.com/", diff --git a/packages/delivery-electron/package-lock.json b/packages/delivery-electron/package-lock.json index 186c11e70b..df9bee5e8f 100644 --- a/packages/delivery-electron/package-lock.json +++ b/packages/delivery-electron/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/delivery-electron", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/delivery-electron/package.json b/packages/delivery-electron/package.json index debd8dc7d1..c4cc55980d 100644 --- a/packages/delivery-electron/package.json +++ b/packages/delivery-electron/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/delivery-electron", - "version": "7.18.0", + "version": "7.19.0", "main": "delivery.js", "description": "@bugsnag/electron delivery mechanism to send events, sessions, and crash dumps from Electron apps", "homepage": "https://www.bugsnag.com/", @@ -17,9 +17,9 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/electron-network-status": "^7.18.0", - "@bugsnag/plugin-electron-client-state-manager": "^7.18.0" + "@bugsnag/core": "^7.19.0", + "@bugsnag/electron-network-status": "^7.19.0", + "@bugsnag/plugin-electron-client-state-manager": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.9.2", diff --git a/packages/delivery-node/package-lock.json b/packages/delivery-node/package-lock.json index fbbbedc03c..f46eb9b897 100644 --- a/packages/delivery-node/package-lock.json +++ b/packages/delivery-node/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/delivery-node", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/delivery-node/package.json b/packages/delivery-node/package.json index e50a437a74..78475bc093 100644 --- a/packages/delivery-node/package.json +++ b/packages/delivery-node/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/delivery-node", - "version": "7.18.0", + "version": "7.19.0", "main": "delivery.js", "description": "@bugsnag/node delivery mechanism", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/delivery-react-native/package-lock.json b/packages/delivery-react-native/package-lock.json index 371bd44391..d4e73a1524 100644 --- a/packages/delivery-react-native/package-lock.json +++ b/packages/delivery-react-native/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/delivery-react-native", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/delivery-react-native/package.json b/packages/delivery-react-native/package.json index 48533ef3a2..a1f56c040a 100644 --- a/packages/delivery-react-native/package.json +++ b/packages/delivery-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/delivery-react-native", - "version": "7.18.0", + "version": "7.19.0", "main": "delivery.js", "description": "@bugsnag/js delivery mechanism for React Native", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/delivery-x-domain-request/package-lock.json b/packages/delivery-x-domain-request/package-lock.json index 4952d7f865..bc6899755d 100644 --- a/packages/delivery-x-domain-request/package-lock.json +++ b/packages/delivery-x-domain-request/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/delivery-x-domain-request", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/delivery-x-domain-request/package.json b/packages/delivery-x-domain-request/package.json index 067af38a0e..0ac3f03d0c 100644 --- a/packages/delivery-x-domain-request/package.json +++ b/packages/delivery-x-domain-request/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/delivery-x-domain-request", - "version": "7.18.0", + "version": "7.19.0", "main": "delivery.js", "description": "@bugsnag/js delivery mechanism for IE 8, 9 and 10", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/delivery-xml-http-request/package-lock.json b/packages/delivery-xml-http-request/package-lock.json index 638632a766..2aa9991ee3 100644 --- a/packages/delivery-xml-http-request/package-lock.json +++ b/packages/delivery-xml-http-request/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/delivery-xml-http-request", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/delivery-xml-http-request/package.json b/packages/delivery-xml-http-request/package.json index d8b1da992a..9f325379f3 100644 --- a/packages/delivery-xml-http-request/package.json +++ b/packages/delivery-xml-http-request/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/delivery-xml-http-request", - "version": "7.18.0", + "version": "7.19.0", "main": "delivery.js", "description": "@bugsnag/js delivery mechanism for most browsers", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/electron-network-status/package.json b/packages/electron-network-status/package.json index a137d0037e..2f29faa0df 100644 --- a/packages/electron-network-status/package.json +++ b/packages/electron-network-status/package.json @@ -1,14 +1,14 @@ { "name": "@bugsnag/electron-network-status", - "version": "7.18.0", + "version": "7.19.0", "main": "network-status.js", "description": "@bugsnag/electron package for watching network status", "author": "Bugsnag", "license": "MIT", "homepage": "https://www.bugsnag.com/", "devDependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/plugin-electron-client-state-manager": "^7.18.0" + "@bugsnag/core": "^7.19.0", + "@bugsnag/plugin-electron-client-state-manager": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.10.0" diff --git a/packages/electron-test-helpers/package-lock.json b/packages/electron-test-helpers/package-lock.json index 822a0932f2..838a6cdf94 100644 --- a/packages/electron-test-helpers/package-lock.json +++ b/packages/electron-test-helpers/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/electron-test-helpers", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/electron-test-helpers/package.json b/packages/electron-test-helpers/package.json index 5d943a1a3b..81593c515c 100644 --- a/packages/electron-test-helpers/package.json +++ b/packages/electron-test-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/electron-test-helpers", - "version": "7.18.0", + "version": "7.19.0", "main": "helpers.ts", "description": "Test helpers for @bugsnag/electron", "repository": { @@ -15,7 +15,7 @@ "helpers.ts" ], "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "author": "Bugsnag", "license": "MIT" diff --git a/packages/electron/package-lock.json b/packages/electron/package-lock.json index 19ff124d4b..1eaa6f0520 100644 --- a/packages/electron/package-lock.json +++ b/packages/electron/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/electron", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/electron/package.json b/packages/electron/package.json index d29a37b4bf..837775d12f 100644 --- a/packages/electron/package.json +++ b/packages/electron/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/electron", - "version": "7.18.0", + "version": "7.19.0", "main": "src/notifier.js", "types": "types/notifier.d.ts", "description": "@bugsnag/electron notifier", @@ -16,35 +16,35 @@ "author": "Bugsnag", "license": "MIT", "dependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/delivery-electron": "^7.18.0", + "@bugsnag/core": "^7.19.0", + "@bugsnag/delivery-electron": "^7.19.0", "@bugsnag/electron-filestore": "^7.16.2", - "@bugsnag/electron-network-status": "^7.18.0", - "@bugsnag/plugin-console-breadcrumbs": "^7.18.0", - "@bugsnag/plugin-electron-app": "^7.18.0", - "@bugsnag/plugin-electron-app-breadcrumbs": "^7.18.0", - "@bugsnag/plugin-electron-client-state-manager": "^7.18.0", - "@bugsnag/plugin-electron-client-state-persistence": "^7.18.0", - "@bugsnag/plugin-electron-deliver-minidumps": "^7.18.0", - "@bugsnag/plugin-electron-device": "^7.18.0", - "@bugsnag/plugin-electron-ipc": "^7.18.0", - "@bugsnag/plugin-electron-net-breadcrumbs": "^7.18.0", - "@bugsnag/plugin-electron-network-status": "^7.18.0", - "@bugsnag/plugin-electron-preload-error": "^7.18.0", - "@bugsnag/plugin-electron-process-info": "^7.18.0", - "@bugsnag/plugin-electron-renderer-client-state-updates": "^7.18.0", - "@bugsnag/plugin-electron-renderer-event-data": "^7.18.0", - "@bugsnag/plugin-electron-renderer-strip-project-root": "^7.18.0", - "@bugsnag/plugin-electron-session": "^7.18.0", - "@bugsnag/plugin-interaction-breadcrumbs": "^7.18.0", - "@bugsnag/plugin-internal-callback-marker": "^7.18.0", - "@bugsnag/plugin-network-breadcrumbs": "^7.18.0", - "@bugsnag/plugin-node-surrounding-code": "^7.18.0", - "@bugsnag/plugin-node-uncaught-exception": "^7.18.0", - "@bugsnag/plugin-node-unhandled-rejection": "^7.18.0", - "@bugsnag/plugin-stackframe-path-normaliser": "^7.18.0", - "@bugsnag/plugin-strip-project-root": "^7.18.0", - "@bugsnag/plugin-window-onerror": "^7.18.0", - "@bugsnag/plugin-window-unhandled-rejection": "^7.18.0" + "@bugsnag/electron-network-status": "^7.19.0", + "@bugsnag/plugin-console-breadcrumbs": "^7.19.0", + "@bugsnag/plugin-electron-app": "^7.19.0", + "@bugsnag/plugin-electron-app-breadcrumbs": "^7.19.0", + "@bugsnag/plugin-electron-client-state-manager": "^7.19.0", + "@bugsnag/plugin-electron-client-state-persistence": "^7.19.0", + "@bugsnag/plugin-electron-deliver-minidumps": "^7.19.0", + "@bugsnag/plugin-electron-device": "^7.19.0", + "@bugsnag/plugin-electron-ipc": "^7.19.0", + "@bugsnag/plugin-electron-net-breadcrumbs": "^7.19.0", + "@bugsnag/plugin-electron-network-status": "^7.19.0", + "@bugsnag/plugin-electron-preload-error": "^7.19.0", + "@bugsnag/plugin-electron-process-info": "^7.19.0", + "@bugsnag/plugin-electron-renderer-client-state-updates": "^7.19.0", + "@bugsnag/plugin-electron-renderer-event-data": "^7.19.0", + "@bugsnag/plugin-electron-renderer-strip-project-root": "^7.19.0", + "@bugsnag/plugin-electron-session": "^7.19.0", + "@bugsnag/plugin-interaction-breadcrumbs": "^7.19.0", + "@bugsnag/plugin-internal-callback-marker": "^7.19.0", + "@bugsnag/plugin-network-breadcrumbs": "^7.19.0", + "@bugsnag/plugin-node-surrounding-code": "^7.19.0", + "@bugsnag/plugin-node-uncaught-exception": "^7.19.0", + "@bugsnag/plugin-node-unhandled-rejection": "^7.19.0", + "@bugsnag/plugin-stackframe-path-normaliser": "^7.19.0", + "@bugsnag/plugin-strip-project-root": "^7.19.0", + "@bugsnag/plugin-window-onerror": "^7.19.0", + "@bugsnag/plugin-window-unhandled-rejection": "^7.19.0" } } diff --git a/packages/in-flight/package-lock.json b/packages/in-flight/package-lock.json index 977750949a..6dbe26d236 100644 --- a/packages/in-flight/package-lock.json +++ b/packages/in-flight/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/in-flight", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/in-flight/package.json b/packages/in-flight/package.json index 18dc6ef00a..861f1282e1 100644 --- a/packages/in-flight/package.json +++ b/packages/in-flight/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/in-flight", - "version": "7.18.0", + "version": "7.19.0", "main": "src/in-flight.js", "types": "types/bugsnag-in-flight.d.ts", "description": "Internal package to keep track of in-flight requests to Bugsnag", @@ -22,7 +22,7 @@ "@bugsnag/cuid": "^3.0.0" }, "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/js/package-lock.json b/packages/js/package-lock.json index 399e593f04..7cda98d440 100644 --- a/packages/js/package-lock.json +++ b/packages/js/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/js", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/js/package.json b/packages/js/package.json index 5f1323fd44..e907fd651a 100644 --- a/packages/js/package.json +++ b/packages/js/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/js", - "version": "7.18.0", + "version": "7.19.0", "main": "node/notifier.js", "browser": "browser/notifier.js", "types": "types.d.ts", @@ -33,8 +33,8 @@ "author": "Bugsnag", "license": "MIT", "dependencies": { - "@bugsnag/browser": "^7.18.0", - "@bugsnag/node": "^7.18.0" + "@bugsnag/browser": "^7.19.0", + "@bugsnag/node": "^7.19.0" }, "devDependencies": { "@babel/cli": "^7.0.0" diff --git a/packages/node/package-lock.json b/packages/node/package-lock.json index f06044ea51..00a7ae0f43 100644 --- a/packages/node/package-lock.json +++ b/packages/node/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/node", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/node/package.json b/packages/node/package.json index 7250bdbb96..4098ee38dd 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/node", - "version": "7.18.0", + "version": "7.19.0", "main": "dist/bugsnag.js", "types": "types/bugsnag.d.ts", "description": "Bugsnag error reporter for Node.js", @@ -24,21 +24,21 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/delivery-node": "^7.18.0", - "@bugsnag/plugin-app-duration": "^7.18.0", - "@bugsnag/plugin-contextualize": "^7.18.0", - "@bugsnag/plugin-intercept": "^7.18.0", - "@bugsnag/plugin-node-device": "^7.18.0", - "@bugsnag/plugin-node-in-project": "^7.18.0", - "@bugsnag/plugin-node-surrounding-code": "^7.18.0", - "@bugsnag/plugin-node-uncaught-exception": "^7.18.0", - "@bugsnag/plugin-node-unhandled-rejection": "^7.18.0", - "@bugsnag/plugin-server-session": "^7.18.0", - "@bugsnag/plugin-stackframe-path-normaliser": "^7.18.0", - "@bugsnag/plugin-strip-project-root": "^7.18.0" + "@bugsnag/delivery-node": "^7.19.0", + "@bugsnag/plugin-app-duration": "^7.19.0", + "@bugsnag/plugin-contextualize": "^7.19.0", + "@bugsnag/plugin-intercept": "^7.19.0", + "@bugsnag/plugin-node-device": "^7.19.0", + "@bugsnag/plugin-node-in-project": "^7.19.0", + "@bugsnag/plugin-node-surrounding-code": "^7.19.0", + "@bugsnag/plugin-node-uncaught-exception": "^7.19.0", + "@bugsnag/plugin-node-unhandled-rejection": "^7.19.0", + "@bugsnag/plugin-server-session": "^7.19.0", + "@bugsnag/plugin-stackframe-path-normaliser": "^7.19.0", + "@bugsnag/plugin-strip-project-root": "^7.19.0" }, "dependencies": { - "@bugsnag/core": "^7.18.0", + "@bugsnag/core": "^7.19.0", "byline": "^5.0.0", "error-stack-parser": "^2.0.2", "iserror": "^0.0.2", diff --git a/packages/plugin-angular/package-lock.json b/packages/plugin-angular/package-lock.json index 6017e3f182..dd8fb9b6fa 100644 --- a/packages/plugin-angular/package-lock.json +++ b/packages/plugin-angular/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-angular", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-angular/package.json b/packages/plugin-angular/package.json index a6992a2e67..a393177507 100644 --- a/packages/plugin-angular/package.json +++ b/packages/plugin-angular/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-angular", - "version": "7.18.0", + "version": "7.19.0", "description": "Angular integration for bugsnag-js", "main": "dist/esm5/index.js", "browser": "dist/esm5/index.js", @@ -34,7 +34,7 @@ "@angular/compiler": "^7.2.15", "@angular/compiler-cli": "^7.2.15", "@angular/core": "^7.2.15", - "@bugsnag/js": "^7.18.0", + "@bugsnag/js": "^7.19.0", "rxjs": "^5.5.8", "typescript": "^3.2.4", "zone.js": "^0.8.26" diff --git a/packages/plugin-app-duration/package.json b/packages/plugin-app-duration/package.json index c5be792386..f66eb8c853 100644 --- a/packages/plugin-app-duration/package.json +++ b/packages/plugin-app-duration/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-app-duration", - "version": "7.18.0", + "version": "7.19.0", "main": "app.js", "description": "@bugsnag/js plugin to set app duration in browsers and node", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-aws-lambda/package-lock.json b/packages/plugin-aws-lambda/package-lock.json index cbddd66414..0e88f41b4d 100644 --- a/packages/plugin-aws-lambda/package-lock.json +++ b/packages/plugin-aws-lambda/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-aws-lambda", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-aws-lambda/package.json b/packages/plugin-aws-lambda/package.json index 4c6e6b29dc..deaf9b5aa8 100644 --- a/packages/plugin-aws-lambda/package.json +++ b/packages/plugin-aws-lambda/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-aws-lambda", - "version": "7.18.0", + "version": "7.19.0", "main": "dist/bugsnag-aws-lambda.js", "types": "types/bugsnag-plugin-aws-lambda.d.ts", "description": "AWS Lambda support for @bugsnag/node", @@ -23,11 +23,11 @@ "author": "Bugsnag", "license": "MIT", "dependencies": { - "@bugsnag/in-flight": "^7.18.0", - "@bugsnag/plugin-browser-session": "^7.18.0" + "@bugsnag/in-flight": "^7.19.0", + "@bugsnag/plugin-browser-session": "^7.19.0" }, "devDependencies": { - "@bugsnag/core": "^7.18.0", + "@bugsnag/core": "^7.19.0", "@types/aws-lambda": "^8.10.76", "@vendia/serverless-express": "^4.10.1", "express": "^4.18.2" diff --git a/packages/plugin-browser-context/package-lock.json b/packages/plugin-browser-context/package-lock.json index 42e4ffa623..50a05315a4 100644 --- a/packages/plugin-browser-context/package-lock.json +++ b/packages/plugin-browser-context/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-browser-context", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-browser-context/package.json b/packages/plugin-browser-context/package.json index 050e621dd6..0cb102f31a 100644 --- a/packages/plugin-browser-context/package.json +++ b/packages/plugin-browser-context/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-browser-context", - "version": "7.18.0", + "version": "7.19.0", "main": "context.js", "description": "@bugsnag/js plugin to set event context in browsers", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-browser-device/package-lock.json b/packages/plugin-browser-device/package-lock.json index 06650aab58..997fa6790e 100644 --- a/packages/plugin-browser-device/package-lock.json +++ b/packages/plugin-browser-device/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-browser-device", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-browser-device/package.json b/packages/plugin-browser-device/package.json index 9a7cdcf275..48d7996c64 100644 --- a/packages/plugin-browser-device/package.json +++ b/packages/plugin-browser-device/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-browser-device", - "version": "7.18.0", + "version": "7.19.0", "main": "device.js", "description": "@bugsnag/js plugin to set device info in browsers", "homepage": "https://www.bugsnag.com/", @@ -20,7 +20,7 @@ "@bugsnag/cuid": "^3.0.0" }, "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-browser-request/package-lock.json b/packages/plugin-browser-request/package-lock.json index 6536a03d31..b15ae7641d 100644 --- a/packages/plugin-browser-request/package-lock.json +++ b/packages/plugin-browser-request/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-browser-request", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-browser-request/package.json b/packages/plugin-browser-request/package.json index d3e13620b1..152243e3b3 100644 --- a/packages/plugin-browser-request/package.json +++ b/packages/plugin-browser-request/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-browser-request", - "version": "7.18.0", + "version": "7.19.0", "main": "request.js", "description": "@bugsnag/js plugin to set request info in browsers", "homepage": "https://www.bugsnag.com/", @@ -18,7 +18,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-browser-session/package-lock.json b/packages/plugin-browser-session/package-lock.json index 826ac0154e..c3e17ec4f3 100644 --- a/packages/plugin-browser-session/package-lock.json +++ b/packages/plugin-browser-session/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-browser-session", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-browser-session/package.json b/packages/plugin-browser-session/package.json index c5fb5065c0..3121ba76ac 100644 --- a/packages/plugin-browser-session/package.json +++ b/packages/plugin-browser-session/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-browser-session", - "version": "7.18.0", + "version": "7.19.0", "main": "session.js", "description": "@bugsnag/js plugin to enable session tracking in browsers", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-client-ip/package-lock.json b/packages/plugin-client-ip/package-lock.json index fdf33a6987..5f51264ddc 100644 --- a/packages/plugin-client-ip/package-lock.json +++ b/packages/plugin-client-ip/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-client-ip", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-client-ip/package.json b/packages/plugin-client-ip/package.json index 0fb6e81074..29bbe9278a 100644 --- a/packages/plugin-client-ip/package.json +++ b/packages/plugin-client-ip/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-client-ip", - "version": "7.18.0", + "version": "7.19.0", "main": "client-ip.js", "description": "@bugsnag/js plugin to disable client IP from error reports", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-console-breadcrumbs/package-lock.json b/packages/plugin-console-breadcrumbs/package-lock.json index 151eeb20e3..07d754869a 100644 --- a/packages/plugin-console-breadcrumbs/package-lock.json +++ b/packages/plugin-console-breadcrumbs/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-console-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-console-breadcrumbs/package.json b/packages/plugin-console-breadcrumbs/package.json index 8da78cb64a..8cb4b1e348 100644 --- a/packages/plugin-console-breadcrumbs/package.json +++ b/packages/plugin-console-breadcrumbs/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-console-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "main": "console-breadcrumbs.js", "description": "@bugsnag/js plugin to record console log method calls as breadcrumbs", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-contextualize/package-lock.json b/packages/plugin-contextualize/package-lock.json index afe6b06fbd..db5948b19b 100644 --- a/packages/plugin-contextualize/package-lock.json +++ b/packages/plugin-contextualize/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-contextualize", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-contextualize/package.json b/packages/plugin-contextualize/package.json index b48dd877d7..8386545702 100644 --- a/packages/plugin-contextualize/package.json +++ b/packages/plugin-contextualize/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-contextualize", - "version": "7.18.0", + "version": "7.19.0", "main": "contextualize.js", "description": "@bugsnag/js plugin to add context to unhandled events", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-electron-app-breadcrumbs/package-lock.json b/packages/plugin-electron-app-breadcrumbs/package-lock.json index 21b1648b8d..cc8fd99b77 100644 --- a/packages/plugin-electron-app-breadcrumbs/package-lock.json +++ b/packages/plugin-electron-app-breadcrumbs/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-app-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-app-breadcrumbs/package.json b/packages/plugin-electron-app-breadcrumbs/package.json index 408de2a4f6..796ba3c1b6 100644 --- a/packages/plugin-electron-app-breadcrumbs/package.json +++ b/packages/plugin-electron-app-breadcrumbs/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-app-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "main": "app-breadcrumbs.js", "description": "@bugsnag/electron plugin to collect breadcrumbs for app lifecycle events", "repository": { @@ -17,8 +17,8 @@ "lodash.debounce": "^4.0.8" }, "devDependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/electron-test-helpers": "^7.18.0" + "@bugsnag/core": "^7.19.0", + "@bugsnag/electron-test-helpers": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.9.2" diff --git a/packages/plugin-electron-app/package-lock.json b/packages/plugin-electron-app/package-lock.json index 991d760dd4..65ce317655 100644 --- a/packages/plugin-electron-app/package-lock.json +++ b/packages/plugin-electron-app/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-app", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-app/package.json b/packages/plugin-electron-app/package.json index ce6edde550..51c8e1c555 100644 --- a/packages/plugin-electron-app/package.json +++ b/packages/plugin-electron-app/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-app", - "version": "7.18.0", + "version": "7.19.0", "main": "app.js", "description": "@bugsnag/electron plugin to collect app information", "repository": { @@ -25,8 +25,8 @@ "generate-compile-commands": "node-gyp configure --release -- -f gyp.generator.compile_commands_json.py; mv Release/compile_commands.json .; rm -rf Debug Release" }, "devDependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/electron-test-helpers": "^7.18.0" + "@bugsnag/core": "^7.19.0", + "@bugsnag/electron-test-helpers": "^7.19.0" }, "dependencies": { "bindings": "^1.5.0" diff --git a/packages/plugin-electron-client-state-manager/package-lock.json b/packages/plugin-electron-client-state-manager/package-lock.json index 9e59abf42f..b645e0b715 100644 --- a/packages/plugin-electron-client-state-manager/package-lock.json +++ b/packages/plugin-electron-client-state-manager/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-client-state-manager", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-client-state-manager/package.json b/packages/plugin-electron-client-state-manager/package.json index af50f4fdc9..b046defacf 100644 --- a/packages/plugin-electron-client-state-manager/package.json +++ b/packages/plugin-electron-client-state-manager/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-client-state-manager", - "version": "7.18.0", + "version": "7.19.0", "main": "client-state-manager.js", "description": "@bugsnag/electron plugin to sync state between various processes", "homepage": "https://www.bugsnag.com/", @@ -19,7 +19,7 @@ "client-state-manager.js" ], "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.9.2" diff --git a/packages/plugin-electron-client-state-persistence/package-lock.json b/packages/plugin-electron-client-state-persistence/package-lock.json index 272c1976ff..50450f3acb 100644 --- a/packages/plugin-electron-client-state-persistence/package-lock.json +++ b/packages/plugin-electron-client-state-persistence/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-client-state-persistence", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-client-state-persistence/package.json b/packages/plugin-electron-client-state-persistence/package.json index 3238ca8653..908f07fc54 100644 --- a/packages/plugin-electron-client-state-persistence/package.json +++ b/packages/plugin-electron-client-state-persistence/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-client-state-persistence", - "version": "7.18.0", + "version": "7.19.0", "main": "client-state-persistence.js", "description": "@bugsnag/electron plugin to sync information between JS and native layer", "homepage": "https://www.bugsnag.com/", @@ -39,8 +39,8 @@ "bindings": "^1.5.0" }, "devDependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/plugin-electron-client-state-manager": "^7.18.0", + "@bugsnag/core": "^7.19.0", + "@bugsnag/plugin-electron-client-state-manager": "^7.19.0", "@types/bindings": "^1.5.0" }, "peerDependencies": { diff --git a/packages/plugin-electron-deliver-minidumps/package-lock.json b/packages/plugin-electron-deliver-minidumps/package-lock.json index 1b56b19f58..8310891fc9 100644 --- a/packages/plugin-electron-deliver-minidumps/package-lock.json +++ b/packages/plugin-electron-deliver-minidumps/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-deliver-minidumps", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-deliver-minidumps/package.json b/packages/plugin-electron-deliver-minidumps/package.json index 7e6ca10fdc..9347161800 100644 --- a/packages/plugin-electron-deliver-minidumps/package.json +++ b/packages/plugin-electron-deliver-minidumps/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-deliver-minidumps", - "version": "7.18.0", + "version": "7.19.0", "main": "deliver-minidumps.js", "description": "@bugsnag/electron plugin to deliver minidumps to Bugsnag", "homepage": "https://www.bugsnag.com/", @@ -21,8 +21,8 @@ "form-data": "^4.0.0" }, "devDependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/electron-network-status": "^7.18.0" + "@bugsnag/core": "^7.19.0", + "@bugsnag/electron-network-status": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.9.2", diff --git a/packages/plugin-electron-device/package-lock.json b/packages/plugin-electron-device/package-lock.json index e9b0b33ca4..3c0f144753 100644 --- a/packages/plugin-electron-device/package-lock.json +++ b/packages/plugin-electron-device/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-device", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-device/package.json b/packages/plugin-electron-device/package.json index e70cdcc15d..d76a29b1e1 100644 --- a/packages/plugin-electron-device/package.json +++ b/packages/plugin-electron-device/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-device", - "version": "7.18.0", + "version": "7.19.0", "main": "device.js", "description": "@bugsnag/electron plugin to collect device information", "repository": { @@ -14,8 +14,8 @@ "device.js" ], "devDependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/electron-test-helpers": "^7.18.0" + "@bugsnag/core": "^7.19.0", + "@bugsnag/electron-test-helpers": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.9.2" diff --git a/packages/plugin-electron-ipc/package-lock.json b/packages/plugin-electron-ipc/package-lock.json index 84a0870c78..7ae39e0a23 100644 --- a/packages/plugin-electron-ipc/package-lock.json +++ b/packages/plugin-electron-ipc/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-ipc", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-ipc/package.json b/packages/plugin-electron-ipc/package.json index ea168451d1..f70743ca05 100644 --- a/packages/plugin-electron-ipc/package.json +++ b/packages/plugin-electron-ipc/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-ipc", - "version": "7.18.0", + "version": "7.19.0", "main": "electron-ipc.js", "description": "@bugsnag/electron plugin to create the IPC layer between main and renderer processes", "repository": { @@ -22,7 +22,7 @@ "@bugsnag/core": "^7.9.2" }, "devDependencies": { - "@bugsnag/core": "^7.18.0", + "@bugsnag/core": "^7.19.0", "browserify": "^17.0.0" }, "dependencies": { diff --git a/packages/plugin-electron-net-breadcrumbs/package-lock.json b/packages/plugin-electron-net-breadcrumbs/package-lock.json index faad73fe62..882f48f5f4 100644 --- a/packages/plugin-electron-net-breadcrumbs/package-lock.json +++ b/packages/plugin-electron-net-breadcrumbs/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-net-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-net-breadcrumbs/package.json b/packages/plugin-electron-net-breadcrumbs/package.json index 7c85f18f52..033a1a74bf 100644 --- a/packages/plugin-electron-net-breadcrumbs/package.json +++ b/packages/plugin-electron-net-breadcrumbs/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-net-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "main": "net-breadcrumbs.js", "description": "@bugsnag/electron plugin to collect breadcrumbs from requests made with the net module", "repository": { @@ -14,8 +14,8 @@ "net-breadcrumbs.js" ], "devDependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/electron-test-helpers": "^7.18.0" + "@bugsnag/core": "^7.19.0", + "@bugsnag/electron-test-helpers": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.9.2" diff --git a/packages/plugin-electron-network-status/package-lock.json b/packages/plugin-electron-network-status/package-lock.json index 3313c3d310..128d110789 100644 --- a/packages/plugin-electron-network-status/package-lock.json +++ b/packages/plugin-electron-network-status/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-network-status", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-network-status/package.json b/packages/plugin-electron-network-status/package.json index f7409ce055..430b6790fe 100644 --- a/packages/plugin-electron-network-status/package.json +++ b/packages/plugin-electron-network-status/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-network-status", - "version": "7.18.0", + "version": "7.19.0", "main": "network-status.js", "description": "@bugsnag/electron plugin to monitor the network status", "repository": { @@ -14,7 +14,7 @@ "network-status.js" ], "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.9.2" diff --git a/packages/plugin-electron-power-monitor-breadcrumbs/package-lock.json b/packages/plugin-electron-power-monitor-breadcrumbs/package-lock.json index c780dd51c2..092792cb55 100644 --- a/packages/plugin-electron-power-monitor-breadcrumbs/package-lock.json +++ b/packages/plugin-electron-power-monitor-breadcrumbs/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-power-monitor-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-power-monitor-breadcrumbs/package.json b/packages/plugin-electron-power-monitor-breadcrumbs/package.json index e2e8605ff4..5768ad33b3 100644 --- a/packages/plugin-electron-power-monitor-breadcrumbs/package.json +++ b/packages/plugin-electron-power-monitor-breadcrumbs/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-power-monitor-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "main": "power-monitor-breadcrumbs.js", "description": "@bugsnag/electron plugin to collect power state breadcrumbs", "repository": { @@ -14,8 +14,8 @@ "power-monitor-breadcrumbs.js" ], "devDependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/electron-test-helpers": "^7.18.0" + "@bugsnag/core": "^7.19.0", + "@bugsnag/electron-test-helpers": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.9.2" diff --git a/packages/plugin-electron-preload-error/package-lock.json b/packages/plugin-electron-preload-error/package-lock.json index d8dc1925cb..5e2c069a73 100644 --- a/packages/plugin-electron-preload-error/package-lock.json +++ b/packages/plugin-electron-preload-error/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-preload-error", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-preload-error/package.json b/packages/plugin-electron-preload-error/package.json index 03026d5523..449a470059 100644 --- a/packages/plugin-electron-preload-error/package.json +++ b/packages/plugin-electron-preload-error/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-preload-error", - "version": "7.18.0", + "version": "7.19.0", "main": "preload-error.js", "description": "@bugsnag/electron plugin to handle errors in preload scripts", "repository": { @@ -15,8 +15,8 @@ "preload-error.js" ], "devDependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/electron-test-helpers": "^7.18.0" + "@bugsnag/core": "^7.19.0", + "@bugsnag/electron-test-helpers": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.9.2" diff --git a/packages/plugin-electron-process-info/package-lock.json b/packages/plugin-electron-process-info/package-lock.json index 22124932c4..87ca9e1dee 100644 --- a/packages/plugin-electron-process-info/package-lock.json +++ b/packages/plugin-electron-process-info/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-process-info", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-process-info/package.json b/packages/plugin-electron-process-info/package.json index 4e96dc5472..3f6d17004c 100644 --- a/packages/plugin-electron-process-info/package.json +++ b/packages/plugin-electron-process-info/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-process-info", - "version": "7.18.0", + "version": "7.19.0", "main": "procinfo.js", "description": "@bugsnag/electron plugin to collect process information for errors", "repository": { @@ -14,7 +14,7 @@ "procinfo.js" ], "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.9.2" diff --git a/packages/plugin-electron-renderer-client-state-updates/package-lock.json b/packages/plugin-electron-renderer-client-state-updates/package-lock.json index 1aa69e2dca..ab313722a0 100644 --- a/packages/plugin-electron-renderer-client-state-updates/package-lock.json +++ b/packages/plugin-electron-renderer-client-state-updates/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-renderer-client-state-updates", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-renderer-client-state-updates/package.json b/packages/plugin-electron-renderer-client-state-updates/package.json index 576307f255..1bddadb4b1 100644 --- a/packages/plugin-electron-renderer-client-state-updates/package.json +++ b/packages/plugin-electron-renderer-client-state-updates/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-renderer-client-state-updates", - "version": "7.18.0", + "version": "7.19.0", "main": "client-state-updates.js", "description": "@bugsnag/electron plugin to sync information between JS renderers", "homepage": "https://www.bugsnag.com/", @@ -19,7 +19,7 @@ "client-state-updates.js" ], "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.9.2" diff --git a/packages/plugin-electron-renderer-event-data/package-lock.json b/packages/plugin-electron-renderer-event-data/package-lock.json index 53853e347f..4db9106e4b 100644 --- a/packages/plugin-electron-renderer-event-data/package-lock.json +++ b/packages/plugin-electron-renderer-event-data/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-renderer-event-data", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-renderer-event-data/package.json b/packages/plugin-electron-renderer-event-data/package.json index c7876dc4a4..00b07c7450 100644 --- a/packages/plugin-electron-renderer-event-data/package.json +++ b/packages/plugin-electron-renderer-event-data/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-renderer-event-data", - "version": "7.18.0", + "version": "7.19.0", "main": "renderer-event-data.js", "description": "@bugsnag/electron plugin to get fully populated event data in renderer callbacks", "homepage": "https://www.bugsnag.com/", @@ -19,9 +19,9 @@ "renderer-event-data.js" ], "devDependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/electron-test-helpers": "^7.18.0", - "@bugsnag/plugin-electron-renderer-strip-project-root": "^7.18.0" + "@bugsnag/core": "^7.19.0", + "@bugsnag/electron-test-helpers": "^7.19.0", + "@bugsnag/plugin-electron-renderer-strip-project-root": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.9.2", diff --git a/packages/plugin-electron-renderer-strip-project-root/package-lock.json b/packages/plugin-electron-renderer-strip-project-root/package-lock.json index 7c6aa33519..d6955e7083 100644 --- a/packages/plugin-electron-renderer-strip-project-root/package-lock.json +++ b/packages/plugin-electron-renderer-strip-project-root/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-renderer-strip-project-root", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-renderer-strip-project-root/package.json b/packages/plugin-electron-renderer-strip-project-root/package.json index 51524c7e41..c0de9bebc7 100644 --- a/packages/plugin-electron-renderer-strip-project-root/package.json +++ b/packages/plugin-electron-renderer-strip-project-root/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-renderer-strip-project-root", - "version": "7.18.0", + "version": "7.19.0", "main": "strip-project-root.js", "description": "@bugsnag/electron plugin to strip the project root from stack traces", "homepage": "https://www.bugsnag.com/", @@ -15,8 +15,8 @@ "*.js" ], "devDependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/electron-test-helpers": "^7.18.0" + "@bugsnag/core": "^7.19.0", + "@bugsnag/electron-test-helpers": "^7.19.0" }, "author": "Bugsnag", "license": "MIT" diff --git a/packages/plugin-electron-screen-breadcrumbs/package-lock.json b/packages/plugin-electron-screen-breadcrumbs/package-lock.json index 4be94069f1..783d220aae 100644 --- a/packages/plugin-electron-screen-breadcrumbs/package-lock.json +++ b/packages/plugin-electron-screen-breadcrumbs/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-screen-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-screen-breadcrumbs/package.json b/packages/plugin-electron-screen-breadcrumbs/package.json index c8f992b511..6af7af1024 100644 --- a/packages/plugin-electron-screen-breadcrumbs/package.json +++ b/packages/plugin-electron-screen-breadcrumbs/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-screen-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "main": "screen-breadcrumbs.js", "description": "@bugsnag/electron plugin to collect screen breadcrumbs", "repository": { @@ -14,8 +14,8 @@ "screen-breadcrumbs.js" ], "devDependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/electron-test-helpers": "^7.18.0" + "@bugsnag/core": "^7.19.0", + "@bugsnag/electron-test-helpers": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.9.2" diff --git a/packages/plugin-electron-session/package-lock.json b/packages/plugin-electron-session/package-lock.json index 1af1cc2ef3..39c29da2a0 100644 --- a/packages/plugin-electron-session/package-lock.json +++ b/packages/plugin-electron-session/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-session", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-electron-session/package.json b/packages/plugin-electron-session/package.json index 0e2bcfcfba..d52391b1f5 100644 --- a/packages/plugin-electron-session/package.json +++ b/packages/plugin-electron-session/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-electron-session", - "version": "7.18.0", + "version": "7.19.0", "main": "session.js", "description": "@bugsnag/electron plugin for sessions", "repository": { @@ -14,11 +14,11 @@ "session.js" ], "dependencies": { - "@bugsnag/plugin-browser-session": "^7.18.0" + "@bugsnag/plugin-browser-session": "^7.19.0" }, "devDependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/electron-test-helpers": "^7.18.0" + "@bugsnag/core": "^7.19.0", + "@bugsnag/electron-test-helpers": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.9.2" diff --git a/packages/plugin-express/package-lock.json b/packages/plugin-express/package-lock.json index b90fff1d59..ef62abf414 100644 --- a/packages/plugin-express/package-lock.json +++ b/packages/plugin-express/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-express", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-express/package.json b/packages/plugin-express/package.json index 2fe527885a..721bab6828 100644 --- a/packages/plugin-express/package.json +++ b/packages/plugin-express/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-express", - "version": "7.18.0", + "version": "7.19.0", "main": "dist/bugsnag-express.js", "types": "types/bugsnag-express.d.ts", "description": "@bugsnag/js error handling middleware for Express (and Connect) web servers", @@ -27,7 +27,7 @@ "@bugsnag/core": "^7.0.0" }, "devDependencies": { - "@bugsnag/core": "^7.18.0", + "@bugsnag/core": "^7.19.0", "@types/express": "^4.17.6" }, "dependencies": { diff --git a/packages/plugin-inline-script-content/package-lock.json b/packages/plugin-inline-script-content/package-lock.json index ff7957b8ad..1739eab221 100644 --- a/packages/plugin-inline-script-content/package-lock.json +++ b/packages/plugin-inline-script-content/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-inline-script-content", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-inline-script-content/package.json b/packages/plugin-inline-script-content/package.json index 20dc4c969b..3e65100ed4 100644 --- a/packages/plugin-inline-script-content/package.json +++ b/packages/plugin-inline-script-content/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-inline-script-content", - "version": "7.18.0", + "version": "7.19.0", "main": "inline-script-content.js", "description": "@bugsnag/js plugin to attach inline script content to error events", "homepage": "https://www.bugsnag.com/", @@ -18,7 +18,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-interaction-breadcrumbs/package-lock.json b/packages/plugin-interaction-breadcrumbs/package-lock.json index c3673dfc46..f249dbae92 100644 --- a/packages/plugin-interaction-breadcrumbs/package-lock.json +++ b/packages/plugin-interaction-breadcrumbs/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-interaction-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-interaction-breadcrumbs/package.json b/packages/plugin-interaction-breadcrumbs/package.json index e6beb02a77..f7fdca4ed2 100644 --- a/packages/plugin-interaction-breadcrumbs/package.json +++ b/packages/plugin-interaction-breadcrumbs/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-interaction-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "main": "interaction-breadcrumbs.js", "description": "@bugsnag/js plugin to record UI click events as breadcrumbs", "homepage": "https://www.bugsnag.com/", @@ -18,7 +18,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-intercept/package-lock.json b/packages/plugin-intercept/package-lock.json index cf8bd7ad4b..9b38193ae8 100644 --- a/packages/plugin-intercept/package-lock.json +++ b/packages/plugin-intercept/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-intercept", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-intercept/package.json b/packages/plugin-intercept/package.json index fa0149859f..eecb100b9f 100644 --- a/packages/plugin-intercept/package.json +++ b/packages/plugin-intercept/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-intercept", - "version": "7.18.0", + "version": "7.19.0", "main": "intercept.js", "description": "@bugsnag/js plugin providing convenience functions for intercepting asynchronous errors", "homepage": "https://www.bugsnag.com/", @@ -18,7 +18,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-internal-callback-marker/package-lock.json b/packages/plugin-internal-callback-marker/package-lock.json index 052ad68771..4142183bdb 100644 --- a/packages/plugin-internal-callback-marker/package-lock.json +++ b/packages/plugin-internal-callback-marker/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-internal-callback-marker", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-internal-callback-marker/package.json b/packages/plugin-internal-callback-marker/package.json index 26db380195..36fee8e285 100644 --- a/packages/plugin-internal-callback-marker/package.json +++ b/packages/plugin-internal-callback-marker/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-internal-callback-marker", - "version": "7.18.0", + "version": "7.19.0", "main": "internal-callback-marker.js", "description": "@bugsnag/js plugin to annotate all OnError callbacks added by internal plugins", "homepage": "https://www.bugsnag.com/", @@ -18,7 +18,7 @@ "internal-callback-marker.js" ], "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.9.2" diff --git a/packages/plugin-koa/package-lock.json b/packages/plugin-koa/package-lock.json index fb9ac98c3c..65d4a1e7f4 100644 --- a/packages/plugin-koa/package-lock.json +++ b/packages/plugin-koa/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-koa", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-koa/package.json b/packages/plugin-koa/package.json index f18d190b9f..d03cf13530 100644 --- a/packages/plugin-koa/package.json +++ b/packages/plugin-koa/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-koa", - "version": "7.18.0", + "version": "7.19.0", "main": "dist/bugsnag-koa.js", "types": "types/bugsnag-koa.d.ts", "description": "@bugsnag/js error handling middleware for Koa web servers", @@ -27,7 +27,7 @@ "@bugsnag/core": "^7.0.0" }, "devDependencies": { - "@bugsnag/core": "^7.18.0", + "@bugsnag/core": "^7.19.0", "@types/koa": "^2.11.3" }, "dependencies": { diff --git a/packages/plugin-navigation-breadcrumbs/package-lock.json b/packages/plugin-navigation-breadcrumbs/package-lock.json index c36c42dda9..be390146ea 100644 --- a/packages/plugin-navigation-breadcrumbs/package-lock.json +++ b/packages/plugin-navigation-breadcrumbs/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-navigation-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-navigation-breadcrumbs/package.json b/packages/plugin-navigation-breadcrumbs/package.json index 242df0f327..1febdcafe4 100644 --- a/packages/plugin-navigation-breadcrumbs/package.json +++ b/packages/plugin-navigation-breadcrumbs/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-navigation-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "main": "navigation-breadcrumbs.js", "description": "@bugsnag/js plugin to record browser navigation as breadcrumbs", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-network-breadcrumbs/package-lock.json b/packages/plugin-network-breadcrumbs/package-lock.json index 282671db55..e4b5eb139f 100644 --- a/packages/plugin-network-breadcrumbs/package-lock.json +++ b/packages/plugin-network-breadcrumbs/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-network-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-network-breadcrumbs/package.json b/packages/plugin-network-breadcrumbs/package.json index c53d43970f..ae46568ff8 100644 --- a/packages/plugin-network-breadcrumbs/package.json +++ b/packages/plugin-network-breadcrumbs/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-network-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "main": "network-breadcrumbs.js", "description": "@bugsnag/js plugin to record browser requests as breadcrumbs", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-node-device/package-lock.json b/packages/plugin-node-device/package-lock.json index ba270adb34..93ab81d24f 100644 --- a/packages/plugin-node-device/package-lock.json +++ b/packages/plugin-node-device/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-node-device", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-node-device/package.json b/packages/plugin-node-device/package.json index 49cf29c3ca..d83aa929ad 100644 --- a/packages/plugin-node-device/package.json +++ b/packages/plugin-node-device/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-node-device", - "version": "7.18.0", + "version": "7.19.0", "main": "device.js", "description": "@bugsnag/js plugin to set device info in node", "homepage": "https://www.bugsnag.com/", @@ -18,7 +18,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-node-in-project/package-lock.json b/packages/plugin-node-in-project/package-lock.json index 360de22865..8283fe79a3 100644 --- a/packages/plugin-node-in-project/package-lock.json +++ b/packages/plugin-node-in-project/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-node-in-project", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-node-in-project/package.json b/packages/plugin-node-in-project/package.json index 19ebe1c117..235275fd2a 100644 --- a/packages/plugin-node-in-project/package.json +++ b/packages/plugin-node-in-project/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-node-in-project", - "version": "7.18.0", + "version": "7.19.0", "main": "in-project.js", "description": "@bugsnag/js plugin to mark whether stackframes are 'in-project'", "homepage": "https://www.bugsnag.com/", @@ -18,7 +18,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-node-surrounding-code/package-lock.json b/packages/plugin-node-surrounding-code/package-lock.json index 7963c98ee7..b3aa5f77d2 100644 --- a/packages/plugin-node-surrounding-code/package-lock.json +++ b/packages/plugin-node-surrounding-code/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-node-surrounding-code", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-node-surrounding-code/package.json b/packages/plugin-node-surrounding-code/package.json index 049ac9e515..eab597226b 100644 --- a/packages/plugin-node-surrounding-code/package.json +++ b/packages/plugin-node-surrounding-code/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-node-surrounding-code", - "version": "7.18.0", + "version": "7.19.0", "main": "surrounding-code.js", "description": "@bugsnag/js plugin to load surrounding code in Node stacktraces", "homepage": "https://www.bugsnag.com/", @@ -22,7 +22,7 @@ "pump": "^3.0.0" }, "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-node-uncaught-exception/package-lock.json b/packages/plugin-node-uncaught-exception/package-lock.json index ad697ab76f..9cf78a3797 100644 --- a/packages/plugin-node-uncaught-exception/package-lock.json +++ b/packages/plugin-node-uncaught-exception/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-node-uncaught-exception", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-node-uncaught-exception/package.json b/packages/plugin-node-uncaught-exception/package.json index 5374a74df1..d4b7dc5019 100644 --- a/packages/plugin-node-uncaught-exception/package.json +++ b/packages/plugin-node-uncaught-exception/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-node-uncaught-exception", - "version": "7.18.0", + "version": "7.19.0", "main": "uncaught-exception.js", "description": "@bugsnag/js plugin to capture and report uncaught exceptions", "homepage": "https://www.bugsnag.com/", @@ -18,7 +18,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-node-unhandled-rejection/package-lock.json b/packages/plugin-node-unhandled-rejection/package-lock.json index 634851afc2..ea0b180948 100644 --- a/packages/plugin-node-unhandled-rejection/package-lock.json +++ b/packages/plugin-node-unhandled-rejection/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-node-unhandled-rejection", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-node-unhandled-rejection/package.json b/packages/plugin-node-unhandled-rejection/package.json index 58d149bcc0..7b3d8bd77a 100644 --- a/packages/plugin-node-unhandled-rejection/package.json +++ b/packages/plugin-node-unhandled-rejection/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-node-unhandled-rejection", - "version": "7.18.0", + "version": "7.19.0", "main": "unhandled-rejection.js", "description": "@bugsnag/js plugin to capture and report unhandled rejections", "homepage": "https://www.bugsnag.com/", @@ -18,7 +18,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-react-native-client-sync/package-lock.json b/packages/plugin-react-native-client-sync/package-lock.json index 69ef8eafe7..338d9bf0c0 100644 --- a/packages/plugin-react-native-client-sync/package-lock.json +++ b/packages/plugin-react-native-client-sync/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-native-client-sync", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-react-native-client-sync/package.json b/packages/plugin-react-native-client-sync/package.json index c602d909c9..94cffd68af 100644 --- a/packages/plugin-react-native-client-sync/package.json +++ b/packages/plugin-react-native-client-sync/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-native-client-sync", - "version": "7.18.0", + "version": "7.19.0", "main": "client-sync.js", "description": "@bugsnag/react-native plugin to sync information between JS and native layer", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-react-native-event-sync/package-lock.json b/packages/plugin-react-native-event-sync/package-lock.json index 7716c95b83..fb46063b51 100644 --- a/packages/plugin-react-native-event-sync/package-lock.json +++ b/packages/plugin-react-native-event-sync/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-native-event-sync", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-react-native-event-sync/package.json b/packages/plugin-react-native-event-sync/package.json index b4fa700e75..9585031f4b 100644 --- a/packages/plugin-react-native-event-sync/package.json +++ b/packages/plugin-react-native-event-sync/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-native-event-sync", - "version": "7.18.0", + "version": "7.19.0", "main": "event-sync.js", "description": "@bugsnag/react-native plugin to sync native event information in an onError callbacks", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-react-native-global-error-handler/package-lock.json b/packages/plugin-react-native-global-error-handler/package-lock.json index 1a24405f19..ee9d874d8d 100644 --- a/packages/plugin-react-native-global-error-handler/package-lock.json +++ b/packages/plugin-react-native-global-error-handler/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-native-global-error-handler", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-react-native-global-error-handler/package.json b/packages/plugin-react-native-global-error-handler/package.json index 7f7fb17617..f583b06544 100644 --- a/packages/plugin-react-native-global-error-handler/package.json +++ b/packages/plugin-react-native-global-error-handler/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-native-global-error-handler", - "version": "7.18.0", + "version": "7.19.0", "main": "error-handler.js", "description": "@bugsnag/js plugin to report unhandled exceptions in React Native", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-react-native-hermes/package.json b/packages/plugin-react-native-hermes/package.json index 22ca6fe6a1..12eaf9e7d8 100644 --- a/packages/plugin-react-native-hermes/package.json +++ b/packages/plugin-react-native-hermes/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-native-hermes", - "version": "7.18.0", + "version": "7.19.0", "main": "hermes.js", "description": "@bugsnag/react-native plugin to support Hermes", "homepage": "https://www.bugsnag.com/", @@ -18,7 +18,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-react-native-navigation/package-lock.json b/packages/plugin-react-native-navigation/package-lock.json index 841911ea80..37956f6de1 100644 --- a/packages/plugin-react-native-navigation/package-lock.json +++ b/packages/plugin-react-native-navigation/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-native-navigation", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-react-native-navigation/package.json b/packages/plugin-react-native-navigation/package.json index 17549773ce..7fb0f54752 100644 --- a/packages/plugin-react-native-navigation/package.json +++ b/packages/plugin-react-native-navigation/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-native-navigation", - "version": "7.18.0", + "version": "7.19.0", "main": "react-native-navigation.js", "types": "types/react-native-navigation.d.ts", "description": "@bugsnag/react-native plugin for integration with react-native-navigation", @@ -19,7 +19,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0", + "@bugsnag/core": "^7.19.0", "@types/react-native": "^0.63.20", "react-native-navigation": "^7.0.0" }, diff --git a/packages/plugin-react-native-orientation-breadcrumbs/package-lock.json b/packages/plugin-react-native-orientation-breadcrumbs/package-lock.json index 4acd9df3e4..881b6c6309 100644 --- a/packages/plugin-react-native-orientation-breadcrumbs/package-lock.json +++ b/packages/plugin-react-native-orientation-breadcrumbs/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-native-orientation-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-react-native-orientation-breadcrumbs/package.json b/packages/plugin-react-native-orientation-breadcrumbs/package.json index 9eab9ad79c..f96f3a9ce0 100644 --- a/packages/plugin-react-native-orientation-breadcrumbs/package.json +++ b/packages/plugin-react-native-orientation-breadcrumbs/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-native-orientation-breadcrumbs", - "version": "7.18.0", + "version": "7.19.0", "main": "orientation.js", "description": "@bugsnag/js plugin to create breadcrumbs when the device orientation changes in a React Native app", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-react-native-session/package-lock.json b/packages/plugin-react-native-session/package-lock.json index ac3f25ed51..1aa1142bd8 100644 --- a/packages/plugin-react-native-session/package-lock.json +++ b/packages/plugin-react-native-session/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-native-session", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-react-native-session/package.json b/packages/plugin-react-native-session/package.json index 6f56f7eadc..a3ef07c951 100644 --- a/packages/plugin-react-native-session/package.json +++ b/packages/plugin-react-native-session/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-native-session", - "version": "7.18.0", + "version": "7.19.0", "main": "session.js", "description": "@bugsnag/react-native session implementation (which delegates all functionality to the native client)", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-react-native-unhandled-rejection/package-lock.json b/packages/plugin-react-native-unhandled-rejection/package-lock.json index a6bdbb8147..abc6f02e84 100644 --- a/packages/plugin-react-native-unhandled-rejection/package-lock.json +++ b/packages/plugin-react-native-unhandled-rejection/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-native-unhandled-rejection", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-react-native-unhandled-rejection/package.json b/packages/plugin-react-native-unhandled-rejection/package.json index b49b7f92b0..53453433ca 100644 --- a/packages/plugin-react-native-unhandled-rejection/package.json +++ b/packages/plugin-react-native-unhandled-rejection/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-native-unhandled-rejection", - "version": "7.18.0", + "version": "7.19.0", "main": "rejection-handler.js", "description": "@bugsnag/js plugin to report unhandled promise rejections in React Native", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0", + "@bugsnag/core": "^7.19.0", "promise": "^8.0.2" }, "peerDependencies": { diff --git a/packages/plugin-react-navigation/package-lock.json b/packages/plugin-react-navigation/package-lock.json index c2c187ac06..c416760f03 100644 --- a/packages/plugin-react-navigation/package-lock.json +++ b/packages/plugin-react-navigation/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-navigation", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-react-navigation/package.json b/packages/plugin-react-navigation/package.json index 273c5bdf29..fbf5e2ecec 100644 --- a/packages/plugin-react-navigation/package.json +++ b/packages/plugin-react-navigation/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react-navigation", - "version": "7.18.0", + "version": "7.19.0", "main": "react-navigation.js", "description": "@bugsnag/react-native plugin to update context and leave breadcrumb when the screen changes", "homepage": "https://www.bugsnag.com/", @@ -22,7 +22,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0", + "@bugsnag/core": "^7.19.0", "@react-navigation/native": "^5.7.3", "@types/react": "^16.9.49", "@types/react-native": "^0.63.20", diff --git a/packages/plugin-react/package-lock.json b/packages/plugin-react/package-lock.json index 0732369e38..6c5c92a6e0 100644 --- a/packages/plugin-react/package-lock.json +++ b/packages/plugin-react/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 3840ddc5bd..e81e754da0 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-react", - "version": "7.18.0", + "version": "7.19.0", "main": "dist/bugsnag-react.js", "description": "React integration for @bugsnag/js", "browser": "dist/bugsnag-react.js", @@ -24,7 +24,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-restify/package-lock.json b/packages/plugin-restify/package-lock.json index 6ee862f0d4..7f43051e5c 100644 --- a/packages/plugin-restify/package-lock.json +++ b/packages/plugin-restify/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-restify", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-restify/package.json b/packages/plugin-restify/package.json index b7fc25d883..339b55d57c 100644 --- a/packages/plugin-restify/package.json +++ b/packages/plugin-restify/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-restify", - "version": "7.18.0", + "version": "7.19.0", "main": "dist/bugsnag-restify.js", "types": "types/bugsnag-restify.d.ts", "description": "@bugsnag/js error handling middleware for Restify web servers", @@ -27,7 +27,7 @@ "@bugsnag/core": "^7.0.0" }, "devDependencies": { - "@bugsnag/core": "^7.18.0", + "@bugsnag/core": "^7.19.0", "@types/restify": "^8.4.2" }, "dependencies": { diff --git a/packages/plugin-server-session/package-lock.json b/packages/plugin-server-session/package-lock.json index 61c726169d..8f1d437dcd 100644 --- a/packages/plugin-server-session/package-lock.json +++ b/packages/plugin-server-session/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-server-session", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-server-session/package.json b/packages/plugin-server-session/package.json index 6b0b3333d4..6423657816 100644 --- a/packages/plugin-server-session/package.json +++ b/packages/plugin-server-session/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-server-session", - "version": "7.18.0", + "version": "7.19.0", "main": "session.js", "description": "@bugsnag/js plugin to enable session tracking in server applications", "homepage": "https://www.bugsnag.com/", @@ -20,7 +20,7 @@ "backo": "^1.1.0" }, "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-simple-throttle/package-lock.json b/packages/plugin-simple-throttle/package-lock.json index 70ae3b0203..f203cc7631 100644 --- a/packages/plugin-simple-throttle/package-lock.json +++ b/packages/plugin-simple-throttle/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-simple-throttle", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-simple-throttle/package.json b/packages/plugin-simple-throttle/package.json index df604324f3..0598dfb809 100644 --- a/packages/plugin-simple-throttle/package.json +++ b/packages/plugin-simple-throttle/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-simple-throttle", - "version": "7.18.0", + "version": "7.19.0", "main": "throttle.js", "description": "@bugsnag/js plugin to prevent too many events from being sent", "homepage": "https://www.bugsnag.com/", @@ -18,7 +18,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-stackframe-path-normaliser/package.json b/packages/plugin-stackframe-path-normaliser/package.json index b0835e20f3..9154d461c0 100644 --- a/packages/plugin-stackframe-path-normaliser/package.json +++ b/packages/plugin-stackframe-path-normaliser/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-stackframe-path-normaliser", - "version": "7.18.0", + "version": "7.19.0", "main": "path-normaliser.js", "description": "@bugsnag/js plugin to normalise file paths in stackframes", "homepage": "https://www.bugsnag.com/", @@ -17,6 +17,6 @@ "@bugsnag/core": "^7.0.0" }, "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" } } diff --git a/packages/plugin-strip-project-root/package-lock.json b/packages/plugin-strip-project-root/package-lock.json index 1b08220a95..7a9cf92042 100644 --- a/packages/plugin-strip-project-root/package-lock.json +++ b/packages/plugin-strip-project-root/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-strip-project-root", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-strip-project-root/package.json b/packages/plugin-strip-project-root/package.json index 333e1adb7a..7eb78d07fc 100644 --- a/packages/plugin-strip-project-root/package.json +++ b/packages/plugin-strip-project-root/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-strip-project-root", - "version": "7.18.0", + "version": "7.19.0", "main": "strip-project-root.js", "description": "@bugsnag/js plugin to remove common project root paths from stacktraces", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-strip-query-string/package-lock.json b/packages/plugin-strip-query-string/package-lock.json index 8a43e31384..8d4cca7052 100644 --- a/packages/plugin-strip-query-string/package-lock.json +++ b/packages/plugin-strip-query-string/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-strip-query-string", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-strip-query-string/package.json b/packages/plugin-strip-query-string/package.json index 43888d144c..0425782c56 100644 --- a/packages/plugin-strip-query-string/package.json +++ b/packages/plugin-strip-query-string/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-strip-query-string", - "version": "7.18.0", + "version": "7.19.0", "main": "strip-query-string.js", "description": "@bugsnag/js plugin to strip query string and document fragment from stackframe filenames", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-vue/package-lock.json b/packages/plugin-vue/package-lock.json index e6b2040f39..9811819acd 100644 --- a/packages/plugin-vue/package-lock.json +++ b/packages/plugin-vue/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-vue", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-vue/package.json b/packages/plugin-vue/package.json index 8e46251305..5c1dc5c8d0 100644 --- a/packages/plugin-vue/package.json +++ b/packages/plugin-vue/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-vue", - "version": "7.18.0", + "version": "7.19.0", "description": "Vue.js integration for bugsnag-js", "main": "dist/bugsnag-vue.js", "browser": "dist/bugsnag-vue.js", @@ -24,7 +24,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-window-onerror/package-lock.json b/packages/plugin-window-onerror/package-lock.json index 67961639bd..fd3f365030 100644 --- a/packages/plugin-window-onerror/package-lock.json +++ b/packages/plugin-window-onerror/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-window-onerror", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-window-onerror/package.json b/packages/plugin-window-onerror/package.json index c6ca84f216..94f25b39c4 100644 --- a/packages/plugin-window-onerror/package.json +++ b/packages/plugin-window-onerror/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-window-onerror", - "version": "7.18.0", + "version": "7.19.0", "main": "onerror.js", "description": "@bugsnag/js plugin to report unhandled exceptions in browsers", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/plugin-window-unhandled-rejection/package-lock.json b/packages/plugin-window-unhandled-rejection/package-lock.json index 9891a057b2..b308b4b9f5 100644 --- a/packages/plugin-window-unhandled-rejection/package-lock.json +++ b/packages/plugin-window-unhandled-rejection/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-window-unhandled-rejection", - "version": "7.18.0", + "version": "7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-window-unhandled-rejection/package.json b/packages/plugin-window-unhandled-rejection/package.json index afe3c3c2b1..f3a7ed4cc8 100644 --- a/packages/plugin-window-unhandled-rejection/package.json +++ b/packages/plugin-window-unhandled-rejection/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-window-unhandled-rejection", - "version": "7.18.0", + "version": "7.19.0", "main": "unhandled-rejection.js", "description": "@bugsnag/js plugin to report unhandled promise rejections in browsers", "homepage": "https://www.bugsnag.com/", @@ -17,7 +17,7 @@ "author": "Bugsnag", "license": "MIT", "devDependencies": { - "@bugsnag/core": "^7.18.0" + "@bugsnag/core": "^7.19.0" }, "peerDependencies": { "@bugsnag/core": "^7.0.0" diff --git a/packages/react-native/package-lock.json b/packages/react-native/package-lock.json index a6a348f824..cf97671168 100644 --- a/packages/react-native/package-lock.json +++ b/packages/react-native/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/react-native", - "version": "7.18.2", + "version": "7.19.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 2fa41c6733..2ef5beb75a 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/react-native", - "version": "7.18.2", + "version": "7.19.0", "main": "src/notifier.js", "types": "types/bugsnag.d.ts", "description": "Bugsnag error reporter for React Native applications", @@ -49,17 +49,17 @@ "typescript": "^3.3.3" }, "dependencies": { - "@bugsnag/core": "^7.18.0", - "@bugsnag/delivery-react-native": "^7.18.0", - "@bugsnag/plugin-console-breadcrumbs": "^7.18.0", - "@bugsnag/plugin-network-breadcrumbs": "^7.18.0", - "@bugsnag/plugin-react": "^7.18.0", - "@bugsnag/plugin-react-native-client-sync": "^7.18.0", - "@bugsnag/plugin-react-native-event-sync": "^7.18.0", - "@bugsnag/plugin-react-native-global-error-handler": "^7.18.0", - "@bugsnag/plugin-react-native-hermes": "^7.18.0", - "@bugsnag/plugin-react-native-session": "^7.18.0", - "@bugsnag/plugin-react-native-unhandled-rejection": "^7.18.0", + "@bugsnag/core": "^7.19.0", + "@bugsnag/delivery-react-native": "^7.19.0", + "@bugsnag/plugin-console-breadcrumbs": "^7.19.0", + "@bugsnag/plugin-network-breadcrumbs": "^7.19.0", + "@bugsnag/plugin-react": "^7.19.0", + "@bugsnag/plugin-react-native-client-sync": "^7.19.0", + "@bugsnag/plugin-react-native-event-sync": "^7.19.0", + "@bugsnag/plugin-react-native-global-error-handler": "^7.19.0", + "@bugsnag/plugin-react-native-hermes": "^7.19.0", + "@bugsnag/plugin-react-native-session": "^7.19.0", + "@bugsnag/plugin-react-native-unhandled-rejection": "^7.19.0", "iserror": "^0.0.2" }, "scripts": { From 04ada58214105c0f56a31c875a435654646b4fe8 Mon Sep 17 00:00:00 2001 From: Benedict Wilson Date: Tue, 31 Jan 2023 16:17:31 +0000 Subject: [PATCH 19/28] Add service worker support (#1915) * feat: :sparkles: create new fetch based delivery system * test: :white_check_mark: update jest config to run delivery-fetch unit tests * docs: :memo: update CHANGELOG.md * use event.apiKey for delivery if present * Update packages/delivery-fetch/README.md Co-authored-by: Joe Haines * test: :white_check_mark: add test for apiKey inheritance * update package-lock.json * chore: :label: Update delivery type declaration * feat: :sparkles: create new fetch based delivery system * feat: :sparkles: add new web-worker package * test: :white_check_mark: add unit tests to web-worker package * test: :white_check_mark: add end to end tests for web-worker package * fix: :recycle: refactor plugin-browser-device to work outside of a browser * docs: :memo: update CHANGELOG.md * chore: remove duplicate package in jest config * docs: :memo: update TODO.md * test: :test_tube: add failing test to check for presense of stacktrace * test: :white_check_mark: update test assertion to check stacktrace is not empty * Apply suggestions from code review Co-authored-by: Joe Haines * remove TODO.md * Update packages/web-worker/README.md Co-authored-by: Joe Haines * Refactor parameters for improved guarding * accept second argument to update component name (default window onerror) * Apply suggestions from code review Co-authored-by: Joe Haines * update README.md * Update packages/web-worker/README.md * feat: :sparkles: add unhandled promise rejections plugin to web-worker notifier * update CHANGELOG.md * docs: :memo: remove unnecessary changelog entry * update eslint environment in worker script * add autoTrackSessions to web-worker notifier and disable as default * add session tracking to web-worker notifier * test: :white_check_mark: add e2e test for autoTrackSessions in web-worker notifier * test: :white_check_mark: check session is not started when not expected * test: :white_check_mark: check for no unexpected sessions * refactor: :recycle: move cdn-upload and size scripts to shared bin * chore: add eslint-env worker scope * update cdn-upload script * finalise cdn-upload script changes * build: :heavy_plus_sign: install cloudfront, knox, mime and semver to root package * update web-worker export name * test: :test_tube: significantly expand web-worker browser testing * ensure types are discovered by typescript compiler * fix cdn upload script * add useful comments to web_worker.feature * fix broken test * Update bin/cdn-upload Co-authored-by: Joe Haines * handle environment varibles for bucket name and distribution id * fix cdn-upload script * remove unhandled rejection masking * test: :test_tube: disable android 7 tests * remove unnecessary dependencies --------- Co-authored-by: Joe Haines Co-authored-by: Gareth Thackeray --- .buildkite/browser-pipeline.yml | 32 +- CHANGELOG.md | 3 + bin/cdn-upload | 91 + bin/local-test-util | 8 +- bin/release.sh | 12 +- {packages/browser/bin => bin}/size | 5 +- dockerfiles/Dockerfile.browser | 2 + jest.config.js | 2 + package-lock.json | 689 +++-- package.json | 3 +- packages/browser/bin/cdn-upload | 83 - packages/browser/package.json | 10 +- packages/delivery-fetch/LICENSE.txt | 19 + packages/delivery-fetch/README.md | 7 + packages/delivery-fetch/delivery.d.ts | 6 + packages/delivery-fetch/delivery.js | 44 + packages/delivery-fetch/package-lock.json | 131 + packages/delivery-fetch/package.json | 22 + packages/delivery-fetch/test/delivery.test.ts | 135 + packages/plugin-browser-device/device.js | 18 +- .../plugin-browser-device/test/device.test.ts | 6 +- packages/plugin-window-onerror/onerror.js | 10 +- .../test/onerror.test.ts | 14 + packages/web-worker/LICENSE.txt | 19 + packages/web-worker/README.md | 42 + packages/web-worker/esm.config.js | 34 + packages/web-worker/package-lock.json | 2636 +++++++++++++++++ packages/web-worker/package.json | 54 + packages/web-worker/src/config.js | 34 + packages/web-worker/src/notifier.d.ts | 2 + packages/web-worker/src/notifier.js | 73 + packages/web-worker/src/prevent-discard.js | 16 + packages/web-worker/test/notifier.test.ts | 231 ++ packages/web-worker/types/notifier.ts | 17 + packages/web-worker/webpack.config.js | 35 + .../web_worker/auto_track_sessions/index.html | 17 + .../web_worker/auto_track_sessions/worker.js | 19 + .../web_worker/ip_redaction/index.html | 18 + .../web_worker/ip_redaction/worker.js | 23 + .../unhandled_promise_rejection/index.html | 18 + .../unhandled_promise_rejection/worker.js | 22 + .../web_worker/worker_notify_error/index.html | 18 + .../web_worker/worker_notify_error/worker.js | 22 + .../worker_unhandled_error/index.html | 18 + .../worker_unhandled_error/worker.js | 21 + test/browser/features/web_worker.feature | 45 + 46 files changed, 4456 insertions(+), 330 deletions(-) create mode 100755 bin/cdn-upload rename {packages/browser/bin => bin}/size (68%) delete mode 100755 packages/browser/bin/cdn-upload create mode 100644 packages/delivery-fetch/LICENSE.txt create mode 100644 packages/delivery-fetch/README.md create mode 100644 packages/delivery-fetch/delivery.d.ts create mode 100644 packages/delivery-fetch/delivery.js create mode 100644 packages/delivery-fetch/package-lock.json create mode 100644 packages/delivery-fetch/package.json create mode 100644 packages/delivery-fetch/test/delivery.test.ts create mode 100644 packages/web-worker/LICENSE.txt create mode 100644 packages/web-worker/README.md create mode 100644 packages/web-worker/esm.config.js create mode 100644 packages/web-worker/package-lock.json create mode 100644 packages/web-worker/package.json create mode 100644 packages/web-worker/src/config.js create mode 100644 packages/web-worker/src/notifier.d.ts create mode 100644 packages/web-worker/src/notifier.js create mode 100644 packages/web-worker/src/prevent-discard.js create mode 100644 packages/web-worker/test/notifier.test.ts create mode 100644 packages/web-worker/types/notifier.ts create mode 100644 packages/web-worker/webpack.config.js create mode 100644 test/browser/features/fixtures/web_worker/auto_track_sessions/index.html create mode 100644 test/browser/features/fixtures/web_worker/auto_track_sessions/worker.js create mode 100644 test/browser/features/fixtures/web_worker/ip_redaction/index.html create mode 100644 test/browser/features/fixtures/web_worker/ip_redaction/worker.js create mode 100644 test/browser/features/fixtures/web_worker/unhandled_promise_rejection/index.html create mode 100644 test/browser/features/fixtures/web_worker/unhandled_promise_rejection/worker.js create mode 100644 test/browser/features/fixtures/web_worker/worker_notify_error/index.html create mode 100644 test/browser/features/fixtures/web_worker/worker_notify_error/worker.js create mode 100644 test/browser/features/fixtures/web_worker/worker_unhandled_error/index.html create mode 100644 test/browser/features/fixtures/web_worker/worker_unhandled_error/worker.js create mode 100644 test/browser/features/web_worker.feature diff --git a/.buildkite/browser-pipeline.yml b/.buildkite/browser-pipeline.yml index da1ca846ff..867129a44d 100644 --- a/.buildkite/browser-pipeline.yml +++ b/.buildkite/browser-pipeline.yml @@ -301,22 +301,22 @@ steps: concurrency: 5 concurrency_group: "browserstack" - - label: ":android: Android 6.0 Browser tests" - depends_on: "browser-maze-runner" - timeout_in_minutes: 30 - plugins: - docker-compose#v3.9.0: - pull: browser-maze-runner - run: browser-maze-runner - use-aliases: true - command: - - --farm=bs - - --browser=android_s7 - artifacts#v1.5.0: - upload: - - "./test/browser/maze_output/failed/**/*" - concurrency: 5 - concurrency_group: "browserstack" + # - label: ":android: Android 6.0 Browser tests" + # depends_on: "browser-maze-runner" + # timeout_in_minutes: 30 + # plugins: + # docker-compose#v3.9.0: + # pull: browser-maze-runner + # run: browser-maze-runner + # use-aliases: true + # command: + # - --farm=bs + # - --browser=android_s7 + # artifacts#v1.5.0: + # upload: + # - "./test/browser/maze_output/failed/**/*" + # concurrency: 5 + # concurrency_group: "browserstack" - label: ":android: Android 7.0 Browser tests" depends_on: "browser-maze-runner" diff --git a/CHANGELOG.md b/CHANGELOG.md index 330d5d8fb6..5abf440943 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ - (react-native) Update bugsnag-cocoa from v6.25.0 to [v6.25.2](https://github.com/bugsnag/bugsnag-cocoa/blob/master/CHANGELOG.md#6252-2023-01-18) - After trimming, attempt to send all event and session payloads, even if believed oversize [#1823](https://github.com/bugsnag/bugsnag-js/pull/1823) - (react-native) Update bugsnag-android from v5.28.1 to [v5.28.3](https://github.com/bugsnag/bugsnag-android/blob/master/CHANGELOG.md#5283-2022-11-16) +- (delivery-fetch) Create fetch based delivery package [#1894](https://github.com/bugsnag/bugsnag-js/pull/1894) +- (web-worker) Create web-worker notifier package [#1896](https://github.com/bugsnag/bugsnag-js/pull/1896) +- (plugin-browser-device) Refactor parameters for improved guarding [#1896](https://github.com/bugsnag/bugsnag-js/pull/1896) ### Fixed diff --git a/bin/cdn-upload b/bin/cdn-upload new file mode 100755 index 0000000000..8dc29270b2 --- /dev/null +++ b/bin/cdn-upload @@ -0,0 +1,91 @@ +#!/usr/bin/env node +const fs = require('fs') +const path = require('path') +const semver = require('semver') +const S3 = require('aws-sdk/clients/s3') +const Cloudfront = require('aws-sdk/clients/cloudfront') + +// INPUT PARAMETERS +const packageDir = process.cwd() +const packageJson = require(packageDir + "/package.json") +const packageName = packageJson.name +const packageVersion = packageJson.version +const bucketName = process.env.BUCKET_NAME || 'bugsnagcdn' +const distributionId = process.env.DISTRIBUTION_ID || 'E205JDPNKONLN7' +const callerReference = `${packageName}@${packageVersion}` +const files = process.argv.slice(2) + +const s3Client = new S3() +const cloudFrontClient = new Cloudfront() + +const upload = async (localPath, remotePath) => { + const relativePath = path.relative('..', localPath) + console.log(`uploading ${relativePath} -> ${remotePath}`) + + const fileStream = await fs.createReadStream(localPath) + const response = await s3Client.putObject({ + Bucket: bucketName, + Key: remotePath, + Body: fileStream, + CacheControl: 'public, max-age=315360000', + ContentType: 'application/javascript' + }).promise() + + return response +} + +const invalidate = async (paths) => { + console.log(`invalidating CloudFront cache for the following objects:\n${paths.join('\n')}`) + const response = await cloudFrontClient.createInvalidation({ + DistributionId: distributionId, + InvalidationBatch: { + CallerReference: callerReference, + Paths: { + Quantity: paths.length, + Items: paths + } + } + }).promise() + + return response +} + +const run = async () => { + // track the uploaded paths so the cache can be invalidated afterwards + const uploaded = [] + const track = filepath => { + // invalidation paths must start with / + uploaded.push(`/${filepath}`) + return filepath + } + + // always upload canonical versions + for (const file of files) { + const localPath = `${packageDir}/${file}` + const uploadPath = `v${packageVersion}/${path.basename(file)}` + await upload(localPath, track(uploadPath)) + } + + const isUnstable = semver.prerelease(packageVersion) !== null + if (!isUnstable) { + // if this is a release (as opposed to a prerelease), update the major/minor aliases + const major = `v${semver.major(packageVersion)}` + for (const file of files) { + const localPath = `${packageDir}/${file}` + const uploadPath = `${major}/${path.basename(file)}` + await upload(localPath, track(uploadPath)) + } + + const minor = `${major}.${semver.minor(packageVersion)}` + for (const file of files) { + const localPath = `${packageDir}/${file}` + const uploadPath = `${minor}/${path.basename(file)}` + await upload(localPath, track(uploadPath)) + } + } + + // invalidate caches for all of the uploaded files + await invalidate(uploaded) +} + +run() diff --git a/bin/local-test-util b/bin/local-test-util index 41cacb7434..fd4573c730 100755 --- a/bin/local-test-util +++ b/bin/local-test-util @@ -126,7 +126,7 @@ async function buildNotifiers (notifier) { async function packNotifiers (notifier) { const notifiers = notifier ? [ notifier ] - : [ 'js', 'browser', 'node', 'plugin-angular', 'plugin-react', 'plugin-vue' ] + : [ 'js', 'browser', 'node', 'web-worker', 'plugin-angular', 'plugin-react', 'plugin-vue' ] for (const n of notifiers) { await ex(`npm`, [ `pack`, `--verbose`, `packages/${n}/` ]) } @@ -134,7 +134,7 @@ async function packNotifiers (notifier) { async function installNotifiers (notifier) { trace('install notifiers') - if (notifier && ![ 'browser', 'plugin-vue', 'plugin-react' ].includes(notifier)) return + if (notifier && ![ 'browser', 'plugin-vue', 'plugin-react', 'web-worker' ].includes(notifier)) return await ex(`npm`, [ `install`, `--no-package-lock`, @@ -145,6 +145,7 @@ async function installNotifiers (notifier) { ] : [ `../../../../bugsnag-browser-${require('../packages/browser/package.json').version}.tgz`, + `../../../../bugsnag-web-worker-${require('../packages/web-worker/package.json').version}.tgz`, `../../../../bugsnag-plugin-react-${require('../packages/plugin-react/package.json').version}.tgz`, `../../../../bugsnag-plugin-vue-${require('../packages/plugin-vue/package.json').version}.tgz` ] @@ -155,7 +156,7 @@ async function installNotifiers (notifier) { async function installNgNotifier (notifier) { trace('install ng notifier') - if (notifier && ![ 'browser', 'node', 'js', 'plugin-angular' ].includes(notifier)) return + if (notifier && ![ 'browser', 'node', 'js', 'plugin-angular', 'web-worker' ].includes(notifier)) return await ex(`npm`, [ `install`, `--no-package-lock`, @@ -163,6 +164,7 @@ async function installNgNotifier (notifier) { `../../../../../../bugsnag-browser-${require('../packages/browser/package.json').version}.tgz`, `../../../../../../bugsnag-js-${require('../packages/js/package.json').version}.tgz`, `../../../../../../bugsnag-node-${require('../packages/node/package.json').version}.tgz`, + `../../../../../../bugsnag-web-worker-${require('../packages/web-worker/package.json').version}.tgz`, `../../../../../../bugsnag-plugin-angular-${require('../packages/plugin-angular/package.json').version}.tgz` ], { cwd: `${__dirname}/../test/browser/features/fixtures/plugin_angular/ng` diff --git a/bin/release.sh b/bin/release.sh index d59b2dd52d..9fd0ac224f 100755 --- a/bin/release.sh +++ b/bin/release.sh @@ -14,6 +14,7 @@ if [[ -z ${RELEASE_BRANCH:-} ]]; then error_missing_field "RELEASE_BRANCH"; fi if [[ -z ${VERSION:-} ]]; then error_missing_field "VERSION"; fi if [[ -z ${AWS_ACCESS_KEY_ID:-} ]]; then error_missing_field "AWS_ACCESS_KEY_ID"; fi if [[ -z ${AWS_SECRET_ACCESS_KEY:-} ]]; then error_missing_field "AWS_SECRET_ACCESS_KEY"; fi +if [[ -z ${AWS_SESSION_TOKEN:-} ]]; then error_missing_field "AWS_SESSION_TOKEN"; fi git clone --single-branch --recursive \ --branch "$RELEASE_BRANCH" \ @@ -28,15 +29,16 @@ npm run bootstrap -- --ci npx lerna run build \ --scope @bugsnag/node \ --scope @bugsnag/browser - + npx lerna run build \ --ignore @bugsnag/node\ --ignore @bugsnag/browser \ --ignore @bugsnag/plugin-electron-app \ --ignore @bugsnag/plugin-electron-client-state-persistence -# check if the browser package changed – if it didn't we don't need to upload to the CDN +# check if CDN packages changed – if they didn't we don't need to upload to the CDN BROWSER_PACKAGE_CHANGED=$(npx lerna changed --parseable | grep -c packages/js$ || test $? = 1;) +WORKER_PACKAGE_CHANGED=$(npx lerna changed --parseable | grep -c packages/web-worker$ || test $? = 1;) if [ -v RETRY_PUBLISH ]; then npx lerna publish from-package @@ -53,5 +55,9 @@ else fi if [ "$BROWSER_PACKAGE_CHANGED" -eq 1 ] || [ -v FORCE_CDN_UPLOAD ]; then - npm run cdn-upload + npx lerna run cdn-upload --stream --scope @bugsnag/browser +fi + +if [ "$WORKER_PACKAGE_CHANGED" -eq 1 ] || [ -v FORCE_CDN_UPLOAD ]; then + npx lerna run cdn-upload --stream --scope @bugsnag/web-worker fi diff --git a/packages/browser/bin/size b/bin/size similarity index 68% rename from packages/browser/bin/size rename to bin/size index 808f971cdf..9bef8d19a5 100755 --- a/packages/browser/bin/size +++ b/bin/size @@ -3,8 +3,11 @@ const { gzipSync } = require('zlib') const { readFileSync } = require('fs') +const dir = process.cwd() +const file = process.argv[2] + const getSize = () => { - const code = readFileSync(`${__dirname}/../dist/bugsnag.min.js`, 'utf8') + const code = readFileSync(`${dir}/${file}`, 'utf8') const kb = (gzipSync(code).length / 1000).toFixed(2) return kb } diff --git a/dockerfiles/Dockerfile.browser b/dockerfiles/Dockerfile.browser index c2c1aa698c..2d2d577fa0 100644 --- a/dockerfiles/Dockerfile.browser +++ b/dockerfiles/Dockerfile.browser @@ -21,6 +21,7 @@ RUN npm pack --verbose packages/node/ RUN npm pack --verbose packages/plugin-angular/ RUN npm pack --verbose packages/plugin-react/ RUN npm pack --verbose packages/plugin-vue/ +RUN npm pack --verbose packages/web-worker/ COPY test/browser/features test/browser/features @@ -28,6 +29,7 @@ WORKDIR /app/test/browser/features/fixtures RUN npm install --no-package-lock --no-save ../../../../bugsnag-browser-*.tgz RUN npm install --no-package-lock --no-save ../../../../bugsnag-plugin-react-*.tgz RUN npm install --no-package-lock --no-save ../../../../bugsnag-plugin-vue-*.tgz +RUN npm install --no-package-lock --no-save ../../../../bugsnag-web-worker-*.tgz WORKDIR plugin_angular/ng RUN npm install --no-package-lock --no-save \ ../../../../../../bugsnag-plugin-angular-*.tgz \ diff --git a/jest.config.js b/jest.config.js index 21ed7936a6..ceb8ed66bb 100644 --- a/jest.config.js +++ b/jest.config.js @@ -26,11 +26,13 @@ module.exports = { ], projects: [ project('core', ['core']), + project('web workers', ['web-worker']), project('shared plugins', ['plugin-app-duration', 'plugin-stackframe-path-normaliser']), project('browser', [ 'browser', 'delivery-x-domain-request', 'delivery-xml-http-request', + 'delivery-fetch', 'plugin-react', 'plugin-vue', 'plugin-browser-context', diff --git a/package-lock.json b/package-lock.json index a6283cab71..47238b38b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,6 +37,7 @@ "@types/uuid": "^8.3.0", "@typescript-eslint/eslint-plugin": "^2.19.2", "@typescript-eslint/parser": "^2.19.2", + "aws-sdk": "^2.1303.0", "babel-jest": "^26.3.0", "babel-preset-react-native": "^4.0.1", "babelify": "^10.0.0", @@ -72,6 +73,7 @@ "react-native": "^0.61.5", "react-test-renderer": "^16.13.1", "rimraf": "^3.0.0", + "semver": "^5.5.1", "source-map": "^0.5.7", "timekeeper": "^2.2.0", "ts-node": "^9.1.1", @@ -7849,18 +7851,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-includes/node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array-includes/node_modules/is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -8012,18 +8002,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flat/node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array.prototype.flat/node_modules/is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -8237,6 +8215,119 @@ "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=", "dev": true }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sdk": { + "version": "2.1303.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1303.0.tgz", + "integrity": "sha512-KTzMliy60ParQgmnHB3jcAZVQmyLV1ZlNK4jUDP6Hzb0SPZFkGHzzjfSb224o8pB/HfR5n4fT3hOUVWMjISwdA==", + "dev": true, + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.4.19" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/aws-sdk/node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/aws-sdk/node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "node_modules/aws-sdk/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true + }, + "node_modules/aws-sdk/node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", + "dev": true + }, + "node_modules/aws-sdk/node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/aws-sdk/node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/aws-sdk/node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/aws-sdk/node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -10016,6 +10107,19 @@ "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", "dev": true }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -14060,6 +14164,15 @@ "readable-stream": "^2.3.6" } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -14256,6 +14369,20 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -14892,6 +15019,18 @@ "node": ">=6" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -15013,12 +15152,30 @@ } }, "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-unicode": { @@ -15673,18 +15830,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/internal-slot/node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/internal-slot/node_modules/is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -15798,6 +15943,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -15966,6 +16127,21 @@ "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -16104,6 +16280,25 @@ "node": ">=0.10.0" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -20160,6 +20355,15 @@ "jetify": "bin/jetify" } }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/jpeg-js": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", @@ -24719,18 +24923,6 @@ "miller-rabin": "bin/miller-rabin" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/mime-db": { "version": "1.42.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", @@ -25750,18 +25942,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.entries/node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.entries/node_modules/is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -25864,18 +26044,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.fromentries/node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.fromentries/node_modules/is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -26003,18 +26171,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.values/node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.values/node_modules/is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -28291,18 +28447,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexp.prototype.flags/node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/regexp.prototype.flags/node_modules/is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -28971,6 +29115,18 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/send/node_modules/ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -29167,18 +29323,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/side-channel/node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/side-channel/node_modules/is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -29977,18 +30121,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.matchall/node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/string.prototype.matchall/node_modules/is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -31665,6 +31797,26 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -38193,8 +38345,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", - "dev": true, - "requires": {} + "dev": true }, "acorn-node": { "version": "1.5.2", @@ -38488,12 +38639,6 @@ "string.prototype.trimright": "^2.1.1" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, "is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -38599,12 +38744,6 @@ "string.prototype.trimright": "^2.1.1" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, "is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -38774,6 +38913,106 @@ "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=", "dev": true }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "aws-sdk": { + "version": "2.1303.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1303.0.tgz", + "integrity": "sha512-KTzMliy60ParQgmnHB3jcAZVQmyLV1ZlNK4jUDP6Hzb0SPZFkGHzzjfSb224o8pB/HfR5n4fT3hOUVWMjISwdA==", + "dev": true, + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.4.19" + }, + "dependencies": { + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "dev": true + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", + "dev": true + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "dev": true + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + } + } + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -38834,8 +39073,7 @@ "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true, - "requires": {} + "dev": true }, "babel-helper-builder-binary-assignment-operator-visitor": { "version": "6.24.1", @@ -39642,8 +39880,7 @@ "version": "10.0.0", "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", - "dev": true, - "requires": {} + "dev": true }, "babylon": { "version": "6.18.0", @@ -40356,6 +40593,16 @@ "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", "dev": true }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -42551,8 +42798,7 @@ "version": "14.1.0", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.0.tgz", "integrity": "sha512-EF6XkrrGVbvv8hL/kYa/m6vnvmUT+K82pJJc4JJVMM6+Qgqh0pnwprSxdduDLB9p/7bIxD+YV5O0wfb8lmcPbA==", - "dev": true, - "requires": {} + "dev": true }, "eslint-config-standard-with-typescript": { "version": "13.0.0", @@ -42810,8 +43056,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz", "integrity": "sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==", - "dev": true, - "requires": {} + "dev": true }, "eslint-scope": { "version": "5.0.0", @@ -43726,6 +43971,15 @@ "readable-stream": "^2.3.6" } }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -43883,6 +44137,17 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -44376,6 +44641,15 @@ } } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -44469,11 +44743,20 @@ "dev": true }, "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -45008,12 +45291,6 @@ "string.prototype.trimright": "^2.1.1" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, "is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -45093,6 +45370,16 @@ "kind-of": "^3.0.2" } }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -45215,6 +45502,15 @@ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -45320,6 +45616,19 @@ "text-extensions": "^1.0.0" } }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "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-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -47251,8 +47560,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} + "dev": true }, "jest-regex-util": { "version": "26.0.0", @@ -48426,6 +48734,12 @@ "integrity": "sha512-T7yzBSu9PR+DqjYt+I0KVO1XTb1QhAfHnXV5Nd3xpbXM6Xg4e3vP60Q4qkNU8Fh6PHC2PivPUNN3rY7G2MxcDQ==", "dev": true }, + "jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "dev": true + }, "jpeg-js": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", @@ -52204,12 +52518,6 @@ "brorand": "^1.0.1" } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, "mime-db": { "version": "1.42.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", @@ -53069,12 +53377,6 @@ "string.prototype.trimright": "^2.1.1" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, "is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -53143,12 +53445,6 @@ "string.prototype.trimright": "^2.1.1" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, "is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -53236,12 +53532,6 @@ "string.prototype.trimright": "^2.1.1" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, "is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -55081,12 +55371,6 @@ "string.prototype.trimright": "^2.1.1" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, "is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -55630,6 +55914,12 @@ } } }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -55796,12 +56086,6 @@ "string.prototype.trimright": "^2.1.1" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, "is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -56466,12 +56750,6 @@ "string.prototype.trimright": "^2.1.1" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, "is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -57817,6 +58095,20 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "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" + } + }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -57986,8 +58278,7 @@ "version": "7.3.1", "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", - "dev": true, - "requires": {} + "dev": true }, "xcode": { "version": "2.1.0", diff --git a/package.json b/package.json index 84ab1051c4..4393757504 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@types/uuid": "^8.3.0", "@typescript-eslint/eslint-plugin": "^2.19.2", "@typescript-eslint/parser": "^2.19.2", + "aws-sdk": "^2.1303.0", "babel-jest": "^26.3.0", "babel-preset-react-native": "^4.0.1", "babelify": "^10.0.0", @@ -67,6 +68,7 @@ "react-native": "^0.61.5", "react-test-renderer": "^16.13.1", "rimraf": "^3.0.0", + "semver": "^5.5.1", "source-map": "^0.5.7", "timekeeper": "^2.2.0", "ts-node": "^9.1.1", @@ -77,7 +79,6 @@ }, "scripts": { "bootstrap": "lerna bootstrap", - "cdn-upload": "lerna run cdn-upload --stream", "build": "lerna run build --scope '@bugsnag/node' --scope '@bugsnag/browser' && lerna run build --ignore '@bugsnag/node' --ignore '@bugsnag/browser'", "build:electron": "lerna run build --scope '@bugsnag/plugin-electron-ipc' --scope '@bugsnag/plugin-electron-app' --scope '@bugsnag/plugin-electron-client-state-persistence'", "test:lint": "eslint --ext .ts,.js --report-unused-disable-directives --max-warnings=0 .", diff --git a/packages/browser/bin/cdn-upload b/packages/browser/bin/cdn-upload deleted file mode 100755 index e5223067f5..0000000000 --- a/packages/browser/bin/cdn-upload +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env node -process.on('unhandledRejection', err => console.error(err)) - -const knox = require('knox') -const cf = require('cloudfront') -const version = require('../package.json').version -const { promisify } = require('util') -const { relative } = require('path') -const semver = require('semver') - -const s3Client = knox.createClient({ - key: process.env.AWS_ACCESS_KEY_ID, - secret: process.env.AWS_SECRET_ACCESS_KEY, - bucket: 'bugsnagcdn' -}) - -const cfClient = cf.createClient( - process.env.AWS_ACCESS_KEY_ID, - process.env.AWS_SECRET_ACCESS_KEY -) - -const headers = { - 'Cache-Control': 'public, max-age=315360000', - 'Access-Control-Allow-Origin': '*', - 'x-amz-acl': 'public-read' -} - -const putFile = promisify(s3Client.putFile.bind(s3Client)) - -const upload = async (localPath, remotePath) => { - const relativePath = relative('..', localPath) - console.log(`uploading ${relativePath} -> ${remotePath}`) - - const response = await putFile(localPath, remotePath, headers) - - // Knox doesn't error if the request fails, so we need to check if this was a successful upload - if (response.statusCode >= 400) { - throw new Error(`Failed to upload ${relativePath}: ${response.statusCode} ${response.statusMessage}`) - } - - return response -} - -const invalidate = (paths) => { - console.log(`invaliding CloudFront cache for the following objects:\n${paths.join('\n')}`) - return promisify(cfClient.createInvalidation.bind(cfClient))('E205JDPNKONLN7', `bugsnag-js@${version}`, paths) -} - -const run = async () => { - // track the uploaded paths so the cache can be invalidated afterwards - const uploaded = [] - const track = p => { - uploaded.push(p) - return p - } - - // always upload canonical versions - await upload(`${__dirname}/../dist/bugsnag.js`, track(`/v${version}/bugsnag.js`)) - await upload(`${__dirname}/../dist/bugsnag.js.map`, track(`/v${version}/bugsnag.js.map`)) - await upload(`${__dirname}/../dist/bugsnag.min.js`, track(`/v${version}/bugsnag.min.js`)) - await upload(`${__dirname}/../dist/bugsnag.min.js.map`, track(`/v${version}/bugsnag.min.js.map`)) - - const isUnstable = semver.prerelease(version) !== null - if (!isUnstable) { - // if this is a release (as opposed to a prerelease), update the major/minor aliases - const major = `v${semver.major(version)}` - await upload(`${__dirname}/../dist/bugsnag.js`, track(`/${major}/bugsnag.js`)) - await upload(`${__dirname}/../dist/bugsnag.js.map`, track(`/${major}/bugsnag.js.map`)) - await upload(`${__dirname}/../dist/bugsnag.min.js`, track(`/${major}/bugsnag.min.js`)) - await upload(`${__dirname}/../dist/bugsnag.min.js.map`, track(`/${major}/bugsnag.min.js.map`)) - - const minor = `v${semver.major(version)}.${semver.minor(version)}` - await upload(`${__dirname}/../dist/bugsnag.js`, track(`/${minor}/bugsnag.js`)) - await upload(`${__dirname}/../dist/bugsnag.js.map`, track(`/${minor}/bugsnag.js.map`)) - await upload(`${__dirname}/../dist/bugsnag.min.js`, track(`/${minor}/bugsnag.min.js`)) - await upload(`${__dirname}/../dist/bugsnag.min.js.map`, track(`/${minor}/bugsnag.min.js.map`)) - } - - // invalidate caches for all of the uploaded files - await invalidate(uploaded) -} - -run() diff --git a/packages/browser/package.json b/packages/browser/package.json index e981dece10..449758dc6a 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -20,12 +20,12 @@ "types" ], "scripts": { - "size": "./bin/size", + "size": "../../bin/size dist/bugsnag.min.js", "clean": "rm -fr dist && mkdir dist", "build": "npm run clean && npm run build:dist && npm run build:dist:min", "build:dist": "cross-env NODE_ENV=production bash -c '../../bin/bundle src/notifier.js --standalone=Bugsnag | ../../bin/extract-source-map dist/bugsnag.js'", "build:dist:min": "cross-env NODE_ENV=production bash -c '../../bin/bundle src/notifier.js --standalone=Bugsnag | ../../bin/minify dist/bugsnag.min.js'", - "cdn-upload": "./bin/cdn-upload" + "cdn-upload": "../../bin/cdn-upload dist/*" }, "author": "Bugsnag", "license": "MIT", @@ -47,11 +47,7 @@ "@bugsnag/plugin-simple-throttle": "^7.19.0", "@bugsnag/plugin-strip-query-string": "^7.19.0", "@bugsnag/plugin-window-onerror": "^7.19.0", - "@bugsnag/plugin-window-unhandled-rejection": "^7.19.0", - "cloudfront": "^0.4.1", - "knox": "^0.9.2", - "mime": "1.4.1", - "semver": "^5.5.1" + "@bugsnag/plugin-window-unhandled-rejection": "^7.19.0" }, "dependencies": { "@bugsnag/core": "^7.19.0" diff --git a/packages/delivery-fetch/LICENSE.txt b/packages/delivery-fetch/LICENSE.txt new file mode 100644 index 0000000000..6711cc16d6 --- /dev/null +++ b/packages/delivery-fetch/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (c) Bugsnag, https://www.bugsnag.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. \ No newline at end of file diff --git a/packages/delivery-fetch/README.md b/packages/delivery-fetch/README.md new file mode 100644 index 0000000000..06535372c5 --- /dev/null +++ b/packages/delivery-fetch/README.md @@ -0,0 +1,7 @@ +# @bugsnag/delivery-fetch + +This package contains the fetch implementation of the BugSnag notifier delivery system for JavaScript. + +## License + +This package is free software released under the MIT License. See [LICENSE.txt](./LICENSE.txt) for details. \ No newline at end of file diff --git a/packages/delivery-fetch/delivery.d.ts b/packages/delivery-fetch/delivery.d.ts new file mode 100644 index 0000000000..9d13cd84f3 --- /dev/null +++ b/packages/delivery-fetch/delivery.d.ts @@ -0,0 +1,6 @@ +import type { Client } from '@bugsnag/core' +import type { Delivery } from '@bugsnag/core/client' + +declare const delivery: (client: Client, fetch?: GlobalFetch['fetch']) => Delivery + +export default delivery diff --git a/packages/delivery-fetch/delivery.js b/packages/delivery-fetch/delivery.js new file mode 100644 index 0000000000..6cace0352e --- /dev/null +++ b/packages/delivery-fetch/delivery.js @@ -0,0 +1,44 @@ +import payload from '@bugsnag/core/lib/json-payload' + +const delivery = (client, fetch = global.fetch) => ({ + sendEvent: (event, cb = () => {}) => { + const url = client._config.endpoints.notify + + fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Bugsnag-Api-Key': event.apiKey || client._config.apiKey, + 'Bugsnag-Payload-Version': '4', + 'Bugsnag-Sent-At': (new Date()).toISOString() + }, + body: payload.event(event, client._config.redactedKeys) + }).then(() => { + cb(null) + }).catch(err => { + client._logger.error(err) + cb(err) + }) + }, + sendSession: (session, cb = () => { }) => { + const url = client._config.endpoints.sessions + + fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Bugsnag-Api-Key': client._config.apiKey, + 'Bugsnag-Payload-Version': '1', + 'Bugsnag-Sent-At': (new Date()).toISOString() + }, + body: payload.session(session, client._config.redactedKeys) + }).then(() => { + cb(null) + }).catch(err => { + client._logger.error(err) + cb(err) + }) + } +}) + +export default delivery diff --git a/packages/delivery-fetch/package-lock.json b/packages/delivery-fetch/package-lock.json new file mode 100644 index 0000000000..78266a576b --- /dev/null +++ b/packages/delivery-fetch/package-lock.json @@ -0,0 +1,131 @@ +{ + "name": "@bugsnag/delivery-fetch", + "version": "7.18.2", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@bugsnag/delivery-fetch", + "version": "7.18.2", + "license": "MIT", + "devDependencies": { + "@bugsnag/core": "^7.18.0" + }, + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/core": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.18.0.tgz", + "integrity": "sha512-j5YVnbrQbs2WUFnhXERPm68XooUrdNrbJISsiK5+mnbWJrdGkIw8+p5sROV72fiuuQlLtV3jiEJHlSErZggLBw==", + "dev": true, + "dependencies": { + "@bugsnag/cuid": "^3.0.0", + "@bugsnag/safe-json-stringify": "^6.0.0", + "error-stack-parser": "^2.0.3", + "iserror": "0.0.2", + "stack-generator": "^2.0.3" + } + }, + "node_modules/@bugsnag/cuid": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.1.tgz", + "integrity": "sha512-ZWOywEsXGWMBb9PULGGbP2S/mUDp30ZjaozrOy/pv2xyFoCFiCdk5PB2HA3muH4W/ppb9pXr3b5f7al74qZ5sg==", + "dev": true + }, + "node_modules/@bugsnag/safe-json-stringify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", + "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==", + "dev": true + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/iserror": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", + "integrity": "sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==", + "dev": true + }, + "node_modules/stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + } + }, + "dependencies": { + "@bugsnag/core": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.18.0.tgz", + "integrity": "sha512-j5YVnbrQbs2WUFnhXERPm68XooUrdNrbJISsiK5+mnbWJrdGkIw8+p5sROV72fiuuQlLtV3jiEJHlSErZggLBw==", + "dev": true, + "requires": { + "@bugsnag/cuid": "^3.0.0", + "@bugsnag/safe-json-stringify": "^6.0.0", + "error-stack-parser": "^2.0.3", + "iserror": "0.0.2", + "stack-generator": "^2.0.3" + } + }, + "@bugsnag/cuid": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.1.tgz", + "integrity": "sha512-ZWOywEsXGWMBb9PULGGbP2S/mUDp30ZjaozrOy/pv2xyFoCFiCdk5PB2HA3muH4W/ppb9pXr3b5f7al74qZ5sg==", + "dev": true + }, + "@bugsnag/safe-json-stringify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", + "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==", + "dev": true + }, + "error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "requires": { + "stackframe": "^1.3.4" + } + }, + "iserror": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", + "integrity": "sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==", + "dev": true + }, + "stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "dev": true, + "requires": { + "stackframe": "^1.3.4" + } + }, + "stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + } + } +} diff --git a/packages/delivery-fetch/package.json b/packages/delivery-fetch/package.json new file mode 100644 index 0000000000..62f13560a1 --- /dev/null +++ b/packages/delivery-fetch/package.json @@ -0,0 +1,22 @@ +{ + "name": "@bugsnag/delivery-fetch", + "author": "Bugsnag", + "version": "7.18.0", + "main": "delivery.js", + "description": "@bugsnag/js delivery mechanism using the fetch API", + "homepage": "https://www.bugsnag.com/", + "repository": { + "type": "git", + "url": "git@github.com:bugsnag/bugsnag-js.git" + }, + "publishConfig": { + "access": "public" + }, + "license": "MIT", + "devDependencies": { + "@bugsnag/core": "^7.18.0" + }, + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } +} diff --git a/packages/delivery-fetch/test/delivery.test.ts b/packages/delivery-fetch/test/delivery.test.ts new file mode 100644 index 0000000000..5fa9df030d --- /dev/null +++ b/packages/delivery-fetch/test/delivery.test.ts @@ -0,0 +1,135 @@ +import delivery from '../delivery' +import type { Client } from '@bugsnag/core' +import type { EventDeliveryPayload, SessionDeliveryPayload } from '@bugsnag/core/client' + +const globalAny: any = global + +describe('delivery:fetch', () => { + it('sends events successfully', done => { + globalAny.fetch = jest.fn(() => Promise.resolve({ + json: () => Promise.resolve() + })) + + const config = { + apiKey: 'aaaaaaaa', + endpoints: { notify: '/echo/' }, + redactedKeys: [] + } + + const payload = { sample: 'payload' } as unknown as EventDeliveryPayload + + delivery({ logger: {}, _config: config } as unknown as Client).sendEvent(payload, (err) => { + expect(err).toBeNull() + expect(globalAny.fetch).toHaveBeenCalled() + expect(globalAny.fetch).toHaveBeenCalledWith('/echo/', expect.objectContaining({ + method: 'POST', + body: expect.stringMatching(JSON.stringify(payload)), + headers: expect.objectContaining({ + 'Bugsnag-Api-Key': 'aaaaaaaa', + 'Bugsnag-Payload-Version': '4', + 'Bugsnag-Sent-At': expect.stringMatching(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/), + 'Content-Type': 'application/json' + }) + })) + done() + }) + }) + + it('returns an error for failed event delivery', done => { + globalAny.fetch = jest.fn().mockRejectedValue(new Error('failed to deliver')) + + const config = { + apiKey: 'aaaaaaaa', + endpoints: { notify: '/echo/' }, + redactedKeys: [] + } + + const payload = { sample: 'payload' } as unknown as EventDeliveryPayload + const mockError = jest.fn() + + delivery({ _logger: { error: mockError }, _config: config } as unknown as Client).sendEvent(payload, (err) => { + expect(err).not.toBeNull() + expect(err).toStrictEqual(new Error('failed to deliver')) + expect(mockError).toHaveBeenCalledWith(new Error('failed to deliver')) + done() + }) + }) + + it('sends sessions successfully', done => { + globalAny.fetch = jest.fn(() => Promise.resolve({ + json: () => Promise.resolve() + })) + + const config = { + apiKey: 'aaaaaaaa', + endpoints: { sessions: '/echo/' }, + redactedKeys: [] + } + + const payload = { sample: 'payload' } as unknown as SessionDeliveryPayload + + delivery({ logger: {}, _config: config } as unknown as Client).sendSession(payload, (err) => { + expect(err).toBeNull() + expect(globalAny.fetch).toHaveBeenCalledWith('/echo/', expect.objectContaining({ + method: 'POST', + body: expect.stringMatching(JSON.stringify(payload)), + headers: expect.objectContaining({ + 'Bugsnag-Api-Key': 'aaaaaaaa', + 'Bugsnag-Payload-Version': '1', + 'Bugsnag-Sent-At': expect.stringMatching(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/), + 'Content-Type': 'application/json' + }) + })) + done() + }) + }) + + it('returns an error for failed sessions', done => { + globalAny.fetch = jest.fn().mockRejectedValue(new Error('failed to deliver')) + + const config = { + apiKey: 'aaaaaaaa', + endpoints: { sessions: '/echo/' }, + redactedKeys: [] + } + + const payload = { sample: 'payload' } as unknown as SessionDeliveryPayload + + const mockError = jest.fn() + + delivery({ _logger: { error: mockError }, _config: config } as unknown as Client).sendSession(payload, (err) => { + expect(err).not.toBeNull() + expect(err).toStrictEqual(new Error('failed to deliver')) + expect(mockError).toHaveBeenCalledWith(new Error('failed to deliver')) + done() + }) + }) + + it('prioritises API key set on an event', done => { + globalAny.fetch = jest.fn(() => Promise.resolve({ json: Promise.resolve })) + + const config = { + apiKey: 'aaaaaaaa', + endpoints: { notify: '/echo/' }, + redactedKeys: [] + } + + const payload = { sample: 'payload', apiKey: 'bbbbbbbb' } as unknown as EventDeliveryPayload + + delivery({ _logger: {}, _config: config } as unknown as Client).sendEvent(payload, (err) => { + expect(err).toBeNull() + expect(globalAny.fetch).toHaveBeenCalled() + expect(globalAny.fetch).toHaveBeenCalledWith('/echo/', expect.objectContaining({ + method: 'POST', + body: expect.stringMatching(JSON.stringify(payload)), + headers: expect.objectContaining({ + 'Bugsnag-Api-Key': 'bbbbbbbb', + 'Bugsnag-Payload-Version': '4', + 'Bugsnag-Sent-At': expect.stringMatching(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/), + 'Content-Type': 'application/json' + }) + })) + done() + }) + }) +}) diff --git a/packages/plugin-browser-device/device.js b/packages/plugin-browser-device/device.js index 22983958eb..bd1437b970 100644 --- a/packages/plugin-browser-device/device.js +++ b/packages/plugin-browser-device/device.js @@ -1,10 +1,9 @@ -const cuid = require('@bugsnag/cuid') const assign = require('@bugsnag/core/lib/es-utils/assign') const BUGSNAG_ANONYMOUS_ID_KEY = 'bugsnag-anonymous-id' -const getDeviceId = () => { +const getDeviceId = (win) => { try { - const storage = window.localStorage + const storage = win.localStorage let id = storage.getItem(BUGSNAG_ANONYMOUS_ID_KEY) @@ -14,6 +13,7 @@ const getDeviceId = () => { return id } + const cuid = require('@bugsnag/cuid') id = cuid() storage.setItem(BUGSNAG_ANONYMOUS_ID_KEY, id) @@ -27,24 +27,24 @@ const getDeviceId = () => { /* * Automatically detects browser device details */ -module.exports = (nav = navigator, screen = window.screen) => ({ +module.exports = (nav = navigator, win = window) => ({ load: (client) => { const device = { locale: nav.browserLanguage || nav.systemLanguage || nav.userLanguage || nav.language, userAgent: nav.userAgent } - if (screen && screen.orientation && screen.orientation.type) { - device.orientation = screen.orientation.type - } else { + if (win && win.screen && win.screen.orientation && win.screen.orientation.type) { + device.orientation = win.screen.orientation.type + } else if (win && win.document) { device.orientation = - document.documentElement.clientWidth > document.documentElement.clientHeight + win.document.documentElement.clientWidth > win.document.documentElement.clientHeight ? 'landscape' : 'portrait' } if (client._config.generateAnonymousId) { - device.id = getDeviceId() + device.id = getDeviceId(win) } client.addOnSession(session => { diff --git a/packages/plugin-browser-device/test/device.test.ts b/packages/plugin-browser-device/test/device.test.ts index 8c86023d92..75be335d05 100644 --- a/packages/plugin-browser-device/test/device.test.ts +++ b/packages/plugin-browser-device/test/device.test.ts @@ -11,7 +11,7 @@ import { schema } from '@bugsnag/core/config' declare class SessionWithDevice extends Session { public device: Device } const navigator = { language: 'en-GB', userAgent: 'testing browser 1.2.3' } as unknown as Navigator -const screen = { orientation: { type: 'landscape-primary' } } as unknown as Screen +const mockWindow = { screen: { orientation: { type: 'landscape-primary' } } } as unknown as Window & typeof globalThis const noop = () => {} const id = (a: T) => a @@ -35,7 +35,7 @@ describe('plugin: device', () => { }) it('should capture the screen orientation if possible and add it to the event', () => { - const client = new Client({ apiKey: 'API_KEY_YEAH' }, undefined, [plugin(navigator, screen)]) + const client = new Client({ apiKey: 'API_KEY_YEAH' }, undefined, [plugin(navigator, mockWindow)]) const payloads: EventDeliveryPayload[] = [] expect(client._cbs.e).toHaveLength(1) @@ -79,7 +79,7 @@ describe('plugin: device', () => { }) it('should capture the screen orientation if possible and add it to the session', () => { - const client = new Client({ apiKey: 'API_KEY_YEAH' }, undefined, [plugin(navigator, screen)]) + const client = new Client({ apiKey: 'API_KEY_YEAH' }, undefined, [plugin(navigator, mockWindow)]) const payloads: SessionDeliveryPayload[] = [] client._sessionDelegate = { startSession: (client, session) => { diff --git a/packages/plugin-window-onerror/onerror.js b/packages/plugin-window-onerror/onerror.js index 4ae1c1781a..2f25a10d0d 100644 --- a/packages/plugin-window-onerror/onerror.js +++ b/packages/plugin-window-onerror/onerror.js @@ -2,7 +2,7 @@ * Automatically notifies Bugsnag when window.onerror is called */ -module.exports = (win = window) => ({ +module.exports = (win = window, component = 'window onerror') => ({ load: (client) => { if (!client._config.autoDetectErrors) return if (!client._config.enabledErrorTypes.unhandledExceptions) return @@ -22,7 +22,7 @@ module.exports = (win = window) => ({ if (error) { // if the last parameter (error) was supplied, this is a modern browser's // way of saying "this value was thrown and not caught" - event = client.Event.create(error, true, handledState, 'window onerror', 1) + event = client.Event.create(error, true, handledState, component, 1) decorateStack(event.errors[0].stacktrace, url, lineNo, charNo) } else if ( // This complex case detects "error" events that are typically synthesised @@ -43,17 +43,17 @@ module.exports = (win = window) => ({ // default to empty string (the event will fill it with a placeholder) const message = messageOrEvent.message || messageOrEvent.detail || '' - event = client.Event.create({ name, message }, true, handledState, 'window onerror', 1) + event = client.Event.create({ name, message }, true, handledState, component, 1) // provide the original thing onerror received – not our error-like object we passed to _notify event.originalError = messageOrEvent // include the raw input as metadata – it might contain more info than we extracted - event.addMetadata('window onerror', { event: messageOrEvent, extraParameters: url }) + event.addMetadata(component, { event: messageOrEvent, extraParameters: url }) } else { // Lastly, if there was no "error" parameter this event was probably from an old // browser that doesn't support that. Instead we need to generate a stacktrace. - event = client.Event.create(messageOrEvent, true, handledState, 'window onerror', 1) + event = client.Event.create(messageOrEvent, true, handledState, component, 1) decorateStack(event.errors[0].stacktrace, url, lineNo, charNo) } diff --git a/packages/plugin-window-onerror/test/onerror.test.ts b/packages/plugin-window-onerror/test/onerror.test.ts index 1e0edee5e5..1bd7eeee27 100644 --- a/packages/plugin-window-onerror/test/onerror.test.ts +++ b/packages/plugin-window-onerror/test/onerror.test.ts @@ -36,6 +36,20 @@ describe('plugin: window onerror', () => { expect(client).toBe(client) }) + it('accepts a component as the second argument', () => { + const client = new Client({ apiKey: 'API_KEY_YEAH', plugins: [plugin(window, 'test onerror')] }) + const payloads: EventDeliveryPayload[] = [] + client._setDelivery(client => ({ sendEvent: (payload) => payloads.push(payload), sendSession: () => {} })) + + const evt = { type: 'error', detail: 'something bad happened' } as unknown as Event + window.onerror(evt) + + expect(payloads.length).toBe(1) + const event = payloads[0].events[0].toJSON() + expect(event.metaData['window onerror']).toBeUndefined() + expect(event.metaData['test onerror']).toBeDefined() + }) + describe('window.onerror function', () => { it('captures uncaught errors in timer callbacks', done => { const client = new Client({ apiKey: 'API_KEY_YEAH', plugins: [plugin(window)] }) diff --git a/packages/web-worker/LICENSE.txt b/packages/web-worker/LICENSE.txt new file mode 100644 index 0000000000..ddc0631e24 --- /dev/null +++ b/packages/web-worker/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (c) Bugsnag, https://www.bugsnag.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. diff --git a/packages/web-worker/README.md b/packages/web-worker/README.md new file mode 100644 index 0000000000..f315561b76 --- /dev/null +++ b/packages/web-worker/README.md @@ -0,0 +1,42 @@ +# @bugsnag/web-worker + +This package contains the web worker / service worker implementation of the BugSnag library. + +## Features and limitations + +This early release offers basic functionality for web workers and service workers, with the intent to support Chrome extension development using manifest v3. Using this library, you will be able to: + +- notify errors from within service workers and web workers, including browser extensions +- detect and automatically notify unhandled errors from service workers and web workers, excluding Chrome browser extensions due to limitations in the Chrome Runtime API. + +## Getting tarted + +### Installation + +```bash +npm i @bugsnag/web-worker +``` + +### Usage + +```js +import Bugsnag from "@bugsnag/web-worker" + +Bugsnag.start({ + apiKey: YOUR_API_KEY +}) + +function myFunction() { + try { + // something that will throw an error + } catch (err) { + Bugsnag.notify(err) + } +} +``` + +For further information check out the [documentation](https://docs.bugsnag.com/platforms/javascript/web-worker/). + +## License + +This package is free software released under the MIT License. See [LICENSE.txt](./LICENSE.txt) for details. \ No newline at end of file diff --git a/packages/web-worker/esm.config.js b/packages/web-worker/esm.config.js new file mode 100644 index 0000000000..822cdb0c40 --- /dev/null +++ b/packages/web-worker/esm.config.js @@ -0,0 +1,34 @@ +const path = require('path') +const pkg = require('./package.json') +const { DefinePlugin } = require('webpack') + +module.exports = { + entry: './src/notifier.js', + mode: 'production', + devtool: 'source-map', + optimization: { + minimize: false + }, + experiments: { + outputModule: true + }, + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'bugsnag.web-worker.mjs', + module: true + }, + resolve: { + extensions: ['.ts', '.js'] + }, + module: { + rules: [ + { + test: /\.ts/, + loader: 'ts-loader' + } + ] + }, + plugins: [new DefinePlugin({ + __VERSION__: JSON.stringify(pkg.version) + })] +} diff --git a/packages/web-worker/package-lock.json b/packages/web-worker/package-lock.json new file mode 100644 index 0000000000..4c4b8927c3 --- /dev/null +++ b/packages/web-worker/package-lock.json @@ -0,0 +1,2636 @@ +{ + "name": "@bugsnag/web-worker", + "version": "7.18.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@bugsnag/web-worker", + "version": "7.18.0", + "license": "MIT", + "devDependencies": { + "ts-loader": "^9.4.1", + "typescript": "^4.9.3", + "webpack": "^5.75.0", + "webpack-cli": "^5.0.0" + } + }, + "../core": { + "name": "@bugsnag/core", + "version": "7.18.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@bugsnag/cuid": "^3.0.0", + "@bugsnag/safe-json-stringify": "^6.0.0", + "error-stack-parser": "^2.0.3", + "iserror": "0.0.2", + "stack-generator": "^2.0.3" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.0.0.tgz", + "integrity": "sha512-war4OU8NGjBqU3DP3bx6ciODXIh7dSXcpQq+P4K2Tqyd8L5OjZ7COx9QXx/QdCIwL2qoX09Wr4Cwf7uS4qdEng==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.0.tgz", + "integrity": "sha512-NNxDgbo4VOkNhOlTgY0Elhz3vKpOJq4/PKeKg7r8cmYM+GQA9vDofLYyup8jS6EpUvhNmR30cHTCEIyvXpskwA==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.0.tgz", + "integrity": "sha512-Rumq5mHvGXamnOh3O8yLk1sjx8dB30qF1OeR6VC00DIR6SLJ4bwwUGKC4pE7qBFoQyyh0H9sAg3fikYgAqVR0w==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001434", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", + "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.0.tgz", + "integrity": "sha512-KjTV81QKStSfwbNiwlBXfcgMcOloyuRdb62/iLFPGBcVNF4EXjhdYBhYHmbJpiBrVxZhDvltE11j+LBQUxEEJg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-loader": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", + "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", + "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "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.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.0.tgz", + "integrity": "sha512-AACDTo20yG+xn6HPW5xjbn2Be4KUzQPebWXsDMHwPPyKh9OnTOJgZN2Nc+g/FZKV3ObRTYsGvibAvc+5jAUrVA==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.0.0", + "@webpack-cli/info": "^2.0.0", + "@webpack-cli/serve": "^2.0.0", + "colorette": "^2.0.14", + "commander": "^9.4.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + }, + "dependencies": { + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/node": { + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.0.0.tgz", + "integrity": "sha512-war4OU8NGjBqU3DP3bx6ciODXIh7dSXcpQq+P4K2Tqyd8L5OjZ7COx9QXx/QdCIwL2qoX09Wr4Cwf7uS4qdEng==", + "dev": true + }, + "@webpack-cli/info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.0.tgz", + "integrity": "sha512-NNxDgbo4VOkNhOlTgY0Elhz3vKpOJq4/PKeKg7r8cmYM+GQA9vDofLYyup8jS6EpUvhNmR30cHTCEIyvXpskwA==", + "dev": true + }, + "@webpack-cli/serve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.0.tgz", + "integrity": "sha512-Rumq5mHvGXamnOh3O8yLk1sjx8dB30qF1OeR6VC00DIR6SLJ4bwwUGKC4pE7qBFoQyyh0H9sAg3fikYgAqVR0w==", + "dev": true + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "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-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001434", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", + "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "requires": { + "resolve": "^1.20.0" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "terser": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.0.tgz", + "integrity": "sha512-KjTV81QKStSfwbNiwlBXfcgMcOloyuRdb62/iLFPGBcVNF4EXjhdYBhYHmbJpiBrVxZhDvltE11j+LBQUxEEJg==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-loader": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", + "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + } + }, + "typescript": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", + "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "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.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + } + }, + "webpack-cli": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.0.tgz", + "integrity": "sha512-AACDTo20yG+xn6HPW5xjbn2Be4KUzQPebWXsDMHwPPyKh9OnTOJgZN2Nc+g/FZKV3ObRTYsGvibAvc+5jAUrVA==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.0.0", + "@webpack-cli/info": "^2.0.0", + "@webpack-cli/serve": "^2.0.0", + "colorette": "^2.0.14", + "commander": "^9.4.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } +} diff --git a/packages/web-worker/package.json b/packages/web-worker/package.json new file mode 100644 index 0000000000..e6c216b4c5 --- /dev/null +++ b/packages/web-worker/package.json @@ -0,0 +1,54 @@ +{ + "name": "@bugsnag/web-worker", + "version": "7.18.0", + "description": "BugSnag error reporter for JavaScript web workers and service workers", + "homepage": "https://www.bugsnag.com/", + "main": "dist/bugsnag.web-worker.js", + "module": "dist/bugsnag.web-worker.js", + "types": "types/notifier.ts", + "repository": { + "type": "git", + "url": "git@github.com:bugsnag/bugsnag-js.git" + }, + "publishConfig": { + "access": "public" + }, + "files": [ + "dist", + "types" + ], + "keywords": [ + "worker", + "webworker", + "web worker", + "web-worker", + "serviceworker", + "service worker", + "service-worker" + ], + "scripts": { + "clean": "rm -fr dist && mkdir dist", + "build": "npm run clean && npm run build:dist && npm run build:dist:min", + "build:dist": "webpack", + "build:dist:min": "webpack --optimization-minimize --output-filename=bugsnag.web-worker.min.js", + "build:dist:esm": "webpack --config esm.config.js", + "build:dist:esm.min": "webpack --config esm.config.js --optimization-minimize --output-filename=bugsnag.web-worker.min.mjs", + "size": "../../bin/size dist/bugsnag.web-worker.min.js", + "cdn-upload": "../../bin/cdn-upload dist/*" + }, + "author": "Bugsnag", + "license": "MIT", + "devDependencies": { + "@bugsnag/core": "^7.18.0", + "@bugsnag/delivery-fetch": "^7.18.0", + "@bugsnag/plugin-browser-device": "^7.18.0", + "@bugsnag/plugin-browser-session": "^7.18.0", + "@bugsnag/plugin-client-ip": "^7.18.0", + "@bugsnag/plugin-window-onerror": "^7.18.0", + "@bugsnag/plugin-window-unhandled-rejection": "^7.18.0", + "ts-loader": "^9.4.1", + "typescript": "^4.9.3", + "webpack": "^5.75.0", + "webpack-cli": "^5.0.0" + } +} diff --git a/packages/web-worker/src/config.js b/packages/web-worker/src/config.js new file mode 100644 index 0000000000..2ff035c1b7 --- /dev/null +++ b/packages/web-worker/src/config.js @@ -0,0 +1,34 @@ +/* eslint-env worker, serviceworker */ + +const { schema } = require('@bugsnag/core/config') +const map = require('@bugsnag/core/lib/es-utils/map') +const assign = require('@bugsnag/core/lib/es-utils/assign') + +module.exports = { + appType: { + ...schema.appType, + defaultValue: () => 'workerjs' + }, + logger: assign({}, schema.logger, { + defaultValue: () => + (typeof console !== 'undefined' && typeof console.debug === 'function') + ? getPrefixedConsole() + : undefined + }), + autoTrackSessions: { + ...schema.autoTrackSessions, + defaultValue: val => false + } +} + +const getPrefixedConsole = () => { + const logger = {} + const consoleLog = console.log + map(['debug', 'info', 'warn', 'error'], (method) => { + const consoleMethod = console[method] + logger[method] = typeof consoleMethod === 'function' + ? consoleMethod.bind(console, '[bugsnag]') + : consoleLog.bind(console, '[bugsnag]') + }) + return logger +} diff --git a/packages/web-worker/src/notifier.d.ts b/packages/web-worker/src/notifier.d.ts new file mode 100644 index 0000000000..9dc84d0477 --- /dev/null +++ b/packages/web-worker/src/notifier.d.ts @@ -0,0 +1,2 @@ +export { default } from '../types/notifier' +export * from '../types/notifier' diff --git a/packages/web-worker/src/notifier.js b/packages/web-worker/src/notifier.js new file mode 100644 index 0000000000..bf8a549f97 --- /dev/null +++ b/packages/web-worker/src/notifier.js @@ -0,0 +1,73 @@ +/* eslint-env worker, serviceworker */ + +import Client from '@bugsnag/core/client' +import { schema as coreSchema } from '@bugsnag/core/config' +import delivery from '@bugsnag/delivery-fetch' +import pluginClientIp from '@bugsnag/plugin-client-ip' +import pluginWindowOnError from '@bugsnag/plugin-window-onerror' +import pluginWindowUnhandledRejection from '@bugsnag/plugin-window-unhandled-rejection' +import config from './config' +import pluginBrowserDevice from '@bugsnag/plugin-browser-device' +import pluginBrowserSession from '@bugsnag/plugin-browser-session' +import pluginPreventDiscard from './prevent-discard' + +const name = 'Bugsnag Web Worker' +const url = 'https://github.com/bugsnag/bugsnag-js' +const version = __VERSION__ // eslint-disable-line no-undef + +// extend the base config schema with some worker-specific options +const schema = { ...coreSchema, ...config } + +export const Bugsnag = { + createClient: (opts) => { + // handle very simple use case where user supplies just the api key as a string + if (typeof opts === 'string') opts = { apiKey: opts } + if (!opts) opts = {} + + const internalPlugins = [ + pluginBrowserDevice(navigator, null), + pluginBrowserSession, + pluginClientIp, + pluginPreventDiscard, + pluginWindowOnError(self, 'worker onerror'), + pluginWindowUnhandledRejection(self) + ] + + // configure a client with user supplied options + const bugsnag = new Client(opts, schema, internalPlugins, { name, version, url }) + + bugsnag._setDelivery(delivery) + + bugsnag._logger.debug('Loaded!') + + return bugsnag._config.autoTrackSessions + ? bugsnag.startSession() + : bugsnag + }, + start: (opts) => { + if (Bugsnag._client) { + Bugsnag._client._logger.warn('Bugsnag.start() was called more than once. Ignoring.') + return Bugsnag._client + } + Bugsnag._client = Bugsnag.createClient(opts) + return Bugsnag._client + }, + isStarted: () => { + return Bugsnag._client != null + } +} + +// Add client functions to notifier +Object.getOwnPropertyNames(Client.prototype).forEach(method => { + // skip private methods + if (/^_/.test(method) || method === 'constructor') return + Bugsnag[method] = function () { + if (!Bugsnag._client) return console.log(`Bugsnag.${method}() was called before Bugsnag.start()`) + Bugsnag._client._depth += 1 + const ret = Bugsnag._client[method].apply(Bugsnag._client, arguments) + Bugsnag._client._depth -= 1 + return ret + } +}) + +export default Bugsnag diff --git a/packages/web-worker/src/prevent-discard.js b/packages/web-worker/src/prevent-discard.js new file mode 100644 index 0000000000..b8381f07d1 --- /dev/null +++ b/packages/web-worker/src/prevent-discard.js @@ -0,0 +1,16 @@ +/* eslint-env worker, serviceworker */ + +const extensionRegex = /^(chrome|moz|safari|safari-web)-extension:/ + +module.exports = { + name: 'preventDiscard', + load: client => { + client.addOnError(event => { + event.errors.forEach(({ stacktrace }) => { + stacktrace.forEach(function (frame) { + frame.file = frame.file.replace(extensionRegex, '$1_extension:') + }) + }) + }, true) + } +} diff --git a/packages/web-worker/test/notifier.test.ts b/packages/web-worker/test/notifier.test.ts new file mode 100644 index 0000000000..f0b9b2182f --- /dev/null +++ b/packages/web-worker/test/notifier.test.ts @@ -0,0 +1,231 @@ +import WorkerBugsnagStatic from '../src/notifier' + +const API_KEY = '030bab153e7c2349be364d23b5ae93b5' + +const typedGlobal: any = global + +function getBugsnag (): typeof WorkerBugsnagStatic { + const bugsnag = require('../src/notifier').default as typeof WorkerBugsnagStatic + return bugsnag +} + +function mockFetch () { + typedGlobal.fetch = jest.fn(() => Promise.resolve({ json: () => Promise.resolve() })) +} + +const testConfig = { + apiKey: API_KEY, + endpoints: { notify: '/echo/', sessions: '/echo/' }, + redactedKeys: [] +} + +beforeAll(() => { + mockFetch() + typedGlobal.__VERSION__ = '' + jest.spyOn(console, 'debug').mockImplementation(() => {}) + jest.spyOn(console, 'warn').mockImplementation(() => {}) +}) + +beforeEach(() => { + jest.resetModules() +}) + +describe('worker notifier', () => { + it('accepts plugins', () => { + const Bugsnag = getBugsnag() + Bugsnag.start({ + apiKey: API_KEY, + plugins: [{ + name: 'foobar', + load: () => 10 + }] + }) + expect(Bugsnag.getPlugin('foobar')).toBe(10) + }) + + it('notifies handled errors', (done) => { + const Bugsnag = getBugsnag() + Bugsnag.start(testConfig) + Bugsnag.notify(new Error('123'), undefined, (err, event) => { + if (err) done(err) + expect(event.originalError.message).toBe('123') + expect(typedGlobal.fetch).toHaveBeenCalledWith('/echo/', expect.objectContaining({ + method: 'POST', + headers: expect.objectContaining({ + 'Bugsnag-Api-Key': API_KEY, + 'Bugsnag-Payload-Version': '4', + 'Bugsnag-Sent-At': expect.stringMatching(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/), + 'Content-Type': 'application/json' + }) + })) + done() + }) + }) + + it('does not send if false is returned in onError', (done) => { + const Bugsnag = getBugsnag() + Bugsnag.start(testConfig) + Bugsnag.notify(new Error('123'), (event) => { + return false + }, (err, event) => { + if (err) { + done(err) + } + expect(typedGlobal.fetch).not.toHaveBeenCalled() + done() + }) + }) + + it('indicates whether or not the client is started', () => { + const Bugsnag = getBugsnag() + expect(Bugsnag.isStarted()).toBe(false) + Bugsnag.start(testConfig) + expect(Bugsnag.isStarted()).toBe(true) + }) + + describe('session management', () => { + it('successfully starts a session', (done) => { + const Bugsnag = getBugsnag() + Bugsnag.start(API_KEY) + + expect(typedGlobal.fetch).not.toHaveBeenCalled() + + Bugsnag.startSession() + + expect(typedGlobal.fetch).toHaveBeenCalledWith('https://sessions.bugsnag.com', expect.objectContaining({ + method: 'POST', + headers: expect.objectContaining({ + 'Bugsnag-Api-Key': API_KEY, + 'Bugsnag-Payload-Version': '1', + 'Bugsnag-Sent-At': expect.stringMatching(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/), + 'Content-Type': 'application/json' + }) + })) + + done() + }) + + it('automatically starts a session', (done) => { + const Bugsnag = getBugsnag() + Bugsnag.start({ apiKey: API_KEY, autoTrackSessions: true }) + + expect(typedGlobal.fetch).toHaveBeenCalledWith('https://sessions.bugsnag.com', expect.objectContaining({ + method: 'POST', + headers: expect.objectContaining({ + 'Bugsnag-Api-Key': API_KEY, + 'Bugsnag-Payload-Version': '1', + 'Bugsnag-Sent-At': expect.stringMatching(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/), + 'Content-Type': 'application/json' + }) + })) + + done() + }) + }) +}) + +describe('prevent-discard', () => { + const browsers = ['chrome', 'moz', 'safari', 'safari-web'] + + it.each(browsers)('renames stacktrace.file on %s-extension exceptions', (type) => { + const Bugsnag = getBugsnag() + Bugsnag.start(testConfig) + + const testError = new Error('123') + testError.stack = `Error: message from content\n at ${type}-extension://notifier.test.ts:11:19` + + Bugsnag.notify(testError, undefined, (err, event) => { + expect(err).toBeNull() + expect(event.errors[0].stacktrace[0].file).toStrictEqual(`${type}_extension://notifier.test.ts`) + }) + }) + + it('renames stacktrace.file with multiple exceptions', (done) => { + const Bugsnag = getBugsnag() + Bugsnag.start(testConfig) + + const err1 = new Error('123') + err1.stack = 'Error: message from content\n at chrome-extension://notifier.test.ts:19:46' + + // @ts-ignore + const err2 = new Error('456', { cause: err1 }) + // @ts-ignore + err2.cause = err1 + err2.stack = 'Error: 456\n at generateErrors (chrome-extension://notifier.test.ts:14:16)\n at chrome-extension://notifier.test.ts:19:46' + + // @ts-ignore + const err3 = new Error('789') + // @ts-ignore + err3.cause = err2 + err3.stack = 'Error: 789\n at generateErrors (chrome-extension://notifier.test.ts:12:15)\n at chrome-extension://notifier.test.ts:19:46' + + Bugsnag.notify(err3, undefined, (err, event) => { + expect(err).toBeNull() + expect(event.errors).toHaveLength(3) + expect(event.errors).toStrictEqual([ + { + errorClass: 'Error', + errorMessage: '789', + type: 'browserjs', + stacktrace: [ + { + code: undefined, + inProject: undefined, + file: 'chrome_extension://notifier.test.ts', + method: 'generateErrors', + lineNumber: 12, + columnNumber: 15 + }, + { + code: undefined, + inProject: undefined, + file: 'chrome_extension://notifier.test.ts', + method: undefined, + lineNumber: 19, + columnNumber: 46 + } + ] + }, + { + errorClass: 'Error', + errorMessage: '456', + type: 'browserjs', + stacktrace: [ + { + code: undefined, + inProject: undefined, + file: 'chrome_extension://notifier.test.ts', + method: 'generateErrors', + lineNumber: 14, + columnNumber: 16 + }, + { + code: undefined, + inProject: undefined, + file: 'chrome_extension://notifier.test.ts', + method: undefined, + lineNumber: 19, + columnNumber: 46 + } + ] + }, + { + errorClass: 'Error', + errorMessage: '123', + type: 'browserjs', + stacktrace: [ + { + code: undefined, + columnNumber: 46, + file: 'chrome_extension://notifier.test.ts', + inProject: undefined, + lineNumber: 19, + method: undefined + } + ] + } + ]) + done() + }) + }) +}) diff --git a/packages/web-worker/types/notifier.ts b/packages/web-worker/types/notifier.ts new file mode 100644 index 0000000000..d0d61870ae --- /dev/null +++ b/packages/web-worker/types/notifier.ts @@ -0,0 +1,17 @@ +import type { Client, Config, BugsnagStatic } from '@bugsnag/core' + +interface WorkerConfig extends Config { + collectUserIp?: boolean + generateAnonymousId?: boolean +} + +interface WorkerBugsnagStatic extends BugsnagStatic { + start(apiKeyOrOpts: string | WorkerConfig): Client + createClient(apiKeyOrOpts: string | WorkerConfig): Client +} + +declare const Bugsnag: WorkerBugsnagStatic + +export default Bugsnag +export * from '@bugsnag/core' +export { WorkerConfig } diff --git a/packages/web-worker/webpack.config.js b/packages/web-worker/webpack.config.js new file mode 100644 index 0000000000..4bac798ce1 --- /dev/null +++ b/packages/web-worker/webpack.config.js @@ -0,0 +1,35 @@ +const path = require('path') +const pkg = require('./package.json') +const { DefinePlugin } = require('webpack') + +module.exports = { + entry: './src/notifier.js', + mode: 'production', + devtool: 'source-map', + optimization: { + minimize: false + }, + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'bugsnag.web-worker.js', + library: { + name: 'Bugsnag', + type: 'umd', + export: 'default' + } + }, + resolve: { + extensions: ['.ts', '.js'] + }, + module: { + rules: [ + { + test: /\.ts/, + loader: 'ts-loader' + } + ] + }, + plugins: [new DefinePlugin({ + __VERSION__: JSON.stringify(pkg.version) + })] +} diff --git a/test/browser/features/fixtures/web_worker/auto_track_sessions/index.html b/test/browser/features/fixtures/web_worker/auto_track_sessions/index.html new file mode 100644 index 0000000000..bdf012d300 --- /dev/null +++ b/test/browser/features/fixtures/web_worker/auto_track_sessions/index.html @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/test/browser/features/fixtures/web_worker/auto_track_sessions/worker.js b/test/browser/features/fixtures/web_worker/auto_track_sessions/worker.js new file mode 100644 index 0000000000..ed7d77d835 --- /dev/null +++ b/test/browser/features/fixtures/web_worker/auto_track_sessions/worker.js @@ -0,0 +1,19 @@ +importScripts("/node_modules/@bugsnag/web-worker/dist/bugsnag.web-worker.min.js") + +onmessage = function (e) { + var payload = e.data.payload + + switch (e.data.type) { + case 'bugsnag-start': + Bugsnag.start({ + apiKey: payload.API_KEY, + autoTrackSessions: true, + endpoints: { + notify: payload.NOTIFY, + sessions: payload.SESSIONS + } + }) + break; + default: + } +} diff --git a/test/browser/features/fixtures/web_worker/ip_redaction/index.html b/test/browser/features/fixtures/web_worker/ip_redaction/index.html new file mode 100644 index 0000000000..ec5460e9cf --- /dev/null +++ b/test/browser/features/fixtures/web_worker/ip_redaction/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + diff --git a/test/browser/features/fixtures/web_worker/ip_redaction/worker.js b/test/browser/features/fixtures/web_worker/ip_redaction/worker.js new file mode 100644 index 0000000000..072b0f61ab --- /dev/null +++ b/test/browser/features/fixtures/web_worker/ip_redaction/worker.js @@ -0,0 +1,23 @@ +importScripts("/node_modules/@bugsnag/web-worker/dist/bugsnag.web-worker.min.js") + +onmessage = function (e) { + var payload = e.data.payload; + + switch (e.data.type) { + case 'bugsnag-start': + Bugsnag.start({ + apiKey: payload.API_KEY, + collectUserIp: false, + endpoints: { + notify: payload.NOTIFY, + sessions: payload.SESSIONS + } + }) + postMessage('bugsnag-ready') + break; + case 'bugsnag-notify': + Bugsnag.notify(new Error('I am an error')) + break; + default: + } +} diff --git a/test/browser/features/fixtures/web_worker/unhandled_promise_rejection/index.html b/test/browser/features/fixtures/web_worker/unhandled_promise_rejection/index.html new file mode 100644 index 0000000000..ec5460e9cf --- /dev/null +++ b/test/browser/features/fixtures/web_worker/unhandled_promise_rejection/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + diff --git a/test/browser/features/fixtures/web_worker/unhandled_promise_rejection/worker.js b/test/browser/features/fixtures/web_worker/unhandled_promise_rejection/worker.js new file mode 100644 index 0000000000..ae0b1c30b3 --- /dev/null +++ b/test/browser/features/fixtures/web_worker/unhandled_promise_rejection/worker.js @@ -0,0 +1,22 @@ +importScripts("/node_modules/@bugsnag/web-worker/dist/bugsnag.web-worker.min.js") + +onmessage = function (e) { + var payload = e.data.payload; + + switch (e.data.type) { + case 'bugsnag-start': + Bugsnag.start({ + apiKey: payload.API_KEY, + endpoints: { + notify: payload.NOTIFY, + sessions: payload.SESSIONS + } + }) + postMessage('bugsnag-ready') + break; + case 'bugsnag-notify': + Promise.reject(new Error('broken promises')) + break; + default: + } +} diff --git a/test/browser/features/fixtures/web_worker/worker_notify_error/index.html b/test/browser/features/fixtures/web_worker/worker_notify_error/index.html new file mode 100644 index 0000000000..ec5460e9cf --- /dev/null +++ b/test/browser/features/fixtures/web_worker/worker_notify_error/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + diff --git a/test/browser/features/fixtures/web_worker/worker_notify_error/worker.js b/test/browser/features/fixtures/web_worker/worker_notify_error/worker.js new file mode 100644 index 0000000000..dc34554583 --- /dev/null +++ b/test/browser/features/fixtures/web_worker/worker_notify_error/worker.js @@ -0,0 +1,22 @@ +importScripts("/node_modules/@bugsnag/web-worker/dist/bugsnag.web-worker.min.js") + +onmessage = function (e) { + var payload = e.data.payload; + + switch (e.data.type) { + case 'bugsnag-start': + Bugsnag.start({ + apiKey: payload.API_KEY, + endpoints: { + notify: payload.NOTIFY, + sessions: payload.SESSIONS + } + }) + postMessage('bugsnag-ready') + break; + case 'bugsnag-notify': + Bugsnag.notify(new Error('I am an error')) + break; + default: + } +} diff --git a/test/browser/features/fixtures/web_worker/worker_unhandled_error/index.html b/test/browser/features/fixtures/web_worker/worker_unhandled_error/index.html new file mode 100644 index 0000000000..e38e80bbcf --- /dev/null +++ b/test/browser/features/fixtures/web_worker/worker_unhandled_error/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + diff --git a/test/browser/features/fixtures/web_worker/worker_unhandled_error/worker.js b/test/browser/features/fixtures/web_worker/worker_unhandled_error/worker.js new file mode 100644 index 0000000000..947d8242cf --- /dev/null +++ b/test/browser/features/fixtures/web_worker/worker_unhandled_error/worker.js @@ -0,0 +1,21 @@ +importScripts("/node_modules/@bugsnag/web-worker/dist/bugsnag.web-worker.min.js") + +onmessage = function (e) { + var payload = e.data.payload; + + switch (e.data.type) { + case 'bugsnag-start': + Bugsnag.start({ + apiKey: payload.API_KEY, + endpoints: { + notify: payload.NOTIFY, + sessions: payload.SESSIONS + } + }) + postMessage('bugsnag-ready') + break; + case 'bugsnag-throw': + throw new Error('I am an error') + default: + } +} diff --git a/test/browser/features/web_worker.feature b/test/browser/features/web_worker.feature new file mode 100644 index 0000000000..b4623ceb6e --- /dev/null +++ b/test/browser/features/web_worker.feature @@ -0,0 +1,45 @@ +# browsers that do not support web workers +@skip_ie_8 @skip_ie_9 + +# browsers that currently throw errors in our test fixtures +@skip_ie_10 @skip_ie_11 @skip_chrome_43 @skip_edge_17 @skip_safari_10 @skip_iphone_7 + +Feature: worker notifier + + Scenario: notifying from within a worker + When I navigate to the test URL "/web_worker/worker_notify_error" + And I wait to receive an error + Then the error is a valid browser payload for the error reporting API + And the exception "errorClass" equals "Error" + And the exception "errorMessage" equals "I am an error" + And I should receive no sessions + + Scenario: unhandled error in worker + When I navigate to the test URL "/web_worker/worker_unhandled_error" + And I wait to receive an error + Then the error is a valid browser payload for the error reporting API + And the error payload field "events.0.exceptions.0.stacktrace" is a non-empty array + And I should receive no sessions + + Scenario: setting collectUserIp option to false + When I navigate to the test URL "/web_worker/ip_redaction" + And I wait to receive an error + Then the error is a valid browser payload for the error reporting API + And the event "request.clientIp" equals "[REDACTED]" + And the event "user.id" equals "[REDACTED]" + And I should receive no sessions + + Scenario: unhandled promise rejection + When I navigate to the test URL "/web_worker/unhandled_promise_rejection" + And I wait to receive an error + Then the error is a valid browser payload for the error reporting API + And the exception "errorClass" equals "Error" + And the exception "message" equals "broken promises" + And event 0 is unhandled + And I should receive no sessions + + Scenario: setting autoTrackSessions option to true + When I navigate to the test URL "/web_worker/auto_track_sessions" + And I wait to receive a session + Then the session is a valid browser payload for the session tracking API + \ No newline at end of file From 94f1cbc56a4c200c6dcde332391b97616b34df72 Mon Sep 17 00:00:00 2001 From: Ben Wilson Date: Tue, 31 Jan 2023 16:30:39 +0000 Subject: [PATCH 20/28] update CHANGELOG.md --- CHANGELOG.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5abf440943..ec191be8f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## 7.20.0 (2023-01-31) + +This release adds support for service workers and web workers [#1915](https://github.com/bugsnag/bugsnag-js/pull/1915) + +### Enhancements + +- (delivery-fetch) Create fetch based delivery package [#1894](https://github.com/bugsnag/bugsnag-js/pull/1894) +- (web-worker) Create web-worker notifier package [#1896](https://github.com/bugsnag/bugsnag-js/pull/1896) + +### Changes + +- (plugin-browser-device) Refactor parameters for improved guarding [#1896](https://github.com/bugsnag/bugsnag-js/pull/1896) + ## 7.19.0 (2023-01-26) ### Changed @@ -7,9 +20,6 @@ - (react-native) Update bugsnag-cocoa from v6.25.0 to [v6.25.2](https://github.com/bugsnag/bugsnag-cocoa/blob/master/CHANGELOG.md#6252-2023-01-18) - After trimming, attempt to send all event and session payloads, even if believed oversize [#1823](https://github.com/bugsnag/bugsnag-js/pull/1823) - (react-native) Update bugsnag-android from v5.28.1 to [v5.28.3](https://github.com/bugsnag/bugsnag-android/blob/master/CHANGELOG.md#5283-2022-11-16) -- (delivery-fetch) Create fetch based delivery package [#1894](https://github.com/bugsnag/bugsnag-js/pull/1894) -- (web-worker) Create web-worker notifier package [#1896](https://github.com/bugsnag/bugsnag-js/pull/1896) -- (plugin-browser-device) Refactor parameters for improved guarding [#1896](https://github.com/bugsnag/bugsnag-js/pull/1896) ### Fixed From 1a0b6e367a04f1a4a8b270df9a9af9a0252d384f Mon Sep 17 00:00:00 2001 From: Ben Wilson Date: Tue, 31 Jan 2023 17:46:34 +0000 Subject: [PATCH 21/28] v7.20.0 --- lerna.json | 2 +- packages/browser/package-lock.json | 2 +- packages/browser/package.json | 6 +++--- packages/delivery-fetch/package-lock.json | 2 +- packages/delivery-fetch/package.json | 2 +- packages/electron/package-lock.json | 2 +- packages/electron/package.json | 4 ++-- packages/js/package-lock.json | 2 +- packages/js/package.json | 4 ++-- packages/plugin-angular/package-lock.json | 2 +- packages/plugin-angular/package.json | 4 ++-- packages/plugin-browser-device/package-lock.json | 2 +- packages/plugin-browser-device/package.json | 2 +- packages/plugin-window-onerror/package-lock.json | 2 +- packages/plugin-window-onerror/package.json | 2 +- packages/web-worker/package-lock.json | 2 +- packages/web-worker/package.json | 8 ++++---- 17 files changed, 25 insertions(+), 25 deletions(-) diff --git a/lerna.json b/lerna.json index 4a29fbf3f7..59f1e22b84 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages": [ "packages/*" ], - "version": "7.19.0" + "version": "7.20.0" } diff --git a/packages/browser/package-lock.json b/packages/browser/package-lock.json index be70f3ccb0..12952718b1 100644 --- a/packages/browser/package-lock.json +++ b/packages/browser/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/browser", - "version": "7.19.0", + "version": "7.20.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/browser/package.json b/packages/browser/package.json index 449758dc6a..6a5cee6126 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/browser", - "version": "7.19.0", + "version": "7.20.0", "main": "dist/bugsnag.js", "types": "types/bugsnag.d.ts", "description": "Bugsnag error reporter for browser JavaScript", @@ -35,7 +35,7 @@ "@bugsnag/delivery-xml-http-request": "^7.19.0", "@bugsnag/plugin-app-duration": "^7.19.0", "@bugsnag/plugin-browser-context": "^7.19.0", - "@bugsnag/plugin-browser-device": "^7.19.0", + "@bugsnag/plugin-browser-device": "^7.20.0", "@bugsnag/plugin-browser-request": "^7.19.0", "@bugsnag/plugin-browser-session": "^7.19.0", "@bugsnag/plugin-client-ip": "^7.19.0", @@ -46,7 +46,7 @@ "@bugsnag/plugin-network-breadcrumbs": "^7.19.0", "@bugsnag/plugin-simple-throttle": "^7.19.0", "@bugsnag/plugin-strip-query-string": "^7.19.0", - "@bugsnag/plugin-window-onerror": "^7.19.0", + "@bugsnag/plugin-window-onerror": "^7.20.0", "@bugsnag/plugin-window-unhandled-rejection": "^7.19.0" }, "dependencies": { diff --git a/packages/delivery-fetch/package-lock.json b/packages/delivery-fetch/package-lock.json index 78266a576b..e0ce29115c 100644 --- a/packages/delivery-fetch/package-lock.json +++ b/packages/delivery-fetch/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/delivery-fetch", - "version": "7.18.2", + "version": "7.20.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/delivery-fetch/package.json b/packages/delivery-fetch/package.json index 62f13560a1..01d8806f43 100644 --- a/packages/delivery-fetch/package.json +++ b/packages/delivery-fetch/package.json @@ -1,7 +1,7 @@ { "name": "@bugsnag/delivery-fetch", "author": "Bugsnag", - "version": "7.18.0", + "version": "7.20.0", "main": "delivery.js", "description": "@bugsnag/js delivery mechanism using the fetch API", "homepage": "https://www.bugsnag.com/", diff --git a/packages/electron/package-lock.json b/packages/electron/package-lock.json index 1eaa6f0520..1a96adc411 100644 --- a/packages/electron/package-lock.json +++ b/packages/electron/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/electron", - "version": "7.19.0", + "version": "7.20.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/electron/package.json b/packages/electron/package.json index 837775d12f..1bd97e2bc0 100644 --- a/packages/electron/package.json +++ b/packages/electron/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/electron", - "version": "7.19.0", + "version": "7.20.0", "main": "src/notifier.js", "types": "types/notifier.d.ts", "description": "@bugsnag/electron notifier", @@ -44,7 +44,7 @@ "@bugsnag/plugin-node-unhandled-rejection": "^7.19.0", "@bugsnag/plugin-stackframe-path-normaliser": "^7.19.0", "@bugsnag/plugin-strip-project-root": "^7.19.0", - "@bugsnag/plugin-window-onerror": "^7.19.0", + "@bugsnag/plugin-window-onerror": "^7.20.0", "@bugsnag/plugin-window-unhandled-rejection": "^7.19.0" } } diff --git a/packages/js/package-lock.json b/packages/js/package-lock.json index 7cda98d440..e179c6cba8 100644 --- a/packages/js/package-lock.json +++ b/packages/js/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/js", - "version": "7.19.0", + "version": "7.20.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/js/package.json b/packages/js/package.json index e907fd651a..24b459da09 100644 --- a/packages/js/package.json +++ b/packages/js/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/js", - "version": "7.19.0", + "version": "7.20.0", "main": "node/notifier.js", "browser": "browser/notifier.js", "types": "types.d.ts", @@ -33,7 +33,7 @@ "author": "Bugsnag", "license": "MIT", "dependencies": { - "@bugsnag/browser": "^7.19.0", + "@bugsnag/browser": "^7.20.0", "@bugsnag/node": "^7.19.0" }, "devDependencies": { diff --git a/packages/plugin-angular/package-lock.json b/packages/plugin-angular/package-lock.json index dd8fb9b6fa..be3428315a 100644 --- a/packages/plugin-angular/package-lock.json +++ b/packages/plugin-angular/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-angular", - "version": "7.19.0", + "version": "7.20.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-angular/package.json b/packages/plugin-angular/package.json index a393177507..4150faeeea 100644 --- a/packages/plugin-angular/package.json +++ b/packages/plugin-angular/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-angular", - "version": "7.19.0", + "version": "7.20.0", "description": "Angular integration for bugsnag-js", "main": "dist/esm5/index.js", "browser": "dist/esm5/index.js", @@ -34,7 +34,7 @@ "@angular/compiler": "^7.2.15", "@angular/compiler-cli": "^7.2.15", "@angular/core": "^7.2.15", - "@bugsnag/js": "^7.19.0", + "@bugsnag/js": "^7.20.0", "rxjs": "^5.5.8", "typescript": "^3.2.4", "zone.js": "^0.8.26" diff --git a/packages/plugin-browser-device/package-lock.json b/packages/plugin-browser-device/package-lock.json index 997fa6790e..3152716baf 100644 --- a/packages/plugin-browser-device/package-lock.json +++ b/packages/plugin-browser-device/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-browser-device", - "version": "7.19.0", + "version": "7.20.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/plugin-browser-device/package.json b/packages/plugin-browser-device/package.json index 48d7996c64..295adc67c4 100644 --- a/packages/plugin-browser-device/package.json +++ b/packages/plugin-browser-device/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-browser-device", - "version": "7.19.0", + "version": "7.20.0", "main": "device.js", "description": "@bugsnag/js plugin to set device info in browsers", "homepage": "https://www.bugsnag.com/", diff --git a/packages/plugin-window-onerror/package-lock.json b/packages/plugin-window-onerror/package-lock.json index fd3f365030..aa62107212 100644 --- a/packages/plugin-window-onerror/package-lock.json +++ b/packages/plugin-window-onerror/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-window-onerror", - "version": "7.19.0", + "version": "7.20.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/plugin-window-onerror/package.json b/packages/plugin-window-onerror/package.json index 94f25b39c4..3472bdbfb7 100644 --- a/packages/plugin-window-onerror/package.json +++ b/packages/plugin-window-onerror/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/plugin-window-onerror", - "version": "7.19.0", + "version": "7.20.0", "main": "onerror.js", "description": "@bugsnag/js plugin to report unhandled exceptions in browsers", "homepage": "https://www.bugsnag.com/", diff --git a/packages/web-worker/package-lock.json b/packages/web-worker/package-lock.json index 4c4b8927c3..5da2f782c9 100644 --- a/packages/web-worker/package-lock.json +++ b/packages/web-worker/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/web-worker", - "version": "7.18.0", + "version": "7.20.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/web-worker/package.json b/packages/web-worker/package.json index e6c216b4c5..5caf368d80 100644 --- a/packages/web-worker/package.json +++ b/packages/web-worker/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/web-worker", - "version": "7.18.0", + "version": "7.20.0", "description": "BugSnag error reporter for JavaScript web workers and service workers", "homepage": "https://www.bugsnag.com/", "main": "dist/bugsnag.web-worker.js", @@ -40,11 +40,11 @@ "license": "MIT", "devDependencies": { "@bugsnag/core": "^7.18.0", - "@bugsnag/delivery-fetch": "^7.18.0", - "@bugsnag/plugin-browser-device": "^7.18.0", + "@bugsnag/delivery-fetch": "^7.20.0", + "@bugsnag/plugin-browser-device": "^7.20.0", "@bugsnag/plugin-browser-session": "^7.18.0", "@bugsnag/plugin-client-ip": "^7.18.0", - "@bugsnag/plugin-window-onerror": "^7.18.0", + "@bugsnag/plugin-window-onerror": "^7.20.0", "@bugsnag/plugin-window-unhandled-rejection": "^7.18.0", "ts-loader": "^9.4.1", "typescript": "^4.9.3", From 1ed26e15019d43e176820ec765d4c6e4f5d6581f Mon Sep 17 00:00:00 2001 From: Ben Wilson Date: Wed, 1 Feb 2023 09:54:20 +0000 Subject: [PATCH 22/28] pass through AWS_SESSION_TOKEN --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index c7ca1dad66..a762fa55a8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -291,6 +291,7 @@ services: RETRY_PUBLISH: FORCE_CDN_UPLOAD: AWS_ACCESS_KEY_ID: + AWS_SESSION_TOKEN: AWS_SECRET_ACCESS_KEY: VERSION: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 From dda09539fdf4230e6c3d218481ba43366afa85fc Mon Sep 17 00:00:00 2001 From: Cameron Date: Mon, 23 Jan 2023 16:47:58 +1100 Subject: [PATCH 23/28] Use resourceRegExp in IgnorePlugin Appeases webpack IgnorePlugin --- examples/js/nextjs/next.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/js/nextjs/next.config.js b/examples/js/nextjs/next.config.js index d56b89ea7d..25bf84e11d 100644 --- a/examples/js/nextjs/next.config.js +++ b/examples/js/nextjs/next.config.js @@ -17,7 +17,7 @@ module.exports = { // Avoid including '@bugsnag/plugin-aws-lambda' module in the client side bundle // See https://arunoda.me/blog/ssr-and-server-only-modules if (!isServer) { - config.plugins.push(new webpack.IgnorePlugin(/@bugsnag\/plugin-aws-lambda/)); + config.plugins.push(new webpack.IgnorePlugin({resourceRegExp: /@bugsnag\/plugin-aws-lambda/})); } // Upload source maps on production build From deb8f69a92758571c87178484391cd97cfb745d2 Mon Sep 17 00:00:00 2001 From: Benedict Wilson Date: Tue, 7 Feb 2023 14:33:01 +0000 Subject: [PATCH 24/28] [PLAT-9606] Update autoDetectErrors to false (#1919) * fix: :wrench: set autoDetectErrors default value to false * test: :white_check_mark: update e2e test to set autoDetectErrors to true * docs: :memo: update CHANGELOG.md * test: :white_check_mark: rename unhandled promise rejection test and enable autoDetectErrors * test: :white_check_mark: test autoDetectErrors when default and overridden to true * docs: :memo: update CHANGELOG.md --- CHANGELOG.md | 6 +++++ packages/web-worker/src/config.js | 6 ++++- .../default/index.html | 18 +++++++++++++++ .../default}/worker.js | 0 .../enabled}/index.html | 0 .../enabled/worker.js | 22 +++++++++++++++++++ .../index.html | 0 .../worker.js | 1 + test/browser/features/web_worker.feature | 10 ++++++--- 9 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 test/browser/features/fixtures/web_worker/worker_auto_detect_errors/default/index.html rename test/browser/features/fixtures/web_worker/{worker_unhandled_error => worker_auto_detect_errors/default}/worker.js (100%) rename test/browser/features/fixtures/web_worker/{worker_unhandled_error => worker_auto_detect_errors/enabled}/index.html (100%) create mode 100644 test/browser/features/fixtures/web_worker/worker_auto_detect_errors/enabled/worker.js rename test/browser/features/fixtures/web_worker/{unhandled_promise_rejection => worker_unhandled_promise_rejection}/index.html (100%) rename test/browser/features/fixtures/web_worker/{unhandled_promise_rejection => worker_unhandled_promise_rejection}/worker.js (93%) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec191be8f3..4053f761fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## TBD + +### Changes + +- (web-worker) Change default configuration for autoDetectErrors to false [#1919](https://github.com/bugsnag/bugsnag-js/pull/1919) + ## 7.20.0 (2023-01-31) This release adds support for service workers and web workers [#1915](https://github.com/bugsnag/bugsnag-js/pull/1915) diff --git a/packages/web-worker/src/config.js b/packages/web-worker/src/config.js index 2ff035c1b7..e27ca52f3b 100644 --- a/packages/web-worker/src/config.js +++ b/packages/web-worker/src/config.js @@ -17,7 +17,11 @@ module.exports = { }), autoTrackSessions: { ...schema.autoTrackSessions, - defaultValue: val => false + defaultValue: () => false + }, + autoDetectErrors: { + ...schema.autoTrackSessions, + defaultValue: () => false } } diff --git a/test/browser/features/fixtures/web_worker/worker_auto_detect_errors/default/index.html b/test/browser/features/fixtures/web_worker/worker_auto_detect_errors/default/index.html new file mode 100644 index 0000000000..9ee883a571 --- /dev/null +++ b/test/browser/features/fixtures/web_worker/worker_auto_detect_errors/default/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + diff --git a/test/browser/features/fixtures/web_worker/worker_unhandled_error/worker.js b/test/browser/features/fixtures/web_worker/worker_auto_detect_errors/default/worker.js similarity index 100% rename from test/browser/features/fixtures/web_worker/worker_unhandled_error/worker.js rename to test/browser/features/fixtures/web_worker/worker_auto_detect_errors/default/worker.js diff --git a/test/browser/features/fixtures/web_worker/worker_unhandled_error/index.html b/test/browser/features/fixtures/web_worker/worker_auto_detect_errors/enabled/index.html similarity index 100% rename from test/browser/features/fixtures/web_worker/worker_unhandled_error/index.html rename to test/browser/features/fixtures/web_worker/worker_auto_detect_errors/enabled/index.html diff --git a/test/browser/features/fixtures/web_worker/worker_auto_detect_errors/enabled/worker.js b/test/browser/features/fixtures/web_worker/worker_auto_detect_errors/enabled/worker.js new file mode 100644 index 0000000000..5ea8895388 --- /dev/null +++ b/test/browser/features/fixtures/web_worker/worker_auto_detect_errors/enabled/worker.js @@ -0,0 +1,22 @@ +importScripts("/node_modules/@bugsnag/web-worker/dist/bugsnag.web-worker.min.js") + +onmessage = function (e) { + var payload = e.data.payload; + + switch (e.data.type) { + case 'bugsnag-start': + Bugsnag.start({ + apiKey: payload.API_KEY, + autoDetectErrors: true, + endpoints: { + notify: payload.NOTIFY, + sessions: payload.SESSIONS + } + }) + postMessage('bugsnag-ready') + break; + case 'bugsnag-throw': + throw new Error('I am an error') + default: + } +} diff --git a/test/browser/features/fixtures/web_worker/unhandled_promise_rejection/index.html b/test/browser/features/fixtures/web_worker/worker_unhandled_promise_rejection/index.html similarity index 100% rename from test/browser/features/fixtures/web_worker/unhandled_promise_rejection/index.html rename to test/browser/features/fixtures/web_worker/worker_unhandled_promise_rejection/index.html diff --git a/test/browser/features/fixtures/web_worker/unhandled_promise_rejection/worker.js b/test/browser/features/fixtures/web_worker/worker_unhandled_promise_rejection/worker.js similarity index 93% rename from test/browser/features/fixtures/web_worker/unhandled_promise_rejection/worker.js rename to test/browser/features/fixtures/web_worker/worker_unhandled_promise_rejection/worker.js index ae0b1c30b3..aa950d19b3 100644 --- a/test/browser/features/fixtures/web_worker/unhandled_promise_rejection/worker.js +++ b/test/browser/features/fixtures/web_worker/worker_unhandled_promise_rejection/worker.js @@ -7,6 +7,7 @@ onmessage = function (e) { case 'bugsnag-start': Bugsnag.start({ apiKey: payload.API_KEY, + autoDetectErrors: true, endpoints: { notify: payload.NOTIFY, sessions: payload.SESSIONS diff --git a/test/browser/features/web_worker.feature b/test/browser/features/web_worker.feature index b4623ceb6e..17b72f8e6b 100644 --- a/test/browser/features/web_worker.feature +++ b/test/browser/features/web_worker.feature @@ -14,8 +14,12 @@ Feature: worker notifier And the exception "errorMessage" equals "I am an error" And I should receive no sessions - Scenario: unhandled error in worker - When I navigate to the test URL "/web_worker/worker_unhandled_error" + Scenario: config.autoDetectErrors defaults to false + Given I navigate to the test URL "/web_worker/worker_auto_detect_errors/default" + Then I should receive no errors + + Scenario: setting config.autoDetectErrors option to true + Given I navigate to the test URL "/web_worker/worker_auto_detect_errors/enabled" And I wait to receive an error Then the error is a valid browser payload for the error reporting API And the error payload field "events.0.exceptions.0.stacktrace" is a non-empty array @@ -30,7 +34,7 @@ Feature: worker notifier And I should receive no sessions Scenario: unhandled promise rejection - When I navigate to the test URL "/web_worker/unhandled_promise_rejection" + When I navigate to the test URL "/web_worker/worker_unhandled_promise_rejection" And I wait to receive an error Then the error is a valid browser payload for the error reporting API And the exception "errorClass" equals "Error" From fae81e29f9245c6e93c3c806922f8e5b4a35b19d Mon Sep 17 00:00:00 2001 From: Ben Wilson Date: Tue, 7 Feb 2023 16:37:26 +0000 Subject: [PATCH 25/28] docs: :memo: update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4053f761fe..1b7db1403c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## TBD +## 7.20.1 (2023-02-08) ### Changes From 9e02b9bf33e463579de4db24d583da60b72a2d7c Mon Sep 17 00:00:00 2001 From: Ben Wilson Date: Wed, 8 Feb 2023 10:54:13 +0000 Subject: [PATCH 26/28] v7.20.1 --- lerna.json | 2 +- packages/web-worker/package-lock.json | 2 +- packages/web-worker/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lerna.json b/lerna.json index 59f1e22b84..955c6ff2c1 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages": [ "packages/*" ], - "version": "7.20.0" + "version": "7.20.1" } diff --git a/packages/web-worker/package-lock.json b/packages/web-worker/package-lock.json index 5da2f782c9..f9bc47d495 100644 --- a/packages/web-worker/package-lock.json +++ b/packages/web-worker/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/web-worker", - "version": "7.20.0", + "version": "7.20.1", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/web-worker/package.json b/packages/web-worker/package.json index 5caf368d80..0a7bb910ad 100644 --- a/packages/web-worker/package.json +++ b/packages/web-worker/package.json @@ -1,6 +1,6 @@ { "name": "@bugsnag/web-worker", - "version": "7.20.0", + "version": "7.20.1", "description": "BugSnag error reporter for JavaScript web workers and service workers", "homepage": "https://www.bugsnag.com/", "main": "dist/bugsnag.web-worker.js", From 4f616a7325ccb83582c883ea72e0aa5bf9dbcc2b Mon Sep 17 00:00:00 2001 From: Jason Date: Thu, 9 Feb 2023 08:37:57 +0000 Subject: [PATCH 27/28] dup: bump bugsnag-android dependency to v5.28.4 --- CHANGELOG.md | 6 ++++++ packages/react-native/android/build.gradle | 4 ++-- packages/react-native/prepare-android-vendor.config | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b7db1403c..61d8f7d9a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## TBD + +### Changes + +- (react-native) Update bugsnag-android from v5.28.3 to [v5.28.4](https://github.com/bugsnag/bugsnag-android/blob/master/CHANGELOG.md#5284-2023-02-08) + ## 7.20.1 (2023-02-08) ### Changes diff --git a/packages/react-native/android/build.gradle b/packages/react-native/android/build.gradle index 848203916f..c56bf4167f 100644 --- a/packages/react-native/android/build.gradle +++ b/packages/react-native/android/build.gradle @@ -40,8 +40,8 @@ android { } dependencies { - api "com.bugsnag:bugsnag-android:5.28.3" - api "com.bugsnag:bugsnag-plugin-react-native:5.28.3" + api "com.bugsnag:bugsnag-android:5.28.4" + api "com.bugsnag:bugsnag-plugin-react-native:5.28.4" implementation 'com.facebook.react:react-native:+' testImplementation "junit:junit:4.12" diff --git a/packages/react-native/prepare-android-vendor.config b/packages/react-native/prepare-android-vendor.config index ee8685c0f2..b787123eaa 100644 --- a/packages/react-native/prepare-android-vendor.config +++ b/packages/react-native/prepare-android-vendor.config @@ -1,2 +1,2 @@ version -5.28.3 +5.28.4 From 218ec456cb24daf9170627ad07894af4389c4f04 Mon Sep 17 00:00:00 2001 From: Milo Clack Date: Fri, 10 Feb 2023 10:25:07 +0000 Subject: [PATCH 28/28] Web Worker Example App (#1901) Co-authored-by: Benedict Wilson Co-authored-by: Gareth Thackeray Co-authored-by: Milo Clack Co-authored-by: Tom Longridge --- examples/js/web-worker/.gitignore | 1 + examples/js/web-worker/.node-version | 1 + examples/js/web-worker/README.md | 33 +++++++++ examples/js/web-worker/bugsnag.png | Bin 0 -> 3284 bytes examples/js/web-worker/index.css | 67 ++++++++++++++++++ examples/js/web-worker/index.html | 45 ++++++++++++ examples/js/web-worker/package.json | 10 +++ .../web-worker/service-worker-registration.js | 41 +++++++++++ examples/js/web-worker/service-worker.js | 21 ++++++ .../js/web-worker/worker-no-propagation.js | 21 ++++++ examples/js/web-worker/worker-propagation.js | 21 ++++++ examples/js/web-worker/worker-registration.js | 33 +++++++++ 12 files changed, 294 insertions(+) create mode 100644 examples/js/web-worker/.gitignore create mode 100644 examples/js/web-worker/.node-version create mode 100644 examples/js/web-worker/README.md create mode 100644 examples/js/web-worker/bugsnag.png create mode 100644 examples/js/web-worker/index.css create mode 100644 examples/js/web-worker/index.html create mode 100644 examples/js/web-worker/package.json create mode 100644 examples/js/web-worker/service-worker-registration.js create mode 100644 examples/js/web-worker/service-worker.js create mode 100644 examples/js/web-worker/worker-no-propagation.js create mode 100644 examples/js/web-worker/worker-propagation.js create mode 100644 examples/js/web-worker/worker-registration.js diff --git a/examples/js/web-worker/.gitignore b/examples/js/web-worker/.gitignore new file mode 100644 index 0000000000..b512c09d47 --- /dev/null +++ b/examples/js/web-worker/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/examples/js/web-worker/.node-version b/examples/js/web-worker/.node-version new file mode 100644 index 0000000000..da2d3988d7 --- /dev/null +++ b/examples/js/web-worker/.node-version @@ -0,0 +1 @@ +14 \ No newline at end of file diff --git a/examples/js/web-worker/README.md b/examples/js/web-worker/README.md new file mode 100644 index 0000000000..8b2d8b5811 --- /dev/null +++ b/examples/js/web-worker/README.md @@ -0,0 +1,33 @@ +# Web-Worker + +This is an example project showing how to use `@bugsnag/web-worker` with a web worker or service worker. + +BugSnag can be configured to run in different ways inside a worker depending on whether it's a web or service worker and also its relationship with the “host” web app that spawns it. For full details on this, please see our [online docs](https://docs.bugsnag.com/platforms/javascript/web-workers/#reporting-unhandled-errors). + +The project contains a single page which spawns 2 web workers and 1 service worker. Each worker has its own instance of `@bugsnag/web-worker`, and the web page itself is using an instance of `@bugsnag/js`. + +The BugSnag instance created by [`worker-propagation.js`](worker-propagation.js) has both `autoDetectErrors` and `autoTrackSessions` set to `false`, leaving the web app responsible for reporting. In [`worker-no-propagation.js`](worker-no-propagation.js) BugSnag has `autoDetectErrors` and `autoTrackSessions` set to `true`, while utilizing `preventDefault` in the [parent script](worker-registration.js) to stop any error propagation. This ensures that this worker will only be reported by itself. + +Unhandled errors in service workers will never propagate to the web app, so BugSnag [`service-worker.js`](service-worker.js) is also set up to detect errors. + +## Usage + +Clone the repo and `cd` into the directory of this example: + +``` +git clone git@github.com:bugsnag/bugsnag-js.git --recursive +cd bugsnag-js/examples/js/web-worker +``` + +Firstly, replace `YOUR_API_KEY` with your own in [`index.html`](index.html), [`worker-propagation.js`](worker-propagation.js), [`worker-no-propagation.js`](worker-no-propagation.js) and [`service-worker.js`](service-worker.js). + +### Running the Example + +Ensure you have a version of Node.js >=14 on your machine. + +``` +npm install +npm start +``` + +Once started, it will serve the app at http://localhost:8066 with handled and unhandled error buttons for each worker. diff --git a/examples/js/web-worker/bugsnag.png b/examples/js/web-worker/bugsnag.png new file mode 100644 index 0000000000000000000000000000000000000000..f46b6314707cab77801daf240d467b3b51c0c2fa GIT binary patch literal 3284 zcmV;_3@h`AP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91V4wp41ONa40RR91U;qFB0I4%yP5=N5K1oDDRCodHU3pNH$rYDlm|+GO zkVCl-@j&Dh4^&uIf)RjX2_lC30LYBbSR%n}d0 z+2|^QsGxu%iWeXt_cg!_Fbw3UUu^p885o%P24VfIuk^jwulsxbqxC>QBqBgOIP@72Abm`D5)mLC9Qw=<0o2{CdvO0! zXNOwff?+OU;~-0zTUwHH<cCBy6*m0tmAy`}(20+~eKdU5v%mRYk2Wb+0u*g#~F>ukOQm zVW1g_tiU6vvhrT~H-D?CelQZTFle)20O@qv3u(KG?q4+c8a-i;o@AH`1Y71iI$HZe zM<#O`7d&T}0$|K6!A6k57Xg~6sVgF)-mWOS{rFLaL7ibPv=l%xnd5V4BHxzS*$;CF z`Zv!~0L_SfKRoiSzTVw4VqDOWooZNF^##^2mkZ{khj~9uHcte|2z0Lspb_JQh6o@l z(FYkBsUx;{h(^$e#b?Ntc|JltqeLIXM`Y9}F%Du8`IhjON;OP?r>XH-+PNL5XeU+3 z?Varv&h|2;!ok(cJ5;IkG@(I3s=OkA47s4Lt`6+R8tj#m(^y}>NFTqbz@V8DiPWHu zg@i){keOkSN>z2Y;2a+8pF~703y)kXlQ~!j5vJJ@w#>J;tFCALYyY0Lndy79of@Vy zmS9I1KpX_P=5*_3%He~Xsx80yE!Y&3$&{=R#>Os-{3wQ6F)9E_NTX5)>nZCQeu6X{!pAn(3gkS&( zYZlWQa^10>6Y)e(dpG;qp?i1J=<~??h5waG9pe)|U}_1%jxZnO=-@W@J3n2u`cIAy zyeXWYd+f%wLxLc}H1cWyvNA6h^B5ES?wZfNyr9nmawF9i8(KHQ26BEbATH+TNGc)#mH}^oMinX;(V$vr^ z4t=C*uH=efK-SfN#=jw?GkP^sjOl7Wtgc&I{5b3I!4K2U?(Ar9Wi+waB`y6eJ!Ed@ zrqK1?#N+Rs((dFkIC#?B|U{j1SWvu69 z8_LVHwbeH@RuCOm_aK?na5B}?)2-1o;{p-FWung!4GmAfO5VKsdw)?ljHZhKP<~!& zM|%q=d{~qopRkc0R3;vTVh6`V_#votH{WKu?~MNN-x+EBu;KFqs{u0FnMUI=a8JYA17hCO0RgyStm{fWWGc z;D|`Duf!;jqQMeF1&|pVLRik{C;r^cJ&5$JrM33a!*s%Ognz&^BEhW0rCP$8Lktx_ z=GZuDl*CpVm+)h{jpE1GXcn}OUnDK5t9eYbCexO3(k2+BQdMVV?60maQYc(QLKiUC zseOFH$9hhxs=Uv&TwZpYd4-ds2Q8_qeKIj*E-f*Q9wLB@Zg#Y^)FvO?gnNAGMsw4% zXBBr;%~dmJt)+Vv7!*qYQmY%zD{J0RMdC&) zgRZW5#7OXYM_tVmS}2$E;zPBX2Ol&gQU%fP((=+{A|EUv7(mPjZ+|gah&6KlhX?A` zdQ!v@4hml9IUzlR7=5sIQaK~+(5Q$+BG9MFf&nC#yAb0*kief4DxJOP()zj*ngt#D zJksO+@${TL+SQL1!SB#4vuCE!sF2wb1*u){Xd*%r2*ChiTtICtZ5ns>Ji5x* zI&S>z+41XbZ0tBWqUVK4zh-oBmzYSbt! zFR|-gdP+;OPafaa&JPHfDqyigc>L(EwA$XdCOT#%k`G$5rurcr8T$A}FcXkg9uzGk zK*+pZM*EW2BWWlv?{%w?JG*!-O8h0ZGKdbo);xT0*R{-j{sGgGZDI8Rg4lt?F$rc(`^$YoP9L%2!bO0Xm%21JRo=OMnl$L_;vE<` zov>yS0s|Boy*%&MF|u3wVsq;x^U+2`^fI-kIp@Y<+H|$L>0V(P9$LuIu5N+YqQ}K5 zMxJqHH+|3=5xI;}Fo*3O?dG&X>f$4x@Ce>FESXpKG&HbVGqJP3pSWbJoS$BjMhp^& z32>lF4(y3e+0$G)sKE+b-q^V_pLKM!kuGsW@Ps*QfAEiK zGuAK}7NZ8%KOkoL%AJWzKG8ox#8=hlPJc#MnL2G1{dT&@G}^|&JD9E+GkrCE8bKEg zkmkBkUY1AnHR{HvrMEByZ23!%jjaUB4Q8dMR|ql{xE{D_oZDav(b>hv*FSn<$h^2W zK8Tw7j+1f>X^jw?wx(k#Ti~sT1lh^F1)CWUMM?)kV5;WaNTxLf_CZ|JK)Lc+A^BV$ z!rGcgN59&F(+F%H)2|1Odovg#co=#AEcQB5k8eXTMbr>L%uoCUy+o2Ca|q$57-!9b zMO&0FFZgg0+~P_8a#QikUov2h(WNCf4RDNzMeys%)8R1>Av)9E;XG6yk01!+Z>lw1@ zy+32r)Yq5L7GrlcKkoz{oKR1g81Lp0?B*7TOqJFFjZ6(YM~E0JDheJy%%qQ4IZb$+ zgt=7be(uVZR#g__;b>e4QaXD-r+cuN>2zJ% zhK5o)1>@An-}qfJbLW19T@)g*1YvQ2U^KoAPg?dV+;djOKDg?>y3x{7gQu@jT8=m% zEOP10nQQfTU1>Ez=%E0JGZgtzK)^KIN4TDKfZo{|Y&Q@(#lQLCz@67%+h_EL4j{Z3 zAsp7436m1Ad5Qsr4I>kP!ro6tjV1S0@fI zd8bZB8u)e + + + + @bugsnag/web-worker: Web Worker example + + + + + + +

    Web and service worker example

    +

    This an example of how to include @bugsnag/web-worker in a web worker and a service worker.

    +

    + This app has 2 web workers and 1 service worker. 1 web worker leaves unhandled errors to propagate to the browser context + and be reported here, while the other has propagation disabled and reports its own unhandled errors. +

    +

    + You can unregister the current service worker by pressing the 'Unregister' button. + Simply refresh the page to instantiate the new service worker. +

    +
    +
    +

    Web Worker with Propagation

    + + +
    +
    +

    Web Worker without Propagation

    + + +
    +
    +

    Service Worker

    + + + +
    +
    + + + + + + diff --git a/examples/js/web-worker/package.json b/examples/js/web-worker/package.json new file mode 100644 index 0000000000..6eb0526f96 --- /dev/null +++ b/examples/js/web-worker/package.json @@ -0,0 +1,10 @@ +{ + "name": "web-worker", + "version": "1.0.0", + "scripts": { + "start": "serve . -p 8066 -n" + }, + "devDependencies": { + "serve": "^14.1.2" + } +} \ No newline at end of file diff --git a/examples/js/web-worker/service-worker-registration.js b/examples/js/web-worker/service-worker-registration.js new file mode 100644 index 0000000000..e3abd69e48 --- /dev/null +++ b/examples/js/web-worker/service-worker-registration.js @@ -0,0 +1,41 @@ +const handledErrorServWrkr = document.querySelector('#handledErrorServWrkr') +const unhandledErrorServWrkr = document.querySelector('#unhandledErrorServWrkr') +const unregisterBtn = document.querySelector('#unregister') + +const registerWorker = () => { + if (!('serviceWorker' in navigator)) { + console.log('Service Worker not supported') + } else { + navigator.serviceWorker.register('service-worker.js') + .then((registration) => { + console.log('Service Worker registered. Scope is:', registration.scope) + + handledErrorServWrkr.addEventListener('click', () => { + navigator.serviceWorker.ready.then((registration) => { + registration.active.postMessage('Handled error in service-worker.js') + }) + }) + unhandledErrorServWrkr.addEventListener('click', () => { + navigator.serviceWorker.ready.then((registration) => { + registration.active.postMessage('Unhandled error in service-worker.js') + }) + }) + unregisterBtn.addEventListener('click', () => { + unregisterWorker() + }) + }) + } +} + +const unregisterWorker = () => { + if('serviceWorker' in navigator) { + navigator.serviceWorker.getRegistrations() + .then((registrations) => { + for(let registration of registrations) { + registration.unregister() + } + }) + } +} + +registerWorker() \ No newline at end of file diff --git a/examples/js/web-worker/service-worker.js b/examples/js/web-worker/service-worker.js new file mode 100644 index 0000000000..1a6217b7bb --- /dev/null +++ b/examples/js/web-worker/service-worker.js @@ -0,0 +1,21 @@ +importScripts('//d2wy8f7a9ursnm.cloudfront.net/v7/bugsnag.web-worker.min.js') + +Bugsnag.start({ + apiKey: 'YOUR_API_KEY', + autoDetectErrors: true, + autoTrackSessions: false + }) + +self.addEventListener('message', (message) => { + if (message.data === 'Handled error in service-worker.js') { + Bugsnag.leaveBreadcrumb('Handled error breadcrumb from service-worker.js') + console.log(message) + Bugsnag.notify(new Error(message.data)) + } + + else if (message.data === 'Unhandled error in service-worker.js') { + Bugsnag.leaveBreadcrumb('Unhandled error breadcrumb from service-worker.js') + console.log(message) + throw new Error(message.data) + } +}) \ No newline at end of file diff --git a/examples/js/web-worker/worker-no-propagation.js b/examples/js/web-worker/worker-no-propagation.js new file mode 100644 index 0000000000..21f09f8e61 --- /dev/null +++ b/examples/js/web-worker/worker-no-propagation.js @@ -0,0 +1,21 @@ +importScripts('//d2wy8f7a9ursnm.cloudfront.net/v7/bugsnag.web-worker.min.js') + +Bugsnag.start({ + apiKey: 'YOUR_API_KEY', + autoDetectErrors: true, + autoTrackSessions: true + }) + +self.onmessage = (message) => { + if(message.data === 'Handled error in worker-no-propagation.js') { + Bugsnag.leaveBreadcrumb('Handled error breadcrumb from worker-no-propagation.js') + console.log(message) + Bugsnag.notify(new Error(message.data)) + } + + else if (message.data === 'Unhandled error in worker-no-propagation.js') { + Bugsnag.leaveBreadcrumb('Unhandled error breadcrumb from worker-no-propagation.js') + console.log(message) + throw new Error(message.data) + } +} diff --git a/examples/js/web-worker/worker-propagation.js b/examples/js/web-worker/worker-propagation.js new file mode 100644 index 0000000000..ac248e31dd --- /dev/null +++ b/examples/js/web-worker/worker-propagation.js @@ -0,0 +1,21 @@ +importScripts('//d2wy8f7a9ursnm.cloudfront.net/v7/bugsnag.web-worker.min.js') + +Bugsnag.start({ + apiKey: 'YOUR_API_KEY', + autoDetectErrors: false, + autoTrackSessions: false + }) + +self.onmessage = (message) => { + if(message.data === 'Handled error in worker-propagation.js') { + Bugsnag.leaveBreadcrumb('Handled error breadcrumb from worker-propagation.js') + console.log(message) + Bugsnag.notify(new Error(message.data)) + } + + else if (message.data === 'Unhandled error in worker-propagation.js') { + Bugsnag.leaveBreadcrumb('Unhandled error breadcrumb from worker-propagation.js') + console.log(message) + throw new Error(message.data) + } +} \ No newline at end of file diff --git a/examples/js/web-worker/worker-registration.js b/examples/js/web-worker/worker-registration.js new file mode 100644 index 0000000000..a4023132fb --- /dev/null +++ b/examples/js/web-worker/worker-registration.js @@ -0,0 +1,33 @@ +const workerPropagation = new Worker('worker-propagation.js') +const workerNoPropagation = new Worker('worker-no-propagation.js') + +// Within a web worker, unhandled errors will also bubble up to +// the script that initialized the worker. Since we are also +// using BugSnag in the parent script (see `index.html`), +// we are stopping the propagation of unhandled errors +// from `worker-no-propagation.js`, because this worker is +// currently responsible for reporting its own unhandled errors: + +workerNoPropagation.onerror = (e) => { + e.preventDefault() +} + +const handledErrorWebWrkrProp = document.querySelector('#handledErrorWebWrkrProp') +const unhandledErrorWebWrkrProp = document.querySelector('#unhandledErrorWebWrkrProp') + +const handledErrorWebWrkrNoProp = document.querySelector('#handledErrorWebWrkrNoProp') +const unhandledErrorWebWrkrNoProp = document.querySelector('#unhandledErrorWebWrkrNoProp') + +handledErrorWebWrkrProp.addEventListener('click', () => { + workerPropagation.postMessage('Handled error in worker-propagation.js') +}) +unhandledErrorWebWrkrProp.addEventListener('click', () => { + workerPropagation.postMessage('Unhandled error in worker-propagation.js') +}) + +handledErrorWebWrkrNoProp.addEventListener('click', () => { + workerNoPropagation.postMessage('Handled error in worker-no-propagation.js') +}) +unhandledErrorWebWrkrNoProp.addEventListener('click', () => { + workerNoPropagation.postMessage('Unhandled error in worker-no-propagation.js') +}) \ No newline at end of file