Skip to content

Commit f0b0281

Browse files
timfishLuca Forstner
andauthored
fix(deno): Build Sentry dependencies for tests (#9312)
Co-authored-by: Luca Forstner <[email protected]>
1 parent 9b0abcd commit f0b0281

File tree

10 files changed

+100
-42
lines changed

10 files changed

+100
-42
lines changed

.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ jest/transformers/*.js
2121
# node tarballs
2222
packages/*/sentry-*.tgz
2323
.nxcache
24-
# The Deno types are downloaded before building
25-
packages/deno/lib.deno.d.ts
2624

2725
# logs
2826
yarn-error.log

packages/deno/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
build-types
2+
build-test
3+
lib.deno.d.ts

packages/deno/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@
4848
"lint:eslint": "eslint . --format stylish",
4949
"lint:prettier": "prettier --check \"{src,test,scripts}/**/**.ts\"",
5050
"install:deno": "node ./scripts/install-deno.mjs",
51-
"test": "run-s deno-types install:deno test:types test:unit",
51+
"pretest": "run-s deno-types test:build",
52+
"test": "run-s install:deno test:types test:unit",
53+
"test:build": "tsc -p tsconfig.test.types.json && rollup -c rollup.test.config.js",
5254
"test:types": "deno check ./build/index.js",
5355
"test:unit": "deno test --allow-read --allow-run",
5456
"test:unit:update": "deno test --allow-read --allow-write --allow-run -- --update",

packages/deno/rollup.test.config.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// @ts-check
2+
import dts from 'rollup-plugin-dts';
3+
import nodeResolve from '@rollup/plugin-node-resolve';
4+
import sucrase from '@rollup/plugin-sucrase';
5+
import { defineConfig } from 'rollup';
6+
7+
export default [
8+
defineConfig({
9+
input: ['test/build.ts'],
10+
output: {
11+
file: 'build-test/index.js',
12+
sourcemap: true,
13+
preserveModules: false,
14+
strict: false,
15+
freeze: false,
16+
interop: 'auto',
17+
format: 'esm',
18+
banner: '/// <reference types="./index.d.ts" />',
19+
},
20+
plugins: [
21+
nodeResolve({
22+
extensions: ['.mjs', '.js', '.json', '.node', '.ts', '.tsx'],
23+
}),
24+
sucrase({ transforms: ['typescript'] }),
25+
],
26+
}),
27+
defineConfig({
28+
input: './build-test/build.d.ts',
29+
output: [{ file: 'build-test/index.d.ts', format: 'es' }],
30+
plugins: [
31+
dts({ respectExternal: true }),
32+
// The bundled types contain a declaration for the __DEBUG_BUILD__ global
33+
// This can result in errors about duplicate global declarations so we strip it out!
34+
{
35+
name: 'strip-global',
36+
renderChunk(code) {
37+
return { code: code.replace(/declare global \{\s*const __DEBUG_BUILD__: boolean;\s*\}/g, '') };
38+
},
39+
},
40+
],
41+
}),
42+
];

packages/deno/test/__snapshots__/mod.test.ts.snap

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,15 @@ snapshot[`captureException 1`] = `
8282
filename: "app:///test/mod.test.ts",
8383
function: "<anonymous>",
8484
in_app: true,
85-
lineno: 42,
85+
lineno: 46,
8686
post_context: [
8787
"",
8888
" await delay(200);",
8989
" await assertSnapshot(t, ev);",
9090
"});",
9191
"",
9292
"Deno.test('captureMessage', async t => {",
93-
" let ev: Event | undefined;",
93+
" let ev: sentryTypes.Event | undefined;",
9494
],
9595
pre_context: [
9696
" ev = event;",
@@ -108,7 +108,7 @@ snapshot[`captureException 1`] = `
108108
filename: "app:///test/mod.test.ts",
109109
function: "something",
110110
in_app: true,
111-
lineno: 39,
111+
lineno: 43,
112112
post_context: [
113113
" }",
114114
"",
@@ -120,7 +120,7 @@ snapshot[`captureException 1`] = `
120120
],
121121
pre_context: [
122122
"Deno.test('captureException', async t => {",
123-
" let ev: Event | undefined;",
123+
" let ev: sentryTypes.Event | undefined;",
124124
" const [hub] = getTestClient(event => {",
125125
" ev = event;",
126126
" });",

packages/deno/test/build.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// We use this as the entry point to bundle Sentry dependencies that are used by the tests.
2+
export * as sentryTypes from '@sentry/types';
3+
export * as sentryUtils from '@sentry/utils';
4+
export * as sentryCore from '@sentry/core';

packages/deno/test/mod.test.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
import { assertEquals } from 'https://deno.land/[email protected]/assert/assert_equals.ts';
22
import { assertSnapshot } from 'https://deno.land/[email protected]/testing/snapshot.ts';
33

4-
import { createStackParser, nodeStackLineParser } from '../../utils/build/esm/index.js';
4+
import type { sentryTypes } from '../build-test/index.js';
5+
import { sentryUtils } from '../build-test/index.js';
56
import { defaultIntegrations, DenoClient, Hub, Scope } from '../build/index.js';
67
import { getNormalizedEvent } from './normalize.ts';
78
import { makeTestTransport } from './transport.ts';
89

9-
function getTestClient(callback: (event?: Event) => void, integrations: any[] = []): [Hub, DenoClient] {
10+
function getTestClient(
11+
callback: (event?: sentryTypes.Event) => void,
12+
integrations: sentryTypes.Integration[] = [],
13+
): [Hub, DenoClient] {
1014
const client = new DenoClient({
1115
dsn: 'https://[email protected]/5650507',
1216
debug: true,
1317
integrations: [...defaultIntegrations, ...integrations],
14-
stackParser: createStackParser(nodeStackLineParser()),
18+
stackParser: sentryUtils.createStackParser(sentryUtils.nodeStackLineParser()),
1519
transport: makeTestTransport(envelope => {
1620
callback(getNormalizedEvent(envelope));
17-
}) as any,
21+
}),
1822
});
1923

2024
const scope = new Scope();
@@ -30,7 +34,7 @@ function delay(time: number): Promise<void> {
3034
}
3135

3236
Deno.test('captureException', async t => {
33-
let ev: Event | undefined;
37+
let ev: sentryTypes.Event | undefined;
3438
const [hub] = getTestClient(event => {
3539
ev = event;
3640
});
@@ -46,7 +50,7 @@ Deno.test('captureException', async t => {
4650
});
4751

4852
Deno.test('captureMessage', async t => {
49-
let ev: Event | undefined;
53+
let ev: sentryTypes.Event | undefined;
5054
const [hub] = getTestClient(event => {
5155
ev = event;
5256
});

packages/deno/test/normalize.ts

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
/* eslint-disable complexity */
2-
import { forEachEnvelopeItem } from '../../utils/build/esm/index.js';
2+
import type { sentryTypes } from '../build-test/index.js';
3+
import { sentryUtils } from '../build-test/index.js';
34

4-
type EventOrSession = any;
5+
type EventOrSession = sentryTypes.Event | sentryTypes.Transaction | sentryTypes.Session;
56

6-
export function getNormalizedEvent(envelope: any): any | undefined {
7-
let event: any | undefined;
7+
export function getNormalizedEvent(envelope: sentryTypes.Envelope): sentryTypes.Event | undefined {
8+
let event: sentryTypes.Event | undefined;
89

9-
forEachEnvelopeItem(envelope, (item: any) => {
10+
sentryUtils.forEachEnvelopeItem(envelope, item => {
1011
const [headers, body] = item;
1112

1213
if (headers.type === 'event') {
13-
event = body;
14+
event = body as sentryTypes.Event;
1415
}
1516
});
1617

17-
return normalize(event) as any | undefined;
18+
return normalize(event) as sentryTypes.Event | undefined;
1819
}
1920

2021
export function normalize(event: EventOrSession | undefined): EventOrSession | undefined {
@@ -23,14 +24,14 @@ export function normalize(event: EventOrSession | undefined): EventOrSession | u
2324
}
2425

2526
if (eventIsSession(event)) {
26-
return normalizeSession(event);
27+
return normalizeSession(event as sentryTypes.Session);
2728
} else {
28-
return normalizeEvent(event);
29+
return normalizeEvent(event as sentryTypes.Event);
2930
}
3031
}
3132

3233
export function eventIsSession(data: EventOrSession): boolean {
33-
return !!data?.sid;
34+
return !!(data as sentryTypes.Session)?.sid;
3435
}
3536

3637
/**
@@ -39,7 +40,7 @@ export function eventIsSession(data: EventOrSession): boolean {
3940
* All properties that are timestamps, versions, ids or variables that may vary
4041
* by platform are replaced with placeholder strings
4142
*/
42-
function normalizeSession(session: any): any {
43+
function normalizeSession(session: sentryTypes.Session): sentryTypes.Session {
4344
if (session.sid) {
4445
session.sid = '{{id}}';
4546
}
@@ -65,7 +66,7 @@ function normalizeSession(session: any): any {
6566
* All properties that are timestamps, versions, ids or variables that may vary
6667
* by platform are replaced with placeholder strings
6768
*/
68-
function normalizeEvent(event: any): any {
69+
function normalizeEvent(event: sentryTypes.Event): sentryTypes.Event {
6970
if (event.sdk?.version) {
7071
event.sdk.version = '{{version}}';
7172
}
@@ -153,7 +154,7 @@ function normalizeEvent(event: any): any {
153154
if (event.exception?.values?.[0].stacktrace?.frames) {
154155
// Exlcude Deno frames since these may change between versions
155156
event.exception.values[0].stacktrace.frames = event.exception.values[0].stacktrace.frames.filter(
156-
(frame: any) => !frame.filename?.includes('deno:'),
157+
frame => !frame.filename?.includes('deno:'),
157158
);
158159
}
159160

packages/deno/test/transport.ts

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,25 @@
1-
import { createTransport } from 'npm:@sentry/core';
2-
import type {
3-
BaseTransportOptions,
4-
Envelope,
5-
Transport,
6-
TransportMakeRequestResponse,
7-
TransportRequest,
8-
} from 'npm:@sentry/types';
9-
import { parseEnvelope } from 'npm:@sentry/utils';
1+
import type { sentryTypes } from '../build-test/index.js';
2+
import { sentryCore, sentryUtils } from '../build-test/index.js';
103

11-
export interface TestTransportOptions extends BaseTransportOptions {
12-
callback: (envelope: Envelope) => void;
4+
export interface TestTransportOptions extends sentryTypes.BaseTransportOptions {
5+
callback: (envelope: sentryTypes.Envelope) => void;
136
}
147

158
/**
169
* Creates a Transport that uses the Fetch API to send events to Sentry.
1710
*/
18-
export function makeTestTransport(callback: (envelope: Envelope) => void) {
19-
return (options: BaseTransportOptions): Transport => {
20-
async function doCallback(request: TransportRequest): Promise<TransportMakeRequestResponse> {
21-
await callback(parseEnvelope(request.body, new TextEncoder(), new TextDecoder()));
11+
export function makeTestTransport(callback: (envelope: sentryTypes.Envelope) => void) {
12+
return (options: sentryTypes.BaseTransportOptions): sentryTypes.Transport => {
13+
async function doCallback(
14+
request: sentryTypes.TransportRequest,
15+
): Promise<sentryTypes.TransportMakeRequestResponse> {
16+
await callback(sentryUtils.parseEnvelope(request.body, new TextEncoder(), new TextDecoder()));
2217

2318
return Promise.resolve({
2419
statusCode: 200,
2520
});
2621
}
2722

28-
return createTransport(options, doCallback);
23+
return sentryCore.createTransport(options, doCallback);
2924
};
3025
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"extends": "./tsconfig.json",
3+
"include": ["./lib.deno.d.ts", "test/build.ts"],
4+
"compilerOptions": {
5+
"declaration": true,
6+
"declarationMap": false,
7+
"emitDeclarationOnly": true,
8+
"outDir": "build-test"
9+
}
10+
}

0 commit comments

Comments
 (0)