From abe740cb696e252855df44b265f0c4b62c7dafaf Mon Sep 17 00:00:00 2001 From: thaisrocine Date: Mon, 9 Nov 2026 15:17:28 -0300 Subject: [PATCH 1/4] feat(blocks): host the Deco Analytics tag's source The tag's code moves to blocks so it is written in one place for every consumer, while the standalone script stays a build artifact: decocms/analytics bundles these entries and its collector Worker keeps serving /_dq/a.js to v7, checkout and sites outside deco. Serving stays in the Worker because one purge fixes the whole fleet; a script inlined into each site's build would need a dependency bump per repo. The move is byte-for-byte: built from this folder (and from the packed tarball) with the esbuild the collector uses, all ten bundles hash identically to what production serves today, so no site receives a different script. Two things keep it that way. The folder's tsconfig.json sets strict and ships with src, because without it esbuild drops the "use strict" every production bundle opens with. Biome formats the folder but neither lints it nor organizes its imports: reordering imports reordered the core bundle, and the lint fixes rewrite size-tuned code. tag.test.ts bundles every entry and fails if anything outside the folder reaches the tag. Co-Authored-By: Claude Opus 5.5 (1M context) --- CLAUDE.md | 1 + biome.json | 8 + knip.json | 6 +- .../src/v8/analytics/runtime/globals.d.ts | 36 + .../src/v8/analytics/runtime/modules/click.ts | 54 ++ .../v8/analytics/runtime/modules/commerce.ts | 71 ++ .../v8/analytics/runtime/modules/consent.ts | 150 ++++ .../src/v8/analytics/runtime/modules/deco.ts | 207 ++++++ .../analytics/runtime/modules/engagement.ts | 140 ++++ .../v8/analytics/runtime/modules/errors.ts | 217 ++++++ .../v8/analytics/runtime/modules/heatmap.ts | 360 +++++++++ .../v8/analytics/runtime/modules/vitals.ts | 126 ++++ .../src/v8/analytics/runtime/src/guards.ts | 70 ++ .../src/v8/analytics/runtime/src/index.ts | 606 +++++++++++++++ .../src/v8/analytics/runtime/src/queue.ts | 40 + .../src/v8/analytics/runtime/src/trim.ts | 39 + .../v8/analytics/runtime/view/heat-core.ts | 335 +++++++++ .../src/v8/analytics/runtime/view/view.ts | 596 +++++++++++++++ .../blocks/src/v8/analytics/shared/anchor.ts | 171 +++++ .../src/v8/analytics/shared/contract.ts | 691 ++++++++++++++++++ packages/blocks/src/v8/analytics/tag.test.ts | 93 +++ .../blocks/src/v8/analytics/tsconfig.json | 14 + 22 files changed, 4030 insertions(+), 1 deletion(-) create mode 100644 packages/blocks/src/v8/analytics/runtime/globals.d.ts create mode 100644 packages/blocks/src/v8/analytics/runtime/modules/click.ts create mode 100644 packages/blocks/src/v8/analytics/runtime/modules/commerce.ts create mode 100644 packages/blocks/src/v8/analytics/runtime/modules/consent.ts create mode 100644 packages/blocks/src/v8/analytics/runtime/modules/deco.ts create mode 100644 packages/blocks/src/v8/analytics/runtime/modules/engagement.ts create mode 100644 packages/blocks/src/v8/analytics/runtime/modules/errors.ts create mode 100644 packages/blocks/src/v8/analytics/runtime/modules/heatmap.ts create mode 100644 packages/blocks/src/v8/analytics/runtime/modules/vitals.ts create mode 100644 packages/blocks/src/v8/analytics/runtime/src/guards.ts create mode 100644 packages/blocks/src/v8/analytics/runtime/src/index.ts create mode 100644 packages/blocks/src/v8/analytics/runtime/src/queue.ts create mode 100644 packages/blocks/src/v8/analytics/runtime/src/trim.ts create mode 100644 packages/blocks/src/v8/analytics/runtime/view/heat-core.ts create mode 100644 packages/blocks/src/v8/analytics/runtime/view/view.ts create mode 100644 packages/blocks/src/v8/analytics/shared/anchor.ts create mode 100644 packages/blocks/src/v8/analytics/shared/contract.ts create mode 100644 packages/blocks/src/v8/analytics/tag.test.ts create mode 100644 packages/blocks/src/v8/analytics/tsconfig.json diff --git a/CLAUDE.md b/CLAUDE.md index 9d09ddf3..94712394 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -144,6 +144,7 @@ v7's pure helpers, for sites moved from v7: each one gives v7's output (latest 7 ### Key boundaries +- **The Deco Analytics tag's source lives in `src/v8/analytics/` (`runtime/`, `shared/`) and is not a package module**: no export, and nothing in the runtime imports it. decocms/analytics bundles each entry with esbuild into a standalone script that its collector Worker serves at `/_dq/a.js` to every site (v7, checkout and sites outside deco included); `AnalyticsScript` only renders the `