Skip to content

Commit b531549

Browse files
authored
feat(remix): Export a type to use for MetaFunction parameters (#9493)
Exported a type to be used like: ```typescript export const meta = ({ data }: SentryMetaArgs<MetaFunction<typeof loader>>) => { return [ { env: data.ENV, }, { name: 'sentry-trace', content: data.sentryTrace, }, { name: 'baggage', content: data.sentryBaggage, }, ]; }; ``` So the types from `loader` function and our injections are both available in type checking. Also, updated e2e tests to include `meta` injection checks for root and sub-routes.
1 parent 8b84905 commit b531549

File tree

6 files changed

+96
-2
lines changed

6 files changed

+96
-2
lines changed

packages/e2e-tests/test-applications/create-remix-app-v2/app/root.tsx

+18-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { cssBundleHref } from '@remix-run/css-bundle';
2-
import { json, LinksFunction } from '@remix-run/node';
2+
import { json, LinksFunction, MetaFunction } from '@remix-run/node';
33
import {
44
Links,
55
LiveReload,
@@ -11,6 +11,7 @@ import {
1111
useRouteError,
1212
} from '@remix-run/react';
1313
import { captureRemixErrorBoundaryError, withSentry } from '@sentry/remix';
14+
import type { SentryMetaArgs } from '@sentry/remix';
1415

1516
export const links: LinksFunction = () => [...(cssBundleHref ? [{ rel: 'stylesheet', href: cssBundleHref }] : [])];
1617

@@ -22,6 +23,22 @@ export const loader = () => {
2223
});
2324
};
2425

26+
export const meta = ({ data }: SentryMetaArgs<MetaFunction<typeof loader>>) => {
27+
return [
28+
{
29+
env: data.ENV,
30+
},
31+
{
32+
name: 'sentry-trace',
33+
content: data.sentryTrace,
34+
},
35+
{
36+
name: 'baggage',
37+
content: data.sentryBaggage,
38+
},
39+
];
40+
};
41+
2542
export function ErrorBoundary() {
2643
const error = useRouteError();
2744
const eventId = captureRemixErrorBoundaryError(error);

packages/e2e-tests/test-applications/create-remix-app-v2/tests/behaviour-client.test.ts

+28
Original file line numberDiff line numberDiff line change
@@ -206,3 +206,31 @@ test('Sends a client-side ErrorBoundary exception to Sentry', async ({ page }) =
206206
)
207207
.toBe(200);
208208
});
209+
210+
test('Renders `sentry-trace` and `baggage` meta tags for the root route', async ({ page }) => {
211+
await page.goto('/');
212+
213+
const sentryTraceMetaTag = await page.waitForSelector('meta[name="sentry-trace"]', {
214+
state: 'attached',
215+
});
216+
const baggageMetaTag = await page.waitForSelector('meta[name="baggage"]', {
217+
state: 'attached',
218+
});
219+
220+
expect(sentryTraceMetaTag).toBeTruthy();
221+
expect(baggageMetaTag).toBeTruthy();
222+
});
223+
224+
test('Renders `sentry-trace` and `baggage` meta tags for a sub-route', async ({ page }) => {
225+
await page.goto('/user/123');
226+
227+
const sentryTraceMetaTag = await page.waitForSelector('meta[name="sentry-trace"]', {
228+
state: 'attached',
229+
});
230+
const baggageMetaTag = await page.waitForSelector('meta[name="baggage"]', {
231+
state: 'attached',
232+
});
233+
234+
expect(sentryTraceMetaTag).toBeTruthy();
235+
expect(baggageMetaTag).toBeTruthy();
236+
});

packages/e2e-tests/test-applications/create-remix-app/app/root.tsx

+14-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { cssBundleHref } from '@remix-run/css-bundle';
2-
import { json, LinksFunction } from '@remix-run/node';
2+
import { json, LinksFunction, MetaFunction } from '@remix-run/node';
33
import {
44
Links,
55
LiveReload,
@@ -22,6 +22,19 @@ export const loader = () => {
2222
});
2323
};
2424

25+
export const meta: MetaFunction = ({ data }) => {
26+
return [
27+
{
28+
name: 'sentry-trace',
29+
content: data.sentryTrace,
30+
},
31+
{
32+
name: 'baggage',
33+
content: data.sentryBaggage,
34+
},
35+
];
36+
};
37+
2538
export function ErrorBoundary() {
2639
const error = useRouteError();
2740
const eventId = captureRemixErrorBoundaryError(error);

packages/e2e-tests/test-applications/create-remix-app/tests/behaviour-client.test.ts

+28
Original file line numberDiff line numberDiff line change
@@ -206,3 +206,31 @@ test('Sends a client-side ErrorBoundary exception to Sentry', async ({ page }) =
206206
)
207207
.toBe(200);
208208
});
209+
210+
test('Renders `sentry-trace` and `baggage` meta tags for the root route', async ({ page }) => {
211+
await page.goto('/');
212+
213+
const sentryTraceMetaTag = await page.waitForSelector('meta[name="sentry-trace"]', {
214+
state: 'attached',
215+
});
216+
const baggageMetaTag = await page.waitForSelector('meta[name="baggage"]', {
217+
state: 'attached',
218+
});
219+
220+
expect(sentryTraceMetaTag).toBeTruthy();
221+
expect(baggageMetaTag).toBeTruthy();
222+
});
223+
224+
test('Renders `sentry-trace` and `baggage` meta tags for a sub-route', async ({ page }) => {
225+
await page.goto('/user/123');
226+
227+
const sentryTraceMetaTag = await page.waitForSelector('meta[name="sentry-trace"]', {
228+
state: 'attached',
229+
});
230+
const baggageMetaTag = await page.waitForSelector('meta[name="baggage"]', {
231+
state: 'attached',
232+
});
233+
234+
expect(sentryTraceMetaTag).toBeTruthy();
235+
expect(baggageMetaTag).toBeTruthy();
236+
});

packages/remix/src/index.server.ts

+2
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ export { remixRouterInstrumentation, withSentry } from './client/performance';
6262
export { captureRemixErrorBoundaryError } from './client/errors';
6363
export { wrapExpressCreateRequestHandler } from './utils/serverAdapters/express';
6464

65+
export type { SentryMetaArgs } from './utils/types';
66+
6567
function sdkAlreadyInitialized(): boolean {
6668
const hub = getCurrentHub();
6769
return !!hub.getClient();

packages/remix/src/utils/types.ts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export type SentryMetaArgs<MetaFN extends (...args: any) => any> = Parameters<MetaFN>[0] & {
2+
data: {
3+
sentryTrace: string;
4+
sentryBaggage: string;
5+
};
6+
};

0 commit comments

Comments
 (0)