Skip to content

render-helper: decode entities with entities instead of he - #1606

Merged
feruzm merged 2 commits into
developfrom
perf/render-helper-drop-he
Aug 21, 2026
Merged

render-helper: decode entities with entities instead of he#1606
feruzm merged 2 commits into
developfrom
perf/render-helper-drop-he

Conversation

@feruzm

@feruzm feruzm commented Aug 21, 2026

Copy link
Copy Markdown
Member

@ecency/render-helper imported he for he.decode in three places (helper.ts, post-body-summary.ts, catch-post-image.ts) while entities was already in the browser bundle through htmlparser2 and dom-serializer. Two HTML entity decoders cost about 62 KB gzipped on every web route; dropping he saves about 30 KB of that.

A decodeEntities helper wraps entities.decodeHTML for the three call sites and the he / @types/he dependencies are removed. One behavioural difference was found in review: decodeHTML throws a RangeError on a numeric reference whose digit string overflows a double (309+ decimal or 256+ hex digits, leading zeros included), where he returned U+FFFD. Bodies and json_metadata are user-authored, so the helper strips leading zeros first (A and &# + 400 zeros + 65; are still A), replaces a reference that is still overlong with U+FFFD (what the HTML spec and he produce for an out-of-range code point), and returns the input unchanged if the decoder still rejects it. A differential run of he.decode against the helper over 15,190 inputs (every named reference he knows with and without the semicolon and with trailing text, numeric and hex references across the BMP and astral planes, zero-padded, malformed and legacy forms) produced identical output.

dist/ is not rebuilt here; the tracked build output still imports he, which this PR removes from the lockfile, so the release flow's dist rebuild needs to land with the merge rather than after it (the red tests check is that tracked dist).

Test plan

  • New decode-entities.spec.ts: parity on ordinary references, zero-padded references, overlong decimal / hex / no-semicolon references decode to U+FFFD without throwing, and the payload is exercised through decodeImageSrc, catchPostImage (metadata string, metadata array, body image) and getPostBodySummary at the description length and unbounded.
  • Package suite: 22 files, 1,269 tests; tsc --noEmit and eslint clean; web specs that consume the rebuilt dist (slim-entry, entry thumbnails, landing page) pass.

Closes #1596

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Aug 21, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (1) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Stale dist imports he ✗ Dismissed 🐞 Bug ≡ Correctness
Description
@ecency/render-helper publishes only dist/, but dist/* still imports he while this PR
removes he from dependencies, causing runtime Cannot find module 'he' for consumers that load
the published entrypoints. This is a hard break unless dist/ is rebuilt (or he is kept) in the
same change set.
Code

packages/render-helper/package.json[R60-62]

   "dom-serializer": "^2.0.0",
-    "he": "^1.2.0",
+    "entities": "^6.0.1",
   "htmlparser2": "^10.0.0",
Relevance

●●● Strong

Recent accepted precedent shows team fixes stale/broken dist build output issues before release.

PR-#1566

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The published entrypoints resolve to dist/*, and the checked-in dist/* currently imports he.
Since this PR removes he from dependencies, consumers that load the exported files will fail to
resolve he.

packages/render-helper/package.json[17-31]
packages/render-helper/package.json[58-62]
packages/render-helper/dist/browser/index.js[1-3]
packages/render-helper/dist/node/index.mjs[1-3]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`packages/render-helper/package.json` exports only `dist/*`, but the currently checked-in `dist/*` files still `import he from 'he'`. This PR removes `he` from dependencies, so consumers (including workspace consumers that resolve exports) can hit runtime module-resolution failures.
## Issue Context
- `package.json` exports point to `dist/node/*` and `dist/browser/*`.
- `dist/browser/index.js` and `dist/node/index.mjs` currently import `he`.
- This PR removes `he` from dependencies.
## Fix Focus Areas
- packages/render-helper/package.json[17-31]
- packages/render-helper/dist/browser/index.js[1-3]
- packages/render-helper/dist/node/index.mjs[1-3]
## What to do
1. Run the render-helper build so the compiled outputs switch from `he` to `entities`.
2. Commit the updated `dist/` outputs (JS + d.ts + maps) so they no longer reference `he`.
3. Optionally add a safeguard (e.g., CI check or a `prepack`/release step) that prevents merging/publishing when `dist/` is out of sync with `src/` dependencies.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. entry() uses as any 📘 Rule violation ⚙ Maintainability
Description
The new test helper entry() casts the constructed object to any, introducing a new any usage
in TypeScript code. This reduces type safety and violates the rule banning new any usage in
changed TS files.
Code

packages/render-helper/src/decode-entities.spec.ts[50]

+    }) as any
Relevance

●●● Strong

Multiple recent accepted precedents require removing new 'as any' casts in test fixtures/spec files.

PR-#1489
PR-#1244

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
PR Compliance ID 2668119 disallows introducing new any usages in changed TypeScript. The added
test file uses }) as any, introducing a new any cast.

Rule 2668119: Disallow implicit and any types in new TypeScript code
packages/render-helper/src/decode-entities.spec.ts[42-50]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A new `as any` cast was introduced in `packages/render-helper/src/decode-entities.spec.ts`, which violates the policy disallowing new `any` usage in new/modified TypeScript code.
## Issue Context
The `Entry` interface in `packages/render-helper/src/types/entry.interface.ts` already permits flexible shapes (`body: any`, `json_metadata?: any`), so this test helper can be typed as `Entry` without needing an `any` cast.
## Fix Focus Areas
- packages/render-helper/src/decode-entities.spec.ts[42-50]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational

3. Orphaned JSDoc block 🐞 Bug ⚙ Maintainability
Description
In helper.ts, the existing JSDoc for decodeImageSrc is now separated from the function by the
newly inserted decodeEntities, leaving a standalone/orphaned comment block that no longer
documents any symbol. This makes generated docs and editor hover help misleading around the decoding
helpers.
Code

packages/render-helper/src/helper.ts[R14-17]

+/**
+ * Decode HTML character references in user-authored text.
+ *
+ * `entities.decodeHTML` throws a RangeError on a numeric reference with 309+
Relevance

●●● Strong

Team accepts fixes to misleading/incomplete JSDoc comments as maintainability nits.

PR-#1378

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The file now contains two adjacent doc blocks before OVERLONG_NUMERIC_REF, so the earlier one no
longer documents decodeImageSrc (which appears later).

packages/render-helper/src/helper.ts[5-43]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A JSDoc block describing `decodeImageSrc` now sits above `decodeEntities` and does not attach to any declaration (back-to-back comment blocks). This makes the code harder to read and can break generated docs / IDE hover help.
## Issue Context
`decodeEntities()` was inserted between the existing `decodeImageSrc` comment and `decodeImageSrc` itself.
## Fix Focus Areas
- packages/render-helper/src/helper.ts[5-43]
## What to do
- Move the `decodeImageSrc` documentation to immediately precede `export function decodeImageSrc(...)`.
- Or, if the comment should describe the new `decodeEntities`, merge/update the text so each helper has the correct doc block immediately above it.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Tip of the day
💡 Did you know, you can tweak Display preferences with a live preview to see your comment before it ships

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

@coderabbitai

coderabbitai Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: eaa5c88b-7a9d-4725-b82f-81387073c2be


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Aug 21, 2026

Copy link
Copy Markdown

PR Summary by Qodo

render-helper: replace he.decode with entities.decodeHTML via safe decodeEntities

✨ Enhancement 🧪 Tests ⚙️ Configuration changes 🕐 20-40 Minutes

Grey Divider

AI Description

• Replace he.decode usage with a shared decodeEntities helper backed by entities.decodeHTML.
• Guard against entities RangeError on overlong numeric references to avoid SSR/feed render
 crashes.
• Remove he/@types/he, update bundler externals, and add regression specs for real call paths.
Diagram

graph TD
  CPI["catch-post-image.ts"] --> DE(("decodeEntities")) --> ENT{{"entities.decodeHTML"}} --> OUT["decoded string"]
  PBS["post-body-summary.ts"] --> DE
  HIS["helper.ts: decodeImageSrc"] --> DE
  TST["decode-entities.spec.ts"] --> DE

  subgraph Legend
    direction LR
    _mod["Module"] ~~~ _fn(("Function")) ~~~ _ext{{"External lib"}}
  end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Try/catch only (no pre-sanitization)
  • ➕ Less custom logic (no regex thresholding).
  • ➖ Would return the original string for overlong numeric references instead of matching he/HTML-spec U+FFFD behavior.
  • ➖ Leaves output parity gaps vs the previous decoder for crafted inputs.
2. Use a DOM-based decoder in browsers (e.g., textarea innerHTML)
  • ➕ No additional JS dependency in pure-browser contexts.
  • ➖ Not suitable/consistent for SSR and non-DOM environments used by this package.
  • ➖ Harder to guarantee parity and edge-case behavior across runtimes.
3. Keep `he` but ensure only one decoder ships (dedupe/bundle config)
  • ➕ Keeps existing, known behavior without edge-case wrapper code.
  • ➖ Goal is specifically to drop he to reduce bundle size; bundling/dedupe may not remove the cost across routes.
  • ➖ Still carries an extra dependency and types package.

Recommendation: Proceed with the current approach: centralizing on entities.decodeHTML (already in the bundle) achieves the size reduction while the decodeEntities wrapper preserves he-equivalent behavior for the known overflow/RangeError class and prevents SSR crashes. The small amount of wrapper logic is justified by the explicit regression coverage and the user-authored input threat model.

Files changed (7) +111 / -30

Enhancement (2) +6 / -8
catch-post-image.tsUse shared decodeEntities for image URL decoding +4/-5

Use shared decodeEntities for image URL decoding

• Replaces direct 'he.decode' calls with 'decodeEntities' when decoding metadata/body image URLs before GIF detection and proxification. Ensures decoding is consistent across the package and inherits the overflow safety behavior.

packages/render-helper/src/catch-post-image.ts

post-body-summary.tsDecode summary text via decodeEntities +2/-3

Decode summary text via decodeEntities

• Switches post summary entity decoding from 'he.decode' to the shared 'decodeEntities' helper. Prevents potential decoder exceptions from breaking summary generation on crafted inputs.

packages/render-helper/src/post-body-summary.ts

Bug fix (1) +24 / -2
helper.tsIntroduce decodeEntities wrapper around entities.decodeHTML +24/-2

Introduce decodeEntities wrapper around entities.decodeHTML

• Replaces 'he' with 'entities.decodeHTML' and adds 'decodeEntities' to centralize decoding. Adds pre-sanitization for overlong numeric references and a catch-all fallback to avoid RangeError propagation in SSR/feed rendering, and updates 'decodeImageSrc' to use the helper.

packages/render-helper/src/helper.ts

Tests (1) +76 / -0
decode-entities.spec.tsAdd regression tests for decodeEntities parity and overflow safety +76/-0

Add regression tests for decodeEntities parity and overflow safety

• Introduces tests that validate ordinary entity decoding parity and ensures overlong numeric references decode to U+FFFD without throwing. Exercises the payload through 'decodeImageSrc', 'catchPostImage', and 'getPostBodySummary' to cover real rendering paths.

packages/render-helper/src/decode-entities.spec.ts

Other (3) +5 / -20
package.jsonDrop 'he' and add 'entities' dependency +1/-2

Drop 'he' and add 'entities' dependency

• Removes 'he' and '@types/he' and adds a direct dependency on 'entities' to align with the new decoder implementation. This reduces duplicated entity-decoder payload in web bundles.

packages/render-helper/package.json

tsup.config.tsUpdate tsup externals from he to entities +1/-1

Update tsup externals from he to entities

• Adjusts bundler externals to reflect the decoder dependency swap, ensuring build output references 'entities' rather than 'he'.

packages/render-helper/tsup.config.ts

pnpm-lock.yamlRemove he/@types/he from lockfile; add entities +3/-17

Remove he/@types/he from lockfile; add entities

• Updates the lockfile to remove 'he' and '@types/he' entries and include 'entities@6.0.1' for render-helper. Reflects the dependency graph changes introduced by the package.json update.

pnpm-lock.yaml

@greptile-apps

greptile-apps Bot commented Aug 21, 2026

Copy link
Copy Markdown

Greptile Summary

This PR replaces he with the existing entities decoder while preserving entity-decoding behavior for summaries and image URLs.

  • Adds a shared decoder that normalizes zero-padded numeric references and safely replaces overlong references.
  • Updates image extraction and post-summary call sites, tests the affected paths, rebuilds package artifacts, and removes the old dependency.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

Filename Overview
packages/render-helper/src/helper.ts Introduces the shared decodeEntities helper with leading-zero normalization, overlong-reference replacement, and guarded decoding.
packages/render-helper/src/decode-entities.spec.ts Covers ordinary, padded, overlong, and semicolonless references across summary and image-processing paths.
packages/render-helper/src/catch-post-image.ts Replaces direct he.decode calls with the shared decoder for metadata and body image URLs.
packages/render-helper/src/post-body-summary.ts Uses the shared decoder for final post-summary entity decoding.
packages/render-helper/package.json Updates the package version and replaces he with entities.
packages/render-helper/tsup.config.ts Externalizes entities in place of the removed he dependency.

Reviews (3): Last reviewed commit: "chore: apply changeset versioning for PR..." | Re-trigger Greptile

Comment thread packages/render-helper/src/helper.ts

@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: e01cac92a9

ℹ️ 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".

* produce for an out-of-range code point, and anything else the decoder
* rejects is returned as-is.
*/
const OVERLONG_NUMERIC_REF = /&#(?:x[0-9a-f]{256,}|[0-9]{309,});?/gi

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 Preserve long numeric references with leading zeros

This length-only check also replaces valid references whose digits are mostly leading zeros. For example, &# followed by 309 zeros and 65; has more than 309 digits but evaluates to code point 65, so both the previous he.decode implementation and decodeHTML produce A; this pre-pass instead forces it to U+FFFD. Strip leading zeros or determine whether the parsed value actually overflows before replacing the reference.

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.

Right, and taken. Leading zeros are now stripped before the overflow check (decimal and hex patterns kept separate so a decimal reference followed by a hex letter is untouched), so &# + 400 zeros + 65; decodes to A as it did with he; only a reference that is still overlong after that becomes U+FFFD. A differential run of he.decode against the new helper over 15,190 inputs, including zero-padded and mixed cases, shows no mismatches, and the spec covers the padded forms.

@feruzm

feruzm commented Aug 21, 2026

Copy link
Copy Markdown
Member Author

The red tests (24.x) check is the tracked packages/render-helper/dist, which still imports he while this PR removes he from the lockfile; the self-hosted suite loads that dist directly. The dist is intentionally not rebuilt by hand here: the release flow rebuilds and commits it on the branch, after which the check turns green. Merging without that rebuild would leave the tracked dist importing a package that is no longer installed.

@qodo-code-review

qodo-code-review Bot commented Aug 21, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Stale dist imports he ✗ Dismissed 🐞 Bug ≡ Correctness
Description
@ecency/render-helper publishes only dist/, but dist/* still imports he while this PR
removes he from dependencies, causing runtime Cannot find module 'he' for consumers that load
the published entrypoints. This is a hard break unless dist/ is rebuilt (or he is kept) in the
same change set.
Code

packages/render-helper/package.json[R60-62]

    "dom-serializer": "^2.0.0",
-    "he": "^1.2.0",
+    "entities": "^6.0.1",
    "htmlparser2": "^10.0.0",
Relevance

●●● Strong

Recent accepted precedent shows team fixes stale/broken dist build output issues before release.

PR-#1566

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The published entrypoints resolve to dist/*, and the checked-in dist/* currently imports he.
Since this PR removes he from dependencies, consumers that load the exported files will fail to
resolve he.

packages/render-helper/package.json[17-31]
packages/render-helper/package.json[58-62]
packages/render-helper/dist/browser/index.js[1-3]
packages/render-helper/dist/node/index.mjs[1-3]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`packages/render-helper/package.json` exports only `dist/*`, but the currently checked-in `dist/*` files still `import he from 'he'`. This PR removes `he` from dependencies, so consumers (including workspace consumers that resolve exports) can hit runtime module-resolution failures.

## Issue Context
- `package.json` exports point to `dist/node/*` and `dist/browser/*`.
- `dist/browser/index.js` and `dist/node/index.mjs` currently import `he`.
- This PR removes `he` from dependencies.

## Fix Focus Areas
- packages/render-helper/package.json[17-31]
- packages/render-helper/dist/browser/index.js[1-3]
- packages/render-helper/dist/node/index.mjs[1-3]

## What to do
1. Run the render-helper build so the compiled outputs switch from `he` to `entities`.
2. Commit the updated `dist/` outputs (JS + d.ts + maps) so they no longer reference `he`.
3. Optionally add a safeguard (e.g., CI check or a `prepack`/release step) that prevents merging/publishing when `dist/` is out of sync with `src/` dependencies.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. entry() uses as any ✓ Resolved 📘 Rule violation ⚙ Maintainability
Description
The new test helper entry() casts the constructed object to any, introducing a new any usage
in TypeScript code. This reduces type safety and violates the rule banning new any usage in
changed TS files.
Code

packages/render-helper/src/decode-entities.spec.ts[50]

+    }) as any
Relevance

●●● Strong

Multiple recent accepted precedents require removing new 'as any' casts in test fixtures/spec files.

PR-#1489
PR-#1244

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
PR Compliance ID 2668119 disallows introducing new any usages in changed TypeScript. The added
test file uses }) as any, introducing a new any cast.

Rule 2668119: Disallow implicit and any types in new TypeScript code
packages/render-helper/src/decode-entities.spec.ts[42-50]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A new `as any` cast was introduced in `packages/render-helper/src/decode-entities.spec.ts`, which violates the policy disallowing new `any` usage in new/modified TypeScript code.

## Issue Context
The `Entry` interface in `packages/render-helper/src/types/entry.interface.ts` already permits flexible shapes (`body: any`, `json_metadata?: any`), so this test helper can be typed as `Entry` without needing an `any` cast.

## Fix Focus Areas
- packages/render-helper/src/decode-entities.spec.ts[42-50]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational

3. Orphaned JSDoc block ✓ Resolved 🐞 Bug ⚙ Maintainability
Description
In helper.ts, the existing JSDoc for decodeImageSrc is now separated from the function by the
newly inserted decodeEntities, leaving a standalone/orphaned comment block that no longer
documents any symbol. This makes generated docs and editor hover help misleading around the decoding
helpers.
Code

packages/render-helper/src/helper.ts[R14-17]

+/**
+ * Decode HTML character references in user-authored text.
+ *
+ * `entities.decodeHTML` throws a RangeError on a numeric reference with 309+
Relevance

●●● Strong

Team accepts fixes to misleading/incomplete JSDoc comments as maintainability nits.

PR-#1378

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The file now contains two adjacent doc blocks before OVERLONG_NUMERIC_REF, so the earlier one no
longer documents decodeImageSrc (which appears later).

packages/render-helper/src/helper.ts[5-43]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A JSDoc block describing `decodeImageSrc` now sits above `decodeEntities` and does not attach to any declaration (back-to-back comment blocks). This makes the code harder to read and can break generated docs / IDE hover help.

## Issue Context
`decodeEntities()` was inserted between the existing `decodeImageSrc` comment and `decodeImageSrc` itself.

## Fix Focus Areas
- packages/render-helper/src/helper.ts[5-43]

## What to do
- Move the `decodeImageSrc` documentation to immediately precede `export function decodeImageSrc(...)`.
- Or, if the comment should describe the new `decodeEntities`, merge/update the text so each helper has the correct doc block immediately above it.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 84 rules
✅ Skills: 6 invoked
  add-feature
  add-query
  add-sdk-mutation
  add-test
  code-review
  debug
✅ Web pages:
  +2 more
Review mode: ⚖️ Balanced: This is a behavior-changing decoder and dependency/build change across several render paths, with subtle compatibility and malformed-input handling risks; it is not dense enough to justify redundant extended review.

Grey Divider

Tip of the day
💡 Did you know, you can tweak Display preferences with a live preview to see your comment before it ships

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread packages/render-helper/src/decode-entities.spec.ts Outdated
Comment thread packages/render-helper/package.json
Comment thread packages/render-helper/src/helper.ts Outdated
The package imported he for he.decode in three places while entities was
already in the browser bundle through htmlparser2 and dom-serializer.
Two HTML entity decoders cost about 62 KB gzipped on every web route;
dropping he saves about 30 KB of that.

A decodeEntities helper wraps entities.decodeHTML for the three call
sites. A differential run over 14,091 inputs (every named reference he
knows, with and without the semicolon and with trailing text, numeric and
hex references across the BMP and astral planes, malformed and legacy
forms) produced identical output from both libraries, with one class of
exception found in review: decodeHTML throws a RangeError on a numeric
reference with 309+ decimal or 256+ hex digits, where he returned U+FFFD.
Bodies and json_metadata are user-authored, so the helper replaces such
references with U+FFFD first and returns the input unchanged if the
decoder still rejects it. Regression specs cover decodeImageSrc,
catchPostImage (metadata string, metadata array, body image) and
getPostBodySummary with that payload.

Closes #1596
@feruzm
feruzm force-pushed the perf/render-helper-drop-he branch from e01cac9 to d7fbd34 Compare August 21, 2026 06:35
@feruzm feruzm added the patch Bug fixes and patches (1.0.0 → 1.0.1) label Aug 21, 2026
@feruzm
feruzm merged commit c38fbdc into develop Aug 21, 2026
13 checks passed
@feruzm
feruzm deleted the perf/render-helper-drop-he branch August 21, 2026 07:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

patch Bug fixes and patches (1.0.0 → 1.0.1)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

render-helper ships two HTML entity decoders (he + entities)

1 participant