Skip to content

Commit

Permalink
fix: remove empty attributes in getDebugJSON
Browse files Browse the repository at this point in the history
  • Loading branch information
philippkuehn committed May 19, 2021
1 parent 61b06e7 commit 940fd69
Showing 1 changed file with 44 additions and 25 deletions.
69 changes: 44 additions & 25 deletions packages/core/src/helpers/getDebugJSON.ts
Original file line number Diff line number Diff line change
@@ -1,31 +1,50 @@
import { Node as ProseMirrorNode } from 'prosemirror-model'
import { JSONContent } from '../types'

interface DebugJSONContent extends JSONContent {
from: number,
to: number,
}

/**
* Returns a node tree with node positions.
*/
export default function getDebugJSON(node: ProseMirrorNode) {
const debug = (startNode: ProseMirrorNode, startOffset = 0) => {
const nodes: any[] = []

startNode.forEach((n, offset) => {
const from = startOffset + offset
const to = from + n.nodeSize

nodes.push({
type: n.type.name,
attrs: { ...n.attrs },
from,
to,
marks: n.marks.map(mark => ({
type: mark.type.name,
attrs: { ...mark.attrs },
})),
content: debug(n, from + 1),
})
})

return nodes
}

return debug(node)
export default function getDebugJSON(node: ProseMirrorNode, startOffset = 0) {
const nodes: DebugJSONContent[] = []

node.forEach((n, offset) => {
const from = startOffset + offset
const to = from + n.nodeSize
const marks = n.marks.map(mark => ({
type: mark.type.name,
attrs: { ...mark.attrs },
}))
const attrs = { ...n.attrs }
const content = getDebugJSON(n, from + 1)
const output: DebugJSONContent = {
type: n.type.name,
from,
to,
}

if (Object.keys(attrs).length) {
output.attrs = attrs
}

if (marks.length) {
output.marks = marks
}

if (content.length) {
output.content = content
}

if (n.text) {
output.text = n.text
}

nodes.push(output)
})

return nodes
}

0 comments on commit 940fd69

Please sign in to comment.