diff --git a/packages/replay-internal/package.json b/packages/replay-internal/package.json index 3051e3049190..4b11651f0d7f 100644 --- a/packages/replay-internal/package.json +++ b/packages/replay-internal/package.json @@ -7,6 +7,16 @@ "types": "build/npm/types/index.d.ts", "exports": { "./package.json": "./package.json", + "./worker-bundler": { + "import": { + "types": "./build/npm/types/worker-bundler.d.ts", + "default": "./build/npm/esm/worker-bundler.js" + }, + "require": { + "types": "./build/npm/types/worker-bundler.d.ts", + "default": "./build/npm/cjs/worker-bundler.js" + } + }, ".": { "import": { "types": "./build/npm/types/index.d.ts", diff --git a/packages/replay-internal/rollup.npm.config.mjs b/packages/replay-internal/rollup.npm.config.mjs index 3b4431fa6829..3d6e8fcf4dff 100644 --- a/packages/replay-internal/rollup.npm.config.mjs +++ b/packages/replay-internal/rollup.npm.config.mjs @@ -1,3 +1,4 @@ +import nodeResolve from '@rollup/plugin-node-resolve'; import { makeBaseNPMConfig, makeNPMConfigVariants } from '@sentry-internal/rollup-utils'; export default makeNPMConfigVariants( @@ -16,4 +17,15 @@ export default makeNPMConfigVariants( }, }, }), +).concat( + ['esm', 'cjs'].map(format => ({ + input: ['./src/worker-bundler.ts'], + output: { + file: `./build/npm/${format}/worker-bundler.js`, + strict: false, + format, + }, + treeshake: false, + plugins: [nodeResolve()], + })), ); diff --git a/packages/replay-internal/src/eventBuffer/index.ts b/packages/replay-internal/src/eventBuffer/index.ts index 3fc34330aead..d1e40903057d 100644 --- a/packages/replay-internal/src/eventBuffer/index.ts +++ b/packages/replay-internal/src/eventBuffer/index.ts @@ -1,13 +1,13 @@ import { getWorkerURL } from '@sentry-internal/replay-worker'; import { DEBUG_BUILD } from '../debug-build'; -import type { EventBuffer } from '../types'; +import type { EventBuffer, ReplayWorkerURL } from '../types'; import { logger } from '../util/logger'; import { EventBufferArray } from './EventBufferArray'; import { EventBufferProxy } from './EventBufferProxy'; interface CreateEventBufferParams { useCompression: boolean; - workerUrl?: string; + workerUrl?: ReplayWorkerURL; } // Treeshakable guard to remove the code of the included compression worker @@ -36,7 +36,7 @@ export function createEventBuffer({ return new EventBufferArray(); } -function _loadWorker(customWorkerUrl?: string): EventBufferProxy | void { +function _loadWorker(customWorkerUrl?: ReplayWorkerURL): EventBufferProxy | void { try { const workerUrl = customWorkerUrl || _getWorkerUrl(); diff --git a/packages/replay-internal/src/types/replay.ts b/packages/replay-internal/src/types/replay.ts index c5336dbe5d25..20d7e2abc38c 100644 --- a/packages/replay-internal/src/types/replay.ts +++ b/packages/replay-internal/src/types/replay.ts @@ -90,6 +90,8 @@ export interface ReplayNetworkOptions { networkResponseHeaders: string[]; } +export type ReplayWorkerURL = string | URL; + export interface ReplayPluginOptions extends ReplayNetworkOptions { /** * The sample rate for session-long replays. 1.0 will record all sessions and @@ -130,7 +132,7 @@ export interface ReplayPluginOptions extends ReplayNetworkOptions { * If defined, use this worker URL instead of the default included one for compression. * This will only be used if `useCompression` is not false. */ - workerUrl?: string; + workerUrl?: ReplayWorkerURL; /** * Block all media (e.g. images, svg, video) in recordings. diff --git a/packages/replay-internal/src/worker-bundler.ts b/packages/replay-internal/src/worker-bundler.ts new file mode 100644 index 000000000000..7a10edac4a89 --- /dev/null +++ b/packages/replay-internal/src/worker-bundler.ts @@ -0,0 +1 @@ +import '@sentry-internal/replay-worker/worker-bundler'; diff --git a/packages/replay-worker/package.json b/packages/replay-worker/package.json index 5215399743be..084ffb1b9d9a 100644 --- a/packages/replay-worker/package.json +++ b/packages/replay-worker/package.json @@ -5,6 +5,23 @@ "main": "build/esm/index.js", "module": "build/esm/index.js", "types": "build/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + "./worker-bundler": { + "types": "./build/types/worker-bundler.d.ts", + "default": "./build/esm/worker-bundler.js" + }, + ".": { + "import": { + "types": "./build/types/index.d.ts", + "default": "./build/esm/index.js" + }, + "require": { + "types": "./build/types/index.d.ts", + "default": "./build/cjs/index.js" + } + } + }, "typesVersions": { "<5.0": { "build/types/index.d.ts": [ diff --git a/packages/replay-worker/rollup.worker.config.mjs b/packages/replay-worker/rollup.worker.config.mjs index fd22c54298dc..556994570335 100644 --- a/packages/replay-worker/rollup.worker.config.mjs +++ b/packages/replay-worker/rollup.worker.config.mjs @@ -48,6 +48,24 @@ const config = defineConfig([ }, ], }, + { + input: ['./src/_worker.ts'], + output: { + file: './build/esm/worker-bundler.js', + format: 'esm', + }, + treeshake: 'smallest', + plugins: [ + commonjs(), + typescript({ tsconfig: './tsconfig.json', inlineSourceMap: false, sourceMap: false, inlineSources: false }), + resolve(), + terser({ + mangle: { + module: true, + }, + }), + ], + }, ]); export default config; diff --git a/packages/replay-worker/src/worker-bundler.ts b/packages/replay-worker/src/worker-bundler.ts new file mode 100644 index 000000000000..56ce80e6bf5a --- /dev/null +++ b/packages/replay-worker/src/worker-bundler.ts @@ -0,0 +1,3 @@ +// This is replaced at build-time with the content from _worker.ts +// This is just a placeholder so that types etc. are correct. +export {}; diff --git a/packages/replay-worker/tsconfig.types.json b/packages/replay-worker/tsconfig.types.json index 1a83cadfebcd..99004bd20579 100644 --- a/packages/replay-worker/tsconfig.types.json +++ b/packages/replay-worker/tsconfig.types.json @@ -1,6 +1,6 @@ { "extends": "./tsconfig.json", - "include": ["src/index.ts", "src/worker.ts"], + "include": ["src/index.ts", "src/worker.ts", "src/worker-bundler.ts"], "compilerOptions": { "declaration": true, "declarationMap": true,