@particle-academy/last-word 0.1.0
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/README.md +92 -0
- package/dist/index.cjs +2441 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +326 -0
- package/dist/index.d.ts +326 -0
- package/dist/index.js +2419 -0
- package/dist/index.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/exceptions.ts","../src/helpers/image-size.ts","../src/zip/crc32.ts","../src/zip/zip-writer.ts","../src/zip/inflate.ts","../src/zip/zip-reader.ts","../src/reader/xml.ts","../src/helpers/xml.ts","../src/writer/docx-writer.ts","../src/reader/docx-reader.ts","../src/markdown/from-markdown.ts","../src/markdown/to-markdown.ts","../src/util.ts","../src/schema/schema.ts","../src/schema/repairer.ts","../src/schema/validator.ts","../src/agent.ts"],"names":["end","encoder","buildTree"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ValidationError } from \"./schema/types\";\n\n/** Thrown by Agent.write/toBytes when the schema is invalid. Mirrors PHP `SchemaException`. */\nexport class SchemaException extends Error {\n readonly errors: ValidationError[];\n\n constructor(message: string, errors: ValidationError[]) {\n super(message);\n this.name = \"SchemaException\";\n this.errors = errors;\n Object.setPrototypeOf(this, SchemaException.prototype);\n }\n}\n","/**\n * Intrinsic image dimension sniffing (PNG IHDR / JPEG SOF) + data-URL decode.\n * Zero-dependency, isomorphic — used by the writer to size `wp:extent` when\n * `widthPx` / `heightPx` are omitted.\n */\n\nexport interface ImageSize {\n width: number;\n height: number;\n}\n\nexport interface DecodedDataUrl {\n mime: string;\n bytes: Uint8Array;\n}\n\nfunction base64Decode(b64: string): Uint8Array {\n if (typeof Buffer !== \"undefined\") {\n const buf = Buffer.from(b64, \"base64\");\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n // eslint-disable-next-line no-undef\n const bin = atob(b64);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n return out;\n}\n\nexport function base64Encode(bytes: Uint8Array): string {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString(\"base64\");\n }\n let bin = \"\";\n for (let i = 0; i < bytes.length; i++) bin += String.fromCharCode(bytes[i]!);\n // eslint-disable-next-line no-undef\n return btoa(bin);\n}\n\n/** Decode a `data:image/…;base64,…` URL. Returns null for anything else. */\nexport function parseDataUrl(src: string): DecodedDataUrl | null {\n const m = /^data:([^;,]+);base64,([\\s\\S]*)$/.exec(src);\n if (!m) return null;\n try {\n return { mime: m[1]!.toLowerCase(), bytes: base64Decode(m[2]!.replace(/\\s+/g, \"\")) };\n } catch {\n return null;\n }\n}\n\n/** PNG IHDR width/height, or null when the bytes are not a PNG. */\nexport function pngSize(bytes: Uint8Array): ImageSize | null {\n if (bytes.length < 24) return null;\n const sig = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];\n for (let i = 0; i < 8; i++) {\n if (bytes[i] !== sig[i]) return null;\n }\n // Bytes 12-15 must be \"IHDR\"; width/height are big-endian at 16/20.\n if (bytes[12] !== 0x49 || bytes[13] !== 0x48 || bytes[14] !== 0x44 || bytes[15] !== 0x52) return null;\n const width = (bytes[16]! << 24) | (bytes[17]! << 16) | (bytes[18]! << 8) | bytes[19]!;\n const height = (bytes[20]! << 24) | (bytes[21]! << 16) | (bytes[22]! << 8) | bytes[23]!;\n if (width <= 0 || height <= 0) return null;\n return { width, height };\n}\n\n/**\n * JPEG width/height from the first SOF frame header (SOF0-SOF3, SOF5-SOF7,\n * SOF9-SOF11, SOF13-SOF15), or null when the bytes are not a JPEG.\n */\nexport function jpegSize(bytes: Uint8Array): ImageSize | null {\n if (bytes.length < 4 || bytes[0] !== 0xff || bytes[1] !== 0xd8) return null;\n let i = 2;\n while (i + 9 < bytes.length) {\n if (bytes[i] !== 0xff) {\n i++;\n continue;\n }\n const marker = bytes[i + 1]!;\n // Standalone markers without a length segment.\n if (marker === 0xd8 || (marker >= 0xd0 && marker <= 0xd7) || marker === 0x01 || marker === 0xff) {\n i += 2;\n continue;\n }\n const length = (bytes[i + 2]! << 8) | bytes[i + 3]!;\n const isSof =\n marker >= 0xc0 && marker <= 0xcf && marker !== 0xc4 && marker !== 0xc8 && marker !== 0xcc;\n if (isSof) {\n const height = (bytes[i + 5]! << 8) | bytes[i + 6]!;\n const width = (bytes[i + 7]! << 8) | bytes[i + 8]!;\n if (width <= 0 || height <= 0) return null;\n return { width, height };\n }\n if (marker === 0xd9 || marker === 0xda) break; // EOI / start of scan\n i += 2 + length;\n }\n return null;\n}\n\n/** Sniff intrinsic pixel dimensions from PNG or JPEG bytes. */\nexport function sniffImageSize(bytes: Uint8Array): ImageSize | null {\n return pngSize(bytes) ?? jpegSize(bytes);\n}\n","/**\n * CRC-32 (IEEE 802.3) over a byte array — used for ZIP local/central headers.\n * Table-based, zero-dependency.\n */\n\nconst TABLE = /* @__PURE__ */ (() => {\n const t = new Uint32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) {\n c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n }\n t[n] = c >>> 0;\n }\n return t;\n})();\n\nexport function crc32(bytes: Uint8Array): number {\n let crc = 0xffffffff;\n for (let i = 0; i < bytes.length; i++) {\n crc = TABLE[(crc ^ bytes[i]!) & 0xff]! ^ (crc >>> 8);\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n","/**\n * Minimal ZIP writer using the STORE method (no compression). Valid OOXML\n * containers don't require compression, so this stays tiny, deterministic, and\n * isomorphic. Filenames are UTF-8 (general-purpose bit 11 set).\n */\nimport { crc32 } from \"./crc32\";\n\nexport interface ZipFile {\n name: string;\n data: Uint8Array;\n}\n\nconst encoder = new TextEncoder();\n\n// Fixed DOS timestamp (1980-01-01 00:00:00) for deterministic, reproducible output.\nconst DOS_TIME = 0;\nconst DOS_DATE = 0x0021;\n\nexport function zipSync(files: ZipFile[]): Uint8Array {\n const localParts: Uint8Array[] = [];\n const centralParts: Uint8Array[] = [];\n let offset = 0;\n\n for (const f of files) {\n const nameBytes = encoder.encode(f.name);\n const crc = crc32(f.data);\n const size = f.data.length;\n\n const lh = new Uint8Array(30 + nameBytes.length);\n const ldv = new DataView(lh.buffer);\n ldv.setUint32(0, 0x04034b50, true);\n ldv.setUint16(4, 20, true); // version needed to extract\n ldv.setUint16(6, 0x0800, true); // flags: UTF-8 filename\n ldv.setUint16(8, 0, true); // method: STORE\n ldv.setUint16(10, DOS_TIME, true);\n ldv.setUint16(12, DOS_DATE, true);\n ldv.setUint32(14, crc, true);\n ldv.setUint32(18, size, true); // compressed size\n ldv.setUint32(22, size, true); // uncompressed size\n ldv.setUint16(26, nameBytes.length, true);\n ldv.setUint16(28, 0, true); // extra length\n lh.set(nameBytes, 30);\n localParts.push(lh, f.data);\n\n const cd = new Uint8Array(46 + nameBytes.length);\n const cdv = new DataView(cd.buffer);\n cdv.setUint32(0, 0x02014b50, true);\n cdv.setUint16(4, 20, true); // version made by\n cdv.setUint16(6, 20, true); // version needed\n cdv.setUint16(8, 0x0800, true);\n cdv.setUint16(10, 0, true); // method\n cdv.setUint16(12, DOS_TIME, true);\n cdv.setUint16(14, DOS_DATE, true);\n cdv.setUint32(16, crc, true);\n cdv.setUint32(20, size, true);\n cdv.setUint32(24, size, true);\n cdv.setUint16(28, nameBytes.length, true);\n cdv.setUint16(30, 0, true); // extra length\n cdv.setUint16(32, 0, true); // comment length\n cdv.setUint16(34, 0, true); // disk number start\n cdv.setUint16(36, 0, true); // internal attrs\n cdv.setUint32(38, 0, true); // external attrs\n cdv.setUint32(42, offset, true); // local header offset\n cd.set(nameBytes, 46);\n centralParts.push(cd);\n\n offset += lh.length + f.data.length;\n }\n\n const localSize = offset;\n const centralSize = centralParts.reduce((s, c) => s + c.length, 0);\n\n const eocd = new Uint8Array(22);\n const edv = new DataView(eocd.buffer);\n edv.setUint32(0, 0x06054b50, true);\n edv.setUint16(4, 0, true); // this disk\n edv.setUint16(6, 0, true); // disk with central dir\n edv.setUint16(8, files.length, true);\n edv.setUint16(10, files.length, true);\n edv.setUint32(12, centralSize, true);\n edv.setUint32(16, localSize, true); // central dir offset\n edv.setUint16(20, 0, true); // comment length\n\n const out = new Uint8Array(localSize + centralSize + 22);\n let p = 0;\n for (const part of localParts) {\n out.set(part, p);\n p += part.length;\n }\n for (const part of centralParts) {\n out.set(part, p);\n p += part.length;\n }\n out.set(eocd, p);\n return out;\n}\n","/**\n * Raw DEFLATE (RFC 1951) decompression — `inflateRaw`.\n *\n * Office documents (.xlsx/.pptx) authored by Excel/PowerPoint store their parts\n * with DEFLATE compression, so the reader must inflate them. Our own writer uses\n * the STORE method (no compression), so this is only exercised when reading\n * externally-authored files. Decompress-only, zero-dependency, isomorphic.\n *\n * Algorithm adapted from the public-domain \"tinf\" inflate (Jørgen Ibsen).\n */\n\nclass Tree {\n // number of codes with a given bit length\n readonly table = new Uint16Array(16);\n // symbols sorted by code\n readonly trans = new Uint16Array(288);\n}\n\nconst LENGTH_BITS = new Uint8Array([\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5,\n 5, 5, 0,\n]);\nconst LENGTH_BASE = new Uint16Array([\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67,\n 83, 99, 115, 131, 163, 195, 227, 258,\n]);\nconst DIST_BITS = new Uint8Array([\n 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11,\n 11, 12, 12, 13, 13,\n]);\nconst DIST_BASE = new Uint16Array([\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769,\n 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577,\n]);\n// order in which code-length-code lengths are stored\nconst CLC_INDEX = new Uint8Array([\n 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15,\n]);\n\nfunction buildFixedTrees(lt: Tree, dt: Tree): void {\n let i: number;\n for (i = 0; i < 7; i++) lt.table[i] = 0;\n lt.table[7] = 24;\n lt.table[8] = 152;\n lt.table[9] = 112;\n for (i = 0; i < 24; i++) lt.trans[i] = 256 + i;\n for (i = 0; i < 144; i++) lt.trans[24 + i] = i;\n for (i = 0; i < 8; i++) lt.trans[24 + 144 + i] = 280 + i;\n for (i = 0; i < 112; i++) lt.trans[24 + 144 + 8 + i] = 144 + i;\n for (i = 0; i < 5; i++) dt.table[i] = 0;\n dt.table[5] = 32;\n for (i = 0; i < 32; i++) dt.trans[i] = i;\n}\n\nconst OFFS = new Uint16Array(16);\n\nfunction buildTree(t: Tree, lengths: Uint8Array, off: number, num: number): void {\n let i: number;\n let sum = 0;\n for (i = 0; i < 16; i++) t.table[i] = 0;\n for (i = 0; i < num; i++) t.table[lengths[off + i]!]!++;\n t.table[0] = 0;\n for (i = 0; i < 16; i++) {\n OFFS[i] = sum;\n sum += t.table[i]!;\n }\n for (i = 0; i < num; i++) {\n const len = lengths[off + i]!;\n if (len) t.trans[OFFS[len]!++] = i;\n }\n}\n\nclass Reader {\n source: Uint8Array;\n index = 0;\n tag = 0;\n bitcount = 0;\n constructor(source: Uint8Array) {\n this.source = source;\n }\n}\n\nfunction getBit(d: Reader): number {\n if (d.bitcount-- === 0) {\n d.tag = d.source[d.index++]!;\n d.bitcount = 7;\n }\n const bit = d.tag & 1;\n d.tag >>>= 1;\n return bit;\n}\n\nfunction readBits(d: Reader, num: number, base: number): number {\n if (!num) return base;\n let val = 0;\n for (let i = 0; i < num; i++) val |= getBit(d) << i;\n return val + base;\n}\n\nfunction decodeSymbol(d: Reader, t: Tree): number {\n let sum = 0;\n let cur = 0;\n let len = 0;\n do {\n cur = 2 * cur + getBit(d);\n len++;\n sum += t.table[len]!;\n cur -= t.table[len]!;\n } while (cur >= 0);\n return t.trans[sum + cur]!;\n}\n\nfunction decodeTrees(d: Reader, lt: Tree, dt: Tree): void {\n const lengths = new Uint8Array(288 + 32);\n const hlit = readBits(d, 5, 257);\n const hdist = readBits(d, 5, 1);\n const hclen = readBits(d, 4, 4);\n let i: number;\n for (i = 0; i < 19; i++) lengths[i] = 0;\n for (i = 0; i < hclen; i++) {\n const clen = readBits(d, 3, 0);\n lengths[CLC_INDEX[i]!] = clen;\n }\n const codeTree = new Tree();\n buildTree(codeTree, lengths, 0, 19);\n for (let num = 0; num < hlit + hdist; ) {\n const sym = decodeSymbol(d, codeTree);\n switch (sym) {\n case 16: {\n const prev = lengths[num - 1]!;\n for (let length = readBits(d, 2, 3); length; length--) lengths[num++] = prev;\n break;\n }\n case 17:\n for (let length = readBits(d, 3, 3); length; length--) lengths[num++] = 0;\n break;\n case 18:\n for (let length = readBits(d, 7, 11); length; length--) lengths[num++] = 0;\n break;\n default:\n lengths[num++] = sym;\n break;\n }\n }\n buildTree(lt, lengths, 0, hlit);\n buildTree(dt, lengths, hlit, hdist);\n}\n\nclass Out {\n buf = new Uint8Array(1024);\n len = 0;\n push(b: number): void {\n if (this.len >= this.buf.length) {\n const next = new Uint8Array(this.buf.length * 2);\n next.set(this.buf);\n this.buf = next;\n }\n this.buf[this.len++] = b;\n }\n}\n\nfunction inflateBlockData(d: Reader, out: Out, lt: Tree, dt: Tree): void {\n for (;;) {\n const sym = decodeSymbol(d, lt);\n if (sym === 256) return;\n if (sym < 256) {\n out.push(sym);\n } else {\n const lengthSym = sym - 257;\n const length = readBits(d, LENGTH_BITS[lengthSym]!, LENGTH_BASE[lengthSym]!);\n const distSym = decodeSymbol(d, dt);\n const dist = readBits(d, DIST_BITS[distSym]!, DIST_BASE[distSym]!);\n const offs = out.len - dist;\n for (let i = 0; i < length; i++) out.push(out.buf[offs + i]!);\n }\n }\n}\n\nfunction inflateUncompressedBlock(d: Reader, out: Out): void {\n // discard remaining bits in the current (partial) byte\n d.bitcount = 0;\n let length = d.source[d.index + 1]! * 256 + d.source[d.index]!;\n d.index += 4; // skip LEN + NLEN\n for (; length; length--) out.push(d.source[d.index++]!);\n}\n\nexport function inflateRaw(source: Uint8Array): Uint8Array {\n const d = new Reader(source);\n const out = new Out();\n const lt = new Tree();\n const dt = new Tree();\n let bfinal: number;\n do {\n bfinal = getBit(d);\n const btype = readBits(d, 2, 0);\n if (btype === 0) {\n inflateUncompressedBlock(d, out);\n } else if (btype === 1) {\n buildFixedTrees(lt, dt);\n inflateBlockData(d, out, lt, dt);\n } else if (btype === 2) {\n decodeTrees(d, lt, dt);\n inflateBlockData(d, out, lt, dt);\n } else {\n throw new Error(\"dark-slide: invalid DEFLATE block type\");\n }\n } while (!bfinal);\n return out.buf.subarray(0, out.len);\n}\n","/**\n * Minimal ZIP reader. Parses the central directory and returns a name → bytes\n * map. Supports STORE (method 0) and DEFLATE (method 8, via `inflateRaw`) so it\n * reads both our own output and Excel/PowerPoint-authored files. Zip64 is not\n * handled (OOXML parts are well under 4 GB).\n */\nimport { inflateRaw } from \"./inflate\";\n\nconst decoder = new TextDecoder();\n\nexport function unzipSync(data: Uint8Array): Record<string, Uint8Array> {\n const dv = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n // Locate the End Of Central Directory record (scan backward; it may carry a comment).\n let eocd = -1;\n for (let i = data.length - 22; i >= 0; i--) {\n if (dv.getUint32(i, true) === 0x06054b50) {\n eocd = i;\n break;\n }\n }\n if (eocd < 0) throw new Error(\"dark-slide: not a zip archive (no EOCD record)\");\n\n const count = dv.getUint16(eocd + 10, true);\n let cd = dv.getUint32(eocd + 16, true);\n const result: Record<string, Uint8Array> = {};\n\n for (let n = 0; n < count; n++) {\n if (dv.getUint32(cd, true) !== 0x02014b50) break;\n const method = dv.getUint16(cd + 10, true);\n const compSize = dv.getUint32(cd + 20, true);\n const nameLen = dv.getUint16(cd + 28, true);\n const extraLen = dv.getUint16(cd + 30, true);\n const commentLen = dv.getUint16(cd + 32, true);\n const localOffset = dv.getUint32(cd + 42, true);\n const name = decoder.decode(data.subarray(cd + 46, cd + 46 + nameLen));\n\n const lhNameLen = dv.getUint16(localOffset + 26, true);\n const lhExtraLen = dv.getUint16(localOffset + 28, true);\n const dataStart = localOffset + 30 + lhNameLen + lhExtraLen;\n const raw = data.subarray(dataStart, dataStart + compSize);\n\n let content: Uint8Array;\n if (method === 0) content = raw.slice();\n else if (method === 8) content = inflateRaw(raw);\n else throw new Error(`dark-slide: unsupported zip method ${method} for \"${name}\"`);\n\n result[name] = content;\n cd += 46 + nameLen + extraLen + commentLen;\n }\n\n return result;\n}\n","/**\n * Tiny isomorphic XML parser — enough to read OOXML parts (replacing PHP's\n * SimpleXML). Namespace prefixes are stripped so nodes/attributes are queried\n * by local name, matching how the PHP reader accesses SimpleXML.\n */\n\nexport interface XmlNode {\n name: string;\n attrs: Record<string, string>;\n children: XmlNode[];\n text: string;\n}\n\nfunction localName(name: string): string {\n const idx = name.indexOf(\":\");\n return idx >= 0 ? name.slice(idx + 1) : name;\n}\n\nfunction unescapeXml(s: string): string {\n if (s.indexOf(\"&\") < 0) return s;\n return s.replace(/&(#x?[0-9a-fA-F]+|\\w+);/g, (m, ent: string) => {\n switch (ent) {\n case \"amp\":\n return \"&\";\n case \"lt\":\n return \"<\";\n case \"gt\":\n return \">\";\n case \"quot\":\n return '\"';\n case \"apos\":\n return \"'\";\n default:\n if (ent[0] === \"#\") {\n const code = ent[1] === \"x\" || ent[1] === \"X\" ? parseInt(ent.slice(2), 16) : parseInt(ent.slice(1), 10);\n return Number.isFinite(code) ? String.fromCodePoint(code) : m;\n }\n return m;\n }\n });\n}\n\nfunction findTagEnd(src: string, from: number): number {\n let quote = \"\";\n for (let i = from; i < src.length; i++) {\n const ch = src[i]!;\n if (quote) {\n if (ch === quote) quote = \"\";\n } else if (ch === '\"' || ch === \"'\") {\n quote = ch;\n } else if (ch === \">\") {\n return i;\n }\n }\n return src.length;\n}\n\nconst ATTR_RE = /([^\\s=/]+)\\s*=\\s*(\"([^\"]*)\"|'([^']*)')/g;\n\nfunction parseTag(inner: string): { name: string; attrs: Record<string, string> } {\n const trimmed = inner.trim();\n let i = 0;\n while (i < trimmed.length && !/\\s/.test(trimmed[i]!)) i++;\n const name = trimmed.slice(0, i);\n const attrs: Record<string, string> = {};\n const rest = trimmed.slice(i);\n for (const m of rest.matchAll(ATTR_RE)) {\n const key = localName(m[1]!);\n const value = unescapeXml(m[3] ?? m[4] ?? \"\");\n attrs[key] = value;\n }\n return { name, attrs };\n}\n\nexport function parseXml(src: string): XmlNode | null {\n let i = 0;\n const n = src.length;\n const root: XmlNode = { name: \"#root\", attrs: {}, children: [], text: \"\" };\n const stack: XmlNode[] = [root];\n\n while (i < n) {\n if (src[i] === \"<\") {\n if (src.startsWith(\"<!--\", i)) {\n const end = src.indexOf(\"-->\", i);\n i = end < 0 ? n : end + 3;\n continue;\n }\n if (src.startsWith(\"<![CDATA[\", i)) {\n const end = src.indexOf(\"]]>\", i);\n stack[stack.length - 1]!.text += src.slice(i + 9, end < 0 ? n : end);\n i = end < 0 ? n : end + 3;\n continue;\n }\n if (src.startsWith(\"<?\", i)) {\n const end = src.indexOf(\"?>\", i);\n i = end < 0 ? n : end + 2;\n continue;\n }\n if (src.startsWith(\"<!\", i)) {\n const end = src.indexOf(\">\", i);\n i = end < 0 ? n : end + 1;\n continue;\n }\n if (src[i + 1] === \"/\") {\n const end = src.indexOf(\">\", i);\n if (stack.length > 1) stack.pop();\n i = end < 0 ? n : end + 1;\n continue;\n }\n const end = findTagEnd(src, i + 1);\n const tagContent = src.slice(i + 1, end);\n const selfClosing = tagContent.endsWith(\"/\");\n const { name, attrs } = parseTag(selfClosing ? tagContent.slice(0, -1) : tagContent);\n const node: XmlNode = { name: localName(name), attrs, children: [], text: \"\" };\n stack[stack.length - 1]!.children.push(node);\n if (!selfClosing) stack.push(node);\n i = end + 1;\n } else {\n const next = src.indexOf(\"<\", i);\n const stop = next < 0 ? n : next;\n stack[stack.length - 1]!.text += unescapeXml(src.slice(i, stop));\n i = stop;\n }\n }\n\n return root.children[0] ?? null;\n}\n\n/** First child element with the given local name. */\nexport function el(node: XmlNode | null | undefined, name: string): XmlNode | undefined {\n return node?.children.find((c) => c.name === name);\n}\n\n/** All child elements with the given local name. */\nexport function els(node: XmlNode | null | undefined, name: string): XmlNode[] {\n return node ? node.children.filter((c) => c.name === name) : [];\n}\n\n/** Attribute by local name, or undefined. */\nexport function at(node: XmlNode | null | undefined, name: string): string | undefined {\n return node?.attrs[name];\n}\n","/**\n * XML escaping for the PPTX writer. Mirrors PHP `Helpers\\Xml`:\n * - text(): ENT_XML1 | ENT_COMPAT — escapes & < > \" (NOT apostrophe)\n * - attr(): ENT_XML1 | ENT_QUOTES — escapes & < > \" '\n * - declaration(): trailing newline included (matches PHP byte output)\n */\nexport const Xml = {\n text(s: string): string {\n return s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\");\n },\n\n attr(s: string): string {\n return s\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n },\n\n declaration(standalone = true): string {\n const sa = standalone ? ' standalone=\"yes\"' : \"\";\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"${sa}?>\\n`;\n },\n};\n","/**\n * DocxWriter — Doc JSON model → .docx bytes (OOXML / WordprocessingML).\n * Deterministic: no timestamps, fixed zip entry order, rel ids assigned in\n * traversal order. Mirrors PHP `Writer\\DocxWriter`.\n */\n\nimport { Xml } from \"../helpers/xml\";\nimport { parseDataUrl, sniffImageSize } from \"../helpers/image-size\";\nimport type { Block, Doc, ListItem, Run } from \"../schema/types\";\nimport { zipSync, type ZipFile } from \"../zip\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\n/** EMUs per pixel at 96 dpi. */\nexport const EMU_PER_PX = 9525;\n/** Content width cap: 6.5in at 96 dpi. */\nexport const MAX_WIDTH_PX = 624;\n\nconst NS_W = \"http://schemas.openxmlformats.org/wordprocessingml/2006/main\";\nconst NS_R = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\";\nconst NS_WP = \"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\";\nconst NS_A = \"http://schemas.openxmlformats.org/drawingml/2006/main\";\nconst NS_PIC = \"http://schemas.openxmlformats.org/drawingml/2006/picture\";\nconst REL_STYLES = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\";\nconst REL_NUMBERING = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering\";\nconst REL_HYPERLINK = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\";\nconst REL_IMAGE = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\";\nconst REL_DOCUMENT = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\";\nconst REL_CORE = \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\";\n\nconst NUM_ID_BULLET = 1;\nconst NUM_ID_DECIMAL = 2;\nconst MAX_ILVL = 5;\n\n/** SDT tag prefixes used to round-trip block metadata that OOXML has no slot for. */\nexport const SDT_TAG_CODE = \"lastword:code\";\nexport const SDT_TAG_QUOTE = \"lastword:quote\";\n\ninterface MediaFile {\n name: string; // e.g. image1.png\n bytes: Uint8Array;\n ext: string;\n}\n\ninterface Rel {\n id: string;\n type: string;\n target: string;\n external: boolean;\n}\n\ninterface RenderCtx {\n /** pStyle applied to plain paragraphs (used inside quote SDTs). */\n paragraphStyle?: string;\n}\n\nfunction normalizeHex(hex: string): string {\n return hex.replace(/^#/, \"\").toUpperCase();\n}\n\nexport class DocxWriter {\n private rels: Rel[] = [];\n private hyperlinkIds = new Map<string, string>();\n private media: MediaFile[] = [];\n private drawingId = 0;\n\n toBytes(doc: Doc): Uint8Array {\n this.rels = [\n { id: \"rId1\", type: REL_STYLES, target: \"styles.xml\", external: false },\n { id: \"rId2\", type: REL_NUMBERING, target: \"numbering.xml\", external: false },\n ];\n this.hyperlinkIds = new Map();\n this.media = [];\n this.drawingId = 0;\n\n const body = this.renderBlocks(doc.blocks ?? [], {});\n const documentXml =\n Xml.declaration() +\n `<w:document xmlns:w=\"${NS_W}\" xmlns:r=\"${NS_R}\" xmlns:wp=\"${NS_WP}\" xmlns:a=\"${NS_A}\" xmlns:pic=\"${NS_PIC}\">` +\n `<w:body>${body}${this.sectPr()}</w:body></w:document>`;\n\n const files: ZipFile[] = [\n { name: \"[Content_Types].xml\", data: encode(this.contentTypesXml(doc)) },\n { name: \"_rels/.rels\", data: encode(this.packageRelsXml(doc)) },\n ];\n if (doc.title !== undefined) {\n files.push({ name: \"docProps/core.xml\", data: encode(this.coreXml(String(doc.title))) });\n }\n files.push(\n { name: \"word/document.xml\", data: encode(documentXml) },\n { name: \"word/styles.xml\", data: encode(this.stylesXml()) },\n { name: \"word/numbering.xml\", data: encode(this.numberingXml()) },\n { name: \"word/_rels/document.xml.rels\", data: encode(this.documentRelsXml()) },\n );\n for (const m of this.media) {\n files.push({ name: `word/media/${m.name}`, data: m.bytes });\n }\n return zipSync(files);\n }\n\n // ── Blocks ────────────────────────────────────────────────────────────────\n\n private renderBlocks(blocks: Block[], ctx: RenderCtx): string {\n let out = \"\";\n for (const block of blocks) {\n out += this.renderBlock(block as Any, ctx);\n }\n return out;\n }\n\n private renderBlock(block: Any, ctx: RenderCtx): string {\n switch (block.type) {\n case \"heading\":\n return this.paragraph(this.pPr(`Heading${clampLevel(block.level)}`), this.renderRuns(block.runs ?? []));\n case \"paragraph\": {\n const jc = block.align && block.align !== \"left\" ? (block.align === \"justify\" ? \"both\" : block.align) : null;\n return this.paragraph(this.pPr(ctx.paragraphStyle ?? null, null, jc), this.renderRuns(block.runs ?? []));\n }\n case \"list\":\n return this.renderList(block.items ?? [], block.ordered === true, 0);\n case \"table\":\n return this.renderTable(block);\n case \"code\":\n return this.renderCode(block);\n case \"quote\":\n return this.renderQuote(block);\n case \"image\":\n return this.renderImage(block);\n case \"pageBreak\":\n return `<w:p><w:r><w:br w:type=\"page\"/></w:r></w:p>`;\n case \"hr\":\n return (\n `<w:p><w:pPr><w:pBdr>` +\n `<w:bottom w:val=\"single\" w:sz=\"6\" w:space=\"1\" w:color=\"auto\"/>` +\n `</w:pBdr></w:pPr></w:p>`\n );\n default:\n return \"\";\n }\n }\n\n private paragraph(pPr: string, runs: string): string {\n return `<w:p>${pPr}${runs}</w:p>`;\n }\n\n private pPr(style: string | null, numPr: string | null = null, jc: string | null = null): string {\n let inner = \"\";\n if (style) inner += `<w:pStyle w:val=\"${Xml.attr(style)}\"/>`;\n if (numPr) inner += numPr;\n if (jc) inner += `<w:jc w:val=\"${jc}\"/>`;\n return inner === \"\" ? \"\" : `<w:pPr>${inner}</w:pPr>`;\n }\n\n // ── Runs ──────────────────────────────────────────────────────────────────\n\n private renderRuns(runs: Run[]): string {\n let out = \"\";\n for (const run of runs) {\n if (typeof run?.text !== \"string\") continue;\n if (run.link) {\n const rid = this.hyperlinkRel(run.link);\n out += `<w:hyperlink r:id=\"${rid}\" w:history=\"1\">${this.renderRun(run, true)}</w:hyperlink>`;\n } else {\n out += this.renderRun(run, false);\n }\n }\n return out;\n }\n\n private renderRun(run: Run, linked: boolean): string {\n let rPr = \"\";\n if (run.code) rPr += `<w:rStyle w:val=\"InlineCode\"/>`;\n else if (linked) rPr += `<w:rStyle w:val=\"Hyperlink\"/>`;\n if (run.code) rPr += `<w:rFonts w:ascii=\"Consolas\" w:hAnsi=\"Consolas\" w:cs=\"Consolas\"/>`;\n if (run.bold) rPr += `<w:b/>`;\n if (run.italic) rPr += `<w:i/>`;\n if (run.strike) rPr += `<w:strike/>`;\n if (run.color) rPr += `<w:color w:val=\"${normalizeHex(run.color)}\"/>`;\n if (run.underline) rPr += `<w:u w:val=\"single\"/>`;\n if (run.highlight) {\n rPr += `<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"${normalizeHex(run.highlight)}\"/>`;\n }\n const pr = rPr === \"\" ? \"\" : `<w:rPr>${rPr}</w:rPr>`;\n\n // Newlines inside a run become soft line breaks.\n const parts = run.text.split(\"\\n\");\n let content = \"\";\n parts.forEach((part, i) => {\n if (i > 0) content += `<w:br/>`;\n if (part !== \"\") content += `<w:t xml:space=\"preserve\">${Xml.text(part)}</w:t>`;\n });\n if (content === \"\") content = `<w:t xml:space=\"preserve\"></w:t>`;\n return `<w:r>${pr}${content}</w:r>`;\n }\n\n private hyperlinkRel(url: string): string {\n const existing = this.hyperlinkIds.get(url);\n if (existing) return existing;\n const id = `rId${this.rels.length + 1}`;\n this.rels.push({ id, type: REL_HYPERLINK, target: url, external: true });\n this.hyperlinkIds.set(url, id);\n return id;\n }\n\n // ── Lists ─────────────────────────────────────────────────────────────────\n\n private renderList(items: ListItem[], ordered: boolean, depth: number): string {\n const numId = ordered ? NUM_ID_DECIMAL : NUM_ID_BULLET;\n const ilvl = Math.min(depth, MAX_ILVL);\n let out = \"\";\n for (const item of items) {\n const numPr = `<w:numPr><w:ilvl w:val=\"${ilvl}\"/><w:numId w:val=\"${numId}\"/></w:numPr>`;\n out += this.paragraph(this.pPr(null, numPr), this.renderRuns(item.runs ?? []));\n if (item.children && item.children.length > 0) {\n out += this.renderList(item.children, ordered, depth + 1);\n }\n }\n return out;\n }\n\n // ── Tables ────────────────────────────────────────────────────────────────\n\n private renderTable(block: Any): string {\n const rows: Any[] = block.rows ?? [];\n const cols = Math.max(1, ...rows.map((r: Any) => (Array.isArray(r?.cells) ? r.cells.length : 0)));\n const colWidth = Math.floor(9360 / cols);\n\n let out = `<w:tbl><w:tblPr><w:tblStyle w:val=\"LastWordTable\"/><w:tblW w:w=\"0\" w:type=\"auto\"/>`;\n out += `<w:tblLook w:val=\"04A0\" w:firstRow=\"1\" w:lastRow=\"0\" w:firstColumn=\"0\" w:lastColumn=\"0\" w:noHBand=\"0\" w:noVBand=\"1\"/>`;\n out += `</w:tblPr><w:tblGrid>`;\n for (let c = 0; c < cols; c++) out += `<w:gridCol w:w=\"${colWidth}\"/>`;\n out += `</w:tblGrid>`;\n\n for (const row of rows) {\n const header = row?.header === true;\n out += `<w:tr>`;\n if (header) out += `<w:trPr><w:tblHeader/></w:trPr>`;\n const cells: Any[] = Array.isArray(row?.cells) ? row.cells : [];\n for (const cell of cells) {\n out += `<w:tc><w:tcPr><w:tcW w:w=\"${colWidth}\" w:type=\"dxa\"/>`;\n if (header) out += `<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"F2F2F2\"/>`;\n out += `</w:tcPr>`;\n let inner = this.renderBlocks(cell?.blocks ?? [], {});\n // A table cell must end with a paragraph.\n if (inner === \"\" || !inner.endsWith(\"</w:p>\")) inner += `<w:p/>`;\n out += inner + `</w:tc>`;\n }\n out += `</w:tr>`;\n }\n out += `</w:tbl>`;\n return out;\n }\n\n // ── Code / quote (SDT-wrapped for lossless round-trip) ──────────────────\n\n private renderCode(block: Any): string {\n const language = typeof block.language === \"string\" && block.language !== \"\" ? block.language : null;\n const tag = language ? `${SDT_TAG_CODE}:${language}` : SDT_TAG_CODE;\n const lines = String(block.text ?? \"\").split(\"\\n\");\n let body = \"\";\n for (const line of lines) {\n const runs =\n line === \"\" ? \"\" : `<w:r><w:t xml:space=\"preserve\">${Xml.text(line)}</w:t></w:r>`;\n body += this.paragraph(this.pPr(\"CodeBlock\"), runs);\n }\n return (\n `<w:sdt><w:sdtPr><w:alias w:val=\"Code\"/><w:tag w:val=\"${Xml.attr(tag)}\"/></w:sdtPr>` +\n `<w:sdtContent>${body}</w:sdtContent></w:sdt>`\n );\n }\n\n private renderQuote(block: Any): string {\n const body = this.renderBlocks(block.blocks ?? [], { paragraphStyle: \"Quote\" });\n return (\n `<w:sdt><w:sdtPr><w:alias w:val=\"Quote\"/><w:tag w:val=\"${SDT_TAG_QUOTE}\"/></w:sdtPr>` +\n `<w:sdtContent>${body === \"\" ? \"<w:p/>\" : body}</w:sdtContent></w:sdt>`\n );\n }\n\n // ── Images ────────────────────────────────────────────────────────────────\n\n private renderImage(block: Any): string {\n const decoded = parseDataUrl(String(block.src ?? \"\"));\n if (!decoded) {\n throw new Error(\"last-word: image `src` must be a base64 data URL (data:image/png;base64,… or data:image/jpeg;base64,…)\");\n }\n\n const ext = extForMime(decoded.mime);\n const name = `image${this.media.length + 1}.${ext}`;\n this.media.push({ name, bytes: decoded.bytes, ext });\n const rid = `rId${this.rels.length + 1}`;\n this.rels.push({ id: rid, type: REL_IMAGE, target: `media/${name}`, external: false });\n\n const { width, height } = resolveImageSize(block, decoded.bytes);\n const cx = Math.max(1, Math.round(width * EMU_PER_PX));\n const cy = Math.max(1, Math.round(height * EMU_PER_PX));\n\n const id = ++this.drawingId;\n const alt = typeof block.alt === \"string\" ? block.alt : \"\";\n const descr = alt === \"\" ? \"\" : ` descr=\"${Xml.attr(alt)}\"`;\n\n return (\n `<w:p><w:r><w:drawing>` +\n `<wp:inline distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\">` +\n `<wp:extent cx=\"${cx}\" cy=\"${cy}\"/>` +\n `<wp:effectExtent l=\"0\" t=\"0\" r=\"0\" b=\"0\"/>` +\n `<wp:docPr id=\"${id}\" name=\"Picture ${id}\"${descr}/>` +\n `<wp:cNvGraphicFramePr><a:graphicFrameLocks noChangeAspect=\"1\"/></wp:cNvGraphicFramePr>` +\n `<a:graphic><a:graphicData uri=\"${NS_PIC}\">` +\n `<pic:pic>` +\n `<pic:nvPicPr><pic:cNvPr id=\"${id}\" name=\"Picture ${id}\"${descr}/><pic:cNvPicPr/></pic:nvPicPr>` +\n `<pic:blipFill><a:blip r:embed=\"${rid}\"/><a:stretch><a:fillRect/></a:stretch></pic:blipFill>` +\n `<pic:spPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"${cx}\" cy=\"${cy}\"/></a:xfrm>` +\n `<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></pic:spPr>` +\n `</pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing></w:r></w:p>`\n );\n }\n\n // ── Parts ─────────────────────────────────────────────────────────────────\n\n private sectPr(): string {\n return (\n `<w:sectPr><w:pgSz w:w=\"12240\" w:h=\"15840\"/>` +\n `<w:pgMar w:top=\"1440\" w:right=\"1440\" w:bottom=\"1440\" w:left=\"1440\" w:header=\"720\" w:footer=\"720\" w:gutter=\"0\"/>` +\n `</w:sectPr>`\n );\n }\n\n private contentTypesXml(doc: Doc): string {\n const exts = [...new Set(this.media.map((m) => m.ext))].sort();\n let defaults =\n `<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>` +\n `<Default Extension=\"xml\" ContentType=\"application/xml\"/>`;\n for (const ext of exts) {\n defaults += `<Default Extension=\"${ext}\" ContentType=\"${mimeForExt(ext)}\"/>`;\n }\n let overrides =\n `<Override PartName=\"/word/document.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\"/>` +\n `<Override PartName=\"/word/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\"/>` +\n `<Override PartName=\"/word/numbering.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\"/>`;\n if (doc.title !== undefined) {\n overrides += `<Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>`;\n }\n return (\n Xml.declaration() +\n `<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">${defaults}${overrides}</Types>`\n );\n }\n\n private packageRelsXml(doc: Doc): string {\n let rels = `<Relationship Id=\"rId1\" Type=\"${REL_DOCUMENT}\" Target=\"word/document.xml\"/>`;\n if (doc.title !== undefined) {\n rels += `<Relationship Id=\"rId2\" Type=\"${REL_CORE}\" Target=\"docProps/core.xml\"/>`;\n }\n return (\n Xml.declaration() +\n `<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">${rels}</Relationships>`\n );\n }\n\n private coreXml(title: string): string {\n return (\n Xml.declaration() +\n `<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" ` +\n `xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" ` +\n `xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">` +\n `<dc:title>${Xml.text(title)}</dc:title>` +\n `</cp:coreProperties>`\n );\n }\n\n private documentRelsXml(): string {\n let out = Xml.declaration() + `<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">`;\n for (const rel of this.rels) {\n const mode = rel.external ? ` TargetMode=\"External\"` : \"\";\n out += `<Relationship Id=\"${rel.id}\" Type=\"${rel.type}\" Target=\"${Xml.attr(rel.target)}\"${mode}/>`;\n }\n return out + `</Relationships>`;\n }\n\n private stylesXml(): string {\n const headingSizes = [40, 32, 28, 26, 24, 22];\n let styles =\n `<w:docDefaults><w:rPrDefault><w:rPr>` +\n `<w:rFonts w:ascii=\"Calibri\" w:hAnsi=\"Calibri\" w:eastAsia=\"Calibri\" w:cs=\"Calibri\"/>` +\n `<w:sz w:val=\"22\"/><w:szCs w:val=\"22\"/>` +\n `</w:rPr></w:rPrDefault>` +\n `<w:pPrDefault><w:pPr><w:spacing w:after=\"160\" w:line=\"259\" w:lineRule=\"auto\"/></w:pPr></w:pPrDefault>` +\n `</w:docDefaults>` +\n `<w:style w:type=\"paragraph\" w:default=\"1\" w:styleId=\"Normal\"><w:name w:val=\"Normal\"/><w:qFormat/></w:style>`;\n\n for (let level = 1; level <= 6; level++) {\n const sz = headingSizes[level - 1]!;\n styles +=\n `<w:style w:type=\"paragraph\" w:styleId=\"Heading${level}\"><w:name w:val=\"heading ${level}\"/>` +\n `<w:basedOn w:val=\"Normal\"/><w:next w:val=\"Normal\"/><w:qFormat/>` +\n `<w:pPr><w:keepNext/><w:spacing w:before=\"240\" w:after=\"120\"/><w:outlineLvl w:val=\"${level - 1}\"/></w:pPr>` +\n `<w:rPr><w:b/><w:sz w:val=\"${sz}\"/><w:szCs w:val=\"${sz}\"/></w:rPr></w:style>`;\n }\n\n styles +=\n `<w:style w:type=\"paragraph\" w:styleId=\"Quote\"><w:name w:val=\"Quote\"/>` +\n `<w:basedOn w:val=\"Normal\"/><w:qFormat/>` +\n `<w:pPr><w:ind w:left=\"720\"/></w:pPr>` +\n `<w:rPr><w:i/><w:color w:val=\"595959\"/></w:rPr></w:style>` +\n `<w:style w:type=\"paragraph\" w:styleId=\"CodeBlock\"><w:name w:val=\"Code Block\"/>` +\n `<w:basedOn w:val=\"Normal\"/>` +\n `<w:pPr><w:spacing w:after=\"0\" w:line=\"240\" w:lineRule=\"auto\"/>` +\n `<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"F2F2F2\"/></w:pPr>` +\n `<w:rPr><w:rFonts w:ascii=\"Consolas\" w:hAnsi=\"Consolas\" w:cs=\"Consolas\"/>` +\n `<w:sz w:val=\"20\"/><w:szCs w:val=\"20\"/></w:rPr></w:style>` +\n `<w:style w:type=\"character\" w:styleId=\"InlineCode\"><w:name w:val=\"Inline Code\"/>` +\n `<w:rPr><w:rFonts w:ascii=\"Consolas\" w:hAnsi=\"Consolas\" w:cs=\"Consolas\"/>` +\n `<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"F2F2F2\"/></w:rPr></w:style>` +\n `<w:style w:type=\"character\" w:styleId=\"Hyperlink\"><w:name w:val=\"Hyperlink\"/>` +\n `<w:rPr><w:color w:val=\"0563C1\"/><w:u w:val=\"single\"/></w:rPr></w:style>` +\n `<w:style w:type=\"table\" w:styleId=\"LastWordTable\"><w:name w:val=\"LastWord Table\"/>` +\n `<w:tblPr><w:tblBorders>` +\n `<w:top w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/>` +\n `<w:left w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/>` +\n `<w:bottom w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/>` +\n `<w:right w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/>` +\n `<w:insideH w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/>` +\n `<w:insideV w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/>` +\n `</w:tblBorders>` +\n `<w:tblCellMar>` +\n `<w:top w:w=\"60\" w:type=\"dxa\"/><w:left w:w=\"108\" w:type=\"dxa\"/>` +\n `<w:bottom w:w=\"60\" w:type=\"dxa\"/><w:right w:w=\"108\" w:type=\"dxa\"/>` +\n `</w:tblCellMar></w:tblPr>` +\n `<w:tblStylePr w:type=\"firstRow\"><w:rPr><w:b/></w:rPr>` +\n `<w:tcPr><w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"F2F2F2\"/></w:tcPr></w:tblStylePr>` +\n `</w:style>`;\n\n return Xml.declaration() + `<w:styles xmlns:w=\"${NS_W}\">${styles}</w:styles>`;\n }\n\n private numberingXml(): string {\n let out = Xml.declaration() + `<w:numbering xmlns:w=\"${NS_W}\">`;\n // abstractNum 0: bullet, 6 indent levels\n out += `<w:abstractNum w:abstractNumId=\"0\"><w:multiLevelType w:val=\"hybridMultilevel\"/>`;\n for (let i = 0; i <= MAX_ILVL; i++) {\n out +=\n `<w:lvl w:ilvl=\"${i}\"><w:start w:val=\"1\"/><w:numFmt w:val=\"bullet\"/>` +\n `<w:lvlText w:val=\"•\"/><w:lvlJc w:val=\"left\"/>` +\n `<w:pPr><w:ind w:left=\"${720 * (i + 1)}\" w:hanging=\"360\"/></w:pPr></w:lvl>`;\n }\n out += `</w:abstractNum>`;\n // abstractNum 1: decimal, 6 indent levels\n out += `<w:abstractNum w:abstractNumId=\"1\"><w:multiLevelType w:val=\"hybridMultilevel\"/>`;\n for (let i = 0; i <= MAX_ILVL; i++) {\n out +=\n `<w:lvl w:ilvl=\"${i}\"><w:start w:val=\"1\"/><w:numFmt w:val=\"decimal\"/>` +\n `<w:lvlText w:val=\"%${i + 1}.\"/><w:lvlJc w:val=\"left\"/>` +\n `<w:pPr><w:ind w:left=\"${720 * (i + 1)}\" w:hanging=\"360\"/></w:pPr></w:lvl>`;\n }\n out += `</w:abstractNum>`;\n out += `<w:num w:numId=\"${NUM_ID_BULLET}\"><w:abstractNumId w:val=\"0\"/></w:num>`;\n out += `<w:num w:numId=\"${NUM_ID_DECIMAL}\"><w:abstractNumId w:val=\"1\"/></w:num>`;\n return out + `</w:numbering>`;\n }\n}\n\n// ── helpers ─────────────────────────────────────────────────────────────────\n\nconst encoder = new TextEncoder();\n\nfunction encode(xml: string): Uint8Array {\n return encoder.encode(xml);\n}\n\nfunction clampLevel(level: Any): number {\n const n = Number.isFinite(Number(level)) ? Math.trunc(Number(level)) : 1;\n return Math.min(6, Math.max(1, n));\n}\n\nfunction extForMime(mime: string): string {\n switch (mime) {\n case \"image/png\":\n return \"png\";\n case \"image/jpeg\":\n case \"image/jpg\":\n return \"jpeg\";\n case \"image/gif\":\n return \"gif\";\n default:\n return mime.split(\"/\")[1] ?? \"bin\";\n }\n}\n\nfunction mimeForExt(ext: string): string {\n switch (ext) {\n case \"png\":\n return \"image/png\";\n case \"jpeg\":\n return \"image/jpeg\";\n case \"gif\":\n return \"image/gif\";\n default:\n return \"application/octet-stream\";\n }\n}\n\n/**\n * Resolve the rendered pixel size of an image block: explicit px win, missing\n * dimensions are derived from the intrinsic (sniffed) size keeping aspect,\n * and everything is capped at 6.5in width.\n */\nexport function resolveImageSize(\n block: { widthPx?: number; heightPx?: number },\n bytes: Uint8Array,\n): { width: number; height: number } {\n const intrinsic = sniffImageSize(bytes);\n let width = typeof block.widthPx === \"number\" && block.widthPx > 0 ? block.widthPx : undefined;\n let height = typeof block.heightPx === \"number\" && block.heightPx > 0 ? block.heightPx : undefined;\n\n if (width === undefined && height === undefined) {\n width = intrinsic?.width ?? 300;\n height = intrinsic?.height ?? 200;\n } else if (width === undefined) {\n const aspect = intrinsic ? intrinsic.width / intrinsic.height : 1.5;\n width = height! * aspect;\n } else if (height === undefined) {\n const aspect = intrinsic ? intrinsic.width / intrinsic.height : 1.5;\n height = width / aspect;\n }\n\n if (width! > MAX_WIDTH_PX) {\n height = (height! * MAX_WIDTH_PX) / width!;\n width = MAX_WIDTH_PX;\n }\n\n return { width: Math.max(1, Math.round(width!)), height: Math.max(1, Math.round(height!)) };\n}\n","/**\n * DocxReader — .docx bytes → Doc JSON model. Handles this package's own\n * writer output losslessly (round-trip) and tolerates Word-authored files:\n * headings via pStyle Heading1-9 OR outlineLvl, numPr lists with ilvl nesting,\n * hyperlinks via rels, images via blip r:embed, page breaks, bottom-border-only\n * paragraphs → hr. Unknown constructs degrade to plain paragraphs, never throw.\n * Mirrors PHP `Reader\\DocxReader`.\n */\n\nimport { base64Encode } from \"../helpers/image-size\";\nimport type { Block, Doc, ListItem, Run } from \"../schema/types\";\nimport { unzipSync } from \"../zip\";\nimport { at, el, els, parseXml, type XmlNode } from \"./xml\";\nimport { EMU_PER_PX, SDT_TAG_CODE, SDT_TAG_QUOTE } from \"../writer/docx-writer\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\nconst DECODER = new TextDecoder();\n\ninterface RelInfo {\n target: string;\n external: boolean;\n}\n\n/** Named w:highlight values → hex (reader tolerance for Word-authored files). */\nconst HIGHLIGHT_NAMES: Record<string, string> = {\n yellow: \"#FFFF00\",\n green: \"#00FF00\",\n cyan: \"#00FFFF\",\n magenta: \"#FF00FF\",\n blue: \"#0000FF\",\n red: \"#FF0000\",\n darkBlue: \"#00008B\",\n darkCyan: \"#008B8B\",\n darkGreen: \"#006400\",\n darkMagenta: \"#8B008B\",\n darkRed: \"#8B0000\",\n darkYellow: \"#808000\",\n darkGray: \"#A9A9A9\",\n lightGray: \"#D3D3D3\",\n black: \"#000000\",\n white: \"#FFFFFF\",\n};\n\nconst MONO_FONTS = [\"consolas\", \"courier new\", \"courier\", \"menlo\", \"monaco\", \"source code pro\"];\n\nconst ORDERED_NUM_FMTS = [\n \"decimal\",\n \"decimalZero\",\n \"upperRoman\",\n \"lowerRoman\",\n \"upperLetter\",\n \"lowerLetter\",\n];\n\ninterface FlatListItem {\n numId: string;\n ilvl: number;\n runs: Run[];\n}\n\ninterface WalkCtx {\n insideQuote?: boolean;\n}\n\nexport class DocxReader {\n private parts: Record<string, Uint8Array> = {};\n private rels: Record<string, RelInfo> = {};\n private numOrdered: Record<string, boolean> = {};\n\n read(bytes: Uint8Array): Doc {\n this.parts = unzipSync(bytes);\n this.rels = this.loadRels(\"word/_rels/document.xml.rels\");\n this.numOrdered = this.loadNumbering();\n\n const docXml = this.partText(\"word/document.xml\");\n const root = docXml ? parseXml(docXml) : null;\n const body = el(root, \"body\");\n\n const doc: Doc = { blocks: body ? this.walkBody(body.children, {}) : [] };\n\n const title = this.readTitle();\n if (title !== null) doc.title = title;\n return doc;\n }\n\n // ── Parts / metadata ─────────────────────────────────────────────────────\n\n private partText(name: string): string | null {\n const part = this.parts[name];\n return part ? DECODER.decode(part) : null;\n }\n\n private readTitle(): string | null {\n const xml = this.partText(\"docProps/core.xml\");\n if (!xml) return null;\n const root = parseXml(xml);\n const title = el(root, \"title\");\n return title ? title.text : null;\n }\n\n private loadRels(name: string): Record<string, RelInfo> {\n const xml = this.partText(name);\n if (!xml) return {};\n const root = parseXml(xml);\n const out: Record<string, RelInfo> = {};\n for (const rel of els(root, \"Relationship\")) {\n const id = at(rel, \"Id\");\n const target = at(rel, \"Target\");\n if (!id || !target) continue;\n out[id] = { target, external: at(rel, \"TargetMode\") === \"External\" };\n }\n return out;\n }\n\n private loadNumbering(): Record<string, boolean> {\n const xml = this.partText(\"word/numbering.xml\");\n if (!xml) return {};\n const root = parseXml(xml);\n const abstractOrdered: Record<string, boolean> = {};\n for (const abs of els(root, \"abstractNum\")) {\n const id = at(abs, \"abstractNumId\") ?? \"\";\n const lvl0 = els(abs, \"lvl\").find((l) => at(l, \"ilvl\") === \"0\") ?? el(abs, \"lvl\");\n const fmt = at(el(lvl0, \"numFmt\"), \"val\") ?? \"bullet\";\n abstractOrdered[id] = ORDERED_NUM_FMTS.includes(fmt);\n }\n const out: Record<string, boolean> = {};\n for (const num of els(root, \"num\")) {\n const numId = at(num, \"numId\") ?? \"\";\n const absId = at(el(num, \"abstractNumId\"), \"val\") ?? \"\";\n out[numId] = abstractOrdered[absId] ?? false;\n }\n return out;\n }\n\n // ── Body walking ─────────────────────────────────────────────────────────\n\n private walkBody(nodes: XmlNode[], ctx: WalkCtx): Block[] {\n const blocks: Block[] = [];\n let listBuf: FlatListItem[] = [];\n let codeBuf: string[] | null = null;\n let quoteBuf: Block[] | null = null;\n\n const flushList = (): void => {\n if (listBuf.length > 0) {\n blocks.push(...this.buildLists(listBuf));\n listBuf = [];\n }\n };\n const flushCode = (): void => {\n if (codeBuf !== null) {\n blocks.push({ type: \"code\", text: codeBuf.join(\"\\n\") });\n codeBuf = null;\n }\n };\n const flushQuote = (): void => {\n if (quoteBuf !== null) {\n blocks.push({ type: \"quote\", blocks: quoteBuf });\n quoteBuf = null;\n }\n };\n const flushAll = (): void => {\n flushList();\n flushCode();\n flushQuote();\n };\n\n for (const node of nodes) {\n switch (node.name) {\n case \"p\": {\n const kind = this.classifyParagraph(node);\n if (kind.kind === \"listItem\") {\n flushCode();\n flushQuote();\n listBuf.push(kind.item);\n } else if (kind.kind === \"codeLine\") {\n flushList();\n flushQuote();\n if (codeBuf === null) codeBuf = [];\n codeBuf.push(kind.text);\n } else if (kind.kind === \"quoteParagraph\" && !ctx.insideQuote) {\n flushList();\n flushCode();\n if (quoteBuf === null) quoteBuf = [];\n quoteBuf.push(...kind.blocks);\n } else {\n flushAll();\n blocks.push(...kind.blocks);\n }\n break;\n }\n case \"tbl\":\n flushAll();\n blocks.push(this.parseTable(node, ctx));\n break;\n case \"sdt\": {\n flushAll();\n blocks.push(...this.parseSdt(node, ctx));\n break;\n }\n case \"sectPr\":\n case \"bookmarkStart\":\n case \"bookmarkEnd\":\n case \"proofErr\":\n break;\n default:\n // Unknown container: recurse looking for readable content (degrade, never throw).\n if (node.children.length > 0) {\n const inner = this.walkBody(node.children, ctx);\n if (inner.length > 0) {\n flushAll();\n blocks.push(...inner);\n }\n }\n break;\n }\n }\n flushAll();\n return blocks;\n }\n\n private parseSdt(sdt: XmlNode, ctx: WalkCtx): Block[] {\n const tag = at(el(el(sdt, \"sdtPr\"), \"tag\"), \"val\") ?? \"\";\n const content = el(sdt, \"sdtContent\");\n if (!content) return [];\n\n if (tag === SDT_TAG_CODE || tag.startsWith(SDT_TAG_CODE + \":\")) {\n const lines = els(content, \"p\").map((p) => this.plainText(p));\n const block: Block = { type: \"code\", text: lines.join(\"\\n\") };\n if (tag.length > SDT_TAG_CODE.length + 1) {\n (block as Any).language = tag.slice(SDT_TAG_CODE.length + 1);\n }\n return [orderCodeKeys(block)];\n }\n if (tag === SDT_TAG_QUOTE) {\n return [{ type: \"quote\", blocks: this.walkBody(content.children, { ...ctx, insideQuote: true }) }];\n }\n // Unknown SDT: read its content transparently.\n return this.walkBody(content.children, ctx);\n }\n\n // ── Paragraph classification ─────────────────────────────────────────────\n\n private classifyParagraph(\n p: XmlNode,\n ):\n | { kind: \"listItem\"; item: FlatListItem }\n | { kind: \"codeLine\"; text: string }\n | { kind: \"quoteParagraph\"; blocks: Block[] }\n | { kind: \"blocks\"; blocks: Block[] } {\n const pPr = el(p, \"pPr\");\n const styleId = at(el(pPr, \"pStyle\"), \"val\") ?? \"\";\n\n // List item?\n const numPr = el(pPr, \"numPr\");\n if (numPr) {\n const numId = at(el(numPr, \"numId\"), \"val\") ?? \"\";\n const ilvl = parseInt(at(el(numPr, \"ilvl\"), \"val\") ?? \"0\", 10) || 0;\n return { kind: \"listItem\", item: { numId, ilvl, runs: this.parseRuns(p, undefined) } };\n }\n\n // Code line? (SDT-less tolerance path)\n if (/^(CodeBlock|SourceCode|HTMLPreformatted|Code)$/i.test(styleId)) {\n return { kind: \"codeLine\", text: this.plainText(p) };\n }\n\n const blocks: Block[] = [];\n\n // Images (drawings may sit alongside text runs).\n const drawings = findAll(p, \"drawing\");\n const runs = this.parseRuns(p, undefined);\n\n // Heading?\n const headingMatch = /^Heading([1-9])$/i.exec(styleId);\n const outlineLvl = at(el(pPr, \"outlineLvl\"), \"val\");\n if (headingMatch || outlineLvl !== undefined) {\n const raw = headingMatch ? parseInt(headingMatch[1]!, 10) : parseInt(outlineLvl ?? \"0\", 10) + 1;\n const level = Math.min(6, Math.max(1, raw)) as 1 | 2 | 3 | 4 | 5 | 6;\n blocks.push({ type: \"heading\", level, runs });\n for (const d of drawings) blocks.push(...this.parseDrawing(d));\n return { kind: \"blocks\", blocks };\n }\n\n // Page break only?\n const hasPageBreak = findAll(p, \"br\").some((br) => at(br, \"type\") === \"page\");\n const text = runs.map((r) => r.text).join(\"\");\n if (hasPageBreak && text === \"\" && drawings.length === 0) {\n return { kind: \"blocks\", blocks: [{ type: \"pageBreak\" }] };\n }\n\n // Horizontal rule? (bottom-border-only empty paragraph)\n const pBdr = el(pPr, \"pBdr\");\n if (pBdr && el(pBdr, \"bottom\") && text === \"\" && drawings.length === 0) {\n return { kind: \"blocks\", blocks: [{ type: \"hr\" }] };\n }\n\n // Plain (or quote-styled) paragraph.\n if (text !== \"\" || drawings.length === 0) {\n const para: Block = { type: \"paragraph\", runs };\n const jc = at(el(pPr, \"jc\"), \"val\");\n if (jc === \"center\" || jc === \"right\") (para as Any).align = jc;\n else if (jc === \"both\" || jc === \"distribute\" || jc === \"justify\") (para as Any).align = \"justify\";\n blocks.push(para);\n }\n for (const d of drawings) blocks.push(...this.parseDrawing(d));\n\n if (/^(Quote|IntenseQuote|BlockQuote|Blockquote)$/i.test(styleId)) {\n return { kind: \"quoteParagraph\", blocks };\n }\n return { kind: \"blocks\", blocks };\n }\n\n /** Concatenated visible text of a paragraph (tabs and soft breaks included). */\n private plainText(p: XmlNode): string {\n return this.parseRuns(p, undefined)\n .map((r) => r.text)\n .join(\"\");\n }\n\n // ── Runs ─────────────────────────────────────────────────────────────────\n\n private parseRuns(container: XmlNode, link: string | undefined): Run[] {\n const runs: Run[] = [];\n for (const child of container.children) {\n switch (child.name) {\n case \"r\":\n runs.push(...this.runFrom(child, link));\n break;\n case \"hyperlink\": {\n const rid = at(child, \"id\");\n const rel = rid ? this.rels[rid] : undefined;\n const anchor = at(child, \"anchor\");\n const url = rel?.external ? rel.target : anchor ? `#${anchor}` : undefined;\n runs.push(...this.parseRuns(child, url ?? link));\n break;\n }\n case \"sdt\": {\n const content = el(child, \"sdtContent\");\n if (content) runs.push(...this.parseRuns(content, link));\n break;\n }\n case \"ins\":\n case \"smartTag\":\n runs.push(...this.parseRuns(child, link));\n break;\n default:\n break;\n }\n }\n return mergeRuns(runs);\n }\n\n private runFrom(r: XmlNode, link: string | undefined): Run[] {\n const rPr = el(r, \"rPr\");\n let text = \"\";\n for (const child of r.children) {\n if (child.name === \"t\") text += child.text;\n else if (child.name === \"br\" && at(child, \"type\") !== \"page\") text += \"\\n\";\n else if (child.name === \"cr\") text += \"\\n\";\n else if (child.name === \"tab\") text += \"\\t\";\n }\n if (text === \"\") return [];\n\n const run: Run = { text };\n if (onFlag(el(rPr, \"b\"))) run.bold = true;\n if (onFlag(el(rPr, \"i\"))) run.italic = true;\n if (onFlag(el(rPr, \"strike\"))) run.strike = true;\n\n const u = el(rPr, \"u\");\n if (u && (at(u, \"val\") ?? \"single\") !== \"none\") run.underline = true;\n\n const rStyle = at(el(rPr, \"rStyle\"), \"val\") ?? \"\";\n const asciiFont = (at(el(rPr, \"rFonts\"), \"ascii\") ?? \"\").toLowerCase();\n if (/^InlineCode$/i.test(rStyle) || MONO_FONTS.includes(asciiFont)) run.code = true;\n\n if (link) run.link = link;\n\n const color = at(el(rPr, \"color\"), \"val\");\n if (color && color !== \"auto\") run.color = `#${color.toUpperCase()}`;\n\n const shdFill = at(el(rPr, \"shd\"), \"fill\");\n if (shdFill && shdFill !== \"auto\") {\n run.highlight = `#${shdFill.toUpperCase()}`;\n } else {\n const named = at(el(rPr, \"highlight\"), \"val\");\n if (named && named !== \"none\" && HIGHLIGHT_NAMES[named]) run.highlight = HIGHLIGHT_NAMES[named];\n }\n\n return [run];\n }\n\n // ── Lists ────────────────────────────────────────────────────────────────\n\n private buildLists(flat: FlatListItem[]): Block[] {\n const blocks: Block[] = [];\n let i = 0;\n while (i < flat.length) {\n const numId = flat[i]!.numId;\n const group: FlatListItem[] = [];\n while (i < flat.length && flat[i]!.numId === numId) {\n group.push(flat[i]!);\n i++;\n }\n const ordered = this.numOrdered[numId] ?? false;\n const items = buildTree(group);\n const block: Block = ordered\n ? ({ type: \"list\", ordered: true, items } as Block)\n : ({ type: \"list\", items } as Block);\n blocks.push(block);\n }\n return blocks;\n }\n\n // ── Tables ───────────────────────────────────────────────────────────────\n\n private parseTable(tbl: XmlNode, ctx: WalkCtx): Block {\n const rows = els(tbl, \"tr\").map((tr) => {\n const header = el(el(tr, \"trPr\"), \"tblHeader\") !== undefined;\n const cells = els(tr, \"tc\").map((tc) => ({ blocks: this.walkBody(tc.children, ctx) }));\n return header ? { header: true, cells } : { cells };\n });\n return { type: \"table\", rows } as Block;\n }\n\n // ── Images ───────────────────────────────────────────────────────────────\n\n private parseDrawing(drawing: XmlNode): Block[] {\n const frame = el(drawing, \"inline\") ?? el(drawing, \"anchor\");\n if (!frame) return [];\n\n const blip = findFirst(frame, \"blip\");\n const rid = at(blip, \"embed\") ?? at(blip, \"link\");\n const rel = rid ? this.rels[rid] : undefined;\n if (!rel) return [];\n\n const target = rel.target.replace(/^\\.\\//, \"\");\n const partName = target.startsWith(\"/\") ? target.slice(1) : `word/${target}`;\n const media = this.parts[partName];\n if (!media) return [];\n\n const ext = (partName.split(\".\").pop() ?? \"\").toLowerCase();\n const mime = ext === \"png\" ? \"image/png\" : ext === \"jpg\" || ext === \"jpeg\" ? \"image/jpeg\" : ext === \"gif\" ? \"image/gif\" : \"image/png\";\n\n const block: Any = { type: \"image\", src: `data:${mime};base64,${base64Encode(media)}` };\n\n const extent = el(frame, \"extent\");\n const cx = parseInt(at(extent, \"cx\") ?? \"0\", 10);\n const cy = parseInt(at(extent, \"cy\") ?? \"0\", 10);\n if (cx > 0) block.widthPx = Math.max(1, Math.round(cx / EMU_PER_PX));\n if (cy > 0) block.heightPx = Math.max(1, Math.round(cy / EMU_PER_PX));\n\n const descr = at(el(frame, \"docPr\"), \"descr\");\n if (descr) block.alt = descr;\n\n return [block as Block];\n }\n}\n\n// ── helpers ─────────────────────────────────────────────────────────────────\n\n/** True when a toggle property element is present and not explicitly off. */\nfunction onFlag(node: XmlNode | undefined): boolean {\n if (!node) return false;\n const val = node.attrs[\"val\"];\n return val === undefined || ![\"0\", \"false\", \"none\", \"off\"].includes(val);\n}\n\n/** Depth-first search for all descendants with the given local name. */\nfunction findAll(node: XmlNode, name: string): XmlNode[] {\n const out: XmlNode[] = [];\n for (const child of node.children) {\n if (child.name === name) out.push(child);\n out.push(...findAll(child, name));\n }\n return out;\n}\n\nfunction findFirst(node: XmlNode | undefined, name: string): XmlNode | undefined {\n if (!node) return undefined;\n for (const child of node.children) {\n if (child.name === name) return child;\n const nested = findFirst(child, name);\n if (nested) return nested;\n }\n return undefined;\n}\n\n/** Merge adjacent runs whose properties are identical (writer normalization). */\nexport function mergeRuns(runs: Run[]): Run[] {\n const out: Run[] = [];\n for (const run of runs) {\n if (run.text === \"\") continue;\n const prev = out[out.length - 1];\n if (prev && sameProps(prev, run)) {\n prev.text += run.text;\n } else {\n out.push({ ...run });\n }\n }\n return out;\n}\n\nfunction sameProps(a: Run, b: Run): boolean {\n const keys = [\"bold\", \"italic\", \"underline\", \"strike\", \"code\", \"link\", \"color\", \"highlight\"] as const;\n return keys.every((k) => (a[k] ?? undefined) === (b[k] ?? undefined));\n}\n\n/** Build a nested ListItem tree from flat (ilvl-tagged) paragraphs. */\nfunction buildTree(flat: FlatListItem[]): ListItem[] {\n const root: ListItem[] = [];\n const lastAtDepth: (ListItem | undefined)[] = [];\n\n for (const entry of flat) {\n const item: ListItem = { runs: entry.runs };\n let depth = Math.max(0, entry.ilvl);\n\n // Clamp orphan depths to the nearest existing parent.\n while (depth > 0 && lastAtDepth[depth - 1] === undefined) depth--;\n\n if (depth === 0) {\n root.push(item);\n } else {\n const parent = lastAtDepth[depth - 1]!;\n if (!parent.children) parent.children = [];\n parent.children.push(item);\n }\n lastAtDepth[depth] = item;\n lastAtDepth.length = depth + 1;\n }\n return root;\n}\n\n/** Keep `language` before `text` for stable JSON output (cosmetic only). */\nfunction orderCodeKeys(block: Block): Block {\n const b = block as Any;\n if (b.language === undefined) return block;\n return { type: \"code\", language: b.language, text: b.text } as Block;\n}\n","/**\n * GFM markdown → Doc — the Editor bridge. Hand-rolled line-based block parser\n * plus an inline tokenizer (bold/italic/strike/code/links with backslash\n * escapes). No external markdown dependency. Mirrors PHP\n * `Markdown\\MarkdownBridge::fromMarkdown`.\n */\n\nimport { mergeRuns } from \"../reader/docx-reader\";\nimport type { Block, Doc, ListItem, Run } from \"../schema/types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\nconst HEADING_RE = /^(#{1,6})\\s+(.*)$/;\nconst HR_RE = /^(-{3,}|\\*{3,}|_{3,})\\s*$/;\nconst FENCE_RE = /^```(.*)$/;\nconst LIST_RE = /^(\\s*)([-*+]|\\d{1,9}\\.)\\s+(.*)$/;\nconst IMAGE_LINE_RE = /^!\\[((?:\\\\.|[^\\]\\\\])*)\\]\\(([^)]*)\\)\\s*$/;\nconst TABLE_SEP_RE = /^\\s*\\|?(\\s*:?-{3,}:?\\s*\\|)*\\s*:?-{3,}:?\\s*\\|?\\s*$/;\n\nexport function fromMarkdown(markdown: string): Doc {\n const lines = String(markdown ?? \"\")\n .replace(/\\r\\n?/g, \"\\n\")\n .split(\"\\n\");\n return { blocks: parseBlocks(lines) };\n}\n\nfunction parseBlocks(lines: string[]): Block[] {\n const blocks: Block[] = [];\n let i = 0;\n\n while (i < lines.length) {\n const line = lines[i]!;\n\n if (line.trim() === \"\") {\n i++;\n continue;\n }\n\n // Fenced code block\n const fence = FENCE_RE.exec(line);\n if (fence) {\n const language = fence[1]!.trim();\n const body: string[] = [];\n i++;\n while (i < lines.length && !/^```\\s*$/.test(lines[i]!)) {\n body.push(lines[i]!);\n i++;\n }\n i++; // closing fence (or EOF)\n const block: Any = { type: \"code\", text: body.join(\"\\n\") };\n if (language !== \"\") block.language = language;\n blocks.push(reorderCode(block));\n continue;\n }\n\n // Heading\n const heading = HEADING_RE.exec(line);\n if (heading) {\n blocks.push({\n type: \"heading\",\n level: heading[1]!.length as 1 | 2 | 3 | 4 | 5 | 6,\n runs: parseInline(heading[2]!),\n });\n i++;\n continue;\n }\n\n // Horizontal rule\n if (HR_RE.test(line)) {\n blocks.push({ type: \"hr\" });\n i++;\n continue;\n }\n\n // Blockquote\n if (line.startsWith(\">\")) {\n const inner: string[] = [];\n while (i < lines.length && lines[i]!.startsWith(\">\")) {\n inner.push(lines[i]!.replace(/^> ?/, \"\"));\n i++;\n }\n blocks.push({ type: \"quote\", blocks: parseBlocks(inner) });\n continue;\n }\n\n // Table\n if (line.trimStart().startsWith(\"|\") && i + 1 < lines.length && TABLE_SEP_RE.test(lines[i + 1]!)) {\n const rows: Any[] = [];\n const headerCells = splitTableRow(line);\n rows.push({ header: true, cells: headerCells });\n i += 2; // header + separator\n while (i < lines.length && lines[i]!.trimStart().startsWith(\"|\")) {\n rows.push({ cells: splitTableRow(lines[i]!) });\n i++;\n }\n blocks.push({ type: \"table\", rows } as Block);\n continue;\n }\n\n // List\n if (LIST_RE.test(line)) {\n const entries: { indent: number; ordered: boolean; content: string }[] = [];\n while (i < lines.length) {\n const m = LIST_RE.exec(lines[i]!);\n if (!m) break;\n entries.push({\n indent: m[1]!.length,\n ordered: /\\d/.test(m[2]![0]!),\n content: m[3]!,\n });\n i++;\n }\n blocks.push(buildListBlock(entries));\n continue;\n }\n\n // Standalone image\n const image = IMAGE_LINE_RE.exec(line);\n if (image) {\n const block: Any = { type: \"image\", src: image[2]! };\n const alt = image[1]!.replace(/\\\\([[\\]\\\\])/g, \"$1\");\n if (alt !== \"\") block.alt = alt;\n blocks.push(block as Block);\n i++;\n continue;\n }\n\n // Paragraph: consecutive plain lines soft-wrapped with a space.\n const para: string[] = [line];\n i++;\n while (i < lines.length && lines[i]!.trim() !== \"\" && !isBlockStart(lines[i]!)) {\n para.push(lines[i]!);\n i++;\n }\n blocks.push({ type: \"paragraph\", runs: parseInline(para.join(\" \")) });\n }\n\n return blocks;\n}\n\nfunction isBlockStart(line: string): boolean {\n return (\n HEADING_RE.test(line) ||\n HR_RE.test(line) ||\n FENCE_RE.test(line) ||\n LIST_RE.test(line) ||\n IMAGE_LINE_RE.test(line) ||\n line.startsWith(\">\") ||\n line.trimStart().startsWith(\"|\")\n );\n}\n\n// ── Lists ───────────────────────────────────────────────────────────────────\n\nfunction buildListBlock(entries: { indent: number; ordered: boolean; content: string }[]): Block {\n const root: ListItem[] = [];\n const stack: { indent: number; items: ListItem[]; last: ListItem | null }[] = [\n { indent: entries[0]?.indent ?? 0, items: root, last: null },\n ];\n\n for (const entry of entries) {\n while (stack.length > 1 && entry.indent < stack[stack.length - 1]!.indent) {\n stack.pop();\n }\n let top = stack[stack.length - 1]!;\n if (entry.indent > top.indent && top.last) {\n if (!top.last.children) top.last.children = [];\n stack.push({ indent: entry.indent, items: top.last.children, last: null });\n top = stack[stack.length - 1]!;\n }\n const item: ListItem = { runs: parseInline(entry.content) };\n top.items.push(item);\n top.last = item;\n }\n\n const ordered = entries[0]?.ordered === true;\n return (ordered ? { type: \"list\", ordered: true, items: root } : { type: \"list\", items: root }) as Block;\n}\n\n// ── Tables ──────────────────────────────────────────────────────────────────\n\nfunction splitTableRow(line: string): Any[] {\n let s = line.trim();\n if (s.startsWith(\"|\")) s = s.slice(1);\n if (s.endsWith(\"|\") && !s.endsWith(\"\\\\|\")) s = s.slice(0, -1);\n\n const cells: string[] = [];\n let buf = \"\";\n for (let i = 0; i < s.length; i++) {\n const ch = s[i]!;\n if (ch === \"\\\\\" && i + 1 < s.length) {\n buf += ch + s[i + 1]!;\n i++;\n continue;\n }\n if (ch === \"|\") {\n cells.push(buf);\n buf = \"\";\n continue;\n }\n buf += ch;\n }\n cells.push(buf);\n\n return cells.map((cell) => ({ blocks: [{ type: \"paragraph\", runs: parseInline(cell.trim()) }] }));\n}\n\n// ── Inline tokenizer ────────────────────────────────────────────────────────\n\nconst PUNCT_RE = /[!-/:-@[-`{-~]/;\nconst WORD_RE = /[A-Za-z0-9_]/;\n\nexport function parseInline(text: string): Run[] {\n const runs: Run[] = [];\n let buf = \"\";\n let bold = false;\n let italic = false;\n let strike = false;\n let i = 0;\n const len = text.length;\n\n const flush = (): void => {\n if (buf !== \"\") {\n runs.push(makeRun(buf, bold, italic, strike, false, undefined));\n buf = \"\";\n }\n };\n\n while (i < len) {\n const ch = text[i]!;\n const two = text.slice(i, i + 2);\n\n // Backslash escape\n if (ch === \"\\\\\" && i + 1 < len && PUNCT_RE.test(text[i + 1]!)) {\n buf += text[i + 1]!;\n i += 2;\n continue;\n }\n\n // Code span (single or multi-backtick fence)\n if (ch === \"`\") {\n const fence = /^`+/.exec(text.slice(i))![0];\n const end = text.indexOf(fence, i + fence.length);\n if (end >= 0) {\n flush();\n let content = text.slice(i + fence.length, end);\n if (fence.length > 1) content = content.replace(/^ /, \"\").replace(/ $/, \"\");\n runs.push(makeRun(content, bold, italic, strike, true, undefined));\n i = end + fence.length;\n continue;\n }\n buf += ch;\n i++;\n continue;\n }\n\n // Bold\n if (two === \"**\" || two === \"__\") {\n flush();\n bold = !bold;\n i += 2;\n continue;\n }\n\n // Strikethrough\n if (two === \"~~\") {\n flush();\n strike = !strike;\n i += 2;\n continue;\n }\n\n // Italic via *\n if (ch === \"*\") {\n flush();\n italic = !italic;\n i++;\n continue;\n }\n\n // Italic via _ (word-boundary aware so snake_case survives)\n if (ch === \"_\") {\n const prev = i > 0 ? text[i - 1]! : \" \";\n const next = i + 1 < len ? text[i + 1]! : \" \";\n if ((!italic && !WORD_RE.test(prev)) || (italic && !WORD_RE.test(next))) {\n flush();\n italic = !italic;\n i++;\n continue;\n }\n buf += ch;\n i++;\n continue;\n }\n\n // Link\n if (ch === \"[\") {\n const match = matchLink(text, i);\n if (match) {\n flush();\n const inner = parseInline(match.label);\n for (const run of inner) {\n run.link = match.url;\n if (bold) run.bold = true;\n if (italic) run.italic = true;\n if (strike) run.strike = true;\n }\n runs.push(...inner);\n i = match.end;\n continue;\n }\n buf += ch;\n i++;\n continue;\n }\n\n // Inline image: degrade to its alt text (the model has no inline images).\n if (ch === \"!\" && text[i + 1] === \"[\") {\n const match = matchLink(text, i + 1);\n if (match) {\n buf += match.label.replace(/\\\\([[\\]\\\\])/g, \"$1\");\n i = match.end;\n continue;\n }\n }\n\n buf += ch;\n i++;\n }\n flush();\n\n return mergeRuns(runs);\n}\n\nfunction makeRun(\n text: string,\n bold: boolean,\n italic: boolean,\n strike: boolean,\n code: boolean,\n link: string | undefined,\n): Run {\n const run: Run = { text };\n if (bold) run.bold = true;\n if (italic) run.italic = true;\n if (strike) run.strike = true;\n if (code) run.code = true;\n if (link) run.link = link;\n return run;\n}\n\nfunction matchLink(text: string, start: number): { label: string; url: string; end: number } | null {\n let depth = 0;\n let labelEnd = -1;\n for (let j = start; j < text.length; j++) {\n const ch = text[j]!;\n if (ch === \"\\\\\") {\n j++;\n continue;\n }\n if (ch === \"[\") depth++;\n else if (ch === \"]\") {\n depth--;\n if (depth === 0) {\n labelEnd = j;\n break;\n }\n }\n }\n if (labelEnd < 0 || text[labelEnd + 1] !== \"(\") return null;\n\n for (let k = labelEnd + 2; k < text.length; k++) {\n const ch = text[k]!;\n if (ch === \"\\\\\") {\n k++;\n continue;\n }\n if (ch === \")\") {\n return { label: text.slice(start + 1, labelEnd), url: text.slice(labelEnd + 2, k), end: k + 1 };\n }\n }\n return null;\n}\n\n/** Keep `language` before `text` for stable JSON output (cosmetic only). */\nfunction reorderCode(block: Any): Block {\n if (block.language === undefined) return block as Block;\n return { type: \"code\", language: block.language, text: block.text } as Block;\n}\n","/**\n * Doc → GFM markdown — the Editor bridge. Hand-rolled (no external markdown\n * dependency), mirroring PHP `Markdown\\MarkdownBridge::toMarkdown`.\n *\n * Lossy by design where GFM has no syntax: underline / color / highlight\n * decorations, paragraph alignment, image pixel sizes, and page breaks are\n * dropped. Everything else round-trips through `fromMarkdown`.\n */\n\nimport type { Block, Doc, ListItem, Run } from \"../schema/types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\nexport function toMarkdown(doc: Doc): string {\n const chunks: string[] = [];\n for (const block of doc.blocks ?? []) {\n const md = blockToMarkdown(block as Any);\n if (md !== null) chunks.push(md);\n }\n return chunks.join(\"\\n\\n\") + (chunks.length > 0 ? \"\\n\" : \"\");\n}\n\nfunction blockToMarkdown(block: Any): string | null {\n switch (block?.type) {\n case \"heading\":\n return \"#\".repeat(clamp(block.level)) + \" \" + inline(block.runs ?? []);\n case \"paragraph\":\n return guardLineStart(inline(block.runs ?? []).replace(/\\n/g, \" \"));\n case \"list\":\n return listToMarkdown(block.items ?? [], block.ordered === true, 0).join(\"\\n\");\n case \"table\":\n return tableToMarkdown(block);\n case \"code\": {\n const lang = typeof block.language === \"string\" ? block.language : \"\";\n return \"```\" + lang + \"\\n\" + String(block.text ?? \"\") + \"\\n```\";\n }\n case \"quote\": {\n const inner = (block.blocks ?? [])\n .map((b: Any) => blockToMarkdown(b))\n .filter((s: string | null): s is string => s !== null)\n .join(\"\\n\\n\");\n return inner\n .split(\"\\n\")\n .map((line: string) => (line === \"\" ? \">\" : \"> \" + line))\n .join(\"\\n\");\n }\n case \"image\": {\n const alt = typeof block.alt === \"string\" ? block.alt : \"\";\n return `![${alt.replace(/([[\\]\\\\])/g, \"\\\\$1\")}](${String(block.src ?? \"\")})`;\n }\n case \"hr\":\n return \"---\";\n case \"pageBreak\":\n return null; // no GFM equivalent\n default:\n return null;\n }\n}\n\nfunction listToMarkdown(items: ListItem[], ordered: boolean, depth: number): string[] {\n const indent = (ordered ? \" \" : \" \").repeat(depth);\n const lines: string[] = [];\n items.forEach((item, i) => {\n const marker = ordered ? `${i + 1}. ` : \"- \";\n lines.push(indent + marker + inline(item.runs ?? []).replace(/\\n/g, \" \"));\n if (item.children && item.children.length > 0) {\n lines.push(...listToMarkdown(item.children, ordered, depth + 1));\n }\n });\n return lines;\n}\n\nfunction tableToMarkdown(block: Any): string {\n const rows: Any[] = block.rows ?? [];\n if (rows.length === 0) return \"\";\n const cols = Math.max(1, ...rows.map((r: Any) => (Array.isArray(r?.cells) ? r.cells.length : 0)));\n\n const lineOf = (row: Any): string => {\n const cells: Any[] = Array.isArray(row?.cells) ? row.cells : [];\n const rendered: string[] = [];\n for (let c = 0; c < cols; c++) {\n rendered.push(cellInline(cells[c]));\n }\n return \"| \" + rendered.join(\" | \") + \" |\";\n };\n\n const lines: string[] = [];\n lines.push(lineOf(rows[0]));\n lines.push(\"| \" + Array.from({ length: cols }, () => \"---\").join(\" | \") + \" |\");\n for (let r = 1; r < rows.length; r++) lines.push(lineOf(rows[r]));\n return lines.join(\"\\n\");\n}\n\nfunction cellInline(cell: Any): string {\n const blocks: Any[] = Array.isArray(cell?.blocks) ? cell.blocks : [];\n const parts: string[] = [];\n for (const b of blocks) {\n if (b?.type === \"paragraph\" || b?.type === \"heading\") parts.push(inline(b.runs ?? []));\n else if (b?.type === \"code\") parts.push(\"`\" + String(b.text ?? \"\").replace(/\\n/g, \" \") + \"`\");\n else {\n const md = blockToMarkdown(b);\n if (md !== null) parts.push(md.replace(/\\n/g, \" \"));\n }\n }\n return parts.join(\" \").replace(/\\|/g, \"\\\\|\").replace(/\\n/g, \" \");\n}\n\n// ── Inline runs → markdown ──────────────────────────────────────────────────\n\nfunction inline(runs: Run[]): string {\n let out = \"\";\n for (const run of runs) {\n out += runToMarkdown(run);\n }\n return out;\n}\n\nfunction runToMarkdown(run: Run): string {\n if (typeof run?.text !== \"string\") return \"\";\n let s = run.code ? codeSpan(run.text) : escapeText(run.text);\n if (run.bold) s = `**${s}**`;\n if (run.italic) s = `*${s}*`;\n if (run.strike) s = `~~${s}~~`;\n if (run.link) s = `[${s}](${run.link})`;\n return s;\n}\n\nfunction codeSpan(text: string): string {\n if (!text.includes(\"`\")) return \"`\" + text + \"`\";\n return \"`` \" + text + \" ``\";\n}\n\nfunction escapeText(text: string): string {\n return text.replace(/([\\\\`*_~[\\]])/g, \"\\\\$1\");\n}\n\n/** Escape a leading character that would re-parse as block syntax. */\nfunction guardLineStart(text: string): string {\n if (/^(#{1,6} |[-*+] |\\d+\\. |>|(-{3,}|\\*{3,}|_{3,})$|\\|)/.test(text)) {\n return \"\\\\\" + text;\n }\n return text;\n}\n\nfunction clamp(level: Any): number {\n const n = Number.isFinite(Number(level)) ? Math.trunc(Number(level)) : 1;\n return Math.min(6, Math.max(1, n));\n}\n","/** Shared helpers mirroring PHP loose semantics. */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isPlainObject(value: unknown): value is Record<string, any> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** PHP `is_numeric` (approx): number, or numeric string with optional leading ws. */\nexport function isNumeric(v: unknown): boolean {\n if (typeof v === \"number\") return Number.isFinite(v);\n if (typeof v !== \"string\") return false;\n return /^\\s*[+-]?(\\d+(\\.\\d+)?|\\.\\d+)([eE][+-]?\\d+)?$/.test(v);\n}\n\n/** structuredClone with JSON fallback. */\nexport function clone<T>(v: T): T {\n return typeof structuredClone === \"function\"\n ? structuredClone(v)\n : (JSON.parse(JSON.stringify(v)) as T);\n}\n","/**\n * Schema constants describing the Doc shape. Mirrors PHP `Schema\\Schema`.\n */\nexport const Schema = {\n VERSION: \"0.1.0\",\n\n BLOCK_TYPES: [\n \"heading\",\n \"paragraph\",\n \"list\",\n \"table\",\n \"code\",\n \"quote\",\n \"image\",\n \"pageBreak\",\n \"hr\",\n ] as const,\n ALIGNMENTS: [\"left\", \"center\", \"right\", \"justify\"] as const,\n MAX_HEADING_LEVEL: 6,\n\n docRequiredKeys(): string[] {\n return [\"blocks\"];\n },\n\n jsonSchema(): Record<string, unknown> {\n const runSchema = {\n type: \"object\",\n required: [\"text\"],\n properties: {\n text: { type: \"string\" },\n bold: { type: \"boolean\" },\n italic: { type: \"boolean\" },\n underline: { type: \"boolean\" },\n strike: { type: \"boolean\" },\n code: { type: \"boolean\" },\n link: { type: \"string\" },\n color: { type: \"string\", pattern: \"^#[0-9a-fA-F]{6}$\" },\n highlight: { type: \"string\", pattern: \"^#[0-9a-fA-F]{6}$\" },\n },\n };\n\n return {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n title: \"LastWord Doc\",\n type: \"object\",\n required: this.docRequiredKeys(),\n properties: {\n title: { type: \"string\" },\n blocks: { type: \"array\", items: { $ref: \"#/definitions/block\" } },\n },\n definitions: {\n run: runSchema,\n listItem: {\n type: \"object\",\n required: [\"runs\"],\n properties: {\n runs: { type: \"array\", items: { $ref: \"#/definitions/run\" } },\n children: { type: \"array\", items: { $ref: \"#/definitions/listItem\" } },\n },\n },\n block: {\n type: \"object\",\n required: [\"type\"],\n properties: {\n type: { type: \"string\", enum: [...this.BLOCK_TYPES] },\n // heading\n level: { type: \"integer\", minimum: 1, maximum: this.MAX_HEADING_LEVEL },\n // heading + paragraph\n runs: { type: \"array\", items: { $ref: \"#/definitions/run\" } },\n align: { type: \"string\", enum: [...this.ALIGNMENTS] },\n // list\n ordered: { type: \"boolean\" },\n items: { type: \"array\", items: { $ref: \"#/definitions/listItem\" } },\n // table\n rows: {\n type: \"array\",\n items: {\n type: \"object\",\n required: [\"cells\"],\n properties: {\n header: { type: \"boolean\" },\n cells: {\n type: \"array\",\n items: {\n type: \"object\",\n required: [\"blocks\"],\n properties: {\n blocks: { type: \"array\", items: { $ref: \"#/definitions/block\" } },\n },\n },\n },\n },\n },\n },\n // code\n language: { type: \"string\" },\n text: { type: \"string\" },\n // quote\n blocks: { type: \"array\", items: { $ref: \"#/definitions/block\" } },\n // image\n src: { type: \"string\" },\n widthPx: { type: \"number\", exclusiveMinimum: 0 },\n heightPx: { type: \"number\", exclusiveMinimum: 0 },\n alt: { type: \"string\" },\n },\n },\n },\n };\n },\n};\n","import { clone, isNumeric, isPlainObject } from \"../util\";\nimport { Schema } from \"./schema\";\nimport type { ValidationError } from \"./types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\n/**\n * Heuristic doc repair. Mirrors PHP `Schema\\Repairer`. Never mutates input.\n *\n * Heuristics:\n * - missing / non-array `blocks` → `[]`\n * - bare strings in `blocks` → paragraphs; `runs: \"text\"` → `[{ text }]`;\n * string entries inside a runs array → `{ text }`\n * - heading levels clamped to 1..6 (non-numeric → 1)\n * - unknown block types dropped, with the error retained in `notes`\n * - list items given as strings → `{ runs: [{ text }] }`\n */\nexport class Repairer {\n /** Errors describing content the last `repair()` call had to drop. */\n notes: ValidationError[] = [];\n\n repair(docInput: Any): Record<string, unknown> {\n this.notes = [];\n const doc: Any = isPlainObject(docInput) ? clone(docInput) : {};\n\n if (doc.title !== undefined && typeof doc.title !== \"string\") {\n doc.title = String(doc.title);\n }\n doc.blocks = this.repairBlocks(doc.blocks ?? [], \"/blocks\");\n\n return doc;\n }\n\n private repairBlocks(blocks: Any, path: string): Record<string, unknown>[] {\n if (!Array.isArray(blocks)) return [];\n const out: Record<string, unknown>[] = [];\n blocks.forEach((block: Any, i: number) => {\n const repaired = this.repairBlock(block, `${path}/${i}`);\n if (repaired !== null) out.push(repaired);\n });\n return out;\n }\n\n private repairBlock(block: Any, path: string): Record<string, unknown> | null {\n // A bare string block coerces to a paragraph.\n if (typeof block === \"string\") {\n return { type: \"paragraph\", runs: [{ text: block }] };\n }\n if (!isPlainObject(block)) {\n this.notes.push({ path, message: \"Dropped non-object block during repair.\" });\n return null;\n }\n if (typeof block.type !== \"string\" || !(Schema.BLOCK_TYPES as readonly string[]).includes(block.type)) {\n // Common LLM slip: `{ type: \"text\", text: \"…\" }` → paragraph.\n if (typeof block.text === \"string\") {\n return { type: \"paragraph\", runs: [{ text: block.text }] };\n }\n this.notes.push({\n path: `${path}/type`,\n message: `Dropped block with unknown type \\`${String(block.type)}\\` during repair.`,\n });\n return null;\n }\n\n switch (block.type) {\n case \"heading\": {\n let level = isNumeric(block.level) ? Math.trunc(Number(block.level)) : 1;\n if (level < 1) level = 1;\n if (level > Schema.MAX_HEADING_LEVEL) level = Schema.MAX_HEADING_LEVEL;\n block.level = level;\n block.runs = this.repairRuns(block.runs);\n break;\n }\n case \"paragraph\":\n block.runs = this.repairRuns(block.runs);\n if (block.align !== undefined && !(Schema.ALIGNMENTS as readonly string[]).includes(block.align)) {\n delete block.align;\n }\n break;\n\n case \"list\":\n if (block.ordered !== undefined) block.ordered = Boolean(block.ordered);\n block.items = this.repairListItems(block.items);\n break;\n\n case \"table\":\n block.rows = this.repairRows(block.rows, path);\n break;\n\n case \"code\":\n block.text = typeof block.text === \"string\" ? block.text : String(block.text ?? \"\");\n if (block.language !== undefined && typeof block.language !== \"string\") delete block.language;\n break;\n\n case \"quote\":\n block.blocks = this.repairBlocks(block.blocks ?? [], `${path}/blocks`);\n break;\n\n case \"image\":\n if (typeof block.src !== \"string\" || !block.src.startsWith(\"data:image/\")) {\n this.notes.push({ path: `${path}/src`, message: \"Dropped image without a usable data URL during repair.\" });\n return null;\n }\n for (const key of [\"widthPx\", \"heightPx\"] as const) {\n if (block[key] !== undefined && (!isNumeric(block[key]) || Number(block[key]) <= 0)) {\n delete block[key];\n } else if (block[key] !== undefined) {\n block[key] = Number(block[key]);\n }\n }\n if (block.alt !== undefined && typeof block.alt !== \"string\") delete block.alt;\n break;\n\n case \"pageBreak\":\n case \"hr\":\n break;\n }\n\n return block;\n }\n\n private repairRuns(runs: Any): Record<string, unknown>[] {\n // A bare string coerces to a single run.\n if (typeof runs === \"string\") return [{ text: runs }];\n if (!Array.isArray(runs)) return [];\n const out: Record<string, unknown>[] = [];\n for (const run of runs) {\n if (typeof run === \"string\") {\n out.push({ text: run });\n continue;\n }\n if (!isPlainObject(run)) continue;\n if (typeof run.text !== \"string\") run.text = String(run.text ?? \"\");\n for (const flag of [\"bold\", \"italic\", \"underline\", \"strike\", \"code\"] as const) {\n if (run[flag] !== undefined && typeof run[flag] !== \"boolean\") run[flag] = Boolean(run[flag]);\n }\n if (run.link !== undefined && typeof run.link !== \"string\") delete run.link;\n for (const key of [\"color\", \"highlight\"] as const) {\n if (run[key] !== undefined && (typeof run[key] !== \"string\" || !/^#[0-9a-fA-F]{6}$/.test(run[key]))) {\n delete run[key];\n }\n }\n out.push(run);\n }\n return out;\n }\n\n private repairListItems(items: Any): Record<string, unknown>[] {\n if (!Array.isArray(items)) return [];\n const out: Record<string, unknown>[] = [];\n for (const item of items) {\n if (typeof item === \"string\") {\n out.push({ runs: [{ text: item }] });\n continue;\n }\n if (!isPlainObject(item)) continue;\n item.runs = this.repairRuns(item.runs);\n if (item.children !== undefined) {\n const children = this.repairListItems(item.children);\n if (children.length > 0) item.children = children;\n else delete item.children;\n }\n out.push(item);\n }\n return out;\n }\n\n private repairRows(rows: Any, path: string): Record<string, unknown>[] {\n if (!Array.isArray(rows)) return [];\n const out: Record<string, unknown>[] = [];\n rows.forEach((row: Any, r: number) => {\n if (!isPlainObject(row)) return;\n if (row.header !== undefined) row.header = Boolean(row.header);\n const cells = Array.isArray(row.cells) ? row.cells : [];\n row.cells = cells\n .filter((cell: Any) => isPlainObject(cell) || typeof cell === \"string\")\n .map((cell: Any, c: number) => {\n if (typeof cell === \"string\") {\n return { blocks: [{ type: \"paragraph\", runs: [{ text: cell }] }] };\n }\n cell.blocks = this.repairBlocks(cell.blocks ?? [], `${path}/rows/${r}/cells/${c}/blocks`);\n return cell;\n });\n out.push(row);\n });\n return out;\n }\n}\n","import { isPlainObject } from \"../util\";\nimport { Schema } from \"./schema\";\nimport type { ValidationError } from \"./types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\nfunction err(path: string, message: string): ValidationError {\n return { path, message };\n}\n\n/** Liberal schema validator. Mirrors PHP `Schema\\Validator`. */\nexport class Validator {\n validate(doc: Any): ValidationError[] {\n const errors: ValidationError[] = [];\n if (!isPlainObject(doc)) {\n return [err(\"/\", \"Doc must be a JSON object with a `blocks` array.\")];\n }\n\n if (doc.title !== undefined && typeof doc.title !== \"string\") {\n errors.push(err(\"/title\", \"Doc title must be a string.\"));\n }\n\n if (!(\"blocks\" in doc)) {\n errors.push(err(\"/blocks\", \"Doc must have a `blocks` array.\"));\n } else if (!Array.isArray(doc.blocks)) {\n errors.push(err(\"/blocks\", \"Doc blocks must be a JSON array.\"));\n } else {\n doc.blocks.forEach((block: Any, i: number) => {\n errors.push(...this.validateBlock(block, `/blocks/${i}`));\n });\n }\n\n return errors;\n }\n\n validateBlock(block: Any, path: string): ValidationError[] {\n const errors: ValidationError[] = [];\n if (!isPlainObject(block)) {\n return [err(path, \"Each block must be a JSON object with a `type` field.\")];\n }\n if (typeof block.type !== \"string\") {\n return [err(`${path}/type`, \"Block must have a string `type` field.\")];\n }\n if (!(Schema.BLOCK_TYPES as readonly string[]).includes(block.type)) {\n return [err(`${path}/type`, `Unknown block type \\`${block.type}\\`.`)];\n }\n\n switch (block.type) {\n case \"heading\":\n if (!Number.isInteger(block.level) || block.level < 1 || block.level > Schema.MAX_HEADING_LEVEL) {\n errors.push(err(`${path}/level`, `Heading level must be an integer between 1 and ${Schema.MAX_HEADING_LEVEL}.`));\n }\n errors.push(...this.validateRuns(block.runs, `${path}/runs`));\n break;\n\n case \"paragraph\":\n errors.push(...this.validateRuns(block.runs, `${path}/runs`));\n if (block.align !== undefined && !(Schema.ALIGNMENTS as readonly string[]).includes(block.align)) {\n errors.push(err(`${path}/align`, \"Paragraph align must be left, center, right, or justify.\"));\n }\n break;\n\n case \"list\":\n if (block.ordered !== undefined && typeof block.ordered !== \"boolean\") {\n errors.push(err(`${path}/ordered`, \"List `ordered` must be a boolean.\"));\n }\n if (!Array.isArray(block.items)) {\n errors.push(err(`${path}/items`, \"List must have an `items` array.\"));\n } else {\n block.items.forEach((item: Any, i: number) => {\n errors.push(...this.validateListItem(item, `${path}/items/${i}`));\n });\n }\n break;\n\n case \"table\":\n if (!Array.isArray(block.rows)) {\n errors.push(err(`${path}/rows`, \"Table must have a `rows` array.\"));\n } else {\n block.rows.forEach((row: Any, r: number) => {\n const rowPath = `${path}/rows/${r}`;\n if (!isPlainObject(row)) {\n errors.push(err(rowPath, \"Each table row must be a JSON object with a `cells` array.\"));\n return;\n }\n if (row.header !== undefined && typeof row.header !== \"boolean\") {\n errors.push(err(`${rowPath}/header`, \"Row `header` must be a boolean.\"));\n }\n if (!Array.isArray(row.cells)) {\n errors.push(err(`${rowPath}/cells`, \"Table row must have a `cells` array.\"));\n return;\n }\n row.cells.forEach((cell: Any, c: number) => {\n const cellPath = `${rowPath}/cells/${c}`;\n if (!isPlainObject(cell)) {\n errors.push(err(cellPath, \"Each table cell must be a JSON object with a `blocks` array.\"));\n return;\n }\n if (!Array.isArray(cell.blocks)) {\n errors.push(err(`${cellPath}/blocks`, \"Table cell must have a `blocks` array.\"));\n return;\n }\n cell.blocks.forEach((b: Any, i: number) => {\n errors.push(...this.validateBlock(b, `${cellPath}/blocks/${i}`));\n });\n });\n });\n }\n break;\n\n case \"code\":\n if (typeof block.text !== \"string\") {\n errors.push(err(`${path}/text`, \"Code block must have a string `text` field.\"));\n }\n if (block.language !== undefined && typeof block.language !== \"string\") {\n errors.push(err(`${path}/language`, \"Code block `language` must be a string.\"));\n }\n break;\n\n case \"quote\":\n if (!Array.isArray(block.blocks)) {\n errors.push(err(`${path}/blocks`, \"Quote must have a `blocks` array.\"));\n } else {\n block.blocks.forEach((b: Any, i: number) => {\n errors.push(...this.validateBlock(b, `${path}/blocks/${i}`));\n });\n }\n break;\n\n case \"image\":\n if (typeof block.src !== \"string\" || block.src === \"\") {\n errors.push(err(`${path}/src`, \"Image must have a `src` data URL string.\"));\n } else if (!block.src.startsWith(\"data:image/\")) {\n errors.push(err(`${path}/src`, \"Image `src` must be a data:image/png or data:image/jpeg data URL.\"));\n }\n for (const key of [\"widthPx\", \"heightPx\"] as const) {\n if (block[key] !== undefined && (typeof block[key] !== \"number\" || !(block[key] > 0))) {\n errors.push(err(`${path}/${key}`, `Image \\`${key}\\` must be a positive number.`));\n }\n }\n if (block.alt !== undefined && typeof block.alt !== \"string\") {\n errors.push(err(`${path}/alt`, \"Image `alt` must be a string.\"));\n }\n break;\n\n case \"pageBreak\":\n case \"hr\":\n break;\n }\n\n return errors;\n }\n\n private validateRuns(runs: Any, path: string): ValidationError[] {\n const errors: ValidationError[] = [];\n if (!Array.isArray(runs)) {\n return [err(path, \"Must be an array of runs (`{ text, bold?, italic?, … }`).\")];\n }\n runs.forEach((run: Any, i: number) => {\n errors.push(...this.validateRun(run, `${path}/${i}`));\n });\n return errors;\n }\n\n private validateRun(run: Any, path: string): ValidationError[] {\n const errors: ValidationError[] = [];\n if (!isPlainObject(run)) {\n return [err(path, \"Each run must be a JSON object with a `text` field.\")];\n }\n if (typeof run.text !== \"string\") {\n errors.push(err(`${path}/text`, \"Run must have a string `text` field.\"));\n }\n for (const flag of [\"bold\", \"italic\", \"underline\", \"strike\", \"code\"] as const) {\n if (run[flag] !== undefined && typeof run[flag] !== \"boolean\") {\n errors.push(err(`${path}/${flag}`, `Run \\`${flag}\\` must be a boolean.`));\n }\n }\n if (run.link !== undefined && typeof run.link !== \"string\") {\n errors.push(err(`${path}/link`, \"Run `link` must be a URL string.\"));\n }\n for (const key of [\"color\", \"highlight\"] as const) {\n if (run[key] !== undefined && (typeof run[key] !== \"string\" || !/^#[0-9a-fA-F]{6}$/.test(run[key]))) {\n errors.push(err(`${path}/${key}`, `Run \\`${key}\\` must be a #RRGGBB hex string.`));\n }\n }\n return errors;\n }\n\n private validateListItem(item: Any, path: string): ValidationError[] {\n const errors: ValidationError[] = [];\n if (!isPlainObject(item)) {\n return [err(path, \"Each list item must be a JSON object with a `runs` array.\")];\n }\n errors.push(...this.validateRuns(item.runs, `${path}/runs`));\n if (item.children !== undefined) {\n if (!Array.isArray(item.children)) {\n errors.push(err(`${path}/children`, \"List item `children` must be an array of list items.\"));\n } else {\n item.children.forEach((child: Any, i: number) => {\n errors.push(...this.validateListItem(child, `${path}/children/${i}`));\n });\n }\n }\n return errors;\n }\n}\n","/**\n * Agent — the structured-tool surface for LastWord. Mirrors PHP `Agent`.\n * Universal methods are synchronous; file-touching methods (`write`) are async\n * and Node-only (browsers have no sync FS).\n */\n\nimport { SchemaException } from \"./exceptions\";\nimport { fromMarkdown } from \"./markdown/from-markdown\";\nimport { toMarkdown } from \"./markdown/to-markdown\";\nimport { DocxReader } from \"./reader/docx-reader\";\nimport { Repairer } from \"./schema/repairer\";\nimport { Schema } from \"./schema/schema\";\nimport type { Block, Doc, ListItem, RepairResult, ValidationError, WriteResult } from \"./schema/types\";\nimport { Validator } from \"./schema/validator\";\nimport { DocxWriter } from \"./writer/docx-writer\";\n\n/** Feature-parity baseline with PHP last-word; bumped independently on npm. */\nexport const VERSION = \"0.1.0\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Any = any;\n\nfunction toU8(input: Uint8Array | ArrayBuffer): Uint8Array {\n return input instanceof Uint8Array ? input : new Uint8Array(input);\n}\n\nfunction assertValid(doc: Any): void {\n const errors = new Validator().validate(doc);\n if (errors.length > 0) {\n throw new SchemaException(\n \"Doc failed schema validation. Call Agent.validateAndRepair() for a recoverable form.\",\n errors,\n );\n }\n}\n\nexport const Agent = {\n /** Validate a doc without writing. Empty array = valid. */\n validate(doc: Any): ValidationError[] {\n return new Validator().validate(doc);\n },\n\n /**\n * Validate + apply heuristic repairs (coerce strings to runs, clamp heading\n * levels, drop unknown block types with the error retained, default missing\n * blocks to []). Returns `{ ok, schema, errors }` where `ok` is true when\n * the repaired doc validates clean; `errors` retains anything the repair\n * dropped plus any remaining validation errors.\n */\n validateAndRepair(doc: Any): RepairResult {\n const errors = this.validate(doc);\n if (errors.length === 0) {\n return { ok: true, schema: doc, errors: [] };\n }\n const repairer = new Repairer();\n const repaired = repairer.repair(doc) as Doc;\n const remaining = this.validate(repaired);\n\n return {\n ok: remaining.length === 0,\n schema: repaired,\n errors: [...repairer.notes, ...remaining],\n };\n },\n\n /** DOCX bytes for a doc (no temp file). Universal. Throws SchemaException if invalid. */\n toBytes(doc: Any): Uint8Array {\n assertValid(doc);\n return new DocxWriter().toBytes(doc);\n },\n\n /** Write a doc to disk as a .docx file (Node only). Throws SchemaException if invalid. */\n async write(doc: Any, path: string): Promise<WriteResult> {\n assertValid(doc);\n const bytes = new DocxWriter().toBytes(doc);\n const fs = await import(\"node:fs\");\n fs.writeFileSync(path, bytes);\n return { path, bytes: bytes.length, blocks: doc?.blocks?.length ?? 0 };\n },\n\n /** Read .docx bytes back into the Doc model. Universal. */\n read(input: Uint8Array | ArrayBuffer): Doc {\n return new DocxReader().read(toU8(input));\n },\n\n /** Alias for {@see read}. */\n fromBytes(input: Uint8Array | ArrayBuffer): Doc {\n return new DocxReader().read(toU8(input));\n },\n\n /** Doc → GFM markdown (the Editor bridge). */\n toMarkdown(doc: Any): string {\n return toMarkdown(doc);\n },\n\n /** GFM markdown → Doc (the Editor bridge). */\n fromMarkdown(markdown: string): Doc {\n return fromMarkdown(markdown);\n },\n\n /** Plain-text summary of a doc: title, block counts by type, word count. */\n describe(doc: Any): string {\n const title = String(doc?.title ?? \"Untitled\");\n const blocks: Any[] = Array.isArray(doc?.blocks) ? doc.blocks : [];\n\n const counts: Record<string, number> = {};\n for (const block of blocks) {\n const type = String(block?.type ?? \"unknown\");\n counts[type] = (counts[type] ?? 0) + 1;\n }\n\n const lines = [`Doc: ${title}`, `Blocks: ${blocks.length}`];\n const keys = Object.keys(counts);\n if (keys.length > 0) {\n lines.push(\"Kinds: \" + keys.map((type) => `${counts[type]} ${type}`).join(\", \"));\n }\n lines.push(`Words: ${countWords(blocks)}`);\n\n return lines.join(\"\\n\");\n },\n\n /** JSON Schema export for LLM tool-use registration. */\n jsonSchema(): Record<string, unknown> {\n return Schema.jsonSchema();\n },\n\n version(): string {\n return VERSION;\n },\n};\n\n/** Prose word count: every run in headings, paragraphs, lists, tables, quotes. */\nfunction countWords(blocks: Block[]): number {\n let text = \"\";\n const visitRuns = (runs: Any[] | undefined): void => {\n for (const run of runs ?? []) {\n if (typeof run?.text === \"string\") text += run.text + \" \";\n }\n };\n const visitItems = (items: ListItem[] | undefined): void => {\n for (const item of items ?? []) {\n visitRuns(item.runs as Any[]);\n visitItems(item.children);\n }\n };\n const visit = (list: Any[]): void => {\n for (const block of list ?? []) {\n switch (block?.type) {\n case \"heading\":\n case \"paragraph\":\n visitRuns(block.runs);\n break;\n case \"list\":\n visitItems(block.items);\n break;\n case \"table\":\n for (const row of block.rows ?? []) {\n for (const cell of row?.cells ?? []) visit(cell?.blocks ?? []);\n }\n break;\n case \"quote\":\n visit(block.blocks ?? []);\n break;\n default:\n break;\n }\n }\n };\n visit(blocks as Any[]);\n return text.split(/\\s+/).filter(Boolean).length;\n}\n"]}
|