@arbidocs/coedit 0.0.0-stage → 0.4.33
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/LICENSE +21 -0
- package/dist/encoding.cjs +715 -0
- package/dist/encoding.cjs.map +1 -0
- package/dist/encoding.d.cts +192 -0
- package/dist/encoding.d.ts +192 -0
- package/dist/encoding.js +680 -0
- package/dist/encoding.js.map +1 -0
- package/dist/hocuspocus.cjs +1723 -0
- package/dist/hocuspocus.cjs.map +1 -0
- package/dist/hocuspocus.d.cts +39 -0
- package/dist/hocuspocus.d.ts +39 -0
- package/dist/hocuspocus.js +1700 -0
- package/dist/hocuspocus.js.map +1 -0
- package/dist/index.cjs +1656 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +16 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +1628 -0
- package/dist/index.js.map +1 -0
- package/dist/server.cjs +1816 -0
- package/dist/server.cjs.map +1 -0
- package/dist/server.d.cts +43 -0
- package/dist/server.d.ts +43 -0
- package/dist/server.js +1786 -0
- package/dist/server.js.map +1 -0
- package/dist/session-Cf9iu1Vt.d.cts +82 -0
- package/dist/session-Cf9iu1Vt.d.ts +82 -0
- package/dist/versions-DXiFQMA6.d.cts +8 -0
- package/dist/versions-DXiFQMA6.d.ts +8 -0
- package/package.json +60 -4
- package/README.md +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/rich.ts","../src/mirror.ts","../src/encoding.ts"],"names":["Y2"],"mappings":"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","file":"encoding.js","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. */\nexport interface ElDesc {\n ns: string\n local: string\n prefix?: string\n attrs: XmlAttr[]\n bindings: XmlBinding[]\n}\n\nexport interface 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\nexport type UnitKind = 'text' | 'atom' | 'empty-run' | 'run-child'\n\nexport interface 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\nexport function 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 * A paragraph is held as a rich paragraph (see rich.ts) whenever it can be represented exactly: its\n * properties stay in `children`, and its inline content is the single Y.Text `inline`. Every other\n * element is a generic map with a `children` array, as before.\n */\nimport * as Y from 'yjs'\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>\nexport type LiveChild = LiveElement | Y.Text\n\nexport function isRichParagraph(map: Y.Map<unknown>): boolean {\n return map.has('inline')\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(xml: XmlEl, encoded: EncodedParagraph): LiveElement {\n const map = new Y.Map<unknown>()\n fieldsOf(map, xml)\n const children = new Y.Array<LiveChild>()\n children.push(encoded.head.map((el) => xmlToLive(el)))\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\n/** Build the Yjs form of an element. A paragraph that cannot be held as rich text is stored plainly. */\nexport function xmlToLive(xml: XmlEl): LiveElement {\n if (isParagraphEl(xml)) {\n const encoded = encodeParagraph(xml.children)\n if (encoded) return createRichParagraph(xml, encoded)\n }\n return xmlToGenericLive(xml)\n}\n\nexport function xmlToGenericLive(xml: XmlEl): LiveElement {\n const map = new Y.Map<unknown>()\n fieldsOf(map, xml)\n const children = new Y.Array<LiveChild>()\n children.push(xml.children.map((c) => (typeof c === 'string' ? newText(c) : xmlToLive(c))))\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 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, '&').replace(/</g, '<').replace(/>/g, '>')\n\nexport const escapeAttr = (value: string): string =>\n value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/\\t/g, '	')\n .replace(/\\n/g, ' ')\n .replace(/\\r/g, ' ')\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\nexport function serializeXml(el: XmlEl, scope: Scope): string {\n const inScope = new Map(scope)\n for (const b of el.bindings) inScope.set(b.prefix, b.ns)\n\n let out = `<${qualified(el.prefix, el.local)}`\n for (const b of el.bindings) {\n out +=\n b.prefix === '' ? ` xmlns=\"${escapeAttr(b.ns)}\"` : ` xmlns:${b.prefix}=\"${escapeAttr(b.ns)}\"`\n }\n for (const a of el.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 if (el.children.length === 0) return `${out}/>`\n out += '>'\n for (const child of el.children) {\n out += typeof child === 'string' ? escapeText(child) : serializeXml(child, inScope)\n }\n return `${out}</${qualified(el.prefix, el.local)}>`\n}\n\n/** Serialise an element of the mirror. */\nexport function serializeLive(el: LiveElement, scope: Scope): string {\n if (isRichParagraph(el)) return serializeXml(liveToXml(el), scope)\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\n const inScope = new Map(scope)\n for (const b of bindings) inScope.set(b.prefix, b.ns)\n\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 if (children.length === 0) return `${out}/>`\n out += '>'\n for (const child of children) {\n out += child instanceof Y.Text ? escapeText(child.toString()) : serializeLive(child, inScope)\n }\n return `${out}</${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 * 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 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\nexport const COLLAB_FORMAT = 'arbi-docx/1'\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\nexport function encodeElement(el: CanonicalElement): Y.Map<unknown> {\n return xmlToLive(canonicalToXml(el) as XmlEl)\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 {\n parts,\n partBytes,\n relationships,\n externalTargets,\n contentTypes,\n mainDocumentPart: main,\n } as unknown as OoxmlPackage\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"]}
|