Skip to content

fix(build): the document field templates stop breaking the package build - #588

Open
hyanmandian wants to merge 2 commits into
mainfrom
claude/fix-treeshaking-templates
Open

hyanmandian wants to merge 2 commits into
mainfrom
claude/fix-treeshaking-templates

Conversation

@hyanmandian

@hyanmandian hyanmandian commented Sep 22, 2026

Copy link
Copy Markdown
Member

Bottom of stack #591. This PR targets main and merges first; every other PR of the stack sits on it. #558 (getCpfInfo) is next and merges after it, then #559 (SUFRAMA), #560 (getCnpjInfo), #562 (getStateByCep) and #563 (GTIN).

What

The Tree-shaking report job fails on every pull request rebased onto the current main (red on #558; the branches that are still green have simply not rebased yet). This renames the document field templates so they are no longer .ts/.tsx files, and keeps the second checkout the job makes out of the type-check.

The cause

npm run build (vp pack) generates the declarations with tsdown's dts plugin, which spawns tsgo:

tsgo --noEmit false --declaration --emitDeclarationOnly -p tsconfig.json --outDir <tmp> --rootDir <root> --noCheck

-p tsconfig.json with no include means "every .ts/.tsx file under the repository root, minus exclude". --noCheck turns off semantic checking, so only parse errors survive: exactly the TS1xxx errors reported.

The templates under docs/snippets/document-field/templates carry @@placeholder@@ markers (import { @@validatorFn@@ } from "@brazilian-utils/brazilian-utils";), so a file named schema/zod.ts does not parse as TypeScript. exclude: ["docs", ...] is a path relative to the tsconfig, so it covers ./docs and the templates are fine where they sit. The Tree-shaking job, though, checks the base revision of the pull request out into base/, a whole second copy of the repository inside the head checkout, and ./base/docs is not what docs excludes. Since the templates landed on main (#556), the "Build head" step of that job (npm ci && npm run build) parses base/docs/snippets/document-field/_templates/** and dies with one TS1003/TS1128/… per marker.

Nothing else looks at them today: npm run check (vp check) ignores docs in both the formatter and the linter, knip only walks src/scripts (knip.json), and jscpd the same (.jscpd.json). The build was the only tool reaching them, and only through the second checkout.

Why this fix

Two ways were on the table.

  • Exclude the templates in tsconfig.json ("**/_templates/**"). One line, but it patches a single tool: the file keeps claiming to be TypeScript, so the next thing that walks the tree for .ts files (an editor's language server, a future check, tsc run by hand) hits the same wall, and every one of them needs its own exclusion.
  • Name the templates for what they are (chosen): schema/zod.ts.tmpl, react/field.tsx.tmpl, vue/form.vue.tmpl, vanilla/field.html.tmpl. A template is no longer a source file for anybody, wherever the folder is checked out and whatever does the walking, and the extension it keeps in front of the suffix still says what the filled in file will be. scripts/examples.ts reads every template through one function, so the whole change on the generator side is appending .tmpl there.

base is excluded in tsconfig.json as well. That is the other half of the cause: the head build has no business compiling a second copy of the repository at another revision. With it, the job stays green whatever that revision holds, including today's main, instead of only for branches rebased past this commit.

No source, no public API and no generated output changes: npm run build:examples writes byte-identical files (git status clean after running it).

The folder name

A second commit drops the leading underscore: docs/snippets/document-field/_templates is now docs/snippets/document-field/templates. The underscore said "not a page", the way _sidebar.md and _coverpage.md do, which this folder never was; with the .tmpl suffix carrying that job the folder can say where the files belong instead.

Nothing relied on the underscore to skip it:

  • the sitemap is built from the links of each _sidebar.md (scripts/site.ts), never from a walk of docs/, and lists no /snippets/ page under either name;
  • docsify routes to Markdown pages, and neither sidebar nor navbar links there, so the folder is not a page;
  • docs/robots.txt already answers Disallow: /snippets/, which covers everything under it;
  • static hosting serves every file under docs/ whatever it is called (/_sidebar.md is served today), so serving is unchanged;
  • scripts/llms.ts reads getting-started.md and utilities.md by name, so llms.txt and llms-full.txt are untouched;
  • .gitignore names docs/snippets/document-field/generated/ explicitly, knip.json and .jscpd.json only walk src/scripts, and vite.config.ts ignores docs wholesale.

The one walk over docs/ that the name did reach is the Context7 index, which takes its folders from context7.json rather than from the site. The templates are now excluded there by name, next to docs/pt-br: an index full of @@placeholder@@ markers helps nobody.

npm run build:examples output is byte-identical to what main writes (diff -r over docs/snippets/document-field/generated and docs/snippets/address-form against an unmodified main checkout: no differences), and the base-checkout reproduction was re-run on the final tree (npm ci && npm run build with base/ at main: exit 0, zero error TS lines).

Verification

Reproduced the CI failure first, in a scratch clone laid out the way the job lays it out (head checkout at the root, base revision of main bdd4e26b cloned into base/), running exactly what "Build head" runs:

Head base/ npm ci && npm run build
main (bdd4e26b) main (bdd4e26b) ❌ exit 1, 594 error TS… lines, [plugin rolldown-plugin-dts:generate] Error: tsgo process exited with code 2
this branch main (bdd4e26b), templates still .ts ✅ exit 0
this branch, without the base exclusion main with the templates renamed (what main looks like once this merges) ✅ exit 0

The third row is there to show the rename alone fixes the steady state, and the second that the exclusion covers the bases that predate it.

The rest of the job, on this branch against main as the base: node scripts/tree-shaking.ts --json head.json, then cd base && npm ci && npm run build && node scripts/tree-shaking.ts --json ../base.json --surviving ../head.json, then node scripts/tree-shaking.ts --compare base.json --markdown tree-shaking.md — exit 0, "✅ No bundle size impact. All 156 exports are the same size as on the base branch".

Gates, all from a clean npm ci:

  • npm run check — pass (520 files formatted, no lint or type errors in 480 files)
  • npm run test -- --run — pass (187 files, 6131 tests)
  • npm run build — pass (attw and publint clean)
  • npm run build:docs — pass, and npm run build:examples leaves the working tree clean
  • npm run check:tree-shaking — pass, 156 exports, full import 664897 B
  • npm run check:unused (knip) — pass
  • npm run check:duplication (jscpd) — pass, 0 clones
  • npm run check:commits — pass

Open points

  • Reproducing the job locally leaves a base/ folder that vp check still walks (its ignorePatterns are the linter's own, not the tsconfig's): on the pre-fix tree that reports 165 errors, every one of them inside base/src, none in the templates. Nothing in CI does this — only the Tree-shaking job creates base/, and it never runs vp check — so vite.config.ts is left alone here.
  • A template has no syntax highlighting under the new name. Filling one in and reading the result under docs/snippets/document-field/generated/ stays the way to check it, as before.

Summary by CodeRabbit

  • Documentation

    • Clarified contribution guidance for generated documentation files and template naming conventions.
    • Documented the .tmpl suffix for templates containing placeholder markers.
    • Updated guidance to reflect the current template directory structure.
  • Chores

    • Refined project configuration to better distinguish generated, documentation, and template files from source files.
    • Updated example-generation guidance to use the current template location.

The declaration build runs the type-checker over every file of the repository that the tsconfig
takes in, and the templates the document field examples are generated from carry `@@Placeholder@@`
markers, so a file named `schema/zod.ts` does not parse as TypeScript. `docs` is excluded, which
covers the templates where they sit, but the Tree-shaking job checks the base revision of a pull
request out into `base/`, a second copy of the whole repository that the exclusion does not reach:
since the templates landed on `main`, the "Build head" step fails on any pull request rebased onto
it, with a TS1003 for every marker.

A template is now named for what it is, `schema/zod.ts.tmpl`, keeping the extension of the file it
fills in ahead of the suffix. Nothing that walks the repository for `.ts`/`.tsx` files sees a
template any more, wherever the folder is checked out and whichever tool does the walking, and an
editor stops reporting errors in one that is open. The second checkout is excluded as well, so the
build here keeps compiling the head alone whatever the base revision holds.
@vercel

vercel Bot commented Sep 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
brazilian-utils Ready Ready Preview Sep 22, 2026 4:50am UTC

@coderabbitai

coderabbitai Bot commented Sep 22, 2026

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 64e24f82-444e-47ac-8bf2-23cb9253bb55

📥 Commits

Reviewing files that changed from the base of the PR and between 894338f and 090d73d.

📒 Files selected for processing (21)
  • CONTRIBUTING.md
  • context7.json
  • docs/snippets/document-field/templates/angular/document-field.ts.tmpl
  • docs/snippets/document-field/templates/angular/field.ts.tmpl
  • docs/snippets/document-field/templates/angular/form.ts.tmpl
  • docs/snippets/document-field/templates/angular/mask.ts.tmpl
  • docs/snippets/document-field/templates/mask-body.ts.tmpl
  • docs/snippets/document-field/templates/react/document-field.tsx.tmpl
  • docs/snippets/document-field/templates/react/field.tsx.tmpl
  • docs/snippets/document-field/templates/react/form.tsx.tmpl
  • docs/snippets/document-field/templates/react/mask.ts.tmpl
  • docs/snippets/document-field/templates/schema/arktype.ts.tmpl
  • docs/snippets/document-field/templates/schema/standard.ts.tmpl
  • docs/snippets/document-field/templates/schema/valibot.ts.tmpl
  • docs/snippets/document-field/templates/schema/zod.ts.tmpl
  • docs/snippets/document-field/templates/vanilla/field.html.tmpl
  • docs/snippets/document-field/templates/vue/document-field.vue.tmpl
  • docs/snippets/document-field/templates/vue/field.vue.tmpl
  • docs/snippets/document-field/templates/vue/form.vue.tmpl
  • docs/snippets/document-field/templates/vue/mask.ts.tmpl
  • scripts/examples.ts

Included review availability: Your plan provides up to 10 included reviews per hour; 6 remain after this review.


📝 Walkthrough

Walkthrough

The example script now loads .tmpl files from docs/snippets/document-field/templates. Documentation and source-discovery configuration describe and exclude the renamed template and generated-file paths.

Changes

Template and generated-file handling

Layer / File(s) Summary
Template loading and repository guidance
scripts/examples.ts, CONTRIBUTING.md
readTemplate uses the templates directory and appends .tmpl to template names. Documentation describes generated-file exclusion and the .tmpl convention.
Source discovery exclusions
context7.json, tsconfig.json
Configuration excludes the document-field templates directory and the base checkout. Exclusion comments were updated.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~5 minutes

Change: Bug fix

Suggested reviewers: claude

Merge Risk: ⚪ Minimal · up to 090d7

The change redirects example generation to the renamed .tmpl templates and excludes template-related paths from source discovery. No actionable merge-blocking risk remains.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 1 files. (2 skipped: 2 …
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main change: preventing document field templates from breaking the package build.
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

Comment @coderabbitai help to get the list of available commands.

@hyanmandian

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Sep 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@pkg-pr-new

pkg-pr-new Bot commented Sep 22, 2026

Copy link
Copy Markdown

Open in StackBlitz

npm i https://pkg.pr.new/@brazilian-utils/brazilian-utils@588

commit: 090d73d

@github-actions

Copy link
Copy Markdown
Contributor

Tree-shaking report

No bundle size impact. All 156 exports are the same size as on the base branch (full import 649.3 KB, gzip 166.4 KB).

All exports (156)
Export Base Head Δ gzip
GetAddressInfoByCepError 966 B 966 B 0 B 600 B
GetAddressInfoByCepNotFoundError 1.0 KB 1.0 KB 0 B 618 B
GetAddressInfoByCepServiceError 1.0 KB 1.0 KB 0 B 617 B
GetAddressInfoByCepValidationError 1.0 KB 1.0 KB 0 B 620 B
GetCepInfoByAddressError 966 B 966 B 0 B 600 B
GetCepInfoByAddressNotFoundError 1.0 KB 1.0 KB 0 B 618 B
GetCepInfoByAddressValidationError 1.0 KB 1.0 KB 0 B 620 B
addBusinessDays 6.8 KB 6.8 KB 0 B 2.8 KB
capitalize 2.5 KB 2.5 KB 0 B 1.3 KB
convertCurrencyToWords 2.8 KB 2.8 KB 0 B 1.5 KB
convertDateToWords 3.2 KB 3.2 KB 0 B 1.7 KB
convertLicensePlateToMercosul 1.3 KB 1.3 KB 0 B 807 B
convertNumberToWords 2.4 KB 2.4 KB 0 B 1.3 KB
differenceInBusinessDays 6.9 KB 6.9 KB 0 B 2.9 KB
formatBoleto 1.4 KB 1.4 KB 0 B 837 B
formatCEP 1.2 KB 1.2 KB 0 B 778 B
formatCNPJ 1.4 KB 1.4 KB 0 B 854 B
formatCPF 1.3 KB 1.3 KB 0 B 806 B
formatCaepf 1.3 KB 1.3 KB 0 B 787 B
formatCei 1.3 KB 1.3 KB 0 B 785 B
formatCep 1.2 KB 1.2 KB 0 B 778 B
formatCertidao 1.3 KB 1.3 KB 0 B 789 B
formatCnae 1.2 KB 1.2 KB 0 B 782 B
formatCnh 1.3 KB 1.3 KB 0 B 780 B
formatCno 1.3 KB 1.3 KB 0 B 786 B
formatCnpj 1.4 KB 1.4 KB 0 B 854 B
formatCns 1.3 KB 1.3 KB 0 B 780 B
formatCpf 1.3 KB 1.3 KB 0 B 806 B
formatCurrency 1.8 KB 1.8 KB 0 B 1.0 KB
formatIban 1.1 KB 1.1 KB 0 B 696 B
formatLegalNature 1.2 KB 1.2 KB 0 B 777 B
formatLicensePlate 1.2 KB 1.2 KB 0 B 738 B
formatNcm 1.2 KB 1.2 KB 0 B 780 B
formatNfeKey 1.3 KB 1.3 KB 0 B 784 B
formatPassport 1.0 KB 1.0 KB 0 B 643 B
formatPhone 2.8 KB 2.8 KB 0 B 1.5 KB
formatPis 1.3 KB 1.3 KB 0 B 781 B
formatProcessoJuridico 1.3 KB 1.3 KB 0 B 785 B
formatVoterId 1.3 KB 1.3 KB 0 B 821 B
generateBoleto 2.1 KB 2.1 KB 0 B 1.2 KB
generateCNPJ 1.6 KB 1.6 KB 0 B 965 B
generateCPF 1.4 KB 1.4 KB 0 B 878 B
generateCep 984 B 984 B 0 B 610 B
generateCnh 1.4 KB 1.4 KB 0 B 828 B
generateCnpj 1.6 KB 1.6 KB 0 B 965 B
generateCpf 1.4 KB 1.4 KB 0 B 878 B
generateLegalNature 5.9 KB 5.9 KB 0 B 2.1 KB
generateLicensePlate 1.1 KB 1.1 KB 0 B 692 B
generatePassport 1.1 KB 1.1 KB 0 B 656 B
generatePhone 1.5 KB 1.5 KB 0 B 900 B
generatePis 1.2 KB 1.2 KB 0 B 744 B
generatePixPayload 6.3 KB 6.3 KB 0 B 2.8 KB
generateProcessoJuridico 1.4 KB 1.4 KB 0 B 870 B
generateRenavam 1.2 KB 1.2 KB 0 B 760 B
generateVoterId 1.7 KB 1.7 KB 0 B 1021 B
getAddressInfoByCep 4.1 KB 4.1 KB 0 B 1.9 KB
getAreaCodeInfo 3.9 KB 3.9 KB 0 B 1.4 KB
getAreaCodesByState 1.6 KB 1.6 KB 0 B 917 B
getBankByCode 38.6 KB 38.6 KB 0 B 9.8 KB
getBankByIspb 38.6 KB 38.6 KB 0 B 9.8 KB
getBanks 38.4 KB 38.4 KB 0 B 9.6 KB
getBoletoInfo 3.1 KB 3.1 KB 0 B 1.6 KB
getCbo 119.1 KB 119.1 KB 0 B 30.7 KB
getCepInfoByAddress 2.7 KB 2.7 KB 0 B 1.4 KB
getCertidaoInfo 1.8 KB 1.8 KB 0 B 1.0 KB
getCfop 68.9 KB 68.9 KB 0 B 6.9 KB
getCities 154.3 KB 154.3 KB 0 B 49.9 KB
getCnae 93.9 KB 93.9 KB 0 B 21.2 KB
getFormatLicensePlate 1.1 KB 1.1 KB 0 B 692 B
getHolidays 6.1 KB 6.1 KB 0 B 2.6 KB
getIbanInfo 1.6 KB 1.6 KB 0 B 955 B
getLegalNature 6.3 KB 6.3 KB 0 B 2.3 KB
getLegalNatures 5.9 KB 5.9 KB 0 B 2.1 KB
getLegalNaturesByCategory 6.5 KB 6.5 KB 0 B 2.4 KB
getMunicipalities 156.4 KB 156.4 KB 0 B 50.3 KB
getMunicipality 154.9 KB 154.9 KB 0 B 50.3 KB
getMunicipalityByCode 156.5 KB 156.5 KB 0 B 50.4 KB
getNfeKeyInfo 2.7 KB 2.7 KB 0 B 1.5 KB
getPixKeyInfo 4.5 KB 4.5 KB 0 B 2.0 KB
getPixPayloadInfo 2.9 KB 2.9 KB 0 B 1.4 KB
getStateByIbgeCode 3.2 KB 3.2 KB 0 B 1.1 KB
getStateCodeByName 3.2 KB 3.2 KB 0 B 1.1 KB
getStateNameByCode 3.1 KB 3.1 KB 0 B 1.0 KB
getStates 3.0 KB 3.0 KB 0 B 1017 B
getTimezoneByState 1.6 KB 1.6 KB 0 B 809 B
isBusinessDay 6.5 KB 6.5 KB 0 B 2.7 KB
isHoliday 6.4 KB 6.4 KB 0 B 2.7 KB
isValidBankAccount 7.4 KB 7.4 KB 0 B 2.8 KB
isValidBoleto 2.4 KB 2.4 KB 0 B 1.3 KB
isValidCEP 984 B 984 B 0 B 610 B
isValidCNPJ 1.6 KB 1.6 KB 0 B 914 B
isValidCPF 1.3 KB 1.3 KB 0 B 805 B
isValidCaepf 1.5 KB 1.5 KB 0 B 913 B
isValidCbo 119.2 KB 119.2 KB 0 B 30.7 KB
isValidCei 1.5 KB 1.5 KB 0 B 899 B
isValidCep 984 B 984 B 0 B 610 B
isValidCertidao 1.6 KB 1.6 KB 0 B 938 B
isValidCfop 68.9 KB 68.9 KB 0 B 6.9 KB
isValidCnae 94.0 KB 94.0 KB 0 B 21.2 KB
isValidCnh 1.4 KB 1.4 KB 0 B 856 B
isValidCno 1.5 KB 1.5 KB 0 B 901 B
isValidCnpj 1.6 KB 1.6 KB 0 B 914 B
isValidCns 1.5 KB 1.5 KB 0 B 925 B
isValidCpf 1.3 KB 1.3 KB 0 B 805 B
isValidCreditCard 1.4 KB 1.4 KB 0 B 868 B
isValidCsosn 1.2 KB 1.2 KB 0 B 737 B
isValidCst 1.8 KB 1.8 KB 0 B 1.0 KB
isValidEmail 1.0 KB 1.0 KB 0 B 622 B
isValidIE 5.7 KB 5.7 KB 0 B 2.1 KB
isValidIban 1.3 KB 1.3 KB 0 B 836 B
isValidIe 5.7 KB 5.7 KB 0 B 2.1 KB
isValidLandlinePhone 1.5 KB 1.5 KB 0 B 933 B
isValidLegalNature 5.8 KB 5.8 KB 0 B 2.1 KB
isValidLicensePlate 1.1 KB 1.1 KB 0 B 702 B
isValidMobilePhone 1.6 KB 1.6 KB 0 B 971 B
isValidNcm 114.2 KB 114.2 KB 0 B 24.6 KB
isValidNfeKey 2.7 KB 2.7 KB 0 B 1.5 KB
isValidPIS 1.2 KB 1.2 KB 0 B 785 B
isValidPassport 1.0 KB 1.0 KB 0 B 654 B
isValidPhone 2.6 KB 2.6 KB 0 B 1.3 KB
isValidPis 1.2 KB 1.2 KB 0 B 785 B
isValidPixKey 4.6 KB 4.6 KB 0 B 2.1 KB
isValidPixPayload 2.9 KB 2.9 KB 0 B 1.5 KB
isValidProcessoJuridico 1.3 KB 1.3 KB 0 B 787 B
isValidRegistroProfissional 1.6 KB 1.6 KB 0 B 964 B
isValidRenavam 1.3 KB 1.3 KB 0 B 815 B
isValidServicePhone 1.5 KB 1.5 KB 0 B 846 B
isValidVin 1.6 KB 1.6 KB 0 B 995 B
isValidVoterId 1.6 KB 1.6 KB 0 B 900 B
parseBoleto 1020 B 1020 B 0 B 634 B
parseCaepf 1003 B 1003 B 0 B 621 B
parseCbo 1002 B 1002 B 0 B 620 B
parseCei 1003 B 1003 B 0 B 619 B
parseCep 1002 B 1002 B 0 B 620 B
parseCertidao 1003 B 1003 B 0 B 621 B
parseCfop 1002 B 1002 B 0 B 620 B
parseCnae 1002 B 1002 B 0 B 620 B
parseCnh 1003 B 1003 B 0 B 621 B
parseCno 1003 B 1003 B 0 B 619 B
parseCnpj 1.1 KB 1.1 KB 0 B 669 B
parseCns 1003 B 1003 B 0 B 621 B
parseCpf 1003 B 1003 B 0 B 621 B
parseCurrency 1.4 KB 1.4 KB 0 B 881 B
parseIban 1.0 KB 1.0 KB 0 B 638 B
parseLegalNature 1002 B 1002 B 0 B 620 B
parseLicensePlate 1.0 KB 1.0 KB 0 B 638 B
parseNcm 1002 B 1002 B 0 B 620 B
parseNfeKey 1.0 KB 1.0 KB 0 B 659 B
parsePassport 1.0 KB 1.0 KB 0 B 637 B
parsePhone 1.1 KB 1.1 KB 0 B 707 B
parsePis 1003 B 1003 B 0 B 621 B
parseProcessoJuridico 1003 B 1003 B 0 B 621 B
parseVoterId 1.0 KB 1.0 KB 0 B 650 B
removeAccents 953 B 953 B 0 B 593 B
subBusinessDays 6.9 KB 6.9 KB 0 B 2.9 KB
toStandardSchema 1.1 KB 1.1 KB 0 B 716 B
How this is measured

Every export is imported alone into an esbuild consumer bundle (minified, tree-shaken) built from the head and from the base of this pull request; the sizes are the resulting bundles, gzip is their gzipped size. 🔴 marks a regression: a pre-existing export that grew more than 20% and more than 256 B, or the bundle importing every pre-existing export growing more than 5%. 🟡 is growth under the threshold, 🟢 a decrease, ⚪ no change, 🆕 an export that does not exist on the base (never a regression), 🗑️ an export that was removed. An intentional increase is accepted with the tree-shaking: accepted label.

@codecov

codecov Bot commented Sep 22, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (bdd4e26) to head (090d73d).

Additional details and impacted files
@@            Coverage Diff            @@
##              main      #588   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          186       186           
  Lines         2069      2069           
  Branches       613       613           
=========================================
  Hits          2069      2069           
Flag Coverage Δ
node 100.00% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

…r them

The leading underscore of `_templates` said "not a page" next to the `_sidebar.md` and
`_coverpage.md` docsify looks for, which the folder never was: nothing routes to it, the sitemap
is built from the links of each `_sidebar.md` and `robots.txt` keeps crawlers out of `/snippets/`
whatever sits under it. Now that a template is named `.tmpl`, the extension says what the file is
and the folder can say where it belongs.

The one walk over `docs/` that the folder name did reach is the Context7 index, which reads the
folder list of `context7.json` rather than the site, so the templates are excluded there by name:
an index of `@@Placeholder@@` markers helps nobody.
@hyanmandian

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Sep 22, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

This branch was successfully deployed

1 active deployment
Preview 090d73d6 Deployed Sep 22, 2026 by vercel[bot]
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