fix(editor): keep reconciliation cache contract

This commit is contained in:
Neil
2026-09-19 00:43:37 -07:00
parent 9aa5f5724a
commit bd96ccf2c1
2 changed files with 5 additions and 33 deletions
@@ -1,7 +1,5 @@
// @vitest-environment happy-dom
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import * as htmlValidation from './markdown-rich-html-validation'
import * as roundTrip from './markdown-round-trip'
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
import { i18n } from '@/i18n/i18n'
import { getMarkdownRichModeEligibility } from './markdown-rich-mode'
import {
@@ -75,21 +73,6 @@ describe('getCachedMarkdownRichModeEligibility', () => {
)
})
it('supports a conservative source-mode decision without HTML round trips', () => {
const htmlValidationSpy = vi.spyOn(htmlValidation, 'getRichMarkdownHtmlValidationOutput')
const roundTripSpy = vi.spyOn(roundTrip, 'getRichMarkdownRoundTripOutput')
const result = getCachedMarkdownRichModeEligibility({
content: '<span>edited</span>\n',
sizeOverridden: false,
validateHtmlRoundTrip: false
})
expect(result.unsupportedMessage).not.toBeNull()
expect(htmlValidationSpy).not.toHaveBeenCalled()
expect(roundTripSpy).not.toHaveBeenCalled()
})
it('stays correct once the corpus exceeds the cache capacity', () => {
const expected = CORPUS.map(({ content }) =>
getMarkdownRichModeEligibility({ content, sizeOverridden: false })
@@ -8,7 +8,6 @@ import {
type EligibilityCacheEntry = {
content: string
sizeOverridden: boolean
validateHtmlRoundTrip: boolean
decision: MarkdownRichModeEligibilityDecision
}
@@ -37,7 +36,6 @@ const entries: EligibilityCacheEntry[] = []
export function getCachedMarkdownRichModeEligibility(params: {
content: string
sizeOverridden: boolean
validateHtmlRoundTrip?: boolean
}): MarkdownRichModeEligibility {
const decision = getCachedMarkdownRichModeEligibilityDecision(params)
return {
@@ -49,16 +47,11 @@ export function getCachedMarkdownRichModeEligibility(params: {
function getCachedMarkdownRichModeEligibilityDecision(params: {
content: string
sizeOverridden: boolean
validateHtmlRoundTrip?: boolean
}): MarkdownRichModeEligibilityDecision {
const { content, sizeOverridden, validateHtmlRoundTrip = true } = params
const { content, sizeOverridden } = params
for (let index = 0; index < entries.length; index += 1) {
const entry = entries[index]
if (
entry.sizeOverridden !== sizeOverridden ||
entry.validateHtmlRoundTrip !== validateHtmlRoundTrip ||
entry.content !== content
) {
if (entry.sizeOverridden !== sizeOverridden || entry.content !== content) {
continue
}
if (index > 0) {
@@ -68,12 +61,8 @@ function getCachedMarkdownRichModeEligibilityDecision(params: {
return entry.decision
}
const decision = getMarkdownRichModeEligibilityDecision({
content,
sizeOverridden,
validateHtmlRoundTrip
})
entries.unshift({ content, sizeOverridden, validateHtmlRoundTrip, decision })
const decision = getMarkdownRichModeEligibilityDecision({ content, sizeOverridden })
entries.unshift({ content, sizeOverridden, decision })
if (entries.length > MAX_ENTRIES) {
entries.length = MAX_ENTRIES
}