getsentry / getsentry/sentry-javascript

Deprecate and remove `parseUrl` and refactor `getSanitizedUrlString`

Aperta
#15,767 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Core Improvement
Lingua principale
TypeScript
Stelle
8.7k
Fork
1.8k
Merge medio
1g 17h
PR unite (30g)
515

Descrizione

### Description

Now that we support ES2020 (aka not IE11 anymore) and Node.js 18+, we can get rid of `parseUrl` in favor of a method that just uses the built-in URL object. This will save us some bundle size (given we can remove that regex), and we get performance benefits from using native code.

https://github.com/getsentry/sentry-javascript/blob/3d63621714b31c1ea4c2ab2d90d5684a36805a43/packages/core/src/utils-hoist/url.ts#L17

Instead of just blanket replacing `parseUrl`, we'll slowly convert all it's usages to using a new helper, which looks something like so:

```js
/**
* Parses string to a URL object
*
* @param url - The URL to parse
* @returns The parsed URL object or undefined if the URL is invalid
*/
export function parseStringToURL(url: string): URL | undefined {
try {
// Node 20+, Chrome 120+, Firefox 115+, Safari 17+
if ('canParse' in URL) {
// Use `canParse` to short-circuit the URL constructor if it's not a valid URL
// This is faster than trying to construct the URL and catching the error
return (URL as unknown as URLwithCanParse).canParse(url) ? new URL(url) : undefined;
}
} catch {
// empty body
}

return undefined;
}
```

- [x] Remove all usages in `@sentry/core`, and implement `parseStringToURL`
- [x] Replace https://github.com/getsentry/sentry-javascript/blob/3d63621714b31c1ea4c2ab2d90d5684a36805a43/packages/browser-utils/src/instrument/xhr.ts#L150
- [ ] https://github.com/getsentry/sentry-javascript/blob/3d63621714b31c1ea4c2ab2d90d5684a36805a43/packages/browser/src/integrations/breadcrumbs.ts#L36
- [ ] https://github.com/getsentry/sentry-javascript/blob/3d63621714b31c1ea4c2ab2d90d5684a36805a43/packages/opentelemetry/src/utils/parseSpanDescription.ts#L23
- [ ] https://github.com/getsentry/sentry-javascript/blob/3d63621714b31c1ea4c2ab2d90d5684a36805a43/packages/node/src/integrations/http/SentryHttpInstrumentation.ts#L17
- [ ] https://github.com/getsentry/sentry-javascript/blob/3d63621714b31c1ea4c2ab2d90d5684a36805a43/packages/node/src/integrations/node-fetch/SentryNodeFetchInstrumentation.ts#L6
- [ ] https://github.com/getsentry/sentry-javascript/blob/3d63621714b31c1ea4c2ab2d90d5684a36805a43/packages/browser/src/tracing/request.ts#L22
- [ ] https://github.com/getsentry/sentry-javascript/blob/3d63621714b31c1ea4c2ab2d90d5684a36805a43/packages/browser-utils/src/metrics/browserMetrics.ts#L9

With that, we can also refactor `getSanitizedUrlString`, which should provide some performance benefits.

https://github.com/getsentry/sentry-javascript/blob/3d63621714b31c1ea4c2ab2d90d5684a36805a43/packages/core/src/utils-hoist/url.ts#L55

- [ ] https://github.com/getsentry/sentry-javascript/blob/3d63621714b31c1ea4c2ab2d90d5684a36805a43/packages/bun/src/integrations/bunserver.ts#L10
- [ ] https://github.com/getsentry/sentry-javascript/blob/3d63621714b31c1ea4c2ab2d90d5684a36805a43/packages/opentelemetry/src/utils/getRequestSpanData.ts#L9
- [ ] https://github.com/getsentry/sentry-javascript/blob/3d63621714b31c1ea4c2ab2d90d5684a36805a43/packages/node/src/integrations/node-fetch/SentryNodeFetchInstrumentation.ts#L6
- [ ] https://github.com/getsentry/sentry-javascript/blob/3d63621714b31c1ea4c2ab2d90d5684a36805a43/packages/node/src/integrations/http/SentryHttpInstrumentation.ts#L14
- [ ] https://github.com/getsentry/sentry-javascript/blob/3d63621714b31c1ea4c2ab2d90d5684a36805a43/packages/opentelemetry/src/utils/parseSpanDescription.ts#L22

Reminder list:
- Can we remove `extractQueryParamsFromUrl`?

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.