fix(editor): polyfill structuredClone for legacy browsers (Sentry MONOREPO-EDITOR-FB) - #524
fix(editor): polyfill structuredClone for legacy browsers (Sentry MONOREPO-EDITOR-FB)#524anton-pascal wants to merge 1 commit into
Conversation
|
Closing in favor of #577, which keeps your diagnosis and fixes it at the layer that actually loads. Your root-cause analysis was right and I reproduced all of it: The problem is the placement. This installs the polyfill in #577 puts the shim in
One process note for the nightly Sentry triage cron, since this pattern will recur: when a Sentry issue comes from the hosted app, the fix almost always belongs in a |
Summary
structuredClonepolyfill for browsers that do not provide the native APIinstrumentation-client.tsbefore the editor's client modules are evaluated@ungap/structured-cloneSentry issue
Sentry issue MONOREPO-EDITOR-FB shows the public viewer failing entirely on legacy Android browsers (including Honor Browser 9.8.0 / Chromium <98) with
ReferenceError: structuredClone is not defined.@pascal-app/lingo@0.2.0callsstructuredCloneduring module initialization throughregisterKind. The package is imported bypackages/editor/src/lib/measurement-parser.ts, so app-level component guards run too late. Installing the global fallback from the client instrumentation entry ensures it exists before the editor/lingo module graph is evaluated.Validation
bun install --frozen-lockfile✅Generated from the nightly Sentry triage cron.
Note
Low Risk
Small, guarded client bootstrap change with a well-known polyfill; native browsers are untouched and scope is limited to the editor app.
Overview
Fixes hard crashes on legacy browsers (e.g. older Android / Chromium <98) where
structuredCloneis missing and the editor fails during module load (Sentry MONOREPO-EDITOR-FB).The editor app now depends on
@ungap/structured-cloneand installs a guarded global fallback inlib/polyfills/structured-clone.ts(only whenglobalThis.structuredCloneis not a function). That polyfill is pulled in frominstrumentation-client.tsso it runs before the rest of the client bundle—important because dependencies such as@pascal-app/lingocan callstructuredCloneat import time.A local
ungap-structured-clone.d.tstypes the polyfill package for TypeScript.Reviewed by Cursor Bugbot for commit e380b05. Bugbot is set up for automated code reviews on this repo. Configure here.