mirror of
https://github.com/stablyai/orca.git
synced 2026-09-22 08:02:28 +00:00
Merge branch 'stack-reconcile' into stack-final
This commit is contained in:
@@ -23,20 +23,20 @@ function roundTrip(source: string): string {
|
||||
describe('maskCodeSpanPadding', () => {
|
||||
it('leaves a node without a code mark alone', () => {
|
||||
const nodes = [{ type: 'text', text: ' padded ', marks: [] }]
|
||||
expect(maskCodeSpanPadding(nodes)).toEqual(nodes)
|
||||
expect(maskCodeSpanPadding(nodes).nodes).toEqual(nodes)
|
||||
})
|
||||
|
||||
it('leaves an unpadded code span alone', () => {
|
||||
const nodes = [{ type: 'text', text: 'code', marks: [{ type: 'code' }] }]
|
||||
expect(maskCodeSpanPadding(nodes)).toEqual(nodes)
|
||||
expect(maskCodeSpanPadding(nodes).nodes).toEqual(nodes)
|
||||
})
|
||||
|
||||
it('round-trips the padding it masks', () => {
|
||||
const [masked] = maskCodeSpanPadding([
|
||||
const masked = maskCodeSpanPadding([
|
||||
{ type: 'text', text: ' code ', marks: [{ type: 'code' }] }
|
||||
])
|
||||
expect(masked.text).not.toContain(' ')
|
||||
expect(restoreCodeSpanPadding(masked.text ?? '')).toBe(' code ')
|
||||
expect(masked.nodes[0]?.text).not.toContain(' ')
|
||||
expect(restoreCodeSpanPadding(masked.nodes[0]?.text ?? '', masked.placeholder)).toBe(' code ')
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -37,11 +37,12 @@ function paddingPlaceholder(nodes: MarkdownNodeLike[]): string {
|
||||
return placeholder
|
||||
}
|
||||
|
||||
export function maskCodeSpanPadding(
|
||||
nodes: MarkdownNodeLike[],
|
||||
placeholder = paddingPlaceholder(nodes)
|
||||
): MarkdownNodeLike[] {
|
||||
return nodes.map((node) => {
|
||||
export function maskCodeSpanPadding(nodes: MarkdownNodeLike[]): {
|
||||
nodes: MarkdownNodeLike[]
|
||||
placeholder: string
|
||||
} {
|
||||
const placeholder = paddingPlaceholder(nodes)
|
||||
const masked = nodes.map((node) => {
|
||||
if (node?.type !== 'text' || !hasCodeMark(node)) {
|
||||
return node
|
||||
}
|
||||
@@ -57,9 +58,10 @@ export function maskCodeSpanPadding(
|
||||
text: placeholder.repeat(leading.length) + body + placeholder.repeat(trailing.length)
|
||||
}
|
||||
})
|
||||
return { nodes: masked, placeholder }
|
||||
}
|
||||
|
||||
export function restoreCodeSpanPadding(markdown: string, placeholder = '\uE000'): string {
|
||||
export function restoreCodeSpanPadding(markdown: string, placeholder: string): string {
|
||||
return markdown.split(placeholder).join(' ')
|
||||
}
|
||||
|
||||
@@ -87,9 +89,11 @@ export const RichMarkdownCodeSpanPadding = Extension.create({
|
||||
nodes: MarkdownNodeLike[],
|
||||
...rest: unknown[]
|
||||
) {
|
||||
const placeholder = paddingPlaceholder(nodes ?? [])
|
||||
const rendered = walk.call(this, maskCodeSpanPadding(nodes ?? [], placeholder), ...rest)
|
||||
return typeof rendered === 'string' ? restoreCodeSpanPadding(rendered, placeholder) : rendered
|
||||
const masked = maskCodeSpanPadding(nodes ?? [])
|
||||
const rendered = walk.call(this, masked.nodes, ...rest)
|
||||
return typeof rendered === 'string'
|
||||
? restoreCodeSpanPadding(rendered, masked.placeholder)
|
||||
: rendered
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user