diff --git a/packages/rrweb/src/record/observers/canvas/canvas-manager.ts b/packages/rrweb/src/record/observers/canvas/canvas-manager.ts index 23f072b0d5..4e379b9010 100644 --- a/packages/rrweb/src/record/observers/canvas/canvas-manager.ts +++ b/packages/rrweb/src/record/observers/canvas/canvas-manager.ts @@ -14,7 +14,7 @@ import { CanvasContext } from '@rrweb/types'; import initCanvas2DMutationObserver from './2d'; import initCanvasContextObserver from './canvas'; import initCanvasWebGLMutationObserver from './webgl'; -import ImageBitmapDataURLWorker from '../../workers/image-bitmap-data-url-worker?worker'; +import ImageBitmapDataURLWorker from '../../workers/image-bitmap-data-url-worker?worker&inline' import type { ImageBitmapDataURLRequestWorker } from '../../workers/image-bitmap-data-url-worker'; export type RafStamps = { latestId: number; invokeId: number | null }; diff --git a/turbo.json b/turbo.json index 54bd1b278f..6dbac94d2e 100644 --- a/turbo.json +++ b/turbo.json @@ -7,7 +7,7 @@ "vite.config.defaults.ts", "tsconfig.json" ], - "globalPassThroughEnv": ["PUPPETEER_HEADLESS"], + "globalPassThroughEnv": ["PUPPETEER_HEADLESS", "DISABLE_WORKER_INLINING"], "tasks": { "prepublish": { "dependsOn": ["^prepublish", "//#references:update"], diff --git a/vite.config.default.ts b/vite.config.default.ts index 4dd3cc496e..3405fbc951 100644 --- a/vite.config.default.ts +++ b/vite.config.default.ts @@ -2,13 +2,17 @@ import dts from 'vite-plugin-dts'; import { copyFileSync } from 'node:fs'; import { defineConfig, LibraryOptions, LibraryFormats, Plugin } from 'vite'; -import glob from 'fast-glob'; import { build, Format } from 'esbuild'; import { resolve } from 'path'; import { umdWrapper } from 'esbuild-plugin-umd-wrapper'; // don't empty out dir if --watch flag is passed const emptyOutDir = !process.argv.includes('--watch'); +/** + * Chrome web store does not allow base64 inline workers. + * For chrome extension, we need to disable worker inlining to pass the review. + */ +const disableWorkerInlining = process.env.DISABLE_WORKER_INLINING === 'true'; function minifyAndUMDPlugin({ name, @@ -157,6 +161,19 @@ export default function ( }, }), minifyAndUMDPlugin({ name, outDir }), + { + name: 'remove-worker-inline', + enforce: 'pre', + transform(code, id) { + if (!disableWorkerInlining) return; + if (/\.(js|ts|jsx|tsx)$/.test(id)) { + return { + code: code.replace(/\?worker&inline/g, '?worker'), + map: null, + }; + } + }, + }, ...plugins, ], }));