Skip to content

feat(replay): record the natural size of images - #5302

Draft
MarconLP wants to merge 2 commits into
mainfrom
feat/rrweb-record-image-natural-size
Draft

MarconLP wants to merge 2 commits into
mainfrom
feat/rrweb-record-image-natural-size

Conversation

@MarconLP

Copy link
Copy Markdown
Member

Problem

A replay that cannot load a picture loses the space the page gave it.
The image URL may have expired, sit behind a login, or have been dropped by an anonymizer downstream.
A page often leaves an <img> unsized and lets the picture's own size set the box.
Without the picture, the replayed box either collapses or, when something substitutes a size-less placeholder, stretches to the width of its container and covers the content around it.

Nothing after the browser can recover that size: the recording carries only the URL, and once the bytes are gone the size is gone with them.
PostHog's ML labeling replays hit this daily. In one reported case a 20 px status icon in a quiz came back as a 436 px square and hid the answer below it.

Changes

  • Snapshot: an <img> that has already loaded is serialized with two numeric generated attributes, rr_naturalWidth and rr_naturalHeight.
  • Recorder: a capture-phase load listener on the document (initImageSizeObserver, under recordDOM) reports the size of an image that loads after it was serialized, or that loads a new src, as an attribute mutation carrying only those two numbers. It skips blocked images, unloaded or broken images (naturalWidth 0), and a size already recorded for that element.
  • Replay is unchanged: the replayer and rebuild already ignore unknown numeric rr_* attributes. The replayer's style branch now checks that the value is an object, since the mutation type widens to allow numbers.
  • Type: attributeMutation.attributes values widen to string | number | styleOMValue | null, like attributes already does for rr_scrollLeft and media state.
  • Cost: two numbers per loaded image, plus one small mutation when an image finishes loading after the snapshot. No layout reads: naturalWidth is the decoded image's size, not a measurement of the page.

A consumer can then size a stand-in for a picture it could not load, while the page's own CSS keeps priority. Using the size in PostHog's own player is left for a follow-up.

Release info Sub-libraries affected

Libraries affected

  • posthog-js (web)

Checklist

  • Tests for new code
  • Accounted for the impact of any changes across different platforms
  • Accounted for backwards compatibility of any changes (no breaking changes!)
  • Took care not to unnecessarily increase the bundle size

If releasing new changes

  • Ran pnpm changeset to generate a changeset file

How did you test this code?

  • New parameterized snapshot test: a loaded image gets the size; one still loading or broken gets none.
  • New recorder test in a real browser: an image added during recording reports its size once, and a later src change reports the new size once. It passed 5 of 5 runs.
  • The robot.png integration expectation and three blob-url recorder snapshots gained exactly the new size (the snapshot diff adds only those mutations).
  • rrweb, rrweb-snapshot and record/integration suites, check-types across the dependents including posthog-js, and oxlint pass locally.

🤖 Agent context

Autonomy: Human-driven (agent-assisted)

  • Claude Code traced a labeling-replay report to a missing picture whose size no stage of the pipeline kept, and confirmed the recorder is the only place that knows it.
  • A fixed placeholder size in the consumer was tried and rejected first: it fixed icons but collapsed large pictures.
  • Left in draft until the Replay team has looked at the approach.

@MarconLP

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-14T22:34:51.756033Z c0a5249 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Replay incident risk check

This diff touches code involved in past incidents. This is a heads-up, not a verdict: read the matched sections of INCIDENTS.md and answer their review questions before merging.

For a judgment on whether this diff has the same failure mode, run the replay-incident-risk skill locally: open a Claude session in the repo root and ask it to review your diff with that skill. Or run node .agents/skills/replay-incident-risk/check.mjs and answer the review questions for each matched class yourself.

Matched 3 past incident pattern(s) (diff vs origin/main):

## rrweb serialization and snapshot correctness [path match]
Serializer bugs corrupt replays silently: no exception, no volume change. In May 2026 a cssText spec quirk silently dropped layout styles for sites using CSS custom properties. Test against framework-generated CSS (Chakra/Panda, Emotion speedy, Tailwind) in a real browser.
  Touched paths:
    - packages/rrweb/rrweb-snapshot/src/snapshot.ts
    - packages/rrweb/rrweb-snapshot/test/integration.test.ts
    - packages/rrweb/rrweb-snapshot/test/snapshot.test.ts
    - packages/rrweb/rrweb/src/record/observer.ts
    - packages/rrweb/rrweb/src/record/shadow-dom-manager.ts
    - packages/rrweb/rrweb/test/__snapshots__/integration.test.ts.snap
    - packages/rrweb/rrweb/test/record.test.ts
  Read: .agents/skills/replay-incident-risk/INCIDENTS.md#class-4-rrweb-serialization-and-snapshot-correctness

## Replay reconstruction and player security [path match]
Recorded page content is untrusted input. Anything the replayer places in the top-level document sits outside the sandbox iframe: copying recorded attributes without an allowlist caused a stored XSS via canvas onerror (Jul 2026). Never copy on* handlers or src/srcset/href you did not construct.
  Touched paths:
    - packages/rrweb/rrweb/src/replay/index.ts
  Read: .agents/skills/replay-incident-risk/INCIDENTS.md#class-5-replay-reconstruction-and-player-security

## Masking, privacy, and consent [path match]
A masking or consent regression records data customers promised their users we would not store: passwords, PII, opted-out sessions. Nothing throws and no volume moves, so no alert can fire, and recorded data cannot be un-stored. Add a real-browser test asserting the sensitive value is absent from the emitted snapshot bytes.
  Touched paths:
    - packages/rrweb/rrweb-snapshot/src/snapshot.ts
    - packages/rrweb/rrweb-snapshot/test/integration.test.ts
    - packages/rrweb/rrweb-snapshot/test/snapshot.test.ts
  Read: .agents/skills/replay-incident-risk/INCIDENTS.md#class-8-masking-privacy-and-consent-proactive-no-incident-yet

This check is advisory. It flags resemblance to past incidents, not correctness.
For a judgment pass on whether this diff has the same failure mode, run the
`replay-incident-risk` skill in a Claude session from the repo root, or answer the
review questions in the matched sections of .agents/skills/replay-incident-risk/INCIDENTS.md yourself.

@posthog posthog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PostHog Review · Standard · reviewed c0a5249: 2 Should fix.

This is the only automatic review while this pull request is a draft. Comment @posthog review to review new changes sooner. Otherwise, a review of the new changes runs when you mark it ready for review.

adds: [],
});
});
return on('load', handler, doc);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 · Observe image loads inside recorded shadow roots

For images inside recorded shadow roots, native load events are not composed and never reach this document listener. ShadowDomManager does not install an image observer, so images that load after serialization never receive natural-size attributes, including after src changes. Install the load observer on each tracked shadow root too.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 699d6ed. initImageSizeObserver is now exported, and ShadowDomManager.addShadowRoot installs it on each tracked shadow root (listening for load and error) and removes it with that root's other handlers. A new record test covers an image in a shadow root that loads after serialization.

Comment on lines +1379 to +1380
if ((reported.get(image) ?? serialized) === size) return;
reported.set(image, size);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 · Reset size deduplication when an image is serialized again

When a previously reported image loads a different source while detached and is then reinserted, serializeNodeWithId records its new size but reported retains the old size. Switching back to the old size returns here without emitting, leaving the recording with incorrect dimensions. Scope deduplication to the current serialized metadata or synchronize it during serialization.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 699d6ed. The dedup cache now stores the serialized node (mirror.getMeta) next to the reported size and is used only while that node is still current. Once an image is serialized again, the comparison starts from the size the new serialization recorded, so switching back to an earlier size is emitted.

@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

Coherence

4 spec problems · 0 failing chokepoints · 2 spec gaps · 0 guard failures

44 components, 7 bullets (5 invariants, 2 requirements), 4 problems

Spec problems (spec --check)

  • packages/ai/src/otel/Otel.spec.md:7 an invariant bullet starts with <name>: <sentence>
  • packages/ai/src/otel/Otel.spec.md:8 an invariant bullet starts with <name>: <sentence>
  • Posthog-js.practice.md:20 practice add an invariant cites 187a5c5, which is no commit in this repository
  • Posthog-js.practice.md:20 practice add an invariant cites 8922ab2, which is no commit in this repository

Chokepoints: none declared.

Spec gaps: 2 entrances with outside or unknown trust and no traced control, and 10 more held by the adoption baseline

  • packages/web/Web.spec.md entrance public api (trust host-app): packages/web
  • packages/webpack-plugin/Webpack-plugin.spec.md entrance webpack plugin (trust build): packages/webpack-plugin

Close one with guard: <chokepoint>, an invariant that names it on its entrances: line, or control: none — <reason>; scaffold control proposes it.

@greptile-apps

greptile-apps Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in Greptile

[Medium impact] Records image dimensions during session replay.

The PR appears safe to merge, with non-blocking gaps in image-size capture.

Reviews (1) · Last reviewed commit: "feat(replay): record the natural size of..." · Reviewed by Greptile

adds: [],
});
});
return on('load', handler, doc);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Shadow images miss their size

Image load events inside shadow roots do not reach this document listener. Images that load after serialization inside web components never get their natural size recorded, leaving consumers without dimensions when the picture is unavailable during replay. Install the observer on each recorded shadow root and remove it with that root’s other listeners.

Knowledge Base Used: Session replay recording and playback

Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/rrweb/rrweb/src/record/observer.ts
Line: 1396

Comment:
**Shadow images miss their size**

Image `load` events inside shadow roots do not reach this document listener. Images that load after serialization inside web components never get their natural size recorded, leaving consumers without dimensions when the picture is unavailable during replay. Install the observer on each recorded shadow root and remove it with that root’s other listeners.

**Knowledge Base Used:** [Session replay recording and playback](https://app.greptile.com/posthog-org-19734/-/custom-context/knowledge-base/posthog/posthog-js/-/docs/session-replay.md)

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 699d6ed. initImageSizeObserver is now exported, and ShadowDomManager.addShadowRoot installs it on each tracked shadow root (listening for load and error) and removes it with that root's other handlers. A new record test covers an image in a shadow root that loads after serialization.

Comment on lines +1378 to +1379
const serialized = `${meta.attributes.rr_naturalWidth}x${meta.attributes.rr_naturalHeight}`;
if ((reported.get(image) ?? serialized) === size) return;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Reused images keep stale sizes

The reported cache survives when an image is serialized again and overrides the newer size in meta.attributes. For example, report size A, detach the image, load size B while detached, and reinsert it. The added node records B, but a later load of A is skipped because reported still contains A. Consumers then retain the wrong dimensions. Track the serialized metadata alongside the cached size, or reset the cache when that metadata changes.

Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/rrweb/rrweb/src/record/observer.ts
Line: 1378-1379

Comment:
**Reused images keep stale sizes**

The `reported` cache survives when an image is serialized again and overrides the newer size in `meta.attributes`. For example, report size A, detach the image, load size B while detached, and reinsert it. The added node records B, but a later load of A is skipped because `reported` still contains A. Consumers then retain the wrong dimensions. Track the serialized metadata alongside the cached size, or reset the cache when that metadata changes.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 699d6ed. The dedup cache now stores the serialized node (mirror.getMeta) next to the reported size and is used only while that node is still current. Once an image is serialized again, the comparison starts from the size the new serialization recorded, so switching back to an earlier size is emitted.

const serialized = `${meta.attributes.rr_naturalWidth}x${meta.attributes.rr_naturalHeight}`;
if ((reported.get(image) ?? serialized) === size) return;
reported.set(image, size);
mutationCb({

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Image changes arrive out of order

Calling mutationCb directly bypasses freezePage(). If an existing image changes src and loads while mutations are frozen, its new size is emitted immediately while the src change stays buffered. Consumers receive the new dimensions against the old source. Queue these attributes through the mutation buffer so they stay ordered with the image’s other changes.

Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/rrweb/rrweb/src/record/observer.ts
Line: 1381

Comment:
**Image changes arrive out of order**

Calling `mutationCb` directly bypasses `freezePage()`. If an existing image changes `src` and loads while mutations are frozen, its new size is emitted immediately while the `src` change stays buffered. Consumers receive the new dimensions against the old source. Queue these attributes through the mutation buffer so they stay ordered with the image’s other changes.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not changing this. freezePage is only reached through the public record.freezePage() API, and the first user-initiated event unfreezes the buffers. Other recorder sources that bypass the mutation buffer (media interactions, canvas mutations, fonts) already emit during a freeze the same way. Within a freeze window the replay can briefly show the new size against the old src, but once the buffered src mutation flushes the final state is the same, and the size describes the image that actually loaded. Routing this through MutationBuffer would mean injecting synthetic attribute records into a queue built around observed DOM mutations, which costs more than this short window is worth.

@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Size Change: +36.8 kB (+0.15%)

Total Size: 24.2 MB

📦 View Changed
Filename Size Change
packages/browser/dist/all-external-dependencies.js 385 kB +1.02 kB (+0.27%)
packages/browser/dist/array.full.js 675 kB +1.02 kB (+0.15%)
packages/browser/dist/array.full.no-********.js 740 kB +1.02 kB (+0.14%)
packages/browser/dist/lazy-********.js 216 kB +1.02 kB (+0.47%)
packages/browser/dist/module.full.cjs 680 kB +1.02 kB (+0.15%)
packages/browser/dist/module.full.js 679 kB +1.02 kB (+0.15%)
packages/browser/dist/module.full.no-********.cjs 745 kB +1.02 kB (+0.14%)
packages/browser/dist/module.full.no-********.js 745 kB +1.02 kB (+0.14%)
packages/browser/dist/posthog-********.js 216 kB +1.02 kB (+0.47%)
packages/browser/dist/recorder-v2.js 136 kB +1.02 kB (+0.75%)
packages/browser/dist/recorder.js 136 kB +1.02 kB (+0.75%)
packages/browser/dist/rrweb.js 328 kB +1.04 kB (+0.32%)
packages/rrweb/all/dist/rrweb-all.cjs 660 kB +2.29 kB (+0.35%)
packages/rrweb/all/dist/rrweb-all.js 659 kB +2.29 kB (+0.35%)
packages/rrweb/all/dist/rrweb-all.umd.cjs 689 kB +2.03 kB (+0.3%)
packages/rrweb/all/dist/rrweb-all.umd.min.cjs 340 kB +1.02 kB (+0.3%)
packages/rrweb/record/dist/rrweb-record.cjs 228 kB +2.26 kB (+1%)
packages/rrweb/record/dist/rrweb-record.js 228 kB +2.26 kB (+1%)
packages/rrweb/record/dist/rrweb-record.umd.cjs 231 kB +2 kB (+0.87%)
packages/rrweb/record/dist/rrweb-record.umd.min.cjs 113 kB +1 kB (+0.89%)
packages/rrweb/replay/dist/rrweb-replay.cjs 436 kB +29 B (+0.01%)
packages/rrweb/replay/dist/rrweb-replay.js 436 kB +29 B (+0.01%)
packages/rrweb/replay/dist/rrweb-replay.umd.cjs 459 kB +29 B (+0.01%)
packages/rrweb/replay/dist/rrweb-replay.umd.min.cjs 228 kB +20 B (+0.01%)
packages/rrweb/rrweb-snapshot/dist/record.umd.cjs 95.3 kB +363 B (+0.38%)
packages/rrweb/rrweb-snapshot/dist/record.umd.min.cjs 44.8 kB +173 B (+0.39%)
packages/rrweb/rrweb-snapshot/dist/rrweb-********.umd.cjs 250 kB +363 B (+0.15%)
packages/rrweb/rrweb-snapshot/dist/rrweb-********.umd.min.cjs 112 kB +173 B (+0.15%)
packages/rrweb/rrweb-snapshot/dist/snapshot-********.cjs 35.4 kB +311 B (+0.89%)
packages/rrweb/rrweb-snapshot/dist/snapshot-********.js 33.5 kB +311 B (+0.94%)
packages/rrweb/rrweb/dist/rrweb.cjs 645 kB +2.29 kB (+0.36%)
packages/rrweb/rrweb/dist/rrweb.js 644 kB +2.29 kB (+0.36%)
packages/rrweb/rrweb/dist/rrweb.umd.cjs 671 kB +2.03 kB (+0.3%)
packages/rrweb/rrweb/dist/rrweb.umd.min.cjs 331 kB +1.02 kB (+0.31%)
ℹ️ View Unchanged
Filename Size
packages/ai/dist/adk/index.cjs 35.8 kB
packages/ai/dist/adk/index.mjs 35.6 kB
packages/ai/dist/anthropic/index.cjs 35.6 kB
packages/ai/dist/anthropic/index.mjs 34.2 kB
packages/ai/dist/claude-agent-sdk/index.cjs 42.4 kB
packages/ai/dist/claude-agent-sdk/index.mjs 42.1 kB
packages/ai/dist/gemini/index.cjs 36 kB
packages/ai/dist/gemini/index.mjs 35.7 kB
packages/ai/dist/index.cjs 59.1 kB
packages/ai/dist/index.mjs 58.9 kB
packages/ai/dist/langchain/index.cjs 37.5 kB
packages/ai/dist/langchain/index.mjs 37.3 kB
packages/ai/dist/langchain/middleware/index.cjs 43.6 kB
packages/ai/dist/langchain/middleware/index.mjs 43.2 kB
packages/ai/dist/openai-agents/index.cjs 30.7 kB
packages/ai/dist/openai-agents/index.mjs 30.6 kB
packages/ai/dist/openai/index.cjs 79 kB
packages/ai/dist/openai/index.mjs 78.4 kB
packages/ai/dist/otel/index.cjs 18.9 kB
packages/ai/dist/otel/index.mjs 18.6 kB
packages/ai/dist/vercel/index.cjs 41 kB
packages/ai/dist/vercel/index.mjs 40.9 kB
packages/browser-common/dist/client.js 585 B
packages/browser-common/dist/client.mjs 12 B
packages/browser-common/dist/config.js 1.52 kB
packages/browser-common/dist/config.mjs 216 B
packages/browser-common/dist/console-logs.js 13 kB
packages/browser-common/dist/console-logs.mjs 11.3 kB
packages/browser-common/dist/constants.js 6.09 kB
packages/browser-common/dist/constants.mjs 1.82 kB
packages/browser-common/dist/disposable.js 1.72 kB
packages/browser-common/dist/disposable.mjs 386 B
packages/browser-common/dist/extension-runtime.js 3.17 kB
packages/browser-common/dist/extension-runtime.mjs 1.83 kB
packages/browser-common/dist/extension-tokens.js 1.44 kB
packages/browser-common/dist/extension-tokens.mjs 98 B
packages/browser-common/dist/extension.js 585 B
packages/browser-common/dist/extension.mjs 12 B
packages/browser-common/dist/feature-flags-config.js 585 B
packages/browser-common/dist/feature-flags-config.mjs 12 B
packages/browser-common/dist/feature-flags.js 60.8 kB
packages/browser-common/dist/feature-flags.mjs 54.6 kB
packages/browser-common/dist/index.js 3.44 kB
packages/browser-common/dist/index.mjs 200 B
packages/browser-common/dist/logs-config.js 3.35 kB
packages/browser-common/dist/logs-config.mjs 1.99 kB
packages/browser-common/dist/logs-types.js 1.46 kB
packages/browser-common/dist/logs-types.mjs 133 B
packages/browser-common/dist/logs.js 20 kB
packages/browser-common/dist/logs.mjs 18.1 kB
packages/browser-common/dist/persistence.js 585 B
packages/browser-common/dist/persistence.mjs 12 B
packages/browser-common/dist/pubsub.js 2.63 kB
packages/browser-common/dist/pubsub.mjs 1.35 kB
packages/browser-common/dist/token.js 585 B
packages/browser-common/dist/token.mjs 12 B
packages/browser-common/dist/types/compression.js 1.37 kB
packages/browser-common/dist/types/compression.mjs 93 B
packages/browser-common/dist/types/feature-flags.js 585 B
packages/browser-common/dist/types/feature-flags.mjs 12 B
packages/browser-common/dist/types/index.js 4.16 kB
packages/browser-common/dist/types/index.mjs 181 B
packages/browser-common/dist/types/network-recording.js 585 B
packages/browser-common/dist/types/network-recording.mjs 12 B
packages/browser-common/dist/types/remote-config.js 585 B
packages/browser-common/dist/types/remote-config.mjs 12 B
packages/browser-common/dist/types/surveys.js 4.61 kB
packages/browser-common/dist/types/surveys.mjs 2.17 kB
packages/browser-common/dist/utils/array-at-********.js 619 B
packages/browser-common/dist/utils/array-at-********.mjs 437 B
packages/browser-common/dist/utils/array-find-last-********.js 604 B
packages/browser-common/dist/utils/array-find-last-********.mjs 422 B
packages/browser-common/dist/utils/autocapture-utils.js 26.5 kB
packages/browser-common/dist/utils/autocapture-utils.mjs 20.3 kB
packages/browser-common/dist/utils/blocked-uas.js 2.2 kB
packages/browser-common/dist/utils/blocked-uas.mjs 598 B
packages/browser-common/dist/utils/console-********.js 1.49 kB
packages/browser-common/dist/utils/console-********.mjs 171 B
packages/browser-common/dist/utils/cookie-utils.js 1.99 kB
packages/browser-common/dist/utils/cookie-utils.mjs 673 B
packages/browser-common/dist/utils/device-model-utils.js 2.08 kB
packages/browser-common/dist/utils/device-model-utils.mjs 678 B
packages/browser-common/dist/utils/element-utils.js 2.56 kB
packages/browser-common/dist/utils/element-utils.mjs 804 B
packages/browser-common/dist/utils/elements-chain-utils.js 2.86 kB
packages/browser-common/dist/utils/elements-chain-utils.mjs 1.23 kB
packages/browser-common/dist/utils/encode-utils.js 1.49 kB
packages/browser-common/dist/utils/encode-utils.mjs 205 B
packages/browser-common/dist/utils/event-utils.js 16 kB
packages/browser-common/dist/utils/event-utils.mjs 10.1 kB
packages/browser-common/dist/utils/general-utils.js 7.83 kB
packages/browser-common/dist/utils/general-utils.mjs 4.77 kB
packages/browser-common/dist/utils/globals.js 2.83 kB
packages/browser-common/dist/utils/globals.mjs 842 B
packages/browser-common/dist/utils/logger.js 3.41 kB
packages/browser-common/dist/utils/logger.mjs 1.62 kB
packages/browser-common/dist/utils/matcher-utils.js 2.94 kB
packages/browser-common/dist/utils/matcher-utils.mjs 1.33 kB
packages/browser-common/dist/utils/patch.js 2.94 kB
packages/browser-common/dist/utils/patch.mjs 1.62 kB
packages/browser-common/dist/utils/promise-utils.js 1.45 kB
packages/browser-common/dist/utils/promise-utils.mjs 169 B
packages/browser-common/dist/utils/property-utils.js 3.63 kB
packages/browser-common/dist/utils/property-utils.mjs 1.6 kB
packages/browser-common/dist/utils/prototype-utils.js 3.61 kB
packages/browser-common/dist/utils/prototype-utils.mjs 1.86 kB
packages/browser-common/dist/utils/regex-utils.js 1.55 kB
packages/browser-common/dist/utils/regex-utils.mjs 71 B
packages/browser-common/dist/utils/request-reachability.js 2.55 kB
packages/browser-common/dist/utils/request-reachability.mjs 996 B
packages/browser-common/dist/utils/request-utils.js 6.53 kB
packages/browser-common/dist/utils/request-utils.mjs 3.76 kB
packages/browser-common/dist/utils/sanitize-url.js 1.76 kB
packages/browser-common/dist/utils/sanitize-url.mjs 475 B
packages/browser-common/dist/utils/simple-event-emitter.js 1.86 kB
packages/browser-common/dist/utils/simple-event-emitter.mjs 553 B
packages/browser-common/dist/utils/stylesheet-loader.js 2.23 kB
packages/browser-common/dist/utils/stylesheet-loader.mjs 823 B
packages/browser-common/dist/utils/timezone.js 1.44 kB
packages/browser-common/dist/utils/timezone.mjs 163 B
packages/browser-common/dist/utils/type-utils.js 1.68 kB
packages/browser-common/dist/utils/type-utils.mjs 258 B
packages/browser-common/dist/utils/url-targeting-utils.js 2.45 kB
packages/browser-common/dist/utils/url-targeting-utils.mjs 863 B
packages/browser-common/dist/utils/uuidv7.js 6.98 kB
packages/browser-common/dist/utils/uuidv7.mjs 5.37 kB
packages/browser-next/dist/analytics-********.js 1.95 kB
packages/browser-next/dist/analytics-********.mjs 273 B
packages/browser-next/dist/analytics-buffer.js 5.72 kB
packages/browser-next/dist/analytics-buffer.mjs 4.07 kB
packages/browser-next/dist/analytics-options.js 585 B
packages/browser-next/dist/analytics-options.mjs 12 B
packages/browser-next/dist/analytics.js 1.67 kB
packages/browser-next/dist/analytics.mjs 259 B
packages/browser-next/dist/automatic-analytics.js 1.64 kB
packages/browser-next/dist/automatic-analytics.mjs 298 B
packages/browser-next/dist/bot-filter.js 2.38 kB
packages/browser-next/dist/bot-filter.mjs 1.09 kB
packages/browser-next/dist/browser-client.js 585 B
packages/browser-next/dist/browser-client.mjs 12 B
packages/browser-next/dist/capture-summary.js 2.14 kB
packages/browser-next/dist/capture-summary.mjs 647 B
packages/browser-next/dist/capture-v1.js 29.6 kB
packages/browser-next/dist/capture-v1.mjs 26.9 kB
packages/browser-next/dist/core.js 1.96 kB
packages/browser-next/dist/core.mjs 244 B
packages/browser-next/dist/event-buffer.js 5.32 kB
packages/browser-next/dist/event-buffer.mjs 4.04 kB
packages/browser-next/dist/extensions/registry.js 4.42 kB
packages/browser-next/dist/extensions/registry.mjs 3.12 kB
packages/browser-next/dist/flags-options.js 585 B
packages/browser-next/dist/flags-options.mjs 12 B
packages/browser-next/dist/flags-token.js 1.4 kB
packages/browser-next/dist/flags-token.mjs 80 B
packages/browser-next/dist/flags.js 6.22 kB
packages/browser-next/dist/flags.mjs 4.65 kB
packages/browser-next/dist/id.js 2.25 kB
packages/browser-next/dist/id.mjs 983 B
packages/browser-next/dist/index.js 4.37 kB
packages/browser-next/dist/index.mjs 2.42 kB
packages/browser-next/dist/lane.js 15.1 kB
packages/browser-next/dist/lane.mjs 13.8 kB
packages/browser-next/dist/logger.js 2.08 kB
packages/browser-next/dist/logger.mjs 742 B
packages/browser-next/dist/logs-********.js 585 B
packages/browser-next/dist/logs-********.mjs 12 B
packages/browser-next/dist/logs-options.js 1.84 kB
packages/browser-next/dist/logs-options.mjs 529 B
packages/browser-next/dist/logs.js 5.33 kB
packages/browser-next/dist/logs.mjs 3.83 kB
packages/browser-next/dist/named-error.js 1.57 kB
packages/browser-next/dist/named-error.mjs 271 B
packages/browser-next/dist/posthog.js 33.7 kB
packages/browser-next/dist/posthog.mjs 31.2 kB
packages/browser-next/dist/rate-limiter.js 2.89 kB
packages/browser-next/dist/rate-limiter.mjs 1.58 kB
packages/browser-next/dist/remote-config.js 1.85 kB
packages/browser-next/dist/remote-config.mjs 483 B
packages/browser-next/dist/request.js 4.99 kB
packages/browser-next/dist/request.mjs 3.58 kB
packages/browser-next/dist/state.js 24.9 kB
packages/browser-next/dist/state.mjs 23.1 kB
packages/browser-next/dist/types.js 585 B
packages/browser-next/dist/types.mjs 12 B
packages/browser-next/dist/version.js 1.31 kB
packages/browser-next/dist/version.mjs 45 B
packages/browser/dist/array.full.es5.js 538 kB
packages/browser/dist/array.js 334 kB
packages/browser/dist/array.no-********.js 379 kB
packages/browser/dist/conversations.js 71 kB
packages/browser/dist/crisp-chat-integration.js 1.66 kB
packages/browser/dist/customizations.full.js 19.4 kB
packages/browser/dist/customizations.js 19 kB
packages/browser/dist/dead-clicks-autocapture.js 23.9 kB
packages/browser/dist/default-extensions.js 332 kB
packages/browser/dist/element-inference.js 5.28 kB
packages/browser/dist/exception-autocapture.js 17.9 kB
packages/browser/dist/extension-bundles.js 186 kB
packages/browser/dist/external-scripts-loader.js 3.28 kB
packages/browser/dist/intercom-integration.js 1.71 kB
packages/browser/dist/logs.js 7.21 kB
packages/browser/dist/main.js 339 kB
packages/browser/dist/module.js 338 kB
packages/browser/dist/module.mjs 338 kB
packages/browser/dist/module.no-********.cjs 383 kB
packages/browser/dist/module.no-********.js 383 kB
packages/browser/dist/module.slim.js 153 kB
packages/browser/dist/module.slim.no-********.js 168 kB
packages/browser/dist/product-tours-preview.js 78.3 kB
packages/browser/dist/product-tours.js 122 kB
packages/browser/dist/rrweb-plugin-console-record.js 7.94 kB
packages/browser/dist/rrweb-types.js 2.41 kB
packages/browser/dist/surveys-preview.js 78.3 kB
packages/browser/dist/surveys.js 102 kB
packages/browser/dist/tracing-headers.js 4.71 kB
packages/browser/dist/web-vitals-soft-navs.js 11.1 kB
packages/browser/dist/web-vitals-with-attribution-soft-navs.js 27 kB
packages/browser/dist/web-vitals-with-attribution.js 27 kB
packages/browser/dist/web-vitals.js 11 kB
packages/browser/react/dist/esm/index.js 23.3 kB
packages/browser/react/dist/esm/slim/index.js 19.5 kB
packages/browser/react/dist/esm/surveys/index.js 4.22 kB
packages/browser/react/dist/umd/index.js 27.8 kB
packages/browser/react/dist/umd/slim/index.js 23.5 kB
packages/browser/react/dist/umd/surveys/index.js 6.33 kB
packages/convex/dist/client/feature-flags/crypto.js 76 B
packages/convex/dist/client/feature-flags/evaluator.js 15.1 kB
packages/convex/dist/client/feature-flags/index.js 196 B
packages/convex/dist/client/feature-flags/match-********.js 5.3 kB
packages/convex/dist/client/feature-flags/types.js 44 B
packages/convex/dist/client/index.js 14.8 kB
packages/convex/dist/component/_generated/api.js 712 B
packages/convex/dist/component/_generated/component.js 212 B
packages/convex/dist/component/_generated/dataModel.js 230 B
packages/convex/dist/component/_generated/server.js 3.74 kB
packages/convex/dist/component/convex.config.js 1.66 kB
packages/convex/dist/component/crons.js 969 B
packages/convex/dist/component/lib.js 24.9 kB
packages/convex/dist/component/schema.js 1.17 kB
packages/convex/dist/component/version.js 67 B
packages/core/dist/cookie.js 5.44 kB
packages/core/dist/cookie.mjs 3.12 kB
packages/core/dist/error-tracking/chunk-ids.js 3.44 kB
packages/core/dist/error-tracking/chunk-ids.mjs 2.11 kB
packages/core/dist/error-tracking/coercers/dom-exception-coercer.js 2.4 kB
packages/core/dist/error-tracking/coercers/dom-exception-coercer.mjs 993 B
packages/core/dist/error-tracking/coercers/error-coercer.js 2.58 kB
packages/core/dist/error-tracking/coercers/error-coercer.mjs 1.24 kB
packages/core/dist/error-tracking/coercers/error-event-coercer.js 2.45 kB
packages/core/dist/error-tracking/coercers/error-event-coercer.mjs 1.05 kB
packages/core/dist/error-tracking/coercers/event-coercer.js 1.92 kB
packages/core/dist/error-tracking/coercers/event-coercer.mjs 548 B
packages/core/dist/error-tracking/coercers/index.js 5.82 kB
packages/core/dist/error-tracking/coercers/index.mjs 326 B
packages/core/dist/error-tracking/coercers/object-coercer.js 4.13 kB
packages/core/dist/error-tracking/coercers/object-coercer.mjs 2.53 kB
packages/core/dist/error-tracking/coercers/primitive-coercer.js 1.76 kB
packages/core/dist/error-tracking/coercers/primitive-coercer.mjs 419 B
packages/core/dist/error-tracking/coercers/promise-rejection-event.js 2.69 kB
packages/core/dist/error-tracking/coercers/promise-rejection-event.mjs 1.25 kB
packages/core/dist/error-tracking/coercers/string-coercer.js 2.11 kB
packages/core/dist/error-tracking/coercers/string-coercer.mjs 820 B
packages/core/dist/error-tracking/coercers/utils.js 2.16 kB
packages/core/dist/error-tracking/coercers/utils.mjs 716 B
packages/core/dist/error-tracking/error-properties-builder.js 10.1 kB
packages/core/dist/error-tracking/error-properties-builder.mjs 8.58 kB
packages/core/dist/error-tracking/exception-steps.js 6.1 kB
packages/core/dist/error-tracking/exception-steps.mjs 3.83 kB
packages/core/dist/error-tracking/index.js 4.62 kB
packages/core/dist/error-tracking/index.mjs 222 B
packages/core/dist/error-tracking/parsers/base.js 2.43 kB
packages/core/dist/error-tracking/parsers/base.mjs 961 B
packages/core/dist/error-tracking/parsers/chrome.js 2.83 kB
packages/core/dist/error-tracking/parsers/chrome.mjs 1.32 kB
packages/core/dist/error-tracking/parsers/gecko.js 2.57 kB
packages/core/dist/error-tracking/parsers/gecko.mjs 1.13 kB
packages/core/dist/error-tracking/parsers/index.js 8.87 kB
packages/core/dist/error-tracking/parsers/index.mjs 6.03 kB
packages/core/dist/error-tracking/parsers/node.js 4.31 kB
packages/core/dist/error-tracking/parsers/node.mjs 2.95 kB
packages/core/dist/error-tracking/parsers/opera.js 2.35 kB
packages/core/dist/error-tracking/parsers/opera.mjs 746 B
packages/core/dist/error-tracking/parsers/safari.js 1.98 kB
packages/core/dist/error-tracking/parsers/safari.mjs 574 B
packages/core/dist/error-tracking/parsers/winjs.js 1.82 kB
packages/core/dist/error-tracking/parsers/winjs.mjs 426 B
packages/core/dist/error-tracking/release.js 1.68 kB
packages/core/dist/error-tracking/release.mjs 366 B
packages/core/dist/error-tracking/types.js 1.42 kB
packages/core/dist/error-tracking/types.mjs 131 B
packages/core/dist/error-tracking/utils.js 1.9 kB
packages/core/dist/error-tracking/utils.mjs 604 B
packages/core/dist/eventemitter.js 1.88 kB
packages/core/dist/eventemitter.mjs 571 B
packages/core/dist/featureFlagLocalEvaluation.js 23.2 kB
packages/core/dist/featureFlagLocalEvaluation.mjs 20.5 kB
packages/core/dist/featureFlagUtils.js 8.61 kB
packages/core/dist/featureFlagUtils.mjs 5.52 kB
packages/core/dist/gzip.js 5.88 kB
packages/core/dist/gzip.mjs 3.87 kB
packages/core/dist/index.js 27.3 kB
packages/core/dist/index.mjs 1.98 kB
packages/core/dist/logs/index.js 11.8 kB
packages/core/dist/logs/index.mjs 9.83 kB
packages/core/dist/logs/logs-utils.js 6.7 kB
packages/core/dist/logs/logs-utils.mjs 4.54 kB
packages/core/dist/logs/types.js 585 B
packages/core/dist/logs/types.mjs 12 B
packages/core/dist/metrics/config.js 2.05 kB
packages/core/dist/metrics/config.mjs 735 B
packages/core/dist/metrics/index.js 17 kB
packages/core/dist/metrics/index.mjs 14.1 kB
packages/core/dist/metrics/metrics-utils.js 3.67 kB
packages/core/dist/metrics/metrics-utils.mjs 1.68 kB
packages/core/dist/metrics/types.js 585 B
packages/core/dist/metrics/types.mjs 12 B
packages/core/dist/posthog-core-stateless.js 49.1 kB
packages/core/dist/posthog-core-stateless.mjs 45.7 kB
packages/core/dist/posthog-core.js 49.6 kB
packages/core/dist/posthog-core.mjs 43.9 kB
packages/core/dist/privacy.js 15.6 kB
packages/core/dist/privacy.mjs 13.9 kB
packages/core/dist/surveys/activation.js 2.29 kB
packages/core/dist/surveys/activation.mjs 572 B
packages/core/dist/surveys/events.js 5.82 kB
packages/core/dist/surveys/events.mjs 3.14 kB
packages/core/dist/surveys/index.js 7.48 kB
packages/core/dist/surveys/index.mjs 921 B
packages/core/dist/surveys/keys.js 1.8 kB
packages/core/dist/surveys/keys.mjs 350 B
packages/core/dist/surveys/property-********.js 3.8 kB
packages/core/dist/surveys/property-********.mjs 2.15 kB
packages/core/dist/surveys/shuffling.js 2.53 kB
packages/core/dist/surveys/shuffling.mjs 1.07 kB
packages/core/dist/surveys/translations.js 9.18 kB
packages/core/dist/surveys/translations.mjs 6.83 kB
packages/core/dist/surveys/validation.js 3.15 kB
packages/core/dist/surveys/validation.mjs 1.51 kB
packages/core/dist/testing/index.js 2.76 kB
packages/core/dist/testing/index.mjs 79 B
packages/core/dist/testing/PostHogCoreTestClient.js 3.33 kB
packages/core/dist/testing/PostHogCoreTestClient.mjs 1.82 kB
packages/core/dist/testing/test-utils.js 2.9 kB
packages/core/dist/testing/test-utils.mjs 1.11 kB
packages/core/dist/traces/config.js 4.62 kB
packages/core/dist/traces/config.mjs 3.27 kB
packages/core/dist/traces/context.js 1.64 kB
packages/core/dist/traces/context.mjs 318 B
packages/core/dist/traces/ids.js 3.2 kB
packages/core/dist/traces/ids.mjs 1.52 kB
packages/core/dist/traces/index.js 26.7 kB
packages/core/dist/traces/index.mjs 24 kB
packages/core/dist/traces/otlp.js 6.33 kB
packages/core/dist/traces/otlp.mjs 4.14 kB
packages/core/dist/traces/sanitize.js 3.59 kB
packages/core/dist/traces/sanitize.mjs 1.88 kB
packages/core/dist/traces/span.js 20 kB
packages/core/dist/traces/span.mjs 16.7 kB
packages/core/dist/traces/traceparent.js 4.54 kB
packages/core/dist/traces/traceparent.mjs 2.54 kB
packages/core/dist/traces/types.js 585 B
packages/core/dist/traces/types.mjs 12 B
packages/core/dist/tracing-headers.js 3.48 kB
packages/core/dist/tracing-headers.mjs 2.08 kB
packages/core/dist/types.js 8.47 kB
packages/core/dist/types.mjs 5.3 kB
packages/core/dist/utils/backoff.js 2.36 kB
packages/core/dist/utils/backoff.mjs 611 B
packages/core/dist/utils/bot-detection.js 4.17 kB
packages/core/dist/utils/bot-detection.mjs 2.58 kB
packages/core/dist/utils/browser-utils.js 1.57 kB
packages/core/dist/utils/browser-utils.mjs 182 B
packages/core/dist/utils/bucketed-rate-limiter.js 4.32 kB
packages/core/dist/utils/bucketed-rate-limiter.mjs 2.22 kB
packages/core/dist/utils/flush-timer.js 2.06 kB
packages/core/dist/utils/flush-timer.mjs 725 B
packages/core/dist/utils/index.js 17.8 kB
packages/core/dist/utils/index.mjs 3.69 kB
packages/core/dist/utils/json-utils.js 7.44 kB
packages/core/dist/utils/json-utils.mjs 5.02 kB
packages/core/dist/utils/logger.js 2.68 kB
packages/core/dist/utils/logger.mjs 1.29 kB
packages/core/dist/utils/number-utils.js 3.42 kB
packages/core/dist/utils/number-utils.mjs 1.68 kB
packages/core/dist/utils/otlp-********.js 3.94 kB
packages/core/dist/utils/otlp-********.mjs 1.97 kB
packages/core/dist/utils/otlp-any-value.js 7.96 kB
packages/core/dist/utils/otlp-any-value.mjs 5.77 kB
packages/core/dist/utils/promise-queue.js 2.58 kB
packages/core/dist/utils/promise-queue.mjs 1.25 kB
packages/core/dist/utils/retry-after.js 3.5 kB
packages/core/dist/utils/retry-after.mjs 1.96 kB
packages/core/dist/utils/string-utils.js 3.83 kB
packages/core/dist/utils/string-utils.mjs 1.97 kB
packages/core/dist/utils/type-utils.js 7.52 kB
packages/core/dist/utils/type-utils.mjs 3.27 kB
packages/core/dist/utils/user-agent-utils.js 18.5 kB
packages/core/dist/utils/user-agent-utils.mjs 14.7 kB
packages/core/dist/utils/webview-app-utils.js 3.54 kB
packages/core/dist/utils/webview-app-utils.mjs 2.23 kB
packages/core/dist/vendor/uuidv7.js 8.36 kB
packages/core/dist/vendor/uuidv7.mjs 6.7 kB
packages/mcp/dist/extensions/analytics-parameters.js 6.63 kB
packages/mcp/dist/extensions/analytics-parameters.mjs 4.27 kB
packages/mcp/dist/extensions/capture.js 4.11 kB
packages/mcp/dist/extensions/capture.mjs 2.65 kB
packages/mcp/dist/extensions/client-********.js 6.33 kB
packages/mcp/dist/extensions/client-********.mjs 3.71 kB
packages/mcp/dist/extensions/compatibility.js 5.45 kB
packages/mcp/dist/extensions/compatibility.mjs 3.4 kB
packages/mcp/dist/extensions/constants.js 6.33 kB
packages/mcp/dist/extensions/constants.mjs 3.83 kB
packages/mcp/dist/extensions/context-parameters.js 2.85 kB
packages/mcp/dist/extensions/context-parameters.mjs 893 B
packages/mcp/dist/extensions/conversation-id.js 6.41 kB
packages/mcp/dist/extensions/conversation-id.mjs 3.58 kB
packages/mcp/dist/extensions/detect.js 3.87 kB
packages/mcp/dist/extensions/detect.mjs 1.49 kB
packages/mcp/dist/extensions/event-types.js 1.81 kB
packages/mcp/dist/extensions/event-types.mjs 492 B
packages/mcp/dist/extensions/exceptions.js 2.67 kB
packages/mcp/dist/extensions/exceptions.mjs 1.19 kB
packages/mcp/dist/extensions/feedback.js 12.4 kB
packages/mcp/dist/extensions/feedback.mjs 9.48 kB
packages/mcp/dist/extensions/headers.js 2.08 kB
packages/mcp/dist/extensions/headers.mjs 643 B
packages/mcp/dist/extensions/ids.js 2.11 kB
packages/mcp/dist/extensions/ids.mjs 637 B
packages/mcp/dist/extensions/instrument-********.js 7.98 kB
packages/mcp/dist/extensions/instrument-********.mjs 5.43 kB
packages/mcp/dist/extensions/instrument-highlevel.js 15 kB
packages/mcp/dist/extensions/instrument-highlevel.mjs 11.8 kB
packages/mcp/dist/extensions/instrumentation.js 36.4 kB
packages/mcp/dist/extensions/instrumentation.mjs 29.5 kB
packages/mcp/dist/extensions/intent.js 3.3 kB
packages/mcp/dist/extensions/intent.mjs 1.64 kB
packages/mcp/dist/extensions/internal.js 7.8 kB
packages/mcp/dist/extensions/internal.mjs 5.3 kB
packages/mcp/dist/extensions/lib-********.js 1.7 kB
packages/mcp/dist/extensions/lib-********.mjs 267 B
packages/mcp/dist/extensions/logger.js 1.81 kB
packages/mcp/dist/extensions/logger.mjs 380 B
packages/mcp/dist/extensions/mcp-********.js 3.96 kB
packages/mcp/dist/extensions/mcp-********.mjs 2.24 kB
packages/mcp/dist/extensions/mcp-sdk-compat.js 5.86 kB
packages/mcp/dist/extensions/mcp-sdk-compat.mjs 3.5 kB
packages/mcp/dist/extensions/model-parameters.js 4.59 kB
packages/mcp/dist/extensions/model-parameters.mjs 2.32 kB
packages/mcp/dist/extensions/output-instructions.js 6.21 kB
packages/mcp/dist/extensions/output-instructions.mjs 3.91 kB
packages/mcp/dist/extensions/posthog-events.js 12.4 kB
packages/mcp/dist/extensions/posthog-events.mjs 8.42 kB
packages/mcp/dist/extensions/posthog-mcp.js 16.8 kB
packages/mcp/dist/extensions/posthog-mcp.mjs 13.5 kB
packages/mcp/dist/extensions/request-headers.js 2.27 kB
packages/mcp/dist/extensions/request-headers.mjs 963 B
packages/mcp/dist/extensions/sanitization.js 4.56 kB
packages/mcp/dist/extensions/sanitization.mjs 2.77 kB
packages/mcp/dist/extensions/server-build.js 1.94 kB
packages/mcp/dist/extensions/server-build.mjs 482 B
packages/mcp/dist/extensions/session-token.js 5.47 kB
packages/mcp/dist/extensions/session-token.mjs 3.6 kB
packages/mcp/dist/extensions/session.js 6.79 kB
packages/mcp/dist/extensions/session.mjs 4.16 kB
packages/mcp/dist/extensions/sink.js 4.47 kB
packages/mcp/dist/extensions/sink.mjs 2.67 kB
packages/mcp/dist/extensions/tool-input.js 4.82 kB
packages/mcp/dist/extensions/tool-input.mjs 3.27 kB
packages/mcp/dist/extensions/tools.js 3.61 kB
packages/mcp/dist/extensions/tools.mjs 1.63 kB
packages/mcp/dist/extensions/tracing-helpers.js 2.51 kB
packages/mcp/dist/extensions/tracing-helpers.mjs 772 B
packages/mcp/dist/extensions/transport-********.js 3 kB
packages/mcp/dist/extensions/transport-********.mjs 1.09 kB
packages/mcp/dist/extensions/truncation.js 11.9 kB
packages/mcp/dist/extensions/truncation.mjs 9.99 kB
packages/mcp/dist/index.js 10.2 kB
packages/mcp/dist/index.mjs 5.48 kB
packages/mcp/dist/types.js 585 B
packages/mcp/dist/types.mjs 12 B
packages/mcp/dist/version.js 1.31 kB
packages/mcp/dist/version.mjs 46 B
packages/next/dist/app/PostHogProvider.js 5.37 kB
packages/next/dist/client/ClientPostHogProvider.js 2.28 kB
packages/next/dist/client/hooks.js 172 B
packages/next/dist/client/PostHogPageView.js 4.23 kB
packages/next/dist/index.client.js 401 B
packages/next/dist/index.edge.js 570 B
packages/next/dist/index.js 554 B
packages/next/dist/index.react-server.js 420 B
packages/next/dist/middleware/postHogMiddleware.js 4.08 kB
packages/next/dist/pages.client.js 225 B
packages/next/dist/pages.edge.js 294 B
packages/next/dist/pages.js 347 B
packages/next/dist/pages/createPostHog.js 1.48 kB
packages/next/dist/pages/getServerSidePostHog.js 1.48 kB
packages/next/dist/pages/PostHogPageView.js 1.77 kB
packages/next/dist/pages/PostHogProvider.js 1.58 kB
packages/next/dist/server.edge.js 795 B
packages/next/dist/server/captureRequestError.js 5.26 kB
packages/next/dist/server/clientCache.edge.js 305 B
packages/next/dist/server/clientCache.js 1.53 kB
packages/next/dist/server/clientCache.node.js 305 B
packages/next/dist/server/createPostHog.js 1.44 kB
packages/next/dist/server/getPostHog.js 3.45 kB
packages/next/dist/server/onRequestError.js 1.39 kB
packages/next/dist/server/onRequestError.types.js 59 B
packages/next/dist/shared/browser.js 195 B
packages/next/dist/shared/config.js 2.23 kB
packages/next/dist/shared/constants.js 201 B
packages/next/dist/shared/cookie.js 540 B
packages/next/dist/shared/identity.js 2.56 kB
packages/next/dist/shared/tracing-headers.js 2.18 kB
packages/nextjs-config/dist/config.js 13.2 kB
packages/nextjs-config/dist/config.mjs 11.6 kB
packages/nextjs-config/dist/index.js 2.21 kB
packages/nextjs-config/dist/index.mjs 30 B
packages/nextjs-config/dist/strip-sourcemap-********.js 5.46 kB
packages/nextjs-config/dist/strip-sourcemap-********.mjs 3.37 kB
packages/nextjs-config/dist/utils.js 4.58 kB
packages/nextjs-config/dist/utils.mjs 2.1 kB
packages/node/dist/ai-capture/batching.js 2.71 kB
packages/node/dist/ai-capture/batching.mjs 1.21 kB
packages/node/dist/ai-capture/routing.js 1.96 kB
packages/node/dist/ai-capture/routing.mjs 264 B
packages/node/dist/capture-v1/config.js 1.59 kB
packages/node/dist/capture-v1/config.mjs 283 B
packages/node/dist/capture-v1/errors.js 1.99 kB
packages/node/dist/capture-v1/errors.mjs 694 B
packages/node/dist/capture-v1/routing.js 1.77 kB
packages/node/dist/capture-v1/routing.mjs 279 B
packages/node/dist/capture-v1/sender.js 11.5 kB
packages/node/dist/capture-v1/sender.mjs 9.94 kB
packages/node/dist/capture-v1/transform.js 5.22 kB
packages/node/dist/capture-v1/transform.mjs 3.65 kB
packages/node/dist/capture-v1/types.js 585 B
packages/node/dist/capture-v1/types.mjs 12 B
packages/node/dist/client.js 63.8 kB
packages/node/dist/client.mjs 60.1 kB
packages/node/dist/entrypoints/index.edge.js 3.66 kB
packages/node/dist/entrypoints/index.edge.mjs 720 B
packages/node/dist/entrypoints/index.node.js 6.45 kB
packages/node/dist/entrypoints/index.node.mjs 1.77 kB
packages/node/dist/entrypoints/nestjs.js 2.27 kB
packages/node/dist/entrypoints/nestjs.mjs 42 B
packages/node/dist/experimental.js 852 B
packages/node/dist/experimental.mjs 279 B
packages/node/dist/exports.js 6.3 kB
packages/node/dist/exports.mjs 388 B
packages/node/dist/extensions/context/context.js 2.22 kB
packages/node/dist/extensions/context/context.mjs 863 B
packages/node/dist/extensions/context/span-context.node.js 1.8 kB
packages/node/dist/extensions/context/span-context.node.mjs 355 B
packages/node/dist/extensions/context/types.js 585 B
packages/node/dist/extensions/context/types.mjs 12 B
packages/node/dist/extensions/error-tracking/autocapture.js 5.29 kB
packages/node/dist/extensions/error-tracking/autocapture.mjs 3.62 kB
packages/node/dist/extensions/error-tracking/index.js 4.48 kB
packages/node/dist/extensions/error-tracking/index.mjs 3.17 kB
packages/node/dist/extensions/error-tracking/modifiers/context-lines.node.js 11.7 kB
packages/node/dist/extensions/error-tracking/modifiers/context-lines.node.mjs 9.64 kB
packages/node/dist/extensions/error-tracking/modifiers/module.node.js 2.87 kB
packages/node/dist/extensions/error-tracking/modifiers/module.node.mjs 1.45 kB
packages/node/dist/extensions/error-tracking/modifiers/relative-path.node.js 2.07 kB
packages/node/dist/extensions/error-tracking/modifiers/relative-path.node.mjs 624 B
packages/node/dist/extensions/error-tracking/trace-context.js 2.08 kB
packages/node/dist/extensions/error-tracking/trace-context.mjs 747 B
packages/node/dist/extensions/express.js 5.97 kB
packages/node/dist/extensions/express.mjs 3.69 kB
packages/node/dist/extensions/feature-flags/cache.js 585 B
packages/node/dist/extensions/feature-flags/cache.mjs 12 B
packages/node/dist/extensions/feature-flags/crypto.js 1.37 kB
packages/node/dist/extensions/feature-flags/crypto.mjs 42 B
packages/node/dist/extensions/feature-flags/feature-flags.js 35.2 kB
packages/node/dist/extensions/feature-flags/feature-flags.mjs 32.7 kB
packages/node/dist/extensions/nestjs.js 5.71 kB
packages/node/dist/extensions/nestjs.mjs 3.42 kB
packages/node/dist/extensions/sentry-integration.js 4.99 kB
packages/node/dist/extensions/sentry-integration.mjs 3.37 kB
packages/node/dist/extensions/tracing-headers.js 3.41 kB
packages/node/dist/extensions/tracing-headers.mjs 1.53 kB
packages/node/dist/extensions/url-utils.js 2.32 kB
packages/node/dist/extensions/url-utils.mjs 785 B
packages/node/dist/feature-flag-evaluations.js 6.22 kB
packages/node/dist/feature-flag-evaluations.mjs 4.77 kB
packages/node/dist/gzip.node.js 1.83 kB
packages/node/dist/gzip.node.mjs 416 B
packages/node/dist/host-os.node.js 1.8 kB
packages/node/dist/host-os.node.mjs 349 B
packages/node/dist/storage-memory.js 1.61 kB
packages/node/dist/storage-memory.mjs 297 B
packages/node/dist/types.js 1.52 kB
packages/node/dist/types.mjs 224 B
packages/node/dist/version.js 1.31 kB
packages/node/dist/version.mjs 46 B
packages/nuxt/dist/module.mjs 6.13 kB
packages/nuxt/dist/runtime/composables/useFeatureFlagEnabled.js 566 B
packages/nuxt/dist/runtime/composables/useFeatureFlagPayload.js 690 B
packages/nuxt/dist/runtime/composables/useFeatureFlagVariantKey.js 591 B
packages/nuxt/dist/runtime/composables/usePostHog.js 128 B
packages/nuxt/dist/runtime/nitro-plugin-v2.js 480 B
packages/nuxt/dist/runtime/nitro-plugin-v3.js 556 B
packages/nuxt/dist/runtime/nitro-plugin.js 1.32 kB
packages/nuxt/dist/runtime/vue-plugin.js 1.13 kB
packages/openfeature-node-provider/dist/index.js 1.86 kB
packages/openfeature-node-provider/dist/index.mjs 122 B
packages/openfeature-node-provider/dist/mapping.js 5.66 kB
packages/openfeature-node-provider/dist/mapping.mjs 3.5 kB
packages/openfeature-node-provider/dist/provider.js 4.09 kB
packages/openfeature-node-provider/dist/provider.mjs 2.6 kB
packages/openfeature-web-provider/dist/index.js 1.84 kB
packages/openfeature-web-provider/dist/index.mjs 119 B
packages/openfeature-web-provider/dist/mapping.js 5.38 kB
packages/openfeature-web-provider/dist/mapping.mjs 3.18 kB
packages/openfeature-web-provider/dist/provider.js 4.51 kB
packages/openfeature-web-provider/dist/provider.mjs 3.06 kB
packages/plugin-utils/dist/chunk-ids.js 3.96 kB
packages/plugin-utils/dist/chunk-ids.mjs 2.11 kB
packages/plugin-utils/dist/cli.js 4.47 kB
packages/plugin-utils/dist/cli.mjs 2.72 kB
packages/plugin-utils/dist/config.js 3.6 kB
packages/plugin-utils/dist/config.mjs 2.25 kB
packages/plugin-utils/dist/index.js 4.5 kB
packages/plugin-utils/dist/index.mjs 197 B
packages/plugin-utils/dist/spawn-local.js 3.17 kB
packages/plugin-utils/dist/spawn-local.mjs 1.66 kB
packages/plugin-utils/dist/utils.js 3.36 kB
packages/plugin-utils/dist/utils.mjs 1.3 kB
packages/react-native/dist/autocapture.js 8.35 kB
packages/react-native/dist/error-tracking/exception-context.js 2.25 kB
packages/react-native/dist/error-tracking/fatal-payload.js 6.61 kB
packages/react-native/dist/error-tracking/index.js 15.4 kB
packages/react-native/dist/error-tracking/utils.js 4.05 kB
packages/react-native/dist/frameworks/wix-navigation.js 1.35 kB
packages/react-native/dist/hooks/useFeatureFlag.js 1.9 kB
packages/react-native/dist/hooks/useFeatureFlagResult.js 1.03 kB
packages/react-native/dist/hooks/useFeatureFlags.js 985 B
packages/react-native/dist/hooks/useNavigationTracker.js 2.31 kB
packages/react-native/dist/hooks/usePostHog.js 583 B
packages/react-native/dist/hooks/utils.js 1.02 kB
packages/react-native/dist/index.js 4.36 kB
packages/react-native/dist/logs-********.js 3.71 kB
packages/react-native/dist/native-deps.js 8.77 kB
packages/react-native/dist/optional/OptionalAsyncStorage.js 348 B
packages/react-native/dist/optional/OptionalExpoApplication.js 429 B
packages/react-native/dist/optional/OptionalExpoDevice.js 394 B
packages/react-native/dist/optional/OptionalExpoFileSystem.js 437 B
packages/react-native/dist/optional/OptionalExpoFileSystemLegacy.js 480 B
packages/react-native/dist/optional/OptionalExpoLocalization.js 436 B
packages/react-native/dist/optional/OptionalExpoUpdates.js 382 B
packages/react-native/dist/optional/OptionalPlugin.js 1.36 kB
packages/react-native/dist/optional/OptionalReactNativeDeviceInfo.js 473 B
packages/react-native/dist/optional/OptionalReactNativeLocalize.js 359 B
packages/react-native/dist/optional/OptionalReactNativeNavigation.js 473 B
packages/react-native/dist/optional/OptionalReactNativeNavigationWix.js 504 B
packages/react-native/dist/optional/OptionalReactNativeSafeArea.js 700 B
packages/react-native/dist/optional/OptionalReactNativeSvg.js 923 B
packages/react-native/dist/posthog-rn.js 80.6 kB
packages/react-native/dist/PostHogContext.js 372 B
packages/react-native/dist/PostHogErrorBoundary.js 3.98 kB
packages/react-native/dist/PostHogMaskView.js 1.72 kB
packages/react-native/dist/PostHogProvider.js 6.04 kB
packages/react-native/dist/storage.js 6.85 kB
packages/react-native/dist/surveys/components/BottomSection.js 1.69 kB
packages/react-native/dist/surveys/components/Cancel.js 1.19 kB
packages/react-native/dist/surveys/components/ConfirmationMessage.js 1.98 kB
packages/react-native/dist/surveys/components/IntroMessage.js 1.87 kB
packages/react-native/dist/surveys/components/QuestionHeader.js 1.69 kB
packages/react-native/dist/surveys/components/QuestionTypes.js 16.1 kB
packages/react-native/dist/surveys/components/SurveyModal.js 7.8 kB
packages/react-native/dist/surveys/components/Surveys.js 8.7 kB
packages/react-native/dist/surveys/getActiveMatchingSurveys.js 2.99 kB
packages/react-native/dist/surveys/icons.js 10.1 kB
packages/react-native/dist/surveys/index.js 634 B
packages/react-native/dist/surveys/PostHogSurveyProvider.js 10.3 kB
packages/react-native/dist/surveys/safeStyleSheet.js 491 B
packages/react-native/dist/surveys/survey-********.js 7.78 kB
packages/react-native/dist/surveys/survey-shuffling.js 2.38 kB
packages/react-native/dist/surveys/survey-translations.js 1.22 kB
packages/react-native/dist/surveys/surveys-utils.js 11.6 kB
packages/react-native/dist/surveys/useActivatedSurveys.js 3.89 kB
packages/react-native/dist/surveys/useSurveyStorage.js 3.07 kB
packages/react-native/dist/tooling/expoconfig.js 39.6 kB
packages/react-native/dist/tooling/metroconfig.js 2.36 kB
packages/react-native/dist/tooling/posthogMetroSerializer.js 7.5 kB
packages/react-native/dist/tooling/utils.js 4.49 kB
packages/react-native/dist/tooling/vendor/expo/expoconfig.js 109 B
packages/react-native/dist/tooling/vendor/metro/countLines.js 276 B
packages/react-native/dist/tooling/vendor/metro/utils.js 3.61 kB
packages/react-native/dist/types.js 104 B
packages/react-native/dist/utils.js 1.83 kB
packages/react-native/dist/version.js 166 B
packages/react/dist/esm/index.js 23.3 kB
packages/react/dist/esm/slim/index.js 19.5 kB
packages/react/dist/esm/surveys/index.js 4.22 kB
packages/react/dist/umd/index.js 27.8 kB
packages/react/dist/umd/slim/index.js 23.5 kB
packages/react/dist/umd/surveys/index.js 6.33 kB
packages/rollup-plugin/dist/index.js 14.6 kB
packages/rrweb/packer/dist/browser-********.cjs 17.9 kB
packages/rrweb/packer/dist/browser-********.js 17.5 kB
packages/rrweb/packer/dist/pack.cjs 401 B
packages/rrweb/packer/dist/pack.js 301 B
packages/rrweb/packer/dist/pack.umd.cjs 1.67 kB
packages/rrweb/packer/dist/pack.umd.min.cjs 1.11 kB
packages/rrweb/packer/dist/packer.cjs 276 B
packages/rrweb/packer/dist/packer.js 133 B
packages/rrweb/packer/dist/packer.umd.cjs 694 B
packages/rrweb/packer/dist/packer.umd.min.cjs 626 B
packages/rrweb/packer/dist/unpack.cjs 737 B
packages/rrweb/packer/dist/unpack.js 637 B
packages/rrweb/packer/dist/unpack.umd.cjs 1.14 kB
packages/rrweb/packer/dist/unpack.umd.min.cjs 953 B
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-record/dist/rrweb-plugin-canvas-webrtc-record.cjs 34.9 kB
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-record/dist/rrweb-plugin-canvas-webrtc-record.js 34.8 kB
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-record/dist/rrweb-plugin-canvas-webrtc-record.umd.cjs 37 kB
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-record/dist/rrweb-plugin-canvas-webrtc-record.umd.min.cjs 22.9 kB
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-replay/dist/rrweb-plugin-canvas-webrtc-replay.cjs 31.8 kB
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-replay/dist/rrweb-plugin-canvas-webrtc-replay.js 31.7 kB
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-replay/dist/rrweb-plugin-canvas-webrtc-replay.umd.cjs 33.7 kB
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-replay/dist/rrweb-plugin-canvas-webrtc-replay.umd.min.cjs 21.1 kB
packages/rrweb/plugins/rrweb-plugin-console-record/dist/rrweb-plugin-console-record.cjs 17.5 kB
packages/rrweb/plugins/rrweb-plugin-console-record/dist/rrweb-plugin-console-record.js 17.4 kB
packages/rrweb/plugins/rrweb-plugin-console-record/dist/rrweb-plugin-console-record.umd.cjs 16.8 kB
packages/rrweb/plugins/rrweb-plugin-console-record/dist/rrweb-plugin-console-record.umd.min.cjs 8.91 kB
packages/rrweb/plugins/rrweb-plugin-console-replay/dist/rrweb-plugin-console-replay.cjs 7.05 kB
packages/rrweb/plugins/rrweb-plugin-console-replay/dist/rrweb-plugin-console-replay.js 6.95 kB
packages/rrweb/plugins/rrweb-plugin-console-replay/dist/rrweb-plugin-console-replay.umd.cjs 7.34 kB
packages/rrweb/plugins/rrweb-plugin-console-replay/dist/rrweb-plugin-console-replay.umd.min.cjs 3.91 kB
packages/rrweb/plugins/rrweb-plugin-sequential-id-record/dist/rrweb-plugin-sequential-id-record.cjs 663 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-record/dist/rrweb-plugin-sequential-id-record.js 540 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-record/dist/rrweb-plugin-sequential-id-record.umd.cjs 1.1 kB
packages/rrweb/plugins/rrweb-plugin-sequential-id-record/dist/rrweb-plugin-sequential-id-record.umd.min.cjs 827 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-replay/dist/rrweb-plugin-sequential-id-replay.cjs 816 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-replay/dist/rrweb-plugin-sequential-id-replay.js 715 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-replay/dist/rrweb-plugin-sequential-id-replay.umd.cjs 1.25 kB
packages/rrweb/plugins/rrweb-plugin-sequential-id-replay/dist/rrweb-plugin-sequential-id-replay.umd.min.cjs 966 B
packages/rrweb/rrdom-nodejs/dist/rrdom-nodejs.cjs 143 kB
packages/rrweb/rrdom-nodejs/dist/rrdom-nodejs.js 142 kB
packages/rrweb/rrdom-nodejs/dist/rrdom-nodejs.umd.cjs 156 kB
packages/rrweb/rrdom-nodejs/dist/rrdom-nodejs.umd.min.cjs 76.8 kB
packages/rrweb/rrdom/dist/rrdom.cjs 168 kB
packages/rrweb/rrdom/dist/rrdom.js 167 kB
packages/rrweb/rrdom/dist/rrdom.umd.cjs 179 kB
packages/rrweb/rrdom/dist/rrdom.umd.min.cjs 87 kB
packages/rrweb/rrweb-snapshot/dist/rebuild-********.cjs 133 kB
packages/rrweb/rrweb-snapshot/dist/rebuild-********.js 132 kB
packages/rrweb/rrweb-snapshot/dist/record.cjs 4.33 kB
packages/rrweb/rrweb-snapshot/dist/record.js 3.04 kB
packages/rrweb/rrweb-snapshot/dist/replay.cjs 1.96 kB
packages/rrweb/rrweb-snapshot/dist/replay.js 1.31 kB
packages/rrweb/rrweb-snapshot/dist/replay.umd.cjs 206 kB
packages/rrweb/rrweb-snapshot/dist/replay.umd.min.cjs 91 kB
packages/rrweb/rrweb-snapshot/dist/rrweb-********.cjs 4.62 kB
packages/rrweb/rrweb-snapshot/dist/rrweb-********.js 3.22 kB
packages/rrweb/rrweb-snapshot/dist/types-********.cjs 49.8 kB
packages/rrweb/rrweb-snapshot/dist/types-********.js 44.4 kB
packages/rrweb/types/dist/rrweb-types.cjs 5.8 kB
packages/rrweb/types/dist/rrweb-types.js 5.5 kB
packages/rrweb/types/dist/rrweb-types.umd.cjs 6.06 kB
packages/rrweb/types/dist/rrweb-types.umd.min.cjs 2.95 kB
packages/rrweb/utils/dist/rrweb-utils.cjs 10 kB
packages/rrweb/utils/dist/rrweb-utils.js 9.5 kB
packages/rrweb/utils/dist/rrweb-utils.umd.cjs 10.5 kB
packages/rrweb/utils/dist/rrweb-utils.umd.min.cjs 5.11 kB
packages/types/dist/capture-log.js 585 B
packages/types/dist/capture-log.mjs 12 B
packages/types/dist/capture-metric.js 1.47 kB
packages/types/dist/capture-metric.mjs 93 B
packages/types/dist/capture.js 585 B
packages/types/dist/capture.mjs 12 B
packages/types/dist/common.js 585 B
packages/types/dist/common.mjs 12 B
packages/types/dist/feature-flags.js 585 B
packages/types/dist/feature-flags.mjs 12 B
packages/types/dist/index.js 1.55 kB
packages/types/dist/index.mjs 75 B
packages/types/dist/posthog-config.js 585 B
packages/types/dist/posthog-config.mjs 12 B
packages/types/dist/posthog.js 585 B
packages/types/dist/posthog.mjs 12 B
packages/types/dist/request.js 585 B
packages/types/dist/request.mjs 12 B
packages/types/dist/segment.js 585 B
packages/types/dist/segment.mjs 12 B
packages/types/dist/session-recording.js 585 B
packages/types/dist/session-recording.mjs 12 B
packages/types/dist/survey.js 585 B
packages/types/dist/survey.mjs 12 B
packages/types/dist/toolbar.js 585 B
packages/types/dist/toolbar.mjs 12 B
packages/types/dist/traces.js 585 B
packages/types/dist/traces.mjs 12 B
packages/types/dist/tree-shakeable.js 585 B
packages/types/dist/tree-shakeable.mjs 12 B
packages/web/dist/index.cjs 9.09 kB
packages/web/dist/index.mjs 8.93 kB
packages/webpack-plugin/dist/config.js 2.38 kB
packages/webpack-plugin/dist/config.mjs 1.31 kB
packages/webpack-plugin/dist/index.js 16.9 kB
packages/webpack-plugin/dist/index.mjs 12.6 kB
tooling/changelog/dist/index.js 399 B
tooling/rollup-utils/dist/index.js 1.17 kB
tooling/sdk-mock-server/dist/decode.js 2.03 kB
tooling/sdk-mock-server/dist/index.js 16 kB
tooling/sdk-mock-server/dist/state.js 3.79 kB

compressed-size-action

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c0a5249074

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +1386 to +1389
attributes: {
rr_naturalWidth: naturalWidth,
rr_naturalHeight: naturalHeight,
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Clear stale natural sizes when an image source changes

When a previously loaded image changes src/srcset, these generated attributes remain associated with the node until another successful load. If the replacement fails, is still pending when recording ends, or is removed downstream, consumers will pair the new URL with the old image's dimensions and recreate the same incorrect layout this feature is intended to prevent. Emit a removal/reset for both values when the selected source is invalidated, before publishing a later successful size.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 699d6ed for the failed-load case. The observer now also listens for error, and when an image ends up with no natural size it emits rr_naturalWidth: null / rr_naturalHeight: null, which removes the attributes on replay. The record test now switches to a broken source and asserts the clear. Known limitation: a replacement still in flight when recording stops keeps the previous size, because nothing fires to clear it. Clearing it on the src mutation itself would race the load event under a frozen mutation buffer and could wipe a correct size.

adds: [],
});
});
return on('load', handler, doc);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Observe image loads inside shadow roots

For an image serialized while still loading inside a shadow root, the load event is non-composed and therefore never reaches this document-level listener. Although rrweb explicitly records shadow-root mutations through ShadowDomManager, no corresponding image-size listener is installed there, so late-loading shadow images never receive rr_naturalWidth/rr_naturalHeight. Register this observer for each tracked shadow root as well.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 699d6ed. initImageSizeObserver is now exported, and ShadowDomManager.addShadowRoot installs it on each tracked shadow root (listening for load and error) and removes it with that root's other handlers. A new record test covers an image in a shadow root that loads after serialization.

attributes: {
[key: string]: string | styleOMValue | null;
// number: generated properties such as rr_naturalWidth
[key: string]: string | number | styleOMValue | null;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Call out the exported mutation API change

attributeMutation is exported from the published @posthog/rrweb-types entry point, and widening this received-value union can break TypeScript consumers that previously handled only strings, style objects, and null. The maintainer check could not run, so the repository instructions require treating the author as external; no API-defining sdk-spec or agreed issue for this exported change is identified, so this public API change needs to be explicitly noted before landing.

AGENTS.md reference: AGENTS.md:L5-L9

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in 699d6ed. The changeset now bumps @posthog/rrweb, @posthog/rrweb-snapshot and @posthog/rrweb-types alongside posthog-js, and states that the value type of attributeMutation.attributes widens to include number (for generated attributes such as rr_naturalWidth), so consumers that narrow those values exhaustively need a number branch.

@github-actions

Copy link
Copy Markdown
Contributor
⚠️ Possible changeset mismatch — 3 extra

This is informational — the PR is not blocked. Click the triangle above to collapse, or push a fix and this comment will auto-delete.

Declared in a changeset but no source files modified:

  • @posthog/rrweb
  • @posthog/rrweb-snapshot
  • @posthog/rrweb-types

Double-check this is intentional — for example, releasing a previously-merged change.

Changesets in this PR:

  • @posthog/rrweb — patch
  • @posthog/rrweb-snapshot — patch
  • @posthog/rrweb-types — patch
  • posthog-js — patch

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant