getsentry / getsentry/sentry-javascript

Deprecate and remove `parseUrl` and refactor `getSanitizedUrlString`

Abierto
#15,767 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Core Improvement
Lenguaje dominante
TypeScript
Estrellas
8.7k
Forks
1.8k
Merge medio
1 d 17 h
PR fusionados (30 d)
515

Descripción

### 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`?

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.