403Webshell
Server IP : 34.87.99.72  /  Your IP : 216.73.217.31
Web Server : Apache/2.4.46 (Unix) OpenSSL/1.1.1n
System : Linux zlock-bitnami-lamp-prod-v2-vm 4.19.0-16-cloud-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64
User : bitnami ( 1000)
PHP Version : 7.4.18
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : OFF
Directory :  /home/bitnami/htdocs/app/node_modules/prosemirror-model/dist/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/bitnami/htdocs/app/node_modules/prosemirror-model/dist/index.es.js.map
{"version":3,"file":"index.es.js","sources":["../src/diff.js","../src/fragment.js","../src/comparedeep.js","../src/mark.js","../src/replace.js","../src/resolvedpos.js","../src/node.js","../src/content.js","../src/schema.js","../src/from_dom.js","../src/to_dom.js"],"sourcesContent":["export function findDiffStart(a, b, pos) {\n  for (let i = 0;; i++) {\n    if (i == a.childCount || i == b.childCount)\n      return a.childCount == b.childCount ? null : pos\n\n    let childA = a.child(i), childB = b.child(i)\n    if (childA == childB) { pos += childA.nodeSize; continue }\n\n    if (!childA.sameMarkup(childB)) return pos\n\n    if (childA.isText && childA.text != childB.text) {\n      for (let j = 0; childA.text[j] == childB.text[j]; j++)\n        pos++\n      return pos\n    }\n    if (childA.content.size || childB.content.size) {\n      let inner = findDiffStart(childA.content, childB.content, pos + 1)\n      if (inner != null) return inner\n    }\n    pos += childA.nodeSize\n  }\n}\n\nexport function findDiffEnd(a, b, posA, posB) {\n  for (let iA = a.childCount, iB = b.childCount;;) {\n    if (iA == 0 || iB == 0)\n      return iA == iB ? null : {a: posA, b: posB}\n\n    let childA = a.child(--iA), childB = b.child(--iB), size = childA.nodeSize\n    if (childA == childB) {\n      posA -= size; posB -= size\n      continue\n    }\n\n    if (!childA.sameMarkup(childB)) return {a: posA, b: posB}\n\n    if (childA.isText && childA.text != childB.text) {\n      let same = 0, minSize = Math.min(childA.text.length, childB.text.length)\n      while (same < minSize && childA.text[childA.text.length - same - 1] == childB.text[childB.text.length - same - 1]) {\n        same++; posA--; posB--\n      }\n      return {a: posA, b: posB}\n    }\n    if (childA.content.size || childB.content.size) {\n      let inner = findDiffEnd(childA.content, childB.content, posA - 1, posB - 1)\n      if (inner) return inner\n    }\n    posA -= size; posB -= size\n  }\n}\n","import {findDiffStart, findDiffEnd} from \"./diff\"\n\n// ::- A fragment represents a node's collection of child nodes.\n//\n// Like nodes, fragments are persistent data structures, and you\n// should not mutate them or their content. Rather, you create new\n// instances whenever needed. The API tries to make this easy.\nexport class Fragment {\n  constructor(content, size) {\n    this.content = content\n    // :: number\n    // The size of the fragment, which is the total of the size of its\n    // content nodes.\n    this.size = size || 0\n    if (size == null) for (let i = 0; i < content.length; i++)\n      this.size += content[i].nodeSize\n  }\n\n  // :: (number, number, (node: Node, start: number, parent: Node, index: number) → ?bool, ?number)\n  // Invoke a callback for all descendant nodes between the given two\n  // positions (relative to start of this fragment). Doesn't descend\n  // into a node when the callback returns `false`.\n  nodesBetween(from, to, f, nodeStart = 0, parent) {\n    for (let i = 0, pos = 0; pos < to; i++) {\n      let child = this.content[i], end = pos + child.nodeSize\n      if (end > from && f(child, nodeStart + pos, parent, i) !== false && child.content.size) {\n        let start = pos + 1\n        child.nodesBetween(Math.max(0, from - start),\n                           Math.min(child.content.size, to - start),\n                           f, nodeStart + start)\n      }\n      pos = end\n    }\n  }\n\n  // :: ((node: Node, pos: number, parent: Node) → ?bool)\n  // Call the given callback for every descendant node. The callback\n  // may return `false` to prevent traversal of a given node's children.\n  descendants(f) {\n    this.nodesBetween(0, this.size, f)\n  }\n\n  // :: (number, number, ?string, ?string) → string\n  // Extract the text between `from` and `to`. See the same method on\n  // [`Node`](#model.Node.textBetween).\n  textBetween(from, to, blockSeparator, leafText) {\n    let text = \"\", separated = true\n    this.nodesBetween(from, to, (node, pos) => {\n      if (node.isText) {\n        text += node.text.slice(Math.max(from, pos) - pos, to - pos)\n        separated = !blockSeparator\n      } else if (node.isLeaf && leafText) {\n        text += leafText\n        separated = !blockSeparator\n      } else if (!separated && node.isBlock) {\n        text += blockSeparator\n        separated = true\n      }\n    }, 0)\n    return text\n  }\n\n  // :: (Fragment) → Fragment\n  // Create a new fragment containing the combined content of this\n  // fragment and the other.\n  append(other) {\n    if (!other.size) return this\n    if (!this.size) return other\n    let last = this.lastChild, first = other.firstChild, content = this.content.slice(), i = 0\n    if (last.isText && last.sameMarkup(first)) {\n      content[content.length - 1] = last.withText(last.text + first.text)\n      i = 1\n    }\n    for (; i < other.content.length; i++) content.push(other.content[i])\n    return new Fragment(content, this.size + other.size)\n  }\n\n  // :: (number, ?number) → Fragment\n  // Cut out the sub-fragment between the two given positions.\n  cut(from, to) {\n    if (to == null) to = this.size\n    if (from == 0 && to == this.size) return this\n    let result = [], size = 0\n    if (to > from) for (let i = 0, pos = 0; pos < to; i++) {\n      let child = this.content[i], end = pos + child.nodeSize\n      if (end > from) {\n        if (pos < from || end > to) {\n          if (child.isText)\n            child = child.cut(Math.max(0, from - pos), Math.min(child.text.length, to - pos))\n          else\n            child = child.cut(Math.max(0, from - pos - 1), Math.min(child.content.size, to - pos - 1))\n        }\n        result.push(child)\n        size += child.nodeSize\n      }\n      pos = end\n    }\n    return new Fragment(result, size)\n  }\n\n  cutByIndex(from, to) {\n    if (from == to) return Fragment.empty\n    if (from == 0 && to == this.content.length) return this\n    return new Fragment(this.content.slice(from, to))\n  }\n\n  // :: (number, Node) → Fragment\n  // Create a new fragment in which the node at the given index is\n  // replaced by the given node.\n  replaceChild(index, node) {\n    let current = this.content[index]\n    if (current == node) return this\n    let copy = this.content.slice()\n    let size = this.size + node.nodeSize - current.nodeSize\n    copy[index] = node\n    return new Fragment(copy, size)\n  }\n\n  // : (Node) → Fragment\n  // Create a new fragment by prepending the given node to this\n  // fragment.\n  addToStart(node) {\n    return new Fragment([node].concat(this.content), this.size + node.nodeSize)\n  }\n\n  // : (Node) → Fragment\n  // Create a new fragment by appending the given node to this\n  // fragment.\n  addToEnd(node) {\n    return new Fragment(this.content.concat(node), this.size + node.nodeSize)\n  }\n\n  // :: (Fragment) → bool\n  // Compare this fragment to another one.\n  eq(other) {\n    if (this.content.length != other.content.length) return false\n    for (let i = 0; i < this.content.length; i++)\n      if (!this.content[i].eq(other.content[i])) return false\n    return true\n  }\n\n  // :: ?Node\n  // The first child of the fragment, or `null` if it is empty.\n  get firstChild() { return this.content.length ? this.content[0] : null }\n\n  // :: ?Node\n  // The last child of the fragment, or `null` if it is empty.\n  get lastChild() { return this.content.length ? this.content[this.content.length - 1] : null }\n\n  // :: number\n  // The number of child nodes in this fragment.\n  get childCount() { return this.content.length }\n\n  // :: (number) → Node\n  // Get the child node at the given index. Raise an error when the\n  // index is out of range.\n  child(index) {\n    let found = this.content[index]\n    if (!found) throw new RangeError(\"Index \" + index + \" out of range for \" + this)\n    return found\n  }\n\n  // :: (number) → ?Node\n  // Get the child node at the given index, if it exists.\n  maybeChild(index) {\n    return this.content[index]\n  }\n\n  // :: ((node: Node, offset: number, index: number))\n  // Call `f` for every child node, passing the node, its offset\n  // into this parent node, and its index.\n  forEach(f) {\n    for (let i = 0, p = 0; i < this.content.length; i++) {\n      let child = this.content[i]\n      f(child, p, i)\n      p += child.nodeSize\n    }\n  }\n\n  // :: (Fragment) → ?number\n  // Find the first position at which this fragment and another\n  // fragment differ, or `null` if they are the same.\n  findDiffStart(other, pos = 0) {\n    return findDiffStart(this, other, pos)\n  }\n\n  // :: (Fragment) → ?{a: number, b: number}\n  // Find the first position, searching from the end, at which this\n  // fragment and the given fragment differ, or `null` if they are the\n  // same. Since this position will not be the same in both nodes, an\n  // object with two separate positions is returned.\n  findDiffEnd(other, pos = this.size, otherPos = other.size) {\n    return findDiffEnd(this, other, pos, otherPos)\n  }\n\n  // : (number, ?number) → {index: number, offset: number}\n  // Find the index and inner offset corresponding to a given relative\n  // position in this fragment. The result object will be reused\n  // (overwritten) the next time the function is called. (Not public.)\n  findIndex(pos, round = -1) {\n    if (pos == 0) return retIndex(0, pos)\n    if (pos == this.size) return retIndex(this.content.length, pos)\n    if (pos > this.size || pos < 0) throw new RangeError(`Position ${pos} outside of fragment (${this})`)\n    for (let i = 0, curPos = 0;; i++) {\n      let cur = this.child(i), end = curPos + cur.nodeSize\n      if (end >= pos) {\n        if (end == pos || round > 0) return retIndex(i + 1, end)\n        return retIndex(i, curPos)\n      }\n      curPos = end\n    }\n  }\n\n  // :: () → string\n  // Return a debugging string that describes this fragment.\n  toString() { return \"<\" + this.toStringInner() + \">\" }\n\n  toStringInner() { return this.content.join(\", \") }\n\n  // :: () → ?Object\n  // Create a JSON-serializeable representation of this fragment.\n  toJSON() {\n    return this.content.length ? this.content.map(n => n.toJSON()) : null\n  }\n\n  // :: (Schema, ?Object) → Fragment\n  // Deserialize a fragment from its JSON representation.\n  static fromJSON(schema, value) {\n    if (!value) return Fragment.empty\n    if (!Array.isArray(value)) throw new RangeError(\"Invalid input for Fragment.fromJSON\")\n    return new Fragment(value.map(schema.nodeFromJSON))\n  }\n\n  // :: ([Node]) → Fragment\n  // Build a fragment from an array of nodes. Ensures that adjacent\n  // text nodes with the same marks are joined together.\n  static fromArray(array) {\n    if (!array.length) return Fragment.empty\n    let joined, size = 0\n    for (let i = 0; i < array.length; i++) {\n      let node = array[i]\n      size += node.nodeSize\n      if (i && node.isText && array[i - 1].sameMarkup(node)) {\n        if (!joined) joined = array.slice(0, i)\n        joined[joined.length - 1] = node.withText(joined[joined.length - 1].text + node.text)\n      } else if (joined) {\n        joined.push(node)\n      }\n    }\n    return new Fragment(joined || array, size)\n  }\n\n  // :: (?union<Fragment, Node, [Node]>) → Fragment\n  // Create a fragment from something that can be interpreted as a set\n  // of nodes. For `null`, it returns the empty fragment. For a\n  // fragment, the fragment itself. For a node or array of nodes, a\n  // fragment containing those nodes.\n  static from(nodes) {\n    if (!nodes) return Fragment.empty\n    if (nodes instanceof Fragment) return nodes\n    if (Array.isArray(nodes)) return this.fromArray(nodes)\n    if (nodes.attrs) return new Fragment([nodes], nodes.nodeSize)\n    throw new RangeError(\"Can not convert \" + nodes + \" to a Fragment\" +\n                         (nodes.nodesBetween ? \" (looks like multiple versions of prosemirror-model were loaded)\" : \"\"))\n  }\n}\n\nconst found = {index: 0, offset: 0}\nfunction retIndex(index, offset) {\n  found.index = index\n  found.offset = offset\n  return found\n}\n\n// :: Fragment\n// An empty fragment. Intended to be reused whenever a node doesn't\n// contain anything (rather than allocating a new empty fragment for\n// each leaf node).\nFragment.empty = new Fragment([], 0)\n","export function compareDeep(a, b) {\n  if (a === b) return true\n  if (!(a && typeof a == \"object\") ||\n      !(b && typeof b == \"object\")) return false\n  let array = Array.isArray(a)\n  if (Array.isArray(b) != array) return false\n  if (array) {\n    if (a.length != b.length) return false\n    for (let i = 0; i < a.length; i++) if (!compareDeep(a[i], b[i])) return false\n  } else {\n    for (let p in a) if (!(p in b) || !compareDeep(a[p], b[p])) return false\n    for (let p in b) if (!(p in a)) return false\n  }\n  return true\n}\n","import {compareDeep} from \"./comparedeep\"\n\n// ::- A mark is a piece of information that can be attached to a node,\n// such as it being emphasized, in code font, or a link. It has a type\n// and optionally a set of attributes that provide further information\n// (such as the target of the link). Marks are created through a\n// `Schema`, which controls which types exist and which\n// attributes they have.\nexport class Mark {\n  constructor(type, attrs) {\n    // :: MarkType\n    // The type of this mark.\n    this.type = type\n    // :: Object\n    // The attributes associated with this mark.\n    this.attrs = attrs\n  }\n\n  // :: ([Mark]) → [Mark]\n  // Given a set of marks, create a new set which contains this one as\n  // well, in the right position. If this mark is already in the set,\n  // the set itself is returned. If any marks that are set to be\n  // [exclusive](#model.MarkSpec.excludes) with this mark are present,\n  // those are replaced by this one.\n  addToSet(set) {\n    let copy, placed = false\n    for (let i = 0; i < set.length; i++) {\n      let other = set[i]\n      if (this.eq(other)) return set\n      if (this.type.excludes(other.type)) {\n        if (!copy) copy = set.slice(0, i)\n      } else if (other.type.excludes(this.type)) {\n        return set\n      } else {\n        if (!placed && other.type.rank > this.type.rank) {\n          if (!copy) copy = set.slice(0, i)\n          copy.push(this)\n          placed = true\n        }\n        if (copy) copy.push(other)\n      }\n    }\n    if (!copy) copy = set.slice()\n    if (!placed) copy.push(this)\n    return copy\n  }\n\n  // :: ([Mark]) → [Mark]\n  // Remove this mark from the given set, returning a new set. If this\n  // mark is not in the set, the set itself is returned.\n  removeFromSet(set) {\n    for (let i = 0; i < set.length; i++)\n      if (this.eq(set[i]))\n        return set.slice(0, i).concat(set.slice(i + 1))\n    return set\n  }\n\n  // :: ([Mark]) → bool\n  // Test whether this mark is in the given set of marks.\n  isInSet(set) {\n    for (let i = 0; i < set.length; i++)\n      if (this.eq(set[i])) return true\n    return false\n  }\n\n  // :: (Mark) → bool\n  // Test whether this mark has the same type and attributes as\n  // another mark.\n  eq(other) {\n    return this == other ||\n      (this.type == other.type && compareDeep(this.attrs, other.attrs))\n  }\n\n  // :: () → Object\n  // Convert this mark to a JSON-serializeable representation.\n  toJSON() {\n    let obj = {type: this.type.name}\n    for (let _ in this.attrs) {\n      obj.attrs = this.attrs\n      break\n    }\n    return obj\n  }\n\n  // :: (Schema, Object) → Mark\n  static fromJSON(schema, json) {\n    if (!json) throw new RangeError(\"Invalid input for Mark.fromJSON\")\n    let type = schema.marks[json.type]\n    if (!type) throw new RangeError(`There is no mark type ${json.type} in this schema`)\n    return type.create(json.attrs)\n  }\n\n  // :: ([Mark], [Mark]) → bool\n  // Test whether two sets of marks are identical.\n  static sameSet(a, b) {\n    if (a == b) return true\n    if (a.length != b.length) return false\n    for (let i = 0; i < a.length; i++)\n      if (!a[i].eq(b[i])) return false\n    return true\n  }\n\n  // :: (?union<Mark, [Mark]>) → [Mark]\n  // Create a properly sorted mark set from null, a single mark, or an\n  // unsorted array of marks.\n  static setFrom(marks) {\n    if (!marks || marks.length == 0) return Mark.none\n    if (marks instanceof Mark) return [marks]\n    let copy = marks.slice()\n    copy.sort((a, b) => a.type.rank - b.type.rank)\n    return copy\n  }\n}\n\n// :: [Mark] The empty set of marks.\nMark.none = []\n","import {Fragment} from \"./fragment\"\n\n// ReplaceError:: class extends Error\n// Error type raised by [`Node.replace`](#model.Node.replace) when\n// given an invalid replacement.\n\nexport function ReplaceError(message) {\n  let err = Error.call(this, message)\n  err.__proto__ = ReplaceError.prototype\n  return err\n}\n\nReplaceError.prototype = Object.create(Error.prototype)\nReplaceError.prototype.constructor = ReplaceError\nReplaceError.prototype.name = \"ReplaceError\"\n\n// ::- A slice represents a piece cut out of a larger document. It\n// stores not only a fragment, but also the depth up to which nodes on\n// both side are ‘open’ (cut through).\nexport class Slice {\n  // :: (Fragment, number, number)\n  // Create a slice. When specifying a non-zero open depth, you must\n  // make sure that there are nodes of at least that depth at the\n  // appropriate side of the fragment—i.e. if the fragment is an empty\n  // paragraph node, `openStart` and `openEnd` can't be greater than 1.\n  //\n  // It is not necessary for the content of open nodes to conform to\n  // the schema's content constraints, though it should be a valid\n  // start/end/middle for such a node, depending on which sides are\n  // open.\n  constructor(content, openStart, openEnd) {\n    // :: Fragment The slice's content.\n    this.content = content\n    // :: number The open depth at the start.\n    this.openStart = openStart\n    // :: number The open depth at the end.\n    this.openEnd = openEnd\n  }\n\n  // :: number\n  // The size this slice would add when inserted into a document.\n  get size() {\n    return this.content.size - this.openStart - this.openEnd\n  }\n\n  insertAt(pos, fragment) {\n    let content = insertInto(this.content, pos + this.openStart, fragment, null)\n    return content && new Slice(content, this.openStart, this.openEnd)\n  }\n\n  removeBetween(from, to) {\n    return new Slice(removeRange(this.content, from + this.openStart, to + this.openStart), this.openStart, this.openEnd)\n  }\n\n  // :: (Slice) → bool\n  // Tests whether this slice is equal to another slice.\n  eq(other) {\n    return this.content.eq(other.content) && this.openStart == other.openStart && this.openEnd == other.openEnd\n  }\n\n  toString() {\n    return this.content + \"(\" + this.openStart + \",\" + this.openEnd + \")\"\n  }\n\n  // :: () → ?Object\n  // Convert a slice to a JSON-serializable representation.\n  toJSON() {\n    if (!this.content.size) return null\n    let json = {content: this.content.toJSON()}\n    if (this.openStart > 0) json.openStart = this.openStart\n    if (this.openEnd > 0) json.openEnd = this.openEnd\n    return json\n  }\n\n  // :: (Schema, ?Object) → Slice\n  // Deserialize a slice from its JSON representation.\n  static fromJSON(schema, json) {\n    if (!json) return Slice.empty\n    let openStart = json.openStart || 0, openEnd = json.openEnd || 0\n    if (typeof openStart != \"number\" || typeof openEnd != \"number\")\n      throw new RangeError(\"Invalid input for Slice.fromJSON\")\n    return new Slice(Fragment.fromJSON(schema, json.content), openStart, openEnd)\n  }\n\n  // :: (Fragment, ?bool) → Slice\n  // Create a slice from a fragment by taking the maximum possible\n  // open value on both side of the fragment.\n  static maxOpen(fragment, openIsolating=true) {\n    let openStart = 0, openEnd = 0\n    for (let n = fragment.firstChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.firstChild) openStart++\n    for (let n = fragment.lastChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.lastChild) openEnd++\n    return new Slice(fragment, openStart, openEnd)\n  }\n}\n\nfunction removeRange(content, from, to) {\n  let {index, offset} = content.findIndex(from), child = content.maybeChild(index)\n  let {index: indexTo, offset: offsetTo} = content.findIndex(to)\n  if (offset == from || child.isText) {\n    if (offsetTo != to && !content.child(indexTo).isText) throw new RangeError(\"Removing non-flat range\")\n    return content.cut(0, from).append(content.cut(to))\n  }\n  if (index != indexTo) throw new RangeError(\"Removing non-flat range\")\n  return content.replaceChild(index, child.copy(removeRange(child.content, from - offset - 1, to - offset - 1)))\n}\n\nfunction insertInto(content, dist, insert, parent) {\n  let {index, offset} = content.findIndex(dist), child = content.maybeChild(index)\n  if (offset == dist || child.isText) {\n    if (parent && !parent.canReplace(index, index, insert)) return null\n    return content.cut(0, dist).append(insert).append(content.cut(dist))\n  }\n  let inner = insertInto(child.content, dist - offset - 1, insert)\n  return inner && content.replaceChild(index, child.copy(inner))\n}\n\n// :: Slice\n// The empty slice.\nSlice.empty = new Slice(Fragment.empty, 0, 0)\n\nexport function replace($from, $to, slice) {\n  if (slice.openStart > $from.depth)\n    throw new ReplaceError(\"Inserted content deeper than insertion position\")\n  if ($from.depth - slice.openStart != $to.depth - slice.openEnd)\n    throw new ReplaceError(\"Inconsistent open depths\")\n  return replaceOuter($from, $to, slice, 0)\n}\n\nfunction replaceOuter($from, $to, slice, depth) {\n  let index = $from.index(depth), node = $from.node(depth)\n  if (index == $to.index(depth) && depth < $from.depth - slice.openStart) {\n    let inner = replaceOuter($from, $to, slice, depth + 1)\n    return node.copy(node.content.replaceChild(index, inner))\n  } else if (!slice.content.size) {\n    return close(node, replaceTwoWay($from, $to, depth))\n  } else if (!slice.openStart && !slice.openEnd && $from.depth == depth && $to.depth == depth) { // Simple, flat case\n    let parent = $from.parent, content = parent.content\n    return close(parent, content.cut(0, $from.parentOffset).append(slice.content).append(content.cut($to.parentOffset)))\n  } else {\n    let {start, end} = prepareSliceForReplace(slice, $from)\n    return close(node, replaceThreeWay($from, start, end, $to, depth))\n  }\n}\n\nfunction checkJoin(main, sub) {\n  if (!sub.type.compatibleContent(main.type))\n    throw new ReplaceError(\"Cannot join \" + sub.type.name + \" onto \" + main.type.name)\n}\n\nfunction joinable($before, $after, depth) {\n  let node = $before.node(depth)\n  checkJoin(node, $after.node(depth))\n  return node\n}\n\nfunction addNode(child, target) {\n  let last = target.length - 1\n  if (last >= 0 && child.isText && child.sameMarkup(target[last]))\n    target[last] = child.withText(target[last].text + child.text)\n  else\n    target.push(child)\n}\n\nfunction addRange($start, $end, depth, target) {\n  let node = ($end || $start).node(depth)\n  let startIndex = 0, endIndex = $end ? $end.index(depth) : node.childCount\n  if ($start) {\n    startIndex = $start.index(depth)\n    if ($start.depth > depth) {\n      startIndex++\n    } else if ($start.textOffset) {\n      addNode($start.nodeAfter, target)\n      startIndex++\n    }\n  }\n  for (let i = startIndex; i < endIndex; i++) addNode(node.child(i), target)\n  if ($end && $end.depth == depth && $end.textOffset)\n    addNode($end.nodeBefore, target)\n}\n\nfunction close(node, content) {\n  if (!node.type.validContent(content))\n    throw new ReplaceError(\"Invalid content for node \" + node.type.name)\n  return node.copy(content)\n}\n\nfunction replaceThreeWay($from, $start, $end, $to, depth) {\n  let openStart = $from.depth > depth && joinable($from, $start, depth + 1)\n  let openEnd = $to.depth > depth && joinable($end, $to, depth + 1)\n\n  let content = []\n  addRange(null, $from, depth, content)\n  if (openStart && openEnd && $start.index(depth) == $end.index(depth)) {\n    checkJoin(openStart, openEnd)\n    addNode(close(openStart, replaceThreeWay($from, $start, $end, $to, depth + 1)), content)\n  } else {\n    if (openStart)\n      addNode(close(openStart, replaceTwoWay($from, $start, depth + 1)), content)\n    addRange($start, $end, depth, content)\n    if (openEnd)\n      addNode(close(openEnd, replaceTwoWay($end, $to, depth + 1)), content)\n  }\n  addRange($to, null, depth, content)\n  return new Fragment(content)\n}\n\nfunction replaceTwoWay($from, $to, depth) {\n  let content = []\n  addRange(null, $from, depth, content)\n  if ($from.depth > depth) {\n    let type = joinable($from, $to, depth + 1)\n    addNode(close(type, replaceTwoWay($from, $to, depth + 1)), content)\n  }\n  addRange($to, null, depth, content)\n  return new Fragment(content)\n}\n\nfunction prepareSliceForReplace(slice, $along) {\n  let extra = $along.depth - slice.openStart, parent = $along.node(extra)\n  let node = parent.copy(slice.content)\n  for (let i = extra - 1; i >= 0; i--)\n    node = $along.node(i).copy(Fragment.from(node))\n  return {start: node.resolveNoCache(slice.openStart + extra),\n          end: node.resolveNoCache(node.content.size - slice.openEnd - extra)}\n}\n","import {Mark} from \"./mark\"\n\n// ::- You can [_resolve_](#model.Node.resolve) a position to get more\n// information about it. Objects of this class represent such a\n// resolved position, providing various pieces of context information,\n// and some helper methods.\n//\n// Throughout this interface, methods that take an optional `depth`\n// parameter will interpret undefined as `this.depth` and negative\n// numbers as `this.depth + value`.\nexport class ResolvedPos {\n  constructor(pos, path, parentOffset) {\n    // :: number The position that was resolved.\n    this.pos = pos\n    this.path = path\n    // :: number\n    // The number of levels the parent node is from the root. If this\n    // position points directly into the root node, it is 0. If it\n    // points into a top-level paragraph, 1, and so on.\n    this.depth = path.length / 3 - 1\n    // :: number The offset this position has into its parent node.\n    this.parentOffset = parentOffset\n  }\n\n  resolveDepth(val) {\n    if (val == null) return this.depth\n    if (val < 0) return this.depth + val\n    return val\n  }\n\n  // :: Node\n  // The parent node that the position points into. Note that even if\n  // a position points into a text node, that node is not considered\n  // the parent—text nodes are ‘flat’ in this model, and have no content.\n  get parent() { return this.node(this.depth) }\n\n  // :: Node\n  // The root node in which the position was resolved.\n  get doc() { return this.node(0) }\n\n  // :: (?number) → Node\n  // The ancestor node at the given level. `p.node(p.depth)` is the\n  // same as `p.parent`.\n  node(depth) { return this.path[this.resolveDepth(depth) * 3] }\n\n  // :: (?number) → number\n  // The index into the ancestor at the given level. If this points at\n  // the 3rd node in the 2nd paragraph on the top level, for example,\n  // `p.index(0)` is 1 and `p.index(1)` is 2.\n  index(depth) { return this.path[this.resolveDepth(depth) * 3 + 1] }\n\n  // :: (?number) → number\n  // The index pointing after this position into the ancestor at the\n  // given level.\n  indexAfter(depth) {\n    depth = this.resolveDepth(depth)\n    return this.index(depth) + (depth == this.depth && !this.textOffset ? 0 : 1)\n  }\n\n  // :: (?number) → number\n  // The (absolute) position at the start of the node at the given\n  // level.\n  start(depth) {\n    depth = this.resolveDepth(depth)\n    return depth == 0 ? 0 : this.path[depth * 3 - 1] + 1\n  }\n\n  // :: (?number) → number\n  // The (absolute) position at the end of the node at the given\n  // level.\n  end(depth) {\n    depth = this.resolveDepth(depth)\n    return this.start(depth) + this.node(depth).content.size\n  }\n\n  // :: (?number) → number\n  // The (absolute) position directly before the wrapping node at the\n  // given level, or, when `depth` is `this.depth + 1`, the original\n  // position.\n  before(depth) {\n    depth = this.resolveDepth(depth)\n    if (!depth) throw new RangeError(\"There is no position before the top-level node\")\n    return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1]\n  }\n\n  // :: (?number) → number\n  // The (absolute) position directly after the wrapping node at the\n  // given level, or the original position when `depth` is `this.depth + 1`.\n  after(depth) {\n    depth = this.resolveDepth(depth)\n    if (!depth) throw new RangeError(\"There is no position after the top-level node\")\n    return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1] + this.path[depth * 3].nodeSize\n  }\n\n  // :: number\n  // When this position points into a text node, this returns the\n  // distance between the position and the start of the text node.\n  // Will be zero for positions that point between nodes.\n  get textOffset() { return this.pos - this.path[this.path.length - 1] }\n\n  // :: ?Node\n  // Get the node directly after the position, if any. If the position\n  // points into a text node, only the part of that node after the\n  // position is returned.\n  get nodeAfter() {\n    let parent = this.parent, index = this.index(this.depth)\n    if (index == parent.childCount) return null\n    let dOff = this.pos - this.path[this.path.length - 1], child = parent.child(index)\n    return dOff ? parent.child(index).cut(dOff) : child\n  }\n\n  // :: ?Node\n  // Get the node directly before the position, if any. If the\n  // position points into a text node, only the part of that node\n  // before the position is returned.\n  get nodeBefore() {\n    let index = this.index(this.depth)\n    let dOff = this.pos - this.path[this.path.length - 1]\n    if (dOff) return this.parent.child(index).cut(0, dOff)\n    return index == 0 ? null : this.parent.child(index - 1)\n  }\n\n  // :: (number, ?number) → number\n  // Get the position at the given index in the parent node at the\n  // given depth (which defaults to `this.depth`).\n  posAtIndex(index, depth) {\n    depth = this.resolveDepth(depth)\n    let node = this.path[depth * 3], pos = depth == 0 ? 0 : this.path[depth * 3 - 1] + 1\n    for (let i = 0; i < index; i++) pos += node.child(i).nodeSize\n    return pos\n  }\n\n  // :: () → [Mark]\n  // Get the marks at this position, factoring in the surrounding\n  // marks' [`inclusive`](#model.MarkSpec.inclusive) property. If the\n  // position is at the start of a non-empty node, the marks of the\n  // node after it (if any) are returned.\n  marks() {\n    let parent = this.parent, index = this.index()\n\n    // In an empty parent, return the empty array\n    if (parent.content.size == 0) return Mark.none\n\n    // When inside a text node, just return the text node's marks\n    if (this.textOffset) return parent.child(index).marks\n\n    let main = parent.maybeChild(index - 1), other = parent.maybeChild(index)\n    // If the `after` flag is true of there is no node before, make\n    // the node after this position the main reference.\n    if (!main) { let tmp = main; main = other; other = tmp }\n\n    // Use all marks in the main node, except those that have\n    // `inclusive` set to false and are not present in the other node.\n    let marks = main.marks\n    for (var i = 0; i < marks.length; i++)\n      if (marks[i].type.spec.inclusive === false && (!other || !marks[i].isInSet(other.marks)))\n        marks = marks[i--].removeFromSet(marks)\n\n    return marks\n  }\n\n  // :: (ResolvedPos) → ?[Mark]\n  // Get the marks after the current position, if any, except those\n  // that are non-inclusive and not present at position `$end`. This\n  // is mostly useful for getting the set of marks to preserve after a\n  // deletion. Will return `null` if this position is at the end of\n  // its parent node or its parent node isn't a textblock (in which\n  // case no marks should be preserved).\n  marksAcross($end) {\n    let after = this.parent.maybeChild(this.index())\n    if (!after || !after.isInline) return null\n\n    let marks = after.marks, next = $end.parent.maybeChild($end.index())\n    for (var i = 0; i < marks.length; i++)\n      if (marks[i].type.spec.inclusive === false && (!next || !marks[i].isInSet(next.marks)))\n        marks = marks[i--].removeFromSet(marks)\n    return marks\n  }\n\n  // :: (number) → number\n  // The depth up to which this position and the given (non-resolved)\n  // position share the same parent nodes.\n  sharedDepth(pos) {\n    for (let depth = this.depth; depth > 0; depth--)\n      if (this.start(depth) <= pos && this.end(depth) >= pos) return depth\n    return 0\n  }\n\n  // :: (?ResolvedPos, ?(Node) → bool) → ?NodeRange\n  // Returns a range based on the place where this position and the\n  // given position diverge around block content. If both point into\n  // the same textblock, for example, a range around that textblock\n  // will be returned. If they point into different blocks, the range\n  // around those blocks in their shared ancestor is returned. You can\n  // pass in an optional predicate that will be called with a parent\n  // node to see if a range into that parent is acceptable.\n  blockRange(other = this, pred) {\n    if (other.pos < this.pos) return other.blockRange(this)\n    for (let d = this.depth - (this.parent.inlineContent || this.pos == other.pos ? 1 : 0); d >= 0; d--)\n      if (other.pos <= this.end(d) && (!pred || pred(this.node(d))))\n        return new NodeRange(this, other, d)\n  }\n\n  // :: (ResolvedPos) → bool\n  // Query whether the given position shares the same parent node.\n  sameParent(other) {\n    return this.pos - this.parentOffset == other.pos - other.parentOffset\n  }\n\n  // :: (ResolvedPos) → ResolvedPos\n  // Return the greater of this and the given position.\n  max(other) {\n    return other.pos > this.pos ? other : this\n  }\n\n  // :: (ResolvedPos) → ResolvedPos\n  // Return the smaller of this and the given position.\n  min(other) {\n    return other.pos < this.pos ? other : this\n  }\n\n  toString() {\n    let str = \"\"\n    for (let i = 1; i <= this.depth; i++)\n      str += (str ? \"/\" : \"\") + this.node(i).type.name + \"_\" + this.index(i - 1)\n    return str + \":\" + this.parentOffset\n  }\n\n  static resolve(doc, pos) {\n    if (!(pos >= 0 && pos <= doc.content.size)) throw new RangeError(\"Position \" + pos + \" out of range\")\n    let path = []\n    let start = 0, parentOffset = pos\n    for (let node = doc;;) {\n      let {index, offset} = node.content.findIndex(parentOffset)\n      let rem = parentOffset - offset\n      path.push(node, index, start + offset)\n      if (!rem) break\n      node = node.child(index)\n      if (node.isText) break\n      parentOffset = rem - 1\n      start += offset + 1\n    }\n    return new ResolvedPos(pos, path, parentOffset)\n  }\n\n  static resolveCached(doc, pos) {\n    for (let i = 0; i < resolveCache.length; i++) {\n      let cached = resolveCache[i]\n      if (cached.pos == pos && cached.doc == doc) return cached\n    }\n    let result = resolveCache[resolveCachePos] = ResolvedPos.resolve(doc, pos)\n    resolveCachePos = (resolveCachePos + 1) % resolveCacheSize\n    return result\n  }\n}\n\nlet resolveCache = [], resolveCachePos = 0, resolveCacheSize = 12\n\n// ::- Represents a flat range of content, i.e. one that starts and\n// ends in the same node.\nexport class NodeRange {\n  // :: (ResolvedPos, ResolvedPos, number)\n  // Construct a node range. `$from` and `$to` should point into the\n  // same node until at least the given `depth`, since a node range\n  // denotes an adjacent set of nodes in a single parent node.\n  constructor($from, $to, depth) {\n    // :: ResolvedPos A resolved position along the start of the\n    // content. May have a `depth` greater than this object's `depth`\n    // property, since these are the positions that were used to\n    // compute the range, not re-resolved positions directly at its\n    // boundaries.\n    this.$from = $from\n    // :: ResolvedPos A position along the end of the content. See\n    // caveat for [`$from`](#model.NodeRange.$from).\n    this.$to = $to\n    // :: number The depth of the node that this range points into.\n    this.depth = depth\n  }\n\n  // :: number The position at the start of the range.\n  get start() { return this.$from.before(this.depth + 1) }\n  // :: number The position at the end of the range.\n  get end() { return this.$to.after(this.depth + 1) }\n\n  // :: Node The parent node that the range points into.\n  get parent() { return this.$from.node(this.depth) }\n  // :: number The start index of the range in the parent node.\n  get startIndex() { return this.$from.index(this.depth) }\n  // :: number The end index of the range in the parent node.\n  get endIndex() { return this.$to.indexAfter(this.depth) }\n}\n","import {Fragment} from \"./fragment\"\nimport {Mark} from \"./mark\"\nimport {Slice, replace} from \"./replace\"\nimport {ResolvedPos} from \"./resolvedpos\"\nimport {compareDeep} from \"./comparedeep\"\n\nconst emptyAttrs = Object.create(null)\n\n// ::- This class represents a node in the tree that makes up a\n// ProseMirror document. So a document is an instance of `Node`, with\n// children that are also instances of `Node`.\n//\n// Nodes are persistent data structures. Instead of changing them, you\n// create new ones with the content you want. Old ones keep pointing\n// at the old document shape. This is made cheaper by sharing\n// structure between the old and new data as much as possible, which a\n// tree shape like this (without back pointers) makes easy.\n//\n// **Do not** directly mutate the properties of a `Node` object. See\n// [the guide](/docs/guide/#doc) for more information.\nexport class Node {\n  constructor(type, attrs, content, marks) {\n    // :: NodeType\n    // The type of node that this is.\n    this.type = type\n\n    // :: Object\n    // An object mapping attribute names to values. The kind of\n    // attributes allowed and required are\n    // [determined](#model.NodeSpec.attrs) by the node type.\n    this.attrs = attrs\n\n    // :: Fragment\n    // A container holding the node's children.\n    this.content = content || Fragment.empty\n\n    // :: [Mark]\n    // The marks (things like whether it is emphasized or part of a\n    // link) applied to this node.\n    this.marks = marks || Mark.none\n  }\n\n  // text:: ?string\n  // For text nodes, this contains the node's text content.\n\n  // :: number\n  // The size of this node, as defined by the integer-based [indexing\n  // scheme](/docs/guide/#doc.indexing). For text nodes, this is the\n  // amount of characters. For other leaf nodes, it is one. For\n  // non-leaf nodes, it is the size of the content plus two (the start\n  // and end token).\n  get nodeSize() { return this.isLeaf ? 1 : 2 + this.content.size }\n\n  // :: number\n  // The number of children that the node has.\n  get childCount() { return this.content.childCount }\n\n  // :: (number) → Node\n  // Get the child node at the given index. Raises an error when the\n  // index is out of range.\n  child(index) { return this.content.child(index) }\n\n  // :: (number) → ?Node\n  // Get the child node at the given index, if it exists.\n  maybeChild(index) { return this.content.maybeChild(index) }\n\n  // :: ((node: Node, offset: number, index: number))\n  // Call `f` for every child node, passing the node, its offset\n  // into this parent node, and its index.\n  forEach(f) { this.content.forEach(f) }\n\n  // :: (number, number, (node: Node, pos: number, parent: Node, index: number) → ?bool, ?number)\n  // Invoke a callback for all descendant nodes recursively between\n  // the given two positions that are relative to start of this node's\n  // content. The callback is invoked with the node, its\n  // parent-relative position, its parent node, and its child index.\n  // When the callback returns false for a given node, that node's\n  // children will not be recursed over. The last parameter can be\n  // used to specify a starting position to count from.\n  nodesBetween(from, to, f, startPos = 0) {\n    this.content.nodesBetween(from, to, f, startPos, this)\n  }\n\n  // :: ((node: Node, pos: number, parent: Node) → ?bool)\n  // Call the given callback for every descendant node. Doesn't\n  // descend into a node when the callback returns `false`.\n  descendants(f) {\n    this.nodesBetween(0, this.content.size, f)\n  }\n\n  // :: string\n  // Concatenates all the text nodes found in this fragment and its\n  // children.\n  get textContent() { return this.textBetween(0, this.content.size, \"\") }\n\n  // :: (number, number, ?string, ?string) → string\n  // Get all text between positions `from` and `to`. When\n  // `blockSeparator` is given, it will be inserted whenever a new\n  // block node is started. When `leafText` is given, it'll be\n  // inserted for every non-text leaf node encountered.\n  textBetween(from, to, blockSeparator, leafText) {\n    return this.content.textBetween(from, to, blockSeparator, leafText)\n  }\n\n  // :: ?Node\n  // Returns this node's first child, or `null` if there are no\n  // children.\n  get firstChild() { return this.content.firstChild }\n\n  // :: ?Node\n  // Returns this node's last child, or `null` if there are no\n  // children.\n  get lastChild() { return this.content.lastChild }\n\n  // :: (Node) → bool\n  // Test whether two nodes represent the same piece of document.\n  eq(other) {\n    return this == other || (this.sameMarkup(other) && this.content.eq(other.content))\n  }\n\n  // :: (Node) → bool\n  // Compare the markup (type, attributes, and marks) of this node to\n  // those of another. Returns `true` if both have the same markup.\n  sameMarkup(other) {\n    return this.hasMarkup(other.type, other.attrs, other.marks)\n  }\n\n  // :: (NodeType, ?Object, ?[Mark]) → bool\n  // Check whether this node's markup correspond to the given type,\n  // attributes, and marks.\n  hasMarkup(type, attrs, marks) {\n    return this.type == type &&\n      compareDeep(this.attrs, attrs || type.defaultAttrs || emptyAttrs) &&\n      Mark.sameSet(this.marks, marks || Mark.none)\n  }\n\n  // :: (?Fragment) → Node\n  // Create a new node with the same markup as this node, containing\n  // the given content (or empty, if no content is given).\n  copy(content = null) {\n    if (content == this.content) return this\n    return new this.constructor(this.type, this.attrs, content, this.marks)\n  }\n\n  // :: ([Mark]) → Node\n  // Create a copy of this node, with the given set of marks instead\n  // of the node's own marks.\n  mark(marks) {\n    return marks == this.marks ? this : new this.constructor(this.type, this.attrs, this.content, marks)\n  }\n\n  // :: (number, ?number) → Node\n  // Create a copy of this node with only the content between the\n  // given positions. If `to` is not given, it defaults to the end of\n  // the node.\n  cut(from, to) {\n    if (from == 0 && to == this.content.size) return this\n    return this.copy(this.content.cut(from, to))\n  }\n\n  // :: (number, ?number) → Slice\n  // Cut out the part of the document between the given positions, and\n  // return it as a `Slice` object.\n  slice(from, to = this.content.size, includeParents = false) {\n    if (from == to) return Slice.empty\n\n    let $from = this.resolve(from), $to = this.resolve(to)\n    let depth = includeParents ? 0 : $from.sharedDepth(to)\n    let start = $from.start(depth), node = $from.node(depth)\n    let content = node.content.cut($from.pos - start, $to.pos - start)\n    return new Slice(content, $from.depth - depth, $to.depth - depth)\n  }\n\n  // :: (number, number, Slice) → Node\n  // Replace the part of the document between the given positions with\n  // the given slice. The slice must 'fit', meaning its open sides\n  // must be able to connect to the surrounding content, and its\n  // content nodes must be valid children for the node they are placed\n  // into. If any of this is violated, an error of type\n  // [`ReplaceError`](#model.ReplaceError) is thrown.\n  replace(from, to, slice) {\n    return replace(this.resolve(from), this.resolve(to), slice)\n  }\n\n  // :: (number) → ?Node\n  // Find the node directly after the given position.\n  nodeAt(pos) {\n    for (let node = this;;) {\n      let {index, offset} = node.content.findIndex(pos)\n      node = node.maybeChild(index)\n      if (!node) return null\n      if (offset == pos || node.isText) return node\n      pos -= offset + 1\n    }\n  }\n\n  // :: (number) → {node: ?Node, index: number, offset: number}\n  // Find the (direct) child node after the given offset, if any,\n  // and return it along with its index and offset relative to this\n  // node.\n  childAfter(pos) {\n    let {index, offset} = this.content.findIndex(pos)\n    return {node: this.content.maybeChild(index), index, offset}\n  }\n\n  // :: (number) → {node: ?Node, index: number, offset: number}\n  // Find the (direct) child node before the given offset, if any,\n  // and return it along with its index and offset relative to this\n  // node.\n  childBefore(pos) {\n    if (pos == 0) return {node: null, index: 0, offset: 0}\n    let {index, offset} = this.content.findIndex(pos)\n    if (offset < pos) return {node: this.content.child(index), index, offset}\n    let node = this.content.child(index - 1)\n    return {node, index: index - 1, offset: offset - node.nodeSize}\n  }\n\n  // :: (number) → ResolvedPos\n  // Resolve the given position in the document, returning an\n  // [object](#model.ResolvedPos) with information about its context.\n  resolve(pos) { return ResolvedPos.resolveCached(this, pos) }\n\n  resolveNoCache(pos) { return ResolvedPos.resolve(this, pos) }\n\n  // :: (number, number, union<Mark, MarkType>) → bool\n  // Test whether a given mark or mark type occurs in this document\n  // between the two given positions.\n  rangeHasMark(from, to, type) {\n    let found = false\n    if (to > from) this.nodesBetween(from, to, node => {\n      if (type.isInSet(node.marks)) found = true\n      return !found\n    })\n    return found\n  }\n\n  // :: bool\n  // True when this is a block (non-inline node)\n  get isBlock() { return this.type.isBlock }\n\n  // :: bool\n  // True when this is a textblock node, a block node with inline\n  // content.\n  get isTextblock() { return this.type.isTextblock }\n\n  // :: bool\n  // True when this node allows inline content.\n  get inlineContent() { return this.type.inlineContent }\n\n  // :: bool\n  // True when this is an inline node (a text node or a node that can\n  // appear among text).\n  get isInline() { return this.type.isInline }\n\n  // :: bool\n  // True when this is a text node.\n  get isText() { return this.type.isText }\n\n  // :: bool\n  // True when this is a leaf node.\n  get isLeaf() { return this.type.isLeaf }\n\n  // :: bool\n  // True when this is an atom, i.e. when it does not have directly\n  // editable content. This is usually the same as `isLeaf`, but can\n  // be configured with the [`atom` property](#model.NodeSpec.atom) on\n  // a node's spec (typically used when the node is displayed as an\n  // uneditable [node view](#view.NodeView)).\n  get isAtom() { return this.type.isAtom }\n\n  // :: () → string\n  // Return a string representation of this node for debugging\n  // purposes.\n  toString() {\n    if (this.type.spec.toDebugString) return this.type.spec.toDebugString(this)\n    let name = this.type.name\n    if (this.content.size)\n      name += \"(\" + this.content.toStringInner() + \")\"\n    return wrapMarks(this.marks, name)\n  }\n\n  // :: (number) → ContentMatch\n  // Get the content match in this node at the given index.\n  contentMatchAt(index) {\n    let match = this.type.contentMatch.matchFragment(this.content, 0, index)\n    if (!match) throw new Error(\"Called contentMatchAt on a node with invalid content\")\n    return match\n  }\n\n  // :: (number, number, ?Fragment, ?number, ?number) → bool\n  // Test whether replacing the range between `from` and `to` (by\n  // child index) with the given replacement fragment (which defaults\n  // to the empty fragment) would leave the node's content valid. You\n  // can optionally pass `start` and `end` indices into the\n  // replacement fragment.\n  canReplace(from, to, replacement = Fragment.empty, start = 0, end = replacement.childCount) {\n    let one = this.contentMatchAt(from).matchFragment(replacement, start, end)\n    let two = one && one.matchFragment(this.content, to)\n    if (!two || !two.validEnd) return false\n    for (let i = start; i < end; i++) if (!this.type.allowsMarks(replacement.child(i).marks)) return false\n    return true\n  }\n\n  // :: (number, number, NodeType, ?[Mark]) → bool\n  // Test whether replacing the range `from` to `to` (by index) with a\n  // node of the given type would leave the node's content valid.\n  canReplaceWith(from, to, type, marks) {\n    if (marks && !this.type.allowsMarks(marks)) return false\n    let start = this.contentMatchAt(from).matchType(type)\n    let end = start && start.matchFragment(this.content, to)\n    return end ? end.validEnd : false\n  }\n\n  // :: (Node) → bool\n  // Test whether the given node's content could be appended to this\n  // node. If that node is empty, this will only return true if there\n  // is at least one node type that can appear in both nodes (to avoid\n  // merging completely incompatible nodes).\n  canAppend(other) {\n    if (other.content.size) return this.canReplace(this.childCount, this.childCount, other.content)\n    else return this.type.compatibleContent(other.type)\n  }\n\n  // :: ()\n  // Check whether this node and its descendants conform to the\n  // schema, and raise error when they do not.\n  check() {\n    if (!this.type.validContent(this.content))\n      throw new RangeError(`Invalid content for node ${this.type.name}: ${this.content.toString().slice(0, 50)}`)\n    let copy = Mark.none\n    for (let i = 0; i < this.marks.length; i++) copy = this.marks[i].addToSet(copy)\n    if (!Mark.sameSet(copy, this.marks))\n      throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(m => m.type.name)}`)\n    this.content.forEach(node => node.check())\n  }\n\n  // :: () → Object\n  // Return a JSON-serializeable representation of this node.\n  toJSON() {\n    let obj = {type: this.type.name}\n    for (let _ in this.attrs) {\n      obj.attrs = this.attrs\n      break\n    }\n    if (this.content.size)\n      obj.content = this.content.toJSON()\n    if (this.marks.length)\n      obj.marks = this.marks.map(n => n.toJSON())\n    return obj\n  }\n\n  // :: (Schema, Object) → Node\n  // Deserialize a node from its JSON representation.\n  static fromJSON(schema, json) {\n    if (!json) throw new RangeError(\"Invalid input for Node.fromJSON\")\n    let marks = null\n    if (json.marks) {\n      if (!Array.isArray(json.marks)) throw new RangeError(\"Invalid mark data for Node.fromJSON\")\n      marks = json.marks.map(schema.markFromJSON)\n    }\n    if (json.type == \"text\") {\n      if (typeof json.text != \"string\") throw new RangeError(\"Invalid text node in JSON\")\n      return schema.text(json.text, marks)\n    }\n    let content = Fragment.fromJSON(schema, json.content)\n    return schema.nodeType(json.type).create(json.attrs, content, marks)\n  }\n}\n\nexport class TextNode extends Node {\n  constructor(type, attrs, content, marks) {\n    super(type, attrs, null, marks)\n\n    if (!content) throw new RangeError(\"Empty text nodes are not allowed\")\n\n    this.text = content\n  }\n\n  toString() {\n    if (this.type.spec.toDebugString) return this.type.spec.toDebugString(this)\n    return wrapMarks(this.marks, JSON.stringify(this.text))\n  }\n\n  get textContent() { return this.text }\n\n  textBetween(from, to) { return this.text.slice(from, to) }\n\n  get nodeSize() { return this.text.length }\n\n  mark(marks) {\n    return marks == this.marks ? this : new TextNode(this.type, this.attrs, this.text, marks)\n  }\n\n  withText(text) {\n    if (text == this.text) return this\n    return new TextNode(this.type, this.attrs, text, this.marks)\n  }\n\n  cut(from = 0, to = this.text.length) {\n    if (from == 0 && to == this.text.length) return this\n    return this.withText(this.text.slice(from, to))\n  }\n\n  eq(other) {\n    return this.sameMarkup(other) && this.text == other.text\n  }\n\n  toJSON() {\n    let base = super.toJSON()\n    base.text = this.text\n    return base\n  }\n}\n\nfunction wrapMarks(marks, str) {\n  for (let i = marks.length - 1; i >= 0; i--)\n    str = marks[i].type.name + \"(\" + str + \")\"\n  return str\n}\n","import {Fragment} from \"./fragment\"\n\n// ::- Instances of this class represent a match state of a node\n// type's [content expression](#model.NodeSpec.content), and can be\n// used to find out whether further content matches here, and whether\n// a given position is a valid end of the node.\nexport class ContentMatch {\n  constructor(validEnd) {\n    // :: bool\n    // True when this match state represents a valid end of the node.\n    this.validEnd = validEnd\n    this.next = []\n    this.wrapCache = []\n  }\n\n  static parse(string, nodeTypes) {\n    let stream = new TokenStream(string, nodeTypes)\n    if (stream.next == null) return ContentMatch.empty\n    let expr = parseExpr(stream)\n    if (stream.next) stream.err(\"Unexpected trailing text\")\n    let match = dfa(nfa(expr))\n    checkForDeadEnds(match, stream)\n    return match\n  }\n\n  // :: (NodeType) → ?ContentMatch\n  // Match a node type, returning a match after that node if\n  // successful.\n  matchType(type) {\n    for (let i = 0; i < this.next.length; i += 2)\n      if (this.next[i] == type) return this.next[i + 1]\n    return null\n  }\n\n  // :: (Fragment, ?number, ?number) → ?ContentMatch\n  // Try to match a fragment. Returns the resulting match when\n  // successful.\n  matchFragment(frag, start = 0, end = frag.childCount) {\n    let cur = this\n    for (let i = start; cur && i < end; i++)\n      cur = cur.matchType(frag.child(i).type)\n    return cur\n  }\n\n  get inlineContent() {\n    let first = this.next[0]\n    return first ? first.isInline : false\n  }\n\n  // :: ?NodeType\n  // Get the first matching node type at this match position that can\n  // be generated.\n  get defaultType() {\n    for (let i = 0; i < this.next.length; i += 2) {\n      let type = this.next[i]\n      if (!(type.isText || type.hasRequiredAttrs())) return type\n    }\n  }\n\n  compatible(other) {\n    for (let i = 0; i < this.next.length; i += 2)\n      for (let j = 0; j < other.next.length; j += 2)\n        if (this.next[i] == other.next[j]) return true\n    return false\n  }\n\n  // :: (Fragment, bool, ?number) → ?Fragment\n  // Try to match the given fragment, and if that fails, see if it can\n  // be made to match by inserting nodes in front of it. When\n  // successful, return a fragment of inserted nodes (which may be\n  // empty if nothing had to be inserted). When `toEnd` is true, only\n  // return a fragment if the resulting match goes to the end of the\n  // content expression.\n  fillBefore(after, toEnd = false, startIndex = 0) {\n    let seen = [this]\n    function search(match, types) {\n      let finished = match.matchFragment(after, startIndex)\n      if (finished && (!toEnd || finished.validEnd))\n        return Fragment.from(types.map(tp => tp.createAndFill()))\n\n      for (let i = 0; i < match.next.length; i += 2) {\n        let type = match.next[i], next = match.next[i + 1]\n        if (!(type.isText || type.hasRequiredAttrs()) && seen.indexOf(next) == -1) {\n          seen.push(next)\n          let found = search(next, types.concat(type))\n          if (found) return found\n        }\n      }\n    }\n\n    return search(this, [])\n  }\n\n  // :: (NodeType) → ?[NodeType]\n  // Find a set of wrapping node types that would allow a node of the\n  // given type to appear at this position. The result may be empty\n  // (when it fits directly) and will be null when no such wrapping\n  // exists.\n  findWrapping(target) {\n    for (let i = 0; i < this.wrapCache.length; i += 2)\n      if (this.wrapCache[i] == target) return this.wrapCache[i + 1]\n    let computed = this.computeWrapping(target)\n    this.wrapCache.push(target, computed)\n    return computed\n  }\n\n  computeWrapping(target) {\n    let seen = Object.create(null), active = [{match: this, type: null, via: null}]\n    while (active.length) {\n      let current = active.shift(), match = current.match\n      if (match.matchType(target)) {\n        let result = []\n        for (let obj = current; obj.type; obj = obj.via)\n          result.push(obj.type)\n        return result.reverse()\n      }\n      for (let i = 0; i < match.next.length; i += 2) {\n        let type = match.next[i]\n        if (!type.isLeaf && !type.hasRequiredAttrs() && !(type.name in seen) && (!current.type || match.next[i + 1].validEnd)) {\n          active.push({match: type.contentMatch, type, via: current})\n          seen[type.name] = true\n        }\n      }\n    }\n  }\n\n  // :: number\n  // The number of outgoing edges this node has in the finite\n  // automaton that describes the content expression.\n  get edgeCount() {\n    return this.next.length >> 1\n  }\n\n  // :: (number) → {type: NodeType, next: ContentMatch}\n  // Get the _n_​th outgoing edge from this node in the finite\n  // automaton that describes the content expression.\n  edge(n) {\n    let i = n << 1\n    if (i >= this.next.length) throw new RangeError(`There's no ${n}th edge in this content match`)\n    return {type: this.next[i], next: this.next[i + 1]}\n  }\n\n  toString() {\n    let seen = []\n    function scan(m) {\n      seen.push(m)\n      for (let i = 1; i < m.next.length; i += 2)\n        if (seen.indexOf(m.next[i]) == -1) scan(m.next[i])\n    }\n    scan(this)\n    return seen.map((m, i) => {\n      let out = i + (m.validEnd ? \"*\" : \" \") + \" \"\n      for (let i = 0; i < m.next.length; i += 2)\n        out += (i ? \", \" : \"\") + m.next[i].name + \"->\" + seen.indexOf(m.next[i + 1])\n      return out\n    }).join(\"\\n\")\n  }\n}\n\nContentMatch.empty = new ContentMatch(true)\n\nclass TokenStream {\n  constructor(string, nodeTypes) {\n    this.string = string\n    this.nodeTypes = nodeTypes\n    this.inline = null\n    this.pos = 0\n    this.tokens = string.split(/\\s*(?=\\b|\\W|$)/)\n    if (this.tokens[this.tokens.length - 1] == \"\") this.tokens.pop()\n    if (this.tokens[0] == \"\") this.tokens.shift()\n  }\n\n  get next() { return this.tokens[this.pos] }\n\n  eat(tok) { return this.next == tok && (this.pos++ || true) }\n\n  err(str) { throw new SyntaxError(str + \" (in content expression '\" + this.string + \"')\") }\n}\n\nfunction parseExpr(stream) {\n  let exprs = []\n  do { exprs.push(parseExprSeq(stream)) }\n  while (stream.eat(\"|\"))\n  return exprs.length == 1 ? exprs[0] : {type: \"choice\", exprs}\n}\n\nfunction parseExprSeq(stream) {\n  let exprs = []\n  do { exprs.push(parseExprSubscript(stream)) }\n  while (stream.next && stream.next != \")\" && stream.next != \"|\")\n  return exprs.length == 1 ? exprs[0] : {type: \"seq\", exprs}\n}\n\nfunction parseExprSubscript(stream) {\n  let expr = parseExprAtom(stream)\n  for (;;) {\n    if (stream.eat(\"+\"))\n      expr = {type: \"plus\", expr}\n    else if (stream.eat(\"*\"))\n      expr = {type: \"star\", expr}\n    else if (stream.eat(\"?\"))\n      expr = {type: \"opt\", expr}\n    else if (stream.eat(\"{\"))\n      expr = parseExprRange(stream, expr)\n    else break\n  }\n  return expr\n}\n\nfunction parseNum(stream) {\n  if (/\\D/.test(stream.next)) stream.err(\"Expected number, got '\" + stream.next + \"'\")\n  let result = Number(stream.next)\n  stream.pos++\n  return result\n}\n\nfunction parseExprRange(stream, expr) {\n  let min = parseNum(stream), max = min\n  if (stream.eat(\",\")) {\n    if (stream.next != \"}\") max = parseNum(stream)\n    else max = -1\n  }\n  if (!stream.eat(\"}\")) stream.err(\"Unclosed braced range\")\n  return {type: \"range\", min, max, expr}\n}\n\nfunction resolveName(stream, name) {\n  let types = stream.nodeTypes, type = types[name]\n  if (type) return [type]\n  let result = []\n  for (let typeName in types) {\n    let type = types[typeName]\n    if (type.groups.indexOf(name) > -1) result.push(type)\n  }\n  if (result.length == 0) stream.err(\"No node type or group '\" + name + \"' found\")\n  return result\n}\n\nfunction parseExprAtom(stream) {\n  if (stream.eat(\"(\")) {\n    let expr = parseExpr(stream)\n    if (!stream.eat(\")\")) stream.err(\"Missing closing paren\")\n    return expr\n  } else if (!/\\W/.test(stream.next)) {\n    let exprs = resolveName(stream, stream.next).map(type => {\n      if (stream.inline == null) stream.inline = type.isInline\n      else if (stream.inline != type.isInline) stream.err(\"Mixing inline and block content\")\n      return {type: \"name\", value: type}\n    })\n    stream.pos++\n    return exprs.length == 1 ? exprs[0] : {type: \"choice\", exprs}\n  } else {\n    stream.err(\"Unexpected token '\" + stream.next + \"'\")\n  }\n}\n\n// The code below helps compile a regular-expression-like language\n// into a deterministic finite automaton. For a good introduction to\n// these concepts, see https://swtch.com/~rsc/regexp/regexp1.html\n\n// : (Object) → [[{term: ?any, to: number}]]\n// Construct an NFA from an expression as returned by the parser. The\n// NFA is represented as an array of states, which are themselves\n// arrays of edges, which are `{term, to}` objects. The first state is\n// the entry state and the last node is the success state.\n//\n// Note that unlike typical NFAs, the edge ordering in this one is\n// significant, in that it is used to contruct filler content when\n// necessary.\nfunction nfa(expr) {\n  let nfa = [[]]\n  connect(compile(expr, 0), node())\n  return nfa\n\n  function node() { return nfa.push([]) - 1 }\n  function edge(from, to, term) {\n    let edge = {term, to}\n    nfa[from].push(edge)\n    return edge\n  }\n  function connect(edges, to) { edges.forEach(edge => edge.to = to) }\n\n  function compile(expr, from) {\n    if (expr.type == \"choice\") {\n      return expr.exprs.reduce((out, expr) => out.concat(compile(expr, from)), [])\n    } else if (expr.type == \"seq\") {\n      for (let i = 0;; i++) {\n        let next = compile(expr.exprs[i], from)\n        if (i == expr.exprs.length - 1) return next\n        connect(next, from = node())\n      }\n    } else if (expr.type == \"star\") {\n      let loop = node()\n      edge(from, loop)\n      connect(compile(expr.expr, loop), loop)\n      return [edge(loop)]\n    } else if (expr.type == \"plus\") {\n      let loop = node()\n      connect(compile(expr.expr, from), loop)\n      connect(compile(expr.expr, loop), loop)\n      return [edge(loop)]\n    } else if (expr.type == \"opt\") {\n      return [edge(from)].concat(compile(expr.expr, from))\n    } else if (expr.type == \"range\") {\n      let cur = from\n      for (let i = 0; i < expr.min; i++) {\n        let next = node()\n        connect(compile(expr.expr, cur), next)\n        cur = next\n      }\n      if (expr.max == -1) {\n        connect(compile(expr.expr, cur), cur)\n      } else {\n        for (let i = expr.min; i < expr.max; i++) {\n          let next = node()\n          edge(cur, next)\n          connect(compile(expr.expr, cur), next)\n          cur = next\n        }\n      }\n      return [edge(cur)]\n    } else if (expr.type == \"name\") {\n      return [edge(from, null, expr.value)]\n    }\n  }\n}\n\nfunction cmp(a, b) { return b - a }\n\n// Get the set of nodes reachable by null edges from `node`. Omit\n// nodes with only a single null-out-edge, since they may lead to\n// needless duplicated nodes.\nfunction nullFrom(nfa, node) {\n  let result = []\n  scan(node)\n  return result.sort(cmp)\n\n  function scan(node) {\n    let edges = nfa[node]\n    if (edges.length == 1 && !edges[0].term) return scan(edges[0].to)\n    result.push(node)\n    for (let i = 0; i < edges.length; i++) {\n      let {term, to} = edges[i]\n      if (!term && result.indexOf(to) == -1) scan(to)\n    }\n  }\n}\n\n// : ([[{term: ?any, to: number}]]) → ContentMatch\n// Compiles an NFA as produced by `nfa` into a DFA, modeled as a set\n// of state objects (`ContentMatch` instances) with transitions\n// between them.\nfunction dfa(nfa) {\n  let labeled = Object.create(null)\n  return explore(nullFrom(nfa, 0))\n\n  function explore(states) {\n    let out = []\n    states.forEach(node => {\n      nfa[node].forEach(({term, to}) => {\n        if (!term) return\n        let known = out.indexOf(term), set = known > -1 && out[known + 1]\n        nullFrom(nfa, to).forEach(node => {\n          if (!set) out.push(term, set = [])\n          if (set.indexOf(node) == -1) set.push(node)\n        })\n      })\n    })\n    let state = labeled[states.join(\",\")] = new ContentMatch(states.indexOf(nfa.length - 1) > -1)\n    for (let i = 0; i < out.length; i += 2) {\n      let states = out[i + 1].sort(cmp)\n      state.next.push(out[i], labeled[states.join(\",\")] || explore(states))\n    }\n    return state\n  }\n}\n\nfunction checkForDeadEnds(match, stream) {\n  for (let i = 0, work = [match]; i < work.length; i++) {\n    let state = work[i], dead = !state.validEnd, nodes = []\n    for (let j = 0; j < state.next.length; j += 2) {\n      let node = state.next[j], next = state.next[j + 1]\n      nodes.push(node.name)\n      if (dead && !(node.isText || node.hasRequiredAttrs())) dead = false\n      if (work.indexOf(next) == -1) work.push(next)\n    }\n    if (dead) stream.err(\"Only non-generatable nodes (\" + nodes.join(\", \") + \") in a required position (see https://prosemirror.net/docs/guide/#generatable)\")\n  }\n}\n","import OrderedMap from \"orderedmap\"\n\nimport {Node, TextNode} from \"./node\"\nimport {Fragment} from \"./fragment\"\nimport {Mark} from \"./mark\"\nimport {ContentMatch} from \"./content\"\n\n// For node types where all attrs have a default value (or which don't\n// have any attributes), build up a single reusable default attribute\n// object, and use it for all nodes that don't specify specific\n// attributes.\nfunction defaultAttrs(attrs) {\n  let defaults = Object.create(null)\n  for (let attrName in attrs) {\n    let attr = attrs[attrName]\n    if (!attr.hasDefault) return null\n    defaults[attrName] = attr.default\n  }\n  return defaults\n}\n\nfunction computeAttrs(attrs, value) {\n  let built = Object.create(null)\n  for (let name in attrs) {\n    let given = value && value[name]\n    if (given === undefined) {\n      let attr = attrs[name]\n      if (attr.hasDefault) given = attr.default\n      else throw new RangeError(\"No value supplied for attribute \" + name)\n    }\n    built[name] = given\n  }\n  return built\n}\n\nfunction initAttrs(attrs) {\n  let result = Object.create(null)\n  if (attrs) for (let name in attrs) result[name] = new Attribute(attrs[name])\n  return result\n}\n\n// ::- Node types are objects allocated once per `Schema` and used to\n// [tag](#model.Node.type) `Node` instances. They contain information\n// about the node type, such as its name and what kind of node it\n// represents.\nexport class NodeType {\n  constructor(name, schema, spec) {\n    // :: string\n    // The name the node type has in this schema.\n    this.name = name\n\n    // :: Schema\n    // A link back to the `Schema` the node type belongs to.\n    this.schema = schema\n\n    // :: NodeSpec\n    // The spec that this type is based on\n    this.spec = spec\n\n    this.groups = spec.group ? spec.group.split(\" \") : []\n    this.attrs = initAttrs(spec.attrs)\n\n    this.defaultAttrs = defaultAttrs(this.attrs)\n\n    // :: ContentMatch\n    // The starting match of the node type's content expression.\n    this.contentMatch = null\n\n    // : ?[MarkType]\n    // The set of marks allowed in this node. `null` means all marks\n    // are allowed.\n    this.markSet = null\n\n    // :: bool\n    // True if this node type has inline content.\n    this.inlineContent = null\n\n    // :: bool\n    // True if this is a block type\n    this.isBlock = !(spec.inline || name == \"text\")\n\n    // :: bool\n    // True if this is the text node type.\n    this.isText = name == \"text\"\n  }\n\n  // :: bool\n  // True if this is an inline type.\n  get isInline() { return !this.isBlock }\n\n  // :: bool\n  // True if this is a textblock type, a block that contains inline\n  // content.\n  get isTextblock() { return this.isBlock && this.inlineContent }\n\n  // :: bool\n  // True for node types that allow no content.\n  get isLeaf() { return this.contentMatch == ContentMatch.empty }\n\n  // :: bool\n  // True when this node is an atom, i.e. when it does not have\n  // directly editable content.\n  get isAtom() { return this.isLeaf || this.spec.atom }\n\n  // :: () → bool\n  // Tells you whether this node type has any required attributes.\n  hasRequiredAttrs() {\n    for (let n in this.attrs) if (this.attrs[n].isRequired) return true\n    return false\n  }\n\n  compatibleContent(other) {\n    return this == other || this.contentMatch.compatible(other.contentMatch)\n  }\n\n  computeAttrs(attrs) {\n    if (!attrs && this.defaultAttrs) return this.defaultAttrs\n    else return computeAttrs(this.attrs, attrs)\n  }\n\n  // :: (?Object, ?union<Fragment, Node, [Node]>, ?[Mark]) → Node\n  // Create a `Node` of this type. The given attributes are\n  // checked and defaulted (you can pass `null` to use the type's\n  // defaults entirely, if no required attributes exist). `content`\n  // may be a `Fragment`, a node, an array of nodes, or\n  // `null`. Similarly `marks` may be `null` to default to the empty\n  // set of marks.\n  create(attrs, content, marks) {\n    if (this.isText) throw new Error(\"NodeType.create can't construct text nodes\")\n    return new Node(this, this.computeAttrs(attrs), Fragment.from(content), Mark.setFrom(marks))\n  }\n\n  // :: (?Object, ?union<Fragment, Node, [Node]>, ?[Mark]) → Node\n  // Like [`create`](#model.NodeType.create), but check the given content\n  // against the node type's content restrictions, and throw an error\n  // if it doesn't match.\n  createChecked(attrs, content, marks) {\n    content = Fragment.from(content)\n    if (!this.validContent(content))\n      throw new RangeError(\"Invalid content for node \" + this.name)\n    return new Node(this, this.computeAttrs(attrs), content, Mark.setFrom(marks))\n  }\n\n  // :: (?Object, ?union<Fragment, Node, [Node]>, ?[Mark]) → ?Node\n  // Like [`create`](#model.NodeType.create), but see if it is necessary to\n  // add nodes to the start or end of the given fragment to make it\n  // fit the node. If no fitting wrapping can be found, return null.\n  // Note that, due to the fact that required nodes can always be\n  // created, this will always succeed if you pass null or\n  // `Fragment.empty` as content.\n  createAndFill(attrs, content, marks) {\n    attrs = this.computeAttrs(attrs)\n    content = Fragment.from(content)\n    if (content.size) {\n      let before = this.contentMatch.fillBefore(content)\n      if (!before) return null\n      content = before.append(content)\n    }\n    let after = this.contentMatch.matchFragment(content).fillBefore(Fragment.empty, true)\n    if (!after) return null\n    return new Node(this, attrs, content.append(after), Mark.setFrom(marks))\n  }\n\n  // :: (Fragment) → bool\n  // Returns true if the given fragment is valid content for this node\n  // type with the given attributes.\n  validContent(content) {\n    let result = this.contentMatch.matchFragment(content)\n    if (!result || !result.validEnd) return false\n    for (let i = 0; i < content.childCount; i++)\n      if (!this.allowsMarks(content.child(i).marks)) return false\n    return true\n  }\n\n  // :: (MarkType) → bool\n  // Check whether the given mark type is allowed in this node.\n  allowsMarkType(markType) {\n    return this.markSet == null || this.markSet.indexOf(markType) > -1\n  }\n\n  // :: ([Mark]) → bool\n  // Test whether the given set of marks are allowed in this node.\n  allowsMarks(marks) {\n    if (this.markSet == null) return true\n    for (let i = 0; i < marks.length; i++) if (!this.allowsMarkType(marks[i].type)) return false\n    return true\n  }\n\n  // :: ([Mark]) → [Mark]\n  // Removes the marks that are not allowed in this node from the given set.\n  allowedMarks(marks) {\n    if (this.markSet == null) return marks\n    let copy\n    for (let i = 0; i < marks.length; i++) {\n      if (!this.allowsMarkType(marks[i].type)) {\n        if (!copy) copy = marks.slice(0, i)\n      } else if (copy) {\n        copy.push(marks[i])\n      }\n    }\n    return !copy ? marks : copy.length ? copy : Mark.empty\n  }\n\n  static compile(nodes, schema) {\n    let result = Object.create(null)\n    nodes.forEach((name, spec) => result[name] = new NodeType(name, schema, spec))\n\n    let topType = schema.spec.topNode || \"doc\"\n    if (!result[topType]) throw new RangeError(\"Schema is missing its top node type ('\" + topType + \"')\")\n    if (!result.text) throw new RangeError(\"Every schema needs a 'text' type\")\n    for (let _ in result.text.attrs) throw new RangeError(\"The text node type should not have attributes\")\n\n    return result\n  }\n}\n\n// Attribute descriptors\n\nclass Attribute {\n  constructor(options) {\n    this.hasDefault = Object.prototype.hasOwnProperty.call(options, \"default\")\n    this.default = options.default\n  }\n\n  get isRequired() {\n    return !this.hasDefault\n  }\n}\n\n// Marks\n\n// ::- Like nodes, marks (which are associated with nodes to signify\n// things like emphasis or being part of a link) are\n// [tagged](#model.Mark.type) with type objects, which are\n// instantiated once per `Schema`.\nexport class MarkType {\n  constructor(name, rank, schema, spec) {\n    // :: string\n    // The name of the mark type.\n    this.name = name\n\n    // :: Schema\n    // The schema that this mark type instance is part of.\n    this.schema = schema\n\n    // :: MarkSpec\n    // The spec on which the type is based.\n    this.spec = spec\n\n    this.attrs = initAttrs(spec.attrs)\n\n    this.rank = rank\n    this.excluded = null\n    let defaults = defaultAttrs(this.attrs)\n    this.instance = defaults && new Mark(this, defaults)\n  }\n\n  // :: (?Object) → Mark\n  // Create a mark of this type. `attrs` may be `null` or an object\n  // containing only some of the mark's attributes. The others, if\n  // they have defaults, will be added.\n  create(attrs) {\n    if (!attrs && this.instance) return this.instance\n    return new Mark(this, computeAttrs(this.attrs, attrs))\n  }\n\n  static compile(marks, schema) {\n    let result = Object.create(null), rank = 0\n    marks.forEach((name, spec) => result[name] = new MarkType(name, rank++, schema, spec))\n    return result\n  }\n\n  // :: ([Mark]) → [Mark]\n  // When there is a mark of this type in the given set, a new set\n  // without it is returned. Otherwise, the input set is returned.\n  removeFromSet(set) {\n    for (var i = 0; i < set.length; i++) if (set[i].type == this) {\n      set = set.slice(0, i).concat(set.slice(i + 1))\n      i--\n    }\n    return set\n  }\n\n  // :: ([Mark]) → ?Mark\n  // Tests whether there is a mark of this type in the given set.\n  isInSet(set) {\n    for (let i = 0; i < set.length; i++)\n      if (set[i].type == this) return set[i]\n  }\n\n  // :: (MarkType) → bool\n  // Queries whether a given mark type is\n  // [excluded](#model.MarkSpec.excludes) by this one.\n  excludes(other) {\n    return this.excluded.indexOf(other) > -1\n  }\n}\n\n// SchemaSpec:: interface\n// An object describing a schema, as passed to the [`Schema`](#model.Schema)\n// constructor.\n//\n//   nodes:: union<Object<NodeSpec>, OrderedMap<NodeSpec>>\n//   The node types in this schema. Maps names to\n//   [`NodeSpec`](#model.NodeSpec) objects that describe the node type\n//   associated with that name. Their order is significant—it\n//   determines which [parse rules](#model.NodeSpec.parseDOM) take\n//   precedence by default, and which nodes come first in a given\n//   [group](#model.NodeSpec.group).\n//\n//   marks:: ?union<Object<MarkSpec>, OrderedMap<MarkSpec>>\n//   The mark types that exist in this schema. The order in which they\n//   are provided determines the order in which [mark\n//   sets](#model.Mark.addToSet) are sorted and in which [parse\n//   rules](#model.MarkSpec.parseDOM) are tried.\n//\n//   topNode:: ?string\n//   The name of the default top-level node for the schema. Defaults\n//   to `\"doc\"`.\n\n// NodeSpec:: interface\n//\n//   content:: ?string\n//   The content expression for this node, as described in the [schema\n//   guide](/docs/guide/#schema.content_expressions). When not given,\n//   the node does not allow any content.\n//\n//   marks:: ?string\n//   The marks that are allowed inside of this node. May be a\n//   space-separated string referring to mark names or groups, `\"_\"`\n//   to explicitly allow all marks, or `\"\"` to disallow marks. When\n//   not given, nodes with inline content default to allowing all\n//   marks, other nodes default to not allowing marks.\n//\n//   group:: ?string\n//   The group or space-separated groups to which this node belongs,\n//   which can be referred to in the content expressions for the\n//   schema.\n//\n//   inline:: ?bool\n//   Should be set to true for inline nodes. (Implied for text nodes.)\n//\n//   atom:: ?bool\n//   Can be set to true to indicate that, though this isn't a [leaf\n//   node](#model.NodeType.isLeaf), it doesn't have directly editable\n//   content and should be treated as a single unit in the view.\n//\n//   attrs:: ?Object<AttributeSpec>\n//   The attributes that nodes of this type get.\n//\n//   selectable:: ?bool\n//   Controls whether nodes of this type can be selected as a [node\n//   selection](#state.NodeSelection). Defaults to true for non-text\n//   nodes.\n//\n//   draggable:: ?bool\n//   Determines whether nodes of this type can be dragged without\n//   being selected. Defaults to false.\n//\n//   code:: ?bool\n//   Can be used to indicate that this node contains code, which\n//   causes some commands to behave differently.\n//\n//   defining:: ?bool\n//   Determines whether this node is considered an important parent\n//   node during replace operations (such as paste). Non-defining (the\n//   default) nodes get dropped when their entire content is replaced,\n//   whereas defining nodes persist and wrap the inserted content.\n//   Likewise, in _inserted_ content the defining parents of the\n//   content are preserved when possible. Typically,\n//   non-default-paragraph textblock types, and possibly list items,\n//   are marked as defining.\n//\n//   isolating:: ?bool\n//   When enabled (default is false), the sides of nodes of this type\n//   count as boundaries that regular editing operations, like\n//   backspacing or lifting, won't cross. An example of a node that\n//   should probably have this enabled is a table cell.\n//\n//   toDOM:: ?(node: Node) → DOMOutputSpec\n//   Defines the default way a node of this type should be serialized\n//   to DOM/HTML (as used by\n//   [`DOMSerializer.fromSchema`](#model.DOMSerializer^fromSchema)).\n//   Should return a DOM node or an [array\n//   structure](#model.DOMOutputSpec) that describes one, with an\n//   optional number zero (“hole”) in it to indicate where the node's\n//   content should be inserted.\n//\n//   For text nodes, the default is to create a text DOM node. Though\n//   it is possible to create a serializer where text is rendered\n//   differently, this is not supported inside the editor, so you\n//   shouldn't override that in your text node spec.\n//\n//   parseDOM:: ?[ParseRule]\n//   Associates DOM parser information with this node, which can be\n//   used by [`DOMParser.fromSchema`](#model.DOMParser^fromSchema) to\n//   automatically derive a parser. The `node` field in the rules is\n//   implied (the name of this node will be filled in automatically).\n//   If you supply your own parser, you do not need to also specify\n//   parsing rules in your schema.\n//\n//   toDebugString:: ?(node: Node) -> string\n//   Defines the default way a node of this type should be serialized\n//   to a string representation for debugging (e.g. in error messages).\n\n// MarkSpec:: interface\n//\n//   attrs:: ?Object<AttributeSpec>\n//   The attributes that marks of this type get.\n//\n//   inclusive:: ?bool\n//   Whether this mark should be active when the cursor is positioned\n//   at its end (or at its start when that is also the start of the\n//   parent node). Defaults to true.\n//\n//   excludes:: ?string\n//   Determines which other marks this mark can coexist with. Should\n//   be a space-separated strings naming other marks or groups of marks.\n//   When a mark is [added](#model.Mark.addToSet) to a set, all marks\n//   that it excludes are removed in the process. If the set contains\n//   any mark that excludes the new mark but is not, itself, excluded\n//   by the new mark, the mark can not be added an the set. You can\n//   use the value `\"_\"` to indicate that the mark excludes all\n//   marks in the schema.\n//\n//   Defaults to only being exclusive with marks of the same type. You\n//   can set it to an empty string (or any string not containing the\n//   mark's own name) to allow multiple marks of a given type to\n//   coexist (as long as they have different attributes).\n//\n//   group:: ?string\n//   The group or space-separated groups to which this mark belongs.\n//\n//   spanning:: ?bool\n//   Determines whether marks of this type can span multiple adjacent\n//   nodes when serialized to DOM/HTML. Defaults to true.\n//\n//   toDOM:: ?(mark: Mark, inline: bool) → DOMOutputSpec\n//   Defines the default way marks of this type should be serialized\n//   to DOM/HTML. When the resulting spec contains a hole, that is\n//   where the marked content is placed. Otherwise, it is appended to\n//   the top node.\n//\n//   parseDOM:: ?[ParseRule]\n//   Associates DOM parser information with this mark (see the\n//   corresponding [node spec field](#model.NodeSpec.parseDOM)). The\n//   `mark` field in the rules is implied.\n\n// AttributeSpec:: interface\n//\n// Used to [define](#model.NodeSpec.attrs) attributes on nodes or\n// marks.\n//\n//   default:: ?any\n//   The default value for this attribute, to use when no explicit\n//   value is provided. Attributes that have no default must be\n//   provided whenever a node or mark of a type that has them is\n//   created.\n\n// ::- A document schema. Holds [node](#model.NodeType) and [mark\n// type](#model.MarkType) objects for the nodes and marks that may\n// occur in conforming documents, and provides functionality for\n// creating and deserializing such documents.\nexport class Schema {\n  // :: (SchemaSpec)\n  // Construct a schema from a schema [specification](#model.SchemaSpec).\n  constructor(spec) {\n    // :: SchemaSpec\n    // The [spec](#model.SchemaSpec) on which the schema is based,\n    // with the added guarantee that its `nodes` and `marks`\n    // properties are\n    // [`OrderedMap`](https://github.com/marijnh/orderedmap) instances\n    // (not raw objects).\n    this.spec = {}\n    for (let prop in spec) this.spec[prop] = spec[prop]\n    this.spec.nodes = OrderedMap.from(spec.nodes)\n    this.spec.marks = OrderedMap.from(spec.marks)\n\n    // :: Object<NodeType>\n    // An object mapping the schema's node names to node type objects.\n    this.nodes = NodeType.compile(this.spec.nodes, this)\n\n    // :: Object<MarkType>\n    // A map from mark names to mark type objects.\n    this.marks = MarkType.compile(this.spec.marks, this)\n\n    let contentExprCache = Object.create(null)\n    for (let prop in this.nodes) {\n      if (prop in this.marks)\n        throw new RangeError(prop + \" can not be both a node and a mark\")\n      let type = this.nodes[prop], contentExpr = type.spec.content || \"\", markExpr = type.spec.marks\n      type.contentMatch = contentExprCache[contentExpr] ||\n        (contentExprCache[contentExpr] = ContentMatch.parse(contentExpr, this.nodes))\n      type.inlineContent = type.contentMatch.inlineContent\n      type.markSet = markExpr == \"_\" ? null :\n        markExpr ? gatherMarks(this, markExpr.split(\" \")) :\n        markExpr == \"\" || !type.inlineContent ? [] : null\n    }\n    for (let prop in this.marks) {\n      let type = this.marks[prop], excl = type.spec.excludes\n      type.excluded = excl == null ? [type] : excl == \"\" ? [] : gatherMarks(this, excl.split(\" \"))\n    }\n\n    this.nodeFromJSON = this.nodeFromJSON.bind(this)\n    this.markFromJSON = this.markFromJSON.bind(this)\n\n    // :: NodeType\n    // The type of the [default top node](#model.SchemaSpec.topNode)\n    // for this schema.\n    this.topNodeType = this.nodes[this.spec.topNode || \"doc\"]\n\n    // :: Object\n    // An object for storing whatever values modules may want to\n    // compute and cache per schema. (If you want to store something\n    // in it, try to use property names unlikely to clash.)\n    this.cached = Object.create(null)\n    this.cached.wrappings = Object.create(null)\n  }\n\n  // :: (union<string, NodeType>, ?Object, ?union<Fragment, Node, [Node]>, ?[Mark]) → Node\n  // Create a node in this schema. The `type` may be a string or a\n  // `NodeType` instance. Attributes will be extended\n  // with defaults, `content` may be a `Fragment`,\n  // `null`, a `Node`, or an array of nodes.\n  node(type, attrs, content, marks) {\n    if (typeof type == \"string\")\n      type = this.nodeType(type)\n    else if (!(type instanceof NodeType))\n      throw new RangeError(\"Invalid node type: \" + type)\n    else if (type.schema != this)\n      throw new RangeError(\"Node type from different schema used (\" + type.name + \")\")\n\n    return type.createChecked(attrs, content, marks)\n  }\n\n  // :: (string, ?[Mark]) → Node\n  // Create a text node in the schema. Empty text nodes are not\n  // allowed.\n  text(text, marks) {\n    let type = this.nodes.text\n    return new TextNode(type, type.defaultAttrs, text, Mark.setFrom(marks))\n  }\n\n  // :: (union<string, MarkType>, ?Object) → Mark\n  // Create a mark with the given type and attributes.\n  mark(type, attrs) {\n    if (typeof type == \"string\") type = this.marks[type]\n    return type.create(attrs)\n  }\n\n  // :: (Object) → Node\n  // Deserialize a node from its JSON representation. This method is\n  // bound.\n  nodeFromJSON(json) {\n    return Node.fromJSON(this, json)\n  }\n\n  // :: (Object) → Mark\n  // Deserialize a mark from its JSON representation. This method is\n  // bound.\n  markFromJSON(json) {\n    return Mark.fromJSON(this, json)\n  }\n\n  nodeType(name) {\n    let found = this.nodes[name]\n    if (!found) throw new RangeError(\"Unknown node type: \" + name)\n    return found\n  }\n}\n\nfunction gatherMarks(schema, marks) {\n  let found = []\n  for (let i = 0; i < marks.length; i++) {\n    let name = marks[i], mark = schema.marks[name], ok = mark\n    if (mark) {\n      found.push(mark)\n    } else {\n      for (let prop in schema.marks) {\n        let mark = schema.marks[prop]\n        if (name == \"_\" || (mark.spec.group && mark.spec.group.split(\" \").indexOf(name) > -1))\n          found.push(ok = mark)\n      }\n    }\n    if (!ok) throw new SyntaxError(\"Unknown mark type: '\" + marks[i] + \"'\")\n  }\n  return found\n}\n","import {Fragment} from \"./fragment\"\nimport {Slice} from \"./replace\"\nimport {Mark} from \"./mark\"\n\n// ParseOptions:: interface\n// These are the options recognized by the\n// [`parse`](#model.DOMParser.parse) and\n// [`parseSlice`](#model.DOMParser.parseSlice) methods.\n//\n//   preserveWhitespace:: ?union<bool, \"full\">\n//   By default, whitespace is collapsed as per HTML's rules. Pass\n//   `true` to preserve whitespace, but normalize newlines to\n//   spaces, and `\"full\"` to preserve whitespace entirely.\n//\n//   findPositions:: ?[{node: dom.Node, offset: number}]\n//   When given, the parser will, beside parsing the content,\n//   record the document positions of the given DOM positions. It\n//   will do so by writing to the objects, adding a `pos` property\n//   that holds the document position. DOM positions that are not\n//   in the parsed content will not be written to.\n//\n//   from:: ?number\n//   The child node index to start parsing from.\n//\n//   to:: ?number\n//   The child node index to stop parsing at.\n//\n//   topNode:: ?Node\n//   By default, the content is parsed into the schema's default\n//   [top node type](#model.Schema.topNodeType). You can pass this\n//   option to use the type and attributes from a different node\n//   as the top container.\n//\n//   topMatch:: ?ContentMatch\n//   Provide the starting content match that content parsed into the\n//   top node is matched against.\n//\n//   context:: ?ResolvedPos\n//   A set of additional nodes to count as\n//   [context](#model.ParseRule.context) when parsing, above the\n//   given [top node](#model.ParseOptions.topNode).\n\n// ParseRule:: interface\n// A value that describes how to parse a given DOM node or inline\n// style as a ProseMirror node or mark.\n//\n//   tag:: ?string\n//   A CSS selector describing the kind of DOM elements to match. A\n//   single rule should have _either_ a `tag` or a `style` property.\n//\n//   namespace:: ?string\n//   The namespace to match. This should be used with `tag`.\n//   Nodes are only matched when the namespace matches or this property\n//   is null.\n//\n//   style:: ?string\n//   A CSS property name to match. When given, this rule matches\n//   inline styles that list that property. May also have the form\n//   `\"property=value\"`, in which case the rule only matches if the\n//   property's value exactly matches the given value. (For more\n//   complicated filters, use [`getAttrs`](#model.ParseRule.getAttrs)\n//   and return false to indicate that the match failed.) Rules\n//   matching styles may only produce [marks](#model.ParseRule.mark),\n//   not nodes.\n//\n//   priority:: ?number\n//   Can be used to change the order in which the parse rules in a\n//   schema are tried. Those with higher priority come first. Rules\n//   without a priority are counted as having priority 50. This\n//   property is only meaningful in a schema—when directly\n//   constructing a parser, the order of the rule array is used.\n//\n//   consuming:: ?boolean\n//   By default, when a rule matches an element or style, no further\n//   rules get a chance to match it. By setting this to `false`, you\n//   indicate that even when this rule matches, other rules that come\n//   after it should also run.\n//\n//   context:: ?string\n//   When given, restricts this rule to only match when the current\n//   context—the parent nodes into which the content is being\n//   parsed—matches this expression. Should contain one or more node\n//   names or node group names followed by single or double slashes.\n//   For example `\"paragraph/\"` means the rule only matches when the\n//   parent node is a paragraph, `\"blockquote/paragraph/\"` restricts\n//   it to be in a paragraph that is inside a blockquote, and\n//   `\"section//\"` matches any position inside a section—a double\n//   slash matches any sequence of ancestor nodes. To allow multiple\n//   different contexts, they can be separated by a pipe (`|`)\n//   character, as in `\"blockquote/|list_item/\"`.\n//\n//   node:: ?string\n//   The name of the node type to create when this rule matches. Only\n//   valid for rules with a `tag` property, not for style rules. Each\n//   rule should have one of a `node`, `mark`, or `ignore` property\n//   (except when it appears in a [node](#model.NodeSpec.parseDOM) or\n//   [mark spec](#model.MarkSpec.parseDOM), in which case the `node`\n//   or `mark` property will be derived from its position).\n//\n//   mark:: ?string\n//   The name of the mark type to wrap the matched content in.\n//\n//   ignore:: ?bool\n//   When true, ignore content that matches this rule.\n//\n//   closeParent:: ?bool\n//   When true, finding an element that matches this rule will close\n//   the current node.\n//\n//   skip:: ?bool\n//   When true, ignore the node that matches this rule, but do parse\n//   its content.\n//\n//   attrs:: ?Object\n//   Attributes for the node or mark created by this rule. When\n//   `getAttrs` is provided, it takes precedence.\n//\n//   getAttrs:: ?(union<dom.Node, string>) → ?union<Object, false>\n//   A function used to compute the attributes for the node or mark\n//   created by this rule. Can also be used to describe further\n//   conditions the DOM element or style must match. When it returns\n//   `false`, the rule won't match. When it returns null or undefined,\n//   that is interpreted as an empty/default set of attributes.\n//\n//   Called with a DOM Element for `tag` rules, and with a string (the\n//   style's value) for `style` rules.\n//\n//   contentElement:: ?union<string, (dom.Node) → dom.Node>\n//   For `tag` rules that produce non-leaf nodes or marks, by default\n//   the content of the DOM element is parsed as content of the mark\n//   or node. If the child nodes are in a descendent node, this may be\n//   a CSS selector string that the parser must use to find the actual\n//   content element, or a function that returns the actual content\n//   element to the parser.\n//\n//   getContent:: ?(dom.Node, schema: Schema) → Fragment\n//   Can be used to override the content of a matched node. When\n//   present, instead of parsing the node's child nodes, the result of\n//   this function is used.\n//\n//   preserveWhitespace:: ?union<bool, \"full\">\n//   Controls whether whitespace should be preserved when parsing the\n//   content inside the matched element. `false` means whitespace may\n//   be collapsed, `true` means that whitespace should be preserved\n//   but newlines normalized to spaces, and `\"full\"` means that\n//   newlines should also be preserved.\n\n// ::- A DOM parser represents a strategy for parsing DOM content into\n// a ProseMirror document conforming to a given schema. Its behavior\n// is defined by an array of [rules](#model.ParseRule).\nexport class DOMParser {\n  // :: (Schema, [ParseRule])\n  // Create a parser that targets the given schema, using the given\n  // parsing rules.\n  constructor(schema, rules) {\n    // :: Schema\n    // The schema into which the parser parses.\n    this.schema = schema\n    // :: [ParseRule]\n    // The set of [parse rules](#model.ParseRule) that the parser\n    // uses, in order of precedence.\n    this.rules = rules\n    this.tags = []\n    this.styles = []\n\n    rules.forEach(rule => {\n      if (rule.tag) this.tags.push(rule)\n      else if (rule.style) this.styles.push(rule)\n    })\n\n    // Only normalize list elements when lists in the schema can't directly contain themselves\n    this.normalizeLists = !this.tags.some(r => {\n      if (!/^(ul|ol)\\b/.test(r.tag) || !r.node) return false\n      let node = schema.nodes[r.node]\n      return node.contentMatch.matchType(node)\n    })\n  }\n\n  // :: (dom.Node, ?ParseOptions) → Node\n  // Parse a document from the content of a DOM node.\n  parse(dom, options = {}) {\n    let context = new ParseContext(this, options, false)\n    context.addAll(dom, null, options.from, options.to)\n    return context.finish()\n  }\n\n  // :: (dom.Node, ?ParseOptions) → Slice\n  // Parses the content of the given DOM node, like\n  // [`parse`](#model.DOMParser.parse), and takes the same set of\n  // options. But unlike that method, which produces a whole node,\n  // this one returns a slice that is open at the sides, meaning that\n  // the schema constraints aren't applied to the start of nodes to\n  // the left of the input and the end of nodes at the end.\n  parseSlice(dom, options = {}) {\n    let context = new ParseContext(this, options, true)\n    context.addAll(dom, null, options.from, options.to)\n    return Slice.maxOpen(context.finish())\n  }\n\n  matchTag(dom, context, after) {\n    for (let i = after ? this.tags.indexOf(after) + 1 : 0; i < this.tags.length; i++) {\n      let rule = this.tags[i]\n      if (matches(dom, rule.tag) &&\n          (rule.namespace === undefined || dom.namespaceURI == rule.namespace) &&\n          (!rule.context || context.matchesContext(rule.context))) {\n        if (rule.getAttrs) {\n          let result = rule.getAttrs(dom)\n          if (result === false) continue\n          rule.attrs = result\n        }\n        return rule\n      }\n    }\n  }\n\n  matchStyle(prop, value, context, after) {\n    for (let i = after ? this.styles.indexOf(after) + 1 : 0; i < this.styles.length; i++) {\n      let rule = this.styles[i]\n      if (rule.style.indexOf(prop) != 0 ||\n          rule.context && !context.matchesContext(rule.context) ||\n          // Test that the style string either precisely matches the prop,\n          // or has an '=' sign after the prop, followed by the given\n          // value.\n          rule.style.length > prop.length &&\n          (rule.style.charCodeAt(prop.length) != 61 || rule.style.slice(prop.length + 1) != value))\n        continue\n      if (rule.getAttrs) {\n        let result = rule.getAttrs(value)\n        if (result === false) continue\n        rule.attrs = result\n      }\n      return rule\n    }\n  }\n\n  // : (Schema) → [ParseRule]\n  static schemaRules(schema) {\n    let result = []\n    function insert(rule) {\n      let priority = rule.priority == null ? 50 : rule.priority, i = 0\n      for (; i < result.length; i++) {\n        let next = result[i], nextPriority = next.priority == null ? 50 : next.priority\n        if (nextPriority < priority) break\n      }\n      result.splice(i, 0, rule)\n    }\n\n    for (let name in schema.marks) {\n      let rules = schema.marks[name].spec.parseDOM\n      if (rules) rules.forEach(rule => {\n        insert(rule = copy(rule))\n        rule.mark = name\n      })\n    }\n    for (let name in schema.nodes) {\n      let rules = schema.nodes[name].spec.parseDOM\n      if (rules) rules.forEach(rule => {\n        insert(rule = copy(rule))\n        rule.node = name\n      })\n    }\n    return result\n  }\n\n  // :: (Schema) → DOMParser\n  // Construct a DOM parser using the parsing rules listed in a\n  // schema's [node specs](#model.NodeSpec.parseDOM), reordered by\n  // [priority](#model.ParseRule.priority).\n  static fromSchema(schema) {\n    return schema.cached.domParser ||\n      (schema.cached.domParser = new DOMParser(schema, DOMParser.schemaRules(schema)))\n  }\n}\n\n// : Object<bool> The block-level tags in HTML5\nconst blockTags = {\n  address: true, article: true, aside: true, blockquote: true, canvas: true,\n  dd: true, div: true, dl: true, fieldset: true, figcaption: true, figure: true,\n  footer: true, form: true, h1: true, h2: true, h3: true, h4: true, h5: true,\n  h6: true, header: true, hgroup: true, hr: true, li: true, noscript: true, ol: true,\n  output: true, p: true, pre: true, section: true, table: true, tfoot: true, ul: true\n}\n\n// : Object<bool> The tags that we normally ignore.\nconst ignoreTags = {\n  head: true, noscript: true, object: true, script: true, style: true, title: true\n}\n\n// : Object<bool> List tags.\nconst listTags = {ol: true, ul: true}\n\n// Using a bitfield for node context options\nconst OPT_PRESERVE_WS = 1, OPT_PRESERVE_WS_FULL = 2, OPT_OPEN_LEFT = 4\n\nfunction wsOptionsFor(preserveWhitespace) {\n  return (preserveWhitespace ? OPT_PRESERVE_WS : 0) | (preserveWhitespace === \"full\" ? OPT_PRESERVE_WS_FULL : 0)\n}\n\nclass NodeContext {\n  constructor(type, attrs, marks, pendingMarks, solid, match, options) {\n    this.type = type\n    this.attrs = attrs\n    this.solid = solid\n    this.match = match || (options & OPT_OPEN_LEFT ? null : type.contentMatch)\n    this.options = options\n    this.content = []\n    // Marks applied to this node itself\n    this.marks = marks\n    // Marks applied to its children\n    this.activeMarks = Mark.none\n    // Marks that can't apply here, but will be used in children if possible\n    this.pendingMarks = pendingMarks\n    // Nested Marks with same type\n    this.stashMarks = []\n  }\n\n  findWrapping(node) {\n    if (!this.match) {\n      if (!this.type) return []\n      let fill = this.type.contentMatch.fillBefore(Fragment.from(node))\n      if (fill) {\n        this.match = this.type.contentMatch.matchFragment(fill)\n      } else {\n        let start = this.type.contentMatch, wrap\n        if (wrap = start.findWrapping(node.type)) {\n          this.match = start\n          return wrap\n        } else {\n          return null\n        }\n      }\n    }\n    return this.match.findWrapping(node.type)\n  }\n\n  finish(openEnd) {\n    if (!(this.options & OPT_PRESERVE_WS)) { // Strip trailing whitespace\n      let last = this.content[this.content.length - 1], m\n      if (last && last.isText && (m = /[ \\t\\r\\n\\u000c]+$/.exec(last.text))) {\n        if (last.text.length == m[0].length) this.content.pop()\n        else this.content[this.content.length - 1] = last.withText(last.text.slice(0, last.text.length - m[0].length))\n      }\n    }\n    let content = Fragment.from(this.content)\n    if (!openEnd && this.match)\n      content = content.append(this.match.fillBefore(Fragment.empty, true))\n    return this.type ? this.type.create(this.attrs, content, this.marks) : content\n  }\n\n  popFromStashMark(mark) {\n    for (let i = this.stashMarks.length - 1; i >= 0; i--)\n      if (mark.eq(this.stashMarks[i])) return this.stashMarks.splice(i, 1)[0]\n  }\n\n  applyPending(nextType) {\n    for (let i = 0, pending = this.pendingMarks; i < pending.length; i++) {\n      let mark = pending[i]\n      if ((this.type ? this.type.allowsMarkType(mark.type) : markMayApply(mark.type, nextType)) &&\n          !mark.isInSet(this.activeMarks)) {\n        this.activeMarks = mark.addToSet(this.activeMarks)\n        this.pendingMarks = mark.removeFromSet(this.pendingMarks)\n      }\n    }\n  }\n}\n\nclass ParseContext {\n  // : (DOMParser, Object)\n  constructor(parser, options, open) {\n    // : DOMParser The parser we are using.\n    this.parser = parser\n    // : Object The options passed to this parse.\n    this.options = options\n    this.isOpen = open\n    let topNode = options.topNode, topContext\n    let topOptions = wsOptionsFor(options.preserveWhitespace) | (open ? OPT_OPEN_LEFT : 0)\n    if (topNode)\n      topContext = new NodeContext(topNode.type, topNode.attrs, Mark.none, Mark.none, true,\n                                   options.topMatch || topNode.type.contentMatch, topOptions)\n    else if (open)\n      topContext = new NodeContext(null, null, Mark.none, Mark.none, true, null, topOptions)\n    else\n      topContext = new NodeContext(parser.schema.topNodeType, null, Mark.none, Mark.none, true, null, topOptions)\n    this.nodes = [topContext]\n    // : [Mark] The current set of marks\n    this.open = 0\n    this.find = options.findPositions\n    this.needsBlock = false\n  }\n\n  get top() {\n    return this.nodes[this.open]\n  }\n\n  // : (dom.Node)\n  // Add a DOM node to the content. Text is inserted as text node,\n  // otherwise, the node is passed to `addElement` or, if it has a\n  // `style` attribute, `addElementWithStyles`.\n  addDOM(dom) {\n    if (dom.nodeType == 3) {\n      this.addTextNode(dom)\n    } else if (dom.nodeType == 1) {\n      let style = dom.getAttribute(\"style\")\n      let marks = style ? this.readStyles(parseStyles(style)) : null, top = this.top\n      if (marks != null) for (let i = 0; i < marks.length; i++) this.addPendingMark(marks[i])\n      this.addElement(dom)\n      if (marks != null) for (let i = 0; i < marks.length; i++) this.removePendingMark(marks[i], top)\n    }\n  }\n\n  addTextNode(dom) {\n    let value = dom.nodeValue\n    let top = this.top\n    if (top.options & OPT_PRESERVE_WS_FULL ||\n        (top.type ? top.type.inlineContent : top.content.length && top.content[0].isInline) ||\n        /[^ \\t\\r\\n\\u000c]/.test(value)) {\n      if (!(top.options & OPT_PRESERVE_WS)) {\n        value = value.replace(/[ \\t\\r\\n\\u000c]+/g, \" \")\n        // If this starts with whitespace, and there is no node before it, or\n        // a hard break, or a text node that ends with whitespace, strip the\n        // leading space.\n        if (/^[ \\t\\r\\n\\u000c]/.test(value) && this.open == this.nodes.length - 1) {\n          let nodeBefore = top.content[top.content.length - 1]\n          let domNodeBefore = dom.previousSibling\n          if (!nodeBefore ||\n              (domNodeBefore && domNodeBefore.nodeName == 'BR') ||\n              (nodeBefore.isText && /[ \\t\\r\\n\\u000c]$/.test(nodeBefore.text)))\n            value = value.slice(1)\n        }\n      } else if (!(top.options & OPT_PRESERVE_WS_FULL)) {\n        value = value.replace(/\\r?\\n|\\r/g, \" \")\n      } else {\n        value = value.replace(/\\r\\n?/g, \"\\n\")\n      }\n      if (value) this.insertNode(this.parser.schema.text(value))\n      this.findInText(dom)\n    } else {\n      this.findInside(dom)\n    }\n  }\n\n  // : (dom.Element, ?ParseRule)\n  // Try to find a handler for the given tag and use that to parse. If\n  // none is found, the element's content nodes are added directly.\n  addElement(dom, matchAfter) {\n    let name = dom.nodeName.toLowerCase(), ruleID\n    if (listTags.hasOwnProperty(name) && this.parser.normalizeLists) normalizeList(dom)\n    let rule = (this.options.ruleFromNode && this.options.ruleFromNode(dom)) ||\n        (ruleID = this.parser.matchTag(dom, this, matchAfter))\n    if (rule ? rule.ignore : ignoreTags.hasOwnProperty(name)) {\n      this.findInside(dom)\n      this.ignoreFallback(dom)\n    } else if (!rule || rule.skip || rule.closeParent) {\n      if (rule && rule.closeParent) this.open = Math.max(0, this.open - 1)\n      else if (rule && rule.skip.nodeType) dom = rule.skip\n      let sync, top = this.top, oldNeedsBlock = this.needsBlock\n      if (blockTags.hasOwnProperty(name)) {\n        sync = true\n        if (!top.type) this.needsBlock = true\n      } else if (!dom.firstChild) {\n        this.leafFallback(dom)\n        return\n      }\n      this.addAll(dom)\n      if (sync) this.sync(top)\n      this.needsBlock = oldNeedsBlock\n    } else {\n      this.addElementByRule(dom, rule, rule.consuming === false ? ruleID : null)\n    }\n  }\n\n  // Called for leaf DOM nodes that would otherwise be ignored\n  leafFallback(dom) {\n    if (dom.nodeName == \"BR\" && this.top.type && this.top.type.inlineContent)\n      this.addTextNode(dom.ownerDocument.createTextNode(\"\\n\"))\n  }\n\n  // Called for ignored nodes\n  ignoreFallback(dom) {\n    // Ignored BR nodes should at least create an inline context\n    if (dom.nodeName == \"BR\" && (!this.top.type || !this.top.type.inlineContent))\n      this.findPlace(this.parser.schema.text(\"-\"))\n  }\n\n  // Run any style parser associated with the node's styles. Either\n  // return an array of marks, or null to indicate some of the styles\n  // had a rule with `ignore` set.\n  readStyles(styles) {\n    let marks = Mark.none\n    style: for (let i = 0; i < styles.length; i += 2) {\n      for (let after = null;;) {\n        let rule = this.parser.matchStyle(styles[i], styles[i + 1], this, after)\n        if (!rule) continue style\n        if (rule.ignore) return null\n        marks = this.parser.schema.marks[rule.mark].create(rule.attrs).addToSet(marks)\n        if (rule.consuming === false) after = rule\n        else break\n      }\n    }\n    return marks\n  }\n\n  // : (dom.Element, ParseRule) → bool\n  // Look up a handler for the given node. If none are found, return\n  // false. Otherwise, apply it, use its return value to drive the way\n  // the node's content is wrapped, and return true.\n  addElementByRule(dom, rule, continueAfter) {\n    let sync, nodeType, markType, mark\n    if (rule.node) {\n      nodeType = this.parser.schema.nodes[rule.node]\n      if (!nodeType.isLeaf) {\n        sync = this.enter(nodeType, rule.attrs, rule.preserveWhitespace)\n      } else if (!this.insertNode(nodeType.create(rule.attrs))) {\n        this.leafFallback(dom)\n      }\n    } else {\n      markType = this.parser.schema.marks[rule.mark]\n      mark = markType.create(rule.attrs)\n      this.addPendingMark(mark)\n    }\n    let startIn = this.top\n\n    if (nodeType && nodeType.isLeaf) {\n      this.findInside(dom)\n    } else if (continueAfter) {\n      this.addElement(dom, continueAfter)\n    } else if (rule.getContent) {\n      this.findInside(dom)\n      rule.getContent(dom, this.parser.schema).forEach(node => this.insertNode(node))\n    } else {\n      let contentDOM = rule.contentElement\n      if (typeof contentDOM == \"string\") contentDOM = dom.querySelector(contentDOM)\n      else if (typeof contentDOM == \"function\") contentDOM = contentDOM(dom)\n      if (!contentDOM) contentDOM = dom\n      this.findAround(dom, contentDOM, true)\n      this.addAll(contentDOM, sync)\n    }\n    if (sync) { this.sync(startIn); this.open-- }\n    if (mark) this.removePendingMark(mark, startIn)\n  }\n\n  // : (dom.Node, ?NodeBuilder, ?number, ?number)\n  // Add all child nodes between `startIndex` and `endIndex` (or the\n  // whole node, if not given). If `sync` is passed, use it to\n  // synchronize after every block element.\n  addAll(parent, sync, startIndex, endIndex) {\n    let index = startIndex || 0\n    for (let dom = startIndex ? parent.childNodes[startIndex] : parent.firstChild,\n             end = endIndex == null ? null : parent.childNodes[endIndex];\n         dom != end; dom = dom.nextSibling, ++index) {\n      this.findAtPoint(parent, index)\n      this.addDOM(dom)\n      if (sync && blockTags.hasOwnProperty(dom.nodeName.toLowerCase()))\n        this.sync(sync)\n    }\n    this.findAtPoint(parent, index)\n  }\n\n  // Try to find a way to fit the given node type into the current\n  // context. May add intermediate wrappers and/or leave non-solid\n  // nodes that we're in.\n  findPlace(node) {\n    let route, sync\n    for (let depth = this.open; depth >= 0; depth--) {\n      let cx = this.nodes[depth]\n      let found = cx.findWrapping(node)\n      if (found && (!route || route.length > found.length)) {\n        route = found\n        sync = cx\n        if (!found.length) break\n      }\n      if (cx.solid) break\n    }\n    if (!route) return false\n    this.sync(sync)\n    for (let i = 0; i < route.length; i++)\n      this.enterInner(route[i], null, false)\n    return true\n  }\n\n  // : (Node) → ?Node\n  // Try to insert the given node, adjusting the context when needed.\n  insertNode(node) {\n    if (node.isInline && this.needsBlock && !this.top.type) {\n      let block = this.textblockFromContext()\n      if (block) this.enterInner(block)\n    }\n    if (this.findPlace(node)) {\n      this.closeExtra()\n      let top = this.top\n      top.applyPending(node.type)\n      if (top.match) top.match = top.match.matchType(node.type)\n      let marks = top.activeMarks\n      for (let i = 0; i < node.marks.length; i++)\n        if (!top.type || top.type.allowsMarkType(node.marks[i].type))\n          marks = node.marks[i].addToSet(marks)\n      top.content.push(node.mark(marks))\n      return true\n    }\n    return false\n  }\n\n  // : (NodeType, ?Object) → bool\n  // Try to start a node of the given type, adjusting the context when\n  // necessary.\n  enter(type, attrs, preserveWS) {\n    let ok = this.findPlace(type.create(attrs))\n    if (ok) this.enterInner(type, attrs, true, preserveWS)\n    return ok\n  }\n\n  // Open a node of the given type\n  enterInner(type, attrs, solid, preserveWS) {\n    this.closeExtra()\n    let top = this.top\n    top.applyPending(type)\n    top.match = top.match && top.match.matchType(type, attrs)\n    let options = preserveWS == null ? top.options & ~OPT_OPEN_LEFT : wsOptionsFor(preserveWS)\n    if ((top.options & OPT_OPEN_LEFT) && top.content.length == 0) options |= OPT_OPEN_LEFT\n    this.nodes.push(new NodeContext(type, attrs, top.activeMarks, top.pendingMarks, solid, null, options))\n    this.open++\n  }\n\n  // Make sure all nodes above this.open are finished and added to\n  // their parents\n  closeExtra(openEnd) {\n    let i = this.nodes.length - 1\n    if (i > this.open) {\n      for (; i > this.open; i--) this.nodes[i - 1].content.push(this.nodes[i].finish(openEnd))\n      this.nodes.length = this.open + 1\n    }\n  }\n\n  finish() {\n    this.open = 0\n    this.closeExtra(this.isOpen)\n    return this.nodes[0].finish(this.isOpen || this.options.topOpen)\n  }\n\n  sync(to) {\n    for (let i = this.open; i >= 0; i--) if (this.nodes[i] == to) {\n      this.open = i\n      return\n    }\n  }\n\n  get currentPos() {\n    this.closeExtra()\n    let pos = 0\n    for (let i = this.open; i >= 0; i--) {\n      let content = this.nodes[i].content\n      for (let j = content.length - 1; j >= 0; j--)\n        pos += content[j].nodeSize\n      if (i) pos++\n    }\n    return pos\n  }\n\n  findAtPoint(parent, offset) {\n    if (this.find) for (let i = 0; i < this.find.length; i++) {\n      if (this.find[i].node == parent && this.find[i].offset == offset)\n        this.find[i].pos = this.currentPos\n    }\n  }\n\n  findInside(parent) {\n    if (this.find) for (let i = 0; i < this.find.length; i++) {\n      if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node))\n        this.find[i].pos = this.currentPos\n    }\n  }\n\n  findAround(parent, content, before) {\n    if (parent != content && this.find) for (let i = 0; i < this.find.length; i++) {\n      if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) {\n        let pos = content.compareDocumentPosition(this.find[i].node)\n        if (pos & (before ? 2 : 4))\n          this.find[i].pos = this.currentPos\n      }\n    }\n  }\n\n  findInText(textNode) {\n    if (this.find) for (let i = 0; i < this.find.length; i++) {\n      if (this.find[i].node == textNode)\n        this.find[i].pos = this.currentPos - (textNode.nodeValue.length - this.find[i].offset)\n    }\n  }\n\n  // : (string) → bool\n  // Determines whether the given [context\n  // string](#ParseRule.context) matches this context.\n  matchesContext(context) {\n    if (context.indexOf(\"|\") > -1)\n      return context.split(/\\s*\\|\\s*/).some(this.matchesContext, this)\n\n    let parts = context.split(\"/\")\n    let option = this.options.context\n    let useRoot = !this.isOpen && (!option || option.parent.type == this.nodes[0].type)\n    let minDepth = -(option ? option.depth + 1 : 0) + (useRoot ? 0 : 1)\n    let match = (i, depth) => {\n      for (; i >= 0; i--) {\n        let part = parts[i]\n        if (part == \"\") {\n          if (i == parts.length - 1 || i == 0) continue\n          for (; depth >= minDepth; depth--)\n            if (match(i - 1, depth)) return true\n          return false\n        } else {\n          let next = depth > 0 || (depth == 0 && useRoot) ? this.nodes[depth].type\n              : option && depth >= minDepth ? option.node(depth - minDepth).type\n              : null\n          if (!next || (next.name != part && next.groups.indexOf(part) == -1))\n            return false\n          depth--\n        }\n      }\n      return true\n    }\n    return match(parts.length - 1, this.open)\n  }\n\n  textblockFromContext() {\n    let $context = this.options.context\n    if ($context) for (let d = $context.depth; d >= 0; d--) {\n      let deflt = $context.node(d).contentMatchAt($context.indexAfter(d)).defaultType\n      if (deflt && deflt.isTextblock && deflt.defaultAttrs) return deflt\n    }\n    for (let name in this.parser.schema.nodes) {\n      let type = this.parser.schema.nodes[name]\n      if (type.isTextblock && type.defaultAttrs) return type\n    }\n  }\n\n  addPendingMark(mark) {\n    let found = findSameMarkInSet(mark, this.top.pendingMarks)\n    if (found) this.top.stashMarks.push(found)\n    this.top.pendingMarks = mark.addToSet(this.top.pendingMarks)\n  }\n\n  removePendingMark(mark, upto) {\n    for (let depth = this.open; depth >= 0; depth--) {\n      let level = this.nodes[depth]\n      let found = level.pendingMarks.lastIndexOf(mark)\n      if (found > -1) {\n        level.pendingMarks = mark.removeFromSet(level.pendingMarks)\n      } else {\n        level.activeMarks = mark.removeFromSet(level.activeMarks)\n        let stashMark = level.popFromStashMark(mark)\n        if (stashMark && level.type && level.type.allowsMarkType(stashMark.type))\n          level.activeMarks = stashMark.addToSet(level.activeMarks)\n      }\n      if (level == upto) break\n    }\n  }\n}\n\n// Kludge to work around directly nested list nodes produced by some\n// tools and allowed by browsers to mean that the nested list is\n// actually part of the list item above it.\nfunction normalizeList(dom) {\n  for (let child = dom.firstChild, prevItem = null; child; child = child.nextSibling) {\n    let name = child.nodeType == 1 ? child.nodeName.toLowerCase() : null\n    if (name && listTags.hasOwnProperty(name) && prevItem) {\n      prevItem.appendChild(child)\n      child = prevItem\n    } else if (name == \"li\") {\n      prevItem = child\n    } else if (name) {\n      prevItem = null\n    }\n  }\n}\n\n// Apply a CSS selector.\nfunction matches(dom, selector) {\n  return (dom.matches || dom.msMatchesSelector || dom.webkitMatchesSelector || dom.mozMatchesSelector).call(dom, selector)\n}\n\n// : (string) → [string]\n// Tokenize a style attribute into property/value pairs.\nfunction parseStyles(style) {\n  let re = /\\s*([\\w-]+)\\s*:\\s*([^;]+)/g, m, result = []\n  while (m = re.exec(style)) result.push(m[1], m[2].trim())\n  return result\n}\n\nfunction copy(obj) {\n  let copy = {}\n  for (let prop in obj) copy[prop] = obj[prop]\n  return copy\n}\n\n// Used when finding a mark at the top level of a fragment parse.\n// Checks whether it would be reasonable to apply a given mark type to\n// a given node, by looking at the way the mark occurs in the schema.\nfunction markMayApply(markType, nodeType) {\n  let nodes = nodeType.schema.nodes\n  for (let name in nodes) {\n    let parent = nodes[name]\n    if (!parent.allowsMarkType(markType)) continue\n    let seen = [], scan = match => {\n      seen.push(match)\n      for (let i = 0; i < match.edgeCount; i++) {\n        let {type, next} = match.edge(i)\n        if (type == nodeType) return true\n        if (seen.indexOf(next) < 0 && scan(next)) return true\n      }\n    }\n    if (scan(parent.contentMatch)) return true\n  }\n}\n\nfunction findSameMarkInSet(mark, set) {\n  for (let i = 0; i < set.length; i++) {\n    if (mark.eq(set[i])) return set[i]\n  }\n}\n","// DOMOutputSpec:: interface\n// A description of a DOM structure. Can be either a string, which is\n// interpreted as a text node, a DOM node, which is interpreted as\n// itself, a `{dom: Node, contentDOM: ?Node}` object, or an array.\n//\n// An array describes a DOM element. The first value in the array\n// should be a string—the name of the DOM element, optionally prefixed\n// by a namespace URL and a space. If the second element is plain\n// object, it is interpreted as a set of attributes for the element.\n// Any elements after that (including the 2nd if it's not an attribute\n// object) are interpreted as children of the DOM elements, and must\n// either be valid `DOMOutputSpec` values, or the number zero.\n//\n// The number zero (pronounced “hole”) is used to indicate the place\n// where a node's child nodes should be inserted. If it occurs in an\n// output spec, it should be the only child element in its parent\n// node.\n\n// ::- A DOM serializer knows how to convert ProseMirror nodes and\n// marks of various types to DOM nodes.\nexport class DOMSerializer {\n  // :: (Object<(node: Node) → DOMOutputSpec>, Object<?(mark: Mark, inline: bool) → DOMOutputSpec>)\n  // Create a serializer. `nodes` should map node names to functions\n  // that take a node and return a description of the corresponding\n  // DOM. `marks` does the same for mark names, but also gets an\n  // argument that tells it whether the mark's content is block or\n  // inline content (for typical use, it'll always be inline). A mark\n  // serializer may be `null` to indicate that marks of that type\n  // should not be serialized.\n  constructor(nodes, marks) {\n    // :: Object<(node: Node) → DOMOutputSpec>\n    // The node serialization functions.\n    this.nodes = nodes || {}\n    // :: Object<?(mark: Mark, inline: bool) → DOMOutputSpec>\n    // The mark serialization functions.\n    this.marks = marks || {}\n  }\n\n  // :: (Fragment, ?Object) → dom.DocumentFragment\n  // Serialize the content of this fragment to a DOM fragment. When\n  // not in the browser, the `document` option, containing a DOM\n  // document, should be passed so that the serializer can create\n  // nodes.\n  serializeFragment(fragment, options = {}, target) {\n    if (!target) target = doc(options).createDocumentFragment()\n\n    let top = target, active = null\n    fragment.forEach(node => {\n      if (active || node.marks.length) {\n        if (!active) active = []\n        let keep = 0, rendered = 0\n        while (keep < active.length && rendered < node.marks.length) {\n          let next = node.marks[rendered]\n          if (!this.marks[next.type.name]) { rendered++; continue }\n          if (!next.eq(active[keep]) || next.type.spec.spanning === false) break\n          keep += 2; rendered++\n        }\n        while (keep < active.length) {\n          top = active.pop()\n          active.pop()\n        }\n        while (rendered < node.marks.length) {\n          let add = node.marks[rendered++]\n          let markDOM = this.serializeMark(add, node.isInline, options)\n          if (markDOM) {\n            active.push(add, top)\n            top.appendChild(markDOM.dom)\n            top = markDOM.contentDOM || markDOM.dom\n          }\n        }\n      }\n      top.appendChild(this.serializeNode(node, options))\n    })\n\n    return target\n  }\n\n  // :: (Node, ?Object) → dom.Node\n  // Serialize this node to a DOM node. This can be useful when you\n  // need to serialize a part of a document, as opposed to the whole\n  // document. To serialize a whole document, use\n  // [`serializeFragment`](#model.DOMSerializer.serializeFragment) on\n  // its [content](#model.Node.content).\n  serializeNode(node, options = {}) {\n    let {dom, contentDOM} =\n        DOMSerializer.renderSpec(doc(options), this.nodes[node.type.name](node))\n    if (contentDOM) {\n      if (node.isLeaf)\n        throw new RangeError(\"Content hole not allowed in a leaf node spec\")\n      if (options.onContent)\n        options.onContent(node, contentDOM, options)\n      else\n        this.serializeFragment(node.content, options, contentDOM)\n    }\n    return dom\n  }\n\n  serializeNodeAndMarks(node, options = {}) {\n    let dom = this.serializeNode(node, options)\n    for (let i = node.marks.length - 1; i >= 0; i--) {\n      let wrap = this.serializeMark(node.marks[i], node.isInline, options)\n      if (wrap) {\n        ;(wrap.contentDOM || wrap.dom).appendChild(dom)\n        dom = wrap.dom\n      }\n    }\n    return dom\n  }\n\n  serializeMark(mark, inline, options = {}) {\n    let toDOM = this.marks[mark.type.name]\n    return toDOM && DOMSerializer.renderSpec(doc(options), toDOM(mark, inline))\n  }\n\n  // :: (dom.Document, DOMOutputSpec) → {dom: dom.Node, contentDOM: ?dom.Node}\n  // Render an [output spec](#model.DOMOutputSpec) to a DOM node. If\n  // the spec has a hole (zero) in it, `contentDOM` will point at the\n  // node with the hole.\n  static renderSpec(doc, structure, xmlNS = null) {\n    if (typeof structure == \"string\")\n      return {dom: doc.createTextNode(structure)}\n    if (structure.nodeType != null)\n      return {dom: structure}\n    if (structure.dom && structure.dom.nodeType != null)\n      return structure\n    let tagName = structure[0], space = tagName.indexOf(\" \")\n    if (space > 0) {\n      xmlNS = tagName.slice(0, space)\n      tagName = tagName.slice(space + 1)\n    }\n    let contentDOM = null, dom = xmlNS ? doc.createElementNS(xmlNS, tagName) : doc.createElement(tagName)\n    let attrs = structure[1], start = 1\n    if (attrs && typeof attrs == \"object\" && attrs.nodeType == null && !Array.isArray(attrs)) {\n      start = 2\n      for (let name in attrs) if (attrs[name] != null) {\n        let space = name.indexOf(\" \")\n        if (space > 0) dom.setAttributeNS(name.slice(0, space), name.slice(space + 1), attrs[name])\n        else dom.setAttribute(name, attrs[name])\n      }\n    }\n    for (let i = start; i < structure.length; i++) {\n      let child = structure[i]\n      if (child === 0) {\n        if (i < structure.length - 1 || i > start)\n          throw new RangeError(\"Content hole must be the only child of its parent node\")\n        return {dom, contentDOM: dom}\n      } else {\n        let {dom: inner, contentDOM: innerContent} = DOMSerializer.renderSpec(doc, child, xmlNS)\n        dom.appendChild(inner)\n        if (innerContent) {\n          if (contentDOM) throw new RangeError(\"Multiple content holes\")\n          contentDOM = innerContent\n        }\n      }\n    }\n    return {dom, contentDOM}\n  }\n\n  // :: (Schema) → DOMSerializer\n  // Build a serializer using the [`toDOM`](#model.NodeSpec.toDOM)\n  // properties in a schema's node and mark specs.\n  static fromSchema(schema) {\n    return schema.cached.domSerializer ||\n      (schema.cached.domSerializer = new DOMSerializer(this.nodesFromSchema(schema), this.marksFromSchema(schema)))\n  }\n\n  // : (Schema) → Object<(node: Node) → DOMOutputSpec>\n  // Gather the serializers in a schema's node specs into an object.\n  // This can be useful as a base to build a custom serializer from.\n  static nodesFromSchema(schema) {\n    let result = gatherToDOM(schema.nodes)\n    if (!result.text) result.text = node => node.text\n    return result\n  }\n\n  // : (Schema) → Object<(mark: Mark) → DOMOutputSpec>\n  // Gather the serializers in a schema's mark specs into an object.\n  static marksFromSchema(schema) {\n    return gatherToDOM(schema.marks)\n  }\n}\n\nfunction gatherToDOM(obj) {\n  let result = {}\n  for (let name in obj) {\n    let toDOM = obj[name].spec.toDOM\n    if (toDOM) result[name] = toDOM\n  }\n  return result\n}\n\nfunction doc(options) {\n  // declare global: window\n  return options.document || window.document\n}\n"],"names":["let","const","p","prototypeAccessors","n","prototypeAccessors$1","super","i","type","loop","next","states","prop","text","mark","this","rules","name","space"],"mappings":"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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACa,MAAM,GAGjB,eAAW,CAAC,IAAI,EAAE;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,EAAI,IAAI,CAAC,IAAI,GAAG,GAAE;AAClB,EAAI,KAAKA,IAAI,IAAI,IAAI,IAAI,IAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAC;AACvD,EAAI,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAC;AACjD,EAAI,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAC;AACjD;AACA;AACA;AACA,EAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAC;AACxD;AACA;AACA;AACA,EAAI,IAAI,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AAE,MAAM,IAAI,WAAW,CAAC,sBAAsB,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAC;AAC3E,GAAG;AACH,EAAE,OAAO,KAAK;AACd;;ACvkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACa,SAAS,GAIpB,kBAAW,CAAC,MAAM,EAAE,KAAK,EAAE;;AAAC;AAC9B;AACA;AACA,EAAI,IAAI,CAAC,MAAM,GAAG,OAAM;AACxB;AACA;AACA;AACA,EAAI,IAAI,CAAC,KAAK,GAAG,MAAK;AACtB,EAAI,IAAI,CAAC,IAAI,GAAG,GAAE;AAClB,EAAI,IAAI,CAAC,MAAM,GAAG,GAAE;AACpB;AACA,EAAI,KAAK,CAAC,OAAO,WAAC,MAAQ;AAC1B,IAAM,IAAI,IAAI,CAAC,GAAG,IAAEC,MAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAC;AACxC,SAAW,IAAI,IAAI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"}

Youez - 2016 - github.com/yon3zu
LinuXploit