Skip to content

Commit 99351c3

Browse files
authored
feat(node): Use node: prefix for node built-ins (#11895)
Cloudflare workers Node compatibility mode requires that all node built-ins are loaded with the `node:` prefix. `@sentry/node` still wont work in compat mode for now because our dependencies (ie. otel) are not using the prefix, I guess due to their current Node version support. They state that they support Node v14 but v14.18 is required to use the prefix.
1 parent 344cd9d commit 99351c3

25 files changed

+60
-47
lines changed

.size-limit.js

+13
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,19 @@ module.exports = [
194194
'node:http',
195195
'node:https',
196196
'node:diagnostics_channel',
197+
'node:perf_hooks',
198+
'node:worker_threads',
199+
'node:inspector',
200+
'node:path',
201+
'node:fs',
202+
'node:stream',
203+
'node:os',
204+
'node:net',
205+
'node:zlib',
206+
'node:child_process',
207+
'node:tls',
208+
'node:async_hooks',
209+
'node:util',
197210
'async_hooks',
198211
'child_process',
199212
'fs',

packages/node/src/integrations/anr/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1+
import * as inspector from 'node:inspector';
2+
import { Worker } from 'node:worker_threads';
13
import { defineIntegration, mergeScopeData } from '@sentry/core';
24
import type { Contexts, Event, EventHint, Integration, IntegrationFn, ScopeData } from '@sentry/types';
35
import { GLOBAL_OBJ, logger } from '@sentry/utils';
4-
import * as inspector from 'inspector';
5-
import { Worker } from 'worker_threads';
66
import { getCurrentScope, getGlobalScope, getIsolationScope } from '../..';
77
import { NODE_VERSION } from '../../nodeVersion';
88
import type { NodeClient } from '../../sdk/client';

packages/node/src/integrations/anr/worker.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { parentPort, workerData } from 'node:worker_threads';
12
import {
23
applyScopeDataToEvent,
34
createEventEnvelope,
@@ -15,7 +16,6 @@ import {
1516
watchdogTimer,
1617
} from '@sentry/utils';
1718
import { Session as InspectorSession } from 'inspector';
18-
import { parentPort, workerData } from 'worker_threads';
1919

2020
import { makeNodeTransport } from '../../transports';
2121
import { createGetModuleFromFilename } from '../../utils/module';

packages/node/src/integrations/console.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as util from 'util';
1+
import * as util from 'node:util';
22
import { addBreadcrumb, defineIntegration, getClient } from '@sentry/core';
33
import type { IntegrationFn } from '@sentry/types';
44
import { addConsoleInstrumentationHandler, severityLevelFromString } from '@sentry/utils';

packages/node/src/integrations/context.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { execFile } from 'child_process';
2-
import { readFile, readdir } from 'fs';
3-
import * as os from 'os';
4-
import { join } from 'path';
5-
import { promisify } from 'util';
1+
import { execFile } from 'node:child_process';
2+
import { readFile, readdir } from 'node:fs';
3+
import * as os from 'node:os';
4+
import { join } from 'node:path';
5+
import { promisify } from 'node:util';
66
import { defineIntegration } from '@sentry/core';
77
import type {
88
AppContext,

packages/node/src/integrations/contextlines.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { promises } from 'fs';
1+
import { promises } from 'node:fs';
22
import { defineIntegration } from '@sentry/core';
33
import type { Event, IntegrationFn, StackFrame } from '@sentry/types';
44
import { LRUMap, addContextToFrame } from '@sentry/utils';

packages/node/src/integrations/http.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { ClientRequest, IncomingMessage, ServerResponse } from 'http';
1+
import type { ClientRequest, IncomingMessage, ServerResponse } from 'node:http';
22
import type { Span } from '@opentelemetry/api';
33
import { SpanKind } from '@opentelemetry/api';
44
import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';

packages/node/src/integrations/local-variables/common.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
import type { Debugger } from 'node:inspector';
12
import type { StackFrame, StackParser } from '@sentry/types';
2-
import type { Debugger } from 'inspector';
33

44
export type Variables = Record<string, unknown>;
55

packages/node/src/integrations/local-variables/local-variables-async.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
import { Worker } from 'node:worker_threads';
12
import { defineIntegration } from '@sentry/core';
23
import type { Event, Exception, IntegrationFn } from '@sentry/types';
34
import { LRUMap, logger } from '@sentry/utils';
4-
import { Worker } from 'worker_threads';
55

66
import type { NodeClient } from '../../sdk/client';
77
import type { FrameVariables, LocalVariablesIntegrationOptions, LocalVariablesWorkerArgs } from './common';

packages/node/src/integrations/local-variables/local-variables-sync.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1+
import type { Debugger, InspectorNotification, Runtime } from 'node:inspector';
2+
import { Session } from 'node:inspector';
13
import { defineIntegration, getClient } from '@sentry/core';
24
import type { Event, Exception, IntegrationFn, StackParser } from '@sentry/types';
35
import { LRUMap, logger } from '@sentry/utils';
4-
import type { Debugger, InspectorNotification, Runtime } from 'inspector';
5-
import { Session } from 'inspector';
66

77
import { NODE_MAJOR } from '../../nodeVersion';
88
import type { NodeClient } from '../../sdk/client';

packages/node/src/integrations/local-variables/worker.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1+
import type { Debugger, InspectorNotification, Runtime } from 'node:inspector';
12
import { Session } from 'node:inspector/promises';
3+
import { parentPort, workerData } from 'node:worker_threads';
24
import type { StackParser } from '@sentry/types';
35
import { createStackParser, nodeStackLineParser } from '@sentry/utils';
4-
import type { Debugger, InspectorNotification, Runtime } from 'inspector';
5-
import { parentPort, workerData } from 'worker_threads';
66
import { createGetModuleFromFilename } from '../../utils/module';
77
import type { LocalVariablesWorkerArgs, PausedExceptionEvent, RateLimitIncrement, Variables } from './common';
88
import { createRateLimiter, hashFromStack } from './common';

packages/node/src/integrations/modules.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { existsSync, readFileSync } from 'fs';
2-
import { dirname, join } from 'path';
1+
import { existsSync, readFileSync } from 'node:fs';
2+
import { dirname, join } from 'node:path';
33
import { defineIntegration } from '@sentry/core';
44
import type { IntegrationFn } from '@sentry/types';
55

packages/node/src/integrations/spotlight.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as http from 'http';
1+
import * as http from 'node:http';
22
import { defineIntegration } from '@sentry/core';
33
import type { Client, Envelope, IntegrationFn } from '@sentry/types';
44
import { logger, serializeEnvelope } from '@sentry/utils';

packages/node/src/integrations/tracing/express.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type * as http from 'http';
1+
import type * as http from 'node:http';
22
import { ExpressInstrumentation } from '@opentelemetry/instrumentation-express';
33
import {
44
SEMANTIC_ATTRIBUTE_SENTRY_OP,

packages/node/src/proxy/base.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@
2929
/* eslint-disable @typescript-eslint/explicit-member-accessibility */
3030
/* eslint-disable @typescript-eslint/member-ordering */
3131
/* eslint-disable jsdoc/require-jsdoc */
32-
import * as http from 'http';
33-
import type * as net from 'net';
34-
import type { Duplex } from 'stream';
35-
import type * as tls from 'tls';
32+
import * as http from 'node:http';
33+
import type * as net from 'node:net';
34+
import type { Duplex } from 'node:stream';
35+
import type * as tls from 'node:tls';
3636

3737
export * from './helpers';
3838

packages/node/src/proxy/helpers.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
/* eslint-disable jsdoc/require-jsdoc */
3030
import * as http from 'node:http';
3131
import * as https from 'node:https';
32-
import type { Readable } from 'stream';
32+
import type { Readable } from 'node:stream';
3333

3434
export type ThenableRequest = http.ClientRequest & {
3535
then: Promise<http.IncomingMessage>['then'];

packages/node/src/proxy/index.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@
2828

2929
/* eslint-disable @typescript-eslint/explicit-member-accessibility */
3030
/* eslint-disable @typescript-eslint/no-unused-vars */
31-
import type * as http from 'http';
32-
import type { OutgoingHttpHeaders } from 'http';
33-
import * as net from 'net';
34-
import * as tls from 'tls';
31+
import type * as http from 'node:http';
32+
import type { OutgoingHttpHeaders } from 'node:http';
33+
import * as net from 'node:net';
34+
import * as tls from 'node:tls';
3535
import { logger } from '@sentry/utils';
3636
import { Agent } from './base';
3737
import type { AgentConnectOpts } from './base';

packages/node/src/proxy/parse-proxy-response.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828

2929
/* eslint-disable @typescript-eslint/explicit-function-return-type */
3030
/* eslint-disable jsdoc/require-jsdoc */
31-
import type { IncomingHttpHeaders } from 'http';
32-
import type { Readable } from 'stream';
31+
import type { IncomingHttpHeaders } from 'node:http';
32+
import type { Readable } from 'node:stream';
3333
import { logger } from '@sentry/utils';
3434

3535
function debug(...args: unknown[]): void {

packages/node/src/sdk/client.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as os from 'os';
1+
import * as os from 'node:os';
22
import type { Tracer } from '@opentelemetry/api';
33
import { trace } from '@opentelemetry/api';
44
import type { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';

packages/node/src/transports/http.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as http from 'node:http';
22
import * as https from 'node:https';
3-
import { Readable } from 'stream';
4-
import { createGzip } from 'zlib';
3+
import { Readable } from 'node:stream';
4+
import { createGzip } from 'node:zlib';
55
import { createTransport, suppressTracing } from '@sentry/core';
66
import type {
77
BaseTransportOptions,

packages/node/src/utils/getRequestUrl.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { RequestOptions } from 'http';
1+
import type { RequestOptions } from 'node:http';
22

33
/** Build a full URL from request options. */
44
export function getRequestUrl(requestOptions: RequestOptions): string {

packages/node/src/utils/module.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { posix, sep } from 'path';
1+
import { posix, sep } from 'node:path';
22
import { dirname } from '@sentry/utils';
33

44
/** normalizes Windows paths */

packages/node/test/integrations/contextlines.test.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
import { promises } from 'fs';
1+
import { promises } from 'node:fs';
22
import type { StackFrame } from '@sentry/types';
33
import { parseStackFrames } from '@sentry/utils';
44

55
import { _contextLinesIntegration, resetFileContentCache } from '../../src/integrations/contextlines';
66
import { defaultStackParser } from '../../src/sdk/api';
77
import { getError } from '../helpers/error';
88

9-
jest.mock('fs', () => {
10-
const actual = jest.requireActual('fs');
9+
jest.mock('node:fs', () => {
10+
const actual = jest.requireActual('node:fs');
1111
return {
1212
...actual,
1313
promises: {

packages/profiling-node/src/cpu_profiler.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { arch as _arch, platform as _platform } from 'os';
2-
import { join, resolve } from 'path';
1+
import { arch as _arch, platform as _platform } from 'node:os';
2+
import { join, resolve } from 'node:path';
3+
import { env, versions } from 'node:process';
4+
import { threadId } from 'node:worker_threads';
35
import { familySync } from 'detect-libc';
46
import { getAbi } from 'node-abi';
5-
import { env, versions } from 'process';
6-
import { threadId } from 'worker_threads';
77

88
import { GLOBAL_OBJ, logger } from '@sentry/utils';
99
import { DEBUG_BUILD } from './debug-build';

packages/profiling-node/src/utils.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import * as os from 'os';
1+
import * as os from 'node:os';
2+
import { env, versions } from 'node:process';
3+
import { isMainThread, threadId } from 'node:worker_threads';
24
import type { Client, Context, Envelope, Event, StackFrame, StackParser } from '@sentry/types';
3-
import { env, versions } from 'process';
4-
import { isMainThread, threadId } from 'worker_threads';
55

66
import { GLOBAL_OBJ, forEachEnvelopeItem, logger } from '@sentry/utils';
77

0 commit comments

Comments
 (0)