Skip to content

Commit 185548a

Browse files
authored
fix(richtext-lexical): prevent invalid h0 heading nodes when all heading sizes are disabled (#16090)
## What Fixes `HeadingFeature({ enabledHeadingSizes: [] })` creating invalid `h0` heading nodes that corrupt stored data. Closes #15899 ## Why When `enabledHeadingSizes` is an empty array, the heading markdown transformer builds its regex from an empty alternation group: ``` pattern = "^()\\s" // matches ANY leading whitespace ``` This regex matches any line starting with a space or tab. The empty capture group produces `match[1] = ""`, so: ```js tag = 'h' + match[1]?.length // 'h' + 0 = 'h0' ``` An invalid `h0` heading node is created and persisted to the database. If the HeadingFeature is later removed, these nodes cause a runtime error (`parseEditorState: type "heading" not found`). ## Changes Skip registering the heading markdown transformer when `enabledHeadingSizes` is empty. No heading sizes enabled means no heading markdown shortcuts should be active. ## Testing - `npx tsc --noEmit` passes - Lint passes - With this fix, `HeadingFeature({ enabledHeadingSizes: [] })` registers zero markdown transformers, so no heading conversion can occur
1 parent 974870a commit 185548a

File tree

1 file changed

+2
-1
lines changed
  • packages/richtext-lexical/src/features/heading/server

1 file changed

+2
-1
lines changed

packages/richtext-lexical/src/features/heading/server/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ export const HeadingFeature = createServerFeature<
3939
ClientFeature: '@payloadcms/richtext-lexical/client#HeadingFeatureClient',
4040
clientFeatureProps: props,
4141
i18n,
42-
markdownTransformers: [MarkdownTransformer(enabledHeadingSizes)],
42+
markdownTransformers:
43+
enabledHeadingSizes.length > 0 ? [MarkdownTransformer(enabledHeadingSizes)] : [],
4344
nodes: [
4445
createNode({
4546
converters: {

0 commit comments

Comments
 (0)