Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
c965af2
Merge pull request #14674 from getsentry/master
github-actions[bot] Dec 12, 2024
13bb652
build: update biome to v1.5.2 (#10102)
anonrig Dec 12, 2024
938fe65
chore: Add external contributor to CHANGELOG.md (#14677)
HazAT Dec 12, 2024
d9d3b06
fix(aws-serverless): Remove v8 layer as it overwrites the current lay…
andreiborza Dec 12, 2024
0aa7d95
fix: Disable ANR and Local Variables if debugger is enabled via CLI a…
timfish Dec 12, 2024
c49b247
feat(core): Add `handled` option to `captureConsoleIntegration` (#14664)
Lms24 Dec 12, 2024
027518d
fix(nuxt): Inline nitro-utils function (#14680)
s1gr1d Dec 12, 2024
5fe6345
fix(profiling-node): Ensure profileId is added to transaction event (…
Lms24 Dec 12, 2024
63476fa
feat(browser): Attach virtual stack traces to `HttpClient` events (#1…
onurtemizkan Dec 12, 2024
5af2833
fix(profiling-node): Guard invocation of native profiling methods (#1…
Lms24 Dec 12, 2024
2cff1f7
meta(svelte): Increase size limit (#14685)
s1gr1d Dec 12, 2024
3473447
fix(react): Add React Router Descendant Routes support. (#14304)
onurtemizkan Dec 12, 2024
4871906
chore(deps): Bump express from 4.19.2 to 4.20.0 in /dev-packages/e2e-…
dependabot[bot] Dec 12, 2024
825fe89
fix(browser): Mark stack trace from `captureMessage` with `attachStac…
Lms24 Dec 12, 2024
cdaf852
fix(core): Mark stack trace from `captureMessage` with `attatchStackT…
Lms24 Dec 12, 2024
70653af
fix(core): Set `level` in server runtime `captureException` (#10587)
Zih0 Dec 12, 2024
017867d
feat(replay): Upgrade rrweb packages to 2.31.0 (#14689)
billyvg Dec 12, 2024
734b375
meta(changelog): Update changelog for 8.45.0
s1gr1d Dec 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions .craft.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -142,10 +142,12 @@ targets:
id: '@sentry-internal/eslint-config-sdk'
includeNames: /^sentry-internal-eslint-config-sdk-\d.*\.tgz$/

# AWS Lambda Layer target
# TODO(v9): Remove this target
# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDK
layerName: SentryNodeServerlessSDKv8
compatibleRuntimes:
- name: node
versions:
Expand All@@ -157,13 +159,10 @@ targets:
- nodejs20.x
license: MIT

# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.

# AWS Lambda Layer target
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDKv8
layerName: SentryNodeServerlessSDK
compatibleRuntimes:
- name: node
versions:
Expand Down
2 changes: 1 addition & 1 deletion .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ module.exports = [
path: 'packages/svelte/build/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
// Browser CDN bundles
{
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,23 @@

- "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott

## 8.45.0

- feat(core): Add `handled` option to `captureConsoleIntegration` ([#14664](https://github.com/getsentry/sentry-javascript/pull/14664))
- feat(browser): Attach virtual stack traces to `HttpClient` events ([#14515](https://github.com/getsentry/sentry-javascript/pull/14515))
- feat(replay): Upgrade rrweb packages to 2.31.0 ([#14689](https://github.com/getsentry/sentry-javascript/pull/14689))
- fix(aws-serverless): Remove v8 layer as it overwrites the current layer for docs ([#14679](https://github.com/getsentry/sentry-javascript/pull/14679))
- fix(browser): Mark stack trace from `captureMessage` with `attachStacktrace: true` as synthetic ([#14668](https://github.com/getsentry/sentry-javascript/pull/14668))
- fix(core): Mark stack trace from `captureMessage` with `attatchStackTrace: true` as synthetic ([#14670](https://github.com/getsentry/sentry-javascript/pull/14670))
- fix(core): Set `level` in server runtime `captureException` ([#10587](https://github.com/getsentry/sentry-javascript/pull/10587))
- fix(profiling-node): Guard invocation of native profiling methods ([#14676](https://github.com/getsentry/sentry-javascript/pull/14676))
- fix(nuxt): Inline nitro-utils function ([#14680](https://github.com/getsentry/sentry-javascript/pull/14680))
- fix(profiling-node): Ensure profileId is added to transaction event ([#14681](https://github.com/getsentry/sentry-javascript/pull/14681))
- fix(react): Add React Router Descendant Routes support ([#14304](https://github.com/getsentry/sentry-javascript/pull/14304))
- fix: Disable ANR and Local Variables if debugger is enabled via CLI args ([#14643](https://github.com/getsentry/sentry-javascript/pull/14643))

Work in this release was contributed by @anonrig and @Zih0. Thank you for your contributions!

## 8.44.0

### Deprecations
Expand Down
13 changes: 10 additions & 3 deletions biome.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,8 @@
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
"useIgnoreFile": true,
"defaultBranch": "develop"
},
"organizeImports": {
"enabled": true
Expand All@@ -17,13 +18,15 @@
"noUnusedVariables": "error",
"noPrecisionLoss": "error"
},
"complexity": {
"useRegexLiterals": "error"
},
"suspicious": {
"all": false,
"noControlCharactersInRegex": "error"
},
"nursery": {
"noUnusedImports": "error",
"useRegexLiterals": "error"
"noUnusedImports": "error"
},
"performance": {
"all": true,
Expand DownExpand Up@@ -92,6 +95,10 @@
"json": {
"formatter": {
"enabled": true
},
"parser": {
"allowComments": true,
"allowTrailingCommas": true
}
}
}
2 changes: 1 addition & 1 deletion dev-packages/browser-integration-tests/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,7 +42,7 @@
"dependencies": {
"@babel/preset-typescript": "^7.16.7",
"@playwright/test": "^1.44.1",
"@sentry-internal/rrweb": "2.30.0",
"@sentry-internal/rrweb": "2.31.0",
"@sentry/browser": "8.44.0",
"axios": "1.7.7",
"babel-loader": "^8.2.2",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,6 +30,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console log'],
},
message: 'console log',
}),
);
expect(logEvent?.exception).toBeUndefined();
Expand All@@ -40,6 +41,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console warn'],
},
message: 'console warn',
}),
);
expect(warnEvent?.exception).toBeUndefined();
Expand All@@ -50,6 +52,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console info'],
},
message: 'console info',
}),
);
expect(infoEvent?.exception).toBeUndefined();
Expand All@@ -60,6 +63,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console error'],
},
message: 'console error',
}),
);
expect(errorEvent?.exception).toBeUndefined();
Expand All@@ -70,6 +74,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console trace'],
},
message: 'console trace',
}),
);
expect(traceEvent?.exception).toBeUndefined();
Expand All@@ -90,6 +95,11 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
}),
);
expect(errorWithErrorEvent?.exception?.values?.[0].value).toBe('console error with error object');
expect(errorWithErrorEvent?.exception?.values?.[0].mechanism).toEqual({
// TODO (v9): Adjust to true after changing the integration's default value
handled: false,
type: 'console',
});
expect(traceWithErrorEvent).toEqual(
expect.objectContaining({
level: 'log',
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request passed in', async ({ getLocalTestUrl, page }) =
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request (without body) & options passed in', async ({ g
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
import * as Sentry from '@sentry/browser';

window.Sentry = Sentry;

Sentry.init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
attachStacktrace: true,
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
Sentry.captureMessage('foo');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
import { expect } from '@playwright/test';
import type { Event } from '@sentry/core';

import { sentryTest } from '../../../../utils/fixtures';
import { getFirstSentryEnvelopeRequest } from '../../../../utils/helpers';

sentryTest(
'captures a simple message string with stack trace if `attachStackTrace` is `true`',
async ({ getLocalTestUrl, page }) => {
const url = await getLocalTestUrl({ testDir: __dirname });

const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);

expect(eventData.message).toBe('foo');
expect(eventData.level).toBe('info');
expect(eventData.exception?.values?.[0]).toEqual({
mechanism: {
handled: true,
type: 'generic',
synthetic: true,
},
stacktrace: {
frames: expect.arrayContaining([expect.any(Object), expect.any(Object)]),
},
value: 'foo',
});
},
);
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
c965af2
Merge pull request #14674 from getsentry/master
github-actions[bot] Dec 12, 2024
13bb652
build: update biome to v1.5.2 (#10102)
anonrig Dec 12, 2024
938fe65
chore: Add external contributor to CHANGELOG.md (#14677)
HazAT Dec 12, 2024
d9d3b06
fix(aws-serverless): Remove v8 layer as it overwrites the current lay…
andreiborza Dec 12, 2024
0aa7d95
fix: Disable ANR and Local Variables if debugger is enabled via CLI a…
timfish Dec 12, 2024
c49b247
feat(core): Add `handled` option to `captureConsoleIntegration` (#14664)
Lms24 Dec 12, 2024
027518d
fix(nuxt): Inline nitro-utils function (#14680)
s1gr1d Dec 12, 2024
5fe6345
fix(profiling-node): Ensure profileId is added to transaction event (…
Lms24 Dec 12, 2024
63476fa
feat(browser): Attach virtual stack traces to `HttpClient` events (#1…
onurtemizkan Dec 12, 2024
5af2833
fix(profiling-node): Guard invocation of native profiling methods (#1…
Lms24 Dec 12, 2024
2cff1f7
meta(svelte): Increase size limit (#14685)
s1gr1d Dec 12, 2024
3473447
fix(react): Add React Router Descendant Routes support. (#14304)
onurtemizkan Dec 12, 2024
4871906
chore(deps): Bump express from 4.19.2 to 4.20.0 in /dev-packages/e2e-…
dependabot[bot] Dec 12, 2024
825fe89
fix(browser): Mark stack trace from `captureMessage` with `attachStac…
Lms24 Dec 12, 2024
cdaf852
fix(core): Mark stack trace from `captureMessage` with `attatchStackT…
Lms24 Dec 12, 2024
70653af
fix(core): Set `level` in server runtime `captureException` (#10587)
Zih0 Dec 12, 2024
017867d
feat(replay): Upgrade rrweb packages to 2.31.0 (#14689)
billyvg Dec 12, 2024
734b375
meta(changelog): Update changelog for 8.45.0
s1gr1d Dec 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions .craft.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -142,10 +142,12 @@ targets:
id: '@sentry-internal/eslint-config-sdk'
includeNames: /^sentry-internal-eslint-config-sdk-\d.*\.tgz$/

# AWS Lambda Layer target
# TODO(v9): Remove this target
# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDK
layerName: SentryNodeServerlessSDKv8
compatibleRuntimes:
- name: node
versions:
Expand All@@ -157,13 +159,10 @@ targets:
- nodejs20.x
license: MIT

# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.

# AWS Lambda Layer target
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDKv8
layerName: SentryNodeServerlessSDK
compatibleRuntimes:
- name: node
versions:
Expand Down
2 changes: 1 addition & 1 deletion .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ module.exports = [
path: 'packages/svelte/build/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
// Browser CDN bundles
{
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,23 @@

- "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott

## 8.45.0

- feat(core): Add `handled` option to `captureConsoleIntegration` ([#14664](https://github.com/getsentry/sentry-javascript/pull/14664))
- feat(browser): Attach virtual stack traces to `HttpClient` events ([#14515](https://github.com/getsentry/sentry-javascript/pull/14515))
- feat(replay): Upgrade rrweb packages to 2.31.0 ([#14689](https://github.com/getsentry/sentry-javascript/pull/14689))
- fix(aws-serverless): Remove v8 layer as it overwrites the current layer for docs ([#14679](https://github.com/getsentry/sentry-javascript/pull/14679))
- fix(browser): Mark stack trace from `captureMessage` with `attachStacktrace: true` as synthetic ([#14668](https://github.com/getsentry/sentry-javascript/pull/14668))
- fix(core): Mark stack trace from `captureMessage` with `attatchStackTrace: true` as synthetic ([#14670](https://github.com/getsentry/sentry-javascript/pull/14670))
- fix(core): Set `level` in server runtime `captureException` ([#10587](https://github.com/getsentry/sentry-javascript/pull/10587))
- fix(profiling-node): Guard invocation of native profiling methods ([#14676](https://github.com/getsentry/sentry-javascript/pull/14676))
- fix(nuxt): Inline nitro-utils function ([#14680](https://github.com/getsentry/sentry-javascript/pull/14680))
- fix(profiling-node): Ensure profileId is added to transaction event ([#14681](https://github.com/getsentry/sentry-javascript/pull/14681))
- fix(react): Add React Router Descendant Routes support ([#14304](https://github.com/getsentry/sentry-javascript/pull/14304))
- fix: Disable ANR and Local Variables if debugger is enabled via CLI args ([#14643](https://github.com/getsentry/sentry-javascript/pull/14643))

Work in this release was contributed by @anonrig and @Zih0. Thank you for your contributions!

## 8.44.0

### Deprecations
Expand Down
13 changes: 10 additions & 3 deletions biome.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,8 @@
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
"useIgnoreFile": true,
"defaultBranch": "develop"
},
"organizeImports": {
"enabled": true
Expand All@@ -17,13 +18,15 @@
"noUnusedVariables": "error",
"noPrecisionLoss": "error"
},
"complexity": {
"useRegexLiterals": "error"
},
"suspicious": {
"all": false,
"noControlCharactersInRegex": "error"
},
"nursery": {
"noUnusedImports": "error",
"useRegexLiterals": "error"
"noUnusedImports": "error"
},
"performance": {
"all": true,
Expand DownExpand Up@@ -92,6 +95,10 @@
"json": {
"formatter": {
"enabled": true
},
"parser": {
"allowComments": true,
"allowTrailingCommas": true
}
}
}
2 changes: 1 addition & 1 deletion dev-packages/browser-integration-tests/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,7 +42,7 @@
"dependencies": {
"@babel/preset-typescript": "^7.16.7",
"@playwright/test": "^1.44.1",
"@sentry-internal/rrweb": "2.30.0",
"@sentry-internal/rrweb": "2.31.0",
"@sentry/browser": "8.44.0",
"axios": "1.7.7",
"babel-loader": "^8.2.2",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,6 +30,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console log'],
},
message: 'console log',
}),
);
expect(logEvent?.exception).toBeUndefined();
Expand All@@ -40,6 +41,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console warn'],
},
message: 'console warn',
}),
);
expect(warnEvent?.exception).toBeUndefined();
Expand All@@ -50,6 +52,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console info'],
},
message: 'console info',
}),
);
expect(infoEvent?.exception).toBeUndefined();
Expand All@@ -60,6 +63,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console error'],
},
message: 'console error',
}),
);
expect(errorEvent?.exception).toBeUndefined();
Expand All@@ -70,6 +74,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console trace'],
},
message: 'console trace',
}),
);
expect(traceEvent?.exception).toBeUndefined();
Expand All@@ -90,6 +95,11 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
}),
);
expect(errorWithErrorEvent?.exception?.values?.[0].value).toBe('console error with error object');
expect(errorWithErrorEvent?.exception?.values?.[0].mechanism).toEqual({
// TODO (v9): Adjust to true after changing the integration's default value
handled: false,
type: 'console',
});
expect(traceWithErrorEvent).toEqual(
expect.objectContaining({
level: 'log',
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request passed in', async ({ getLocalTestUrl, page }) =
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request (without body) & options passed in', async ({ g
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
import * as Sentry from '@sentry/browser';

window.Sentry = Sentry;

Sentry.init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
attachStacktrace: true,
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
Sentry.captureMessage('foo');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
import { expect } from '@playwright/test';
import type { Event } from '@sentry/core';

import { sentryTest } from '../../../../utils/fixtures';
import { getFirstSentryEnvelopeRequest } from '../../../../utils/helpers';

sentryTest(
'captures a simple message string with stack trace if `attachStackTrace` is `true`',
async ({ getLocalTestUrl, page }) => {
const url = await getLocalTestUrl({ testDir: __dirname });

const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);

expect(eventData.message).toBe('foo');
expect(eventData.level).toBe('info');
expect(eventData.exception?.values?.[0]).toEqual({
mechanism: {
handled: true,
type: 'generic',
synthetic: true,
},
stacktrace: {
frames: expect.arrayContaining([expect.any(Object), expect.any(Object)]),
},
value: 'foo',
});
},
);
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
c965af2
Merge pull request #14674 from getsentry/master
github-actions[bot] Dec 12, 2024
13bb652
build: update biome to v1.5.2 (#10102)
anonrig Dec 12, 2024
938fe65
chore: Add external contributor to CHANGELOG.md (#14677)
HazAT Dec 12, 2024
d9d3b06
fix(aws-serverless): Remove v8 layer as it overwrites the current lay…
andreiborza Dec 12, 2024
0aa7d95
fix: Disable ANR and Local Variables if debugger is enabled via CLI a…
timfish Dec 12, 2024
c49b247
feat(core): Add `handled` option to `captureConsoleIntegration` (#14664)
Lms24 Dec 12, 2024
027518d
fix(nuxt): Inline nitro-utils function (#14680)
s1gr1d Dec 12, 2024
5fe6345
fix(profiling-node): Ensure profileId is added to transaction event (…
Lms24 Dec 12, 2024
63476fa
feat(browser): Attach virtual stack traces to `HttpClient` events (#1…
onurtemizkan Dec 12, 2024
5af2833
fix(profiling-node): Guard invocation of native profiling methods (#1…
Lms24 Dec 12, 2024
2cff1f7
meta(svelte): Increase size limit (#14685)
s1gr1d Dec 12, 2024
3473447
fix(react): Add React Router Descendant Routes support. (#14304)
onurtemizkan Dec 12, 2024
4871906
chore(deps): Bump express from 4.19.2 to 4.20.0 in /dev-packages/e2e-…
dependabot[bot] Dec 12, 2024
825fe89
fix(browser): Mark stack trace from `captureMessage` with `attachStac…
Lms24 Dec 12, 2024
cdaf852
fix(core): Mark stack trace from `captureMessage` with `attatchStackT…
Lms24 Dec 12, 2024
70653af
fix(core): Set `level` in server runtime `captureException` (#10587)
Zih0 Dec 12, 2024
017867d
feat(replay): Upgrade rrweb packages to 2.31.0 (#14689)
billyvg Dec 12, 2024
734b375
meta(changelog): Update changelog for 8.45.0
s1gr1d Dec 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions .craft.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -142,10 +142,12 @@ targets:
id: '@sentry-internal/eslint-config-sdk'
includeNames: /^sentry-internal-eslint-config-sdk-\d.*\.tgz$/

# AWS Lambda Layer target
# TODO(v9): Remove this target
# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDK
layerName: SentryNodeServerlessSDKv8
compatibleRuntimes:
- name: node
versions:
Expand All@@ -157,13 +159,10 @@ targets:
- nodejs20.x
license: MIT

# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.

# AWS Lambda Layer target
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDKv8
layerName: SentryNodeServerlessSDK
compatibleRuntimes:
- name: node
versions:
Expand Down
2 changes: 1 addition & 1 deletion .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ module.exports = [
path: 'packages/svelte/build/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
// Browser CDN bundles
{
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,23 @@

- "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott

## 8.45.0

- feat(core): Add `handled` option to `captureConsoleIntegration` ([#14664](https://github.com/getsentry/sentry-javascript/pull/14664))
- feat(browser): Attach virtual stack traces to `HttpClient` events ([#14515](https://github.com/getsentry/sentry-javascript/pull/14515))
- feat(replay): Upgrade rrweb packages to 2.31.0 ([#14689](https://github.com/getsentry/sentry-javascript/pull/14689))
- fix(aws-serverless): Remove v8 layer as it overwrites the current layer for docs ([#14679](https://github.com/getsentry/sentry-javascript/pull/14679))
- fix(browser): Mark stack trace from `captureMessage` with `attachStacktrace: true` as synthetic ([#14668](https://github.com/getsentry/sentry-javascript/pull/14668))
- fix(core): Mark stack trace from `captureMessage` with `attatchStackTrace: true` as synthetic ([#14670](https://github.com/getsentry/sentry-javascript/pull/14670))
- fix(core): Set `level` in server runtime `captureException` ([#10587](https://github.com/getsentry/sentry-javascript/pull/10587))
- fix(profiling-node): Guard invocation of native profiling methods ([#14676](https://github.com/getsentry/sentry-javascript/pull/14676))
- fix(nuxt): Inline nitro-utils function ([#14680](https://github.com/getsentry/sentry-javascript/pull/14680))
- fix(profiling-node): Ensure profileId is added to transaction event ([#14681](https://github.com/getsentry/sentry-javascript/pull/14681))
- fix(react): Add React Router Descendant Routes support ([#14304](https://github.com/getsentry/sentry-javascript/pull/14304))
- fix: Disable ANR and Local Variables if debugger is enabled via CLI args ([#14643](https://github.com/getsentry/sentry-javascript/pull/14643))

Work in this release was contributed by @anonrig and @Zih0. Thank you for your contributions!

## 8.44.0

### Deprecations
Expand Down
13 changes: 10 additions & 3 deletions biome.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,8 @@
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
"useIgnoreFile": true,
"defaultBranch": "develop"
},
"organizeImports": {
"enabled": true
Expand All@@ -17,13 +18,15 @@
"noUnusedVariables": "error",
"noPrecisionLoss": "error"
},
"complexity": {
"useRegexLiterals": "error"
},
"suspicious": {
"all": false,
"noControlCharactersInRegex": "error"
},
"nursery": {
"noUnusedImports": "error",
"useRegexLiterals": "error"
"noUnusedImports": "error"
},
"performance": {
"all": true,
Expand DownExpand Up@@ -92,6 +95,10 @@
"json": {
"formatter": {
"enabled": true
},
"parser": {
"allowComments": true,
"allowTrailingCommas": true
}
}
}
2 changes: 1 addition & 1 deletion dev-packages/browser-integration-tests/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,7 +42,7 @@
"dependencies": {
"@babel/preset-typescript": "^7.16.7",
"@playwright/test": "^1.44.1",
"@sentry-internal/rrweb": "2.30.0",
"@sentry-internal/rrweb": "2.31.0",
"@sentry/browser": "8.44.0",
"axios": "1.7.7",
"babel-loader": "^8.2.2",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,6 +30,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console log'],
},
message: 'console log',
}),
);
expect(logEvent?.exception).toBeUndefined();
Expand All@@ -40,6 +41,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console warn'],
},
message: 'console warn',
}),
);
expect(warnEvent?.exception).toBeUndefined();
Expand All@@ -50,6 +52,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console info'],
},
message: 'console info',
}),
);
expect(infoEvent?.exception).toBeUndefined();
Expand All@@ -60,6 +63,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console error'],
},
message: 'console error',
}),
);
expect(errorEvent?.exception).toBeUndefined();
Expand All@@ -70,6 +74,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console trace'],
},
message: 'console trace',
}),
);
expect(traceEvent?.exception).toBeUndefined();
Expand All@@ -90,6 +95,11 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
}),
);
expect(errorWithErrorEvent?.exception?.values?.[0].value).toBe('console error with error object');
expect(errorWithErrorEvent?.exception?.values?.[0].mechanism).toEqual({
// TODO (v9): Adjust to true after changing the integration's default value
handled: false,
type: 'console',
});
expect(traceWithErrorEvent).toEqual(
expect.objectContaining({
level: 'log',
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request passed in', async ({ getLocalTestUrl, page }) =
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request (without body) & options passed in', async ({ g
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
import * as Sentry from '@sentry/browser';

window.Sentry = Sentry;

Sentry.init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
attachStacktrace: true,
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
Sentry.captureMessage('foo');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
import { expect } from '@playwright/test';
import type { Event } from '@sentry/core';

import { sentryTest } from '../../../../utils/fixtures';
import { getFirstSentryEnvelopeRequest } from '../../../../utils/helpers';

sentryTest(
'captures a simple message string with stack trace if `attachStackTrace` is `true`',
async ({ getLocalTestUrl, page }) => {
const url = await getLocalTestUrl({ testDir: __dirname });

const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);

expect(eventData.message).toBe('foo');
expect(eventData.level).toBe('info');
expect(eventData.exception?.values?.[0]).toEqual({
mechanism: {
handled: true,
type: 'generic',
synthetic: true,
},
stacktrace: {
frames: expect.arrayContaining([expect.any(Object), expect.any(Object)]),
},
value: 'foo',
});
},
);
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
c965af2
Merge pull request #14674 from getsentry/master
github-actions[bot] Dec 12, 2024
13bb652
build: update biome to v1.5.2 (#10102)
anonrig Dec 12, 2024
938fe65
chore: Add external contributor to CHANGELOG.md (#14677)
HazAT Dec 12, 2024
d9d3b06
fix(aws-serverless): Remove v8 layer as it overwrites the current lay…
andreiborza Dec 12, 2024
0aa7d95
fix: Disable ANR and Local Variables if debugger is enabled via CLI a…
timfish Dec 12, 2024
c49b247
feat(core): Add `handled` option to `captureConsoleIntegration` (#14664)
Lms24 Dec 12, 2024
027518d
fix(nuxt): Inline nitro-utils function (#14680)
s1gr1d Dec 12, 2024
5fe6345
fix(profiling-node): Ensure profileId is added to transaction event (…
Lms24 Dec 12, 2024
63476fa
feat(browser): Attach virtual stack traces to `HttpClient` events (#1…
onurtemizkan Dec 12, 2024
5af2833
fix(profiling-node): Guard invocation of native profiling methods (#1…
Lms24 Dec 12, 2024
2cff1f7
meta(svelte): Increase size limit (#14685)
s1gr1d Dec 12, 2024
3473447
fix(react): Add React Router Descendant Routes support. (#14304)
onurtemizkan Dec 12, 2024
4871906
chore(deps): Bump express from 4.19.2 to 4.20.0 in /dev-packages/e2e-…
dependabot[bot] Dec 12, 2024
825fe89
fix(browser): Mark stack trace from `captureMessage` with `attachStac…
Lms24 Dec 12, 2024
cdaf852
fix(core): Mark stack trace from `captureMessage` with `attatchStackT…
Lms24 Dec 12, 2024
70653af
fix(core): Set `level` in server runtime `captureException` (#10587)
Zih0 Dec 12, 2024
017867d
feat(replay): Upgrade rrweb packages to 2.31.0 (#14689)
billyvg Dec 12, 2024
734b375
meta(changelog): Update changelog for 8.45.0
s1gr1d Dec 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions .craft.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -142,10 +142,12 @@ targets:
id: '@sentry-internal/eslint-config-sdk'
includeNames: /^sentry-internal-eslint-config-sdk-\d.*\.tgz$/

# AWS Lambda Layer target
# TODO(v9): Remove this target
# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDK
layerName: SentryNodeServerlessSDKv8
compatibleRuntimes:
- name: node
versions:
Expand All@@ -157,13 +159,10 @@ targets:
- nodejs20.x
license: MIT

# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.

# AWS Lambda Layer target
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDKv8
layerName: SentryNodeServerlessSDK
compatibleRuntimes:
- name: node
versions:
Expand Down
2 changes: 1 addition & 1 deletion .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ module.exports = [
path: 'packages/svelte/build/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
// Browser CDN bundles
{
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,23 @@

- "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott

## 8.45.0

- feat(core): Add `handled` option to `captureConsoleIntegration` ([#14664](https://github.com/getsentry/sentry-javascript/pull/14664))
- feat(browser): Attach virtual stack traces to `HttpClient` events ([#14515](https://github.com/getsentry/sentry-javascript/pull/14515))
- feat(replay): Upgrade rrweb packages to 2.31.0 ([#14689](https://github.com/getsentry/sentry-javascript/pull/14689))
- fix(aws-serverless): Remove v8 layer as it overwrites the current layer for docs ([#14679](https://github.com/getsentry/sentry-javascript/pull/14679))
- fix(browser): Mark stack trace from `captureMessage` with `attachStacktrace: true` as synthetic ([#14668](https://github.com/getsentry/sentry-javascript/pull/14668))
- fix(core): Mark stack trace from `captureMessage` with `attatchStackTrace: true` as synthetic ([#14670](https://github.com/getsentry/sentry-javascript/pull/14670))
- fix(core): Set `level` in server runtime `captureException` ([#10587](https://github.com/getsentry/sentry-javascript/pull/10587))
- fix(profiling-node): Guard invocation of native profiling methods ([#14676](https://github.com/getsentry/sentry-javascript/pull/14676))
- fix(nuxt): Inline nitro-utils function ([#14680](https://github.com/getsentry/sentry-javascript/pull/14680))
- fix(profiling-node): Ensure profileId is added to transaction event ([#14681](https://github.com/getsentry/sentry-javascript/pull/14681))
- fix(react): Add React Router Descendant Routes support ([#14304](https://github.com/getsentry/sentry-javascript/pull/14304))
- fix: Disable ANR and Local Variables if debugger is enabled via CLI args ([#14643](https://github.com/getsentry/sentry-javascript/pull/14643))

Work in this release was contributed by @anonrig and @Zih0. Thank you for your contributions!

## 8.44.0

### Deprecations
Expand Down
13 changes: 10 additions & 3 deletions biome.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,8 @@
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
"useIgnoreFile": true,
"defaultBranch": "develop"
},
"organizeImports": {
"enabled": true
Expand All@@ -17,13 +18,15 @@
"noUnusedVariables": "error",
"noPrecisionLoss": "error"
},
"complexity": {
"useRegexLiterals": "error"
},
"suspicious": {
"all": false,
"noControlCharactersInRegex": "error"
},
"nursery": {
"noUnusedImports": "error",
"useRegexLiterals": "error"
"noUnusedImports": "error"
},
"performance": {
"all": true,
Expand DownExpand Up@@ -92,6 +95,10 @@
"json": {
"formatter": {
"enabled": true
},
"parser": {
"allowComments": true,
"allowTrailingCommas": true
}
}
}
2 changes: 1 addition & 1 deletion dev-packages/browser-integration-tests/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,7 +42,7 @@
"dependencies": {
"@babel/preset-typescript": "^7.16.7",
"@playwright/test": "^1.44.1",
"@sentry-internal/rrweb": "2.30.0",
"@sentry-internal/rrweb": "2.31.0",
"@sentry/browser": "8.44.0",
"axios": "1.7.7",
"babel-loader": "^8.2.2",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,6 +30,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console log'],
},
message: 'console log',
}),
);
expect(logEvent?.exception).toBeUndefined();
Expand All@@ -40,6 +41,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console warn'],
},
message: 'console warn',
}),
);
expect(warnEvent?.exception).toBeUndefined();
Expand All@@ -50,6 +52,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console info'],
},
message: 'console info',
}),
);
expect(infoEvent?.exception).toBeUndefined();
Expand All@@ -60,6 +63,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console error'],
},
message: 'console error',
}),
);
expect(errorEvent?.exception).toBeUndefined();
Expand All@@ -70,6 +74,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console trace'],
},
message: 'console trace',
}),
);
expect(traceEvent?.exception).toBeUndefined();
Expand All@@ -90,6 +95,11 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
}),
);
expect(errorWithErrorEvent?.exception?.values?.[0].value).toBe('console error with error object');
expect(errorWithErrorEvent?.exception?.values?.[0].mechanism).toEqual({
// TODO (v9): Adjust to true after changing the integration's default value
handled: false,
type: 'console',
});
expect(traceWithErrorEvent).toEqual(
expect.objectContaining({
level: 'log',
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request passed in', async ({ getLocalTestUrl, page }) =
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request (without body) & options passed in', async ({ g
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
import * as Sentry from '@sentry/browser';

window.Sentry = Sentry;

Sentry.init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
attachStacktrace: true,
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
Sentry.captureMessage('foo');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
import { expect } from '@playwright/test';
import type { Event } from '@sentry/core';

import { sentryTest } from '../../../../utils/fixtures';
import { getFirstSentryEnvelopeRequest } from '../../../../utils/helpers';

sentryTest(
'captures a simple message string with stack trace if `attachStackTrace` is `true`',
async ({ getLocalTestUrl, page }) => {
const url = await getLocalTestUrl({ testDir: __dirname });

const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);

expect(eventData.message).toBe('foo');
expect(eventData.level).toBe('info');
expect(eventData.exception?.values?.[0]).toEqual({
mechanism: {
handled: true,
type: 'generic',
synthetic: true,
},
stacktrace: {
frames: expect.arrayContaining([expect.any(Object), expect.any(Object)]),
},
value: 'foo',
});
},
);
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
c965af2
Merge pull request #14674 from getsentry/master
github-actions[bot] Dec 12, 2024
13bb652
build: update biome to v1.5.2 (#10102)
anonrig Dec 12, 2024
938fe65
chore: Add external contributor to CHANGELOG.md (#14677)
HazAT Dec 12, 2024
d9d3b06
fix(aws-serverless): Remove v8 layer as it overwrites the current lay…
andreiborza Dec 12, 2024
0aa7d95
fix: Disable ANR and Local Variables if debugger is enabled via CLI a…
timfish Dec 12, 2024
c49b247
feat(core): Add `handled` option to `captureConsoleIntegration` (#14664)
Lms24 Dec 12, 2024
027518d
fix(nuxt): Inline nitro-utils function (#14680)
s1gr1d Dec 12, 2024
5fe6345
fix(profiling-node): Ensure profileId is added to transaction event (…
Lms24 Dec 12, 2024
63476fa
feat(browser): Attach virtual stack traces to `HttpClient` events (#1…
onurtemizkan Dec 12, 2024
5af2833
fix(profiling-node): Guard invocation of native profiling methods (#1…
Lms24 Dec 12, 2024
2cff1f7
meta(svelte): Increase size limit (#14685)
s1gr1d Dec 12, 2024
3473447
fix(react): Add React Router Descendant Routes support. (#14304)
onurtemizkan Dec 12, 2024
4871906
chore(deps): Bump express from 4.19.2 to 4.20.0 in /dev-packages/e2e-…
dependabot[bot] Dec 12, 2024
825fe89
fix(browser): Mark stack trace from `captureMessage` with `attachStac…
Lms24 Dec 12, 2024
cdaf852
fix(core): Mark stack trace from `captureMessage` with `attatchStackT…
Lms24 Dec 12, 2024
70653af
fix(core): Set `level` in server runtime `captureException` (#10587)
Zih0 Dec 12, 2024
017867d
feat(replay): Upgrade rrweb packages to 2.31.0 (#14689)
billyvg Dec 12, 2024
734b375
meta(changelog): Update changelog for 8.45.0
s1gr1d Dec 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions .craft.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -142,10 +142,12 @@ targets:
id: '@sentry-internal/eslint-config-sdk'
includeNames: /^sentry-internal-eslint-config-sdk-\d.*\.tgz$/

# AWS Lambda Layer target
# TODO(v9): Remove this target
# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDK
layerName: SentryNodeServerlessSDKv8
compatibleRuntimes:
- name: node
versions:
Expand All@@ -157,13 +159,10 @@ targets:
- nodejs20.x
license: MIT

# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.

# AWS Lambda Layer target
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDKv8
layerName: SentryNodeServerlessSDK
compatibleRuntimes:
- name: node
versions:
Expand Down
2 changes: 1 addition & 1 deletion .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ module.exports = [
path: 'packages/svelte/build/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
// Browser CDN bundles
{
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,23 @@

- "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott

## 8.45.0

- feat(core): Add `handled` option to `captureConsoleIntegration` ([#14664](https://github.com/getsentry/sentry-javascript/pull/14664))
- feat(browser): Attach virtual stack traces to `HttpClient` events ([#14515](https://github.com/getsentry/sentry-javascript/pull/14515))
- feat(replay): Upgrade rrweb packages to 2.31.0 ([#14689](https://github.com/getsentry/sentry-javascript/pull/14689))
- fix(aws-serverless): Remove v8 layer as it overwrites the current layer for docs ([#14679](https://github.com/getsentry/sentry-javascript/pull/14679))
- fix(browser): Mark stack trace from `captureMessage` with `attachStacktrace: true` as synthetic ([#14668](https://github.com/getsentry/sentry-javascript/pull/14668))
- fix(core): Mark stack trace from `captureMessage` with `attatchStackTrace: true` as synthetic ([#14670](https://github.com/getsentry/sentry-javascript/pull/14670))
- fix(core): Set `level` in server runtime `captureException` ([#10587](https://github.com/getsentry/sentry-javascript/pull/10587))
- fix(profiling-node): Guard invocation of native profiling methods ([#14676](https://github.com/getsentry/sentry-javascript/pull/14676))
- fix(nuxt): Inline nitro-utils function ([#14680](https://github.com/getsentry/sentry-javascript/pull/14680))
- fix(profiling-node): Ensure profileId is added to transaction event ([#14681](https://github.com/getsentry/sentry-javascript/pull/14681))
- fix(react): Add React Router Descendant Routes support ([#14304](https://github.com/getsentry/sentry-javascript/pull/14304))
- fix: Disable ANR and Local Variables if debugger is enabled via CLI args ([#14643](https://github.com/getsentry/sentry-javascript/pull/14643))

Work in this release was contributed by @anonrig and @Zih0. Thank you for your contributions!

## 8.44.0

### Deprecations
Expand Down
13 changes: 10 additions & 3 deletions biome.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,8 @@
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
"useIgnoreFile": true,
"defaultBranch": "develop"
},
"organizeImports": {
"enabled": true
Expand All@@ -17,13 +18,15 @@
"noUnusedVariables": "error",
"noPrecisionLoss": "error"
},
"complexity": {
"useRegexLiterals": "error"
},
"suspicious": {
"all": false,
"noControlCharactersInRegex": "error"
},
"nursery": {
"noUnusedImports": "error",
"useRegexLiterals": "error"
"noUnusedImports": "error"
},
"performance": {
"all": true,
Expand DownExpand Up@@ -92,6 +95,10 @@
"json": {
"formatter": {
"enabled": true
},
"parser": {
"allowComments": true,
"allowTrailingCommas": true
}
}
}
2 changes: 1 addition & 1 deletion dev-packages/browser-integration-tests/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,7 +42,7 @@
"dependencies": {
"@babel/preset-typescript": "^7.16.7",
"@playwright/test": "^1.44.1",
"@sentry-internal/rrweb": "2.30.0",
"@sentry-internal/rrweb": "2.31.0",
"@sentry/browser": "8.44.0",
"axios": "1.7.7",
"babel-loader": "^8.2.2",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,6 +30,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console log'],
},
message: 'console log',
}),
);
expect(logEvent?.exception).toBeUndefined();
Expand All@@ -40,6 +41,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console warn'],
},
message: 'console warn',
}),
);
expect(warnEvent?.exception).toBeUndefined();
Expand All@@ -50,6 +52,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console info'],
},
message: 'console info',
}),
);
expect(infoEvent?.exception).toBeUndefined();
Expand All@@ -60,6 +63,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console error'],
},
message: 'console error',
}),
);
expect(errorEvent?.exception).toBeUndefined();
Expand All@@ -70,6 +74,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console trace'],
},
message: 'console trace',
}),
);
expect(traceEvent?.exception).toBeUndefined();
Expand All@@ -90,6 +95,11 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
}),
);
expect(errorWithErrorEvent?.exception?.values?.[0].value).toBe('console error with error object');
expect(errorWithErrorEvent?.exception?.values?.[0].mechanism).toEqual({
// TODO (v9): Adjust to true after changing the integration's default value
handled: false,
type: 'console',
});
expect(traceWithErrorEvent).toEqual(
expect.objectContaining({
level: 'log',
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request passed in', async ({ getLocalTestUrl, page }) =
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request (without body) & options passed in', async ({ g
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
import * as Sentry from '@sentry/browser';

window.Sentry = Sentry;

Sentry.init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
attachStacktrace: true,
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
Sentry.captureMessage('foo');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
import { expect } from '@playwright/test';
import type { Event } from '@sentry/core';

import { sentryTest } from '../../../../utils/fixtures';
import { getFirstSentryEnvelopeRequest } from '../../../../utils/helpers';

sentryTest(
'captures a simple message string with stack trace if `attachStackTrace` is `true`',
async ({ getLocalTestUrl, page }) => {
const url = await getLocalTestUrl({ testDir: __dirname });

const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);

expect(eventData.message).toBe('foo');
expect(eventData.level).toBe('info');
expect(eventData.exception?.values?.[0]).toEqual({
mechanism: {
handled: true,
type: 'generic',
synthetic: true,
},
stacktrace: {
frames: expect.arrayContaining([expect.any(Object), expect.any(Object)]),
},
value: 'foo',
});
},
);
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
c965af2
Merge pull request #14674 from getsentry/master
github-actions[bot] Dec 12, 2024
13bb652
build: update biome to v1.5.2 (#10102)
anonrig Dec 12, 2024
938fe65
chore: Add external contributor to CHANGELOG.md (#14677)
HazAT Dec 12, 2024
d9d3b06
fix(aws-serverless): Remove v8 layer as it overwrites the current lay…
andreiborza Dec 12, 2024
0aa7d95
fix: Disable ANR and Local Variables if debugger is enabled via CLI a…
timfish Dec 12, 2024
c49b247
feat(core): Add `handled` option to `captureConsoleIntegration` (#14664)
Lms24 Dec 12, 2024
027518d
fix(nuxt): Inline nitro-utils function (#14680)
s1gr1d Dec 12, 2024
5fe6345
fix(profiling-node): Ensure profileId is added to transaction event (…
Lms24 Dec 12, 2024
63476fa
feat(browser): Attach virtual stack traces to `HttpClient` events (#1…
onurtemizkan Dec 12, 2024
5af2833
fix(profiling-node): Guard invocation of native profiling methods (#1…
Lms24 Dec 12, 2024
2cff1f7
meta(svelte): Increase size limit (#14685)
s1gr1d Dec 12, 2024
3473447
fix(react): Add React Router Descendant Routes support. (#14304)
onurtemizkan Dec 12, 2024
4871906
chore(deps): Bump express from 4.19.2 to 4.20.0 in /dev-packages/e2e-…
dependabot[bot] Dec 12, 2024
825fe89
fix(browser): Mark stack trace from `captureMessage` with `attachStac…
Lms24 Dec 12, 2024
cdaf852
fix(core): Mark stack trace from `captureMessage` with `attatchStackT…
Lms24 Dec 12, 2024
70653af
fix(core): Set `level` in server runtime `captureException` (#10587)
Zih0 Dec 12, 2024
017867d
feat(replay): Upgrade rrweb packages to 2.31.0 (#14689)
billyvg Dec 12, 2024
734b375
meta(changelog): Update changelog for 8.45.0
s1gr1d Dec 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions .craft.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -142,10 +142,12 @@ targets:
id: '@sentry-internal/eslint-config-sdk'
includeNames: /^sentry-internal-eslint-config-sdk-\d.*\.tgz$/

# AWS Lambda Layer target
# TODO(v9): Remove this target
# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDK
layerName: SentryNodeServerlessSDKv8
compatibleRuntimes:
- name: node
versions:
Expand All@@ -157,13 +159,10 @@ targets:
- nodejs20.x
license: MIT

# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.

# AWS Lambda Layer target
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDKv8
layerName: SentryNodeServerlessSDK
compatibleRuntimes:
- name: node
versions:
Expand Down
2 changes: 1 addition & 1 deletion .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ module.exports = [
path: 'packages/svelte/build/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
// Browser CDN bundles
{
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,23 @@

- "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott

## 8.45.0

- feat(core): Add `handled` option to `captureConsoleIntegration` ([#14664](https://github.com/getsentry/sentry-javascript/pull/14664))
- feat(browser): Attach virtual stack traces to `HttpClient` events ([#14515](https://github.com/getsentry/sentry-javascript/pull/14515))
- feat(replay): Upgrade rrweb packages to 2.31.0 ([#14689](https://github.com/getsentry/sentry-javascript/pull/14689))
- fix(aws-serverless): Remove v8 layer as it overwrites the current layer for docs ([#14679](https://github.com/getsentry/sentry-javascript/pull/14679))
- fix(browser): Mark stack trace from `captureMessage` with `attachStacktrace: true` as synthetic ([#14668](https://github.com/getsentry/sentry-javascript/pull/14668))
- fix(core): Mark stack trace from `captureMessage` with `attatchStackTrace: true` as synthetic ([#14670](https://github.com/getsentry/sentry-javascript/pull/14670))
- fix(core): Set `level` in server runtime `captureException` ([#10587](https://github.com/getsentry/sentry-javascript/pull/10587))
- fix(profiling-node): Guard invocation of native profiling methods ([#14676](https://github.com/getsentry/sentry-javascript/pull/14676))
- fix(nuxt): Inline nitro-utils function ([#14680](https://github.com/getsentry/sentry-javascript/pull/14680))
- fix(profiling-node): Ensure profileId is added to transaction event ([#14681](https://github.com/getsentry/sentry-javascript/pull/14681))
- fix(react): Add React Router Descendant Routes support ([#14304](https://github.com/getsentry/sentry-javascript/pull/14304))
- fix: Disable ANR and Local Variables if debugger is enabled via CLI args ([#14643](https://github.com/getsentry/sentry-javascript/pull/14643))

Work in this release was contributed by @anonrig and @Zih0. Thank you for your contributions!

## 8.44.0

### Deprecations
Expand Down
13 changes: 10 additions & 3 deletions biome.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,8 @@
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
"useIgnoreFile": true,
"defaultBranch": "develop"
},
"organizeImports": {
"enabled": true
Expand All@@ -17,13 +18,15 @@
"noUnusedVariables": "error",
"noPrecisionLoss": "error"
},
"complexity": {
"useRegexLiterals": "error"
},
"suspicious": {
"all": false,
"noControlCharactersInRegex": "error"
},
"nursery": {
"noUnusedImports": "error",
"useRegexLiterals": "error"
"noUnusedImports": "error"
},
"performance": {
"all": true,
Expand DownExpand Up@@ -92,6 +95,10 @@
"json": {
"formatter": {
"enabled": true
},
"parser": {
"allowComments": true,
"allowTrailingCommas": true
}
}
}
2 changes: 1 addition & 1 deletion dev-packages/browser-integration-tests/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,7 +42,7 @@
"dependencies": {
"@babel/preset-typescript": "^7.16.7",
"@playwright/test": "^1.44.1",
"@sentry-internal/rrweb": "2.30.0",
"@sentry-internal/rrweb": "2.31.0",
"@sentry/browser": "8.44.0",
"axios": "1.7.7",
"babel-loader": "^8.2.2",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,6 +30,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console log'],
},
message: 'console log',
}),
);
expect(logEvent?.exception).toBeUndefined();
Expand All@@ -40,6 +41,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console warn'],
},
message: 'console warn',
}),
);
expect(warnEvent?.exception).toBeUndefined();
Expand All@@ -50,6 +52,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console info'],
},
message: 'console info',
}),
);
expect(infoEvent?.exception).toBeUndefined();
Expand All@@ -60,6 +63,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console error'],
},
message: 'console error',
}),
);
expect(errorEvent?.exception).toBeUndefined();
Expand All@@ -70,6 +74,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console trace'],
},
message: 'console trace',
}),
);
expect(traceEvent?.exception).toBeUndefined();
Expand All@@ -90,6 +95,11 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
}),
);
expect(errorWithErrorEvent?.exception?.values?.[0].value).toBe('console error with error object');
expect(errorWithErrorEvent?.exception?.values?.[0].mechanism).toEqual({
// TODO (v9): Adjust to true after changing the integration's default value
handled: false,
type: 'console',
});
expect(traceWithErrorEvent).toEqual(
expect.objectContaining({
level: 'log',
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request passed in', async ({ getLocalTestUrl, page }) =
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request (without body) & options passed in', async ({ g
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
import * as Sentry from '@sentry/browser';

window.Sentry = Sentry;

Sentry.init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
attachStacktrace: true,
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
Sentry.captureMessage('foo');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
import { expect } from '@playwright/test';
import type { Event } from '@sentry/core';

import { sentryTest } from '../../../../utils/fixtures';
import { getFirstSentryEnvelopeRequest } from '../../../../utils/helpers';

sentryTest(
'captures a simple message string with stack trace if `attachStackTrace` is `true`',
async ({ getLocalTestUrl, page }) => {
const url = await getLocalTestUrl({ testDir: __dirname });

const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);

expect(eventData.message).toBe('foo');
expect(eventData.level).toBe('info');
expect(eventData.exception?.values?.[0]).toEqual({
mechanism: {
handled: true,
type: 'generic',
synthetic: true,
},
stacktrace: {
frames: expect.arrayContaining([expect.any(Object), expect.any(Object)]),
},
value: 'foo',
});
},
);
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
c965af2
Merge pull request #14674 from getsentry/master
github-actions[bot] Dec 12, 2024
13bb652
build: update biome to v1.5.2 (#10102)
anonrig Dec 12, 2024
938fe65
chore: Add external contributor to CHANGELOG.md (#14677)
HazAT Dec 12, 2024
d9d3b06
fix(aws-serverless): Remove v8 layer as it overwrites the current lay…
andreiborza Dec 12, 2024
0aa7d95
fix: Disable ANR and Local Variables if debugger is enabled via CLI a…
timfish Dec 12, 2024
c49b247
feat(core): Add `handled` option to `captureConsoleIntegration` (#14664)
Lms24 Dec 12, 2024
027518d
fix(nuxt): Inline nitro-utils function (#14680)
s1gr1d Dec 12, 2024
5fe6345
fix(profiling-node): Ensure profileId is added to transaction event (…
Lms24 Dec 12, 2024
63476fa
feat(browser): Attach virtual stack traces to `HttpClient` events (#1…
onurtemizkan Dec 12, 2024
5af2833
fix(profiling-node): Guard invocation of native profiling methods (#1…
Lms24 Dec 12, 2024
2cff1f7
meta(svelte): Increase size limit (#14685)
s1gr1d Dec 12, 2024
3473447
fix(react): Add React Router Descendant Routes support. (#14304)
onurtemizkan Dec 12, 2024
4871906
chore(deps): Bump express from 4.19.2 to 4.20.0 in /dev-packages/e2e-…
dependabot[bot] Dec 12, 2024
825fe89
fix(browser): Mark stack trace from `captureMessage` with `attachStac…
Lms24 Dec 12, 2024
cdaf852
fix(core): Mark stack trace from `captureMessage` with `attatchStackT…
Lms24 Dec 12, 2024
70653af
fix(core): Set `level` in server runtime `captureException` (#10587)
Zih0 Dec 12, 2024
017867d
feat(replay): Upgrade rrweb packages to 2.31.0 (#14689)
billyvg Dec 12, 2024
734b375
meta(changelog): Update changelog for 8.45.0
s1gr1d Dec 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions .craft.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -142,10 +142,12 @@ targets:
id: '@sentry-internal/eslint-config-sdk'
includeNames: /^sentry-internal-eslint-config-sdk-\d.*\.tgz$/

# AWS Lambda Layer target
# TODO(v9): Remove this target
# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDK
layerName: SentryNodeServerlessSDKv8
compatibleRuntimes:
- name: node
versions:
Expand All@@ -157,13 +159,10 @@ targets:
- nodejs20.x
license: MIT

# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.

# AWS Lambda Layer target
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDKv8
layerName: SentryNodeServerlessSDK
compatibleRuntimes:
- name: node
versions:
Expand Down
2 changes: 1 addition & 1 deletion .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ module.exports = [
path: 'packages/svelte/build/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
// Browser CDN bundles
{
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,23 @@

- "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott

## 8.45.0

- feat(core): Add `handled` option to `captureConsoleIntegration` ([#14664](https://github.com/getsentry/sentry-javascript/pull/14664))
- feat(browser): Attach virtual stack traces to `HttpClient` events ([#14515](https://github.com/getsentry/sentry-javascript/pull/14515))
- feat(replay): Upgrade rrweb packages to 2.31.0 ([#14689](https://github.com/getsentry/sentry-javascript/pull/14689))
- fix(aws-serverless): Remove v8 layer as it overwrites the current layer for docs ([#14679](https://github.com/getsentry/sentry-javascript/pull/14679))
- fix(browser): Mark stack trace from `captureMessage` with `attachStacktrace: true` as synthetic ([#14668](https://github.com/getsentry/sentry-javascript/pull/14668))
- fix(core): Mark stack trace from `captureMessage` with `attatchStackTrace: true` as synthetic ([#14670](https://github.com/getsentry/sentry-javascript/pull/14670))
- fix(core): Set `level` in server runtime `captureException` ([#10587](https://github.com/getsentry/sentry-javascript/pull/10587))
- fix(profiling-node): Guard invocation of native profiling methods ([#14676](https://github.com/getsentry/sentry-javascript/pull/14676))
- fix(nuxt): Inline nitro-utils function ([#14680](https://github.com/getsentry/sentry-javascript/pull/14680))
- fix(profiling-node): Ensure profileId is added to transaction event ([#14681](https://github.com/getsentry/sentry-javascript/pull/14681))
- fix(react): Add React Router Descendant Routes support ([#14304](https://github.com/getsentry/sentry-javascript/pull/14304))
- fix: Disable ANR and Local Variables if debugger is enabled via CLI args ([#14643](https://github.com/getsentry/sentry-javascript/pull/14643))

Work in this release was contributed by @anonrig and @Zih0. Thank you for your contributions!

## 8.44.0

### Deprecations
Expand Down
13 changes: 10 additions & 3 deletions biome.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,8 @@
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
"useIgnoreFile": true,
"defaultBranch": "develop"
},
"organizeImports": {
"enabled": true
Expand All@@ -17,13 +18,15 @@
"noUnusedVariables": "error",
"noPrecisionLoss": "error"
},
"complexity": {
"useRegexLiterals": "error"
},
"suspicious": {
"all": false,
"noControlCharactersInRegex": "error"
},
"nursery": {
"noUnusedImports": "error",
"useRegexLiterals": "error"
"noUnusedImports": "error"
},
"performance": {
"all": true,
Expand DownExpand Up@@ -92,6 +95,10 @@
"json": {
"formatter": {
"enabled": true
},
"parser": {
"allowComments": true,
"allowTrailingCommas": true
}
}
}
2 changes: 1 addition & 1 deletion dev-packages/browser-integration-tests/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,7 +42,7 @@
"dependencies": {
"@babel/preset-typescript": "^7.16.7",
"@playwright/test": "^1.44.1",
"@sentry-internal/rrweb": "2.30.0",
"@sentry-internal/rrweb": "2.31.0",
"@sentry/browser": "8.44.0",
"axios": "1.7.7",
"babel-loader": "^8.2.2",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,6 +30,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console log'],
},
message: 'console log',
}),
);
expect(logEvent?.exception).toBeUndefined();
Expand All@@ -40,6 +41,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console warn'],
},
message: 'console warn',
}),
);
expect(warnEvent?.exception).toBeUndefined();
Expand All@@ -50,6 +52,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console info'],
},
message: 'console info',
}),
);
expect(infoEvent?.exception).toBeUndefined();
Expand All@@ -60,6 +63,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console error'],
},
message: 'console error',
}),
);
expect(errorEvent?.exception).toBeUndefined();
Expand All@@ -70,6 +74,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console trace'],
},
message: 'console trace',
}),
);
expect(traceEvent?.exception).toBeUndefined();
Expand All@@ -90,6 +95,11 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
}),
);
expect(errorWithErrorEvent?.exception?.values?.[0].value).toBe('console error with error object');
expect(errorWithErrorEvent?.exception?.values?.[0].mechanism).toEqual({
// TODO (v9): Adjust to true after changing the integration's default value
handled: false,
type: 'console',
});
expect(traceWithErrorEvent).toEqual(
expect.objectContaining({
level: 'log',
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request passed in', async ({ getLocalTestUrl, page }) =
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request (without body) & options passed in', async ({ g
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
import * as Sentry from '@sentry/browser';

window.Sentry = Sentry;

Sentry.init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
attachStacktrace: true,
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
Sentry.captureMessage('foo');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
import { expect } from '@playwright/test';
import type { Event } from '@sentry/core';

import { sentryTest } from '../../../../utils/fixtures';
import { getFirstSentryEnvelopeRequest } from '../../../../utils/helpers';

sentryTest(
'captures a simple message string with stack trace if `attachStackTrace` is `true`',
async ({ getLocalTestUrl, page }) => {
const url = await getLocalTestUrl({ testDir: __dirname });

const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);

expect(eventData.message).toBe('foo');
expect(eventData.level).toBe('info');
expect(eventData.exception?.values?.[0]).toEqual({
mechanism: {
handled: true,
type: 'generic',
synthetic: true,
},
stacktrace: {
frames: expect.arrayContaining([expect.any(Object), expect.any(Object)]),
},
value: 'foo',
});
},
);
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
c965af2
Merge pull request #14674 from getsentry/master
github-actions[bot] Dec 12, 2024
13bb652
build: update biome to v1.5.2 (#10102)
anonrig Dec 12, 2024
938fe65
chore: Add external contributor to CHANGELOG.md (#14677)
HazAT Dec 12, 2024
d9d3b06
fix(aws-serverless): Remove v8 layer as it overwrites the current lay…
andreiborza Dec 12, 2024
0aa7d95
fix: Disable ANR and Local Variables if debugger is enabled via CLI a…
timfish Dec 12, 2024
c49b247
feat(core): Add `handled` option to `captureConsoleIntegration` (#14664)
Lms24 Dec 12, 2024
027518d
fix(nuxt): Inline nitro-utils function (#14680)
s1gr1d Dec 12, 2024
5fe6345
fix(profiling-node): Ensure profileId is added to transaction event (…
Lms24 Dec 12, 2024
63476fa
feat(browser): Attach virtual stack traces to `HttpClient` events (#1…
onurtemizkan Dec 12, 2024
5af2833
fix(profiling-node): Guard invocation of native profiling methods (#1…
Lms24 Dec 12, 2024
2cff1f7
meta(svelte): Increase size limit (#14685)
s1gr1d Dec 12, 2024
3473447
fix(react): Add React Router Descendant Routes support. (#14304)
onurtemizkan Dec 12, 2024
4871906
chore(deps): Bump express from 4.19.2 to 4.20.0 in /dev-packages/e2e-…
dependabot[bot] Dec 12, 2024
825fe89
fix(browser): Mark stack trace from `captureMessage` with `attachStac…
Lms24 Dec 12, 2024
cdaf852
fix(core): Mark stack trace from `captureMessage` with `attatchStackT…
Lms24 Dec 12, 2024
70653af
fix(core): Set `level` in server runtime `captureException` (#10587)
Zih0 Dec 12, 2024
017867d
feat(replay): Upgrade rrweb packages to 2.31.0 (#14689)
billyvg Dec 12, 2024
734b375
meta(changelog): Update changelog for 8.45.0
s1gr1d Dec 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions .craft.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -142,10 +142,12 @@ targets:
id: '@sentry-internal/eslint-config-sdk'
includeNames: /^sentry-internal-eslint-config-sdk-\d.*\.tgz$/

# AWS Lambda Layer target
# TODO(v9): Remove this target
# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDK
layerName: SentryNodeServerlessSDKv8
compatibleRuntimes:
- name: node
versions:
Expand All@@ -157,13 +159,10 @@ targets:
- nodejs20.x
license: MIT

# NOTE: We publish the v8 layer under its own name so people on v8 can still get patches
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.

# AWS Lambda Layer target
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
layerName: SentryNodeServerlessSDKv8
layerName: SentryNodeServerlessSDK
compatibleRuntimes:
- name: node
versions:
Expand Down
2 changes: 1 addition & 1 deletion .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -147,7 +147,7 @@ module.exports = [
path: 'packages/svelte/build/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
// Browser CDN bundles
{
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,23 @@

- "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott

## 8.45.0

- feat(core): Add `handled` option to `captureConsoleIntegration` ([#14664](https://github.com/getsentry/sentry-javascript/pull/14664))
- feat(browser): Attach virtual stack traces to `HttpClient` events ([#14515](https://github.com/getsentry/sentry-javascript/pull/14515))
- feat(replay): Upgrade rrweb packages to 2.31.0 ([#14689](https://github.com/getsentry/sentry-javascript/pull/14689))
- fix(aws-serverless): Remove v8 layer as it overwrites the current layer for docs ([#14679](https://github.com/getsentry/sentry-javascript/pull/14679))
- fix(browser): Mark stack trace from `captureMessage` with `attachStacktrace: true` as synthetic ([#14668](https://github.com/getsentry/sentry-javascript/pull/14668))
- fix(core): Mark stack trace from `captureMessage` with `attatchStackTrace: true` as synthetic ([#14670](https://github.com/getsentry/sentry-javascript/pull/14670))
- fix(core): Set `level` in server runtime `captureException` ([#10587](https://github.com/getsentry/sentry-javascript/pull/10587))
- fix(profiling-node): Guard invocation of native profiling methods ([#14676](https://github.com/getsentry/sentry-javascript/pull/14676))
- fix(nuxt): Inline nitro-utils function ([#14680](https://github.com/getsentry/sentry-javascript/pull/14680))
- fix(profiling-node): Ensure profileId is added to transaction event ([#14681](https://github.com/getsentry/sentry-javascript/pull/14681))
- fix(react): Add React Router Descendant Routes support ([#14304](https://github.com/getsentry/sentry-javascript/pull/14304))
- fix: Disable ANR and Local Variables if debugger is enabled via CLI args ([#14643](https://github.com/getsentry/sentry-javascript/pull/14643))

Work in this release was contributed by @anonrig and @Zih0. Thank you for your contributions!

## 8.44.0

### Deprecations
Expand Down
13 changes: 10 additions & 3 deletions biome.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,8 @@
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
"useIgnoreFile": true,
"defaultBranch": "develop"
},
"organizeImports": {
"enabled": true
Expand All@@ -17,13 +18,15 @@
"noUnusedVariables": "error",
"noPrecisionLoss": "error"
},
"complexity": {
"useRegexLiterals": "error"
},
"suspicious": {
"all": false,
"noControlCharactersInRegex": "error"
},
"nursery": {
"noUnusedImports": "error",
"useRegexLiterals": "error"
"noUnusedImports": "error"
},
"performance": {
"all": true,
Expand DownExpand Up@@ -92,6 +95,10 @@
"json": {
"formatter": {
"enabled": true
},
"parser": {
"allowComments": true,
"allowTrailingCommas": true
}
}
}
2 changes: 1 addition & 1 deletion dev-packages/browser-integration-tests/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,7 +42,7 @@
"dependencies": {
"@babel/preset-typescript": "^7.16.7",
"@playwright/test": "^1.44.1",
"@sentry-internal/rrweb": "2.30.0",
"@sentry-internal/rrweb": "2.31.0",
"@sentry/browser": "8.44.0",
"axios": "1.7.7",
"babel-loader": "^8.2.2",
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,6 +30,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console log'],
},
message: 'console log',
}),
);
expect(logEvent?.exception).toBeUndefined();
Expand All@@ -40,6 +41,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console warn'],
},
message: 'console warn',
}),
);
expect(warnEvent?.exception).toBeUndefined();
Expand All@@ -50,6 +52,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console info'],
},
message: 'console info',
}),
);
expect(infoEvent?.exception).toBeUndefined();
Expand All@@ -60,6 +63,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console error'],
},
message: 'console error',
}),
);
expect(errorEvent?.exception).toBeUndefined();
Expand All@@ -70,6 +74,7 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
extra: {
arguments: ['console trace'],
},
message: 'console trace',
}),
);
expect(traceEvent?.exception).toBeUndefined();
Expand All@@ -90,6 +95,11 @@ sentryTest('it captures console messages correctly', async ({ getLocalTestUrl, p
}),
);
expect(errorWithErrorEvent?.exception?.values?.[0].value).toBe('console error with error object');
expect(errorWithErrorEvent?.exception?.values?.[0].mechanism).toEqual({
// TODO (v9): Adjust to true after changing the integration's default value
handled: false,
type: 'console',
});
expect(traceWithErrorEvent).toEqual(
expect.objectContaining({
level: 'log',
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -42,6 +42,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request passed in', async ({ getLocalTestUrl, page }) =
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,15 @@ sentryTest('works with a Request (without body) & options passed in', async ({ g
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,15 @@ sentryTest(
type: 'http.client',
handled: false,
},
stacktrace: {
frames: expect.arrayContaining([
expect.objectContaining({
filename: 'http://sentry-test.io/subject.bundle.js',
function: '?',
in_app: true,
}),
]),
},
},
],
},
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
import * as Sentry from '@sentry/browser';

window.Sentry = Sentry;

Sentry.init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
attachStacktrace: true,
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
Sentry.captureMessage('foo');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
import { expect } from '@playwright/test';
import type { Event } from '@sentry/core';

import { sentryTest } from '../../../../utils/fixtures';
import { getFirstSentryEnvelopeRequest } from '../../../../utils/helpers';

sentryTest(
'captures a simple message string with stack trace if `attachStackTrace` is `true`',
async ({ getLocalTestUrl, page }) => {
const url = await getLocalTestUrl({ testDir: __dirname });

const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);

expect(eventData.message).toBe('foo');
expect(eventData.level).toBe('info');
expect(eventData.exception?.values?.[0]).toEqual({
mechanism: {
handled: true,
type: 'generic',
synthetic: true,
},
stacktrace: {
frames: expect.arrayContaining([expect.any(Object), expect.any(Object)]),
},
value: 'foo',
});
},
);
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
const blockUI = (delay = 70) => e => {
const startTime = Date.now();
const blockUI =
(delay = 70) =>
e => {
const startTime = Date.now();

function getElasped() {
const time = Date.now();
return time - startTime;
}
function getElasped() {
const time = Date.now();
return time - startTime;
}

while (getElasped() < delay) {
//
}
while (getElasped() < delay) {
//
}

e.target.classList.add('clicked');
};
e.target.classList.add('clicked');
};

document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
Expand Down
Loading