@arbidocs/coedit 0.5.30 → 0.5.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/encoding.cjs CHANGED
@@ -450,10 +450,6 @@ function serializeLive(el, scope) {
450
450
 
451
451
  // src/encoding.ts
452
452
  var COLLAB_FORMAT = "arbi-docx/2";
453
- var READABLE_FORMATS = /* @__PURE__ */ new Set(["arbi-docx/1", COLLAB_FORMAT]);
454
- function isReadableFormat(format) {
455
- return format !== void 0 && READABLE_FORMATS.has(format);
456
- }
457
453
  function isText(node) {
458
454
  return node.kind === "textValue";
459
455
  }
@@ -739,7 +735,6 @@ exports.contentTypeOf = contentTypeOf;
739
735
  exports.encodeElement = encodeElement;
740
736
  exports.encodeText = encodeText;
741
737
  exports.isBootstrapped = isBootstrapped;
742
- exports.isReadableFormat = isReadableFormat;
743
738
  exports.materialize = materialize;
744
739
  exports.materializeBytes = materializeBytes;
745
740
  exports.readFormat = readFormat;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/rich.ts","../src/mirror.ts","../src/encoding.ts"],"names":["Y","Y2","readOoxmlPart","validateExternalTarget","relsPartNameFor","contentTypesPartBytes","withContentTypeOverride","writeOoxmlPackage","readOoxmlPackage"],"mappings":"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","file":"encoding.cjs","sourcesContent":["/**\n * Paragraph text as one rich-text string.\n *\n * Why: the OOXML tree splits a run whenever formatting or a tracked change starts in the middle of\n * it, and a tree CRDT can only express that as \"delete the suffix here, insert a copy there\". When\n * two people do it to the same run at once, both copies survive and the text is duplicated. Here a\n * paragraph's characters live in a single Y.Text and everything that used to split them (run\n * properties, tracked-change and hyperlink wrappers, the shape of a text element) is an attribute on\n * a range of it, so a split only moves a boundary and never moves a character.\n *\n * A unit is one UTF-16 code unit of text, or one embedded element (a tab, a break, a field\n * character, a drawing, a bookmark...). Its attributes say which run, which wrappers and which text\n * element it belongs to. `encodeParagraph` returns null for a paragraph this model cannot hold\n * exactly, and the caller then keeps that paragraph as a plain element tree.\n */\nimport type * as Y from 'yjs'\n\nexport const WML = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'\n\nexport interface XmlAttr {\n ns: string\n local: string\n prefix?: string\n value: string\n}\n\nexport interface XmlBinding {\n prefix: string\n ns: string\n}\n\n/** A plain element: the generic shape the mirror stores, with text nodes as strings. */\nexport interface XmlEl {\n ns: string\n local: string\n prefix?: string\n attrs: XmlAttr[]\n bindings: XmlBinding[]\n children: (XmlEl | string)[]\n /** Identity of a run or wrapper, so two neighbours with equal properties stay two elements. Not XML. */\n _id?: string\n}\n\n/** An element without its children, as carried in an attribute. */\ninterface ElDesc {\n ns: string\n local: string\n prefix?: string\n attrs: XmlAttr[]\n bindings: XmlBinding[]\n}\n\ninterface WrapperDesc extends ElDesc {\n /** Children that come before the inline content (an inline content control's properties). */\n head: XmlEl[]\n id: string\n}\n\ninterface UnitAttrs {\n /** The run's `w:rPr`, or null when it has none. */\n r: XmlEl | null\n /** The run element itself, without children. */\n ra: ElDesc | null\n /** Which run: stays the same when the run is split, so neighbours with equal properties never merge. */\n ri: string | null\n /** Wrappers around the run, outermost first. */\n w: WrapperDesc[]\n /** The text element this character sits in (`w:t`, `w:delText`, `w:instrText`). */\n tx: ElDesc | null\n /** 'a' for an atom placed directly in the paragraph or a wrapper, 'e' for an empty run. */\n k: 'a' | 'e' | null\n}\n\nexport interface Unit {\n /** One UTF-16 code unit, or an embedded element. */\n v: string | { x: XmlEl }\n a: UnitAttrs\n}\n\nexport interface EncodedParagraph {\n /** Children that precede the inline content: the paragraph properties. */\n head: XmlEl[]\n units: Unit[]\n}\n\nconst WRAPPERS = new Set([\n 'ins',\n 'del',\n 'moveFrom',\n 'moveTo',\n 'hyperlink',\n 'smartTag',\n 'fldSimple',\n 'customXml',\n 'dir',\n 'bdo',\n 'sdtContent',\n])\nconst TEXT_ELEMENTS = new Set(['t', 'delText', 'instrText'])\n\nconst isEl = (n: XmlEl | string): n is XmlEl => typeof n !== 'string'\nconst isWml = (el: XmlEl, local: string): boolean => el.ns === WML && el.local === local\n\nfunction describe(el: XmlEl): ElDesc {\n const desc: ElDesc = { ns: el.ns, local: el.local, attrs: el.attrs, bindings: el.bindings }\n if (el.prefix !== undefined) desc.prefix = el.prefix\n return desc\n}\n\nfunction withChildren(desc: ElDesc, children: (XmlEl | string)[], id?: string): XmlEl {\n const el: XmlEl = {\n ns: desc.ns,\n local: desc.local,\n attrs: desc.attrs,\n bindings: desc.bindings,\n children,\n }\n if (desc.prefix !== undefined) el.prefix = desc.prefix\n if (id !== undefined) el._id = id\n return el\n}\n\nlet counter = 0\n/** A fresh run or wrapper identity. */\nexport function newRunId(): string {\n counter += 1\n return `${Math.random().toString(36).slice(2, 8)}${counter.toString(36)}`\n}\n\nclass Unrepresentable extends Error {}\n\nfunction fail(): never {\n throw new Unrepresentable()\n}\n\nfunction encodeRun(run: XmlEl, wrappers: WrapperDesc[], out: Unit[]): void {\n const children = run.children\n let rPr: XmlEl | null = null\n let start = 0\n const first = children[0]\n if (first !== undefined && isEl(first) && isWml(first, 'rPr')) {\n rPr = first\n start = 1\n }\n const base = { r: rPr, ra: describe(run), ri: run._id ?? newRunId(), w: wrappers }\n let produced = false\n for (let i = start; i < children.length; i++) {\n const child = children[i]\n if (!isEl(child)) fail()\n const only = child.children[0]\n if (\n child.ns === WML &&\n TEXT_ELEMENTS.has(child.local) &&\n child.children.length === 1 &&\n typeof only === 'string' &&\n only.length > 0\n ) {\n const tx = describe(child)\n for (let c = 0; c < only.length; c++) out.push({ v: only[c], a: { ...base, tx, k: null } })\n } else {\n out.push({ v: { x: child }, a: { ...base, tx: null, k: null } })\n }\n produced = true\n }\n if (!produced)\n out.push({\n v: { x: { ns: WML, local: 'e', attrs: [], bindings: [], children: [] } },\n a: { ...base, tx: null, k: 'e' },\n })\n}\n\nfunction encodeInline(children: (XmlEl | string)[], wrappers: WrapperDesc[], out: Unit[]): void {\n for (const child of children) {\n if (!isEl(child)) fail()\n if (child.ns === WML && child.local === 'r') {\n encodeRun(child, wrappers, out)\n } else if (child.ns === WML && WRAPPERS.has(child.local)) {\n const before = out.length\n const desc: WrapperDesc = { ...describe(child), head: [], id: child._id ?? newRunId() }\n let ok = true\n const inner: Unit[] = []\n try {\n encodeInline(child.children, [...wrappers, desc], inner)\n } catch (error) {\n if (!(error instanceof Unrepresentable)) throw error\n ok = false\n }\n if (ok && inner.length > 0) out.push(...inner)\n else {\n out.length = before\n out.push(atom(child, wrappers))\n }\n } else if (child.ns === WML && child.local === 'sdt') {\n const last = child.children[child.children.length - 1]\n const head = child.children.slice(0, -1)\n if (last !== undefined && isEl(last) && isWml(last, 'sdtContent') && head.every(isEl)) {\n const before = out.length\n const sdt: WrapperDesc = {\n ...describe(child),\n head: head as XmlEl[],\n id: child._id ?? newRunId(),\n }\n const content: WrapperDesc = { ...describe(last), head: [], id: last._id ?? newRunId() }\n const inner: Unit[] = []\n let ok = true\n try {\n encodeInline(last.children, [...wrappers, sdt, content], inner)\n } catch (error) {\n if (!(error instanceof Unrepresentable)) throw error\n ok = false\n }\n if (ok && inner.length > 0) out.push(...inner)\n else {\n out.length = before\n out.push(atom(child, wrappers))\n }\n } else out.push(atom(child, wrappers))\n } else {\n out.push(atom(child, wrappers))\n }\n }\n}\n\nfunction atom(el: XmlEl, wrappers: WrapperDesc[]): Unit {\n return { v: { x: el }, a: { r: null, ra: null, ri: null, w: wrappers, tx: null, k: 'a' } }\n}\n\n/** Encode a paragraph's children, or null when the paragraph cannot be held exactly. */\nexport function encodeParagraph(children: (XmlEl | string)[]): EncodedParagraph | null {\n const head: XmlEl[] = []\n let start = 0\n const first = children[0]\n if (first !== undefined && isEl(first) && isWml(first, 'pPr')) {\n head.push(first)\n start = 1\n }\n const units: Unit[] = []\n try {\n encodeInline(children.slice(start), [], units)\n } catch (error) {\n if (error instanceof Unrepresentable) return null\n throw error\n }\n return { head, units }\n}\n\nconst same = (a: unknown, b: unknown): boolean => JSON.stringify(a) === JSON.stringify(b)\n\nfunction decodeRange(units: Unit[], from: number, to: number, depth: number): XmlEl[] {\n const out: XmlEl[] = []\n let i = from\n while (i < to) {\n const unit = units[i]\n const { w } = unit.a\n if (w.length > depth) {\n const wrapper = w[depth]\n let j = i + 1\n while (j < to && units[j].a.w.length > depth && same(units[j].a.w[depth], wrapper)) j++\n out.push(\n withChildren(wrapper, [...wrapper.head, ...decodeRange(units, i, j, depth + 1)], wrapper.id)\n )\n i = j\n } else if (unit.a.k === 'a') {\n out.push((unit.v as { x: XmlEl }).x)\n i++\n } else {\n let j = i + 1\n // An empty run stands alone, so it never merges into a neighbour with the same properties.\n while (\n unit.a.k !== 'e' &&\n j < to &&\n units[j].a.w.length === depth &&\n units[j].a.k !== 'a' &&\n units[j].a.k !== 'e' &&\n units[j].a.ri === unit.a.ri &&\n same(units[j].a.r, unit.a.r) &&\n same(units[j].a.ra, unit.a.ra)\n ) {\n j++\n }\n out.push(decodeRun(units, i, j))\n i = j\n }\n }\n return out\n}\n\nfunction decodeRun(units: Unit[], from: number, to: number): XmlEl {\n const { r, ra } = units[from].a\n const children: (XmlEl | string)[] = []\n if (r) children.push(r)\n let i = from\n while (i < to) {\n const unit = units[i]\n if (unit.a.k === 'e') {\n i++\n } else if (typeof unit.v === 'string') {\n let j = i + 1\n while (j < to && typeof units[j].v === 'string' && same(units[j].a.tx, unit.a.tx)) j++\n let text = ''\n for (let c = i; c < j; c++) text += units[c].v as string\n children.push(withChildren(unit.a.tx as ElDesc, [text]))\n i = j\n } else {\n children.push(unit.v.x)\n i++\n }\n }\n return withChildren(ra as ElDesc, children, units[from].a.ri ?? undefined)\n}\n\n/** The children a paragraph's units stand for, after its properties. */\nexport function decodeInline(units: Unit[]): XmlEl[] {\n return decodeRange(units, 0, units.length, 0)\n}\n\nexport function decodeParagraph(encoded: EncodedParagraph): (XmlEl | string)[] {\n return [...encoded.head, ...decodeInline(encoded.units)]\n}\n\n// ── Y.Text input and output ────────────────────────────────────────────────\n\nconst KEYS = ['r', 'ra', 'ri', 'w', 'tx', 'k'] as const\n\nfunction toAttributes(a: UnitAttrs): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n for (const key of KEYS) {\n const value = a[key]\n if (value !== null && !(key === 'w' && (value as unknown[]).length === 0)) out[key] = value\n }\n return out\n}\n\nfunction fromAttributes(attributes: Record<string, unknown> | undefined): UnitAttrs {\n const a = attributes ?? {}\n return {\n r: (a.r as XmlEl | undefined) ?? null,\n ra: (a.ra as ElDesc | undefined) ?? null,\n ri: (a.ri as string | undefined) ?? null,\n w: (a.w as WrapperDesc[] | undefined) ?? [],\n tx: (a.tx as ElDesc | undefined) ?? null,\n k: (a.k as UnitAttrs['k'] | undefined) ?? null,\n }\n}\n\n/** The units a Y.Text currently holds. */\nexport function readUnits(text: Y.Text): Unit[] {\n const units: Unit[] = []\n for (const op of text.toDelta() as {\n insert: string | { x: XmlEl }\n attributes?: Record<string, unknown>\n }[]) {\n const a = fromAttributes(op.attributes)\n if (typeof op.insert === 'string') {\n for (let i = 0; i < op.insert.length; i++) units.push({ v: op.insert[i], a })\n } else {\n units.push({ v: op.insert, a })\n }\n }\n return units\n}\n\nconst valueKeyOf = (u: Unit): string => (typeof u.v === 'string' ? u.v : JSON.stringify(u.v))\nconst attrsKeyOf = (u: Unit): string => JSON.stringify(u.a)\n\ntype DeltaOp = {\n retain?: number\n delete?: number\n insert?: string | object\n attributes?: Record<string, unknown>\n}\n\nfunction attributeChange(from: UnitAttrs, to: UnitAttrs): Record<string, unknown> {\n const a = toAttributes(from)\n const b = toAttributes(to)\n const change: Record<string, unknown> = {}\n for (const key of KEYS) {\n if (JSON.stringify(a[key]) !== JSON.stringify(b[key])) change[key] = b[key] ?? null\n }\n return change\n}\n\nfunction pushRetain(delta: DeltaOp[], length: number, attributes?: Record<string, unknown>): void {\n if (length === 0) return\n const last = delta[delta.length - 1]\n const empty = !attributes || Object.keys(attributes).length === 0\n if (last && last.retain !== undefined && !last.attributes && empty) {\n last.retain += length\n return\n }\n delta.push(empty ? { retain: length } : { retain: length, attributes })\n}\n\n/** Retain `length` units, reformatting where the attributes of `previous` and `next` differ. */\nfunction reformat(\n delta: DeltaOp[],\n previous: Unit[],\n from: number,\n next: Unit[],\n to: number,\n length: number\n): void {\n let i = 0\n while (i < length) {\n const change = attributeChange(previous[from + i].a, next[to + i].a)\n const key = JSON.stringify(change)\n let j = i + 1\n while (\n j < length &&\n JSON.stringify(attributeChange(previous[from + j].a, next[to + j].a)) === key\n ) {\n j++\n }\n pushRetain(delta, j - i, change)\n i = j\n }\n}\n\n/**\n * Make `text` hold `next`, changing as little as possible. Characters are matched by value from both\n * ends, so what a person typed is the only thing inserted; matched characters whose attributes\n * changed (a run split, a tracked change started) are reformatted in place and never retyped. That is\n * what lets two people's edits of one paragraph merge instead of duplicating text.\n */\nexport function applyUnits(text: Y.Text, previous: Unit[], next: Unit[]): void {\n let start = 0\n const limit = Math.min(previous.length, next.length)\n while (start < limit && valueKeyOf(previous[start]) === valueKeyOf(next[start])) start++\n let endPrev = previous.length\n let endNext = next.length\n while (\n endPrev > start &&\n endNext > start &&\n valueKeyOf(previous[endPrev - 1]) === valueKeyOf(next[endNext - 1])\n ) {\n endPrev--\n endNext--\n }\n\n const delta: DeltaOp[] = []\n reformat(delta, previous, 0, next, 0, start)\n if (endPrev > start) delta.push({ delete: endPrev - start })\n let i = start\n while (i < endNext) {\n const unit = next[i]\n if (typeof unit.v !== 'string') {\n delta.push({ insert: unit.v, attributes: toAttributes(unit.a) })\n i++\n continue\n }\n let j = i + 1\n let chunk = unit.v\n const attributes = attrsKeyOf(unit)\n while (j < endNext && typeof next[j].v === 'string' && attrsKeyOf(next[j]) === attributes) {\n chunk += next[j].v as string\n j++\n }\n delta.push({ insert: chunk, attributes: toAttributes(unit.a) })\n i = j\n }\n reformat(delta, previous, endPrev, next, endNext, previous.length - endPrev)\n if (delta.every((op) => op.retain !== undefined && !op.attributes)) return\n text.applyDelta(delta, { sanitize: false })\n}\n\n/** Write units into an empty Y.Text. */\nexport function writeUnits(text: Y.Text, units: Unit[]): void {\n applyUnits(text, [], units)\n}\n","/**\n * Elements of the mirror, in both directions: plain `XmlEl` objects to Yjs types and back, and\n * `XmlEl` to XML text.\n *\n * Three forms:\n *\n * - A paragraph is held as a rich paragraph (see rich.ts) whenever it can be represented exactly:\n * its properties stay in `children`, and its inline content is the single Y.Text `inline`.\n * - An element with no editable text anywhere below it (a style, a numbering definition, a font, a\n * setting, a theme, paragraph or table properties, a section's setup) is packed: the map holds\n * its whole subtree as one XML string under `xml`. It is opened into a plain tree when an edit\n * touches it and written back whole, so concurrent edits to the same packed element are last\n * writer wins, while different elements (two styles) still merge. Held as a tree, every element,\n * attribute and namespace URI was its own CRDT item: a 350 KB styles part took 3.2 MB of room\n * state and over 100 MB of heap to load.\n * - Every other element (the body, a table, a cell, a footnote: the path to editable text) is a\n * generic map with a `children` array.\n */\nimport * as Y from 'yjs'\nimport { readXml, XML_NAMESPACE_URI } from '@docx-editor.dev/core/store'\nimport {\n decodeInline,\n encodeParagraph,\n readUnits,\n WML,\n writeUnits,\n type EncodedParagraph,\n type XmlAttr,\n type XmlBinding,\n type XmlEl,\n} from './rich'\n\nexport type LiveElement = Y.Map<unknown>\ntype LiveChild = LiveElement | Y.Text\n\nexport function isRichParagraph(map: Y.Map<unknown>): boolean {\n return map.has('inline')\n}\n\n/** Key of a packed element's XML. */\nconst PACKED = 'xml'\n\nexport function isPackedElement(map: Y.Map<unknown>): boolean {\n return map.has(PACKED)\n}\n\n/** A rich paragraph or a packed element: its inner nodes have no Yjs type of their own. */\nexport function isCompact(map: Y.Map<unknown>): boolean {\n return isRichParagraph(map) || isPackedElement(map)\n}\n\n/** Elements that carry or contain editable text: never packed, so typing merges character-wise. */\nconst TEXT_BEARING = new Set(['p', 't', 'delText', 'instrText', 'delInstrText'])\n\n/** Whether an element is held packed: nothing below it is a paragraph or a run's text. */\nexport function packable(xml: XmlEl): boolean {\n if (xml.ns === WML && TEXT_BEARING.has(xml.local)) return false\n return xml.children.every((c) => typeof c === 'string' || packable(c))\n}\n\n/** The packed form of an element. */\nfunction createPacked(xml: XmlEl, scope: Scope): LiveElement {\n const map = new Y.Map<unknown>()\n map.set(PACKED, serializeXml(xml, scope))\n return map\n}\n\n/** Rewrite a packed element when its content changed. */\nexport function repack(map: LiveElement, xml: XmlEl): void {\n const next = serializeXml(xml, scopeOf(map))\n if (map.get(PACKED) !== next) map.set(PACKED, next)\n}\n\n/** Namespace bindings in scope where `node` sits: those of every element above it. */\nexport function scopeOf(node: LiveElement): Map<string, string> {\n const chain: LiveElement[] = []\n let parent = node.parent\n while (parent instanceof Y.Array) {\n const owner = parent.parent\n if (!(owner instanceof Y.Map)) break\n chain.push(owner)\n parent = owner.parent\n }\n const scope = new Map<string, string>()\n for (const el of chain.reverse()) {\n for (const b of (el.get('bindings') as Y.Array<XmlBinding>).toArray()) scope.set(b.prefix, b.ns)\n }\n return scope\n}\n\n/** The scope inside `el`: what its children see. */\nexport function scopeWithin(el: LiveElement): Map<string, string> {\n const scope = scopeOf(el)\n if (!isPackedElement(el)) {\n for (const b of (el.get('bindings') as Y.Array<XmlBinding>).toArray()) scope.set(b.prefix, b.ns)\n }\n return scope\n}\n\nconst unpackLimits = { maxBytes: 64 * 1024 * 1024, maxElements: 2_000_000 }\n\n/** Parse a packed element's XML back into the generic form, resolving prefixes against `scope`. */\nfunction unpack(text: string, scope: Scope): XmlEl {\n const read = readXml(text, unpackLimits)\n if (!read.ok) throw new Error(`collab: a packed element is not readable XML (${read.reason})`)\n type Node = (typeof read.nodes)[number]\n const convert = (node: Extract<Node, { type: 'element' }>, outer: Scope): XmlEl => {\n const bindings: XmlBinding[] = []\n const named: [string, string][] = []\n for (const [name, value] of Object.entries(node.attributes)) {\n if (name === 'xmlns') bindings.push({ prefix: '', ns: value })\n else if (name.startsWith('xmlns:')) bindings.push({ prefix: name.slice(6), ns: value })\n else named.push([name, value])\n }\n const inner = new Map(outer)\n for (const b of bindings) inner.set(b.prefix, b.ns)\n const resolve = (prefix: string): string => {\n if (prefix === 'xml') return XML_NAMESPACE_URI\n const ns = inner.get(prefix)\n if (ns === undefined)\n throw new Error(`collab: prefix ${prefix} is not bound in a packed element`)\n return ns\n }\n const colon = node.name.indexOf(':')\n const xml: XmlEl = {\n ns: colon < 0 ? (inner.get('') ?? '') : resolve(node.name.slice(0, colon)),\n local: colon < 0 ? node.name : node.name.slice(colon + 1),\n attrs: named.map(([name, value]) => {\n const at = name.indexOf(':')\n if (at < 0) return { ns: '', local: name, value }\n const prefix = name.slice(0, at)\n return { ns: resolve(prefix), local: name.slice(at + 1), prefix, value }\n }),\n bindings,\n children: node.children.map((child) =>\n child.type === 'text' ? child.value : convert(child, inner)\n ),\n }\n if (colon >= 0) xml.prefix = node.name.slice(0, colon)\n return xml\n }\n const root = read.nodes.find((n) => n.type === 'element')\n if (!root || root.type !== 'element') throw new Error('collab: a packed element is empty')\n return convert(root, scope)\n}\n\nexport function isParagraphEl(el: { ns: string; local: string }): boolean {\n return el.ns === WML && el.local === 'p'\n}\n\nfunction fieldsOf(map: Y.Map<unknown>, xml: XmlEl): void {\n map.set('ns', xml.ns)\n map.set('local', xml.local)\n if (xml.prefix !== undefined) map.set('prefix', xml.prefix)\n const attrs = new Y.Array<XmlAttr>()\n attrs.push(xml.attrs.map((a) => ({ ...a })))\n map.set('attrs', attrs)\n const bindings = new Y.Array<XmlBinding>()\n bindings.push(xml.bindings.map((b) => ({ ...b })))\n map.set('bindings', bindings)\n}\n\nexport function newText(value: string): Y.Text {\n const text = new Y.Text()\n text.insert(0, value)\n return text\n}\n\n/** A rich paragraph: properties in `children`, inline content in `inline`. */\nexport function createRichParagraph(\n xml: XmlEl,\n encoded: EncodedParagraph,\n scope: Scope = new Map()\n): LiveElement {\n const map = new Y.Map<unknown>()\n fieldsOf(map, xml)\n const inner = withBindings(scope, xml.bindings)\n const children = new Y.Array<LiveChild>()\n children.push(encoded.head.map((el) => xmlToLive(el, inner)))\n map.set('children', children)\n const inline = new Y.Text()\n writeUnits(inline, encoded.units)\n map.set('inline', inline)\n return map\n}\n\nexport function withBindings(scope: Scope, bindings: readonly XmlBinding[]): Map<string, string> {\n const inner = new Map(scope)\n for (const b of bindings) inner.set(b.prefix, b.ns)\n return inner\n}\n\n/**\n * Build the Yjs form of an element sitting where `scope` is in force. A paragraph that cannot be\n * held as rich text is stored plainly; a part's `root` is never packed, so its children (styles,\n * numbering definitions, settings) stay separate items.\n */\nexport function xmlToLive(xml: XmlEl, scope: Scope = new Map(), root = false): LiveElement {\n if (isParagraphEl(xml)) {\n const encoded = encodeParagraph(xml.children)\n if (encoded) return createRichParagraph(xml, encoded, scope)\n }\n if (!root && packable(xml)) return createPacked(xml, scope)\n const map = new Y.Map<unknown>()\n fieldsOf(map, xml)\n const inner = withBindings(scope, xml.bindings)\n const children = new Y.Array<LiveChild>()\n children.push(xml.children.map((c) => (typeof c === 'string' ? newText(c) : xmlToLive(c, inner))))\n map.set('children', children)\n return map\n}\n\n/** Read an element back as plain data. */\nexport function liveToXml(map: LiveElement): XmlEl {\n if (isPackedElement(map)) return unpack(map.get(PACKED) as string, scopeOf(map))\n const prefix = map.get('prefix') as string | undefined\n const stored = (map.get('children') as Y.Array<LiveChild>)\n .toArray()\n .map((child) => (child instanceof Y.Text ? child.toString() : liveToXml(child)))\n const children: (XmlEl | string)[] = isRichParagraph(map)\n ? [...stored, ...decodeInline(readUnits(map.get('inline') as Y.Text))]\n : stored\n const xml: XmlEl = {\n ns: map.get('ns') as string,\n local: map.get('local') as string,\n attrs: (map.get('attrs') as Y.Array<XmlAttr>).toArray().map((a) => ({ ...a })),\n bindings: (map.get('bindings') as Y.Array<XmlBinding>).toArray().map((b) => ({ ...b })),\n children,\n }\n if (prefix !== undefined) xml.prefix = prefix\n return xml\n}\n\n// ── XML text ───────────────────────────────────────────────────────────────\n\nconst escapeText = (value: string): string =>\n value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')\n\nexport const escapeAttr = (value: string): string =>\n value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/\\t/g, '&#9;')\n .replace(/\\n/g, '&#10;')\n .replace(/\\r/g, '&#13;')\n\nconst qualified = (prefix: string | undefined, local: string): string =>\n prefix ? `${prefix}:${local}` : local\n\n/** Prefixes in scope for an element; innermost binding wins. */\nexport type Scope = ReadonlyMap<string, string>\n\n/** An element's start tag without its closing `>`, and the scope inside it. */\nfunction startTag(\n prefix: string | undefined,\n local: string,\n bindings: readonly XmlBinding[],\n attrs: readonly XmlAttr[],\n scope: Scope\n): [string, Scope] {\n const inScope = withBindings(scope, bindings)\n let out = `<${qualified(prefix, local)}`\n for (const b of bindings) {\n out +=\n b.prefix === '' ? ` xmlns=\"${escapeAttr(b.ns)}\"` : ` xmlns:${b.prefix}=\"${escapeAttr(b.ns)}\"`\n }\n for (const a of attrs) {\n let p = a.prefix\n if (a.ns !== '' && !p) {\n for (const [candidate, uri] of inScope) {\n if (candidate !== '' && uri === a.ns) {\n p = candidate\n break\n }\n }\n }\n out += ` ${qualified(p, a.local)}=\"${escapeAttr(a.value)}\"`\n }\n return [out, inScope]\n}\n\nexport function serializeXml(el: XmlEl, scope: Scope): string {\n const [out, inScope] = startTag(el.prefix, el.local, el.bindings, el.attrs, scope)\n if (el.children.length === 0) return `${out}/>`\n let body = ''\n for (const child of el.children) {\n body += typeof child === 'string' ? escapeText(child) : serializeXml(child, inScope)\n }\n return `${out}>${body}</${qualified(el.prefix, el.local)}>`\n}\n\n/** Serialise an element of the mirror. A packed element is its stored XML, never re-parsed. */\nexport function serializeLive(el: LiveElement, scope: Scope): string {\n if (isPackedElement(el)) return el.get(PACKED) as string\n const prefix = el.get('prefix') as string | undefined\n const local = el.get('local') as string\n const bindings = (el.get('bindings') as Y.Array<XmlBinding>).toArray()\n const attrs = (el.get('attrs') as Y.Array<XmlAttr>).toArray()\n const children = (el.get('children') as Y.Array<LiveChild>).toArray()\n const [out, inScope] = startTag(prefix, local, bindings, attrs, scope)\n\n const inline = isRichParagraph(el) ? decodeInline(readUnits(el.get('inline') as Y.Text)) : []\n if (children.length === 0 && inline.length === 0) return `${out}/>`\n let body = ''\n for (const child of children) {\n body += child instanceof Y.Text ? escapeText(child.toString()) : serializeLive(child, inScope)\n }\n for (const child of inline) body += serializeXml(child, inScope)\n return `${out}>${body}</${qualified(prefix, local)}>`\n}\n","/**\n * Yjs mirror of a canonical OOXML package.\n *\n * The mirror is deliberately generic: it stores XML (namespace, local name, prefix, attributes,\n * namespace bindings, children) and not core's typed node kinds. Materialising serialises the mirror\n * back to XML and lets core's own reader classify it, so the typed vocabulary never leaks into the\n * replicated state and a core upgrade cannot invalidate stored rooms.\n *\n * Layout of the Yjs document (all under the top level maps named below):\n *\n * meta Y.Map { format, mainDocumentPart }\n * parts Y.Map partName -> element\n * rels Y.Map ownerPart -> Y.Map(relId -> RelationshipJson), internal and external\n * alike; the `.rels` XML parts are regenerated from these, never mirrored\n * ctDefaults Y.Map extension -> mime\n * ctOverrides Y.Map case folded part name -> mime\n * binaries Y.Map partName -> Uint8Array (every non-XML part)\n *\n * element = Y.Map { ns, local, prefix?, attrs: Y.Array<AttrJson>, bindings: Y.Array<BindingJson>,\n * children: Y.Array<element | Y.Text> }\n * | Y.Map { ns, local, prefix?, attrs, bindings, children: head, inline: Y.Text } (rich paragraph)\n * | Y.Map { xml: string } (packed: an element with no editable text below it)\n * text = Y.Text (a text node is a Y.Text living in a children array)\n */\nimport * as Y from 'yjs'\nimport {\n readOoxmlPackage,\n readOoxmlPart,\n relsPartNameFor,\n validateExternalTarget,\n withContentTypeOverride,\n contentTypesPartBytes,\n writeOoxmlPackage,\n type OoxmlPackage,\n} from '@docx-editor.dev/core/store'\nimport { escapeAttr, serializeLive, xmlToLive, newText } from './mirror'\nimport type { XmlEl } from './rich'\nimport type { NodeRegistry } from './registry'\n\n/**\n * The room format this build writes. `arbi-docx/2` holds elements without editable text packed (see\n * mirror.ts); it reads `arbi-docx/1` rooms, whose elements are all trees, unchanged. A build that\n * only knows `/1` cannot read a packed element, so the client handshake requires this exact format.\n */\nexport const COLLAB_FORMAT = 'arbi-docx/2'\n\n/** Room formats this build reads. */\nconst READABLE_FORMATS: ReadonlySet<string> = new Set(['arbi-docx/1', COLLAB_FORMAT])\n\nexport function isReadableFormat(format: string | undefined): boolean {\n return format !== undefined && READABLE_FORMATS.has(format)\n}\n\nexport interface AttrJson {\n ns: string\n local: string\n prefix?: string\n value: string\n}\n\nexport interface BindingJson {\n prefix: string\n ns: string\n}\n\nexport interface RelationshipJson {\n ownerPart: string\n id: string\n type: string\n rawTarget: string\n targetMode: string\n order: number\n}\n\n/** Structural view of core's canonical node; only the fields the mirror carries. */\ninterface CanonicalElement {\n readonly kind: string\n readonly namespaceUri: string\n readonly localName: string\n readonly prefix?: string\n readonly namespaceBindings: readonly { prefix: string; namespaceUri: string }[]\n readonly attributes: readonly {\n namespaceUri: string\n localName: string\n prefix?: string\n value: string\n }[]\n readonly children: readonly (CanonicalElement | CanonicalText)[]\n}\n\ninterface CanonicalText {\n readonly kind: 'textValue'\n readonly value: string\n}\n\nfunction isText(node: CanonicalElement | CanonicalText): node is CanonicalText {\n return node.kind === 'textValue'\n}\n\nfunction canonicalToXml(node: CanonicalElement | CanonicalText): XmlEl | string {\n if (isText(node)) return node.value\n const xml: XmlEl = {\n ns: node.namespaceUri,\n local: node.localName,\n attrs: node.attributes.map((a) => {\n const json: AttrJson = { ns: a.namespaceUri, local: a.localName, value: a.value }\n if (a.prefix !== undefined) json.prefix = a.prefix\n return json\n }),\n bindings: node.namespaceBindings.map((b) => ({ prefix: b.prefix, ns: b.namespaceUri })),\n children: node.children.map(canonicalToXml),\n }\n if (node.prefix !== undefined) xml.prefix = node.prefix\n return xml\n}\n\n/** The Yjs form of a part's root element. */\nexport function encodeElement(el: CanonicalElement): Y.Map<unknown> {\n return xmlToLive(canonicalToXml(el) as XmlEl, new Map(), true)\n}\n\nexport function encodeText(value: string): Y.Text {\n return newText(value)\n}\n\n/** Seed an empty Yjs document from a loaded package. Call once, inside a transaction. */\nexport function bootstrap(doc: Y.Doc, pkg: OoxmlPackage): void {\n doc.transact(() => {\n const meta = doc.getMap('meta')\n meta.set('format', COLLAB_FORMAT)\n meta.set('mainDocumentPart', pkg.mainDocumentPart)\n\n const parts = doc.getMap<Y.Map<unknown>>('parts')\n for (const [name, part] of pkg.parts) {\n if (isRelsPart(name)) continue\n parts.set(name, encodeElement(part.root as unknown as CanonicalElement))\n }\n\n const binaries = doc.getMap<Uint8Array>('binaries')\n for (const [name, bytes] of pkg.partBytes) {\n if (!pkg.parts.has(name)) binaries.set(name, bytes)\n }\n\n const rels = doc.getMap<Y.Map<RelationshipJson>>('rels')\n for (const [owner, records] of pkg.relationships) {\n const byId = new Y.Map<RelationshipJson>()\n for (const r of records) {\n byId.set(r.id, {\n ownerPart: r.ownerPart,\n id: r.id,\n type: r.type,\n rawTarget: r.rawTarget,\n targetMode: r.targetMode as string,\n order: r.order,\n })\n }\n rels.set(owner, byId)\n }\n\n for (const e of pkg.externalTargets) {\n let byId = rels.get(e.ownerPart)\n if (!byId) {\n byId = new Y.Map<RelationshipJson>()\n rels.set(e.ownerPart, byId)\n }\n byId.set(e.id, {\n ownerPart: e.ownerPart,\n id: e.id,\n type: e.type,\n rawTarget: e.rawTarget,\n targetMode: 'External',\n order: byId.size,\n })\n }\n\n const ctDefaults = doc.getMap<string>('ctDefaults')\n for (const [ext, mime] of pkg.contentTypes.defaults) ctDefaults.set(ext, mime)\n const ctOverrides = doc.getMap<string>('ctOverrides')\n for (const [name, mime] of pkg.contentTypes.overrides) ctOverrides.set(name, mime)\n })\n}\n\nexport function isBootstrapped(doc: Y.Doc): boolean {\n return doc.getMap('meta').get('format') !== undefined\n}\n\nexport function readFormat(doc: Y.Doc): string | undefined {\n const format = doc.getMap('meta').get('format')\n return typeof format === 'string' ? format : undefined\n}\n\n// ── XML serialisation of the mirror ────────────────────────────────────────\n\nexport function serializePart(doc: Y.Doc, partName: string): string {\n const root = doc.getMap<Y.Map<unknown>>('parts').get(partName)\n if (!root) throw new Error(`collab: part ${partName} is not in the room`)\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n${serializeLive(root, new Map())}`\n}\n\n/** Override first, then the extension default, as the package's content type index resolves it. */\nexport function contentTypeOf(doc: Y.Doc, partName: string): string | undefined {\n const override = doc.getMap<string>('ctOverrides').get(partName.toLowerCase())\n if (override !== undefined) return override\n const dot = partName.lastIndexOf('.')\n if (dot < 0) return undefined\n return doc.getMap<string>('ctDefaults').get(partName.slice(dot + 1).toLowerCase())\n}\n\n/**\n * Register mirrored nodes under their positional ids. Run after bootstrap and after a remote apply.\n * Pass `only` to refresh just the parts that changed.\n */\nexport function registerMirror(\n doc: Y.Doc,\n registry: NodeRegistry,\n only?: ReadonlySet<string>\n): void {\n const parts = doc.getMap<Y.Map<unknown>>('parts')\n if (!only) {\n registry.clear()\n for (const [name, root] of parts) registry.registerTree(name, root)\n return\n }\n for (const name of only) {\n registry.dropPart(name)\n const root = parts.get(name)\n if (root) registry.registerTree(name, root)\n }\n}\n\n/**\n * Remembers each part's last materialised tree and which parts changed since, so a remote edit\n * re-reads only the part it touched. Unchanged parts keep the identical frozen object, which also\n * lets the local store reuse everything it already derived from them.\n */\nexport class MaterializeCache {\n readonly parts = new Map<\n string,\n OoxmlPackage['parts'] extends ReadonlyMap<string, infer P> ? P : never\n >()\n private dirty = new Set<string>()\n private everything = true\n private readonly stop: (() => void)[] = []\n\n constructor(doc: Y.Doc) {\n const parts = doc.getMap<Y.Map<unknown>>('parts')\n const onParts = (events: Y.YEvent<Y.AbstractType<unknown>>[]): void => {\n for (const event of events) {\n if (event.target === parts) {\n for (const key of (event as Y.YMapEvent<unknown>).keysChanged) this.dirty.add(key)\n } else if (typeof event.path[0] === 'string') this.dirty.add(event.path[0])\n }\n }\n parts.observeDeep(onParts)\n this.stop.push(() => parts.unobserveDeep(onParts))\n // A content type change can change how every part reads.\n for (const name of ['ctOverrides', 'ctDefaults']) {\n const map = doc.getMap(name)\n const onTypes = (): void => {\n this.everything = true\n }\n map.observe(onTypes)\n this.stop.push(() => map.unobserve(onTypes))\n }\n }\n\n /** Names to re-read, or null when everything must be. Clears the pending set. */\n take(): ReadonlySet<string> | null {\n const names = this.everything ? null : this.dirty\n this.dirty = new Set()\n this.everything = false\n return names\n }\n\n /** Mark parts changed again, for a materialisation that did not complete. */\n restore(names: ReadonlySet<string> | null): void {\n if (names === null) this.everything = true\n else for (const name of names) this.dirty.add(name)\n }\n\n destroy(): void {\n for (const stop of this.stop.splice(0)) stop()\n }\n}\n\nconst RELS_CONTENT_TYPE = 'application/vnd.openxmlformats-package.relationships+xml'\nconst RELS_NAMESPACE = 'http://schemas.openxmlformats.org/package/2006/relationships'\n\ninterface ExternalTargetRecord {\n ownerPart: string\n id: string\n type: string\n rawTarget: string\n sinkSafe: boolean\n}\n\nfunction isRelsPart(partName: string): boolean {\n return partName.endsWith('.rels')\n}\n\nfunction relationshipsXml(records: readonly RelationshipJson[]): string {\n const rows = records\n .map(\n (r) =>\n `<Relationship Id=\"${escapeAttr(r.id)}\" Type=\"${escapeAttr(r.type)}\" Target=\"${escapeAttr(r.rawTarget)}\"` +\n `${r.targetMode === 'External' ? ' TargetMode=\"External\"' : ''}/>`\n )\n .join('')\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<Relationships xmlns=\"${RELS_NAMESPACE}\">${rows}</Relationships>`\n}\n\n// ── Materialisation ────────────────────────────────────────────────────────\n\nexport class MaterializeError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'MaterializeError'\n }\n}\n\n/** Build a frozen canonical package from the mirror. Throws MaterializeError on a corrupt room. */\nexport function materialize(\n doc: Y.Doc,\n cache?: MaterializeCache,\n changed: ReadonlySet<string> | null = null\n): OoxmlPackage {\n const meta = doc.getMap('meta')\n const main = meta.get('mainDocumentPart')\n if (typeof main !== 'string') throw new MaterializeError('room has no main document part')\n\n const parts = new Map<\n string,\n OoxmlPackage['parts'] extends ReadonlyMap<string, infer P> ? P : never\n >()\n for (const name of doc.getMap('parts').keys()) {\n if (isRelsPart(name)) continue\n const reusable = cache && changed && !changed.has(name) ? cache.parts.get(name) : undefined\n if (reusable) {\n parts.set(name, reusable)\n continue\n }\n const contentType = contentTypeOf(doc, name)\n if (contentType === undefined) throw new MaterializeError(`part ${name} has no content type`)\n const read = readOoxmlPart(serializePart(doc, name), { name, contentType })\n if (!read.ok) throw new MaterializeError(`part ${name} is not readable: ${read.reason}`)\n parts.set(name, read.part)\n }\n if (cache) {\n cache.parts.clear()\n for (const [name, part] of parts) if (!isRelsPart(name)) cache.parts.set(name, part)\n }\n\n const partBytes = new Map<string, Uint8Array>()\n for (const [name, bytes] of doc.getMap<Uint8Array>('binaries')) partBytes.set(name, bytes)\n\n // Relationship records are the authority; the `.rels` XML parts are rebuilt from them.\n const relationships = new Map<string, readonly RelationshipJson[]>()\n const externalTargets: ExternalTargetRecord[] = []\n for (const [owner, byId] of doc.getMap<Y.Map<RelationshipJson>>('rels')) {\n // Ties on `order` are broken by id so every peer writes the same bytes.\n const records = [...byId.values()].sort((a, b) => a.order - b.order || a.id.localeCompare(b.id))\n if (records.length === 0) continue\n const internal = records.filter((r) => r.targetMode !== 'External')\n if (internal.length > 0) relationships.set(owner, internal)\n for (const r of records) {\n if (r.targetMode !== 'External') continue\n externalTargets.push({\n ownerPart: r.ownerPart,\n id: r.id,\n type: r.type,\n rawTarget: r.rawTarget,\n sinkSafe: validateExternalTarget(r.rawTarget).ok,\n })\n }\n const relsName = relsPartNameFor(owner)\n const read = readOoxmlPart(relationshipsXml(records), {\n name: relsName,\n contentType: RELS_CONTENT_TYPE,\n })\n if (!read.ok)\n throw new MaterializeError(`relationships of ${owner} are not valid: ${read.reason}`)\n parts.set(relsName, read.part)\n }\n\n const contentTypes = {\n defaults: new Map(doc.getMap<string>('ctDefaults')),\n overrides: new Map(doc.getMap<string>('ctOverrides')),\n }\n\n return withMirroredOverrides({\n parts,\n partBytes,\n relationships,\n externalTargets,\n contentTypes,\n mainDocumentPart: main,\n } as unknown as OoxmlPackage)\n}\n\n/** Media a document embeds, by extension: what a picture part is when nothing declares it. */\nconst MEDIA_TYPES: Readonly<Record<string, string>> = {\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n bmp: 'image/bmp',\n tif: 'image/tiff',\n tiff: 'image/tiff',\n webp: 'image/webp',\n svg: 'image/svg+xml',\n emf: 'image/x-emf',\n wmf: 'image/x-wmf',\n}\n\n/**\n * Bring the `[Content_Types].xml` bytes in line with the mirrored overrides.\n *\n * The overrides are the authority, but the package also carries the content-types part itself as\n * bytes, which is what the writer emits. Core journals a new part's override (Insert footnote on a\n * document without notes creates `/word/footnotes.xml`) without re-journalling those bytes, so a\n * room would otherwise export the new part under the generic `application/xml` default — and Word\n * ignores a footnotes part it cannot recognise.\n *\n * An inserted picture is journalled as its bytes and relationship only: neither its override nor\n * the content-types bytes. A media part that nothing declares is given its type by extension, or\n * Word reports the whole file as unreadable.\n */\nfunction withMirroredOverrides(pkg: OoxmlPackage): OoxmlPackage {\n const bytes = contentTypesPartBytes(pkg)\n if (!bytes) return pkg\n const xml = new TextDecoder().decode(bytes.bytes)\n const declared = new Set(\n [...xml.matchAll(/PartName\\s*=\\s*[\"']([^\"']+)[\"']/gi)].map((m) => m[1].toLowerCase())\n )\n const defaults = new Set(\n [...xml.matchAll(/Extension\\s*=\\s*[\"']([^\"']+)[\"']/gi)].map((m) => m[1].toLowerCase())\n )\n let next = pkg\n for (const name of [...pkg.parts.keys(), ...pkg.partBytes.keys()]) {\n const key = name.toLowerCase()\n if (declared.has(key) || key === bytes.storageKey.toLowerCase()) continue\n const extension = key.slice(key.lastIndexOf('.') + 1)\n const type =\n pkg.contentTypes.overrides.get(key) ??\n (defaults.has(extension) ? undefined : MEDIA_TYPES[extension])\n if (type) {\n next = withContentTypeOverride(next, name, type, { forceOverride: true })\n declared.add(key)\n }\n }\n return next\n}\n\n/** Serialise the room as DOCX bytes. */\nexport function materializeBytes(doc: Y.Doc): Uint8Array {\n return writeOoxmlPackage(materialize(doc))\n}\n\n/** Load DOCX bytes and seed an empty room from them. */\nexport function bootstrapFromBytes(doc: Y.Doc, bytes: Uint8Array): OoxmlPackage {\n const result = readOoxmlPackage(bytes)\n if (!result.ok) throw new MaterializeError(`not a readable DOCX: ${result.reason}`)\n bootstrap(doc, result.package)\n return result.package\n}\n"]}
1
+ {"version":3,"sources":["../src/rich.ts","../src/mirror.ts","../src/encoding.ts"],"names":["Y","Y2","readOoxmlPart","validateExternalTarget","relsPartNameFor","contentTypesPartBytes","withContentTypeOverride","writeOoxmlPackage","readOoxmlPackage"],"mappings":"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","file":"encoding.cjs","sourcesContent":["/**\n * Paragraph text as one rich-text string.\n *\n * Why: the OOXML tree splits a run whenever formatting or a tracked change starts in the middle of\n * it, and a tree CRDT can only express that as \"delete the suffix here, insert a copy there\". When\n * two people do it to the same run at once, both copies survive and the text is duplicated. Here a\n * paragraph's characters live in a single Y.Text and everything that used to split them (run\n * properties, tracked-change and hyperlink wrappers, the shape of a text element) is an attribute on\n * a range of it, so a split only moves a boundary and never moves a character.\n *\n * A unit is one UTF-16 code unit of text, or one embedded element (a tab, a break, a field\n * character, a drawing, a bookmark...). Its attributes say which run, which wrappers and which text\n * element it belongs to. `encodeParagraph` returns null for a paragraph this model cannot hold\n * exactly, and the caller then keeps that paragraph as a plain element tree.\n */\nimport type * as Y from 'yjs'\n\nexport const WML = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'\n\nexport interface XmlAttr {\n ns: string\n local: string\n prefix?: string\n value: string\n}\n\nexport interface XmlBinding {\n prefix: string\n ns: string\n}\n\n/** A plain element: the generic shape the mirror stores, with text nodes as strings. */\nexport interface XmlEl {\n ns: string\n local: string\n prefix?: string\n attrs: XmlAttr[]\n bindings: XmlBinding[]\n children: (XmlEl | string)[]\n /** Identity of a run or wrapper, so two neighbours with equal properties stay two elements. Not XML. */\n _id?: string\n}\n\n/** An element without its children, as carried in an attribute. */\ninterface ElDesc {\n ns: string\n local: string\n prefix?: string\n attrs: XmlAttr[]\n bindings: XmlBinding[]\n}\n\ninterface WrapperDesc extends ElDesc {\n /** Children that come before the inline content (an inline content control's properties). */\n head: XmlEl[]\n id: string\n}\n\ninterface UnitAttrs {\n /** The run's `w:rPr`, or null when it has none. */\n r: XmlEl | null\n /** The run element itself, without children. */\n ra: ElDesc | null\n /** Which run: stays the same when the run is split, so neighbours with equal properties never merge. */\n ri: string | null\n /** Wrappers around the run, outermost first. */\n w: WrapperDesc[]\n /** The text element this character sits in (`w:t`, `w:delText`, `w:instrText`). */\n tx: ElDesc | null\n /** 'a' for an atom placed directly in the paragraph or a wrapper, 'e' for an empty run. */\n k: 'a' | 'e' | null\n}\n\nexport interface Unit {\n /** One UTF-16 code unit, or an embedded element. */\n v: string | { x: XmlEl }\n a: UnitAttrs\n}\n\nexport interface EncodedParagraph {\n /** Children that precede the inline content: the paragraph properties. */\n head: XmlEl[]\n units: Unit[]\n}\n\nconst WRAPPERS = new Set([\n 'ins',\n 'del',\n 'moveFrom',\n 'moveTo',\n 'hyperlink',\n 'smartTag',\n 'fldSimple',\n 'customXml',\n 'dir',\n 'bdo',\n 'sdtContent',\n])\nconst TEXT_ELEMENTS = new Set(['t', 'delText', 'instrText'])\n\nconst isEl = (n: XmlEl | string): n is XmlEl => typeof n !== 'string'\nconst isWml = (el: XmlEl, local: string): boolean => el.ns === WML && el.local === local\n\nfunction describe(el: XmlEl): ElDesc {\n const desc: ElDesc = { ns: el.ns, local: el.local, attrs: el.attrs, bindings: el.bindings }\n if (el.prefix !== undefined) desc.prefix = el.prefix\n return desc\n}\n\nfunction withChildren(desc: ElDesc, children: (XmlEl | string)[], id?: string): XmlEl {\n const el: XmlEl = {\n ns: desc.ns,\n local: desc.local,\n attrs: desc.attrs,\n bindings: desc.bindings,\n children,\n }\n if (desc.prefix !== undefined) el.prefix = desc.prefix\n if (id !== undefined) el._id = id\n return el\n}\n\nlet counter = 0\n/** A fresh run or wrapper identity. */\nexport function newRunId(): string {\n counter += 1\n return `${Math.random().toString(36).slice(2, 8)}${counter.toString(36)}`\n}\n\nclass Unrepresentable extends Error {}\n\nfunction fail(): never {\n throw new Unrepresentable()\n}\n\nfunction encodeRun(run: XmlEl, wrappers: WrapperDesc[], out: Unit[]): void {\n const children = run.children\n let rPr: XmlEl | null = null\n let start = 0\n const first = children[0]\n if (first !== undefined && isEl(first) && isWml(first, 'rPr')) {\n rPr = first\n start = 1\n }\n const base = { r: rPr, ra: describe(run), ri: run._id ?? newRunId(), w: wrappers }\n let produced = false\n for (let i = start; i < children.length; i++) {\n const child = children[i]\n if (!isEl(child)) fail()\n const only = child.children[0]\n if (\n child.ns === WML &&\n TEXT_ELEMENTS.has(child.local) &&\n child.children.length === 1 &&\n typeof only === 'string' &&\n only.length > 0\n ) {\n const tx = describe(child)\n for (let c = 0; c < only.length; c++) out.push({ v: only[c], a: { ...base, tx, k: null } })\n } else {\n out.push({ v: { x: child }, a: { ...base, tx: null, k: null } })\n }\n produced = true\n }\n if (!produced)\n out.push({\n v: { x: { ns: WML, local: 'e', attrs: [], bindings: [], children: [] } },\n a: { ...base, tx: null, k: 'e' },\n })\n}\n\nfunction encodeInline(children: (XmlEl | string)[], wrappers: WrapperDesc[], out: Unit[]): void {\n for (const child of children) {\n if (!isEl(child)) fail()\n if (child.ns === WML && child.local === 'r') {\n encodeRun(child, wrappers, out)\n } else if (child.ns === WML && WRAPPERS.has(child.local)) {\n const before = out.length\n const desc: WrapperDesc = { ...describe(child), head: [], id: child._id ?? newRunId() }\n let ok = true\n const inner: Unit[] = []\n try {\n encodeInline(child.children, [...wrappers, desc], inner)\n } catch (error) {\n if (!(error instanceof Unrepresentable)) throw error\n ok = false\n }\n if (ok && inner.length > 0) out.push(...inner)\n else {\n out.length = before\n out.push(atom(child, wrappers))\n }\n } else if (child.ns === WML && child.local === 'sdt') {\n const last = child.children[child.children.length - 1]\n const head = child.children.slice(0, -1)\n if (last !== undefined && isEl(last) && isWml(last, 'sdtContent') && head.every(isEl)) {\n const before = out.length\n const sdt: WrapperDesc = {\n ...describe(child),\n head: head as XmlEl[],\n id: child._id ?? newRunId(),\n }\n const content: WrapperDesc = { ...describe(last), head: [], id: last._id ?? newRunId() }\n const inner: Unit[] = []\n let ok = true\n try {\n encodeInline(last.children, [...wrappers, sdt, content], inner)\n } catch (error) {\n if (!(error instanceof Unrepresentable)) throw error\n ok = false\n }\n if (ok && inner.length > 0) out.push(...inner)\n else {\n out.length = before\n out.push(atom(child, wrappers))\n }\n } else out.push(atom(child, wrappers))\n } else {\n out.push(atom(child, wrappers))\n }\n }\n}\n\nfunction atom(el: XmlEl, wrappers: WrapperDesc[]): Unit {\n return { v: { x: el }, a: { r: null, ra: null, ri: null, w: wrappers, tx: null, k: 'a' } }\n}\n\n/** Encode a paragraph's children, or null when the paragraph cannot be held exactly. */\nexport function encodeParagraph(children: (XmlEl | string)[]): EncodedParagraph | null {\n const head: XmlEl[] = []\n let start = 0\n const first = children[0]\n if (first !== undefined && isEl(first) && isWml(first, 'pPr')) {\n head.push(first)\n start = 1\n }\n const units: Unit[] = []\n try {\n encodeInline(children.slice(start), [], units)\n } catch (error) {\n if (error instanceof Unrepresentable) return null\n throw error\n }\n return { head, units }\n}\n\nconst same = (a: unknown, b: unknown): boolean => JSON.stringify(a) === JSON.stringify(b)\n\nfunction decodeRange(units: Unit[], from: number, to: number, depth: number): XmlEl[] {\n const out: XmlEl[] = []\n let i = from\n while (i < to) {\n const unit = units[i]\n const { w } = unit.a\n if (w.length > depth) {\n const wrapper = w[depth]\n let j = i + 1\n while (j < to && units[j].a.w.length > depth && same(units[j].a.w[depth], wrapper)) j++\n out.push(\n withChildren(wrapper, [...wrapper.head, ...decodeRange(units, i, j, depth + 1)], wrapper.id)\n )\n i = j\n } else if (unit.a.k === 'a') {\n out.push((unit.v as { x: XmlEl }).x)\n i++\n } else {\n let j = i + 1\n // An empty run stands alone, so it never merges into a neighbour with the same properties.\n while (\n unit.a.k !== 'e' &&\n j < to &&\n units[j].a.w.length === depth &&\n units[j].a.k !== 'a' &&\n units[j].a.k !== 'e' &&\n units[j].a.ri === unit.a.ri &&\n same(units[j].a.r, unit.a.r) &&\n same(units[j].a.ra, unit.a.ra)\n ) {\n j++\n }\n out.push(decodeRun(units, i, j))\n i = j\n }\n }\n return out\n}\n\nfunction decodeRun(units: Unit[], from: number, to: number): XmlEl {\n const { r, ra } = units[from].a\n const children: (XmlEl | string)[] = []\n if (r) children.push(r)\n let i = from\n while (i < to) {\n const unit = units[i]\n if (unit.a.k === 'e') {\n i++\n } else if (typeof unit.v === 'string') {\n let j = i + 1\n while (j < to && typeof units[j].v === 'string' && same(units[j].a.tx, unit.a.tx)) j++\n let text = ''\n for (let c = i; c < j; c++) text += units[c].v as string\n children.push(withChildren(unit.a.tx as ElDesc, [text]))\n i = j\n } else {\n children.push(unit.v.x)\n i++\n }\n }\n return withChildren(ra as ElDesc, children, units[from].a.ri ?? undefined)\n}\n\n/** The children a paragraph's units stand for, after its properties. */\nexport function decodeInline(units: Unit[]): XmlEl[] {\n return decodeRange(units, 0, units.length, 0)\n}\n\nexport function decodeParagraph(encoded: EncodedParagraph): (XmlEl | string)[] {\n return [...encoded.head, ...decodeInline(encoded.units)]\n}\n\n// ── Y.Text input and output ────────────────────────────────────────────────\n\nconst KEYS = ['r', 'ra', 'ri', 'w', 'tx', 'k'] as const\n\nfunction toAttributes(a: UnitAttrs): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n for (const key of KEYS) {\n const value = a[key]\n if (value !== null && !(key === 'w' && (value as unknown[]).length === 0)) out[key] = value\n }\n return out\n}\n\nfunction fromAttributes(attributes: Record<string, unknown> | undefined): UnitAttrs {\n const a = attributes ?? {}\n return {\n r: (a.r as XmlEl | undefined) ?? null,\n ra: (a.ra as ElDesc | undefined) ?? null,\n ri: (a.ri as string | undefined) ?? null,\n w: (a.w as WrapperDesc[] | undefined) ?? [],\n tx: (a.tx as ElDesc | undefined) ?? null,\n k: (a.k as UnitAttrs['k'] | undefined) ?? null,\n }\n}\n\n/** The units a Y.Text currently holds. */\nexport function readUnits(text: Y.Text): Unit[] {\n const units: Unit[] = []\n for (const op of text.toDelta() as {\n insert: string | { x: XmlEl }\n attributes?: Record<string, unknown>\n }[]) {\n const a = fromAttributes(op.attributes)\n if (typeof op.insert === 'string') {\n for (let i = 0; i < op.insert.length; i++) units.push({ v: op.insert[i], a })\n } else {\n units.push({ v: op.insert, a })\n }\n }\n return units\n}\n\nconst valueKeyOf = (u: Unit): string => (typeof u.v === 'string' ? u.v : JSON.stringify(u.v))\nconst attrsKeyOf = (u: Unit): string => JSON.stringify(u.a)\n\ntype DeltaOp = {\n retain?: number\n delete?: number\n insert?: string | object\n attributes?: Record<string, unknown>\n}\n\nfunction attributeChange(from: UnitAttrs, to: UnitAttrs): Record<string, unknown> {\n const a = toAttributes(from)\n const b = toAttributes(to)\n const change: Record<string, unknown> = {}\n for (const key of KEYS) {\n if (JSON.stringify(a[key]) !== JSON.stringify(b[key])) change[key] = b[key] ?? null\n }\n return change\n}\n\nfunction pushRetain(delta: DeltaOp[], length: number, attributes?: Record<string, unknown>): void {\n if (length === 0) return\n const last = delta[delta.length - 1]\n const empty = !attributes || Object.keys(attributes).length === 0\n if (last && last.retain !== undefined && !last.attributes && empty) {\n last.retain += length\n return\n }\n delta.push(empty ? { retain: length } : { retain: length, attributes })\n}\n\n/** Retain `length` units, reformatting where the attributes of `previous` and `next` differ. */\nfunction reformat(\n delta: DeltaOp[],\n previous: Unit[],\n from: number,\n next: Unit[],\n to: number,\n length: number\n): void {\n let i = 0\n while (i < length) {\n const change = attributeChange(previous[from + i].a, next[to + i].a)\n const key = JSON.stringify(change)\n let j = i + 1\n while (\n j < length &&\n JSON.stringify(attributeChange(previous[from + j].a, next[to + j].a)) === key\n ) {\n j++\n }\n pushRetain(delta, j - i, change)\n i = j\n }\n}\n\n/**\n * Make `text` hold `next`, changing as little as possible. Characters are matched by value from both\n * ends, so what a person typed is the only thing inserted; matched characters whose attributes\n * changed (a run split, a tracked change started) are reformatted in place and never retyped. That is\n * what lets two people's edits of one paragraph merge instead of duplicating text.\n */\nexport function applyUnits(text: Y.Text, previous: Unit[], next: Unit[]): void {\n let start = 0\n const limit = Math.min(previous.length, next.length)\n while (start < limit && valueKeyOf(previous[start]) === valueKeyOf(next[start])) start++\n let endPrev = previous.length\n let endNext = next.length\n while (\n endPrev > start &&\n endNext > start &&\n valueKeyOf(previous[endPrev - 1]) === valueKeyOf(next[endNext - 1])\n ) {\n endPrev--\n endNext--\n }\n\n const delta: DeltaOp[] = []\n reformat(delta, previous, 0, next, 0, start)\n if (endPrev > start) delta.push({ delete: endPrev - start })\n let i = start\n while (i < endNext) {\n const unit = next[i]\n if (typeof unit.v !== 'string') {\n delta.push({ insert: unit.v, attributes: toAttributes(unit.a) })\n i++\n continue\n }\n let j = i + 1\n let chunk = unit.v\n const attributes = attrsKeyOf(unit)\n while (j < endNext && typeof next[j].v === 'string' && attrsKeyOf(next[j]) === attributes) {\n chunk += next[j].v as string\n j++\n }\n delta.push({ insert: chunk, attributes: toAttributes(unit.a) })\n i = j\n }\n reformat(delta, previous, endPrev, next, endNext, previous.length - endPrev)\n if (delta.every((op) => op.retain !== undefined && !op.attributes)) return\n text.applyDelta(delta, { sanitize: false })\n}\n\n/** Write units into an empty Y.Text. */\nexport function writeUnits(text: Y.Text, units: Unit[]): void {\n applyUnits(text, [], units)\n}\n","/**\n * Elements of the mirror, in both directions: plain `XmlEl` objects to Yjs types and back, and\n * `XmlEl` to XML text.\n *\n * Three forms:\n *\n * - A paragraph is held as a rich paragraph (see rich.ts) whenever it can be represented exactly:\n * its properties stay in `children`, and its inline content is the single Y.Text `inline`.\n * - An element with no editable text anywhere below it (a style, a numbering definition, a font, a\n * setting, a theme, paragraph or table properties, a section's setup) is packed: the map holds\n * its whole subtree as one XML string under `xml`. It is opened into a plain tree when an edit\n * touches it and written back whole, so concurrent edits to the same packed element are last\n * writer wins, while different elements (two styles) still merge. Held as a tree, every element,\n * attribute and namespace URI was its own CRDT item: a 350 KB styles part took 3.2 MB of room\n * state and over 100 MB of heap to load.\n * - Every other element (the body, a table, a cell, a footnote: the path to editable text) is a\n * generic map with a `children` array.\n */\nimport * as Y from 'yjs'\nimport { readXml, XML_NAMESPACE_URI } from '@docx-editor.dev/core/store'\nimport {\n decodeInline,\n encodeParagraph,\n readUnits,\n WML,\n writeUnits,\n type EncodedParagraph,\n type XmlAttr,\n type XmlBinding,\n type XmlEl,\n} from './rich'\n\nexport type LiveElement = Y.Map<unknown>\ntype LiveChild = LiveElement | Y.Text\n\nexport function isRichParagraph(map: Y.Map<unknown>): boolean {\n return map.has('inline')\n}\n\n/** Key of a packed element's XML. */\nconst PACKED = 'xml'\n\nexport function isPackedElement(map: Y.Map<unknown>): boolean {\n return map.has(PACKED)\n}\n\n/** A rich paragraph or a packed element: its inner nodes have no Yjs type of their own. */\nexport function isCompact(map: Y.Map<unknown>): boolean {\n return isRichParagraph(map) || isPackedElement(map)\n}\n\n/** Elements that carry or contain editable text: never packed, so typing merges character-wise. */\nconst TEXT_BEARING = new Set(['p', 't', 'delText', 'instrText', 'delInstrText'])\n\n/** Whether an element is held packed: nothing below it is a paragraph or a run's text. */\nexport function packable(xml: XmlEl): boolean {\n if (xml.ns === WML && TEXT_BEARING.has(xml.local)) return false\n return xml.children.every((c) => typeof c === 'string' || packable(c))\n}\n\n/** The packed form of an element. */\nfunction createPacked(xml: XmlEl, scope: Scope): LiveElement {\n const map = new Y.Map<unknown>()\n map.set(PACKED, serializeXml(xml, scope))\n return map\n}\n\n/** Rewrite a packed element when its content changed. */\nexport function repack(map: LiveElement, xml: XmlEl): void {\n const next = serializeXml(xml, scopeOf(map))\n if (map.get(PACKED) !== next) map.set(PACKED, next)\n}\n\n/** Namespace bindings in scope where `node` sits: those of every element above it. */\nexport function scopeOf(node: LiveElement): Map<string, string> {\n const chain: LiveElement[] = []\n let parent = node.parent\n while (parent instanceof Y.Array) {\n const owner = parent.parent\n if (!(owner instanceof Y.Map)) break\n chain.push(owner)\n parent = owner.parent\n }\n const scope = new Map<string, string>()\n for (const el of chain.reverse()) {\n for (const b of (el.get('bindings') as Y.Array<XmlBinding>).toArray()) scope.set(b.prefix, b.ns)\n }\n return scope\n}\n\n/** The scope inside `el`: what its children see. */\nexport function scopeWithin(el: LiveElement): Map<string, string> {\n const scope = scopeOf(el)\n if (!isPackedElement(el)) {\n for (const b of (el.get('bindings') as Y.Array<XmlBinding>).toArray()) scope.set(b.prefix, b.ns)\n }\n return scope\n}\n\nconst unpackLimits = { maxBytes: 64 * 1024 * 1024, maxElements: 2_000_000 }\n\n/** Parse a packed element's XML back into the generic form, resolving prefixes against `scope`. */\nfunction unpack(text: string, scope: Scope): XmlEl {\n const read = readXml(text, unpackLimits)\n if (!read.ok) throw new Error(`collab: a packed element is not readable XML (${read.reason})`)\n type Node = (typeof read.nodes)[number]\n const convert = (node: Extract<Node, { type: 'element' }>, outer: Scope): XmlEl => {\n const bindings: XmlBinding[] = []\n const named: [string, string][] = []\n for (const [name, value] of Object.entries(node.attributes)) {\n if (name === 'xmlns') bindings.push({ prefix: '', ns: value })\n else if (name.startsWith('xmlns:')) bindings.push({ prefix: name.slice(6), ns: value })\n else named.push([name, value])\n }\n const inner = new Map(outer)\n for (const b of bindings) inner.set(b.prefix, b.ns)\n const resolve = (prefix: string): string => {\n if (prefix === 'xml') return XML_NAMESPACE_URI\n const ns = inner.get(prefix)\n if (ns === undefined)\n throw new Error(`collab: prefix ${prefix} is not bound in a packed element`)\n return ns\n }\n const colon = node.name.indexOf(':')\n const xml: XmlEl = {\n ns: colon < 0 ? (inner.get('') ?? '') : resolve(node.name.slice(0, colon)),\n local: colon < 0 ? node.name : node.name.slice(colon + 1),\n attrs: named.map(([name, value]) => {\n const at = name.indexOf(':')\n if (at < 0) return { ns: '', local: name, value }\n const prefix = name.slice(0, at)\n return { ns: resolve(prefix), local: name.slice(at + 1), prefix, value }\n }),\n bindings,\n children: node.children.map((child) =>\n child.type === 'text' ? child.value : convert(child, inner)\n ),\n }\n if (colon >= 0) xml.prefix = node.name.slice(0, colon)\n return xml\n }\n const root = read.nodes.find((n) => n.type === 'element')\n if (!root || root.type !== 'element') throw new Error('collab: a packed element is empty')\n return convert(root, scope)\n}\n\nexport function isParagraphEl(el: { ns: string; local: string }): boolean {\n return el.ns === WML && el.local === 'p'\n}\n\nfunction fieldsOf(map: Y.Map<unknown>, xml: XmlEl): void {\n map.set('ns', xml.ns)\n map.set('local', xml.local)\n if (xml.prefix !== undefined) map.set('prefix', xml.prefix)\n const attrs = new Y.Array<XmlAttr>()\n attrs.push(xml.attrs.map((a) => ({ ...a })))\n map.set('attrs', attrs)\n const bindings = new Y.Array<XmlBinding>()\n bindings.push(xml.bindings.map((b) => ({ ...b })))\n map.set('bindings', bindings)\n}\n\nexport function newText(value: string): Y.Text {\n const text = new Y.Text()\n text.insert(0, value)\n return text\n}\n\n/** A rich paragraph: properties in `children`, inline content in `inline`. */\nexport function createRichParagraph(\n xml: XmlEl,\n encoded: EncodedParagraph,\n scope: Scope = new Map()\n): LiveElement {\n const map = new Y.Map<unknown>()\n fieldsOf(map, xml)\n const inner = withBindings(scope, xml.bindings)\n const children = new Y.Array<LiveChild>()\n children.push(encoded.head.map((el) => xmlToLive(el, inner)))\n map.set('children', children)\n const inline = new Y.Text()\n writeUnits(inline, encoded.units)\n map.set('inline', inline)\n return map\n}\n\nexport function withBindings(scope: Scope, bindings: readonly XmlBinding[]): Map<string, string> {\n const inner = new Map(scope)\n for (const b of bindings) inner.set(b.prefix, b.ns)\n return inner\n}\n\n/**\n * Build the Yjs form of an element sitting where `scope` is in force. A paragraph that cannot be\n * held as rich text is stored plainly; a part's `root` is never packed, so its children (styles,\n * numbering definitions, settings) stay separate items.\n */\nexport function xmlToLive(xml: XmlEl, scope: Scope = new Map(), root = false): LiveElement {\n if (isParagraphEl(xml)) {\n const encoded = encodeParagraph(xml.children)\n if (encoded) return createRichParagraph(xml, encoded, scope)\n }\n if (!root && packable(xml)) return createPacked(xml, scope)\n const map = new Y.Map<unknown>()\n fieldsOf(map, xml)\n const inner = withBindings(scope, xml.bindings)\n const children = new Y.Array<LiveChild>()\n children.push(xml.children.map((c) => (typeof c === 'string' ? newText(c) : xmlToLive(c, inner))))\n map.set('children', children)\n return map\n}\n\n/** Read an element back as plain data. */\nexport function liveToXml(map: LiveElement): XmlEl {\n if (isPackedElement(map)) return unpack(map.get(PACKED) as string, scopeOf(map))\n const prefix = map.get('prefix') as string | undefined\n const stored = (map.get('children') as Y.Array<LiveChild>)\n .toArray()\n .map((child) => (child instanceof Y.Text ? child.toString() : liveToXml(child)))\n const children: (XmlEl | string)[] = isRichParagraph(map)\n ? [...stored, ...decodeInline(readUnits(map.get('inline') as Y.Text))]\n : stored\n const xml: XmlEl = {\n ns: map.get('ns') as string,\n local: map.get('local') as string,\n attrs: (map.get('attrs') as Y.Array<XmlAttr>).toArray().map((a) => ({ ...a })),\n bindings: (map.get('bindings') as Y.Array<XmlBinding>).toArray().map((b) => ({ ...b })),\n children,\n }\n if (prefix !== undefined) xml.prefix = prefix\n return xml\n}\n\n// ── XML text ───────────────────────────────────────────────────────────────\n\nconst escapeText = (value: string): string =>\n value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')\n\nexport const escapeAttr = (value: string): string =>\n value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/\\t/g, '&#9;')\n .replace(/\\n/g, '&#10;')\n .replace(/\\r/g, '&#13;')\n\nconst qualified = (prefix: string | undefined, local: string): string =>\n prefix ? `${prefix}:${local}` : local\n\n/** Prefixes in scope for an element; innermost binding wins. */\nexport type Scope = ReadonlyMap<string, string>\n\n/** An element's start tag without its closing `>`, and the scope inside it. */\nfunction startTag(\n prefix: string | undefined,\n local: string,\n bindings: readonly XmlBinding[],\n attrs: readonly XmlAttr[],\n scope: Scope\n): [string, Scope] {\n const inScope = withBindings(scope, bindings)\n let out = `<${qualified(prefix, local)}`\n for (const b of bindings) {\n out +=\n b.prefix === '' ? ` xmlns=\"${escapeAttr(b.ns)}\"` : ` xmlns:${b.prefix}=\"${escapeAttr(b.ns)}\"`\n }\n for (const a of attrs) {\n let p = a.prefix\n if (a.ns !== '' && !p) {\n for (const [candidate, uri] of inScope) {\n if (candidate !== '' && uri === a.ns) {\n p = candidate\n break\n }\n }\n }\n out += ` ${qualified(p, a.local)}=\"${escapeAttr(a.value)}\"`\n }\n return [out, inScope]\n}\n\nexport function serializeXml(el: XmlEl, scope: Scope): string {\n const [out, inScope] = startTag(el.prefix, el.local, el.bindings, el.attrs, scope)\n if (el.children.length === 0) return `${out}/>`\n let body = ''\n for (const child of el.children) {\n body += typeof child === 'string' ? escapeText(child) : serializeXml(child, inScope)\n }\n return `${out}>${body}</${qualified(el.prefix, el.local)}>`\n}\n\n/** Serialise an element of the mirror. A packed element is its stored XML, never re-parsed. */\nexport function serializeLive(el: LiveElement, scope: Scope): string {\n if (isPackedElement(el)) return el.get(PACKED) as string\n const prefix = el.get('prefix') as string | undefined\n const local = el.get('local') as string\n const bindings = (el.get('bindings') as Y.Array<XmlBinding>).toArray()\n const attrs = (el.get('attrs') as Y.Array<XmlAttr>).toArray()\n const children = (el.get('children') as Y.Array<LiveChild>).toArray()\n const [out, inScope] = startTag(prefix, local, bindings, attrs, scope)\n\n const inline = isRichParagraph(el) ? decodeInline(readUnits(el.get('inline') as Y.Text)) : []\n if (children.length === 0 && inline.length === 0) return `${out}/>`\n let body = ''\n for (const child of children) {\n body += child instanceof Y.Text ? escapeText(child.toString()) : serializeLive(child, inScope)\n }\n for (const child of inline) body += serializeXml(child, inScope)\n return `${out}>${body}</${qualified(prefix, local)}>`\n}\n","/**\n * Yjs mirror of a canonical OOXML package.\n *\n * The mirror is deliberately generic: it stores XML (namespace, local name, prefix, attributes,\n * namespace bindings, children) and not core's typed node kinds. Materialising serialises the mirror\n * back to XML and lets core's own reader classify it, so the typed vocabulary never leaks into the\n * replicated state and a core upgrade cannot invalidate stored rooms.\n *\n * Layout of the Yjs document (all under the top level maps named below):\n *\n * meta Y.Map { format, mainDocumentPart }\n * parts Y.Map partName -> element\n * rels Y.Map ownerPart -> Y.Map(relId -> RelationshipJson), internal and external\n * alike; the `.rels` XML parts are regenerated from these, never mirrored\n * ctDefaults Y.Map extension -> mime\n * ctOverrides Y.Map case folded part name -> mime\n * binaries Y.Map partName -> Uint8Array (every non-XML part)\n *\n * element = Y.Map { ns, local, prefix?, attrs: Y.Array<AttrJson>, bindings: Y.Array<BindingJson>,\n * children: Y.Array<element | Y.Text> }\n * | Y.Map { ns, local, prefix?, attrs, bindings, children: head, inline: Y.Text } (rich paragraph)\n * | Y.Map { xml: string } (packed: an element with no editable text below it)\n * text = Y.Text (a text node is a Y.Text living in a children array)\n */\nimport * as Y from 'yjs'\nimport {\n readOoxmlPackage,\n readOoxmlPart,\n relsPartNameFor,\n validateExternalTarget,\n withContentTypeOverride,\n contentTypesPartBytes,\n writeOoxmlPackage,\n type OoxmlPackage,\n} from '@docx-editor.dev/core/store'\nimport { escapeAttr, serializeLive, xmlToLive, newText } from './mirror'\nimport type { XmlEl } from './rich'\nimport type { NodeRegistry } from './registry'\n\n/**\n * The room format: the only one this build reads and writes. `arbi-docx/2` holds elements without\n * editable text packed (see mirror.ts). A client and the collaboration server must run the same\n * format: the handshake refuses any other, and the collaboration service re-encodes a stored room of\n * an earlier format before serving it (`reencodeRoom`).\n */\nexport const COLLAB_FORMAT = 'arbi-docx/2'\n\nexport interface AttrJson {\n ns: string\n local: string\n prefix?: string\n value: string\n}\n\nexport interface BindingJson {\n prefix: string\n ns: string\n}\n\nexport interface RelationshipJson {\n ownerPart: string\n id: string\n type: string\n rawTarget: string\n targetMode: string\n order: number\n}\n\n/** Structural view of core's canonical node; only the fields the mirror carries. */\ninterface CanonicalElement {\n readonly kind: string\n readonly namespaceUri: string\n readonly localName: string\n readonly prefix?: string\n readonly namespaceBindings: readonly { prefix: string; namespaceUri: string }[]\n readonly attributes: readonly {\n namespaceUri: string\n localName: string\n prefix?: string\n value: string\n }[]\n readonly children: readonly (CanonicalElement | CanonicalText)[]\n}\n\ninterface CanonicalText {\n readonly kind: 'textValue'\n readonly value: string\n}\n\nfunction isText(node: CanonicalElement | CanonicalText): node is CanonicalText {\n return node.kind === 'textValue'\n}\n\nfunction canonicalToXml(node: CanonicalElement | CanonicalText): XmlEl | string {\n if (isText(node)) return node.value\n const xml: XmlEl = {\n ns: node.namespaceUri,\n local: node.localName,\n attrs: node.attributes.map((a) => {\n const json: AttrJson = { ns: a.namespaceUri, local: a.localName, value: a.value }\n if (a.prefix !== undefined) json.prefix = a.prefix\n return json\n }),\n bindings: node.namespaceBindings.map((b) => ({ prefix: b.prefix, ns: b.namespaceUri })),\n children: node.children.map(canonicalToXml),\n }\n if (node.prefix !== undefined) xml.prefix = node.prefix\n return xml\n}\n\n/** The Yjs form of a part's root element. */\nexport function encodeElement(el: CanonicalElement): Y.Map<unknown> {\n return xmlToLive(canonicalToXml(el) as XmlEl, new Map(), true)\n}\n\nexport function encodeText(value: string): Y.Text {\n return newText(value)\n}\n\n/** Seed an empty Yjs document from a loaded package. Call once, inside a transaction. */\nexport function bootstrap(doc: Y.Doc, pkg: OoxmlPackage): void {\n doc.transact(() => {\n const meta = doc.getMap('meta')\n meta.set('format', COLLAB_FORMAT)\n meta.set('mainDocumentPart', pkg.mainDocumentPart)\n\n const parts = doc.getMap<Y.Map<unknown>>('parts')\n for (const [name, part] of pkg.parts) {\n if (isRelsPart(name)) continue\n parts.set(name, encodeElement(part.root as unknown as CanonicalElement))\n }\n\n const binaries = doc.getMap<Uint8Array>('binaries')\n for (const [name, bytes] of pkg.partBytes) {\n if (!pkg.parts.has(name)) binaries.set(name, bytes)\n }\n\n const rels = doc.getMap<Y.Map<RelationshipJson>>('rels')\n for (const [owner, records] of pkg.relationships) {\n const byId = new Y.Map<RelationshipJson>()\n for (const r of records) {\n byId.set(r.id, {\n ownerPart: r.ownerPart,\n id: r.id,\n type: r.type,\n rawTarget: r.rawTarget,\n targetMode: r.targetMode as string,\n order: r.order,\n })\n }\n rels.set(owner, byId)\n }\n\n for (const e of pkg.externalTargets) {\n let byId = rels.get(e.ownerPart)\n if (!byId) {\n byId = new Y.Map<RelationshipJson>()\n rels.set(e.ownerPart, byId)\n }\n byId.set(e.id, {\n ownerPart: e.ownerPart,\n id: e.id,\n type: e.type,\n rawTarget: e.rawTarget,\n targetMode: 'External',\n order: byId.size,\n })\n }\n\n const ctDefaults = doc.getMap<string>('ctDefaults')\n for (const [ext, mime] of pkg.contentTypes.defaults) ctDefaults.set(ext, mime)\n const ctOverrides = doc.getMap<string>('ctOverrides')\n for (const [name, mime] of pkg.contentTypes.overrides) ctOverrides.set(name, mime)\n })\n}\n\nexport function isBootstrapped(doc: Y.Doc): boolean {\n return doc.getMap('meta').get('format') !== undefined\n}\n\nexport function readFormat(doc: Y.Doc): string | undefined {\n const format = doc.getMap('meta').get('format')\n return typeof format === 'string' ? format : undefined\n}\n\n// ── XML serialisation of the mirror ────────────────────────────────────────\n\nexport function serializePart(doc: Y.Doc, partName: string): string {\n const root = doc.getMap<Y.Map<unknown>>('parts').get(partName)\n if (!root) throw new Error(`collab: part ${partName} is not in the room`)\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n${serializeLive(root, new Map())}`\n}\n\n/** Override first, then the extension default, as the package's content type index resolves it. */\nexport function contentTypeOf(doc: Y.Doc, partName: string): string | undefined {\n const override = doc.getMap<string>('ctOverrides').get(partName.toLowerCase())\n if (override !== undefined) return override\n const dot = partName.lastIndexOf('.')\n if (dot < 0) return undefined\n return doc.getMap<string>('ctDefaults').get(partName.slice(dot + 1).toLowerCase())\n}\n\n/**\n * Register mirrored nodes under their positional ids. Run after bootstrap and after a remote apply.\n * Pass `only` to refresh just the parts that changed.\n */\nexport function registerMirror(\n doc: Y.Doc,\n registry: NodeRegistry,\n only?: ReadonlySet<string>\n): void {\n const parts = doc.getMap<Y.Map<unknown>>('parts')\n if (!only) {\n registry.clear()\n for (const [name, root] of parts) registry.registerTree(name, root)\n return\n }\n for (const name of only) {\n registry.dropPart(name)\n const root = parts.get(name)\n if (root) registry.registerTree(name, root)\n }\n}\n\n/**\n * Remembers each part's last materialised tree and which parts changed since, so a remote edit\n * re-reads only the part it touched. Unchanged parts keep the identical frozen object, which also\n * lets the local store reuse everything it already derived from them.\n */\nexport class MaterializeCache {\n readonly parts = new Map<\n string,\n OoxmlPackage['parts'] extends ReadonlyMap<string, infer P> ? P : never\n >()\n private dirty = new Set<string>()\n private everything = true\n private readonly stop: (() => void)[] = []\n\n constructor(doc: Y.Doc) {\n const parts = doc.getMap<Y.Map<unknown>>('parts')\n const onParts = (events: Y.YEvent<Y.AbstractType<unknown>>[]): void => {\n for (const event of events) {\n if (event.target === parts) {\n for (const key of (event as Y.YMapEvent<unknown>).keysChanged) this.dirty.add(key)\n } else if (typeof event.path[0] === 'string') this.dirty.add(event.path[0])\n }\n }\n parts.observeDeep(onParts)\n this.stop.push(() => parts.unobserveDeep(onParts))\n // A content type change can change how every part reads.\n for (const name of ['ctOverrides', 'ctDefaults']) {\n const map = doc.getMap(name)\n const onTypes = (): void => {\n this.everything = true\n }\n map.observe(onTypes)\n this.stop.push(() => map.unobserve(onTypes))\n }\n }\n\n /** Names to re-read, or null when everything must be. Clears the pending set. */\n take(): ReadonlySet<string> | null {\n const names = this.everything ? null : this.dirty\n this.dirty = new Set()\n this.everything = false\n return names\n }\n\n /** Mark parts changed again, for a materialisation that did not complete. */\n restore(names: ReadonlySet<string> | null): void {\n if (names === null) this.everything = true\n else for (const name of names) this.dirty.add(name)\n }\n\n destroy(): void {\n for (const stop of this.stop.splice(0)) stop()\n }\n}\n\nconst RELS_CONTENT_TYPE = 'application/vnd.openxmlformats-package.relationships+xml'\nconst RELS_NAMESPACE = 'http://schemas.openxmlformats.org/package/2006/relationships'\n\ninterface ExternalTargetRecord {\n ownerPart: string\n id: string\n type: string\n rawTarget: string\n sinkSafe: boolean\n}\n\nfunction isRelsPart(partName: string): boolean {\n return partName.endsWith('.rels')\n}\n\nfunction relationshipsXml(records: readonly RelationshipJson[]): string {\n const rows = records\n .map(\n (r) =>\n `<Relationship Id=\"${escapeAttr(r.id)}\" Type=\"${escapeAttr(r.type)}\" Target=\"${escapeAttr(r.rawTarget)}\"` +\n `${r.targetMode === 'External' ? ' TargetMode=\"External\"' : ''}/>`\n )\n .join('')\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<Relationships xmlns=\"${RELS_NAMESPACE}\">${rows}</Relationships>`\n}\n\n// ── Materialisation ────────────────────────────────────────────────────────\n\nexport class MaterializeError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'MaterializeError'\n }\n}\n\n/** Build a frozen canonical package from the mirror. Throws MaterializeError on a corrupt room. */\nexport function materialize(\n doc: Y.Doc,\n cache?: MaterializeCache,\n changed: ReadonlySet<string> | null = null\n): OoxmlPackage {\n const meta = doc.getMap('meta')\n const main = meta.get('mainDocumentPart')\n if (typeof main !== 'string') throw new MaterializeError('room has no main document part')\n\n const parts = new Map<\n string,\n OoxmlPackage['parts'] extends ReadonlyMap<string, infer P> ? P : never\n >()\n for (const name of doc.getMap('parts').keys()) {\n if (isRelsPart(name)) continue\n const reusable = cache && changed && !changed.has(name) ? cache.parts.get(name) : undefined\n if (reusable) {\n parts.set(name, reusable)\n continue\n }\n const contentType = contentTypeOf(doc, name)\n if (contentType === undefined) throw new MaterializeError(`part ${name} has no content type`)\n const read = readOoxmlPart(serializePart(doc, name), { name, contentType })\n if (!read.ok) throw new MaterializeError(`part ${name} is not readable: ${read.reason}`)\n parts.set(name, read.part)\n }\n if (cache) {\n cache.parts.clear()\n for (const [name, part] of parts) if (!isRelsPart(name)) cache.parts.set(name, part)\n }\n\n const partBytes = new Map<string, Uint8Array>()\n for (const [name, bytes] of doc.getMap<Uint8Array>('binaries')) partBytes.set(name, bytes)\n\n // Relationship records are the authority; the `.rels` XML parts are rebuilt from them.\n const relationships = new Map<string, readonly RelationshipJson[]>()\n const externalTargets: ExternalTargetRecord[] = []\n for (const [owner, byId] of doc.getMap<Y.Map<RelationshipJson>>('rels')) {\n // Ties on `order` are broken by id so every peer writes the same bytes.\n const records = [...byId.values()].sort((a, b) => a.order - b.order || a.id.localeCompare(b.id))\n if (records.length === 0) continue\n const internal = records.filter((r) => r.targetMode !== 'External')\n if (internal.length > 0) relationships.set(owner, internal)\n for (const r of records) {\n if (r.targetMode !== 'External') continue\n externalTargets.push({\n ownerPart: r.ownerPart,\n id: r.id,\n type: r.type,\n rawTarget: r.rawTarget,\n sinkSafe: validateExternalTarget(r.rawTarget).ok,\n })\n }\n const relsName = relsPartNameFor(owner)\n const read = readOoxmlPart(relationshipsXml(records), {\n name: relsName,\n contentType: RELS_CONTENT_TYPE,\n })\n if (!read.ok)\n throw new MaterializeError(`relationships of ${owner} are not valid: ${read.reason}`)\n parts.set(relsName, read.part)\n }\n\n const contentTypes = {\n defaults: new Map(doc.getMap<string>('ctDefaults')),\n overrides: new Map(doc.getMap<string>('ctOverrides')),\n }\n\n return withMirroredOverrides({\n parts,\n partBytes,\n relationships,\n externalTargets,\n contentTypes,\n mainDocumentPart: main,\n } as unknown as OoxmlPackage)\n}\n\n/** Media a document embeds, by extension: what a picture part is when nothing declares it. */\nconst MEDIA_TYPES: Readonly<Record<string, string>> = {\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n bmp: 'image/bmp',\n tif: 'image/tiff',\n tiff: 'image/tiff',\n webp: 'image/webp',\n svg: 'image/svg+xml',\n emf: 'image/x-emf',\n wmf: 'image/x-wmf',\n}\n\n/**\n * Bring the `[Content_Types].xml` bytes in line with the mirrored overrides.\n *\n * The overrides are the authority, but the package also carries the content-types part itself as\n * bytes, which is what the writer emits. Core journals a new part's override (Insert footnote on a\n * document without notes creates `/word/footnotes.xml`) without re-journalling those bytes, so a\n * room would otherwise export the new part under the generic `application/xml` default — and Word\n * ignores a footnotes part it cannot recognise.\n *\n * An inserted picture is journalled as its bytes and relationship only: neither its override nor\n * the content-types bytes. A media part that nothing declares is given its type by extension, or\n * Word reports the whole file as unreadable.\n */\nfunction withMirroredOverrides(pkg: OoxmlPackage): OoxmlPackage {\n const bytes = contentTypesPartBytes(pkg)\n if (!bytes) return pkg\n const xml = new TextDecoder().decode(bytes.bytes)\n const declared = new Set(\n [...xml.matchAll(/PartName\\s*=\\s*[\"']([^\"']+)[\"']/gi)].map((m) => m[1].toLowerCase())\n )\n const defaults = new Set(\n [...xml.matchAll(/Extension\\s*=\\s*[\"']([^\"']+)[\"']/gi)].map((m) => m[1].toLowerCase())\n )\n let next = pkg\n for (const name of [...pkg.parts.keys(), ...pkg.partBytes.keys()]) {\n const key = name.toLowerCase()\n if (declared.has(key) || key === bytes.storageKey.toLowerCase()) continue\n const extension = key.slice(key.lastIndexOf('.') + 1)\n const type =\n pkg.contentTypes.overrides.get(key) ??\n (defaults.has(extension) ? undefined : MEDIA_TYPES[extension])\n if (type) {\n next = withContentTypeOverride(next, name, type, { forceOverride: true })\n declared.add(key)\n }\n }\n return next\n}\n\n/** Serialise the room as DOCX bytes. */\nexport function materializeBytes(doc: Y.Doc): Uint8Array {\n return writeOoxmlPackage(materialize(doc))\n}\n\n/** Load DOCX bytes and seed an empty room from them. */\nexport function bootstrapFromBytes(doc: Y.Doc, bytes: Uint8Array): OoxmlPackage {\n const result = readOoxmlPackage(bytes)\n if (!result.ok) throw new MaterializeError(`not a readable DOCX: ${result.reason}`)\n bootstrap(doc, result.package)\n return result.package\n}\n"]}
@@ -139,12 +139,12 @@ declare class NodeRegistry {
139
139
  }
140
140
 
141
141
  /**
142
- * The room format this build writes. `arbi-docx/2` holds elements without editable text packed (see
143
- * mirror.ts); it reads `arbi-docx/1` rooms, whose elements are all trees, unchanged. A build that
144
- * only knows `/1` cannot read a packed element, so the client handshake requires this exact format.
142
+ * The room format: the only one this build reads and writes. `arbi-docx/2` holds elements without
143
+ * editable text packed (see mirror.ts). A client and the collaboration server must run the same
144
+ * format: the handshake refuses any other, and the collaboration service re-encodes a stored room of
145
+ * an earlier format before serving it (`reencodeRoom`).
145
146
  */
146
147
  declare const COLLAB_FORMAT = "arbi-docx/2";
147
- declare function isReadableFormat(format: string | undefined): boolean;
148
148
  interface AttrJson {
149
149
  ns: string;
150
150
  local: string;
@@ -227,4 +227,4 @@ declare function materializeBytes(doc: Y.Doc): Uint8Array;
227
227
  /** Load DOCX bytes and seed an empty room from them. */
228
228
  declare function bootstrapFromBytes(doc: Y.Doc, bytes: Uint8Array): OoxmlPackage;
229
229
 
230
- export { type AttrJson, type BindingJson, COLLAB_FORMAT, MaterializeCache, MaterializeError, type RelationshipJson, bootstrap, bootstrapFromBytes, contentTypeOf, encodeElement, encodeText, isBootstrapped, isReadableFormat, materialize, materializeBytes, readFormat, registerMirror, serializePart };
230
+ export { type AttrJson, type BindingJson, COLLAB_FORMAT, MaterializeCache, MaterializeError, type RelationshipJson, bootstrap, bootstrapFromBytes, contentTypeOf, encodeElement, encodeText, isBootstrapped, materialize, materializeBytes, readFormat, registerMirror, serializePart };
@@ -139,12 +139,12 @@ declare class NodeRegistry {
139
139
  }
140
140
 
141
141
  /**
142
- * The room format this build writes. `arbi-docx/2` holds elements without editable text packed (see
143
- * mirror.ts); it reads `arbi-docx/1` rooms, whose elements are all trees, unchanged. A build that
144
- * only knows `/1` cannot read a packed element, so the client handshake requires this exact format.
142
+ * The room format: the only one this build reads and writes. `arbi-docx/2` holds elements without
143
+ * editable text packed (see mirror.ts). A client and the collaboration server must run the same
144
+ * format: the handshake refuses any other, and the collaboration service re-encodes a stored room of
145
+ * an earlier format before serving it (`reencodeRoom`).
145
146
  */
146
147
  declare const COLLAB_FORMAT = "arbi-docx/2";
147
- declare function isReadableFormat(format: string | undefined): boolean;
148
148
  interface AttrJson {
149
149
  ns: string;
150
150
  local: string;
@@ -227,4 +227,4 @@ declare function materializeBytes(doc: Y.Doc): Uint8Array;
227
227
  /** Load DOCX bytes and seed an empty room from them. */
228
228
  declare function bootstrapFromBytes(doc: Y.Doc, bytes: Uint8Array): OoxmlPackage;
229
229
 
230
- export { type AttrJson, type BindingJson, COLLAB_FORMAT, MaterializeCache, MaterializeError, type RelationshipJson, bootstrap, bootstrapFromBytes, contentTypeOf, encodeElement, encodeText, isBootstrapped, isReadableFormat, materialize, materializeBytes, readFormat, registerMirror, serializePart };
230
+ export { type AttrJson, type BindingJson, COLLAB_FORMAT, MaterializeCache, MaterializeError, type RelationshipJson, bootstrap, bootstrapFromBytes, contentTypeOf, encodeElement, encodeText, isBootstrapped, materialize, materializeBytes, readFormat, registerMirror, serializePart };
package/dist/encoding.js CHANGED
@@ -428,10 +428,6 @@ function serializeLive(el, scope) {
428
428
 
429
429
  // src/encoding.ts
430
430
  var COLLAB_FORMAT = "arbi-docx/2";
431
- var READABLE_FORMATS = /* @__PURE__ */ new Set(["arbi-docx/1", COLLAB_FORMAT]);
432
- function isReadableFormat(format) {
433
- return format !== void 0 && READABLE_FORMATS.has(format);
434
- }
435
431
  function isText(node) {
436
432
  return node.kind === "textValue";
437
433
  }
@@ -708,6 +704,6 @@ function bootstrapFromBytes(doc, bytes) {
708
704
  return result.package;
709
705
  }
710
706
 
711
- export { COLLAB_FORMAT, MaterializeCache, MaterializeError, bootstrap, bootstrapFromBytes, contentTypeOf, encodeElement, encodeText, isBootstrapped, isReadableFormat, materialize, materializeBytes, readFormat, registerMirror, serializePart };
707
+ export { COLLAB_FORMAT, MaterializeCache, MaterializeError, bootstrap, bootstrapFromBytes, contentTypeOf, encodeElement, encodeText, isBootstrapped, materialize, materializeBytes, readFormat, registerMirror, serializePart };
712
708
  //# sourceMappingURL=encoding.js.map
713
709
  //# sourceMappingURL=encoding.js.map