@alosha/xlsx 0.3.1 → 0.4.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/model/enums.ts","../src/model/cell-value.ts","../src/model/style.ts","../src/model/cell.ts","../src/address/col-cache.ts","../src/address/range.ts","../src/model/column.ts","../src/model/row.ts","../src/model/worksheet.ts","../src/model/workbook.ts","../src/xlsx/date.ts","../src/xlsx/parts/constants.ts","../src/xml/xml-reader.ts","../src/xml/xml-writer.ts","../src/zip-layer.ts","../src/xlsx/read/package.ts","../src/xlsx/read/props.ts","../src/xlsx/read/shared-strings.ts","../src/xlsx/styles.ts","../src/xlsx/read/styles.ts","../src/xlsx/read/workbook.ts","../src/xlsx/read/worksheet.ts","../src/xlsx/read-workbook.ts","../src/xlsx/shared-strings.ts","../src/xlsx/parts/app-props.ts","../src/xlsx/parts/content-types.ts","../src/xlsx/parts/core-props.ts","../src/xlsx/parts/root-rels.ts","../src/xlsx/parts/theme.ts","../src/xlsx/parts/workbook.ts","../src/xlsx/parts/workbook-rels.ts","../src/xlsx/parts/worksheet.ts","../src/xlsx/write-workbook.ts","../src/index.ts"],"names":["CellType","FormulaType","num","ws","name","unzipSync","zipSync","parseColor","truthy","SPREADSHEETML_NS","renderColor","renderUnderline"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Typed error hierarchy for @alosha/xlsx.\n *\n * Every error thrown by the library extends {@link AloshaXlsxError}, so callers can do:\n *\n * try { ws.name = 'a/b'; }\n * catch (e) {\n * if (e instanceof AloshaXlsxError) console.log(e.code); // stable, minify-safe\n * }\n *\n * The `code` string is the stable programmatic handle (safe across bundling/minification, unlike\n * `name`/`instanceof` across realms). Prefer switching on `code`. Design goal (see docs/API-AUDIT.md §5):\n * replace ExcelJS's `console.warn`/`console.trace` side effects with thrown, inspectable errors.\n */\n\nexport type AloshaXlsxErrorCode =\n | \"INVALID_ADDRESS\"\n | \"INVALID_RANGE\"\n | \"INVALID_WORKSHEET_NAME\"\n | \"RESERVED_WORKSHEET_NAME\"\n | \"DUPLICATE_WORKSHEET_NAME\"\n | \"WORKSHEET_NAME_TOO_LONG\"\n | \"MERGE_CONFLICT\"\n | \"INVALID_ROW_NUMBER\"\n | \"INVALID_CELL_VALUE\"\n | \"UNSUPPORTED_FEATURE\"\n | \"INVALID_PACKAGE\";\n\n/**\n * Base class for all library errors. Abstract — never thrown directly; always a concrete subclass.\n * Sets `name` from the concrete class and repairs the prototype chain so `instanceof` holds even when\n * compiled to older targets.\n */\nexport abstract class AloshaXlsxError extends Error {\n /** Stable, machine-readable discriminator. Prefer this over `name`/`instanceof`. */\n abstract readonly code: AloshaXlsxErrorCode;\n\n constructor(message: string) {\n super(message);\n // `new.target` is the concrete subclass being constructed.\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Narrowing type guard for library errors. */\nexport function isAloshaXlsxError(e: unknown): e is AloshaXlsxError {\n return e instanceof AloshaXlsxError;\n}\n\n// ---------------------------------------------------------------------------\n// Addresses & ranges (src/address/*)\n// ---------------------------------------------------------------------------\n\n/** A cell address or column letter could not be parsed (e.g. `''`, `'A0'`, `'1A'`, `'@'`). */\nexport class InvalidAddressError extends AloshaXlsxError {\n readonly code = \"INVALID_ADDRESS\" as const;\n constructor(public readonly address: string) {\n super(`Invalid cell address: ${JSON.stringify(address)}`);\n }\n}\n\n/** A range could not be parsed from the supplied source (e.g. `'A1:'`, malformed tuple). */\nexport class InvalidRangeError extends AloshaXlsxError {\n readonly code = \"INVALID_RANGE\" as const;\n constructor(public readonly range: unknown) {\n super(`Invalid range: ${JSON.stringify(range)}`);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Worksheet naming (Worksheet#name setter — see docs/API-AUDIT.md §2)\n// ---------------------------------------------------------------------------\n\n/** Why a worksheet name was rejected (illegal-character/empty/edge-quote cases). */\nexport type InvalidWorksheetNameReason = \"empty\" | \"illegal-characters\" | \"edge-quote\";\n\n/** Worksheet name is empty, contains `* ? : / \\ [ ]`, or starts/ends with a single quote. */\nexport class InvalidWorksheetNameError extends AloshaXlsxError {\n readonly code = \"INVALID_WORKSHEET_NAME\" as const;\n constructor(\n public readonly worksheetName: string,\n public readonly reason: InvalidWorksheetNameReason,\n ) {\n super(InvalidWorksheetNameError.messageFor(worksheetName, reason));\n }\n\n private static messageFor(name: string, reason: InvalidWorksheetNameReason): string {\n switch (reason) {\n case \"empty\":\n return \"Worksheet name cannot be empty.\";\n case \"edge-quote\":\n return `Worksheet name cannot start or end with a single quote: ${JSON.stringify(name)}`;\n case \"illegal-characters\":\n return `Worksheet name ${JSON.stringify(name)} cannot include any of: * ? : \\\\ / [ ]`;\n }\n }\n}\n\n/** Worksheet name uses a reserved word (Excel reserves `\"History\"`). */\nexport class ReservedWorksheetNameError extends AloshaXlsxError {\n readonly code = \"RESERVED_WORKSHEET_NAME\" as const;\n constructor(public readonly worksheetName: string) {\n super(`Worksheet name is reserved and cannot be used: ${JSON.stringify(worksheetName)}`);\n }\n}\n\n/** A worksheet with this name already exists in the workbook (comparison is case-insensitive). */\nexport class DuplicateWorksheetNameError extends AloshaXlsxError {\n readonly code = \"DUPLICATE_WORKSHEET_NAME\" as const;\n constructor(public readonly worksheetName: string) {\n super(`Worksheet name already exists: ${JSON.stringify(worksheetName)}`);\n }\n}\n\n/**\n * Worksheet name exceeds Excel's limit. Unlike ExcelJS (which warns + silently truncates), the model\n * throws so the caller decides — see docs/STAGE-1.2-SPEC.md §7.\n */\nexport class WorksheetNameTooLongError extends AloshaXlsxError {\n readonly code = \"WORKSHEET_NAME_TOO_LONG\" as const;\n /** Excel's hard cap on sheet-name length. */\n static readonly MAX_LENGTH = 31;\n constructor(\n public readonly worksheetName: string,\n public readonly maxLength: number = WorksheetNameTooLongError.MAX_LENGTH,\n ) {\n super(\n `Worksheet name exceeds ${maxLength} characters (got ${worksheetName.length}): ` +\n `${JSON.stringify(worksheetName)}`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Cells, rows & merges (src/model/*)\n// ---------------------------------------------------------------------------\n\n/** Attempted to merge a region that overlaps an existing merge (merges are atomic — API-AUDIT §2). */\nexport class MergeConflictError extends AloshaXlsxError {\n readonly code = \"MERGE_CONFLICT\" as const;\n constructor(public readonly range: string) {\n super(`Cannot merge cells: range ${JSON.stringify(range)} overlaps an existing merge.`);\n }\n}\n\n/** A row model's `number` does not match the row it is being assigned to (model round-trip guard). */\nexport class InvalidRowNumberError extends AloshaXlsxError {\n readonly code = \"INVALID_ROW_NUMBER\" as const;\n constructor(\n public readonly expected: number,\n public readonly actual: number,\n ) {\n super(`Invalid row number in model: expected ${expected}, got ${actual}.`);\n }\n}\n\n/** A value passed to `cell.value` is not a supported {@link import('./model/cell-value').CellValue}. */\nexport class InvalidCellValueError extends AloshaXlsxError {\n readonly code = \"INVALID_CELL_VALUE\" as const;\n constructor(public readonly value: unknown) {\n super(`Unsupported cell value: ${InvalidCellValueError.describe(value)}`);\n }\n\n private static describe(value: unknown): string {\n const t = value === null ? \"null\" : typeof value;\n return t === \"object\"\n ? `object ${Object.prototype.toString.call(value)}`\n : `${t} (${String(value)})`;\n }\n}\n\n/**\n * A feature not implemented in the current stage was invoked (pivot tables, conditional formatting,\n * drawings, tables, data validation, comments, protection — deferred to Stage 2; see STAGE-1.2-SPEC §9).\n * Use to fail loudly on stubs instead of silently no-op'ing.\n */\nexport class UnsupportedFeatureError extends AloshaXlsxError {\n readonly code = \"UNSUPPORTED_FEATURE\" as const;\n constructor(\n public readonly feature: string,\n /** Optional pointer appended to the message (e.g. the compat shim's tracking-issue note). */\n public readonly detail?: string,\n ) {\n super(\n detail === undefined\n ? `Feature not yet supported in @alosha/xlsx: ${feature}`\n : `${feature}: ${detail}`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Package structure (src/xlsx/read/package.ts, STAGE-2-SPEC.md §3)\n// ---------------------------------------------------------------------------\n\n/**\n * The `.xlsx` package's OPC structure (zip / rels / parts) is missing or malformed: a truncated/corrupt\n * zip, a missing `_rels/.rels` or workbook part, or a relationship that cannot be resolved. Thrown by\n * `openPackage` before any SpreadsheetML parsing begins.\n */\nexport class InvalidPackageError extends AloshaXlsxError {\n readonly code = \"INVALID_PACKAGE\" as const;\n constructor(public readonly reason: string) {\n super(`Invalid .xlsx package: ${reason}`);\n }\n}\n","// Cell-type and formula-type enums, plus the OOXML error-code union. Keeps the *set* of value\n// types from ExcelJS (see docs/API-AUDIT.md §ValueType) but drops its numeric-wire coupling — the\n// OOXML `t=` mapping lives in the Stage 1.3 serializer, not here.\n\nexport enum CellType {\n Null = 0,\n Number = 1,\n String = 2,\n Boolean = 3,\n Date = 4,\n Error = 5,\n RichText = 6,\n Hyperlink = 7,\n Formula = 8,\n Merge = 9,\n SharedString = 10,\n}\n\nexport enum FormulaType {\n None = 0,\n Master = 1,\n Shared = 2,\n}\n\nexport type ErrorCode = \"#N/A\" | \"#REF!\" | \"#NAME?\" | \"#DIV/0!\" | \"#NULL!\" | \"#VALUE!\" | \"#NUM!\";\n","// The cell value union + pure helpers. Replaces ExcelJS's 12 Value strategy classes with a\n// discriminated union and free functions (see docs/API-AUDIT.md §5) — same behavior, no\n// per-cell class allocation.\n//\n// `Font` is a type-only import: style.ts has no dependency back on this module, so this does not\n// introduce an import cycle, and `import type` is erased entirely at build time.\n\nimport { InvalidCellValueError } from \"../errors.js\";\nimport { CellType, type ErrorCode } from \"./enums.js\";\nimport type { Font } from \"./style.js\";\n\nexport interface RichTextRun {\n text: string;\n font?: Font;\n}\n\nexport interface RichText {\n richText: RichTextRun[];\n}\n\nexport interface Hyperlink {\n text: string;\n hyperlink: string;\n tooltip?: string;\n}\n\nexport interface CellError {\n error: ErrorCode;\n}\n\nexport interface CellFormula {\n formula?: string;\n sharedFormula?: string;\n ref?: string;\n shareType?: \"shared\" | \"array\";\n result?: number | string | boolean | Date | CellError;\n}\n\n/** What callers pass to `cell.value = …` and read back. */\nexport type CellValue =\n | null\n | number\n | string\n | boolean\n | Date\n | CellError\n | RichText\n | Hyperlink\n | CellFormula;\n\n/** Internal normalized storage on the cell model (discriminated on `type`). */\nexport type StoredValue =\n | { type: CellType.Null }\n | { type: CellType.Number; value: number }\n | { type: CellType.String; value: string }\n | { type: CellType.Boolean; value: boolean }\n | { type: CellType.Date; value: Date }\n | { type: CellType.Error; value: CellError }\n | { type: CellType.RichText; value: RichText }\n | { type: CellType.Hyperlink; value: Hyperlink }\n | { type: CellType.Formula; value: CellFormula }\n | { type: CellType.Merge; master: string }\n | { type: CellType.SharedString; value: number };\n\n/**\n * Duck-type a `CellValue` into a `CellType`, mirroring ExcelJS's `Value.getType` check order:\n * null → string → number → boolean → date → hyperlink (`text`&`hyperlink`) → formula\n * (`formula`|`sharedFormula`) → richText → error. Throws {@link InvalidCellValueError} for\n * anything else.\n */\nexport function detectType(v: CellValue): CellType {\n if (v === null) return CellType.Null;\n if (typeof v === \"string\") return CellType.String;\n if (typeof v === \"number\") return CellType.Number;\n if (typeof v === \"boolean\") return CellType.Boolean;\n if (v instanceof Date) return CellType.Date;\n if (\"text\" in v && \"hyperlink\" in v) return CellType.Hyperlink;\n if (\"formula\" in v || \"sharedFormula\" in v) return CellType.Formula;\n if (\"richText\" in v) return CellType.RichText;\n if (\"error\" in v) return CellType.Error;\n throw new InvalidCellValueError(v);\n}\n\n/** Normalizes an ergonomic `CellValue` into its discriminated `StoredValue` form. */\nexport function toStored(v: CellValue): StoredValue {\n switch (detectType(v)) {\n case CellType.Null:\n return { type: CellType.Null };\n case CellType.String:\n return { type: CellType.String, value: v as string };\n case CellType.Number:\n return { type: CellType.Number, value: v as number };\n case CellType.Boolean:\n return { type: CellType.Boolean, value: v as boolean };\n case CellType.Date:\n return { type: CellType.Date, value: v as Date };\n case CellType.Hyperlink:\n return { type: CellType.Hyperlink, value: v as Hyperlink };\n case CellType.Formula:\n return { type: CellType.Formula, value: v as CellFormula };\n case CellType.RichText:\n return { type: CellType.RichText, value: v as RichText };\n case CellType.Error:\n return { type: CellType.Error, value: v as CellError };\n default:\n throw new InvalidCellValueError(v);\n }\n}\n\n/**\n * Recovers the ergonomic `CellValue` from a `StoredValue`. `Merge` (resolved via the master cell)\n * and `SharedString` (resolved via the shared-strings pool, Stage 1.3) have no `CellValue`\n * equivalent of their own and read back as `null`.\n */\nexport function fromStored(s: StoredValue): CellValue {\n switch (s.type) {\n case CellType.Null:\n case CellType.Merge:\n case CellType.SharedString:\n return null;\n case CellType.Number:\n case CellType.String:\n case CellType.Boolean:\n case CellType.Date:\n case CellType.Error:\n case CellType.RichText:\n case CellType.Hyperlink:\n case CellType.Formula:\n return s.value;\n }\n}\n\n/** For a formula cell, the type of its cached `result`; else the cell's own type. */\nexport function effectiveType(s: StoredValue): CellType {\n if (s.type !== CellType.Formula) return s.type;\n\n const { result } = s.value;\n if (result === undefined) return CellType.Null;\n if (typeof result === \"number\") return CellType.Number;\n if (typeof result === \"string\") return CellType.String;\n if (typeof result === \"boolean\") return CellType.Boolean;\n if (result instanceof Date) return CellType.Date;\n return CellType.Error;\n}\n\nfunction primitiveToText(value: number | string | boolean | Date | CellError): string {\n if (typeof value === \"number\") return String(value);\n if (typeof value === \"string\") return value;\n if (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n if (value instanceof Date) return value.toISOString();\n return value.error;\n}\n\n/** Display string for a stored value (no number-format application — that's Stage 1.3). */\nexport function toText(s: StoredValue): string {\n switch (s.type) {\n case CellType.Null:\n case CellType.Merge:\n case CellType.SharedString:\n return \"\";\n case CellType.Number:\n case CellType.String:\n case CellType.Boolean:\n case CellType.Date:\n case CellType.Error:\n return primitiveToText(s.value);\n case CellType.RichText:\n return s.value.richText.map((run) => run.text).join(\"\");\n case CellType.Hyperlink:\n return s.value.text;\n case CellType.Formula: {\n const { result } = s.value;\n return result === undefined ? \"\" : primitiveToText(result);\n }\n }\n}\n\nconst CSV_SPECIAL_RE = /[\"\\n\\r,]/;\n\n/** CSV-escaped rendering of a stored value: quotes the field and doubles internal quotes when it\n * contains a comma, quote, or newline. */\nexport function toCsv(s: StoredValue): string {\n const text = toText(s);\n if (!CSV_SPECIAL_RE.test(text)) return text;\n return `\"${text.replace(/\"/g, '\"\"')}\"`;\n}\n","// Style & format types (see docs/STAGE-1.2-SPEC.md §4 / docs/API-AUDIT.md §4). All fields are\n// optional — a cell may set only e.g. `font.bold`, leaving the rest to inherit from row/column.\n\nexport interface Color {\n argb?: string;\n theme?: number;\n indexed?: number;\n}\n\nexport interface Font {\n name?: string;\n size?: number;\n family?: number;\n scheme?: \"minor\" | \"major\" | \"none\";\n charset?: number;\n color?: Color;\n bold?: boolean;\n italic?: boolean;\n underline?: boolean | \"none\" | \"single\" | \"double\" | \"singleAccounting\" | \"doubleAccounting\";\n vertAlign?: \"superscript\" | \"subscript\";\n strike?: boolean;\n outline?: boolean;\n}\n\nexport type FillPattern =\n | \"none\"\n | \"solid\"\n | \"darkVertical\"\n | \"darkHorizontal\"\n | \"darkGrid\"\n | \"darkTrellis\"\n | \"darkDown\"\n | \"darkUp\"\n | \"lightVertical\"\n | \"lightHorizontal\"\n | \"lightGrid\"\n | \"lightTrellis\"\n | \"lightDown\"\n | \"lightUp\"\n | \"darkGray\"\n | \"mediumGray\"\n | \"lightGray\"\n | \"gray125\"\n | \"gray0625\";\n\nexport interface GradientStop {\n position: number;\n color: Color;\n}\n\nexport type Fill =\n | { type: \"pattern\"; pattern: FillPattern; fgColor?: Color; bgColor?: Color }\n | { type: \"gradient\"; gradient: \"angle\"; degree: number; stops: GradientStop[] }\n | {\n type: \"gradient\";\n gradient: \"path\";\n center: { left: number; top: number };\n stops: GradientStop[];\n };\n\nexport type BorderStyle =\n | \"thin\"\n | \"dotted\"\n | \"hair\"\n | \"medium\"\n | \"double\"\n | \"thick\"\n | \"dashed\"\n | \"dashDot\"\n | \"dashDotDot\"\n | \"slantDashDot\"\n | \"mediumDashed\"\n | \"mediumDashDotDot\"\n | \"mediumDashDot\";\n\nexport interface Border {\n style?: BorderStyle;\n color?: Color;\n}\n\nexport interface BorderDiagonal extends Border {\n up?: boolean;\n down?: boolean;\n}\n\nexport interface Borders {\n top?: Border;\n left?: Border;\n bottom?: Border;\n right?: Border;\n diagonal?: BorderDiagonal;\n}\n\nexport interface Alignment {\n horizontal?:\n | \"left\"\n | \"center\"\n | \"right\"\n | \"fill\"\n | \"justify\"\n | \"centerContinuous\"\n | \"distributed\";\n vertical?: \"top\" | \"middle\" | \"bottom\" | \"distributed\" | \"justify\";\n wrapText?: boolean;\n shrinkToFit?: boolean;\n indent?: number;\n readingOrder?: \"rtl\" | \"ltr\";\n textRotation?: number | \"vertical\";\n}\n\nexport interface Protection {\n locked?: boolean;\n hidden?: boolean;\n}\n\nexport interface Style {\n numFmt?: string;\n font?: Font;\n alignment?: Alignment;\n protection?: Protection;\n border?: Borders;\n fill?: Fill;\n}\n\n/** Shallow-merges an object-typed style field: column, then row (wins), then cell (wins over both). */\nfunction mergeField<T extends object>(\n colField: T | undefined,\n rowField: T | undefined,\n cellField: T | undefined,\n): T | undefined {\n if (colField === undefined && rowField === undefined && cellField === undefined) {\n return undefined;\n }\n return { ...colField, ...rowField, ...cellField } as T;\n}\n\n/**\n * Resolve a cell's effective style: row default and column default merged field-by-field — row\n * wins over column — then the cell's own style overrides both (see docs/API-AUDIT.md §4's\n * `_mergeStyle` precedence note). `fill` is a discriminated union so it is replaced wholesale\n * rather than merged (mixing a `pattern` fill's fields with a `gradient` fill's would be\n * incoherent). Returns a new object; never mutates any input.\n */\nexport function resolveCellStyle(rowStyle?: Style, colStyle?: Style, cellStyle?: Style): Style {\n const result: Style = {};\n\n const numFmt = cellStyle?.numFmt ?? rowStyle?.numFmt ?? colStyle?.numFmt;\n if (numFmt !== undefined) result.numFmt = numFmt;\n\n const font = mergeField(colStyle?.font, rowStyle?.font, cellStyle?.font);\n if (font !== undefined) result.font = font;\n\n const alignment = mergeField(colStyle?.alignment, rowStyle?.alignment, cellStyle?.alignment);\n if (alignment !== undefined) result.alignment = alignment;\n\n const protection = mergeField(colStyle?.protection, rowStyle?.protection, cellStyle?.protection);\n if (protection !== undefined) result.protection = protection;\n\n const border = mergeField(colStyle?.border, rowStyle?.border, cellStyle?.border);\n if (border !== undefined) result.border = border;\n\n const fill = cellStyle?.fill ?? rowStyle?.fill ?? colStyle?.fill;\n if (fill !== undefined) result.fill = fill;\n\n return result;\n}\n","// Cell: value get/set through the CellValue <-> StoredValue helpers (no per-type strategy\n// classes — see docs/API-AUDIT.md §5), merge bookkeeping, and the style shortcuts. Style is\n// resolved from row+column defaults once at construction (docs/API-AUDIT.md §4's `_mergeStyle`\n// note); further per-field writes go straight into the cell's own style object.\n//\n// `Row`/`Column` are type-only imports: Cell never constructs either (both are handed to it by\n// their owning Row), so this carries no runtime dependency and cannot cycle with row.ts's\n// `import { Cell }`.\n\nimport {\n type CellFormula,\n type CellValue,\n effectiveType as effectiveTypeOf,\n fromStored,\n type StoredValue,\n toCsv,\n toStored,\n toText,\n} from \"./cell-value.js\";\nimport type { Column } from \"./column.js\";\nimport { CellType, FormulaType } from \"./enums.js\";\nimport type { Row } from \"./row.js\";\nimport {\n type Alignment,\n type Borders,\n type Fill,\n type Font,\n type Protection,\n resolveCellStyle,\n type Style,\n} from \"./style.js\";\n\nexport interface CellModel {\n address: string;\n type: CellType;\n value?: unknown;\n formula?: string;\n result?: unknown;\n style?: Style;\n}\n\nexport class Cell {\n private _stored: StoredValue = { type: CellType.Null };\n private _style: Style;\n private _master: Cell;\n\n constructor(\n private readonly rowRef: Row,\n private readonly columnRef: Column,\n public readonly address: string,\n ) {\n this._master = this;\n this._style = resolveCellStyle(rowRef.style, columnRef.style);\n }\n\n get row(): number {\n return this.rowRef.number;\n }\n\n get col(): number {\n return this.columnRef.number;\n }\n\n get $col$row(): string {\n return `$${this.columnRef.letter}$${this.rowRef.number}`;\n }\n\n /** The stored value this cell resolves through: itself, or (if merged) its master. */\n private get resolvedStored(): StoredValue {\n return this.isMerged ? this._master.resolvedStored : this._stored;\n }\n\n get value(): CellValue {\n return fromStored(this.resolvedStored);\n }\n\n set value(v: CellValue) {\n if (this.isMerged) {\n this._master.value = v;\n return;\n }\n this._stored = toStored(v);\n }\n\n /** This cell's own marker type — `Merge` for a slave, even though `value`/`text` delegate. */\n get type(): CellType {\n return this._stored.type;\n }\n\n get effectiveType(): CellType {\n return effectiveTypeOf(this.resolvedStored);\n }\n\n get text(): string {\n return toText(this.resolvedStored);\n }\n\n toString(): string {\n return this.text;\n }\n\n toCsvString(): string {\n return toCsv(this.resolvedStored);\n }\n\n get isMerged(): boolean {\n return this._master !== this;\n }\n\n /** The master cell of this cell's merge region; itself if unmerged. */\n get master(): Cell {\n return this._master;\n }\n\n merge(master: Cell, ignoreStyle = false): void {\n this._master = master;\n this._stored = { type: CellType.Merge, master: master.address };\n if (!ignoreStyle) this._style = master.style;\n }\n\n unmerge(): void {\n this._master = this;\n this._stored = { type: CellType.Null };\n }\n\n get formula(): string | undefined {\n const s = this.resolvedStored;\n return s.type === CellType.Formula ? s.value.formula : undefined;\n }\n\n get result(): unknown {\n const s = this.resolvedStored;\n return s.type === CellType.Formula ? s.value.result : undefined;\n }\n\n get formulaType(): FormulaType {\n const s = this.resolvedStored;\n if (s.type !== CellType.Formula) return FormulaType.None;\n return s.value.sharedFormula !== undefined ? FormulaType.Shared : FormulaType.Master;\n }\n\n get style(): Style {\n return this._style;\n }\n\n set style(s: Style) {\n this._style = s;\n }\n\n get numFmt(): string | undefined {\n return this._style.numFmt;\n }\n\n set numFmt(v: string | undefined) {\n this._style = { ...this._style, numFmt: v };\n }\n\n get font(): Font | undefined {\n return this._style.font;\n }\n\n set font(v: Font | undefined) {\n this._style = { ...this._style, font: v };\n }\n\n get alignment(): Alignment | undefined {\n return this._style.alignment;\n }\n\n set alignment(v: Alignment | undefined) {\n this._style = { ...this._style, alignment: v };\n }\n\n get border(): Borders | undefined {\n return this._style.border;\n }\n\n set border(v: Borders | undefined) {\n this._style = { ...this._style, border: v };\n }\n\n get fill(): Fill | undefined {\n return this._style.fill;\n }\n\n set fill(v: Fill | undefined) {\n this._style = { ...this._style, fill: v };\n }\n\n get protection(): Protection | undefined {\n return this._style.protection;\n }\n\n set protection(v: Protection | undefined) {\n this._style = { ...this._style, protection: v };\n }\n\n get model(): CellModel {\n const m: CellModel = { address: this.address, type: this.type };\n switch (this._stored.type) {\n case CellType.Null:\n case CellType.Merge:\n break;\n case CellType.Formula:\n if (this._stored.value.formula !== undefined) m.formula = this._stored.value.formula;\n if (this._stored.value.result !== undefined) m.result = this._stored.value.result;\n break;\n default:\n m.value = fromStored(this._stored);\n }\n if (Object.keys(this._style).length > 0) m.style = this._style;\n return m;\n }\n\n set model(m: CellModel) {\n // Model assignment always targets this cell directly — an implicit unmerge, mirroring how\n // ExcelJS reloads a cell wholesale from serialized state.\n this._master = this;\n switch (m.type) {\n case CellType.Merge:\n this._stored = { type: CellType.Merge, master: this.address };\n break;\n case CellType.Formula:\n this._stored = toStored({\n formula: m.formula,\n result: m.result as CellFormula[\"result\"],\n });\n break;\n case CellType.Null:\n this._stored = { type: CellType.Null };\n break;\n default:\n this.value = m.value as CellValue;\n }\n this._style = m.style ?? {};\n }\n}\n","// A1 <-> {row,col} address math. Pure, hot-path, memoized. Port of ExcelJS's col-cache behavior\n// (see docs/API-AUDIT.md §5) as typed free functions instead of a class.\n\nimport { InvalidAddressError } from \"../errors.js\";\n\n/** 1-based rows/cols everywhere in this module's public surface. */\nexport interface Decoded {\n row: number;\n col: number;\n address: string;\n}\n\n/** `decodeEx` result: adds the absolute `$col$row` form and an optional sheet qualifier. */\nexport interface DecodedEx extends Decoded {\n $col$row: string;\n sheetName?: string;\n}\n\n/** Excel's hard cap on rows (2^20). */\nconst MAX_ROW = 1_048_576;\n/** Excel's hard cap on columns — 'XFD'. */\nconst MAX_COL = 16_384;\n\nconst LETTER_RE = /^[A-Za-z]+$/;\nconst ADDRESS_RE = /^([A-Za-z]+)(\\d+)$/;\nconst SHEET_PREFIX_RE = /^(?:'([^']*)'|([^'!]+))!/;\nconst CELL_REF_RE = /^\\$?([A-Za-z]+)\\$?(\\d+)$/;\n\nconst colLetterToNumberCache = new Map<string, number>();\nconst colNumberToLetterCache = new Map<number, string>();\nconst decodeAddressCache = new Map<string, Decoded>();\n\n/** 'A'->1, 'Z'->26, 'AA'->27. Throws {@link InvalidAddressError} on non-letters. */\nexport function colLetterToNumber(letter: string): number {\n const cached = colLetterToNumberCache.get(letter);\n if (cached !== undefined) return cached;\n\n if (!LETTER_RE.test(letter)) {\n throw new InvalidAddressError(letter);\n }\n\n const upper = letter.toUpperCase();\n let col = 0;\n for (let i = 0; i < upper.length; i++) {\n col = col * 26 + (upper.charCodeAt(i) - 64);\n }\n\n colLetterToNumberCache.set(letter, col);\n return col;\n}\n\n/** 1->'A', 27->'AA'. */\nexport function colNumberToLetter(col: number): string {\n const cached = colNumberToLetterCache.get(col);\n if (cached !== undefined) return cached;\n\n if (!Number.isInteger(col) || col < 1) {\n throw new InvalidAddressError(String(col));\n }\n\n let n = col;\n let letters = \"\";\n while (n > 0) {\n const rem = (n - 1) % 26;\n letters = String.fromCharCode(65 + rem) + letters;\n n = Math.floor((n - 1) / 26);\n }\n\n colNumberToLetterCache.set(col, letters);\n return letters;\n}\n\n/** (row=1,col=2) -> 'B1'. */\nexport function encodeAddress(row: number, col: number): string {\n return `${colNumberToLetter(col)}${row}`;\n}\n\n/** 'B1' -> { row:1, col:2, address:'B1' }. Cached. */\nexport function decodeAddress(address: string): Decoded {\n const cached = decodeAddressCache.get(address);\n if (cached !== undefined) return cached;\n\n const match = ADDRESS_RE.exec(address);\n if (!match) {\n throw new InvalidAddressError(address);\n }\n\n const [, letters, digits] = match as unknown as [string, string, string];\n const col = colLetterToNumber(letters);\n const row = Number.parseInt(digits, 10);\n\n if (row < 1 || row > MAX_ROW || col < 1 || col > MAX_COL) {\n throw new InvalidAddressError(address);\n }\n\n const decoded: Decoded = { row, col, address: `${letters.toUpperCase()}${row}` };\n decodeAddressCache.set(address, decoded);\n return decoded;\n}\n\n/** Handles '$B$1', \"'Sheet 1'!B1\", Sheet1!B1, absolute/relative `$` markers. */\nexport function decodeEx(address: string): DecodedEx {\n let sheetName: string | undefined;\n let rest = address;\n\n const sheetMatch = SHEET_PREFIX_RE.exec(address);\n if (sheetMatch) {\n sheetName = sheetMatch[1] ?? sheetMatch[2];\n rest = address.slice(sheetMatch[0].length);\n }\n\n const cellMatch = CELL_REF_RE.exec(rest);\n if (!cellMatch) {\n throw new InvalidAddressError(address);\n }\n\n const [, letters, digits] = cellMatch as unknown as [string, string, string];\n const decoded = decodeAddress(`${letters}${digits}`);\n\n return {\n ...decoded,\n $col$row: `$${colNumberToLetter(decoded.col)}$${decoded.row}`,\n ...(sheetName !== undefined ? { sheetName } : {}),\n };\n}\n\n/** Throws {@link InvalidAddressError} if not a well-formed A1 cell address. */\nexport function validateAddress(address: string): void {\n decodeAddress(address);\n}\n","// Range: a normalized bounding box over cell addresses, plus set operations. Used by\n// Worksheet.dimensions and merge bookkeeping (see docs/STAGE-1.2-SPEC.md §2).\n\nimport { InvalidRangeError } from \"../errors.js\";\nimport { type Decoded, decodeEx, encodeAddress } from \"./col-cache.js\";\n\nexport type RangeSource =\n | string // 'A1:B2' or 'A1'\n | [string, string] // ['A1','B2']\n | [number, number, number, number] // [top,left,bottom,right]\n | Range\n | Decoded;\n\ninterface Box {\n top: number;\n left: number;\n bottom: number;\n right: number;\n sheetName?: string;\n}\n\nfunction isDecodedLike(value: unknown): value is Decoded {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !(value instanceof Range) &&\n typeof (value as Decoded).row === \"number\" &&\n typeof (value as Decoded).col === \"number\" &&\n typeof (value as Decoded).address === \"string\"\n );\n}\n\nfunction assertValidBox(box: Box, source: unknown): void {\n for (const n of [box.top, box.left, box.bottom, box.right]) {\n if (!Number.isInteger(n) || n < 1) {\n throw new InvalidRangeError(source);\n }\n }\n}\n\nfunction decodeTwoRefs(a: string, b: string, source: unknown): Box {\n try {\n const d1 = decodeEx(a);\n const d2 = decodeEx(b);\n return {\n top: d1.row,\n left: d1.col,\n bottom: d2.row,\n right: d2.col,\n sheetName: d1.sheetName ?? d2.sheetName,\n };\n } catch {\n throw new InvalidRangeError(source);\n }\n}\n\nfunction parseRangeString(source: string): Box {\n const parts = source.split(\":\");\n if (parts.length === 1) {\n return decodeTwoRefs(parts[0] as string, parts[0] as string, source);\n }\n if (parts.length === 2) {\n const [p0, p1] = parts as [string, string];\n if (p0 === \"\" || p1 === \"\") throw new InvalidRangeError(source);\n return decodeTwoRefs(p0, p1, source);\n }\n throw new InvalidRangeError(source);\n}\n\nfunction resolveSource(source: RangeSource): Box {\n if (source instanceof Range) {\n return {\n top: source.top,\n left: source.left,\n bottom: source.bottom,\n right: source.right,\n sheetName: source.sheetName,\n };\n }\n\n if (typeof source === \"string\") {\n return parseRangeString(source);\n }\n\n if (Array.isArray(source)) {\n if (source.length === 4 && source.every((n) => typeof n === \"number\")) {\n const [top, left, bottom, right] = source as [number, number, number, number];\n return { top, left, bottom, right };\n }\n if (source.length === 2 && source.every((s) => typeof s === \"string\")) {\n const [a, b] = source as [string, string];\n return decodeTwoRefs(a, b, source);\n }\n throw new InvalidRangeError(source);\n }\n\n if (isDecodedLike(source)) {\n return { top: source.row, left: source.col, bottom: source.row, right: source.col };\n }\n\n throw new InvalidRangeError(source);\n}\n\n/** A normalized bounding box (`top<=bottom`, `left<=right`) over 1-based cell addresses. */\nexport class Range {\n top: number;\n left: number;\n bottom: number;\n right: number;\n sheetName?: string;\n\n constructor(source?: RangeSource);\n constructor(top: number, left: number, bottom: number, right: number);\n constructor(sourceOrTop?: RangeSource | number, left?: number, bottom?: number, right?: number) {\n let box: Box;\n\n if (sourceOrTop === undefined) {\n box = { top: 1, left: 1, bottom: 1, right: 1 };\n } else if (typeof sourceOrTop === \"number\") {\n if (left === undefined || bottom === undefined || right === undefined) {\n throw new InvalidRangeError([sourceOrTop, left, bottom, right]);\n }\n box = { top: sourceOrTop, left, bottom, right };\n assertValidBox(box, [sourceOrTop, left, bottom, right]);\n } else {\n box = resolveSource(sourceOrTop);\n assertValidBox(box, sourceOrTop);\n }\n\n this.top = Math.min(box.top, box.bottom);\n this.bottom = Math.max(box.top, box.bottom);\n this.left = Math.min(box.left, box.right);\n this.right = Math.max(box.left, box.right);\n if (box.sheetName !== undefined) this.sheetName = box.sheetName;\n }\n\n /** Top-left address, e.g. 'A1'. */\n get tl(): string {\n return encodeAddress(this.top, this.left);\n }\n\n /** Bottom-right address, e.g. 'B2'. */\n get br(): string {\n return encodeAddress(this.bottom, this.right);\n }\n\n /** 'A1:B2'. */\n get range(): string {\n return `${this.tl}:${this.br}`;\n }\n\n /** Total cell count covered by the box. */\n get count(): number {\n return (this.bottom - this.top + 1) * (this.right - this.left + 1);\n }\n\n /** Grows the box to include the given box (union of bounds). */\n expand(top: number, left: number, bottom: number, right: number): void {\n this.top = Math.min(this.top, top);\n this.left = Math.min(this.left, left);\n this.bottom = Math.max(this.bottom, bottom);\n this.right = Math.max(this.right, right);\n }\n\n /** Whether the given address falls within this box. */\n contains(address: string): boolean {\n const d = decodeEx(address);\n return d.row >= this.top && d.row <= this.bottom && d.col >= this.left && d.col <= this.right;\n }\n\n /** Whether this box overlaps another box. */\n intersects(other: Range): boolean {\n return (\n this.left <= other.right &&\n other.left <= this.right &&\n this.top <= other.bottom &&\n other.top <= this.bottom\n );\n }\n\n /** Visits every address in the box, row-major (row-by-row, left-to-right within a row). */\n forEachAddress(cb: (address: string, row: number, col: number) => void): void {\n for (let row = this.top; row <= this.bottom; row++) {\n for (let col = this.left; col <= this.right; col++) {\n cb(encodeAddress(row, col), row, col);\n }\n }\n }\n}\n","// Column: a projection over cells, not a container (docs/API-AUDIT.md §3) — it has no cell\n// storage of its own; `eachCell`/`values` reach cells via the worksheet host's rows. Style\n// setters fan out through `eachCell`. `toModel`/`fromModel` run-length-compress adjacent columns\n// sharing the same OOXML-relevant attributes (width/hidden/outlineLevel/style) into `<col min\n// max>` ranges — `key`/`header` are pure in-memory conveniences with no `<col>` representation,\n// so they're deliberately excluded from that comparison and from `ColumnRange`.\n\nimport { colNumberToLetter } from \"../address/index.js\";\nimport type { Cell } from \"./cell.js\";\nimport type { CellValue } from \"./cell-value.js\";\nimport type { Alignment, Borders, Fill, Font, Protection, Style } from \"./style.js\";\nimport type { WorksheetHost } from \"./worksheet-host.js\";\n\nexport const DEFAULT_COLUMN_WIDTH = 9;\n\nexport interface ColumnDefn {\n key?: string;\n header?: string | string[];\n width?: number;\n hidden?: boolean;\n outlineLevel?: number;\n style?: Style;\n}\n\n/** Run-length range as compressed by `Column.toModel` — OOXML `<col min max .../>` attributes only. */\nexport interface ColumnRange {\n min: number;\n max: number;\n width?: number;\n hidden?: boolean;\n outlineLevel?: number;\n style?: Style;\n}\n\ntype EachCellCb = (cell: Cell, rowNumber: number) => void;\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\" || a === null || b === null) return false;\n const aKeys = Object.keys(a as object);\n const bKeys = Object.keys(b as object);\n if (aKeys.length !== bKeys.length) return false;\n return aKeys.every((key) =>\n deepEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key]),\n );\n}\n\nexport class Column {\n key?: string;\n width?: number;\n hidden = false;\n outlineLevel = 0;\n\n private _header: string | string[] | undefined;\n private _style: Style = {};\n\n constructor(\n private readonly host: WorksheetHost,\n public readonly number: number,\n defn?: Partial<ColumnDefn> | false,\n ) {\n if (defn) {\n if (defn.key !== undefined) this.key = defn.key;\n if (defn.width !== undefined) this.width = defn.width;\n if (defn.hidden !== undefined) this.hidden = defn.hidden;\n if (defn.outlineLevel !== undefined) this.outlineLevel = defn.outlineLevel;\n if (defn.style !== undefined) this._style = defn.style;\n if (defn.header !== undefined) this.header = defn.header;\n }\n }\n\n get letter(): string {\n return colNumberToLetter(this.number);\n }\n\n get collapsed(): boolean {\n return this.outlineLevel > this.host.properties.outlineLevelCol;\n }\n\n get isCustomWidth(): boolean {\n return this.width !== undefined && this.width !== DEFAULT_COLUMN_WIDTH;\n }\n\n get isDefault(): boolean {\n return (\n !this.isCustomWidth &&\n !this.hidden &&\n this.outlineLevel === 0 &&\n this.key === undefined &&\n this._header === undefined &&\n Object.keys(this._style).length === 0\n );\n }\n\n get header(): string | string[] | undefined {\n return this._header;\n }\n\n /** Writes the header text(s) into this column's top cell(s): row 1 for a string, rows 1..N\n * for a string array (SPEC §6 — \"header assignment writes the top row cells' values\"). */\n set header(h: string | string[] | undefined) {\n this._header = h;\n if (h === undefined) return;\n const lines = Array.isArray(h) ? h : [h];\n lines.forEach((text, i) => {\n this.host.getRow(i + 1).getCell(this.number).value = text;\n });\n }\n\n get values(): CellValue[] {\n const result: CellValue[] = [];\n this.host.eachRow((row, n) => {\n const cell = row.findCell(this.number);\n if (cell) result[n] = cell.value;\n });\n return result;\n }\n\n set values(vals: CellValue[]) {\n vals.forEach((val, i) => {\n if (i === 0 || val === undefined) return;\n this.host.getRow(i).getCell(this.number).value = val;\n });\n }\n\n eachCell(cb: EachCellCb): void;\n eachCell(opts: { includeEmpty: boolean }, cb: EachCellCb): void;\n eachCell(optsOrCb: { includeEmpty: boolean } | EachCellCb, maybeCb?: EachCellCb): void {\n const includeEmpty = typeof optsOrCb === \"object\" ? optsOrCb.includeEmpty : false;\n const cb = typeof optsOrCb === \"function\" ? optsOrCb : (maybeCb as EachCellCb);\n\n this.host.eachRow({ includeEmpty }, (row, n) => {\n const cell = includeEmpty ? row.getCell(this.number) : row.findCell(this.number);\n if (cell) cb(cell, n);\n });\n }\n\n private applyToCells(fn: (cell: Cell) => void): void {\n this.eachCell(fn);\n }\n\n get style(): Style {\n return this._style;\n }\n\n set style(s: Style) {\n this._style = s;\n this.applyToCells((cell) => {\n cell.style = s;\n });\n }\n\n get numFmt(): string | undefined {\n return this._style.numFmt;\n }\n\n set numFmt(v: string | undefined) {\n this._style = { ...this._style, numFmt: v };\n this.applyToCells((cell) => {\n cell.numFmt = v;\n });\n }\n\n get font(): Font | undefined {\n return this._style.font;\n }\n\n set font(v: Font | undefined) {\n this._style = { ...this._style, font: v };\n this.applyToCells((cell) => {\n cell.font = v;\n });\n }\n\n get alignment(): Alignment | undefined {\n return this._style.alignment;\n }\n\n set alignment(v: Alignment | undefined) {\n this._style = { ...this._style, alignment: v };\n this.applyToCells((cell) => {\n cell.alignment = v;\n });\n }\n\n get border(): Borders | undefined {\n return this._style.border;\n }\n\n set border(v: Borders | undefined) {\n this._style = { ...this._style, border: v };\n this.applyToCells((cell) => {\n cell.border = v;\n });\n }\n\n get fill(): Fill | undefined {\n return this._style.fill;\n }\n\n set fill(v: Fill | undefined) {\n this._style = { ...this._style, fill: v };\n this.applyToCells((cell) => {\n cell.fill = v;\n });\n }\n\n get protection(): Protection | undefined {\n return this._style.protection;\n }\n\n set protection(v: Protection | undefined) {\n this._style = { ...this._style, protection: v };\n this.applyToCells((cell) => {\n cell.protection = v;\n });\n }\n\n get defn(): ColumnDefn {\n const d: ColumnDefn = {};\n if (this.key !== undefined) d.key = this.key;\n if (this._header !== undefined) d.header = this._header;\n if (this.width !== undefined) d.width = this.width;\n if (this.hidden) d.hidden = true;\n if (this.outlineLevel !== 0) d.outlineLevel = this.outlineLevel;\n if (Object.keys(this._style).length > 0) d.style = this._style;\n return d;\n }\n\n set defn(d: ColumnDefn) {\n this.key = d.key;\n this.width = d.width;\n this.hidden = d.hidden ?? false;\n this.outlineLevel = d.outlineLevel ?? 0;\n this._style = d.style ?? {};\n this.header = d.header;\n }\n\n /** Whether two columns share the same OOXML-relevant attributes (used to compress runs). */\n equivalentTo(other: Column): boolean {\n return (\n this.width === other.width &&\n this.hidden === other.hidden &&\n this.outlineLevel === other.outlineLevel &&\n deepEqual(this._style, other._style)\n );\n }\n\n private static rangeOf(start: Column, end: Column): ColumnRange {\n const range: ColumnRange = { min: start.number, max: end.number };\n if (start.width !== undefined) range.width = start.width;\n if (start.hidden) range.hidden = true;\n if (start.outlineLevel !== 0) range.outlineLevel = start.outlineLevel;\n if (Object.keys(start._style).length > 0) range.style = start._style;\n return range;\n }\n\n /** Run-length compress an array of Columns into `<col min max>` ranges. */\n static toModel(columns: Column[]): ColumnRange[] | undefined {\n if (columns.length === 0) return undefined;\n\n const sorted = [...columns].sort((a, b) => a.number - b.number);\n const ranges: ColumnRange[] = [];\n let start = sorted[0] as Column;\n let prev = start;\n\n for (let i = 1; i < sorted.length; i++) {\n const col = sorted[i] as Column;\n if (col.number === prev.number + 1 && col.equivalentTo(prev)) {\n prev = col;\n continue;\n }\n ranges.push(Column.rangeOf(start, prev));\n start = col;\n prev = col;\n }\n ranges.push(Column.rangeOf(start, prev));\n return ranges;\n }\n\n /** Expands `<col min max>` ranges back into individual Columns. */\n static fromModel(host: WorksheetHost, cols: ColumnRange[]): Column[] | null {\n if (cols.length === 0) return null;\n\n const columns: Column[] = [];\n for (const range of cols) {\n for (let n = range.min; n <= range.max; n++) {\n columns.push(\n new Column(host, n, {\n width: range.width,\n hidden: range.hidden,\n outlineLevel: range.outlineLevel,\n style: range.style,\n }),\n );\n }\n }\n return columns;\n }\n}\n","// Row: a sparse, 1-indexed collection of Cells. Owns cell creation (the one runtime dependency\n// among these modules: Row -> Cell), values get/set in all three RowValues forms, style fan-out\n// to already-existing cells (docs/API-AUDIT.md §3's `_applyStyle`), and splice.\n\nimport { colLetterToNumber, decodeAddress, encodeAddress } from \"../address/index.js\";\nimport { InvalidRowNumberError } from \"../errors.js\";\nimport { Cell, type CellModel } from \"./cell.js\";\nimport type { CellValue } from \"./cell-value.js\";\nimport { CellType } from \"./enums.js\";\nimport type { Alignment, Borders, Fill, Font, Protection, Style } from \"./style.js\";\nimport type { RowValues } from \"./types.js\";\nimport type { WorksheetHost } from \"./worksheet-host.js\";\n\nexport interface RowModel {\n number: number;\n cells: CellModel[];\n height?: number;\n hidden?: boolean;\n outlineLevel?: number;\n style?: Style;\n}\n\ntype EachCellCb = (cell: Cell, colNumber: number) => void;\n\nexport class Row {\n height?: number;\n hidden = false;\n outlineLevel = 0;\n\n /** Sparse, 1-indexed by column number; index 0 is never assigned. */\n private _cells: Cell[] = [];\n private _style: Style = {};\n\n constructor(\n public readonly worksheet: WorksheetHost,\n public readonly number: number,\n ) {}\n\n get collapsed(): boolean {\n return this.outlineLevel > this.worksheet.properties.outlineLevelRow;\n }\n\n private resolveColNumber(col: number | string): number {\n if (typeof col === \"number\") return col;\n const byKey = this.worksheet.getColumnKey(col);\n if (byKey) return byKey.number;\n return colLetterToNumber(col);\n }\n\n getCell(col: number | string): Cell {\n const colNumber = this.resolveColNumber(col);\n const existing = this._cells[colNumber];\n if (existing) return existing;\n\n const column = this.worksheet.getColumn(colNumber);\n const cell = new Cell(this, column, encodeAddress(this.number, colNumber));\n this._cells[colNumber] = cell;\n return cell;\n }\n\n findCell(col: number): Cell | undefined {\n return this._cells[col];\n }\n\n eachCell(cb: EachCellCb): void;\n eachCell(opts: { includeEmpty: boolean }, cb: EachCellCb): void;\n eachCell(optsOrCb: { includeEmpty: boolean } | EachCellCb, maybeCb?: EachCellCb): void {\n const includeEmpty = typeof optsOrCb === \"object\" ? optsOrCb.includeEmpty : false;\n const cb = typeof optsOrCb === \"function\" ? optsOrCb : (maybeCb as EachCellCb);\n\n if (includeEmpty) {\n const max = this._cells.length - 1;\n for (let col = 1; col <= max; col++) {\n cb(this.getCell(col), col);\n }\n } else {\n this._cells.forEach((cell, col) => {\n cb(cell, col);\n });\n }\n }\n\n get hasValues(): boolean {\n return this._cells.some((cell) => cell !== undefined && cell.type !== CellType.Null);\n }\n\n get cellCount(): number {\n return Math.max(this._cells.length - 1, 0);\n }\n\n get actualCellCount(): number {\n let count = 0;\n for (const cell of this._cells) if (cell !== undefined) count++;\n return count;\n }\n\n get dimensions(): { min: number; max: number } | null {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n this._cells.forEach((_cell, col) => {\n if (col < min) min = col;\n if (col > max) max = col;\n });\n return min === Number.POSITIVE_INFINITY ? null : { min, max };\n }\n\n get values(): RowValues {\n const arr: CellValue[] = [];\n this._cells.forEach((cell, col) => {\n arr[col] = cell.value;\n });\n return arr;\n }\n\n set values(v: RowValues) {\n this._cells = [];\n if (v === undefined || v === null) return;\n\n if (Array.isArray(v)) {\n const offset = v[0] !== undefined ? 1 : 0;\n v.forEach((val, index) => {\n if (val === undefined) return;\n const col = index + offset;\n if (col < 1) return;\n this.getCell(col).value = val;\n });\n return;\n }\n\n for (const [key, val] of Object.entries(v)) {\n this.getCell(key).value = val;\n }\n }\n\n splice(start: number, count: number, ...inserts: CellValue[]): void {\n const currentMax = this._cells.length - 1;\n const insertCount = inserts.length;\n\n const tail: Array<{ value: CellValue; style: Style } | undefined> = [];\n for (let col = start + count; col <= currentMax; col++) {\n const cell = this._cells[col];\n tail[col - (start + count)] = cell ? { value: cell.value, style: cell.style } : undefined;\n }\n\n this._cells.length = Math.min(this._cells.length, start);\n\n inserts.forEach((val, i) => {\n this.getCell(start + i).value = val;\n });\n\n tail.forEach((entry, i) => {\n if (!entry) return;\n const cell = this.getCell(start + insertCount + i);\n cell.value = entry.value;\n cell.style = entry.style;\n });\n }\n\n private applyToCells(fn: (cell: Cell) => void): void {\n this._cells.forEach((cell) => {\n fn(cell);\n });\n }\n\n get style(): Style {\n return this._style;\n }\n\n set style(s: Style) {\n this._style = s;\n this.applyToCells((cell) => {\n cell.style = s;\n });\n }\n\n get numFmt(): string | undefined {\n return this._style.numFmt;\n }\n\n set numFmt(v: string | undefined) {\n this._style = { ...this._style, numFmt: v };\n this.applyToCells((cell) => {\n cell.numFmt = v;\n });\n }\n\n get font(): Font | undefined {\n return this._style.font;\n }\n\n set font(v: Font | undefined) {\n this._style = { ...this._style, font: v };\n this.applyToCells((cell) => {\n cell.font = v;\n });\n }\n\n get alignment(): Alignment | undefined {\n return this._style.alignment;\n }\n\n set alignment(v: Alignment | undefined) {\n this._style = { ...this._style, alignment: v };\n this.applyToCells((cell) => {\n cell.alignment = v;\n });\n }\n\n get border(): Borders | undefined {\n return this._style.border;\n }\n\n set border(v: Borders | undefined) {\n this._style = { ...this._style, border: v };\n this.applyToCells((cell) => {\n cell.border = v;\n });\n }\n\n get fill(): Fill | undefined {\n return this._style.fill;\n }\n\n set fill(v: Fill | undefined) {\n this._style = { ...this._style, fill: v };\n this.applyToCells((cell) => {\n cell.fill = v;\n });\n }\n\n get protection(): Protection | undefined {\n return this._style.protection;\n }\n\n set protection(v: Protection | undefined) {\n this._style = { ...this._style, protection: v };\n this.applyToCells((cell) => {\n cell.protection = v;\n });\n }\n\n get model(): RowModel {\n const cells: CellModel[] = [];\n this._cells.forEach((cell) => {\n cells.push(cell.model);\n });\n\n const m: RowModel = { number: this.number, cells };\n if (this.height !== undefined) m.height = this.height;\n if (this.hidden) m.hidden = true;\n if (this.outlineLevel !== 0) m.outlineLevel = this.outlineLevel;\n if (Object.keys(this._style).length > 0) m.style = this._style;\n return m;\n }\n\n set model(m: RowModel) {\n if (m.number !== this.number) {\n throw new InvalidRowNumberError(this.number, m.number);\n }\n this._cells = [];\n this.height = m.height;\n this.hidden = m.hidden ?? false;\n this.outlineLevel = m.outlineLevel ?? 0;\n this._style = m.style ?? {};\n\n for (const cellModel of m.cells) {\n const col = decodeAddress(cellModel.address).col;\n this.getCell(col).model = cellModel;\n }\n }\n}\n","// Worksheet: the concrete WorksheetHost. Owns rows (a 1-based Map), columns (a Map plus a\n// key->column index), and merge bookkeeping (a Map<masterAddress, Range>). Rows/Columns create\n// their own cells; the Worksheet coordinates cross-cell concerns — merges, dimensions, and the\n// row/column shifting in spliceRows/spliceColumns (docs/API-AUDIT.md §2/§5, the trickiest part).\n//\n// `Workbook` is a type-only import (back-reference only): Worksheet never constructs a Workbook, so\n// this carries no runtime dependency and cannot cycle with workbook.ts's `import { Worksheet }`.\n\nimport { colLetterToNumber, decodeAddress, Range, type RangeSource } from \"../address/index.js\";\nimport {\n DuplicateWorksheetNameError,\n InvalidRangeError,\n InvalidWorksheetNameError,\n MergeConflictError,\n ReservedWorksheetNameError,\n WorksheetNameTooLongError,\n} from \"../errors.js\";\nimport type { Cell } from \"./cell.js\";\nimport type { CellValue } from \"./cell-value.js\";\nimport { Column, type ColumnDefn, type ColumnRange } from \"./column.js\";\nimport { CellType } from \"./enums.js\";\nimport { Row, type RowModel } from \"./row.js\";\nimport type { Color, Style } from \"./style.js\";\nimport type { RowValues } from \"./types.js\";\nimport type { Workbook } from \"./workbook.js\";\nimport type { WorksheetHost } from \"./worksheet-host.js\";\n\n/** Sheet properties. `outlineLevelCol`/`outlineLevelRow` back the `collapsed` derivation on\n * Column/Row; the rest is plain round-tripped data. */\nexport interface WorksheetProperties {\n tabColor?: Color;\n outlineLevelCol: number;\n outlineLevelRow: number;\n defaultRowHeight: number;\n defaultColWidth?: number;\n dyDescent: number;\n showGridLines?: boolean;\n [key: string]: unknown;\n}\n\n/** Freeze/split panes, zoom, gridlines — stored as plain data (round-trips through the model). */\nexport interface WorksheetView {\n state?: \"normal\" | \"frozen\" | \"split\";\n showGridLines?: boolean;\n zoomScale?: number;\n [key: string]: unknown;\n}\n\n/** Options accepted by `Workbook.addWorksheet`. */\nexport interface AddWorksheetOptions {\n state: \"visible\" | \"hidden\" | \"veryHidden\";\n properties: Partial<WorksheetProperties>;\n views: WorksheetView[];\n pageSetup: unknown;\n headerFooter: unknown;\n}\n\n/** Replaces ExcelJS's cryptic `'i' | 'o' | 'i+' | 'o+' | 'n'` style DSL (API-AUDIT §2). */\nexport type RowInheritOption =\n | { inheritFrom?: \"above\" | \"below\"; includeEmpty?: boolean }\n | undefined;\n\n/** The serializable snapshot of a worksheet. */\nexport interface WorksheetModel {\n id: number;\n name: string;\n orderNo: number;\n state: \"visible\" | \"hidden\" | \"veryHidden\";\n properties: WorksheetProperties;\n views: WorksheetView[];\n columns?: ColumnRange[];\n rows: RowModel[];\n merges: string[];\n pageSetup?: unknown;\n headerFooter?: unknown;\n}\n\ntype EachRowCb = (row: Row, n: number) => void;\ntype RowData = CellValue[] | Record<string, CellValue>;\n\n/** Captured value+style of a row's cells, used to relocate a row during a splice/duplicate. */\ninterface RowSnapshot {\n height?: number;\n hidden: boolean;\n outlineLevel: number;\n style: Style;\n cells: Array<{ col: number; value: CellValue; style: Style }>;\n}\n\nconst ILLEGAL_NAME_CHARS = /[*?:\\\\/[\\]]/;\n\n/**\n * Format validation shared by the `name` setter and `Workbook.addWorksheet` (which validates before\n * a Worksheet exists to own the setter). Duplicate detection needs the workbook and is done by the\n * caller. Not part of the public barrel.\n */\nexport function validateWorksheetNameFormat(name: string): void {\n if (name.length === 0) throw new InvalidWorksheetNameError(name, \"empty\");\n if (name.length > WorksheetNameTooLongError.MAX_LENGTH) throw new WorksheetNameTooLongError(name);\n if (ILLEGAL_NAME_CHARS.test(name))\n throw new InvalidWorksheetNameError(name, \"illegal-characters\");\n if (name.startsWith(\"'\") || name.endsWith(\"'\")) {\n throw new InvalidWorksheetNameError(name, \"edge-quote\");\n }\n if (name.toLowerCase() === \"history\") throw new ReservedWorksheetNameError(name);\n}\n\n/** Normalizes the several `mergeCells`/`unMergeCells` argument forms into a single `Range`. */\nfunction normalizeMergeArgs(cells: unknown[]): Range {\n if (cells.length === 1) return new Range(cells[0] as RangeSource);\n if (cells.length === 2 && typeof cells[0] === \"string\" && typeof cells[1] === \"string\") {\n return new Range([cells[0], cells[1]]);\n }\n if (cells.length === 4 && cells.every((c) => typeof c === \"number\")) {\n return new Range(\n cells[0] as number,\n cells[1] as number,\n cells[2] as number,\n cells[3] as number,\n );\n }\n throw new InvalidRangeError(cells);\n}\n\nexport class Worksheet implements WorksheetHost {\n orderNo: number;\n state: \"visible\" | \"hidden\" | \"veryHidden\" = \"visible\";\n readonly workbook: Workbook;\n properties: WorksheetProperties;\n views: WorksheetView[] = [];\n pageSetup?: unknown;\n headerFooter?: unknown;\n\n private _id: number;\n private _name: string;\n\n private readonly _rows = new Map<number, Row>();\n private readonly _columns = new Map<number, Column>();\n private readonly _columnsByKey = new Map<string, Column>();\n /** Active merge regions keyed by their master (top-left) cell address. */\n private readonly _merges = new Map<string, Range>();\n\n constructor(workbook: Workbook, id: number, name: string, orderNo: number) {\n this.workbook = workbook;\n this._id = id;\n this._name = name;\n this.orderNo = orderNo;\n this.properties = {\n outlineLevelCol: 0,\n outlineLevelRow: 0,\n defaultRowHeight: 15,\n dyDescent: 55,\n };\n }\n\n // --- identity ---------------------------------------------------------------------------------\n\n get id(): number {\n return this._id;\n }\n\n get name(): string {\n return this._name;\n }\n\n set name(value: string) {\n validateWorksheetNameFormat(value);\n const lower = value.toLowerCase();\n for (const ws of this.workbook.worksheets) {\n if (ws !== this && ws.name.toLowerCase() === lower) {\n throw new DuplicateWorksheetNameError(value);\n }\n }\n this._name = value;\n }\n\n // --- rows -------------------------------------------------------------------------------------\n\n getRow(row: number): Row {\n let r = this._rows.get(row);\n if (!r) {\n r = new Row(this, row);\n this._rows.set(row, r);\n }\n return r;\n }\n\n getRows(start: number, length: number): Row[] | undefined {\n if (length < 1) return undefined;\n const rows: Row[] = [];\n for (let i = 0; i < length; i++) rows.push(this.getRow(start + i));\n return rows;\n }\n\n findRow(row: number): Row | undefined {\n return this._rows.get(row);\n }\n\n addRow(data: RowData, options?: RowInheritOption): Row {\n const row = this.getRow(this.rowCount + 1);\n row.values = data as RowValues;\n this.applyInheritance(row, options);\n return row;\n }\n\n addRows(rows: RowData[], options?: RowInheritOption): Row[] {\n return rows.map((data) => this.addRow(data, options));\n }\n\n insertRow(pos: number, value: RowData, options?: RowInheritOption): Row {\n this.spliceRows(pos, 0, value);\n const row = this.getRow(pos);\n this.applyInheritance(row, options);\n return row;\n }\n\n private applyInheritance(row: Row, options: RowInheritOption): void {\n if (!options?.inheritFrom) return;\n const sourceNumber = options.inheritFrom === \"above\" ? row.number - 1 : row.number + 1;\n const source = this._rows.get(sourceNumber);\n if (!source) return;\n row.style = source.style;\n source.eachCell({ includeEmpty: options.includeEmpty ?? false }, (cell, col) => {\n row.getCell(col).style = cell.style;\n });\n }\n\n duplicateRow(rowNum: number, count: number, insert = false): void {\n const snapshot = this.snapshotRow(this.getRow(rowNum));\n if (insert) {\n const blanks: RowData[] = Array.from({ length: count }, () => [] as CellValue[]);\n this.spliceRows(rowNum + 1, 0, ...blanks);\n }\n for (let i = 1; i <= count; i++) this.restoreRow(rowNum + i, snapshot);\n }\n\n spliceRows(start: number, count: number, ...inserts: RowData[]): void {\n const delta = inserts.length - count;\n\n const oldMerges = [...this._merges.values()].map((r) => ({\n top: r.top,\n left: r.left,\n bottom: r.bottom,\n right: r.right,\n }));\n\n const snapshots = new Map<number, RowSnapshot>();\n for (const [num, row] of this._rows) snapshots.set(num, this.snapshotRow(row));\n\n this._rows.clear();\n this._merges.clear();\n\n for (const [num, snap] of snapshots) {\n if (num < start) {\n this.restoreRow(num, snap);\n } else if (num >= start + count) {\n this.restoreRow(num + delta, snap);\n }\n // rows in [start, start+count) are deleted.\n }\n\n inserts.forEach((values, i) => {\n this.getRow(start + i).values = values as RowValues;\n });\n\n // Re-anchor merges: those entirely below the removed region shift by `delta`, those entirely\n // above survive unchanged, and any that straddle the removed region are dropped.\n for (const m of oldMerges) {\n if (m.top >= start + count) {\n this.applyMerge(new Range(m.top + delta, m.left, m.bottom + delta, m.right));\n } else if (m.bottom < start) {\n this.applyMerge(new Range(m.top, m.left, m.bottom, m.right));\n }\n }\n }\n\n private snapshotRow(row: Row): RowSnapshot {\n const cells: RowSnapshot[\"cells\"] = [];\n row.eachCell((cell, col) => {\n cells.push({ col, value: cell.value, style: cell.style });\n });\n return {\n height: row.height,\n hidden: row.hidden,\n outlineLevel: row.outlineLevel,\n style: row.style,\n cells,\n };\n }\n\n private restoreRow(num: number, snap: RowSnapshot): void {\n const row = this.getRow(num);\n row.height = snap.height;\n row.hidden = snap.hidden;\n row.outlineLevel = snap.outlineLevel;\n row.style = snap.style;\n for (const c of snap.cells) {\n const cell = row.getCell(c.col);\n cell.value = c.value;\n cell.style = c.style;\n }\n }\n\n eachRow(cb: EachRowCb): void;\n eachRow(opts: { includeEmpty: boolean }, cb: EachRowCb): void;\n eachRow(optsOrCb: { includeEmpty: boolean } | EachRowCb, maybeCb?: EachRowCb): void {\n const includeEmpty = typeof optsOrCb === \"object\" ? optsOrCb.includeEmpty : false;\n const cb = typeof optsOrCb === \"function\" ? optsOrCb : (maybeCb as EachRowCb);\n\n if (includeEmpty) {\n const max = this.rowCount;\n for (let n = 1; n <= max; n++) cb(this.getRow(n), n);\n } else {\n const sorted = [...this._rows.entries()].sort((a, b) => a[0] - b[0]);\n for (const [n, row] of sorted) cb(row, n);\n }\n }\n\n getSheetValues(): RowValues[] {\n const result: RowValues[] = [];\n this.eachRow((row, n) => {\n result[n] = row.values;\n });\n return result;\n }\n\n get rowCount(): number {\n let max = 0;\n for (const n of this._rows.keys()) if (n > max) max = n;\n return max;\n }\n\n get actualRowCount(): number {\n let count = 0;\n for (const row of this._rows.values()) if (row.hasValues) count++;\n return count;\n }\n\n get lastRow(): Row | undefined {\n const rc = this.rowCount;\n return rc >= 1 ? this._rows.get(rc) : undefined;\n }\n\n // --- columns ----------------------------------------------------------------------------------\n\n get columns(): Column[] {\n const count = this.columnCount;\n const arr: Column[] = [];\n for (let n = 1; n <= count; n++) arr.push(this.getColumn(n));\n return arr;\n }\n\n set columns(defns: Partial<ColumnDefn>[]) {\n defns.forEach((defn, i) => {\n const col = this.getColumn(i + 1);\n col.defn = { ...col.defn, ...defn };\n if (defn.key !== undefined) this._columnsByKey.set(defn.key, col);\n });\n }\n\n getColumn(idOrKey: number | string): Column {\n if (typeof idOrKey === \"number\") return this.getOrCreateColumn(idOrKey);\n const byKey = this._columnsByKey.get(idOrKey);\n if (byKey) return byKey;\n return this.getOrCreateColumn(colLetterToNumber(idOrKey));\n }\n\n private getOrCreateColumn(n: number): Column {\n let c = this._columns.get(n);\n if (!c) {\n c = new Column(this, n);\n this._columns.set(n, c);\n }\n return c;\n }\n\n get columnCount(): number {\n let max = 0;\n for (const n of this._columns.keys()) if (n > max) max = n;\n this.eachRow((row) => {\n const d = row.dimensions;\n if (d && d.max > max) max = d.max;\n });\n return max;\n }\n\n get actualColumnCount(): number {\n const cols = new Set<number>();\n this.eachRow((row) => {\n row.eachCell((cell, col) => {\n if (cell.type !== CellType.Null) cols.add(col);\n });\n });\n return cols.size;\n }\n\n get lastColumn(): Column | undefined {\n const cc = this.columnCount;\n return cc >= 1 ? this.getColumn(cc) : undefined;\n }\n\n spliceColumns(start: number, count: number, ...inserts: CellValue[][]): void {\n const delta = inserts.length - count;\n\n this.eachRow((row) => {\n const rowInserts = inserts.map((colVals) => colVals[row.number] ?? null);\n row.splice(start, count, ...rowInserts);\n });\n\n // Shift stored column definitions to match the cell shift.\n const oldColumns = [...this._columns.entries()];\n this._columns.clear();\n this._columnsByKey.clear();\n for (const [n, col] of oldColumns) {\n let newNumber: number;\n if (n < start) newNumber = n;\n else if (n >= start + count) newNumber = n + delta;\n else continue; // deleted\n const moved = new Column(this, newNumber, col.defn);\n this._columns.set(newNumber, moved);\n if (moved.key !== undefined) this._columnsByKey.set(moved.key, moved);\n }\n\n // Re-anchor merges horizontally, mirroring spliceRows.\n const oldMerges = [...this._merges.values()].map((r) => ({\n top: r.top,\n left: r.left,\n bottom: r.bottom,\n right: r.right,\n }));\n this._merges.clear();\n for (const m of oldMerges) {\n if (m.left >= start + count) {\n this.applyMerge(new Range(m.top, m.left + delta, m.bottom, m.right + delta));\n } else if (m.right < start) {\n this.applyMerge(new Range(m.top, m.left, m.bottom, m.right));\n }\n }\n }\n\n // --- column keys ------------------------------------------------------------------------------\n\n getColumnKey(key: string): Column | undefined {\n return this._columnsByKey.get(key);\n }\n\n setColumnKey(key: string, column: Column): void {\n column.key = key;\n this._columnsByKey.set(key, column);\n }\n\n deleteColumnKey(key: string): void {\n const col = this._columnsByKey.get(key);\n if (col) col.key = undefined;\n this._columnsByKey.delete(key);\n }\n\n eachColumnKey(cb: (column: Column, key: string) => void): void {\n for (const [key, col] of this._columnsByKey) cb(col, key);\n }\n\n // --- cells ------------------------------------------------------------------------------------\n\n getCell(r: number | string, c?: number | string): Cell {\n if (c === undefined) {\n const d = decodeAddress(r as string);\n return this.getRow(d.row).getCell(d.col);\n }\n return this.getRow(r as number).getCell(c);\n }\n\n findCell(r: number | string, c?: number | string): Cell | undefined {\n let rowNum: number;\n let colNum: number;\n if (c === undefined) {\n const d = decodeAddress(r as string);\n rowNum = d.row;\n colNum = d.col;\n } else {\n rowNum = r as number;\n colNum = this.toColNumber(c);\n }\n const row = this._rows.get(rowNum);\n return row?.findCell(colNum);\n }\n\n private toColNumber(col: number | string): number {\n if (typeof col === \"number\") return col;\n const byKey = this._columnsByKey.get(col);\n if (byKey) return byKey.number;\n return colLetterToNumber(col);\n }\n\n // --- merges -----------------------------------------------------------------------------------\n\n mergeCells(...cells: unknown[]): void {\n const range = normalizeMergeArgs(cells);\n for (const existing of this._merges.values()) {\n if (range.intersects(existing)) throw new MergeConflictError(range.range);\n }\n this.applyMerge(range);\n }\n\n unMergeCells(...cells: unknown[]): void {\n const range = normalizeMergeArgs(cells);\n for (const [key, existing] of [...this._merges.entries()]) {\n if (!range.intersects(existing)) continue;\n existing.forEachAddress((_addr, row, col) => {\n if (row === existing.top && col === existing.left) return; // master keeps its value\n this.getRow(row).getCell(col).unmerge();\n });\n this._merges.delete(key);\n }\n }\n\n /** Links the slave cells of `range` to its top-left master and records the region. */\n private applyMerge(range: Range): void {\n const master = this.getCell(range.top, range.left);\n range.forEachAddress((_addr, row, col) => {\n if (row === range.top && col === range.left) return;\n this.getRow(row).getCell(col).merge(master);\n });\n this._merges.set(master.address, range);\n }\n\n get hasMerges(): boolean {\n return this._merges.size > 0;\n }\n\n get dimensions(): Range {\n let top = Number.POSITIVE_INFINITY;\n let left = Number.POSITIVE_INFINITY;\n let bottom = Number.NEGATIVE_INFINITY;\n let right = Number.NEGATIVE_INFINITY;\n this.eachRow((row, n) => {\n const d = row.dimensions;\n if (!d) return;\n if (n < top) top = n;\n if (n > bottom) bottom = n;\n if (d.min < left) left = d.min;\n if (d.max > right) right = d.max;\n });\n if (top === Number.POSITIVE_INFINITY) return new Range(1, 1, 1, 1);\n return new Range(top, left, bottom, right);\n }\n\n // --- model ------------------------------------------------------------------------------------\n\n get model(): WorksheetModel {\n const rows = [...this._rows.entries()].sort((a, b) => a[0] - b[0]).map(([, row]) => row.model);\n const columns = Column.toModel([...this._columns.values()]);\n\n const m: WorksheetModel = {\n id: this._id,\n name: this._name,\n orderNo: this.orderNo,\n state: this.state,\n properties: { ...this.properties },\n views: this.views.map((v) => ({ ...v })),\n rows,\n merges: [...this._merges.values()].map((r) => r.range),\n };\n if (columns) m.columns = columns;\n if (this.pageSetup !== undefined) m.pageSetup = this.pageSetup;\n if (this.headerFooter !== undefined) m.headerFooter = this.headerFooter;\n return m;\n }\n\n set model(m: WorksheetModel) {\n this._id = m.id;\n this._name = m.name;\n this.orderNo = m.orderNo;\n this.state = m.state;\n this.properties = { ...m.properties };\n this.views = m.views.map((v) => ({ ...v }));\n this.pageSetup = m.pageSetup;\n this.headerFooter = m.headerFooter;\n\n this._rows.clear();\n this._columns.clear();\n this._columnsByKey.clear();\n this._merges.clear();\n\n if (m.columns) {\n const cols = Column.fromModel(this, m.columns) ?? [];\n for (const col of cols) {\n this._columns.set(col.number, col);\n if (col.key !== undefined) this._columnsByKey.set(col.key, col);\n }\n }\n\n for (const rowModel of m.rows) {\n this.getRow(rowModel.number).model = rowModel;\n }\n\n for (const mergeStr of m.merges) this.applyMerge(new Range(mergeStr));\n }\n}\n","// Workbook: the root aggregate. Sheets are held in an insertion-ordered array plus a `Map<id,\n// Worksheet>` index, so `worksheets` is O(n) with no 1-based sparse hole (docs/API-AUDIT.md §5).\n// `orderNo` is kept equal to the array index; the deprecated tabColor-as-string branch is dropped.\n\nimport { DuplicateWorksheetNameError } from \"../errors.js\";\nimport {\n type AddWorksheetOptions,\n validateWorksheetNameFormat,\n Worksheet,\n type WorksheetModel,\n} from \"./worksheet.js\";\n\n/** Workbook-wide flags — notably the 1904 date system. */\nexport interface WorkbookProperties {\n date1904?: boolean;\n [key: string]: unknown;\n}\n\n/** Calculation chain flags (e.g. `fullCalcOnLoad`). */\nexport interface CalculationProperties {\n fullCalcOnLoad?: boolean;\n [key: string]: unknown;\n}\n\n/** Window layout / active-tab state — stored as plain data (round-trips through the model). */\nexport interface WorkbookView {\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n activeTab?: number;\n visibility?: string;\n [key: string]: unknown;\n}\n\n/** The serializable snapshot of a workbook. */\nexport interface WorkbookModel {\n creator?: string;\n lastModifiedBy?: string;\n created: Date;\n modified: Date;\n lastPrinted?: Date;\n title?: string;\n subject?: string;\n keywords?: string;\n category?: string;\n description?: string;\n company?: string;\n manager?: string;\n properties: WorkbookProperties;\n calcProperties: CalculationProperties;\n views: WorkbookView[];\n sheets: WorksheetModel[];\n nextId: number;\n}\n\nexport class Workbook {\n creator?: string;\n lastModifiedBy?: string;\n created: Date;\n modified: Date;\n lastPrinted?: Date;\n title?: string;\n subject?: string;\n keywords?: string;\n category?: string;\n description?: string;\n company?: string;\n manager?: string;\n\n properties: WorkbookProperties = {};\n calcProperties: CalculationProperties = {};\n views: WorkbookView[] = [];\n\n private readonly _byId = new Map<number, Worksheet>();\n private _sheets: Worksheet[] = [];\n private _nextId = 1;\n\n constructor() {\n const now = new Date();\n this.created = now;\n this.modified = now;\n }\n\n /** Ordered, O(n). A fresh copy so callers cannot mutate the backing order. */\n get worksheets(): Worksheet[] {\n return [...this._sheets];\n }\n\n addWorksheet(name?: string, options?: Partial<AddWorksheetOptions>): Worksheet {\n const resolvedName = name ?? this.uniqueSheetName();\n validateWorksheetNameFormat(resolvedName);\n const lower = resolvedName.toLowerCase();\n for (const ws of this._sheets) {\n if (ws.name.toLowerCase() === lower) throw new DuplicateWorksheetNameError(resolvedName);\n }\n\n const id = this._nextId++;\n const ws = new Worksheet(this, id, resolvedName, this._sheets.length);\n\n if (options) {\n if (options.state) ws.state = options.state;\n if (options.properties) ws.properties = { ...ws.properties, ...options.properties };\n if (options.views) ws.views = options.views;\n if (options.pageSetup !== undefined) ws.pageSetup = options.pageSetup;\n if (options.headerFooter !== undefined) ws.headerFooter = options.headerFooter;\n }\n\n this._byId.set(id, ws);\n this._sheets.push(ws);\n return ws;\n }\n\n private uniqueSheetName(): string {\n const taken = new Set(this._sheets.map((w) => w.name.toLowerCase()));\n let n = this._sheets.length + 1;\n let candidate = `Sheet${n}`;\n while (taken.has(candidate.toLowerCase())) {\n n++;\n candidate = `Sheet${n}`;\n }\n return candidate;\n }\n\n getWorksheet(idOrName?: number | string): Worksheet | undefined {\n if (idOrName === undefined) return this._sheets[0];\n if (typeof idOrName === \"number\") return this._byId.get(idOrName);\n return this._sheets.find((w) => w.name === idOrName);\n }\n\n removeWorksheet(idOrName: number | string): void {\n const ws =\n typeof idOrName === \"number\"\n ? this._byId.get(idOrName)\n : this._sheets.find((w) => w.name === idOrName);\n if (!ws) return;\n this._byId.delete(ws.id);\n this._sheets = this._sheets.filter((w) => w !== ws);\n this.reindex();\n }\n\n /** Keeps `orderNo` equal to array position after a removal. */\n private reindex(): void {\n this._sheets.forEach((w, i) => {\n w.orderNo = i;\n });\n }\n\n eachSheet(cb: (ws: Worksheet, id: number) => void): void {\n for (const ws of this._sheets) cb(ws, ws.id);\n }\n\n // --- model ------------------------------------------------------------------------------------\n\n get model(): WorkbookModel {\n const m: WorkbookModel = {\n created: this.created,\n modified: this.modified,\n properties: { ...this.properties },\n calcProperties: { ...this.calcProperties },\n views: this.views.map((v) => ({ ...v })),\n sheets: this._sheets.map((w) => w.model),\n nextId: this._nextId,\n };\n if (this.creator !== undefined) m.creator = this.creator;\n if (this.lastModifiedBy !== undefined) m.lastModifiedBy = this.lastModifiedBy;\n if (this.lastPrinted !== undefined) m.lastPrinted = this.lastPrinted;\n if (this.title !== undefined) m.title = this.title;\n if (this.subject !== undefined) m.subject = this.subject;\n if (this.keywords !== undefined) m.keywords = this.keywords;\n if (this.category !== undefined) m.category = this.category;\n if (this.description !== undefined) m.description = this.description;\n if (this.company !== undefined) m.company = this.company;\n if (this.manager !== undefined) m.manager = this.manager;\n return m;\n }\n\n set model(m: WorkbookModel) {\n this.creator = m.creator;\n this.lastModifiedBy = m.lastModifiedBy;\n this.created = m.created;\n this.modified = m.modified;\n this.lastPrinted = m.lastPrinted;\n this.title = m.title;\n this.subject = m.subject;\n this.keywords = m.keywords;\n this.category = m.category;\n this.description = m.description;\n this.company = m.company;\n this.manager = m.manager;\n this.properties = { ...m.properties };\n this.calcProperties = { ...m.calcProperties };\n this.views = m.views.map((v) => ({ ...v }));\n\n this._byId.clear();\n this._sheets = [];\n for (const sheetModel of m.sheets) {\n const ws = new Worksheet(this, sheetModel.id, sheetModel.name, sheetModel.orderNo);\n ws.model = sheetModel;\n this._byId.set(ws.id, ws);\n this._sheets.push(ws);\n }\n this._nextId = m.nextId;\n }\n}\n","// Excel serial-date <-> JS Date conversion (see docs/STAGE-1.3-SPEC.md §6, docs/OOXML-NOTES.md §8).\n// Self-contained: no dayjs. Excel stores dates as day serials, and we honor both epoch systems plus\n// the deliberate 1900 leap-year bug that Excel preserves for Lotus 1-2-3 compatibility.\n\nconst MS_PER_DAY = 86_400_000;\n\n/** 1900 date system: this UTC instant is serial 0, so 1899-12-31 + serial days => the date.\n * serial 1 = 1900-01-01, serial 59 = 1900-02-28. */\nconst EPOCH_1900 = Date.UTC(1899, 11, 31);\n\n/** 1904 date system: serial 0 = 1904-01-01 (Mac Excel's default). */\nconst EPOCH_1904 = Date.UTC(1904, 0, 1);\n\n/** Excel treats 1900 as a leap year, so serial 60 is the fictional 1900-02-29. Real dates on or after\n * 1900-03-01 are shifted one day up to make room for it; conversions bridge that gap here. */\nconst LEAP_BUG_SERIAL = 60;\n\n/** Convert a `Date` to its Excel day serial (fractional part carries the time of day). */\nexport function dateToSerial(d: Date, date1904 = false): number {\n if (date1904) {\n return (d.getTime() - EPOCH_1904) / MS_PER_DAY;\n }\n const raw = (d.getTime() - EPOCH_1900) / MS_PER_DAY;\n // Real dates from 1900-03-01 (raw 60) onward sit one serial higher because of the phantom 02-29.\n return raw >= LEAP_BUG_SERIAL ? raw + 1 : raw;\n}\n\n/** Convert an Excel day serial back to a `Date` (UTC-based instant). */\nexport function serialToDate(serial: number, date1904 = false): Date {\n if (date1904) {\n return new Date(EPOCH_1904 + serial * MS_PER_DAY);\n }\n // Undo the phantom-day shift for serials past the bug; serial 60 itself resolves to 1900-02-29,\n // which JS normalizes to 1900-03-01 (the same instant serial 61 also maps to).\n const adjusted = serial > LEAP_BUG_SERIAL ? serial - 1 : serial;\n return new Date(EPOCH_1900 + adjusted * MS_PER_DAY);\n}\n","// Shared OPC/OOXML constants (namespaces, content types, relationship-type URIs) used across the\n// part writers. These are the fixed identifiers from ECMA-376 / the Open Packaging Conventions —\n// clean-room, not copied from any implementation.\n\n/** XML namespaces. */\nexport const NS = {\n spreadsheetml: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\n relationships: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n contentTypes: \"http://schemas.openxmlformats.org/package/2006/content-types\",\n packageRels: \"http://schemas.openxmlformats.org/package/2006/relationships\",\n coreProps: \"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\",\n extProps: \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\",\n docPropsVt: \"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\",\n dc: \"http://purl.org/dc/elements/1.1/\",\n dcterms: \"http://purl.org/dc/terms/\",\n dcmitype: \"http://purl.org/dc/dcmitype/\",\n xsi: \"http://www.w3.org/2001/XMLSchema-instance\",\n} as const;\n\n/** Part content types (`[Content_Types].xml` overrides + the two defaults). */\nexport const CONTENT_TYPE = {\n rels: \"application/vnd.openxmlformats-package.relationships+xml\",\n xml: \"application/xml\",\n workbook: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n worksheet: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n styles: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n sharedStrings: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n theme: \"application/vnd.openxmlformats-officedocument.theme+xml\",\n coreProps: \"application/vnd.openxmlformats-package.core-properties+xml\",\n extProps: \"application/vnd.openxmlformats-officedocument.extended-properties+xml\",\n} as const;\n\n/** Relationship-type URIs (the `Type=` attribute on each `<Relationship>`). */\nexport const REL_TYPE = {\n officeDocument:\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n coreProps:\n \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n extProps:\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\",\n worksheet: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n styles: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n sharedStrings:\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n theme: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n} as const;\n\n/** Archive paths for the fixed (non-worksheet) parts. Worksheet paths are `xl/worksheets/sheetN.xml`. */\nexport const PART_PATH = {\n contentTypes: \"[Content_Types].xml\",\n rootRels: \"_rels/.rels\",\n coreProps: \"docProps/core.xml\",\n appProps: \"docProps/app.xml\",\n workbook: \"xl/workbook.xml\",\n workbookRels: \"xl/_rels/workbook.xml.rels\",\n styles: \"xl/styles.xml\",\n sharedStrings: \"xl/sharedStrings.xml\",\n theme: \"xl/theme/theme1.xml\",\n} as const;\n\n/** A resolved relationship-id assignment shared by workbook.xml and workbook.xml.rels so the\n * `r:id`s in the former always match the `Id`s in the latter. */\nexport interface WorkbookRel {\n rId: string;\n type: string;\n /** Target relative to `xl/` (e.g. `worksheets/sheet1.xml`). */\n target: string;\n}\n\n/** A worksheet's identity within the package: its position-derived file, its `r:id`, and model data. */\nexport interface SheetRel {\n rId: string;\n /** File name under `xl/worksheets/` (e.g. `sheet1.xml`). */\n fileName: string;\n /** `sheetId` attribute in workbook.xml (the model's stable worksheet id). */\n sheetId: number;\n name: string;\n state: \"visible\" | \"hidden\" | \"veryHidden\";\n}\n","// A tiny, non-validating pull parser for the OOXML reader (see docs/STAGE-2-SPEC.md §2). Hand-rolled\n// for the same reason xml-writer.ts is: fflate stays the only runtime dependency, so we scan strings\n// rather than pulling in a DOM/SAX library. Not a general XML engine — it targets the well-formed\n// subset Excel/LibreOffice/our own writer emit (no DTDs, no external entities).\n\n/** One token from the document in source order. Prefixed names are kept verbatim (\"r:id\",\n * \"cp:coreProperties\") — OOXML fixes its namespace prefixes, so literal matching is sufficient. */\nexport type XmlEvent =\n | { kind: \"open\"; name: string; attrs: Record<string, string>; selfClosing: boolean }\n | { kind: \"text\"; text: string }\n | { kind: \"close\"; name: string };\n\nconst NAMED_ENTITIES: Record<string, string> = {\n amp: \"&\",\n lt: \"<\",\n gt: \">\",\n quot: '\"',\n apos: \"'\",\n};\n\nconst ENTITY_RE = /&(#x[0-9a-fA-F]+|#[0-9]+|[a-zA-Z][a-zA-Z0-9]*);/g;\n\n/** Decodes the five named XML entities plus numeric `&#nn;`/`&#xhh;` references. Unknown entities are\n * left untouched (better a literal `&foo;` survive than we silently drop it). */\nfunction decodeEntities(s: string): string {\n if (!s.includes(\"&\")) return s;\n return s.replace(ENTITY_RE, (match, ent: string) => {\n if (ent.startsWith(\"#x\") || ent.startsWith(\"#X\")) {\n const code = Number.parseInt(ent.slice(2), 16);\n return Number.isFinite(code) ? String.fromCodePoint(code) : match;\n }\n if (ent.startsWith(\"#\")) {\n const code = Number.parseInt(ent.slice(1), 10);\n return Number.isFinite(code) ? String.fromCodePoint(code) : match;\n }\n const named = NAMED_ENTITIES[ent];\n return named !== undefined ? named : match;\n });\n}\n\nfunction isSpace(c: string | undefined): boolean {\n return c === \" \" || c === \"\\t\" || c === \"\\n\" || c === \"\\r\";\n}\n\n/** Finds the unquoted `>` that ends a tag starting at `start` (the char right after `<`). Attribute\n * values may legally contain a literal `>`, so quote state must be tracked while scanning. */\nfunction findTagEnd(xml: string, start: number): number {\n let i = start;\n let quote: string | undefined;\n while (i < xml.length) {\n const c = xml[i];\n if (quote) {\n if (c === quote) quote = undefined;\n } else if (c === '\"' || c === \"'\") {\n quote = c;\n } else if (c === \">\") {\n return i;\n }\n i++;\n }\n return xml.length;\n}\n\n/** Parses `name attr1=\"val1\" attr2='val2'` (the tag's inner content, `<`/`>`/trailing `/` stripped). */\nfunction parseOpenTag(inner: string): { name: string; attrs: Record<string, string> } {\n const len = inner.length;\n let i = 0;\n while (i < len && !isSpace(inner[i])) i++;\n const name = inner.slice(0, i);\n const attrs: Record<string, string> = {};\n\n while (i < len) {\n while (i < len && isSpace(inner[i])) i++;\n if (i >= len) break;\n let j = i;\n while (j < len && inner[j] !== \"=\" && !isSpace(inner[j])) j++;\n const attrName = inner.slice(i, j);\n if (!attrName) break;\n while (j < len && isSpace(inner[j])) j++;\n if (inner[j] === \"=\") {\n j++;\n while (j < len && isSpace(inner[j])) j++;\n const quote = inner[j];\n j++;\n const valStart = j;\n while (j < len && inner[j] !== quote) j++;\n attrs[attrName] = decodeEntities(inner.slice(valStart, j));\n j++; // skip closing quote\n i = j;\n } else {\n attrs[attrName] = \"\";\n i = j;\n }\n }\n\n return { name, attrs };\n}\n\n/** Streams events in document order. Skips the `<?xml …?>` declaration (and any other processing\n * instruction), `<!-- comments -->` and `<!DOCTYPE …>`-shaped declarations; emits `<![CDATA[…]]>`\n * content as literal text. Whitespace in text nodes is never trimmed or collapsed. */\nexport function* parseXml(xml: string): Generator<XmlEvent> {\n const len = xml.length;\n let i = 0;\n\n while (i < len) {\n if (xml[i] === \"<\") {\n if (xml.startsWith(\"<?\", i)) {\n const end = xml.indexOf(\"?>\", i + 2);\n i = end === -1 ? len : end + 2;\n continue;\n }\n if (xml.startsWith(\"<!--\", i)) {\n const end = xml.indexOf(\"-->\", i + 4);\n i = end === -1 ? len : end + 3;\n continue;\n }\n if (xml.startsWith(\"<![CDATA[\", i)) {\n const end = xml.indexOf(\"]]>\", i + 9);\n const text = end === -1 ? xml.slice(i + 9) : xml.slice(i + 9, end);\n i = end === -1 ? len : end + 3;\n if (text.length > 0) yield { kind: \"text\", text };\n continue;\n }\n if (xml.startsWith(\"<!\", i)) {\n const end = xml.indexOf(\">\", i + 2);\n i = end === -1 ? len : end + 1;\n continue;\n }\n if (xml[i + 1] === \"/\") {\n const end = xml.indexOf(\">\", i + 2);\n const name = xml.slice(i + 2, end === -1 ? len : end).trim();\n i = end === -1 ? len : end + 1;\n yield { kind: \"close\", name };\n continue;\n }\n\n const tagEnd = findTagEnd(xml, i + 1);\n const selfClosing = xml[tagEnd - 1] === \"/\";\n const inner = xml.slice(i + 1, selfClosing ? tagEnd - 1 : tagEnd);\n const { name, attrs } = parseOpenTag(inner);\n i = tagEnd === len ? len : tagEnd + 1;\n yield { kind: \"open\", name, attrs, selfClosing };\n continue;\n }\n\n const next = xml.indexOf(\"<\", i);\n const raw = next === -1 ? xml.slice(i) : xml.slice(i, next);\n i = next === -1 ? len : next;\n if (raw.length > 0) yield { kind: \"text\", text: decodeEntities(raw) };\n }\n}\n\n/** Strips a namespace prefix (`\"cp:coreProperties\"` → `\"coreProperties\"`) for the few comparisons that\n * must be prefix-agnostic. Most matching is literal — OOXML's prefixes are fixed by convention. */\nexport function localName(name: string): string {\n const idx = name.indexOf(\":\");\n return idx === -1 ? name : name.slice(idx + 1);\n}\n\n/** Convenience cursor over the event stream for recursive-descent readers. */\nexport interface XmlCursor {\n next(): XmlEvent | undefined;\n peek(): XmlEvent | undefined;\n /** Collects raw text content until the matching close of `name` (assumes its `open` was already\n * consumed). Only text events contribute; child markup is skipped over, not included. */\n textUntilClose(name: string): string;\n /** Invokes `onOpen` for each direct child element of the current open element (whose `open` was\n * already consumed by the caller), then consumes the container's own close. `onOpen` is responsible\n * for fully consuming its element (including any nested close) before returning, unless it is\n * self-closing. */\n eachChild(name: string, onOpen: (ev: Extract<XmlEvent, { kind: \"open\" }>) => void): void;\n}\n\n/** Builds a {@link XmlCursor} over `xml`. */\nexport function cursor(xml: string): XmlCursor {\n const gen = parseXml(xml);\n let lookahead: XmlEvent | undefined;\n let hasLookahead = false;\n\n function pull(): XmlEvent | undefined {\n const result = gen.next();\n return result.done ? undefined : result.value;\n }\n\n function next(): XmlEvent | undefined {\n if (hasLookahead) {\n hasLookahead = false;\n const ev = lookahead;\n lookahead = undefined;\n return ev;\n }\n return pull();\n }\n\n function peek(): XmlEvent | undefined {\n if (!hasLookahead) {\n lookahead = pull();\n hasLookahead = true;\n }\n return lookahead;\n }\n\n function textUntilClose(name: string): string {\n let text = \"\";\n let depth = 1;\n for (let ev = next(); ev; ev = next()) {\n if (ev.kind === \"text\") {\n text += ev.text;\n } else if (ev.kind === \"open\") {\n if (ev.name === name && !ev.selfClosing) depth++;\n } else if (ev.kind === \"close\" && ev.name === name) {\n depth--;\n if (depth === 0) break;\n }\n }\n return text;\n }\n\n function eachChild(\n name: string,\n onOpen: (ev: Extract<XmlEvent, { kind: \"open\" }>) => void,\n ): void {\n for (let ev = next(); ev; ev = next()) {\n if (ev.kind === \"close\" && ev.name === name) break;\n if (ev.kind === \"open\") onOpen(ev);\n }\n }\n\n return { next, peek, textUntilClose, eachChild };\n}\n","// A tiny, allocation-light XML string builder for the OOXML writer (see docs/STAGE-1.3-SPEC.md §2).\n// Hand-rolled on purpose: fflate is the only runtime dependency and stays that way, so we escape and\n// concatenate strings rather than pulling in a DOM/XML library. No streaming, no validation — the\n// callers know the schema.\n\n/** Emitted at the head of every part unless `declaration: false` is passed. */\nconst XML_DECLARATION = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\n/** Attribute values accepted by {@link XmlWriter}; `undefined` (and `null`) attributes are dropped. */\ntype AttrValue = string | number | boolean | undefined | null;\n\n/** Escapes text content: `&`, `<`, `>`. `&` must be replaced first so the others' entities survive. */\nexport function escapeXmlText(s: string): string {\n return s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\n/** Escapes an attribute value: the text set plus `\"` and `'` (both may appear inside a quoted attr). */\nexport function escapeXmlAttr(s: string): string {\n return escapeXmlText(s).replace(/\"/g, \"&quot;\").replace(/'/g, \"&apos;\");\n}\n\n/** A string needs `xml:space=\"preserve\"` when it has leading or trailing whitespace that Excel would\n * otherwise trim off a `<t>` shared/inline-string element. */\nfunction needsWhitespacePreserve(s: string): boolean {\n return /^\\s|\\s$/.test(s);\n}\n\nexport class XmlWriter {\n private buffer = \"\";\n\n constructor(opts?: { declaration?: boolean }) {\n if (opts?.declaration !== false) {\n this.buffer = XML_DECLARATION;\n }\n }\n\n /** Serialize an attribute record, omitting `undefined`/`null` and rendering booleans as `1`/`0`. */\n private renderAttrs(attrs?: Record<string, AttrValue>): string {\n if (!attrs) return \"\";\n let out = \"\";\n for (const key of Object.keys(attrs)) {\n const value = attrs[key];\n if (value === undefined || value === null) continue;\n const raw = typeof value === \"boolean\" ? (value ? \"1\" : \"0\") : String(value);\n out += ` ${key}=\"${escapeXmlAttr(raw)}\"`;\n }\n return out;\n }\n\n /** Open an element: `<tag …>`. */\n open(tag: string, attrs?: Record<string, AttrValue>): this {\n this.buffer += `<${tag}${this.renderAttrs(attrs)}>`;\n return this;\n }\n\n /** Self-closing element with attributes only: `<tag …/>`. */\n leaf(tag: string, attrs?: Record<string, AttrValue>): this {\n this.buffer += `<${tag}${this.renderAttrs(attrs)}/>`;\n return this;\n }\n\n /** Element with escaped text content: `<tag …>text</tag>`. A `<t>` whose text has leading/trailing\n * whitespace automatically gains `xml:space=\"preserve\"` (explicit attrs win if they set it). */\n el(tag: string, text: string, attrs?: Record<string, AttrValue>): this {\n const finalAttrs =\n tag === \"t\" && needsWhitespacePreserve(text) ? { \"xml:space\": \"preserve\", ...attrs } : attrs;\n this.buffer += `<${tag}${this.renderAttrs(finalAttrs)}>${escapeXmlText(text)}</${tag}>`;\n return this;\n }\n\n /** Append escaped text content at the current position. */\n text(value: string): this {\n this.buffer += escapeXmlText(value);\n return this;\n }\n\n /** Append already-serialized markup verbatim (escape hatch for composing sub-builders). */\n raw(xml: string): this {\n this.buffer += xml;\n return this;\n }\n\n /** Close an element: `</tag>`. */\n close(tag: string): this {\n this.buffer += `</${tag}>`;\n return this;\n }\n\n toString(): string {\n return this.buffer;\n }\n\n toBytes(): Uint8Array {\n return new TextEncoder().encode(this.buffer);\n }\n}\n","// ZIP abstraction layer. Uses fflate under the hood for reading/writing OOXML archives.\n\nimport { unzipSync, zipSync } from \"fflate\";\n\n/** Entries of a ZIP archive, keyed by path (e.g. \"xl/worksheets/sheet1.xml\"). */\nexport type ZipEntries = Map<string, Uint8Array>;\n\n/** Reads a ZIP archive buffer into a map of entry path -> raw bytes. */\nfunction readZipArchive(data: Uint8Array): ZipEntries {\n const unzipped = unzipSync(data);\n return new Map(Object.entries(unzipped));\n}\n\n/** Writes a map of entry path -> raw bytes into a ZIP archive buffer. */\nfunction writeZipArchive(entries: ZipEntries): Uint8Array {\n return zipSync(Object.fromEntries(entries));\n}\n\nexport { readZipArchive, writeZipArchive };\n","// Unzip + part discovery (see docs/STAGE-2-SPEC.md §3). Mirrors the write side's `zip-layer` +\n// `parts/root-rels.ts`/`parts/workbook-rels.ts` in reverse: everything is resolved through the OPC\n// relationships rather than fixed paths, so a foreign producer using different part names still works.\n\nimport { InvalidPackageError, UnsupportedFeatureError } from \"../../errors.js\";\nimport { cursor } from \"../../xml/index.js\";\nimport { readZipArchive, type ZipEntries } from \"../../zip-layer.js\";\nimport { CONTENT_TYPE, PART_PATH, REL_TYPE } from \"../parts/constants.js\";\n\n/** Resolved OOXML package parts, discovered via the OPC relationships. */\nexport interface PackageParts {\n /** Raw bytes of a part, or `undefined` if the archive has no such entry. */\n entry(path: string): Uint8Array | undefined;\n /** UTF-8 decoded text of a part, or `undefined` if the archive has no such entry. */\n text(path: string): string | undefined;\n /** rId -> target resolved relative to the workbook part's directory (e.g. `rId1` -> `\"xl/worksheets/sheet1.xml\"`). */\n workbookRels(): Map<string, { type: string; target: string }>;\n /** Absolute path of the workbook part from `_rels/.rels` (normally `xl/workbook.xml`). */\n workbookPath(): string;\n}\n\ninterface RelEntry {\n id: string;\n type: string;\n target: string;\n}\n\nconst decoder = new TextDecoder();\n\n/** Unzips `.xlsx` bytes and resolves the workbook part + its relationships. */\nexport function openPackage(bytes: Uint8Array): PackageParts {\n const zip = readZip(bytes);\n\n const entry = (path: string): Uint8Array | undefined => zip.get(path);\n const text = (path: string): string | undefined => {\n const raw = zip.get(path);\n return raw === undefined ? undefined : decoder.decode(raw);\n };\n\n const rootRelsXml = text(PART_PATH.rootRels);\n if (rootRelsXml === undefined) {\n throw new InvalidPackageError(`missing ${PART_PATH.rootRels}`);\n }\n const officeDocRel = parseRels(rootRelsXml).find((r) => r.type === REL_TYPE.officeDocument);\n if (!officeDocRel) {\n throw new InvalidPackageError(`${PART_PATH.rootRels} has no officeDocument relationship`);\n }\n const workbookPath = resolveRelTarget(\"\", officeDocRel.target);\n\n const contentTypesXml = text(PART_PATH.contentTypes);\n if (contentTypesXml === undefined) {\n throw new UnsupportedFeatureError(\n `package is missing ${PART_PATH.contentTypes}; not a recognizable OOXML package`,\n );\n }\n assertSpreadsheetPackage(contentTypesXml, workbookPath);\n\n if (entry(workbookPath) === undefined) {\n throw new InvalidPackageError(`workbook part not found at ${workbookPath}`);\n }\n\n const workbookDir = dirname(workbookPath);\n const workbookRelsXml = text(relsPathFor(workbookPath));\n const relsMap = new Map<string, { type: string; target: string }>();\n if (workbookRelsXml !== undefined) {\n for (const rel of parseRels(workbookRelsXml)) {\n relsMap.set(rel.id, { type: rel.type, target: resolveRelTarget(workbookDir, rel.target) });\n }\n }\n\n return {\n entry,\n text,\n workbookRels: () => relsMap,\n workbookPath: () => workbookPath,\n };\n}\n\nfunction readZip(bytes: Uint8Array): ZipEntries {\n try {\n return readZipArchive(bytes);\n } catch (e) {\n throw new InvalidPackageError(`could not read zip archive: ${(e as Error).message}`);\n }\n}\n\n/** Parses a `.rels` document (`_rels/.rels` or `xl/_rels/workbook.xml.rels`-shaped) into its entries. */\nfunction parseRels(xml: string): RelEntry[] {\n const c = cursor(xml);\n let ev = c.next();\n while (ev && !(ev.kind === \"open\" && ev.name === \"Relationships\")) ev = c.next();\n if (ev?.kind !== \"open\") return [];\n\n const rels: RelEntry[] = [];\n if (!ev.selfClosing) {\n c.eachChild(ev.name, (child) => {\n if (child.name !== \"Relationship\") return;\n rels.push({\n id: child.attrs.Id ?? \"\",\n type: child.attrs.Type ?? \"\",\n target: child.attrs.Target ?? \"\",\n });\n });\n }\n return rels;\n}\n\n/** Sanity-checks `[Content_Types].xml` declares the workbook part as a spreadsheet main part. Fails\n * fast on foreign OPC packages (e.g. a `.docx`) rather than parsing garbage worksheets later. */\nfunction assertSpreadsheetPackage(contentTypesXml: string, workbookPath: string): void {\n const c = cursor(contentTypesXml);\n let ev = c.next();\n while (ev && !(ev.kind === \"open\" && ev.name === \"Types\")) ev = c.next();\n if (ev?.kind !== \"open\") {\n throw new UnsupportedFeatureError(\n `${PART_PATH.contentTypes} has no <Types> root; not a recognizable OOXML package`,\n );\n }\n\n let isSpreadsheet = false;\n if (!ev.selfClosing) {\n c.eachChild(ev.name, (child) => {\n if (child.name !== \"Override\") return;\n const partName = child.attrs.PartName?.replace(/^\\//, \"\");\n if (partName === workbookPath && child.attrs.ContentType === CONTENT_TYPE.workbook) {\n isSpreadsheet = true;\n }\n });\n }\n if (!isSpreadsheet) {\n throw new UnsupportedFeatureError(\n `package does not declare ${workbookPath} as a spreadsheet workbook in ${PART_PATH.contentTypes}`,\n );\n }\n}\n\nfunction dirname(path: string): string {\n const idx = path.lastIndexOf(\"/\");\n return idx === -1 ? \"\" : path.slice(0, idx);\n}\n\n/** The `.rels` sibling of a part: `xl/workbook.xml` -> `xl/_rels/workbook.xml.rels`. */\nfunction relsPathFor(partPath: string): string {\n const dir = dirname(partPath);\n const base = dir ? partPath.slice(dir.length + 1) : partPath;\n return dir ? `${dir}/_rels/${base}.rels` : `_rels/${base}.rels`;\n}\n\n/** Resolves a relationship `Target` against the directory containing the part that references it.\n * Handles package-root-absolute targets (`/xl/media/image1.png`) and `../` traversal. */\nfunction resolveRelTarget(baseDir: string, target: string): string {\n if (target.startsWith(\"/\")) return target.slice(1);\n const parts = baseDir ? baseDir.split(\"/\") : [];\n for (const seg of target.split(\"/\")) {\n if (seg === \"\" || seg === \".\") continue;\n if (seg === \"..\") parts.pop();\n else parts.push(seg);\n }\n return parts.join(\"/\");\n}\n","// Parses `docProps/core.xml` + `docProps/app.xml` back onto a `Workbook` (see\n// docs/STAGE-2-SPEC.md §7). Inverts `../parts/core-props.ts` / `../parts/app-props.ts`: unset\n// elements leave the model's defaults untouched.\n\nimport type { Workbook } from \"../../model/index.js\";\nimport { cursor, localName } from \"../../xml/index.js\";\n\n/** Parses a W3CDTF timestamp (`YYYY-MM-DDTHH:mm:ssZ`, as emitted by `toW3CDTF`) into a `Date`. */\nexport function fromW3CDTF(text: string): Date {\n return new Date(text);\n}\n\n/** Applies `docProps/core.xml` (Dublin Core metadata, W3CDTF dates) onto `wb`. */\nexport function applyCoreProps(wb: Workbook, xml: string): void {\n const c = cursor(xml);\n let ev = c.next();\n while (ev && !(ev.kind === \"open\" && localName(ev.name) === \"coreProperties\")) ev = c.next();\n if (ev?.kind !== \"open\" || ev.selfClosing) return;\n\n c.eachChild(ev.name, (child) => {\n const name = localName(child.name);\n const text = child.selfClosing ? \"\" : c.textUntilClose(child.name);\n switch (name) {\n case \"creator\":\n wb.creator = text;\n break;\n case \"title\":\n wb.title = text;\n break;\n case \"subject\":\n wb.subject = text;\n break;\n case \"description\":\n wb.description = text;\n break;\n case \"keywords\":\n wb.keywords = text;\n break;\n case \"category\":\n wb.category = text;\n break;\n case \"lastModifiedBy\":\n wb.lastModifiedBy = text;\n break;\n case \"created\":\n wb.created = fromW3CDTF(text);\n break;\n case \"modified\":\n wb.modified = fromW3CDTF(text);\n break;\n }\n });\n}\n\n/** Applies `docProps/app.xml` (Company/Manager) onto `wb`. */\nexport function applyAppProps(wb: Workbook, xml: string): void {\n const c = cursor(xml);\n let ev = c.next();\n while (ev && !(ev.kind === \"open\" && localName(ev.name) === \"Properties\")) ev = c.next();\n if (ev?.kind !== \"open\" || ev.selfClosing) return;\n\n c.eachChild(ev.name, (child) => {\n const name = localName(child.name);\n const text = child.selfClosing ? \"\" : c.textUntilClose(child.name);\n if (name === \"Company\") wb.company = text;\n else if (name === \"Manager\") wb.manager = text;\n });\n}\n","// Parses `xl/sharedStrings.xml` back into the pool the writer built from (see\n// docs/STAGE-2-SPEC.md §4). Inverts `../shared-strings.ts`: a `<si>` holding a lone `<t>` becomes a\n// plain string; otherwise its `<r>` runs become a `RichText`, each run's `<rPr>` inverting\n// `renderRunProps` into a `Font`.\n\nimport type { Font, RichText, RichTextRun } from \"../../model/index.js\";\nimport { cursor, localName, type XmlCursor } from \"../../xml/index.js\";\n\n/** Parses `xl/sharedStrings.xml`. An absent/empty part (no `<sst>` root) yields `[]`. */\nexport function parseSharedStrings(xml: string): (string | RichText)[] {\n const c = cursor(xml);\n let ev = c.next();\n while (ev && !(ev.kind === \"open\" && localName(ev.name) === \"sst\")) ev = c.next();\n if (ev?.kind !== \"open\" || ev.selfClosing) return [];\n\n const entries: (string | RichText)[] = [];\n c.eachChild(ev.name, (child) => {\n if (localName(child.name) !== \"si\") return;\n entries.push(child.selfClosing ? \"\" : parseRichString(c, child.name));\n });\n return entries;\n}\n\n/**\n * Parses a CT_Rst container's children (`<si>` in sharedStrings, or `<is>` inline on a worksheet cell —\n * the grammar is identical): a lone `<t>` is a plain string, `<r>` runs make a `RichText`. `container`\n * is the open element's name (prefix included); its `open` must already be consumed.\n */\nexport function parseRichString(c: XmlCursor, container: string): string | RichText {\n let text: string | undefined;\n const runs: RichTextRun[] = [];\n\n c.eachChild(container, (child) => {\n const name = localName(child.name);\n if (name === \"t\") {\n text = child.selfClosing ? \"\" : c.textUntilClose(child.name);\n } else if (name === \"r\") {\n runs.push(child.selfClosing ? { text: \"\" } : parseRun(c, child.name));\n } else if (!child.selfClosing) {\n c.textUntilClose(child.name); // skip rPh/phoneticPr etc.\n }\n });\n\n return runs.length > 0 ? { richText: runs } : (text ?? \"\");\n}\n\n/** Parses one `<r>` run: its `<rPr>` (via {@link parseRunProps}) and `<t>` text. */\nfunction parseRun(c: XmlCursor, rName: string): RichTextRun {\n let text = \"\";\n let font: Font | undefined;\n\n c.eachChild(rName, (child) => {\n const name = localName(child.name);\n if (name === \"t\") {\n text = child.selfClosing ? \"\" : c.textUntilClose(child.name);\n } else if (name === \"rPr\") {\n font = child.selfClosing ? {} : parseRunProps(c, child.name);\n } else if (!child.selfClosing) {\n c.textUntilClose(child.name);\n }\n });\n\n return font ? { text, font } : { text };\n}\n\n/** Inverts `renderRunProps`: `<rPr>`'s children back into a `Font`. */\nfunction parseRunProps(c: XmlCursor, rPrName: string): Font {\n const font: Font = {};\n\n c.eachChild(rPrName, (child) => {\n const name = localName(child.name);\n switch (name) {\n case \"rFont\":\n font.name = child.attrs.val;\n break;\n case \"charset\":\n font.charset = Number(child.attrs.val);\n break;\n case \"family\":\n font.family = Number(child.attrs.val);\n break;\n case \"b\":\n font.bold = readBool(child.attrs.val);\n break;\n case \"i\":\n font.italic = readBool(child.attrs.val);\n break;\n case \"strike\":\n font.strike = readBool(child.attrs.val);\n break;\n case \"outline\":\n font.outline = readBool(child.attrs.val);\n break;\n case \"color\":\n font.color = parseColor(child.attrs);\n break;\n case \"sz\":\n font.size = Number(child.attrs.val);\n break;\n case \"u\":\n font.underline = (child.attrs.val as Font[\"underline\"]) ?? true;\n break;\n case \"vertAlign\":\n font.vertAlign = child.attrs.val as Font[\"vertAlign\"];\n break;\n case \"scheme\":\n font.scheme = child.attrs.val as Font[\"scheme\"];\n break;\n }\n if (!child.selfClosing) c.textUntilClose(child.name);\n });\n\n return font;\n}\n\nfunction parseColor(attrs: Record<string, string>): Font[\"color\"] {\n if (attrs.rgb !== undefined) return { argb: attrs.rgb };\n if (attrs.theme !== undefined) return { theme: Number(attrs.theme) };\n if (attrs.indexed !== undefined) return { indexed: Number(attrs.indexed) };\n return undefined;\n}\n\n/** CT_BooleanProperty: an absent `val` means true (the writer only ever emits the bare element),\n * `\"0\"`/`\"false\"` mean false, anything else true. */\nfunction readBool(val: string | undefined): boolean {\n return val === undefined || (val !== \"0\" && val !== \"false\");\n}\n","// The style dedup pools (see docs/STAGE-1.3-SPEC.md §4, docs/OOXML-NOTES.md §5). xl/styles.xml is a set\n// of indexed sub-pools (numFmts, fonts, fills, borders, cellXfs); a cell references a composed cellXf by\n// integer id via its `s=\"\"` attribute. `addStyle` decomposes an already-resolved Style (Stage 1.2 did the\n// row/column/cell precedence), interns each sub-object structurally, then interns the composed <xf>.\n//\n// The baseline seeds — fonts[0] Calibri, fills[0] none + fills[1] gray125, borders[0] empty, one default\n// cellStyleXf/cellXf — are mandatory: Excel prompts to \"repair\" the file if these indices are wrong.\n\nimport type {\n Alignment,\n Border,\n Borders,\n Color,\n Fill,\n Font,\n Protection,\n Style,\n} from \"../model/index.js\";\nimport { XmlWriter } from \"../xml/index.js\";\n\nconst SPREADSHEETML_NS = \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\";\n\n/** Custom number-format codes allocate ids from here upward; 0–163 are reserved for built-ins. */\nconst FIRST_CUSTOM_NUMFMT_ID = 164;\n\n/** The default font (cellXf/font id 0). Matches Excel's out-of-the-box Calibri 11, theme text colour. */\nconst DEFAULT_FONT: Font = {\n size: 11,\n color: { theme: 1 },\n name: \"Calibri\",\n family: 2,\n scheme: \"minor\",\n};\n\n/** cellStyleXfs holds a single default <xf> (id 0); every cellXf points back at it via `xfId=\"0\"`. */\nconst DEFAULT_CELL_STYLE_XF = '<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/>';\n\n/**\n * Built-in number formats: reserved code → id. A cell whose `numFmt` matches one of these reuses the\n * reserved id and emits no `<numFmt>` entry; anything else becomes a custom code at id ≥ 164. Strings must\n * match exactly to dedup, so these mirror the canonical ECMA-376 built-in codes.\n */\nexport const BUILTIN_NUMFMT_BY_CODE = new Map<string, number>([\n [\"General\", 0],\n [\"0\", 1],\n [\"0.00\", 2],\n [\"#,##0\", 3],\n [\"#,##0.00\", 4],\n [\"0%\", 9],\n [\"0.00%\", 10],\n [\"0.00E+00\", 11],\n [\"# ?/?\", 12],\n [\"# ??/??\", 13],\n [\"mm-dd-yy\", 14],\n [\"d-mmm-yy\", 15],\n [\"d-mmm\", 16],\n [\"mmm-yy\", 17],\n [\"h:mm AM/PM\", 18],\n [\"h:mm:ss AM/PM\", 19],\n [\"h:mm\", 20],\n [\"h:mm:ss\", 21],\n [\"m/d/yy h:mm\", 22],\n [\"#,##0 ;(#,##0)\", 37],\n [\"#,##0 ;[Red](#,##0)\", 38],\n [\"#,##0.00;(#,##0.00)\", 39],\n [\"#,##0.00;[Red](#,##0.00)\", 40],\n [\"mm:ss\", 45],\n [\"[h]:mm:ss\", 46],\n [\"mmss.0\", 47],\n [\"##0.0E+0\", 48],\n [\"@\", 49],\n]);\n\nexport interface Styles {\n /** Intern a resolved cell Style; returns its cellXf index (the value for a cell's `s=\"\"` attr). A cell\n * with no style — or a structurally-default one — returns 0, the seeded default cellXf. */\n addStyle(style: Style | undefined): number;\n /** Render the complete xl/styles.xml. Always non-empty (the baseline seeds are always present). */\n toXml(): string;\n}\n\nexport function createStyles(): Styles {\n return new StylesBuilder();\n}\n\n/** A structural-dedup pool: identical rendered XML collapses to one entry, its array index the id. */\nclass InternPool {\n private readonly ids = new Map<string, number>();\n readonly xml: string[] = [];\n\n constructor(seeds: string[]) {\n for (const seed of seeds) this.intern(seed);\n }\n\n intern(rendered: string): number {\n const existing = this.ids.get(rendered);\n if (existing !== undefined) return existing;\n const id = this.xml.length;\n this.ids.set(rendered, id);\n this.xml.push(rendered);\n return id;\n }\n\n get count(): number {\n return this.xml.length;\n }\n}\n\nclass StylesBuilder implements Styles {\n private readonly fonts = new InternPool([renderFont(DEFAULT_FONT)]);\n private readonly fills = new InternPool([\n renderFill({ type: \"pattern\", pattern: \"none\" }),\n renderFill({ type: \"pattern\", pattern: \"gray125\" }),\n ]);\n private readonly borders = new InternPool([renderBorder(undefined)]);\n private readonly cellXfs = new InternPool([\n renderXf({ numFmtId: 0, fontId: 0, fillId: 0, borderId: 0 }),\n ]);\n\n /** Custom number-format code → allocated id (≥ 164), and the `<numFmt>` fragments in id order. */\n private readonly customNumFmtIds = new Map<string, number>();\n private readonly numFmtXml: string[] = [];\n private nextNumFmtId = FIRST_CUSTOM_NUMFMT_ID;\n\n /** Fast path for the common case of one Style object shared across many cells. */\n private readonly cache = new WeakMap<Style, number>();\n\n addStyle(style: Style | undefined): number {\n if (style === undefined) return 0;\n const cached = this.cache.get(style);\n if (cached !== undefined) return cached;\n\n const numFmtId = this.internNumFmt(style.numFmt);\n const fontId = style.font ? this.fonts.intern(renderFont(style.font)) : 0;\n const fillId = style.fill ? this.fills.intern(renderFill(style.fill)) : 0;\n const borderId = style.border ? this.borders.intern(renderBorder(style.border)) : 0;\n\n const id = this.cellXfs.intern(\n renderXf({\n numFmtId,\n fontId,\n fillId,\n borderId,\n alignment: style.alignment,\n protection: style.protection,\n }),\n );\n this.cache.set(style, id);\n return id;\n }\n\n private internNumFmt(code: string | undefined): number {\n if (code === undefined) return 0;\n const builtin = BUILTIN_NUMFMT_BY_CODE.get(code);\n if (builtin !== undefined) return builtin;\n const existing = this.customNumFmtIds.get(code);\n if (existing !== undefined) return existing;\n const id = this.nextNumFmtId++;\n this.customNumFmtIds.set(code, id);\n this.numFmtXml.push(renderNumFmt(id, code));\n return id;\n }\n\n toXml(): string {\n const w = new XmlWriter();\n w.open(\"styleSheet\", { xmlns: SPREADSHEETML_NS });\n\n if (this.numFmtXml.length > 0) {\n w.open(\"numFmts\", { count: this.numFmtXml.length });\n for (const x of this.numFmtXml) w.raw(x);\n w.close(\"numFmts\");\n }\n\n w.open(\"fonts\", { count: this.fonts.count });\n for (const x of this.fonts.xml) w.raw(x);\n w.close(\"fonts\");\n\n w.open(\"fills\", { count: this.fills.count });\n for (const x of this.fills.xml) w.raw(x);\n w.close(\"fills\");\n\n w.open(\"borders\", { count: this.borders.count });\n for (const x of this.borders.xml) w.raw(x);\n w.close(\"borders\");\n\n w.open(\"cellStyleXfs\", { count: 1 });\n w.raw(DEFAULT_CELL_STYLE_XF);\n w.close(\"cellStyleXfs\");\n\n w.open(\"cellXfs\", { count: this.cellXfs.count });\n for (const x of this.cellXfs.xml) w.raw(x);\n w.close(\"cellXfs\");\n\n w.open(\"cellStyles\", { count: 1 });\n w.leaf(\"cellStyle\", { name: \"Normal\", xfId: 0, builtinId: 0 });\n w.close(\"cellStyles\");\n\n w.leaf(\"dxfs\", { count: 0 });\n w.leaf(\"tableStyles\", {\n count: 0,\n defaultTableStyle: \"TableStyleMedium2\",\n defaultPivotStyle: \"PivotStyleLight16\",\n });\n\n w.close(\"styleSheet\");\n return w.toString();\n }\n}\n\n// --- Pure renderers ---------------------------------------------------------------------------------\n\n/** `<font>` per ECMA-376 CT_Font element order (distinct from the run-property CT_RPrElt order used by\n * shared strings: here the name element is `<name>`, and strike/underline sit before size). */\nexport function renderFont(font: Font): string {\n const w = new XmlWriter({ declaration: false });\n w.open(\"font\");\n if (font.bold) w.leaf(\"b\");\n if (font.italic) w.leaf(\"i\");\n if (font.strike) w.leaf(\"strike\");\n if (font.outline) w.leaf(\"outline\");\n renderUnderline(w, font.underline);\n if (font.vertAlign) w.leaf(\"vertAlign\", { val: font.vertAlign });\n if (font.size !== undefined) w.leaf(\"sz\", { val: font.size });\n if (font.color) renderColor(w, \"color\", font.color);\n if (font.name !== undefined) w.leaf(\"name\", { val: font.name });\n if (font.family !== undefined) w.leaf(\"family\", { val: font.family });\n if (font.charset !== undefined) w.leaf(\"charset\", { val: font.charset });\n if (font.scheme) w.leaf(\"scheme\", { val: font.scheme });\n w.close(\"font\");\n return w.toString();\n}\n\n/** `<fill>` — a `<patternFill>` (with optional fg/bg colours) or a linear/path `<gradientFill>`. */\nexport function renderFill(fill: Fill): string {\n const w = new XmlWriter({ declaration: false });\n w.open(\"fill\");\n if (fill.type === \"pattern\") {\n if (fill.fgColor || fill.bgColor) {\n w.open(\"patternFill\", { patternType: fill.pattern });\n if (fill.fgColor) renderColor(w, \"fgColor\", fill.fgColor);\n if (fill.bgColor) renderColor(w, \"bgColor\", fill.bgColor);\n w.close(\"patternFill\");\n } else {\n w.leaf(\"patternFill\", { patternType: fill.pattern });\n }\n } else if (fill.gradient === \"angle\") {\n w.open(\"gradientFill\", { degree: fill.degree });\n renderStops(w, fill.stops);\n w.close(\"gradientFill\");\n } else {\n // A path gradient's single centre maps to the OOXML left/right & top/bottom insets.\n w.open(\"gradientFill\", {\n type: \"path\",\n left: fill.center.left,\n right: fill.center.left,\n top: fill.center.top,\n bottom: fill.center.top,\n });\n renderStops(w, fill.stops);\n w.close(\"gradientFill\");\n }\n w.close(\"fill\");\n return w.toString();\n}\n\nfunction renderStops(w: XmlWriter, stops: { position: number; color: Color }[]): void {\n for (const stop of stops) {\n w.open(\"stop\", { position: stop.position });\n renderColor(w, \"color\", stop.color);\n w.close(\"stop\");\n }\n}\n\n/** `<border>` — CT_Border always lists all four sides plus the diagonal, empty ones self-closed. */\nexport function renderBorder(borders: Borders | undefined): string {\n const w = new XmlWriter({ declaration: false });\n w.open(\"border\", {\n diagonalUp: borders?.diagonal?.up || undefined,\n diagonalDown: borders?.diagonal?.down || undefined,\n });\n renderBorderSide(w, \"left\", borders?.left);\n renderBorderSide(w, \"right\", borders?.right);\n renderBorderSide(w, \"top\", borders?.top);\n renderBorderSide(w, \"bottom\", borders?.bottom);\n renderBorderSide(w, \"diagonal\", borders?.diagonal);\n w.close(\"border\");\n return w.toString();\n}\n\nfunction renderBorderSide(w: XmlWriter, tag: string, side: Border | undefined): void {\n if (!side || side.style === undefined) {\n w.leaf(tag);\n return;\n }\n if (!side.color) {\n w.leaf(tag, { style: side.style });\n return;\n }\n w.open(tag, { style: side.style });\n renderColor(w, \"color\", side.color);\n w.close(tag);\n}\n\n/** `<numFmt numFmtId=\"164\" formatCode=\"…\"/>` — only ever called for custom (id ≥ 164) codes. */\nexport function renderNumFmt(id: number, code: string): string {\n const w = new XmlWriter({ declaration: false });\n w.leaf(\"numFmt\", { numFmtId: id, formatCode: code });\n return w.toString();\n}\n\ninterface XfParts {\n numFmtId: number;\n fontId: number;\n fillId: number;\n borderId: number;\n alignment?: Alignment;\n protection?: Protection;\n}\n\n/** `<xf …>` — the composed cell format. Each `applyX` flag is set only when its component is non-default,\n * and `<alignment>`/`<protection>` children are emitted only when they carry real content. */\nexport function renderXf(xf: XfParts): string {\n const alignmentXml = xf.alignment ? renderAlignment(xf.alignment) : \"\";\n const protectionXml = xf.protection ? renderProtection(xf.protection) : \"\";\n const attrs = {\n numFmtId: xf.numFmtId,\n fontId: xf.fontId,\n fillId: xf.fillId,\n borderId: xf.borderId,\n xfId: 0,\n applyNumberFormat: xf.numFmtId !== 0 || undefined,\n applyFont: xf.fontId !== 0 || undefined,\n applyFill: xf.fillId !== 0 || undefined,\n applyBorder: xf.borderId !== 0 || undefined,\n applyAlignment: alignmentXml !== \"\" || undefined,\n applyProtection: protectionXml !== \"\" || undefined,\n };\n\n const w = new XmlWriter({ declaration: false });\n if (alignmentXml === \"\" && protectionXml === \"\") {\n w.leaf(\"xf\", attrs);\n } else {\n w.open(\"xf\", attrs);\n if (alignmentXml) w.raw(alignmentXml);\n if (protectionXml) w.raw(protectionXml);\n w.close(\"xf\");\n }\n return w.toString();\n}\n\n/** `<alignment>`, or `\"\"` when the alignment carries no meaningful attributes. */\nfunction renderAlignment(a: Alignment): string {\n const attrs = {\n horizontal: a.horizontal,\n vertical: a.vertical,\n textRotation: convertTextRotation(a.textRotation),\n wrapText: a.wrapText || undefined,\n indent: a.indent,\n shrinkToFit: a.shrinkToFit || undefined,\n readingOrder: convertReadingOrder(a.readingOrder),\n };\n if (!hasDefinedValue(attrs)) return \"\";\n const w = new XmlWriter({ declaration: false });\n w.leaf(\"alignment\", attrs);\n return w.toString();\n}\n\n/** `<protection>`, or `\"\"` when neither locked nor hidden is set (false is meaningful, so it is kept). */\nfunction renderProtection(p: Protection): string {\n const attrs = { locked: p.locked, hidden: p.hidden };\n if (!hasDefinedValue(attrs)) return \"\";\n const w = new XmlWriter({ declaration: false });\n w.leaf(\"protection\", attrs);\n return w.toString();\n}\n\nfunction renderColor(w: XmlWriter, tag: string, color: Color): void {\n if (color.argb !== undefined) w.leaf(tag, { rgb: color.argb });\n else if (color.theme !== undefined) w.leaf(tag, { theme: color.theme });\n else if (color.indexed !== undefined) w.leaf(tag, { indexed: color.indexed });\n}\n\nfunction renderUnderline(w: XmlWriter, underline: Font[\"underline\"]): void {\n if (underline === undefined || underline === false || underline === \"none\") return;\n if (underline === true) {\n w.leaf(\"u\");\n return;\n }\n w.leaf(\"u\", { val: underline });\n}\n\n/** Excel stores rotation as 0–90 (counter-clockwise), 91–180 (= 90 − angle, clockwise), or 255 (stacked\n * \"vertical\"). Out-of-range numbers are dropped rather than producing an invalid attribute. */\nfunction convertTextRotation(textRotation: Alignment[\"textRotation\"]): number | undefined {\n if (textRotation === undefined) return undefined;\n if (textRotation === \"vertical\") return 255;\n const r = Math.round(textRotation);\n if (r >= 0 && r <= 90) return r;\n if (r < 0 && r >= -90) return 90 - r;\n return undefined;\n}\n\nfunction convertReadingOrder(readingOrder: Alignment[\"readingOrder\"]): number | undefined {\n if (readingOrder === \"ltr\") return 1;\n if (readingOrder === \"rtl\") return 2;\n return undefined;\n}\n\nfunction hasDefinedValue(attrs: Record<string, unknown>): boolean {\n for (const key of Object.keys(attrs)) {\n if (attrs[key] !== undefined) return true;\n }\n return false;\n}\n","// Inverse of the Stage 1.3 styles builder (see docs/STAGE-2-SPEC.md §5, and src/xlsx/styles.ts for the\n// forward direction). xl/styles.xml is a set of indexed sub-pools; a cell's `s=\"\"` is a cellXf index.\n// We rebuild every pool into an array, then compose a Style per cellXf — emitting a sub-object only when\n// its `applyX` flag is set or its id is non-default, exactly mirroring the writer. This keeps a\n// write -> read -> write cycle structurally identical: the reconstructed Style re-interns to the same\n// pool ids in the same order because each sub-object renders byte-for-byte the same XML it was parsed\n// from.\n\nimport type {\n Alignment,\n Border,\n BorderDiagonal,\n BorderStyle,\n Borders,\n Color,\n Fill,\n FillPattern,\n Font,\n Protection,\n Style,\n} from \"../../model/index.js\";\nimport { parseXml } from \"../../xml/index.js\";\nimport { BUILTIN_NUMFMT_BY_CODE } from \"../styles.js\";\n\n/** The reverse of {@link BUILTIN_NUMFMT_BY_CODE}: reserved numFmtId -> canonical format code. */\nconst BUILTIN_NUMFMT_BY_ID = new Map<number, string>();\nfor (const [code, id] of BUILTIN_NUMFMT_BY_CODE) BUILTIN_NUMFMT_BY_ID.set(id, code);\n\nexport interface StyleTable {\n /** Reconstructed Style for a cell's `s` index; index 0 (or out of range) -> {} (the default). */\n styleFor(index: number): Style;\n /** Whether a cellXf's resolved numFmt is a date/time format (drives number-vs-date on read). */\n isDateStyle(index: number): boolean;\n}\n\n/** Parse xl/styles.xml into a {@link StyleTable}. A missing part yields an all-default table. */\nexport function parseStyles(xml: string | undefined): StyleTable {\n if (xml === undefined) return EMPTY_TABLE;\n const root = parseTree(xml);\n if (root === undefined) return EMPTY_TABLE;\n\n const customNumFmts = parseNumFmts(findChild(root, \"numFmts\"));\n const fonts = mapChildren(findChild(root, \"fonts\"), \"font\", parseFont);\n const fills = mapChildren(findChild(root, \"fills\"), \"fill\", parseFill);\n const borders = mapChildren(findChild(root, \"borders\"), \"border\", parseBorder);\n const xfs = mapChildren(findChild(root, \"cellXfs\"), \"xf\", parseXf);\n\n const numFmtCode = (id: number): string | undefined =>\n customNumFmts.get(id) ?? BUILTIN_NUMFMT_BY_ID.get(id);\n\n const styleFor = (index: number): Style => {\n if (!Number.isInteger(index) || index <= 0 || index >= xfs.length) return {};\n const xf = xfs[index];\n if (xf === undefined) return {};\n\n const style: Style = {};\n\n if (xf.numFmtId !== 0 || xf.applyNumberFormat) {\n const code = numFmtCode(xf.numFmtId);\n if (code !== undefined && code !== \"General\") style.numFmt = code;\n }\n if (xf.fontId !== 0 || xf.applyFont) {\n const font = fonts[xf.fontId];\n if (font !== undefined && hasKeys(font)) style.font = font;\n }\n if (xf.fillId !== 0 || xf.applyFill) {\n const fill = fills[xf.fillId];\n if (fill !== undefined) style.fill = fill;\n }\n if (xf.borderId !== 0 || xf.applyBorder) {\n const border = borders[xf.borderId];\n if (border !== undefined && hasKeys(border)) style.border = border;\n }\n if (xf.alignment !== undefined && hasKeys(xf.alignment)) style.alignment = xf.alignment;\n if (xf.protection !== undefined && hasKeys(xf.protection)) style.protection = xf.protection;\n\n return style;\n };\n\n const isDateStyle = (index: number): boolean => {\n if (!Number.isInteger(index) || index < 0 || index >= xfs.length) return false;\n const xf = xfs[index];\n if (xf === undefined) return false;\n const id = xf.numFmtId;\n if ((id >= 14 && id <= 22) || (id >= 45 && id <= 47)) return true;\n const code = numFmtCode(id);\n return code !== undefined && isDateFormatCode(code);\n };\n\n return { styleFor, isDateStyle };\n}\n\nconst EMPTY_TABLE: StyleTable = {\n styleFor: () => ({}),\n isDateStyle: () => false,\n};\n\n// --- number-format date detection -------------------------------------------------------------------\n\n/**\n * Whether a format code renders a date/time. True when it carries a date/time token (`y m d h s`, an\n * elapsed-time bracket like `[h]`/`[mm]`, and by extension AM/PM which always co-occurs with `m`)\n * outside quoted literals, escapes and colour/condition brackets (`[Red]`, `[>100]`, `[$-409]`). Callers\n * short-circuit the reserved built-in date ids (14–22, 45–47); this handles custom codes. Mirrors the\n * ambiguity resolution Excel and ExcelJS apply to decide number-vs-date on read.\n */\nexport function isDateFormatCode(code: string): boolean {\n const n = code.length;\n let i = 0;\n while (i < n) {\n const ch = code[i];\n if (ch === undefined) break;\n if (ch === \"\\\\\") {\n i += 2; // an escaped literal char is never a token\n continue;\n }\n if (ch === '\"') {\n i++;\n while (i < n && code[i] !== '\"') i++;\n i++; // skip the closing quote\n continue;\n }\n if (ch === \"[\") {\n const close = code.indexOf(\"]\", i);\n const first = code[i + 1];\n // `[h]`/`[hh]`/`[mm]`/`[ss]` are elapsed-time tokens; `[Red]`/`[>100]`/`[$-x]` are not.\n if (first !== undefined && \"hHmMsS\".includes(first)) return true;\n i = close === -1 ? n : close + 1;\n continue;\n }\n if (\"yYmMdDhHsS\".includes(ch)) return true;\n i++;\n }\n return false;\n}\n\n// --- xf composition ---------------------------------------------------------------------------------\n\ninterface XfData {\n numFmtId: number;\n fontId: number;\n fillId: number;\n borderId: number;\n applyNumberFormat: boolean;\n applyFont: boolean;\n applyFill: boolean;\n applyBorder: boolean;\n alignment?: Alignment;\n protection?: Protection;\n}\n\nfunction parseXf(el: Element): XfData {\n const xf: XfData = {\n numFmtId: numAttr(el, \"numFmtId\", 0),\n fontId: numAttr(el, \"fontId\", 0),\n fillId: numAttr(el, \"fillId\", 0),\n borderId: numAttr(el, \"borderId\", 0),\n applyNumberFormat: attrTrue(el.attrs.applyNumberFormat),\n applyFont: attrTrue(el.attrs.applyFont),\n applyFill: attrTrue(el.attrs.applyFill),\n applyBorder: attrTrue(el.attrs.applyBorder),\n };\n const alignmentEl = findChild(el, \"alignment\");\n if (alignmentEl !== undefined) xf.alignment = parseAlignment(alignmentEl);\n const protectionEl = findChild(el, \"protection\");\n if (protectionEl !== undefined) xf.protection = parseProtection(protectionEl);\n return xf;\n}\n\nfunction parseAlignment(el: Element): Alignment {\n const a: Alignment = {};\n if (el.attrs.horizontal !== undefined)\n a.horizontal = el.attrs.horizontal as Alignment[\"horizontal\"];\n if (el.attrs.vertical !== undefined) a.vertical = el.attrs.vertical as Alignment[\"vertical\"];\n if (el.attrs.textRotation !== undefined) {\n const rotation = inverseTextRotation(Number(el.attrs.textRotation));\n if (rotation !== undefined) a.textRotation = rotation;\n }\n if (attrTrue(el.attrs.wrapText)) a.wrapText = true;\n if (el.attrs.indent !== undefined) a.indent = Number(el.attrs.indent);\n if (attrTrue(el.attrs.shrinkToFit)) a.shrinkToFit = true;\n if (el.attrs.readingOrder === \"1\") a.readingOrder = \"ltr\";\n else if (el.attrs.readingOrder === \"2\") a.readingOrder = \"rtl\";\n return a;\n}\n\n/** Inverse of the writer's rotation encoding: 255 -> \"vertical\", 0–90 unchanged, 91–180 -> 90 − r. */\nfunction inverseTextRotation(val: number): number | \"vertical\" | undefined {\n if (val === 255) return \"vertical\";\n if (val >= 0 && val <= 90) return val;\n if (val > 90 && val <= 180) return 90 - val;\n return undefined;\n}\n\nfunction parseProtection(el: Element): Protection {\n const p: Protection = {};\n if (el.attrs.locked !== undefined) p.locked = attrTrue(el.attrs.locked);\n if (el.attrs.hidden !== undefined) p.hidden = attrTrue(el.attrs.hidden);\n return p;\n}\n\n// --- font / fill / border pools ---------------------------------------------------------------------\n\nfunction parseFont(el: Element): Font {\n const font: Font = {};\n for (const c of el.children) {\n switch (c.name) {\n case \"b\":\n if (elementOn(c.attrs.val)) font.bold = true;\n break;\n case \"i\":\n if (elementOn(c.attrs.val)) font.italic = true;\n break;\n case \"strike\":\n if (elementOn(c.attrs.val)) font.strike = true;\n break;\n case \"outline\":\n if (elementOn(c.attrs.val)) font.outline = true;\n break;\n case \"u\":\n font.underline = c.attrs.val === undefined ? true : (c.attrs.val as Font[\"underline\"]);\n break;\n case \"vertAlign\":\n if (c.attrs.val !== undefined) font.vertAlign = c.attrs.val as Font[\"vertAlign\"];\n break;\n case \"sz\":\n if (c.attrs.val !== undefined) font.size = Number(c.attrs.val);\n break;\n case \"color\": {\n const color = parseColor(c);\n if (color !== undefined) font.color = color;\n break;\n }\n case \"name\":\n if (c.attrs.val !== undefined) font.name = c.attrs.val;\n break;\n case \"family\":\n if (c.attrs.val !== undefined) font.family = Number(c.attrs.val);\n break;\n case \"charset\":\n if (c.attrs.val !== undefined) font.charset = Number(c.attrs.val);\n break;\n case \"scheme\":\n if (c.attrs.val !== undefined) font.scheme = c.attrs.val as Font[\"scheme\"];\n break;\n }\n }\n return font;\n}\n\nfunction parseFill(el: Element): Fill {\n const patternFill = findChild(el, \"patternFill\");\n if (patternFill !== undefined) {\n const fill: Fill = {\n type: \"pattern\",\n pattern: (patternFill.attrs.patternType ?? \"none\") as FillPattern,\n };\n const fg = findChild(patternFill, \"fgColor\");\n if (fg !== undefined) {\n const color = parseColor(fg);\n if (color !== undefined) fill.fgColor = color;\n }\n const bg = findChild(patternFill, \"bgColor\");\n if (bg !== undefined) {\n const color = parseColor(bg);\n if (color !== undefined) fill.bgColor = color;\n }\n return fill;\n }\n\n const gradientFill = findChild(el, \"gradientFill\");\n if (gradientFill !== undefined) {\n const stops = findChildren(gradientFill, \"stop\").map((stop) => {\n const colorEl = findChild(stop, \"color\");\n return {\n position: Number(stop.attrs.position ?? 0),\n color: (colorEl !== undefined ? parseColor(colorEl) : undefined) ?? {},\n };\n });\n if (gradientFill.attrs.type === \"path\") {\n return {\n type: \"gradient\",\n gradient: \"path\",\n center: {\n left: Number(gradientFill.attrs.left ?? 0),\n top: Number(gradientFill.attrs.top ?? 0),\n },\n stops,\n };\n }\n return {\n type: \"gradient\",\n gradient: \"angle\",\n degree: Number(gradientFill.attrs.degree ?? 0),\n stops,\n };\n }\n\n // No recognizable child — fall back to an empty pattern fill so the pool index stays aligned.\n return { type: \"pattern\", pattern: \"none\" };\n}\n\nfunction parseBorder(el: Element): Borders {\n const borders: Borders = {};\n const left = parseBorderSide(findChild(el, \"left\"));\n if (left !== undefined) borders.left = left;\n const right = parseBorderSide(findChild(el, \"right\"));\n if (right !== undefined) borders.right = right;\n const top = parseBorderSide(findChild(el, \"top\"));\n if (top !== undefined) borders.top = top;\n const bottom = parseBorderSide(findChild(el, \"bottom\"));\n if (bottom !== undefined) borders.bottom = bottom;\n\n const diagonalSide = parseBorderSide(findChild(el, \"diagonal\"));\n const up = attrTrue(el.attrs.diagonalUp);\n const down = attrTrue(el.attrs.diagonalDown);\n if (diagonalSide !== undefined || up || down) {\n const diagonal: BorderDiagonal = { ...diagonalSide };\n if (up) diagonal.up = true;\n if (down) diagonal.down = true;\n borders.diagonal = diagonal;\n }\n return borders;\n}\n\nfunction parseBorderSide(el: Element | undefined): Border | undefined {\n if (el === undefined || el.attrs.style === undefined) return undefined;\n const border: Border = { style: el.attrs.style as BorderStyle };\n const colorEl = findChild(el, \"color\");\n if (colorEl !== undefined) {\n const color = parseColor(colorEl);\n if (color !== undefined) border.color = color;\n }\n return border;\n}\n\n/** Inverse of `renderColor`: rgb -> argb, else theme, else indexed (writer emits exactly one). */\nfunction parseColor(el: Element): Color | undefined {\n if (el.attrs.rgb !== undefined) return { argb: el.attrs.rgb };\n if (el.attrs.theme !== undefined) return { theme: Number(el.attrs.theme) };\n if (el.attrs.indexed !== undefined) return { indexed: Number(el.attrs.indexed) };\n return undefined;\n}\n\nfunction parseNumFmts(el: Element | undefined): Map<number, string> {\n const map = new Map<number, string>();\n if (el === undefined) return map;\n for (const c of findChildren(el, \"numFmt\")) {\n const id = c.attrs.numFmtId;\n const code = c.attrs.formatCode;\n if (id !== undefined && code !== undefined) map.set(Number(id), code);\n }\n return map;\n}\n\n// --- minimal element tree over the pull parser ------------------------------------------------------\n\ninterface Element {\n name: string;\n attrs: Record<string, string>;\n children: Element[];\n}\n\n/** Build a shallow element tree from styles.xml. Text nodes are ignored — every datum lives in an\n * attribute — which keeps this immune to insignificant whitespace between elements. */\nfunction parseTree(xml: string): Element | undefined {\n const root: Element = { name: \"#root\", attrs: {}, children: [] };\n const stack: Element[] = [root];\n for (const ev of parseXml(xml)) {\n const top = stack[stack.length - 1];\n if (top === undefined) break;\n if (ev.kind === \"open\") {\n const el: Element = { name: ev.name, attrs: ev.attrs, children: [] };\n top.children.push(el);\n if (!ev.selfClosing) stack.push(el);\n } else if (ev.kind === \"close\" && stack.length > 1) {\n stack.pop();\n }\n }\n return root.children[0];\n}\n\nfunction findChild(el: Element, name: string): Element | undefined {\n return el.children.find((c) => c.name === name);\n}\n\nfunction findChildren(el: Element, name: string): Element[] {\n return el.children.filter((c) => c.name === name);\n}\n\n/** Map every `name` child of a pool container through `fn`, preserving order so array index == id. */\nfunction mapChildren<T>(el: Element | undefined, name: string, fn: (child: Element) => T): T[] {\n if (el === undefined) return [];\n return findChildren(el, name).map(fn);\n}\n\nfunction numAttr(el: Element, name: string, fallback: number): number {\n const raw = el.attrs[name];\n return raw === undefined ? fallback : Number(raw);\n}\n\n/** A boolean toggle *element* like `<b/>`: its mere presence means on, so an absent `val` is `true`;\n * only an explicit `val=\"0\"`/`\"false\"`/`\"off\"` turns it off. */\nfunction elementOn(val: string | undefined): boolean {\n return val !== \"0\" && val !== \"false\" && val !== \"off\";\n}\n\n/** A boolean *attribute* (`applyFont`, `wrapText`, `diagonalUp`, `locked`…): absent means `false`; only\n * `\"1\"`/`\"true\"`/`\"on\"` mean `true`. The inverse convention to {@link elementOn}. */\nfunction attrTrue(val: string | undefined): boolean {\n return val === \"1\" || val === \"true\" || val === \"on\";\n}\n\nfunction hasKeys(obj: object): boolean {\n for (const _ in obj) return true;\n return false;\n}\n","// Inverse of the Stage 1.3 workbook part writer (see docs/STAGE-2-SPEC.md §7, and\n// src/xlsx/parts/workbook.ts for the forward direction). Reads xl/workbook.xml for the sheet list\n// (name / sheetId / state / `r:id`), the `date1904` flag, and the active tab. Part *locations* are not\n// here — each `r:id` is resolved to a worksheet part through workbook.xml.rels by the orchestrator.\n\nimport { cursor, localName, type XmlCursor, type XmlEvent } from \"../../xml/index.js\";\n\nexport interface WorkbookHeader {\n sheets: {\n name: string;\n sheetId: number;\n state: \"visible\" | \"hidden\" | \"veryHidden\";\n rId: string;\n }[];\n date1904: boolean;\n activeTab?: number;\n}\n\ntype OpenEvent = Extract<XmlEvent, { kind: \"open\" }>;\n\n/** Parse xl/workbook.xml. A malformed/rootless document yields an empty header (no sheets). */\nexport function parseWorkbook(xml: string): WorkbookHeader {\n const header: WorkbookHeader = { sheets: [], date1904: false };\n\n const c = cursor(xml);\n let ev = c.next();\n while (ev && !(ev.kind === \"open\" && localName(ev.name) === \"workbook\")) ev = c.next();\n if (ev?.kind !== \"open\" || ev.selfClosing) return header;\n\n c.eachChild(ev.name, (child) => {\n switch (localName(child.name)) {\n case \"workbookPr\":\n if (truthy(child.attrs.date1904)) header.date1904 = true;\n break;\n case \"bookViews\":\n if (!child.selfClosing) parseBookViews(c, child.name, header);\n break;\n case \"sheets\":\n if (!child.selfClosing) parseSheets(c, child.name, header);\n break;\n default:\n if (!child.selfClosing) c.textUntilClose(child.name);\n }\n });\n\n return header;\n}\n\nfunction parseBookViews(c: XmlCursor, container: string, header: WorkbookHeader): void {\n c.eachChild(container, (child) => {\n if (localName(child.name) === \"workbookView\") {\n const activeTab = child.attrs.activeTab;\n if (activeTab !== undefined) {\n const n = Number(activeTab);\n if (Number.isFinite(n)) header.activeTab = n;\n }\n } else if (!child.selfClosing) {\n c.textUntilClose(child.name);\n }\n });\n}\n\nfunction parseSheets(c: XmlCursor, container: string, header: WorkbookHeader): void {\n c.eachChild(container, (child) => {\n if (localName(child.name) !== \"sheet\") {\n if (!child.selfClosing) c.textUntilClose(child.name);\n return;\n }\n header.sheets.push({\n name: child.attrs.name ?? \"\",\n sheetId: Number(child.attrs.sheetId ?? 0),\n state: normalizeState(child.attrs.state),\n rId: relId(child),\n });\n });\n}\n\n/** The `r:id` relationship reference. OOXML fixes the `r` prefix, but fall back to any `*:id` attribute\n * so an unconventional prefix still resolves. */\nfunction relId(sheet: OpenEvent): string {\n const direct = sheet.attrs[\"r:id\"];\n if (direct !== undefined) return direct;\n for (const key of Object.keys(sheet.attrs)) {\n if (localName(key) === \"id\") return sheet.attrs[key] ?? \"\";\n }\n return \"\";\n}\n\nfunction normalizeState(state: string | undefined): \"visible\" | \"hidden\" | \"veryHidden\" {\n if (state === \"hidden\") return \"hidden\";\n if (state === \"veryHidden\") return \"veryHidden\";\n return \"visible\";\n}\n\n/** A boolean-ish OOXML attribute: `\"1\"`/`\"true\"` mean true; absent or anything else false. */\nfunction truthy(val: string | undefined): boolean {\n return val === \"1\" || val === \"true\";\n}\n","// Inverse of the Stage 1.3 worksheet writer (see docs/STAGE-2-SPEC.md §6, and src/xlsx/parts/worksheet.ts\n// for the forward direction). Walks sheetN.xml with the pull parser and populates an already-created\n// Worksheet: `<cols>` -> Column defaults, `<sheetData>` rows/cells -> values + styles, `<mergeCells>` ->\n// merge regions (applied last so masters keep their values).\n//\n// The `t` attribute drives value decoding, exactly reversing the writer's mapping:\n// s -> shared-string index inlineStr -> <is> text/runs str -> formula string result\n// b -> boolean e -> error code n/absent -> number, or Date when the\n// cell's number format is a date/time one.\n// A `<f>` present makes it a formula cell whose cached `<v>` becomes the typed `result`.\n\nimport { decodeAddress } from \"../../address/index.js\";\nimport { InvalidCellValueError } from \"../../errors.js\";\nimport type {\n CellError,\n CellValue,\n ErrorCode,\n RichText,\n Row,\n Worksheet,\n} from \"../../model/index.js\";\nimport { cursor, localName, type XmlCursor, type XmlEvent } from \"../../xml/index.js\";\nimport { serialToDate } from \"../date.js\";\nimport { parseRichString } from \"./shared-strings.js\";\nimport type { StyleTable } from \"./styles.js\";\n\nexport interface WorksheetReadContext {\n sharedStrings: (string | RichText)[];\n styles: StyleTable;\n date1904: boolean;\n}\n\ntype OpenEvent = Extract<XmlEvent, { kind: \"open\" }>;\n\n/** Populate an already-created {@link Worksheet} from its sheetN.xml. */\nexport function parseWorksheet(ws: Worksheet, xml: string, ctx: WorksheetReadContext): void {\n const c = cursor(xml);\n let ev = c.next();\n while (ev && !(ev.kind === \"open\" && localName(ev.name) === \"worksheet\")) ev = c.next();\n if (ev?.kind !== \"open\" || ev.selfClosing) return;\n\n // Merges are collected and applied after every cell is placed, regardless of document order, so a\n // master cell's value is never clobbered by linking its slaves.\n const merges: string[] = [];\n\n c.eachChild(ev.name, (child) => {\n switch (localName(child.name)) {\n case \"cols\":\n if (!child.selfClosing) parseCols(c, child.name, ws, ctx);\n break;\n case \"sheetData\":\n if (!child.selfClosing) parseSheetData(c, child.name, ws, ctx);\n break;\n case \"mergeCells\":\n if (!child.selfClosing) collectMerges(c, child.name, merges);\n break;\n default:\n if (!child.selfClosing) c.textUntilClose(child.name);\n }\n });\n\n for (const ref of merges) ws.mergeCells(ref);\n}\n\nfunction parseCols(\n c: XmlCursor,\n container: string,\n ws: Worksheet,\n ctx: WorksheetReadContext,\n): void {\n c.eachChild(container, (col) => {\n if (localName(col.name) !== \"col\") {\n if (!col.selfClosing) c.textUntilClose(col.name);\n return;\n }\n const min = num(col.attrs.min);\n const max = num(col.attrs.max);\n if (min === undefined || max === undefined) return;\n\n const width = num(col.attrs.width);\n const hidden = truthy(col.attrs.hidden);\n const outline = num(col.attrs.outlineLevel);\n const styleIdx = num(col.attrs.style);\n const style = styleIdx ? ctx.styles.styleFor(styleIdx) : undefined;\n\n for (let n = min; n <= max; n++) {\n const column = ws.getColumn(n);\n if (width !== undefined) column.width = width;\n if (hidden) column.hidden = true;\n if (outline) column.outlineLevel = outline;\n if (style) column.style = style;\n }\n });\n}\n\nfunction parseSheetData(\n c: XmlCursor,\n container: string,\n ws: Worksheet,\n ctx: WorksheetReadContext,\n): void {\n let expectedRow = 0;\n c.eachChild(container, (rowEl) => {\n if (localName(rowEl.name) !== \"row\") {\n if (!rowEl.selfClosing) c.textUntilClose(rowEl.name);\n return;\n }\n expectedRow = num(rowEl.attrs.r) ?? expectedRow + 1;\n parseRow(c, rowEl, expectedRow, ws, ctx);\n });\n}\n\nfunction parseRow(\n c: XmlCursor,\n rowEl: OpenEvent,\n rowNumber: number,\n ws: Worksheet,\n ctx: WorksheetReadContext,\n): void {\n const row = ws.getRow(rowNumber);\n\n const height = num(rowEl.attrs.ht);\n if (height !== undefined) row.height = height;\n if (truthy(rowEl.attrs.hidden)) row.hidden = true;\n const outline = num(rowEl.attrs.outlineLevel);\n if (outline) row.outlineLevel = outline;\n // Set the row style before creating any cell so the (empty) fan-out to existing cells is a no-op;\n // cells created below then resolve this row style plus their column style at construction.\n const rowStyleIdx = num(rowEl.attrs.s);\n if (rowStyleIdx) row.style = ctx.styles.styleFor(rowStyleIdx);\n\n if (rowEl.selfClosing) return;\n\n let expectedCol = 0;\n c.eachChild(rowEl.name, (cellEl) => {\n if (localName(cellEl.name) !== \"c\") {\n if (!cellEl.selfClosing) c.textUntilClose(cellEl.name);\n return;\n }\n expectedCol = parseCell(c, cellEl, expectedCol + 1, row, ctx);\n });\n}\n\n/** Parse one `<c>`; returns the column index it occupied (so a following `<c>` without an `r` can be\n * placed in the next column). */\nfunction parseCell(\n c: XmlCursor,\n cellEl: OpenEvent,\n fallbackCol: number,\n row: Row,\n ctx: WorksheetReadContext,\n): number {\n const col = cellEl.attrs.r !== undefined ? decodeAddress(cellEl.attrs.r).col : fallbackCol;\n const styleIdx = num(cellEl.attrs.s) ?? 0;\n const t = cellEl.attrs.t;\n\n let vText: string | undefined;\n let inlineValue: string | RichText | undefined;\n let formulaExpr: string | undefined;\n let hasFormula = false;\n\n if (!cellEl.selfClosing) {\n c.eachChild(cellEl.name, (child) => {\n switch (localName(child.name)) {\n case \"v\":\n vText = child.selfClosing ? \"\" : c.textUntilClose(child.name);\n break;\n case \"f\":\n hasFormula = true;\n formulaExpr = child.selfClosing ? \"\" : c.textUntilClose(child.name);\n break;\n case \"is\":\n inlineValue = child.selfClosing ? \"\" : parseRichString(c, child.name);\n break;\n default:\n if (!child.selfClosing) c.textUntilClose(child.name);\n }\n });\n }\n\n const value = hasFormula\n ? buildFormula(formulaExpr ?? \"\", t, vText, styleIdx, ctx)\n : decodeValue(t, vText, inlineValue, styleIdx, ctx);\n\n // An empty, unstyled, non-formula cell contributes nothing to the model — skip it.\n if (value === null && styleIdx === 0 && !hasFormula) return col;\n\n const cell = row.getCell(col);\n if (value !== null) cell.value = value;\n if (styleIdx !== 0) cell.style = ctx.styles.styleFor(styleIdx);\n return col;\n}\n\n/** Decode a non-formula cell's value from its `t` and body. Returns `null` for a valueless cell. */\nfunction decodeValue(\n t: string | undefined,\n vText: string | undefined,\n inlineValue: string | RichText | undefined,\n styleIdx: number,\n ctx: WorksheetReadContext,\n): CellValue {\n switch (t) {\n case \"s\": {\n if (vText === undefined) return null;\n return ctx.sharedStrings[Number(vText)] ?? \"\";\n }\n case \"inlineStr\":\n return inlineValue ?? \"\";\n case \"str\":\n return vText ?? \"\";\n case \"b\":\n return vText === undefined ? null : decodeBool(vText);\n case \"e\":\n return vText === undefined ? null : { error: vText as ErrorCode };\n default: {\n // \"n\" or the attribute absent: a number, promoted to a Date when the style is a date format.\n if (vText === undefined) return null;\n const n = Number(vText);\n return ctx.styles.isDateStyle(styleIdx) ? serialToDate(n, ctx.date1904) : n;\n }\n }\n}\n\n/** Build a formula cell: the bare `<f>` expression (matching the writer, which stripped the leading\n * `=`) plus its cached `<v>` decoded into the typed `result`. */\nfunction buildFormula(\n expr: string,\n t: string | undefined,\n vText: string | undefined,\n styleIdx: number,\n ctx: WorksheetReadContext,\n): CellValue {\n const result = vText === undefined ? undefined : decodeScalar(t, vText, styleIdx, ctx);\n return result === undefined ? { formula: expr } : { formula: expr, result };\n}\n\n/** Decode a cached formula `<v>` into the scalar `result` union (no RichText — a rich shared-string\n * result, which the writer never emits, flattens to its text). */\nfunction decodeScalar(\n t: string | undefined,\n vText: string,\n styleIdx: number,\n ctx: WorksheetReadContext,\n): number | string | boolean | Date | CellError {\n switch (t) {\n case \"b\":\n return decodeBool(vText);\n case \"e\":\n return { error: vText as ErrorCode };\n case \"str\":\n return vText;\n case \"s\": {\n const entry = ctx.sharedStrings[Number(vText)];\n if (entry === undefined) return \"\";\n return typeof entry === \"string\" ? entry : entry.richText.map((run) => run.text).join(\"\");\n }\n default: {\n const n = Number(vText);\n return ctx.styles.isDateStyle(styleIdx) ? serialToDate(n, ctx.date1904) : n;\n }\n }\n}\n\nfunction collectMerges(c: XmlCursor, container: string, merges: string[]): void {\n c.eachChild(container, (mergeCell) => {\n if (localName(mergeCell.name) === \"mergeCell\" && mergeCell.attrs.ref !== undefined) {\n merges.push(mergeCell.attrs.ref);\n } else if (!mergeCell.selfClosing) {\n c.textUntilClose(mergeCell.name);\n }\n });\n}\n\n/** A boolean cell's `<v>` is `1`/`0`; anything else is a malformed package, surfaced as a typed error. */\nfunction decodeBool(raw: string): boolean {\n if (raw === \"1\" || raw === \"true\" || raw === \"TRUE\") return true;\n if (raw === \"0\" || raw === \"false\" || raw === \"FALSE\") return false;\n throw new InvalidCellValueError(raw);\n}\n\n/** Parse a numeric attribute; `undefined` when absent or not a finite number. */\nfunction num(val: string | undefined): number | undefined {\n if (val === undefined) return undefined;\n const n = Number(val);\n return Number.isFinite(n) ? n : undefined;\n}\n\n/** A boolean-ish OOXML attribute (`hidden`): absent means false; `\"1\"`/`\"true\"` mean true. */\nfunction truthy(val: string | undefined): boolean {\n return val === \"1\" || val === \"true\";\n}\n","// The read orchestrator (SPEC §8): `.xlsx` bytes -> parts -> a Stage 1.2 `Workbook`. The inverse of\n// write-workbook.ts, mirroring its write order in reverse: open the package, parse the pooled parts\n// (styles, sharedStrings), read the workbook header for the sheet list + `date1904`, then populate each\n// worksheet with the shared read context, and finally lay the doc-props metadata back on top.\n\nimport { Workbook } from \"../model/index.js\";\nimport { PART_PATH, REL_TYPE } from \"./parts/constants.js\";\nimport { openPackage } from \"./read/package.js\";\nimport { applyAppProps, applyCoreProps } from \"./read/props.js\";\nimport { parseSharedStrings } from \"./read/shared-strings.js\";\nimport { parseStyles } from \"./read/styles.js\";\nimport { parseWorkbook } from \"./read/workbook.js\";\nimport { parseWorksheet } from \"./read/worksheet.js\";\n\n/** Reserved for future read options (e.g. `ignoreStyles`). None are required for v1. */\n// biome-ignore lint/suspicious/noEmptyInterface: intentionally empty; a stable extension point.\nexport interface ReadOptions {}\n\n/** Parse a buffered `.xlsx` into a `Workbook`. Environment-agnostic (no `fs`); see `readWorkbookFile`. */\nexport function readWorkbookBuffer(bytes: Uint8Array, _options?: ReadOptions): Workbook {\n const pkg = openPackage(bytes);\n const rels = pkg.workbookRels();\n\n // The pooled parts, located by relationship type so a foreign producer's file names still resolve.\n let stylesXml: string | undefined;\n let sharedStringsXml: string | undefined;\n for (const { type, target } of rels.values()) {\n if (type === REL_TYPE.styles) stylesXml = pkg.text(target);\n else if (type === REL_TYPE.sharedStrings) sharedStringsXml = pkg.text(target);\n }\n\n const styles = parseStyles(stylesXml);\n const sharedStrings = sharedStringsXml !== undefined ? parseSharedStrings(sharedStringsXml) : [];\n\n const workbookXml = pkg.text(pkg.workbookPath()) ?? \"\";\n const header = parseWorkbook(workbookXml);\n\n const wb = new Workbook();\n if (header.date1904) wb.properties.date1904 = true;\n if (header.activeTab !== undefined) wb.views = [{ activeTab: header.activeTab }];\n\n const ctx = { sharedStrings, styles, date1904: header.date1904 };\n\n for (const sheet of header.sheets) {\n const ws = wb.addWorksheet(sheet.name, { state: sheet.state });\n const target = rels.get(sheet.rId)?.target;\n if (target === undefined) continue;\n const sheetXml = pkg.text(target);\n if (sheetXml !== undefined) parseWorksheet(ws, sheetXml, ctx);\n }\n\n // Doc-props sit at their conventional paths (both our writer and Excel/LibreOffice use these).\n const coreXml = pkg.text(PART_PATH.coreProps);\n if (coreXml !== undefined) applyCoreProps(wb, coreXml);\n const appXml = pkg.text(PART_PATH.appProps);\n if (appXml !== undefined) applyAppProps(wb, appXml);\n\n return wb;\n}\n\n/** Node-only convenience: read and parse a `.xlsx` from disk. Isolated here so browser bundles that\n * only use {@link readWorkbookBuffer} never pull in `node:fs`. */\nexport async function readWorkbookFile(path: string, options?: ReadOptions): Promise<Workbook> {\n const { readFile } = await import(\"node:fs/promises\");\n const bytes = await readFile(path);\n return readWorkbookBuffer(bytes, options);\n}\n","// The shared-string pool (see docs/STAGE-1.3-SPEC.md §3, docs/OOXML-NOTES.md §4). String cells store an\n// index into xl/sharedStrings.xml so a value repeated across the workbook is stored once. Plain strings\n// dedup by value; rich text dedups by a stable serialization of its runs.\n\nimport type { Color, Font, RichText } from \"../model/index.js\";\nimport { XmlWriter } from \"../xml/index.js\";\n\nconst SPREADSHEETML_NS = \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\";\n\nexport interface SharedStrings {\n /** Intern a plain string or rich text; returns its 0-based index. Repeated values return the same\n * index (but still count as a reference). */\n add(value: string | RichText): number;\n /** Total references added (the sum of `add` calls). */\n readonly count: number;\n /** Distinct entries in the pool. */\n readonly uniqueCount: number;\n /** Render xl/sharedStrings.xml, or `undefined` when the pool is empty (the part is then omitted). */\n toXml(): string | undefined;\n}\n\nexport function createSharedStrings(): SharedStrings {\n return new SharedStringsPool();\n}\n\nclass SharedStringsPool implements SharedStrings {\n private readonly index = new Map<string, number>();\n private readonly entries: (string | RichText)[] = [];\n private references = 0;\n\n add(value: string | RichText): number {\n this.references += 1;\n const key = keyFor(value);\n const existing = this.index.get(key);\n if (existing !== undefined) return existing;\n const idx = this.entries.length;\n this.index.set(key, idx);\n this.entries.push(value);\n return idx;\n }\n\n get count(): number {\n return this.references;\n }\n\n get uniqueCount(): number {\n return this.entries.length;\n }\n\n toXml(): string | undefined {\n if (this.entries.length === 0) return undefined;\n const w = new XmlWriter();\n w.open(\"sst\", {\n xmlns: SPREADSHEETML_NS,\n count: this.references,\n uniqueCount: this.entries.length,\n });\n for (const entry of this.entries) {\n w.open(\"si\");\n if (typeof entry === \"string\") {\n w.el(\"t\", entry);\n } else {\n for (const run of entry.richText) {\n w.open(\"r\");\n const props = renderRunProps(run.font);\n if (props) w.raw(props);\n w.el(\"t\", run.text);\n w.close(\"r\");\n }\n }\n w.close(\"si\");\n }\n w.close(\"sst\");\n return w.toString();\n }\n}\n\n/** Dedup key: plain strings key on their value, rich text on a stable serialization of its runs.\n * The `s:`/`r:` prefixes keep a plain string from ever colliding with a rich-text serialization. */\nfunction keyFor(value: string | RichText): string {\n return typeof value === \"string\" ? `s:${value}` : `r:${stableStringify(value.richText)}`;\n}\n\n/** Deterministic JSON-ish serialization with object keys sorted and `undefined`-valued keys dropped, so\n * two structurally identical runs (regardless of property insertion order) produce the same key. */\nfunction stableStringify(value: unknown): string {\n if (value === null || typeof value !== \"object\") {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(\",\")}]`;\n }\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj)\n .filter((k) => obj[k] !== undefined)\n .sort();\n return `{${keys.map((k) => `${JSON.stringify(k)}:${stableStringify(obj[k])}`).join(\",\")}}`;\n}\n\n/** Render a run's `<rPr>` properties from its font, or `\"\"` when there is nothing to emit. Element\n * order follows the ECMA-376 CT_RPrElt schema so Excel accepts the file without repair. */\nfunction renderRunProps(font: Font | undefined): string {\n if (!font) return \"\";\n const w = new XmlWriter({ declaration: false });\n if (font.name !== undefined) w.leaf(\"rFont\", { val: font.name });\n if (font.charset !== undefined) w.leaf(\"charset\", { val: font.charset });\n if (font.family !== undefined) w.leaf(\"family\", { val: font.family });\n if (font.bold) w.leaf(\"b\");\n if (font.italic) w.leaf(\"i\");\n if (font.strike) w.leaf(\"strike\");\n if (font.outline) w.leaf(\"outline\");\n if (font.color) renderColor(w, font.color);\n if (font.size !== undefined) w.leaf(\"sz\", { val: font.size });\n renderUnderline(w, font.underline);\n if (font.vertAlign) w.leaf(\"vertAlign\", { val: font.vertAlign });\n if (font.scheme) w.leaf(\"scheme\", { val: font.scheme });\n const inner = w.toString();\n return inner === \"\" ? \"\" : `<rPr>${inner}</rPr>`;\n}\n\nfunction renderColor(w: XmlWriter, color: Color): void {\n if (color.argb !== undefined) w.leaf(\"color\", { rgb: color.argb });\n else if (color.theme !== undefined) w.leaf(\"color\", { theme: color.theme });\n else if (color.indexed !== undefined) w.leaf(\"color\", { indexed: color.indexed });\n}\n\nfunction renderUnderline(w: XmlWriter, underline: Font[\"underline\"]): void {\n if (underline === undefined || underline === false || underline === \"none\") return;\n if (underline === true) {\n w.leaf(\"u\");\n return;\n }\n w.leaf(\"u\", { val: underline });\n}\n","// `docProps/app.xml` — extended (application) properties. The `HeadingPairs`/`TitlesOfParts`\n// vectors describe the worksheet tab names; Company/Manager ride along when set (SPEC §5).\n\nimport type { Workbook } from \"../../model/index.js\";\nimport { XmlWriter } from \"../../xml/index.js\";\nimport { NS } from \"./constants.js\";\n\nexport function renderAppProps(wb: Workbook, sheetNames: string[]): string {\n const w = new XmlWriter();\n w.open(\"Properties\", { xmlns: NS.extProps, \"xmlns:vt\": NS.docPropsVt });\n\n w.el(\"Application\", \"Microsoft Excel\");\n w.el(\"DocSecurity\", \"0\");\n w.el(\"ScaleCrop\", \"false\");\n\n w.open(\"HeadingPairs\");\n w.open(\"vt:vector\", { size: 2, baseType: \"variant\" });\n w.open(\"vt:variant\");\n w.el(\"vt:lpstr\", \"Worksheets\");\n w.close(\"vt:variant\");\n w.open(\"vt:variant\");\n w.el(\"vt:i4\", String(sheetNames.length));\n w.close(\"vt:variant\");\n w.close(\"vt:vector\");\n w.close(\"HeadingPairs\");\n\n w.open(\"TitlesOfParts\");\n w.open(\"vt:vector\", { size: sheetNames.length, baseType: \"lpstr\" });\n for (const name of sheetNames) w.el(\"vt:lpstr\", name);\n w.close(\"vt:vector\");\n w.close(\"TitlesOfParts\");\n\n if (wb.company !== undefined) w.el(\"Company\", wb.company);\n if (wb.manager !== undefined) w.el(\"Manager\", wb.manager);\n w.el(\"LinksUpToDate\", \"false\");\n w.el(\"SharedDoc\", \"false\");\n w.el(\"HyperlinksChanged\", \"false\");\n w.el(\"AppVersion\", \"1.0000\");\n\n w.close(\"Properties\");\n return w.toString();\n}\n","// `[Content_Types].xml` — declares the MIME type of every part in the package. Two `<Default>`s cover\n// the `.rels` and `.xml` extensions; one `<Override>` names each concrete part. The sharedStrings\n// override is emitted only when that part exists (SPEC §5).\n\nimport { XmlWriter } from \"../../xml/index.js\";\nimport { CONTENT_TYPE, NS, PART_PATH } from \"./constants.js\";\n\nexport interface ContentTypesInput {\n /** Worksheet file names under `xl/worksheets/` (e.g. `[\"sheet1.xml\", \"sheet2.xml\"]`). */\n worksheetFiles: string[];\n hasSharedStrings: boolean;\n}\n\nexport function renderContentTypes(input: ContentTypesInput): string {\n const w = new XmlWriter();\n w.open(\"Types\", { xmlns: NS.contentTypes });\n\n w.leaf(\"Default\", { Extension: \"rels\", ContentType: CONTENT_TYPE.rels });\n w.leaf(\"Default\", { Extension: \"xml\", ContentType: CONTENT_TYPE.xml });\n\n w.leaf(\"Override\", { PartName: `/${PART_PATH.workbook}`, ContentType: CONTENT_TYPE.workbook });\n for (const file of input.worksheetFiles) {\n w.leaf(\"Override\", {\n PartName: `/xl/worksheets/${file}`,\n ContentType: CONTENT_TYPE.worksheet,\n });\n }\n w.leaf(\"Override\", { PartName: `/${PART_PATH.styles}`, ContentType: CONTENT_TYPE.styles });\n if (input.hasSharedStrings) {\n w.leaf(\"Override\", {\n PartName: `/${PART_PATH.sharedStrings}`,\n ContentType: CONTENT_TYPE.sharedStrings,\n });\n }\n w.leaf(\"Override\", { PartName: `/${PART_PATH.theme}`, ContentType: CONTENT_TYPE.theme });\n w.leaf(\"Override\", { PartName: `/${PART_PATH.coreProps}`, ContentType: CONTENT_TYPE.coreProps });\n w.leaf(\"Override\", { PartName: `/${PART_PATH.appProps}`, ContentType: CONTENT_TYPE.extProps });\n\n w.close(\"Types\");\n return w.toString();\n}\n","// `docProps/core.xml` — Dublin Core document metadata. Dates are W3CDTF (ISO 8601 without\n// milliseconds), tagged `xsi:type=\"dcterms:W3CDTF\"`. Optional fields are omitted when unset (SPEC §5).\n\nimport type { Workbook } from \"../../model/index.js\";\nimport { XmlWriter } from \"../../xml/index.js\";\nimport { NS } from \"./constants.js\";\n\n/** W3CDTF: `YYYY-MM-DDTHH:mm:ssZ` (drop the `.sssZ` millisecond fraction `toISOString` adds). */\nexport function toW3CDTF(date: Date): string {\n return `${date.toISOString().replace(/\\.\\d{3}Z$/, \"Z\")}`;\n}\n\nexport function renderCoreProps(wb: Workbook): string {\n const w = new XmlWriter();\n w.open(\"cp:coreProperties\", {\n \"xmlns:cp\": NS.coreProps,\n \"xmlns:dc\": NS.dc,\n \"xmlns:dcterms\": NS.dcterms,\n \"xmlns:dcmitype\": NS.dcmitype,\n \"xmlns:xsi\": NS.xsi,\n });\n\n if (wb.creator !== undefined) w.el(\"dc:creator\", wb.creator);\n if (wb.title !== undefined) w.el(\"dc:title\", wb.title);\n if (wb.subject !== undefined) w.el(\"dc:subject\", wb.subject);\n if (wb.description !== undefined) w.el(\"dc:description\", wb.description);\n if (wb.keywords !== undefined) w.el(\"cp:keywords\", wb.keywords);\n if (wb.category !== undefined) w.el(\"cp:category\", wb.category);\n if (wb.lastModifiedBy !== undefined) w.el(\"cp:lastModifiedBy\", wb.lastModifiedBy);\n w.el(\"dcterms:created\", toW3CDTF(wb.created), { \"xsi:type\": \"dcterms:W3CDTF\" });\n w.el(\"dcterms:modified\", toW3CDTF(wb.modified), { \"xsi:type\": \"dcterms:W3CDTF\" });\n\n w.close(\"cp:coreProperties\");\n return w.toString();\n}\n","// `_rels/.rels` — the package root relationships: the office document (workbook), and the two\n// document-property parts (core + app). rIds are local to this file (SPEC §5).\n\nimport { XmlWriter } from \"../../xml/index.js\";\nimport { NS, PART_PATH, REL_TYPE } from \"./constants.js\";\n\nexport function renderRootRels(): string {\n const w = new XmlWriter();\n w.open(\"Relationships\", { xmlns: NS.packageRels });\n w.leaf(\"Relationship\", {\n Id: \"rId1\",\n Type: REL_TYPE.officeDocument,\n Target: PART_PATH.workbook,\n });\n w.leaf(\"Relationship\", {\n Id: \"rId2\",\n Type: REL_TYPE.coreProps,\n Target: PART_PATH.coreProps,\n });\n w.leaf(\"Relationship\", {\n Id: \"rId3\",\n Type: REL_TYPE.extProps,\n Target: PART_PATH.appProps,\n });\n w.close(\"Relationships\");\n return w.toString();\n}\n","// `xl/theme/theme1.xml` — a fixed, known-good default Office theme shipped verbatim as a constant\n// (SPEC §5; ExcelJS does the same). Colours in styles.xml reference this theme's clrScheme by index\n// (`<color theme=\"n\"/>`), so it must be present and schema-valid or Excel prompts to repair.\n\nconst THEME1_XML = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\"><a:themeElements><a:clrScheme name=\"Office\"><a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1><a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1><a:dk2><a:srgbClr val=\"44546A\"/></a:dk2><a:lt2><a:srgbClr val=\"E7E6E6\"/></a:lt2><a:accent1><a:srgbClr val=\"4472C4\"/></a:accent1><a:accent2><a:srgbClr val=\"ED7D31\"/></a:accent2><a:accent3><a:srgbClr val=\"A5A5A5\"/></a:accent3><a:accent4><a:srgbClr val=\"FFC000\"/></a:accent4><a:accent5><a:srgbClr val=\"5B9BD5\"/></a:accent5><a:accent6><a:srgbClr val=\"70AD47\"/></a:accent6><a:hlink><a:srgbClr val=\"0563C1\"/></a:hlink><a:folHlink><a:srgbClr val=\"954F72\"/></a:folHlink></a:clrScheme><a:fontScheme name=\"Office\"><a:majorFont><a:latin typeface=\"Calibri Light\" panose=\"020F0302020204030204\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/></a:majorFont><a:minorFont><a:latin typeface=\"Calibri\" panose=\"020F0502020204030204\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/></a:minorFont></a:fontScheme><a:fmtScheme name=\"Office\"><a:fillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"110000\"/><a:satMod val=\"105000\"/><a:tint val=\"67000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"103000\"/><a:tint val=\"73000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"109000\"/><a:tint val=\"81000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:satMod val=\"103000\"/><a:lumMod val=\"102000\"/><a:tint val=\"94000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:satMod val=\"110000\"/><a:lumMod val=\"100000\"/><a:shade val=\"100000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"99000\"/><a:satMod val=\"120000\"/><a:shade val=\"78000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w=\"6350\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"12700\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"19050\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad=\"57150\" dist=\"19050\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"63000\"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"><a:tint val=\"95000\"/><a:satMod val=\"170000\"/></a:schemeClr></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"93000\"/><a:satMod val=\"150000\"/><a:shade val=\"98000\"/><a:lumMod val=\"102000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:tint val=\"98000\"/><a:satMod val=\"130000\"/><a:shade val=\"90000\"/><a:lumMod val=\"103000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"63000\"/><a:satMod val=\"120000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/></a:theme>`;\n\n/** The default theme part, returned as-is. Pure and side-effect free (SPEC §5). */\nexport function renderTheme(): string {\n return THEME1_XML;\n}\n","// `xl/workbook.xml` — the workbook part: the `<sheets>` list (each `<sheet>` links to its worksheet\n// part via `r:id`), `<workbookPr date1904=…>` when the 1904 system is set, and a minimal `<bookViews>`.\n// The `r:id`s here resolve against xl/_rels/workbook.xml.rels, so they must match the SheetRel rIds\n// assigned once by the orchestrator (SPEC §5).\n\nimport type { Workbook } from \"../../model/index.js\";\nimport { XmlWriter } from \"../../xml/index.js\";\nimport type { SheetRel } from \"./constants.js\";\nimport { NS } from \"./constants.js\";\n\nexport function renderWorkbook(wb: Workbook, sheets: SheetRel[]): string {\n const w = new XmlWriter();\n w.open(\"workbook\", { xmlns: NS.spreadsheetml, \"xmlns:r\": NS.relationships });\n\n if (wb.properties.date1904) {\n w.leaf(\"workbookPr\", { date1904: true });\n }\n\n const activeTab = typeof wb.views[0]?.activeTab === \"number\" ? wb.views[0].activeTab : undefined;\n w.open(\"bookViews\");\n w.leaf(\"workbookView\", { activeTab });\n w.close(\"bookViews\");\n\n w.open(\"sheets\");\n for (const sheet of sheets) {\n w.leaf(\"sheet\", {\n name: sheet.name,\n sheetId: sheet.sheetId,\n state: sheet.state === \"visible\" ? undefined : sheet.state,\n \"r:id\": sheet.rId,\n });\n }\n w.close(\"sheets\");\n\n if (wb.calcProperties.fullCalcOnLoad) {\n w.leaf(\"calcPr\", { calcId: 0, fullCalcOnLoad: true });\n }\n\n w.close(\"workbook\");\n return w.toString();\n}\n","// `xl/_rels/workbook.xml.rels` — relationships from the workbook to its worksheets, styles,\n// sharedStrings (when present) and theme. Worksheet rIds here MUST equal the `r:id`s emitted in\n// workbook.xml; the orchestrator assigns them once and passes the same list to both (SPEC §5).\n\nimport { XmlWriter } from \"../../xml/index.js\";\nimport type { WorkbookRel } from \"./constants.js\";\nimport { NS } from \"./constants.js\";\n\nexport function renderWorkbookRels(rels: WorkbookRel[]): string {\n const w = new XmlWriter();\n w.open(\"Relationships\", { xmlns: NS.packageRels });\n for (const rel of rels) {\n w.leaf(\"Relationship\", { Id: rel.rId, Type: rel.type, Target: rel.target });\n }\n w.close(\"Relationships\");\n return w.toString();\n}\n","// `xl/worksheets/sheetN.xml` — the grid (SPEC §5, OOXML-NOTES §3). Serialized from a worksheet's\n// `model` snapshot plus `dimensions`. Rendering a cell interns its value into the shared-strings pool\n// (when enabled) and its style into the styles pool, so this MUST run before those parts are rendered.\n//\n// Cell `t` mapping (from CellModel.type / a formula's cached-result type):\n// string -> \"s\" (shared index) or \"inlineStr\" number -> \"n\" (attr omitted, the default)\n// boolean -> \"b\" date -> \"n\" with a date numFmt (serial value)\n// error -> \"e\" richtext -> shared string (or inline runs)\n// hyperlink-> its display text as a string formula -> <f>expr</f> + typed cached <v>\n// merge-slave / styled-empty -> empty <c> carrying only its style null (no style) -> skipped\n\nimport type { CellModel } from \"../../model/index.js\";\nimport { CellType, type RichText, type Worksheet } from \"../../model/index.js\";\nimport { XmlWriter } from \"../../xml/index.js\";\nimport { dateToSerial } from \"../date.js\";\nimport type { SharedStrings } from \"../shared-strings.js\";\nimport type { Styles } from \"../styles.js\";\nimport { NS } from \"./constants.js\";\n\nexport interface WorksheetContext {\n styles: Styles;\n sharedStrings: SharedStrings;\n useSharedStrings: boolean;\n date1904: boolean;\n}\n\n/** Applied to a Date cell whose style carries no explicit number format, so Excel shows a date rather\n * than the raw serial. Built-in id 14, so it adds no custom `<numFmt>` entry. */\nconst DEFAULT_DATE_NUMFMT = \"mm-dd-yy\";\n\nexport function renderWorksheet(ws: Worksheet, ctx: WorksheetContext): string {\n const model = ws.model;\n const w = new XmlWriter();\n w.open(\"worksheet\", { xmlns: NS.spreadsheetml, \"xmlns:r\": NS.relationships });\n\n w.leaf(\"dimension\", { ref: ws.dimensions.range });\n\n w.open(\"sheetViews\");\n w.leaf(\"sheetView\", {\n workbookViewId: 0,\n showGridLines: model.properties.showGridLines === false ? false : undefined,\n });\n w.close(\"sheetViews\");\n\n w.leaf(\"sheetFormatPr\", {\n defaultRowHeight: model.properties.defaultRowHeight ?? 15,\n defaultColWidth: model.properties.defaultColWidth,\n });\n\n renderCols(w, model.columns, ctx);\n renderSheetData(w, model.rows, ctx);\n renderMergeCells(w, model.merges);\n\n w.close(\"worksheet\");\n return w.toString();\n}\n\nfunction renderCols(\n w: XmlWriter,\n columns: Worksheet[\"model\"][\"columns\"],\n ctx: WorksheetContext,\n): void {\n if (!columns || columns.length === 0) return;\n\n const fragments: string[] = [];\n for (const range of columns) {\n const styleId = range.style ? ctx.styles.addStyle(range.style) : 0;\n const hasWidth = range.width !== undefined;\n if (!hasWidth && !range.hidden && !range.outlineLevel && styleId === 0) continue;\n\n const col = new XmlWriter({ declaration: false });\n col.leaf(\"col\", {\n min: range.min,\n max: range.max,\n width: range.width,\n customWidth: hasWidth ? true : undefined,\n style: styleId !== 0 ? styleId : undefined,\n hidden: range.hidden || undefined,\n outlineLevel: range.outlineLevel || undefined,\n });\n fragments.push(col.toString());\n }\n\n if (fragments.length === 0) return;\n w.open(\"cols\");\n for (const f of fragments) w.raw(f);\n w.close(\"cols\");\n}\n\nfunction renderSheetData(\n w: XmlWriter,\n rows: Worksheet[\"model\"][\"rows\"],\n ctx: WorksheetContext,\n): void {\n w.open(\"sheetData\");\n for (const row of rows) {\n const styleId = row.style ? ctx.styles.addStyle(row.style) : 0;\n\n let cellsXml = \"\";\n for (const cell of row.cells) {\n cellsXml += renderCell(cell, ctx);\n }\n\n const hasAttrs =\n row.height !== undefined || row.hidden || (row.outlineLevel ?? 0) !== 0 || styleId !== 0;\n if (cellsXml === \"\" && !hasAttrs) continue;\n\n w.open(\"row\", {\n r: row.number,\n ht: row.height,\n customHeight: row.height !== undefined ? true : undefined,\n hidden: row.hidden || undefined,\n outlineLevel: row.outlineLevel || undefined,\n s: styleId !== 0 ? styleId : undefined,\n customFormat: styleId !== 0 ? true : undefined,\n });\n w.raw(cellsXml);\n w.close(\"row\");\n }\n w.close(\"sheetData\");\n}\n\n/** Render one `<c>` element, or `\"\"` when the cell contributes nothing (a null/merge cell with the\n * default style). Value interning into the shared-strings/styles pools happens here. */\nfunction renderCell(cell: CellModel, ctx: WorksheetContext): string {\n const styleId = cell.style ? ctx.styles.addStyle(cell.style) : 0;\n const r = cell.address;\n\n switch (cell.type) {\n case CellType.Null:\n case CellType.Merge:\n return styleId !== 0 ? leafCell(r, styleId) : \"\";\n\n case CellType.Number:\n return valueCell(r, styleId, undefined, String(cell.value as number));\n\n case CellType.Boolean:\n return valueCell(r, styleId, \"b\", (cell.value as boolean) ? \"1\" : \"0\");\n\n case CellType.Date: {\n const s = cell.style?.numFmt\n ? styleId\n : ctx.styles.addStyle({ ...cell.style, numFmt: DEFAULT_DATE_NUMFMT });\n return valueCell(r, s, undefined, String(dateToSerial(cell.value as Date, ctx.date1904)));\n }\n\n case CellType.Error:\n return valueCell(r, styleId, \"e\", (cell.value as { error: string }).error);\n\n case CellType.String:\n return stringCell(r, styleId, cell.value as string, ctx);\n\n case CellType.Hyperlink:\n return stringCell(r, styleId, (cell.value as { text: string }).text, ctx);\n\n case CellType.RichText:\n return richTextCell(r, styleId, cell.value as RichText, ctx);\n\n case CellType.Formula:\n return formulaCell(r, styleId, cell, ctx);\n\n default:\n return styleId !== 0 ? leafCell(r, styleId) : \"\";\n }\n}\n\n/** `<c r s t><v>raw</v></c>` — `raw` is already a serialized number/token, escaped on write. */\nfunction valueCell(r: string, s: number, t: string | undefined, raw: string): string {\n const w = new XmlWriter({ declaration: false });\n w.open(\"c\", { r, s: s !== 0 ? s : undefined, t });\n w.el(\"v\", raw);\n w.close(\"c\");\n return w.toString();\n}\n\n/** `<c r s/>` — an empty cell carrying only its style (merge slave / styled blank). */\nfunction leafCell(r: string, s: number): string {\n const w = new XmlWriter({ declaration: false });\n w.leaf(\"c\", { r, s });\n return w.toString();\n}\n\nfunction stringCell(r: string, s: number, value: string, ctx: WorksheetContext): string {\n if (ctx.useSharedStrings) {\n return valueCell(r, s, \"s\", String(ctx.sharedStrings.add(value)));\n }\n const w = new XmlWriter({ declaration: false });\n w.open(\"c\", { r, s: s !== 0 ? s : undefined, t: \"inlineStr\" });\n w.open(\"is\");\n w.el(\"t\", value);\n w.close(\"is\");\n w.close(\"c\");\n return w.toString();\n}\n\nfunction richTextCell(r: string, s: number, value: RichText, ctx: WorksheetContext): string {\n if (ctx.useSharedStrings) {\n return valueCell(r, s, \"s\", String(ctx.sharedStrings.add(value)));\n }\n // Inline fallback flattens the runs to plain text (formatting survives only via shared strings).\n const text = value.richText.map((run) => run.text).join(\"\");\n return stringCell(r, s, text, { ...ctx, useSharedStrings: false });\n}\n\nfunction formulaCell(r: string, s: number, cell: CellModel, ctx: WorksheetContext): string {\n const expr = (cell.formula ?? \"\").replace(/^=/, \"\");\n const result = cell.result;\n\n let t: string | undefined;\n let cachedV: string | undefined;\n if (result === undefined) {\n cachedV = undefined;\n } else if (typeof result === \"number\") {\n cachedV = String(result);\n } else if (typeof result === \"boolean\") {\n t = \"b\";\n cachedV = result ? \"1\" : \"0\";\n } else if (result instanceof Date) {\n cachedV = String(dateToSerial(result, ctx.date1904));\n } else if (typeof result === \"object\" && result !== null && \"error\" in result) {\n t = \"e\";\n cachedV = (result as { error: string }).error;\n } else {\n t = \"str\";\n cachedV = String(result);\n }\n\n const w = new XmlWriter({ declaration: false });\n w.open(\"c\", { r, s: s !== 0 ? s : undefined, t });\n w.el(\"f\", expr);\n if (cachedV !== undefined) w.el(\"v\", cachedV);\n w.close(\"c\");\n return w.toString();\n}\n\nfunction renderMergeCells(w: XmlWriter, merges: string[]): void {\n if (merges.length === 0) return;\n w.open(\"mergeCells\", { count: merges.length });\n for (const ref of merges) w.leaf(\"mergeCell\", { ref });\n w.close(\"mergeCells\");\n}\n","// The write orchestrator (SPEC §7): in-memory Workbook -> the OOXML part set -> zip -> Uint8Array.\n// Single pass, mirroring OOXML-NOTES §2's write order: worksheets first (they populate the shared-\n// strings and styles pools as cells emit), then the pooled parts, then the wiring parts.\n//\n// Relationship-id discipline: sheet rIds (rId1..N) are assigned once and shared between workbook.xml\n// and workbook.xml.rels; styles/sharedStrings/theme take the ids after them. sharedStrings only gets\n// an id (and a part) when the pool is non-empty.\n\nimport type { Workbook } from \"../model/index.js\";\nimport { writeZipArchive, type ZipEntries } from \"../zip-layer.js\";\nimport { renderAppProps } from \"./parts/app-props.js\";\nimport type { SheetRel, WorkbookRel } from \"./parts/constants.js\";\nimport { PART_PATH, REL_TYPE } from \"./parts/constants.js\";\nimport { renderContentTypes } from \"./parts/content-types.js\";\nimport { renderCoreProps } from \"./parts/core-props.js\";\nimport { renderRootRels } from \"./parts/root-rels.js\";\nimport { renderTheme } from \"./parts/theme.js\";\nimport { renderWorkbook } from \"./parts/workbook.js\";\nimport { renderWorkbookRels } from \"./parts/workbook-rels.js\";\nimport { renderWorksheet } from \"./parts/worksheet.js\";\nimport { createSharedStrings } from \"./shared-strings.js\";\nimport { createStyles, type Styles } from \"./styles.js\";\n\nexport interface WriteOptions {\n /** Emit a shared-string table (string cells store an index). When `false`, strings render inline.\n * Default `true`. */\n useSharedStrings?: boolean;\n /** Intern cell/row/column styles into styles.xml. When `false`, cells render unstyled (`s` omitted)\n * and styles.xml carries only the mandatory baseline. Default `true`. */\n useStyles?: boolean;\n}\n\n/** Serialize a workbook to `.xlsx` bytes. Environment-agnostic (no `fs`); see `writeWorkbookFile`. */\nexport function writeWorkbookBuffer(wb: Workbook, options?: WriteOptions): Uint8Array {\n const useSharedStrings = options?.useSharedStrings !== false;\n const useStyles = options?.useStyles !== false;\n const date1904 = wb.properties.date1904 === true;\n\n const worksheets = wb.worksheets;\n const sheetRels: SheetRel[] = worksheets.map((ws, i) => ({\n rId: `rId${i + 1}`,\n fileName: `sheet${i + 1}.xml`,\n sheetId: ws.id,\n name: ws.name,\n state: ws.state,\n }));\n\n const sharedStrings = createSharedStrings();\n const styles = createStyles();\n // When styles are disabled, cells intern nothing (always `s=0`); styles.xml still ships the baseline.\n const cellStyles: Styles = useStyles\n ? styles\n : { addStyle: () => 0, toXml: styles.toXml.bind(styles) };\n\n const ctx = { styles: cellStyles, sharedStrings, useSharedStrings, date1904 };\n\n // 1. Worksheets first — this is what fills the shared-strings and styles pools.\n const worksheetXml = new Map<string, string>();\n worksheets.forEach((ws, i) => {\n worksheetXml.set(sheetRels[i]!.fileName, renderWorksheet(ws, ctx));\n });\n\n // 2. Now the pools are populated: decide whether a sharedStrings part exists.\n const sharedStringsXml = useSharedStrings ? sharedStrings.toXml() : undefined;\n const hasSharedStrings = sharedStringsXml !== undefined;\n\n // 3. Assign the remaining rIds after the sheets, then wire the workbook rels.\n let counter = worksheets.length;\n const stylesRId = `rId${++counter}`;\n const sharedRId = hasSharedStrings ? `rId${++counter}` : undefined;\n const themeRId = `rId${++counter}`;\n\n const workbookRels: WorkbookRel[] = sheetRels.map((s) => ({\n rId: s.rId,\n type: REL_TYPE.worksheet,\n target: `worksheets/${s.fileName}`,\n }));\n workbookRels.push({ rId: stylesRId, type: REL_TYPE.styles, target: \"styles.xml\" });\n if (sharedRId) {\n workbookRels.push({\n rId: sharedRId,\n type: REL_TYPE.sharedStrings,\n target: \"sharedStrings.xml\",\n });\n }\n workbookRels.push({ rId: themeRId, type: REL_TYPE.theme, target: \"theme/theme1.xml\" });\n\n // 4. Assemble every part.\n const enc = new TextEncoder();\n const entries: ZipEntries = new Map();\n const put = (path: string, xml: string) => entries.set(path, enc.encode(xml));\n\n put(\n PART_PATH.contentTypes,\n renderContentTypes({ worksheetFiles: sheetRels.map((s) => s.fileName), hasSharedStrings }),\n );\n put(PART_PATH.rootRels, renderRootRels());\n put(PART_PATH.coreProps, renderCoreProps(wb));\n put(\n PART_PATH.appProps,\n renderAppProps(\n wb,\n sheetRels.map((s) => s.name),\n ),\n );\n put(PART_PATH.workbook, renderWorkbook(wb, sheetRels));\n put(PART_PATH.workbookRels, renderWorkbookRels(workbookRels));\n put(PART_PATH.styles, styles.toXml());\n if (sharedStringsXml !== undefined) put(PART_PATH.sharedStrings, sharedStringsXml);\n put(PART_PATH.theme, renderTheme());\n for (const [file, xml] of worksheetXml) put(`xl/worksheets/${file}`, xml);\n\n return writeZipArchive(entries);\n}\n\n/** Node-only convenience: serialize and write to disk. Isolated here so browser bundles that only\n * use {@link writeWorkbookBuffer} never pull in `node:fs`. */\nexport async function writeWorkbookFile(\n wb: Workbook,\n path: string,\n options?: WriteOptions,\n): Promise<void> {\n const bytes = writeWorkbookBuffer(wb, options);\n const { writeFile } = await import(\"node:fs/promises\");\n await writeFile(path, bytes);\n}\n","/**\n * @alosha/xlsx — a modern TypeScript library for reading and writing XLSX\n * spreadsheets, inspired by exceljs.\n *\n * This is the public entry point: the Stage 1.2 document model plus the Stage 1.3 OOXML writer. The\n * writer is exposed two ways — the free functions from `./xlsx` (the environment-agnostic core) and\n * an ExcelJS-style `workbook.xlsx.writeBuffer/writeFile` accessor attached here at the composition\n * root, so the model layer keeps no dependency on the serializer.\n */\n\nimport { Workbook } from \"./model/index.js\";\nimport {\n type ReadOptions,\n readWorkbookBuffer,\n readWorkbookFile,\n type WriteOptions,\n writeWorkbookBuffer,\n writeWorkbookFile,\n} from \"./xlsx/index.js\";\n\nexport * from \"./address/index.js\";\nexport * from \"./errors.js\";\nexport * from \"./model/index.js\";\nexport * from \"./xlsx/index.js\";\n\n/** A source of chunks for {@link XlsxAccessor.read}; a Node `Readable` satisfies this structurally. */\ntype ByteStream = AsyncIterable<Uint8Array>;\n\n/** The ExcelJS-compatible read/write surface reached via `workbook.xlsx`. `load`/`readFile`/`read`\n * mutate the receiving workbook in place and return it, matching ExcelJS. */\nexport interface XlsxAccessor {\n /** Serialize the workbook to `.xlsx` bytes. Async to mirror ExcelJS; wraps the sync core. */\n writeBuffer(options?: WriteOptions): Promise<Uint8Array>;\n /** Node-only: serialize and write to `path`. */\n writeFile(path: string, options?: WriteOptions): Promise<void>;\n /** Parse `.xlsx` bytes into this workbook (replaces its contents), returning it. */\n load(data: Uint8Array, options?: ReadOptions): Promise<Workbook>;\n /** Node-only: read and parse a `.xlsx` from `path` into this workbook, returning it. */\n readFile(path: string, options?: ReadOptions): Promise<Workbook>;\n /** Drain a byte stream (e.g. a Node `Readable`) and parse it into this workbook, returning it. */\n read(stream: ByteStream, options?: ReadOptions): Promise<Workbook>;\n}\n\ndeclare module \"./model/workbook.js\" {\n interface Workbook {\n /** ExcelJS-style read/write accessor (see {@link XlsxAccessor}). */\n readonly xlsx: XlsxAccessor;\n }\n}\n\n/** Concatenate a byte stream's chunks into a single buffer (no `fs`; browser-safe). */\nasync function drainStream(stream: ByteStream): Promise<Uint8Array> {\n const chunks: Uint8Array[] = [];\n let total = 0;\n for await (const chunk of stream) {\n chunks.push(chunk);\n total += chunk.length;\n }\n const out = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n out.set(chunk, offset);\n offset += chunk.length;\n }\n return out;\n}\n\nObject.defineProperty(Workbook.prototype, \"xlsx\", {\n configurable: true,\n get(this: Workbook): XlsxAccessor {\n return {\n writeBuffer: (options?: WriteOptions) => Promise.resolve(writeWorkbookBuffer(this, options)),\n writeFile: (path: string, options?: WriteOptions) => writeWorkbookFile(this, path, options),\n load: (data: Uint8Array, options?: ReadOptions) => {\n this.model = readWorkbookBuffer(data, options).model;\n return Promise.resolve(this);\n },\n readFile: async (path: string, options?: ReadOptions) => {\n this.model = (await readWorkbookFile(path, options)).model;\n return this;\n },\n read: async (stream: ByteStream, options?: ReadOptions) => {\n this.model = readWorkbookBuffer(await drainStream(stream), options).model;\n return this;\n },\n };\n },\n});\n\n/** The semantic version of the library. */\nexport const version = \"0.0.0\";\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/model/enums.ts","../src/model/cell-value.ts","../src/model/style.ts","../src/model/cell.ts","../src/address/col-cache.ts","../src/address/range.ts","../src/model/column.ts","../src/model/row.ts","../src/model/worksheet.ts","../src/model/workbook.ts","../src/xlsx/date.ts","../src/xlsx/parts/constants.ts","../src/xml/xml-reader.ts","../src/xml/xml-writer.ts","../src/zip-layer.ts","../src/xlsx/read/package.ts","../src/xlsx/read/props.ts","../src/xlsx/read/shared-strings.ts","../src/xlsx/styles.ts","../src/xlsx/read/styles.ts","../src/xlsx/read/workbook.ts","../src/xlsx/read/worksheet.ts","../src/xlsx/read-workbook.ts","../src/xlsx/shared-strings.ts","../src/xlsx/parts/app-props.ts","../src/xlsx/parts/content-types.ts","../src/xlsx/parts/core-props.ts","../src/xlsx/parts/root-rels.ts","../src/xlsx/parts/theme.ts","../src/xlsx/parts/workbook.ts","../src/xlsx/parts/workbook-rels.ts","../src/xlsx/parts/worksheet-rels.ts","../src/xlsx/parts/worksheet.ts","../src/xlsx/write-workbook.ts","../src/index.ts"],"names":["CellType","FormulaType","num","ws","name","unzipSync","zipSync","parseColor","truthy","relId","SPREADSHEETML_NS","renderColor","renderUnderline"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Typed error hierarchy for @alosha/xlsx.\n *\n * Every error thrown by the library extends {@link AloshaXlsxError}, so callers can do:\n *\n * try { ws.name = 'a/b'; }\n * catch (e) {\n * if (e instanceof AloshaXlsxError) console.log(e.code); // stable, minify-safe\n * }\n *\n * The `code` string is the stable programmatic handle (safe across bundling/minification, unlike\n * `name`/`instanceof` across realms). Prefer switching on `code`. Design goal (see docs/API-AUDIT.md §5):\n * replace ExcelJS's `console.warn`/`console.trace` side effects with thrown, inspectable errors.\n */\n\nexport type AloshaXlsxErrorCode =\n | \"INVALID_ADDRESS\"\n | \"INVALID_RANGE\"\n | \"INVALID_WORKSHEET_NAME\"\n | \"RESERVED_WORKSHEET_NAME\"\n | \"DUPLICATE_WORKSHEET_NAME\"\n | \"WORKSHEET_NAME_TOO_LONG\"\n | \"MERGE_CONFLICT\"\n | \"INVALID_ROW_NUMBER\"\n | \"INVALID_CELL_VALUE\"\n | \"UNSUPPORTED_FEATURE\"\n | \"INVALID_PACKAGE\";\n\n/**\n * Base class for all library errors. Abstract — never thrown directly; always a concrete subclass.\n * Sets `name` from the concrete class and repairs the prototype chain so `instanceof` holds even when\n * compiled to older targets.\n */\nexport abstract class AloshaXlsxError extends Error {\n /** Stable, machine-readable discriminator. Prefer this over `name`/`instanceof`. */\n abstract readonly code: AloshaXlsxErrorCode;\n\n constructor(message: string) {\n super(message);\n // `new.target` is the concrete subclass being constructed.\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Narrowing type guard for library errors. */\nexport function isAloshaXlsxError(e: unknown): e is AloshaXlsxError {\n return e instanceof AloshaXlsxError;\n}\n\n// ---------------------------------------------------------------------------\n// Addresses & ranges (src/address/*)\n// ---------------------------------------------------------------------------\n\n/** A cell address or column letter could not be parsed (e.g. `''`, `'A0'`, `'1A'`, `'@'`). */\nexport class InvalidAddressError extends AloshaXlsxError {\n readonly code = \"INVALID_ADDRESS\" as const;\n constructor(public readonly address: string) {\n super(`Invalid cell address: ${JSON.stringify(address)}`);\n }\n}\n\n/** A range could not be parsed from the supplied source (e.g. `'A1:'`, malformed tuple). */\nexport class InvalidRangeError extends AloshaXlsxError {\n readonly code = \"INVALID_RANGE\" as const;\n constructor(public readonly range: unknown) {\n super(`Invalid range: ${JSON.stringify(range)}`);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Worksheet naming (Worksheet#name setter — see docs/API-AUDIT.md §2)\n// ---------------------------------------------------------------------------\n\n/** Why a worksheet name was rejected (illegal-character/empty/edge-quote cases). */\nexport type InvalidWorksheetNameReason = \"empty\" | \"illegal-characters\" | \"edge-quote\";\n\n/** Worksheet name is empty, contains `* ? : / \\ [ ]`, or starts/ends with a single quote. */\nexport class InvalidWorksheetNameError extends AloshaXlsxError {\n readonly code = \"INVALID_WORKSHEET_NAME\" as const;\n constructor(\n public readonly worksheetName: string,\n public readonly reason: InvalidWorksheetNameReason,\n ) {\n super(InvalidWorksheetNameError.messageFor(worksheetName, reason));\n }\n\n private static messageFor(name: string, reason: InvalidWorksheetNameReason): string {\n switch (reason) {\n case \"empty\":\n return \"Worksheet name cannot be empty.\";\n case \"edge-quote\":\n return `Worksheet name cannot start or end with a single quote: ${JSON.stringify(name)}`;\n case \"illegal-characters\":\n return `Worksheet name ${JSON.stringify(name)} cannot include any of: * ? : \\\\ / [ ]`;\n }\n }\n}\n\n/** Worksheet name uses a reserved word (Excel reserves `\"History\"`). */\nexport class ReservedWorksheetNameError extends AloshaXlsxError {\n readonly code = \"RESERVED_WORKSHEET_NAME\" as const;\n constructor(public readonly worksheetName: string) {\n super(`Worksheet name is reserved and cannot be used: ${JSON.stringify(worksheetName)}`);\n }\n}\n\n/** A worksheet with this name already exists in the workbook (comparison is case-insensitive). */\nexport class DuplicateWorksheetNameError extends AloshaXlsxError {\n readonly code = \"DUPLICATE_WORKSHEET_NAME\" as const;\n constructor(public readonly worksheetName: string) {\n super(`Worksheet name already exists: ${JSON.stringify(worksheetName)}`);\n }\n}\n\n/**\n * Worksheet name exceeds Excel's limit. Unlike ExcelJS (which warns + silently truncates), the model\n * throws so the caller decides — see docs/STAGE-1.2-SPEC.md §7.\n */\nexport class WorksheetNameTooLongError extends AloshaXlsxError {\n readonly code = \"WORKSHEET_NAME_TOO_LONG\" as const;\n /** Excel's hard cap on sheet-name length. */\n static readonly MAX_LENGTH = 31;\n constructor(\n public readonly worksheetName: string,\n public readonly maxLength: number = WorksheetNameTooLongError.MAX_LENGTH,\n ) {\n super(\n `Worksheet name exceeds ${maxLength} characters (got ${worksheetName.length}): ` +\n `${JSON.stringify(worksheetName)}`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Cells, rows & merges (src/model/*)\n// ---------------------------------------------------------------------------\n\n/** Attempted to merge a region that overlaps an existing merge (merges are atomic — API-AUDIT §2). */\nexport class MergeConflictError extends AloshaXlsxError {\n readonly code = \"MERGE_CONFLICT\" as const;\n constructor(public readonly range: string) {\n super(`Cannot merge cells: range ${JSON.stringify(range)} overlaps an existing merge.`);\n }\n}\n\n/** A row model's `number` does not match the row it is being assigned to (model round-trip guard). */\nexport class InvalidRowNumberError extends AloshaXlsxError {\n readonly code = \"INVALID_ROW_NUMBER\" as const;\n constructor(\n public readonly expected: number,\n public readonly actual: number,\n ) {\n super(`Invalid row number in model: expected ${expected}, got ${actual}.`);\n }\n}\n\n/** A value passed to `cell.value` is not a supported {@link import('./model/cell-value').CellValue}. */\nexport class InvalidCellValueError extends AloshaXlsxError {\n readonly code = \"INVALID_CELL_VALUE\" as const;\n constructor(public readonly value: unknown) {\n super(`Unsupported cell value: ${InvalidCellValueError.describe(value)}`);\n }\n\n private static describe(value: unknown): string {\n const t = value === null ? \"null\" : typeof value;\n return t === \"object\"\n ? `object ${Object.prototype.toString.call(value)}`\n : `${t} (${String(value)})`;\n }\n}\n\n/**\n * A feature not implemented in the current stage was invoked (pivot tables, conditional formatting,\n * drawings, tables, data validation, comments, protection — deferred to Stage 2; see STAGE-1.2-SPEC §9).\n * Use to fail loudly on stubs instead of silently no-op'ing.\n */\nexport class UnsupportedFeatureError extends AloshaXlsxError {\n readonly code = \"UNSUPPORTED_FEATURE\" as const;\n constructor(\n public readonly feature: string,\n /** Optional pointer appended to the message (e.g. the compat shim's tracking-issue note). */\n public readonly detail?: string,\n ) {\n super(\n detail === undefined\n ? `Feature not yet supported in @alosha/xlsx: ${feature}`\n : `${feature}: ${detail}`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Package structure (src/xlsx/read/package.ts, STAGE-2-SPEC.md §3)\n// ---------------------------------------------------------------------------\n\n/**\n * The `.xlsx` package's OPC structure (zip / rels / parts) is missing or malformed: a truncated/corrupt\n * zip, a missing `_rels/.rels` or workbook part, or a relationship that cannot be resolved. Thrown by\n * `openPackage` before any SpreadsheetML parsing begins.\n */\nexport class InvalidPackageError extends AloshaXlsxError {\n readonly code = \"INVALID_PACKAGE\" as const;\n constructor(public readonly reason: string) {\n super(`Invalid .xlsx package: ${reason}`);\n }\n}\n","// Cell-type and formula-type enums, plus the OOXML error-code union. Keeps the *set* of value\n// types from ExcelJS (see docs/API-AUDIT.md §ValueType) but drops its numeric-wire coupling — the\n// OOXML `t=` mapping lives in the Stage 1.3 serializer, not here.\n\nexport enum CellType {\n Null = 0,\n Number = 1,\n String = 2,\n Boolean = 3,\n Date = 4,\n Error = 5,\n RichText = 6,\n Hyperlink = 7,\n Formula = 8,\n Merge = 9,\n SharedString = 10,\n}\n\nexport enum FormulaType {\n None = 0,\n Master = 1,\n Shared = 2,\n}\n\nexport type ErrorCode = \"#N/A\" | \"#REF!\" | \"#NAME?\" | \"#DIV/0!\" | \"#NULL!\" | \"#VALUE!\" | \"#NUM!\";\n","// The cell value union + pure helpers. Replaces ExcelJS's 12 Value strategy classes with a\n// discriminated union and free functions (see docs/API-AUDIT.md §5) — same behavior, no\n// per-cell class allocation.\n//\n// `Font` is a type-only import: style.ts has no dependency back on this module, so this does not\n// introduce an import cycle, and `import type` is erased entirely at build time.\n\nimport { InvalidCellValueError } from \"../errors.js\";\nimport { CellType, type ErrorCode } from \"./enums.js\";\nimport type { Font } from \"./style.js\";\n\nexport interface RichTextRun {\n text: string;\n font?: Font;\n}\n\nexport interface RichText {\n richText: RichTextRun[];\n}\n\nexport interface Hyperlink {\n text: string;\n hyperlink: string;\n tooltip?: string;\n}\n\nexport interface CellError {\n error: ErrorCode;\n}\n\nexport interface CellFormula {\n formula?: string;\n sharedFormula?: string;\n ref?: string;\n shareType?: \"shared\" | \"array\";\n result?: number | string | boolean | Date | CellError;\n}\n\n/** What callers pass to `cell.value = …` and read back. */\nexport type CellValue =\n | null\n | number\n | string\n | boolean\n | Date\n | CellError\n | RichText\n | Hyperlink\n | CellFormula;\n\n/** Internal normalized storage on the cell model (discriminated on `type`). */\nexport type StoredValue =\n | { type: CellType.Null }\n | { type: CellType.Number; value: number }\n | { type: CellType.String; value: string }\n | { type: CellType.Boolean; value: boolean }\n | { type: CellType.Date; value: Date }\n | { type: CellType.Error; value: CellError }\n | { type: CellType.RichText; value: RichText }\n | { type: CellType.Hyperlink; value: Hyperlink }\n | { type: CellType.Formula; value: CellFormula }\n | { type: CellType.Merge; master: string }\n | { type: CellType.SharedString; value: number };\n\n/**\n * Duck-type a `CellValue` into a `CellType`, mirroring ExcelJS's `Value.getType` check order:\n * null → string → number → boolean → date → hyperlink (`text`&`hyperlink`) → formula\n * (`formula`|`sharedFormula`) → richText → error. Throws {@link InvalidCellValueError} for\n * anything else.\n */\nexport function detectType(v: CellValue): CellType {\n if (v === null) return CellType.Null;\n if (typeof v === \"string\") return CellType.String;\n if (typeof v === \"number\") return CellType.Number;\n if (typeof v === \"boolean\") return CellType.Boolean;\n if (v instanceof Date) return CellType.Date;\n if (\"text\" in v && \"hyperlink\" in v) return CellType.Hyperlink;\n if (\"formula\" in v || \"sharedFormula\" in v) return CellType.Formula;\n if (\"richText\" in v) return CellType.RichText;\n if (\"error\" in v) return CellType.Error;\n throw new InvalidCellValueError(v);\n}\n\n/** Normalizes an ergonomic `CellValue` into its discriminated `StoredValue` form. */\nexport function toStored(v: CellValue): StoredValue {\n switch (detectType(v)) {\n case CellType.Null:\n return { type: CellType.Null };\n case CellType.String:\n return { type: CellType.String, value: v as string };\n case CellType.Number:\n return { type: CellType.Number, value: v as number };\n case CellType.Boolean:\n return { type: CellType.Boolean, value: v as boolean };\n case CellType.Date:\n return { type: CellType.Date, value: v as Date };\n case CellType.Hyperlink:\n return { type: CellType.Hyperlink, value: v as Hyperlink };\n case CellType.Formula:\n return { type: CellType.Formula, value: v as CellFormula };\n case CellType.RichText:\n return { type: CellType.RichText, value: v as RichText };\n case CellType.Error:\n return { type: CellType.Error, value: v as CellError };\n default:\n throw new InvalidCellValueError(v);\n }\n}\n\n/**\n * Recovers the ergonomic `CellValue` from a `StoredValue`. `Merge` (resolved via the master cell)\n * and `SharedString` (resolved via the shared-strings pool, Stage 1.3) have no `CellValue`\n * equivalent of their own and read back as `null`.\n */\nexport function fromStored(s: StoredValue): CellValue {\n switch (s.type) {\n case CellType.Null:\n case CellType.Merge:\n case CellType.SharedString:\n return null;\n case CellType.Number:\n case CellType.String:\n case CellType.Boolean:\n case CellType.Date:\n case CellType.Error:\n case CellType.RichText:\n case CellType.Hyperlink:\n case CellType.Formula:\n return s.value;\n }\n}\n\n/** For a formula cell, the type of its cached `result`; else the cell's own type. */\nexport function effectiveType(s: StoredValue): CellType {\n if (s.type !== CellType.Formula) return s.type;\n\n const { result } = s.value;\n if (result === undefined) return CellType.Null;\n if (typeof result === \"number\") return CellType.Number;\n if (typeof result === \"string\") return CellType.String;\n if (typeof result === \"boolean\") return CellType.Boolean;\n if (result instanceof Date) return CellType.Date;\n return CellType.Error;\n}\n\nfunction primitiveToText(value: number | string | boolean | Date | CellError): string {\n if (typeof value === \"number\") return String(value);\n if (typeof value === \"string\") return value;\n if (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n if (value instanceof Date) return value.toISOString();\n return value.error;\n}\n\n/** Display string for a stored value (no number-format application — that's Stage 1.3). */\nexport function toText(s: StoredValue): string {\n switch (s.type) {\n case CellType.Null:\n case CellType.Merge:\n case CellType.SharedString:\n return \"\";\n case CellType.Number:\n case CellType.String:\n case CellType.Boolean:\n case CellType.Date:\n case CellType.Error:\n return primitiveToText(s.value);\n case CellType.RichText:\n return s.value.richText.map((run) => run.text).join(\"\");\n case CellType.Hyperlink:\n return s.value.text;\n case CellType.Formula: {\n const { result } = s.value;\n return result === undefined ? \"\" : primitiveToText(result);\n }\n }\n}\n\nconst CSV_SPECIAL_RE = /[\"\\n\\r,]/;\n\n/** CSV-escaped rendering of a stored value: quotes the field and doubles internal quotes when it\n * contains a comma, quote, or newline. */\nexport function toCsv(s: StoredValue): string {\n const text = toText(s);\n if (!CSV_SPECIAL_RE.test(text)) return text;\n return `\"${text.replace(/\"/g, '\"\"')}\"`;\n}\n","// Style & format types (see docs/STAGE-1.2-SPEC.md §4 / docs/API-AUDIT.md §4). All fields are\n// optional — a cell may set only e.g. `font.bold`, leaving the rest to inherit from row/column.\n\nexport interface Color {\n argb?: string;\n theme?: number;\n indexed?: number;\n}\n\nexport interface Font {\n name?: string;\n size?: number;\n family?: number;\n scheme?: \"minor\" | \"major\" | \"none\";\n charset?: number;\n color?: Color;\n bold?: boolean;\n italic?: boolean;\n underline?: boolean | \"none\" | \"single\" | \"double\" | \"singleAccounting\" | \"doubleAccounting\";\n vertAlign?: \"superscript\" | \"subscript\";\n strike?: boolean;\n outline?: boolean;\n}\n\nexport type FillPattern =\n | \"none\"\n | \"solid\"\n | \"darkVertical\"\n | \"darkHorizontal\"\n | \"darkGrid\"\n | \"darkTrellis\"\n | \"darkDown\"\n | \"darkUp\"\n | \"lightVertical\"\n | \"lightHorizontal\"\n | \"lightGrid\"\n | \"lightTrellis\"\n | \"lightDown\"\n | \"lightUp\"\n | \"darkGray\"\n | \"mediumGray\"\n | \"lightGray\"\n | \"gray125\"\n | \"gray0625\";\n\nexport interface GradientStop {\n position: number;\n color: Color;\n}\n\nexport type Fill =\n | { type: \"pattern\"; pattern: FillPattern; fgColor?: Color; bgColor?: Color }\n | { type: \"gradient\"; gradient: \"angle\"; degree: number; stops: GradientStop[] }\n | {\n type: \"gradient\";\n gradient: \"path\";\n center: { left: number; top: number };\n stops: GradientStop[];\n };\n\nexport type BorderStyle =\n | \"thin\"\n | \"dotted\"\n | \"hair\"\n | \"medium\"\n | \"double\"\n | \"thick\"\n | \"dashed\"\n | \"dashDot\"\n | \"dashDotDot\"\n | \"slantDashDot\"\n | \"mediumDashed\"\n | \"mediumDashDotDot\"\n | \"mediumDashDot\";\n\nexport interface Border {\n style?: BorderStyle;\n color?: Color;\n}\n\nexport interface BorderDiagonal extends Border {\n up?: boolean;\n down?: boolean;\n}\n\nexport interface Borders {\n top?: Border;\n left?: Border;\n bottom?: Border;\n right?: Border;\n diagonal?: BorderDiagonal;\n}\n\nexport interface Alignment {\n horizontal?:\n | \"left\"\n | \"center\"\n | \"right\"\n | \"fill\"\n | \"justify\"\n | \"centerContinuous\"\n | \"distributed\";\n vertical?: \"top\" | \"middle\" | \"bottom\" | \"distributed\" | \"justify\";\n wrapText?: boolean;\n shrinkToFit?: boolean;\n indent?: number;\n readingOrder?: \"rtl\" | \"ltr\";\n textRotation?: number | \"vertical\";\n}\n\nexport interface Protection {\n locked?: boolean;\n hidden?: boolean;\n}\n\nexport interface Style {\n numFmt?: string;\n font?: Font;\n alignment?: Alignment;\n protection?: Protection;\n border?: Borders;\n fill?: Fill;\n}\n\n/** Shallow-merges an object-typed style field: column, then row (wins), then cell (wins over both). */\nfunction mergeField<T extends object>(\n colField: T | undefined,\n rowField: T | undefined,\n cellField: T | undefined,\n): T | undefined {\n if (colField === undefined && rowField === undefined && cellField === undefined) {\n return undefined;\n }\n return { ...colField, ...rowField, ...cellField } as T;\n}\n\n/**\n * Resolve a cell's effective style: row default and column default merged field-by-field — row\n * wins over column — then the cell's own style overrides both (see docs/API-AUDIT.md §4's\n * `_mergeStyle` precedence note). `fill` is a discriminated union so it is replaced wholesale\n * rather than merged (mixing a `pattern` fill's fields with a `gradient` fill's would be\n * incoherent). Returns a new object; never mutates any input.\n */\nexport function resolveCellStyle(rowStyle?: Style, colStyle?: Style, cellStyle?: Style): Style {\n const result: Style = {};\n\n const numFmt = cellStyle?.numFmt ?? rowStyle?.numFmt ?? colStyle?.numFmt;\n if (numFmt !== undefined) result.numFmt = numFmt;\n\n const font = mergeField(colStyle?.font, rowStyle?.font, cellStyle?.font);\n if (font !== undefined) result.font = font;\n\n const alignment = mergeField(colStyle?.alignment, rowStyle?.alignment, cellStyle?.alignment);\n if (alignment !== undefined) result.alignment = alignment;\n\n const protection = mergeField(colStyle?.protection, rowStyle?.protection, cellStyle?.protection);\n if (protection !== undefined) result.protection = protection;\n\n const border = mergeField(colStyle?.border, rowStyle?.border, cellStyle?.border);\n if (border !== undefined) result.border = border;\n\n const fill = cellStyle?.fill ?? rowStyle?.fill ?? colStyle?.fill;\n if (fill !== undefined) result.fill = fill;\n\n return result;\n}\n","// Cell: value get/set through the CellValue <-> StoredValue helpers (no per-type strategy\n// classes — see docs/API-AUDIT.md §5), merge bookkeeping, and the style shortcuts. Style is\n// resolved from row+column defaults once at construction (docs/API-AUDIT.md §4's `_mergeStyle`\n// note); further per-field writes go straight into the cell's own style object.\n//\n// `Row`/`Column` are type-only imports: Cell never constructs either (both are handed to it by\n// their owning Row), so this carries no runtime dependency and cannot cycle with row.ts's\n// `import { Cell }`.\n\nimport {\n type CellFormula,\n type CellValue,\n effectiveType as effectiveTypeOf,\n fromStored,\n type StoredValue,\n toCsv,\n toStored,\n toText,\n} from \"./cell-value.js\";\nimport type { Column } from \"./column.js\";\nimport { CellType, FormulaType } from \"./enums.js\";\nimport type { Row } from \"./row.js\";\nimport {\n type Alignment,\n type Borders,\n type Fill,\n type Font,\n type Protection,\n resolveCellStyle,\n type Style,\n} from \"./style.js\";\n\nexport interface CellModel {\n address: string;\n type: CellType;\n value?: unknown;\n formula?: string;\n result?: unknown;\n style?: Style;\n}\n\nexport class Cell {\n private _stored: StoredValue = { type: CellType.Null };\n private _style: Style;\n private _master: Cell;\n\n constructor(\n private readonly rowRef: Row,\n private readonly columnRef: Column,\n public readonly address: string,\n ) {\n this._master = this;\n this._style = resolveCellStyle(rowRef.style, columnRef.style);\n }\n\n get row(): number {\n return this.rowRef.number;\n }\n\n get col(): number {\n return this.columnRef.number;\n }\n\n get $col$row(): string {\n return `$${this.columnRef.letter}$${this.rowRef.number}`;\n }\n\n /** The stored value this cell resolves through: itself, or (if merged) its master. */\n private get resolvedStored(): StoredValue {\n return this.isMerged ? this._master.resolvedStored : this._stored;\n }\n\n get value(): CellValue {\n return fromStored(this.resolvedStored);\n }\n\n set value(v: CellValue) {\n if (this.isMerged) {\n this._master.value = v;\n return;\n }\n this._stored = toStored(v);\n }\n\n /** This cell's own marker type — `Merge` for a slave, even though `value`/`text` delegate. */\n get type(): CellType {\n return this._stored.type;\n }\n\n get effectiveType(): CellType {\n return effectiveTypeOf(this.resolvedStored);\n }\n\n get text(): string {\n return toText(this.resolvedStored);\n }\n\n toString(): string {\n return this.text;\n }\n\n toCsvString(): string {\n return toCsv(this.resolvedStored);\n }\n\n get isMerged(): boolean {\n return this._master !== this;\n }\n\n /** The master cell of this cell's merge region; itself if unmerged. */\n get master(): Cell {\n return this._master;\n }\n\n merge(master: Cell, ignoreStyle = false): void {\n this._master = master;\n this._stored = { type: CellType.Merge, master: master.address };\n if (!ignoreStyle) this._style = master.style;\n }\n\n unmerge(): void {\n this._master = this;\n this._stored = { type: CellType.Null };\n }\n\n get formula(): string | undefined {\n const s = this.resolvedStored;\n return s.type === CellType.Formula ? s.value.formula : undefined;\n }\n\n get result(): unknown {\n const s = this.resolvedStored;\n return s.type === CellType.Formula ? s.value.result : undefined;\n }\n\n get formulaType(): FormulaType {\n const s = this.resolvedStored;\n if (s.type !== CellType.Formula) return FormulaType.None;\n return s.value.sharedFormula !== undefined ? FormulaType.Shared : FormulaType.Master;\n }\n\n get style(): Style {\n return this._style;\n }\n\n set style(s: Style) {\n this._style = s;\n }\n\n get numFmt(): string | undefined {\n return this._style.numFmt;\n }\n\n set numFmt(v: string | undefined) {\n this._style = { ...this._style, numFmt: v };\n }\n\n get font(): Font | undefined {\n return this._style.font;\n }\n\n set font(v: Font | undefined) {\n this._style = { ...this._style, font: v };\n }\n\n get alignment(): Alignment | undefined {\n return this._style.alignment;\n }\n\n set alignment(v: Alignment | undefined) {\n this._style = { ...this._style, alignment: v };\n }\n\n get border(): Borders | undefined {\n return this._style.border;\n }\n\n set border(v: Borders | undefined) {\n this._style = { ...this._style, border: v };\n }\n\n get fill(): Fill | undefined {\n return this._style.fill;\n }\n\n set fill(v: Fill | undefined) {\n this._style = { ...this._style, fill: v };\n }\n\n get protection(): Protection | undefined {\n return this._style.protection;\n }\n\n set protection(v: Protection | undefined) {\n this._style = { ...this._style, protection: v };\n }\n\n get model(): CellModel {\n const m: CellModel = { address: this.address, type: this.type };\n switch (this._stored.type) {\n case CellType.Null:\n case CellType.Merge:\n break;\n case CellType.Formula:\n if (this._stored.value.formula !== undefined) m.formula = this._stored.value.formula;\n if (this._stored.value.result !== undefined) m.result = this._stored.value.result;\n break;\n default:\n m.value = fromStored(this._stored);\n }\n if (Object.keys(this._style).length > 0) m.style = this._style;\n return m;\n }\n\n set model(m: CellModel) {\n // Model assignment always targets this cell directly — an implicit unmerge, mirroring how\n // ExcelJS reloads a cell wholesale from serialized state.\n this._master = this;\n switch (m.type) {\n case CellType.Merge:\n this._stored = { type: CellType.Merge, master: this.address };\n break;\n case CellType.Formula:\n this._stored = toStored({\n formula: m.formula,\n result: m.result as CellFormula[\"result\"],\n });\n break;\n case CellType.Null:\n this._stored = { type: CellType.Null };\n break;\n default:\n this.value = m.value as CellValue;\n }\n this._style = m.style ?? {};\n }\n}\n","// A1 <-> {row,col} address math. Pure, hot-path, memoized. Port of ExcelJS's col-cache behavior\n// (see docs/API-AUDIT.md §5) as typed free functions instead of a class.\n\nimport { InvalidAddressError } from \"../errors.js\";\n\n/** 1-based rows/cols everywhere in this module's public surface. */\nexport interface Decoded {\n row: number;\n col: number;\n address: string;\n}\n\n/** `decodeEx` result: adds the absolute `$col$row` form and an optional sheet qualifier. */\nexport interface DecodedEx extends Decoded {\n $col$row: string;\n sheetName?: string;\n}\n\n/** Excel's hard cap on rows (2^20). */\nconst MAX_ROW = 1_048_576;\n/** Excel's hard cap on columns — 'XFD'. */\nconst MAX_COL = 16_384;\n\nconst LETTER_RE = /^[A-Za-z]+$/;\nconst ADDRESS_RE = /^([A-Za-z]+)(\\d+)$/;\nconst SHEET_PREFIX_RE = /^(?:'([^']*)'|([^'!]+))!/;\nconst CELL_REF_RE = /^\\$?([A-Za-z]+)\\$?(\\d+)$/;\n\nconst colLetterToNumberCache = new Map<string, number>();\nconst colNumberToLetterCache = new Map<number, string>();\nconst decodeAddressCache = new Map<string, Decoded>();\n\n/** 'A'->1, 'Z'->26, 'AA'->27. Throws {@link InvalidAddressError} on non-letters. */\nexport function colLetterToNumber(letter: string): number {\n const cached = colLetterToNumberCache.get(letter);\n if (cached !== undefined) return cached;\n\n if (!LETTER_RE.test(letter)) {\n throw new InvalidAddressError(letter);\n }\n\n const upper = letter.toUpperCase();\n let col = 0;\n for (let i = 0; i < upper.length; i++) {\n col = col * 26 + (upper.charCodeAt(i) - 64);\n }\n\n colLetterToNumberCache.set(letter, col);\n return col;\n}\n\n/** 1->'A', 27->'AA'. */\nexport function colNumberToLetter(col: number): string {\n const cached = colNumberToLetterCache.get(col);\n if (cached !== undefined) return cached;\n\n if (!Number.isInteger(col) || col < 1) {\n throw new InvalidAddressError(String(col));\n }\n\n let n = col;\n let letters = \"\";\n while (n > 0) {\n const rem = (n - 1) % 26;\n letters = String.fromCharCode(65 + rem) + letters;\n n = Math.floor((n - 1) / 26);\n }\n\n colNumberToLetterCache.set(col, letters);\n return letters;\n}\n\n/** (row=1,col=2) -> 'B1'. */\nexport function encodeAddress(row: number, col: number): string {\n return `${colNumberToLetter(col)}${row}`;\n}\n\n/** 'B1' -> { row:1, col:2, address:'B1' }. Cached. */\nexport function decodeAddress(address: string): Decoded {\n const cached = decodeAddressCache.get(address);\n if (cached !== undefined) return cached;\n\n const match = ADDRESS_RE.exec(address);\n if (!match) {\n throw new InvalidAddressError(address);\n }\n\n const [, letters, digits] = match as unknown as [string, string, string];\n const col = colLetterToNumber(letters);\n const row = Number.parseInt(digits, 10);\n\n if (row < 1 || row > MAX_ROW || col < 1 || col > MAX_COL) {\n throw new InvalidAddressError(address);\n }\n\n const decoded: Decoded = { row, col, address: `${letters.toUpperCase()}${row}` };\n decodeAddressCache.set(address, decoded);\n return decoded;\n}\n\n/** Handles '$B$1', \"'Sheet 1'!B1\", Sheet1!B1, absolute/relative `$` markers. */\nexport function decodeEx(address: string): DecodedEx {\n let sheetName: string | undefined;\n let rest = address;\n\n const sheetMatch = SHEET_PREFIX_RE.exec(address);\n if (sheetMatch) {\n sheetName = sheetMatch[1] ?? sheetMatch[2];\n rest = address.slice(sheetMatch[0].length);\n }\n\n const cellMatch = CELL_REF_RE.exec(rest);\n if (!cellMatch) {\n throw new InvalidAddressError(address);\n }\n\n const [, letters, digits] = cellMatch as unknown as [string, string, string];\n const decoded = decodeAddress(`${letters}${digits}`);\n\n return {\n ...decoded,\n $col$row: `$${colNumberToLetter(decoded.col)}$${decoded.row}`,\n ...(sheetName !== undefined ? { sheetName } : {}),\n };\n}\n\n/** Throws {@link InvalidAddressError} if not a well-formed A1 cell address. */\nexport function validateAddress(address: string): void {\n decodeAddress(address);\n}\n","// Range: a normalized bounding box over cell addresses, plus set operations. Used by\n// Worksheet.dimensions and merge bookkeeping (see docs/STAGE-1.2-SPEC.md §2).\n\nimport { InvalidRangeError } from \"../errors.js\";\nimport { type Decoded, decodeEx, encodeAddress } from \"./col-cache.js\";\n\nexport type RangeSource =\n | string // 'A1:B2' or 'A1'\n | [string, string] // ['A1','B2']\n | [number, number, number, number] // [top,left,bottom,right]\n | Range\n | Decoded;\n\ninterface Box {\n top: number;\n left: number;\n bottom: number;\n right: number;\n sheetName?: string;\n}\n\nfunction isDecodedLike(value: unknown): value is Decoded {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !(value instanceof Range) &&\n typeof (value as Decoded).row === \"number\" &&\n typeof (value as Decoded).col === \"number\" &&\n typeof (value as Decoded).address === \"string\"\n );\n}\n\nfunction assertValidBox(box: Box, source: unknown): void {\n for (const n of [box.top, box.left, box.bottom, box.right]) {\n if (!Number.isInteger(n) || n < 1) {\n throw new InvalidRangeError(source);\n }\n }\n}\n\nfunction decodeTwoRefs(a: string, b: string, source: unknown): Box {\n try {\n const d1 = decodeEx(a);\n const d2 = decodeEx(b);\n return {\n top: d1.row,\n left: d1.col,\n bottom: d2.row,\n right: d2.col,\n sheetName: d1.sheetName ?? d2.sheetName,\n };\n } catch {\n throw new InvalidRangeError(source);\n }\n}\n\nfunction parseRangeString(source: string): Box {\n const parts = source.split(\":\");\n if (parts.length === 1) {\n return decodeTwoRefs(parts[0] as string, parts[0] as string, source);\n }\n if (parts.length === 2) {\n const [p0, p1] = parts as [string, string];\n if (p0 === \"\" || p1 === \"\") throw new InvalidRangeError(source);\n return decodeTwoRefs(p0, p1, source);\n }\n throw new InvalidRangeError(source);\n}\n\nfunction resolveSource(source: RangeSource): Box {\n if (source instanceof Range) {\n return {\n top: source.top,\n left: source.left,\n bottom: source.bottom,\n right: source.right,\n sheetName: source.sheetName,\n };\n }\n\n if (typeof source === \"string\") {\n return parseRangeString(source);\n }\n\n if (Array.isArray(source)) {\n if (source.length === 4 && source.every((n) => typeof n === \"number\")) {\n const [top, left, bottom, right] = source as [number, number, number, number];\n return { top, left, bottom, right };\n }\n if (source.length === 2 && source.every((s) => typeof s === \"string\")) {\n const [a, b] = source as [string, string];\n return decodeTwoRefs(a, b, source);\n }\n throw new InvalidRangeError(source);\n }\n\n if (isDecodedLike(source)) {\n return { top: source.row, left: source.col, bottom: source.row, right: source.col };\n }\n\n throw new InvalidRangeError(source);\n}\n\n/** A normalized bounding box (`top<=bottom`, `left<=right`) over 1-based cell addresses. */\nexport class Range {\n top: number;\n left: number;\n bottom: number;\n right: number;\n sheetName?: string;\n\n constructor(source?: RangeSource);\n constructor(top: number, left: number, bottom: number, right: number);\n constructor(sourceOrTop?: RangeSource | number, left?: number, bottom?: number, right?: number) {\n let box: Box;\n\n if (sourceOrTop === undefined) {\n box = { top: 1, left: 1, bottom: 1, right: 1 };\n } else if (typeof sourceOrTop === \"number\") {\n if (left === undefined || bottom === undefined || right === undefined) {\n throw new InvalidRangeError([sourceOrTop, left, bottom, right]);\n }\n box = { top: sourceOrTop, left, bottom, right };\n assertValidBox(box, [sourceOrTop, left, bottom, right]);\n } else {\n box = resolveSource(sourceOrTop);\n assertValidBox(box, sourceOrTop);\n }\n\n this.top = Math.min(box.top, box.bottom);\n this.bottom = Math.max(box.top, box.bottom);\n this.left = Math.min(box.left, box.right);\n this.right = Math.max(box.left, box.right);\n if (box.sheetName !== undefined) this.sheetName = box.sheetName;\n }\n\n /** Top-left address, e.g. 'A1'. */\n get tl(): string {\n return encodeAddress(this.top, this.left);\n }\n\n /** Bottom-right address, e.g. 'B2'. */\n get br(): string {\n return encodeAddress(this.bottom, this.right);\n }\n\n /** 'A1:B2'. */\n get range(): string {\n return `${this.tl}:${this.br}`;\n }\n\n /** Total cell count covered by the box. */\n get count(): number {\n return (this.bottom - this.top + 1) * (this.right - this.left + 1);\n }\n\n /** Grows the box to include the given box (union of bounds). */\n expand(top: number, left: number, bottom: number, right: number): void {\n this.top = Math.min(this.top, top);\n this.left = Math.min(this.left, left);\n this.bottom = Math.max(this.bottom, bottom);\n this.right = Math.max(this.right, right);\n }\n\n /** Whether the given address falls within this box. */\n contains(address: string): boolean {\n const d = decodeEx(address);\n return d.row >= this.top && d.row <= this.bottom && d.col >= this.left && d.col <= this.right;\n }\n\n /** Whether this box overlaps another box. */\n intersects(other: Range): boolean {\n return (\n this.left <= other.right &&\n other.left <= this.right &&\n this.top <= other.bottom &&\n other.top <= this.bottom\n );\n }\n\n /** Visits every address in the box, row-major (row-by-row, left-to-right within a row). */\n forEachAddress(cb: (address: string, row: number, col: number) => void): void {\n for (let row = this.top; row <= this.bottom; row++) {\n for (let col = this.left; col <= this.right; col++) {\n cb(encodeAddress(row, col), row, col);\n }\n }\n }\n}\n","// Column: a projection over cells, not a container (docs/API-AUDIT.md §3) — it has no cell\n// storage of its own; `eachCell`/`values` reach cells via the worksheet host's rows. Style\n// setters fan out through `eachCell`. `toModel`/`fromModel` run-length-compress adjacent columns\n// sharing the same OOXML-relevant attributes (width/hidden/outlineLevel/style) into `<col min\n// max>` ranges — `key`/`header` are pure in-memory conveniences with no `<col>` representation,\n// so they're deliberately excluded from that comparison and from `ColumnRange`.\n\nimport { colNumberToLetter } from \"../address/index.js\";\nimport type { Cell } from \"./cell.js\";\nimport type { CellValue } from \"./cell-value.js\";\nimport type { Alignment, Borders, Fill, Font, Protection, Style } from \"./style.js\";\nimport type { WorksheetHost } from \"./worksheet-host.js\";\n\nexport const DEFAULT_COLUMN_WIDTH = 9;\n\nexport interface ColumnDefn {\n key?: string;\n header?: string | string[];\n width?: number;\n hidden?: boolean;\n outlineLevel?: number;\n style?: Style;\n}\n\n/** Run-length range as compressed by `Column.toModel` — OOXML `<col min max .../>` attributes only. */\nexport interface ColumnRange {\n min: number;\n max: number;\n width?: number;\n hidden?: boolean;\n outlineLevel?: number;\n style?: Style;\n}\n\ntype EachCellCb = (cell: Cell, rowNumber: number) => void;\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\" || a === null || b === null) return false;\n const aKeys = Object.keys(a as object);\n const bKeys = Object.keys(b as object);\n if (aKeys.length !== bKeys.length) return false;\n return aKeys.every((key) =>\n deepEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key]),\n );\n}\n\nexport class Column {\n key?: string;\n width?: number;\n hidden = false;\n outlineLevel = 0;\n\n private _header: string | string[] | undefined;\n private _style: Style = {};\n\n constructor(\n private readonly host: WorksheetHost,\n public readonly number: number,\n defn?: Partial<ColumnDefn> | false,\n ) {\n if (defn) {\n if (defn.key !== undefined) this.key = defn.key;\n if (defn.width !== undefined) this.width = defn.width;\n if (defn.hidden !== undefined) this.hidden = defn.hidden;\n if (defn.outlineLevel !== undefined) this.outlineLevel = defn.outlineLevel;\n if (defn.style !== undefined) this._style = defn.style;\n if (defn.header !== undefined) this.header = defn.header;\n }\n }\n\n get letter(): string {\n return colNumberToLetter(this.number);\n }\n\n get collapsed(): boolean {\n return this.outlineLevel > this.host.properties.outlineLevelCol;\n }\n\n get isCustomWidth(): boolean {\n return this.width !== undefined && this.width !== DEFAULT_COLUMN_WIDTH;\n }\n\n get isDefault(): boolean {\n return (\n !this.isCustomWidth &&\n !this.hidden &&\n this.outlineLevel === 0 &&\n this.key === undefined &&\n this._header === undefined &&\n Object.keys(this._style).length === 0\n );\n }\n\n get header(): string | string[] | undefined {\n return this._header;\n }\n\n /** Writes the header text(s) into this column's top cell(s): row 1 for a string, rows 1..N\n * for a string array (SPEC §6 — \"header assignment writes the top row cells' values\"). */\n set header(h: string | string[] | undefined) {\n this._header = h;\n if (h === undefined) return;\n const lines = Array.isArray(h) ? h : [h];\n lines.forEach((text, i) => {\n this.host.getRow(i + 1).getCell(this.number).value = text;\n });\n }\n\n get values(): CellValue[] {\n const result: CellValue[] = [];\n this.host.eachRow((row, n) => {\n const cell = row.findCell(this.number);\n if (cell) result[n] = cell.value;\n });\n return result;\n }\n\n set values(vals: CellValue[]) {\n vals.forEach((val, i) => {\n if (i === 0 || val === undefined) return;\n this.host.getRow(i).getCell(this.number).value = val;\n });\n }\n\n eachCell(cb: EachCellCb): void;\n eachCell(opts: { includeEmpty: boolean }, cb: EachCellCb): void;\n eachCell(optsOrCb: { includeEmpty: boolean } | EachCellCb, maybeCb?: EachCellCb): void {\n const includeEmpty = typeof optsOrCb === \"object\" ? optsOrCb.includeEmpty : false;\n const cb = typeof optsOrCb === \"function\" ? optsOrCb : (maybeCb as EachCellCb);\n\n this.host.eachRow({ includeEmpty }, (row, n) => {\n const cell = includeEmpty ? row.getCell(this.number) : row.findCell(this.number);\n if (cell) cb(cell, n);\n });\n }\n\n private applyToCells(fn: (cell: Cell) => void): void {\n this.eachCell(fn);\n }\n\n get style(): Style {\n return this._style;\n }\n\n set style(s: Style) {\n this._style = s;\n this.applyToCells((cell) => {\n cell.style = s;\n });\n }\n\n get numFmt(): string | undefined {\n return this._style.numFmt;\n }\n\n set numFmt(v: string | undefined) {\n this._style = { ...this._style, numFmt: v };\n this.applyToCells((cell) => {\n cell.numFmt = v;\n });\n }\n\n get font(): Font | undefined {\n return this._style.font;\n }\n\n set font(v: Font | undefined) {\n this._style = { ...this._style, font: v };\n this.applyToCells((cell) => {\n cell.font = v;\n });\n }\n\n get alignment(): Alignment | undefined {\n return this._style.alignment;\n }\n\n set alignment(v: Alignment | undefined) {\n this._style = { ...this._style, alignment: v };\n this.applyToCells((cell) => {\n cell.alignment = v;\n });\n }\n\n get border(): Borders | undefined {\n return this._style.border;\n }\n\n set border(v: Borders | undefined) {\n this._style = { ...this._style, border: v };\n this.applyToCells((cell) => {\n cell.border = v;\n });\n }\n\n get fill(): Fill | undefined {\n return this._style.fill;\n }\n\n set fill(v: Fill | undefined) {\n this._style = { ...this._style, fill: v };\n this.applyToCells((cell) => {\n cell.fill = v;\n });\n }\n\n get protection(): Protection | undefined {\n return this._style.protection;\n }\n\n set protection(v: Protection | undefined) {\n this._style = { ...this._style, protection: v };\n this.applyToCells((cell) => {\n cell.protection = v;\n });\n }\n\n get defn(): ColumnDefn {\n const d: ColumnDefn = {};\n if (this.key !== undefined) d.key = this.key;\n if (this._header !== undefined) d.header = this._header;\n if (this.width !== undefined) d.width = this.width;\n if (this.hidden) d.hidden = true;\n if (this.outlineLevel !== 0) d.outlineLevel = this.outlineLevel;\n if (Object.keys(this._style).length > 0) d.style = this._style;\n return d;\n }\n\n set defn(d: ColumnDefn) {\n this.key = d.key;\n this.width = d.width;\n this.hidden = d.hidden ?? false;\n this.outlineLevel = d.outlineLevel ?? 0;\n this._style = d.style ?? {};\n this.header = d.header;\n }\n\n /** Whether two columns share the same OOXML-relevant attributes (used to compress runs). */\n equivalentTo(other: Column): boolean {\n return (\n this.width === other.width &&\n this.hidden === other.hidden &&\n this.outlineLevel === other.outlineLevel &&\n deepEqual(this._style, other._style)\n );\n }\n\n private static rangeOf(start: Column, end: Column): ColumnRange {\n const range: ColumnRange = { min: start.number, max: end.number };\n if (start.width !== undefined) range.width = start.width;\n if (start.hidden) range.hidden = true;\n if (start.outlineLevel !== 0) range.outlineLevel = start.outlineLevel;\n if (Object.keys(start._style).length > 0) range.style = start._style;\n return range;\n }\n\n /** Run-length compress an array of Columns into `<col min max>` ranges. */\n static toModel(columns: Column[]): ColumnRange[] | undefined {\n if (columns.length === 0) return undefined;\n\n const sorted = [...columns].sort((a, b) => a.number - b.number);\n const ranges: ColumnRange[] = [];\n let start = sorted[0] as Column;\n let prev = start;\n\n for (let i = 1; i < sorted.length; i++) {\n const col = sorted[i] as Column;\n if (col.number === prev.number + 1 && col.equivalentTo(prev)) {\n prev = col;\n continue;\n }\n ranges.push(Column.rangeOf(start, prev));\n start = col;\n prev = col;\n }\n ranges.push(Column.rangeOf(start, prev));\n return ranges;\n }\n\n /** Expands `<col min max>` ranges back into individual Columns. */\n static fromModel(host: WorksheetHost, cols: ColumnRange[]): Column[] | null {\n if (cols.length === 0) return null;\n\n const columns: Column[] = [];\n for (const range of cols) {\n for (let n = range.min; n <= range.max; n++) {\n columns.push(\n new Column(host, n, {\n width: range.width,\n hidden: range.hidden,\n outlineLevel: range.outlineLevel,\n style: range.style,\n }),\n );\n }\n }\n return columns;\n }\n}\n","// Row: a sparse, 1-indexed collection of Cells. Owns cell creation (the one runtime dependency\n// among these modules: Row -> Cell), values get/set in all three RowValues forms, style fan-out\n// to already-existing cells (docs/API-AUDIT.md §3's `_applyStyle`), and splice.\n\nimport { colLetterToNumber, decodeAddress, encodeAddress } from \"../address/index.js\";\nimport { InvalidRowNumberError } from \"../errors.js\";\nimport { Cell, type CellModel } from \"./cell.js\";\nimport type { CellValue } from \"./cell-value.js\";\nimport { CellType } from \"./enums.js\";\nimport type { Alignment, Borders, Fill, Font, Protection, Style } from \"./style.js\";\nimport type { RowValues } from \"./types.js\";\nimport type { WorksheetHost } from \"./worksheet-host.js\";\n\nexport interface RowModel {\n number: number;\n cells: CellModel[];\n height?: number;\n hidden?: boolean;\n outlineLevel?: number;\n style?: Style;\n}\n\ntype EachCellCb = (cell: Cell, colNumber: number) => void;\n\nexport class Row {\n height?: number;\n hidden = false;\n outlineLevel = 0;\n\n /** Sparse, 1-indexed by column number; index 0 is never assigned. */\n private _cells: Cell[] = [];\n private _style: Style = {};\n\n constructor(\n public readonly worksheet: WorksheetHost,\n public readonly number: number,\n ) {}\n\n get collapsed(): boolean {\n return this.outlineLevel > this.worksheet.properties.outlineLevelRow;\n }\n\n private resolveColNumber(col: number | string): number {\n if (typeof col === \"number\") return col;\n const byKey = this.worksheet.getColumnKey(col);\n if (byKey) return byKey.number;\n return colLetterToNumber(col);\n }\n\n getCell(col: number | string): Cell {\n const colNumber = this.resolveColNumber(col);\n const existing = this._cells[colNumber];\n if (existing) return existing;\n\n const column = this.worksheet.getColumn(colNumber);\n const cell = new Cell(this, column, encodeAddress(this.number, colNumber));\n this._cells[colNumber] = cell;\n return cell;\n }\n\n findCell(col: number): Cell | undefined {\n return this._cells[col];\n }\n\n eachCell(cb: EachCellCb): void;\n eachCell(opts: { includeEmpty: boolean }, cb: EachCellCb): void;\n eachCell(optsOrCb: { includeEmpty: boolean } | EachCellCb, maybeCb?: EachCellCb): void {\n const includeEmpty = typeof optsOrCb === \"object\" ? optsOrCb.includeEmpty : false;\n const cb = typeof optsOrCb === \"function\" ? optsOrCb : (maybeCb as EachCellCb);\n\n if (includeEmpty) {\n const max = this._cells.length - 1;\n for (let col = 1; col <= max; col++) {\n cb(this.getCell(col), col);\n }\n } else {\n this._cells.forEach((cell, col) => {\n cb(cell, col);\n });\n }\n }\n\n get hasValues(): boolean {\n return this._cells.some((cell) => cell !== undefined && cell.type !== CellType.Null);\n }\n\n get cellCount(): number {\n return Math.max(this._cells.length - 1, 0);\n }\n\n get actualCellCount(): number {\n let count = 0;\n for (const cell of this._cells) if (cell !== undefined) count++;\n return count;\n }\n\n get dimensions(): { min: number; max: number } | null {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n this._cells.forEach((_cell, col) => {\n if (col < min) min = col;\n if (col > max) max = col;\n });\n return min === Number.POSITIVE_INFINITY ? null : { min, max };\n }\n\n get values(): RowValues {\n const arr: CellValue[] = [];\n this._cells.forEach((cell, col) => {\n arr[col] = cell.value;\n });\n return arr;\n }\n\n set values(v: RowValues) {\n this._cells = [];\n if (v === undefined || v === null) return;\n\n if (Array.isArray(v)) {\n const offset = v[0] !== undefined ? 1 : 0;\n v.forEach((val, index) => {\n if (val === undefined) return;\n const col = index + offset;\n if (col < 1) return;\n this.getCell(col).value = val;\n });\n return;\n }\n\n for (const [key, val] of Object.entries(v)) {\n this.getCell(key).value = val;\n }\n }\n\n splice(start: number, count: number, ...inserts: CellValue[]): void {\n const currentMax = this._cells.length - 1;\n const insertCount = inserts.length;\n\n const tail: Array<{ value: CellValue; style: Style } | undefined> = [];\n for (let col = start + count; col <= currentMax; col++) {\n const cell = this._cells[col];\n tail[col - (start + count)] = cell ? { value: cell.value, style: cell.style } : undefined;\n }\n\n this._cells.length = Math.min(this._cells.length, start);\n\n inserts.forEach((val, i) => {\n this.getCell(start + i).value = val;\n });\n\n tail.forEach((entry, i) => {\n if (!entry) return;\n const cell = this.getCell(start + insertCount + i);\n cell.value = entry.value;\n cell.style = entry.style;\n });\n }\n\n private applyToCells(fn: (cell: Cell) => void): void {\n this._cells.forEach((cell) => {\n fn(cell);\n });\n }\n\n get style(): Style {\n return this._style;\n }\n\n set style(s: Style) {\n this._style = s;\n this.applyToCells((cell) => {\n cell.style = s;\n });\n }\n\n get numFmt(): string | undefined {\n return this._style.numFmt;\n }\n\n set numFmt(v: string | undefined) {\n this._style = { ...this._style, numFmt: v };\n this.applyToCells((cell) => {\n cell.numFmt = v;\n });\n }\n\n get font(): Font | undefined {\n return this._style.font;\n }\n\n set font(v: Font | undefined) {\n this._style = { ...this._style, font: v };\n this.applyToCells((cell) => {\n cell.font = v;\n });\n }\n\n get alignment(): Alignment | undefined {\n return this._style.alignment;\n }\n\n set alignment(v: Alignment | undefined) {\n this._style = { ...this._style, alignment: v };\n this.applyToCells((cell) => {\n cell.alignment = v;\n });\n }\n\n get border(): Borders | undefined {\n return this._style.border;\n }\n\n set border(v: Borders | undefined) {\n this._style = { ...this._style, border: v };\n this.applyToCells((cell) => {\n cell.border = v;\n });\n }\n\n get fill(): Fill | undefined {\n return this._style.fill;\n }\n\n set fill(v: Fill | undefined) {\n this._style = { ...this._style, fill: v };\n this.applyToCells((cell) => {\n cell.fill = v;\n });\n }\n\n get protection(): Protection | undefined {\n return this._style.protection;\n }\n\n set protection(v: Protection | undefined) {\n this._style = { ...this._style, protection: v };\n this.applyToCells((cell) => {\n cell.protection = v;\n });\n }\n\n get model(): RowModel {\n const cells: CellModel[] = [];\n this._cells.forEach((cell) => {\n cells.push(cell.model);\n });\n\n const m: RowModel = { number: this.number, cells };\n if (this.height !== undefined) m.height = this.height;\n if (this.hidden) m.hidden = true;\n if (this.outlineLevel !== 0) m.outlineLevel = this.outlineLevel;\n if (Object.keys(this._style).length > 0) m.style = this._style;\n return m;\n }\n\n set model(m: RowModel) {\n if (m.number !== this.number) {\n throw new InvalidRowNumberError(this.number, m.number);\n }\n this._cells = [];\n this.height = m.height;\n this.hidden = m.hidden ?? false;\n this.outlineLevel = m.outlineLevel ?? 0;\n this._style = m.style ?? {};\n\n for (const cellModel of m.cells) {\n const col = decodeAddress(cellModel.address).col;\n this.getCell(col).model = cellModel;\n }\n }\n}\n","// Worksheet: the concrete WorksheetHost. Owns rows (a 1-based Map), columns (a Map plus a\n// key->column index), and merge bookkeeping (a Map<masterAddress, Range>). Rows/Columns create\n// their own cells; the Worksheet coordinates cross-cell concerns — merges, dimensions, and the\n// row/column shifting in spliceRows/spliceColumns (docs/API-AUDIT.md §2/§5, the trickiest part).\n//\n// `Workbook` is a type-only import (back-reference only): Worksheet never constructs a Workbook, so\n// this carries no runtime dependency and cannot cycle with workbook.ts's `import { Worksheet }`.\n\nimport { colLetterToNumber, decodeAddress, Range, type RangeSource } from \"../address/index.js\";\nimport {\n DuplicateWorksheetNameError,\n InvalidRangeError,\n InvalidWorksheetNameError,\n MergeConflictError,\n ReservedWorksheetNameError,\n WorksheetNameTooLongError,\n} from \"../errors.js\";\nimport type { Cell } from \"./cell.js\";\nimport type { CellValue } from \"./cell-value.js\";\nimport { Column, type ColumnDefn, type ColumnRange } from \"./column.js\";\nimport { CellType } from \"./enums.js\";\nimport { Row, type RowModel } from \"./row.js\";\nimport type { Color, Style } from \"./style.js\";\nimport type { RowValues } from \"./types.js\";\nimport type { Workbook } from \"./workbook.js\";\nimport type { WorksheetHost } from \"./worksheet-host.js\";\n\n/** Sheet properties. `outlineLevelCol`/`outlineLevelRow` back the `collapsed` derivation on\n * Column/Row; the rest is plain round-tripped data. */\nexport interface WorksheetProperties {\n tabColor?: Color;\n outlineLevelCol: number;\n outlineLevelRow: number;\n defaultRowHeight: number;\n defaultColWidth?: number;\n dyDescent: number;\n showGridLines?: boolean;\n [key: string]: unknown;\n}\n\n/** Freeze/split panes, zoom, gridlines — stored as plain data (round-trips through the model). */\nexport interface WorksheetView {\n state?: \"normal\" | \"frozen\" | \"split\";\n showGridLines?: boolean;\n zoomScale?: number;\n [key: string]: unknown;\n}\n\n/** Options accepted by `Workbook.addWorksheet`. */\nexport interface AddWorksheetOptions {\n state: \"visible\" | \"hidden\" | \"veryHidden\";\n properties: Partial<WorksheetProperties>;\n views: WorksheetView[];\n pageSetup: unknown;\n headerFooter: unknown;\n}\n\n/** Replaces ExcelJS's cryptic `'i' | 'o' | 'i+' | 'o+' | 'n'` style DSL (API-AUDIT §2). */\nexport type RowInheritOption =\n | { inheritFrom?: \"above\" | \"below\"; includeEmpty?: boolean }\n | undefined;\n\n/** The serializable snapshot of a worksheet. */\nexport interface WorksheetModel {\n id: number;\n name: string;\n orderNo: number;\n state: \"visible\" | \"hidden\" | \"veryHidden\";\n properties: WorksheetProperties;\n views: WorksheetView[];\n columns?: ColumnRange[];\n rows: RowModel[];\n merges: string[];\n pageSetup?: unknown;\n headerFooter?: unknown;\n}\n\ntype EachRowCb = (row: Row, n: number) => void;\ntype RowData = CellValue[] | Record<string, CellValue>;\n\n/** Captured value+style of a row's cells, used to relocate a row during a splice/duplicate. */\ninterface RowSnapshot {\n height?: number;\n hidden: boolean;\n outlineLevel: number;\n style: Style;\n cells: Array<{ col: number; value: CellValue; style: Style }>;\n}\n\nconst ILLEGAL_NAME_CHARS = /[*?:\\\\/[\\]]/;\n\n/**\n * Format validation shared by the `name` setter and `Workbook.addWorksheet` (which validates before\n * a Worksheet exists to own the setter). Duplicate detection needs the workbook and is done by the\n * caller. Not part of the public barrel.\n */\nexport function validateWorksheetNameFormat(name: string): void {\n if (name.length === 0) throw new InvalidWorksheetNameError(name, \"empty\");\n if (name.length > WorksheetNameTooLongError.MAX_LENGTH) throw new WorksheetNameTooLongError(name);\n if (ILLEGAL_NAME_CHARS.test(name))\n throw new InvalidWorksheetNameError(name, \"illegal-characters\");\n if (name.startsWith(\"'\") || name.endsWith(\"'\")) {\n throw new InvalidWorksheetNameError(name, \"edge-quote\");\n }\n if (name.toLowerCase() === \"history\") throw new ReservedWorksheetNameError(name);\n}\n\n/** Normalizes the several `mergeCells`/`unMergeCells` argument forms into a single `Range`. */\nfunction normalizeMergeArgs(cells: unknown[]): Range {\n if (cells.length === 1) return new Range(cells[0] as RangeSource);\n if (cells.length === 2 && typeof cells[0] === \"string\" && typeof cells[1] === \"string\") {\n return new Range([cells[0], cells[1]]);\n }\n if (cells.length === 4 && cells.every((c) => typeof c === \"number\")) {\n return new Range(\n cells[0] as number,\n cells[1] as number,\n cells[2] as number,\n cells[3] as number,\n );\n }\n throw new InvalidRangeError(cells);\n}\n\nexport class Worksheet implements WorksheetHost {\n orderNo: number;\n state: \"visible\" | \"hidden\" | \"veryHidden\" = \"visible\";\n readonly workbook: Workbook;\n properties: WorksheetProperties;\n views: WorksheetView[] = [];\n pageSetup?: unknown;\n headerFooter?: unknown;\n\n private _id: number;\n private _name: string;\n\n private readonly _rows = new Map<number, Row>();\n private readonly _columns = new Map<number, Column>();\n private readonly _columnsByKey = new Map<string, Column>();\n /** Active merge regions keyed by their master (top-left) cell address. */\n private readonly _merges = new Map<string, Range>();\n\n constructor(workbook: Workbook, id: number, name: string, orderNo: number) {\n this.workbook = workbook;\n this._id = id;\n this._name = name;\n this.orderNo = orderNo;\n this.properties = {\n outlineLevelCol: 0,\n outlineLevelRow: 0,\n defaultRowHeight: 15,\n dyDescent: 55,\n };\n }\n\n // --- identity ---------------------------------------------------------------------------------\n\n get id(): number {\n return this._id;\n }\n\n get name(): string {\n return this._name;\n }\n\n set name(value: string) {\n validateWorksheetNameFormat(value);\n const lower = value.toLowerCase();\n for (const ws of this.workbook.worksheets) {\n if (ws !== this && ws.name.toLowerCase() === lower) {\n throw new DuplicateWorksheetNameError(value);\n }\n }\n this._name = value;\n }\n\n // --- rows -------------------------------------------------------------------------------------\n\n getRow(row: number): Row {\n let r = this._rows.get(row);\n if (!r) {\n r = new Row(this, row);\n this._rows.set(row, r);\n }\n return r;\n }\n\n getRows(start: number, length: number): Row[] | undefined {\n if (length < 1) return undefined;\n const rows: Row[] = [];\n for (let i = 0; i < length; i++) rows.push(this.getRow(start + i));\n return rows;\n }\n\n findRow(row: number): Row | undefined {\n return this._rows.get(row);\n }\n\n addRow(data: RowData, options?: RowInheritOption): Row {\n const row = this.getRow(this.rowCount + 1);\n row.values = data as RowValues;\n this.applyInheritance(row, options);\n return row;\n }\n\n addRows(rows: RowData[], options?: RowInheritOption): Row[] {\n return rows.map((data) => this.addRow(data, options));\n }\n\n insertRow(pos: number, value: RowData, options?: RowInheritOption): Row {\n this.spliceRows(pos, 0, value);\n const row = this.getRow(pos);\n this.applyInheritance(row, options);\n return row;\n }\n\n private applyInheritance(row: Row, options: RowInheritOption): void {\n if (!options?.inheritFrom) return;\n const sourceNumber = options.inheritFrom === \"above\" ? row.number - 1 : row.number + 1;\n const source = this._rows.get(sourceNumber);\n if (!source) return;\n row.style = source.style;\n source.eachCell({ includeEmpty: options.includeEmpty ?? false }, (cell, col) => {\n row.getCell(col).style = cell.style;\n });\n }\n\n duplicateRow(rowNum: number, count: number, insert = false): void {\n const snapshot = this.snapshotRow(this.getRow(rowNum));\n if (insert) {\n const blanks: RowData[] = Array.from({ length: count }, () => [] as CellValue[]);\n this.spliceRows(rowNum + 1, 0, ...blanks);\n }\n for (let i = 1; i <= count; i++) this.restoreRow(rowNum + i, snapshot);\n }\n\n spliceRows(start: number, count: number, ...inserts: RowData[]): void {\n const delta = inserts.length - count;\n\n const oldMerges = [...this._merges.values()].map((r) => ({\n top: r.top,\n left: r.left,\n bottom: r.bottom,\n right: r.right,\n }));\n\n const snapshots = new Map<number, RowSnapshot>();\n for (const [num, row] of this._rows) snapshots.set(num, this.snapshotRow(row));\n\n this._rows.clear();\n this._merges.clear();\n\n for (const [num, snap] of snapshots) {\n if (num < start) {\n this.restoreRow(num, snap);\n } else if (num >= start + count) {\n this.restoreRow(num + delta, snap);\n }\n // rows in [start, start+count) are deleted.\n }\n\n inserts.forEach((values, i) => {\n this.getRow(start + i).values = values as RowValues;\n });\n\n // Re-anchor merges: those entirely below the removed region shift by `delta`, those entirely\n // above survive unchanged, and any that straddle the removed region are dropped.\n for (const m of oldMerges) {\n if (m.top >= start + count) {\n this.applyMerge(new Range(m.top + delta, m.left, m.bottom + delta, m.right));\n } else if (m.bottom < start) {\n this.applyMerge(new Range(m.top, m.left, m.bottom, m.right));\n }\n }\n }\n\n private snapshotRow(row: Row): RowSnapshot {\n const cells: RowSnapshot[\"cells\"] = [];\n row.eachCell((cell, col) => {\n cells.push({ col, value: cell.value, style: cell.style });\n });\n return {\n height: row.height,\n hidden: row.hidden,\n outlineLevel: row.outlineLevel,\n style: row.style,\n cells,\n };\n }\n\n private restoreRow(num: number, snap: RowSnapshot): void {\n const row = this.getRow(num);\n row.height = snap.height;\n row.hidden = snap.hidden;\n row.outlineLevel = snap.outlineLevel;\n row.style = snap.style;\n for (const c of snap.cells) {\n const cell = row.getCell(c.col);\n cell.value = c.value;\n cell.style = c.style;\n }\n }\n\n eachRow(cb: EachRowCb): void;\n eachRow(opts: { includeEmpty: boolean }, cb: EachRowCb): void;\n eachRow(optsOrCb: { includeEmpty: boolean } | EachRowCb, maybeCb?: EachRowCb): void {\n const includeEmpty = typeof optsOrCb === \"object\" ? optsOrCb.includeEmpty : false;\n const cb = typeof optsOrCb === \"function\" ? optsOrCb : (maybeCb as EachRowCb);\n\n if (includeEmpty) {\n const max = this.rowCount;\n for (let n = 1; n <= max; n++) cb(this.getRow(n), n);\n } else {\n const sorted = [...this._rows.entries()].sort((a, b) => a[0] - b[0]);\n for (const [n, row] of sorted) cb(row, n);\n }\n }\n\n getSheetValues(): RowValues[] {\n const result: RowValues[] = [];\n this.eachRow((row, n) => {\n result[n] = row.values;\n });\n return result;\n }\n\n get rowCount(): number {\n let max = 0;\n for (const n of this._rows.keys()) if (n > max) max = n;\n return max;\n }\n\n get actualRowCount(): number {\n let count = 0;\n for (const row of this._rows.values()) if (row.hasValues) count++;\n return count;\n }\n\n get lastRow(): Row | undefined {\n const rc = this.rowCount;\n return rc >= 1 ? this._rows.get(rc) : undefined;\n }\n\n // --- columns ----------------------------------------------------------------------------------\n\n get columns(): Column[] {\n const count = this.columnCount;\n const arr: Column[] = [];\n for (let n = 1; n <= count; n++) arr.push(this.getColumn(n));\n return arr;\n }\n\n set columns(defns: Partial<ColumnDefn>[]) {\n defns.forEach((defn, i) => {\n const col = this.getColumn(i + 1);\n col.defn = { ...col.defn, ...defn };\n if (defn.key !== undefined) this._columnsByKey.set(defn.key, col);\n });\n }\n\n getColumn(idOrKey: number | string): Column {\n if (typeof idOrKey === \"number\") return this.getOrCreateColumn(idOrKey);\n const byKey = this._columnsByKey.get(idOrKey);\n if (byKey) return byKey;\n return this.getOrCreateColumn(colLetterToNumber(idOrKey));\n }\n\n private getOrCreateColumn(n: number): Column {\n let c = this._columns.get(n);\n if (!c) {\n c = new Column(this, n);\n this._columns.set(n, c);\n }\n return c;\n }\n\n get columnCount(): number {\n let max = 0;\n for (const n of this._columns.keys()) if (n > max) max = n;\n this.eachRow((row) => {\n const d = row.dimensions;\n if (d && d.max > max) max = d.max;\n });\n return max;\n }\n\n get actualColumnCount(): number {\n const cols = new Set<number>();\n this.eachRow((row) => {\n row.eachCell((cell, col) => {\n if (cell.type !== CellType.Null) cols.add(col);\n });\n });\n return cols.size;\n }\n\n get lastColumn(): Column | undefined {\n const cc = this.columnCount;\n return cc >= 1 ? this.getColumn(cc) : undefined;\n }\n\n spliceColumns(start: number, count: number, ...inserts: CellValue[][]): void {\n const delta = inserts.length - count;\n\n this.eachRow((row) => {\n const rowInserts = inserts.map((colVals) => colVals[row.number] ?? null);\n row.splice(start, count, ...rowInserts);\n });\n\n // Shift stored column definitions to match the cell shift.\n const oldColumns = [...this._columns.entries()];\n this._columns.clear();\n this._columnsByKey.clear();\n for (const [n, col] of oldColumns) {\n let newNumber: number;\n if (n < start) newNumber = n;\n else if (n >= start + count) newNumber = n + delta;\n else continue; // deleted\n const moved = new Column(this, newNumber, col.defn);\n this._columns.set(newNumber, moved);\n if (moved.key !== undefined) this._columnsByKey.set(moved.key, moved);\n }\n\n // Re-anchor merges horizontally, mirroring spliceRows.\n const oldMerges = [...this._merges.values()].map((r) => ({\n top: r.top,\n left: r.left,\n bottom: r.bottom,\n right: r.right,\n }));\n this._merges.clear();\n for (const m of oldMerges) {\n if (m.left >= start + count) {\n this.applyMerge(new Range(m.top, m.left + delta, m.bottom, m.right + delta));\n } else if (m.right < start) {\n this.applyMerge(new Range(m.top, m.left, m.bottom, m.right));\n }\n }\n }\n\n // --- column keys ------------------------------------------------------------------------------\n\n getColumnKey(key: string): Column | undefined {\n return this._columnsByKey.get(key);\n }\n\n setColumnKey(key: string, column: Column): void {\n column.key = key;\n this._columnsByKey.set(key, column);\n }\n\n deleteColumnKey(key: string): void {\n const col = this._columnsByKey.get(key);\n if (col) col.key = undefined;\n this._columnsByKey.delete(key);\n }\n\n eachColumnKey(cb: (column: Column, key: string) => void): void {\n for (const [key, col] of this._columnsByKey) cb(col, key);\n }\n\n // --- cells ------------------------------------------------------------------------------------\n\n getCell(r: number | string, c?: number | string): Cell {\n if (c === undefined) {\n const d = decodeAddress(r as string);\n return this.getRow(d.row).getCell(d.col);\n }\n return this.getRow(r as number).getCell(c);\n }\n\n findCell(r: number | string, c?: number | string): Cell | undefined {\n let rowNum: number;\n let colNum: number;\n if (c === undefined) {\n const d = decodeAddress(r as string);\n rowNum = d.row;\n colNum = d.col;\n } else {\n rowNum = r as number;\n colNum = this.toColNumber(c);\n }\n const row = this._rows.get(rowNum);\n return row?.findCell(colNum);\n }\n\n private toColNumber(col: number | string): number {\n if (typeof col === \"number\") return col;\n const byKey = this._columnsByKey.get(col);\n if (byKey) return byKey.number;\n return colLetterToNumber(col);\n }\n\n // --- merges -----------------------------------------------------------------------------------\n\n mergeCells(...cells: unknown[]): void {\n const range = normalizeMergeArgs(cells);\n for (const existing of this._merges.values()) {\n if (range.intersects(existing)) throw new MergeConflictError(range.range);\n }\n this.applyMerge(range);\n }\n\n unMergeCells(...cells: unknown[]): void {\n const range = normalizeMergeArgs(cells);\n for (const [key, existing] of [...this._merges.entries()]) {\n if (!range.intersects(existing)) continue;\n existing.forEachAddress((_addr, row, col) => {\n if (row === existing.top && col === existing.left) return; // master keeps its value\n this.getRow(row).getCell(col).unmerge();\n });\n this._merges.delete(key);\n }\n }\n\n /** Links the slave cells of `range` to its top-left master and records the region. */\n private applyMerge(range: Range): void {\n const master = this.getCell(range.top, range.left);\n range.forEachAddress((_addr, row, col) => {\n if (row === range.top && col === range.left) return;\n this.getRow(row).getCell(col).merge(master);\n });\n this._merges.set(master.address, range);\n }\n\n get hasMerges(): boolean {\n return this._merges.size > 0;\n }\n\n get dimensions(): Range {\n let top = Number.POSITIVE_INFINITY;\n let left = Number.POSITIVE_INFINITY;\n let bottom = Number.NEGATIVE_INFINITY;\n let right = Number.NEGATIVE_INFINITY;\n this.eachRow((row, n) => {\n const d = row.dimensions;\n if (!d) return;\n if (n < top) top = n;\n if (n > bottom) bottom = n;\n if (d.min < left) left = d.min;\n if (d.max > right) right = d.max;\n });\n if (top === Number.POSITIVE_INFINITY) return new Range(1, 1, 1, 1);\n return new Range(top, left, bottom, right);\n }\n\n // --- model ------------------------------------------------------------------------------------\n\n get model(): WorksheetModel {\n const rows = [...this._rows.entries()].sort((a, b) => a[0] - b[0]).map(([, row]) => row.model);\n const columns = Column.toModel([...this._columns.values()]);\n\n const m: WorksheetModel = {\n id: this._id,\n name: this._name,\n orderNo: this.orderNo,\n state: this.state,\n properties: { ...this.properties },\n views: this.views.map((v) => ({ ...v })),\n rows,\n merges: [...this._merges.values()].map((r) => r.range),\n };\n if (columns) m.columns = columns;\n if (this.pageSetup !== undefined) m.pageSetup = this.pageSetup;\n if (this.headerFooter !== undefined) m.headerFooter = this.headerFooter;\n return m;\n }\n\n set model(m: WorksheetModel) {\n this._id = m.id;\n this._name = m.name;\n this.orderNo = m.orderNo;\n this.state = m.state;\n this.properties = { ...m.properties };\n this.views = m.views.map((v) => ({ ...v }));\n this.pageSetup = m.pageSetup;\n this.headerFooter = m.headerFooter;\n\n this._rows.clear();\n this._columns.clear();\n this._columnsByKey.clear();\n this._merges.clear();\n\n if (m.columns) {\n const cols = Column.fromModel(this, m.columns) ?? [];\n for (const col of cols) {\n this._columns.set(col.number, col);\n if (col.key !== undefined) this._columnsByKey.set(col.key, col);\n }\n }\n\n for (const rowModel of m.rows) {\n this.getRow(rowModel.number).model = rowModel;\n }\n\n for (const mergeStr of m.merges) this.applyMerge(new Range(mergeStr));\n }\n}\n","// Workbook: the root aggregate. Sheets are held in an insertion-ordered array plus a `Map<id,\n// Worksheet>` index, so `worksheets` is O(n) with no 1-based sparse hole (docs/API-AUDIT.md §5).\n// `orderNo` is kept equal to the array index; the deprecated tabColor-as-string branch is dropped.\n\nimport { DuplicateWorksheetNameError } from \"../errors.js\";\nimport {\n type AddWorksheetOptions,\n validateWorksheetNameFormat,\n Worksheet,\n type WorksheetModel,\n} from \"./worksheet.js\";\n\n/** Workbook-wide flags — notably the 1904 date system. */\nexport interface WorkbookProperties {\n date1904?: boolean;\n [key: string]: unknown;\n}\n\n/** Calculation chain flags (e.g. `fullCalcOnLoad`). */\nexport interface CalculationProperties {\n fullCalcOnLoad?: boolean;\n [key: string]: unknown;\n}\n\n/** Window layout / active-tab state — stored as plain data (round-trips through the model). */\nexport interface WorkbookView {\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n activeTab?: number;\n visibility?: string;\n [key: string]: unknown;\n}\n\n/** The serializable snapshot of a workbook. */\nexport interface WorkbookModel {\n creator?: string;\n lastModifiedBy?: string;\n created: Date;\n modified: Date;\n lastPrinted?: Date;\n title?: string;\n subject?: string;\n keywords?: string;\n category?: string;\n description?: string;\n company?: string;\n manager?: string;\n properties: WorkbookProperties;\n calcProperties: CalculationProperties;\n views: WorkbookView[];\n sheets: WorksheetModel[];\n nextId: number;\n}\n\nexport class Workbook {\n creator?: string;\n lastModifiedBy?: string;\n created: Date;\n modified: Date;\n lastPrinted?: Date;\n title?: string;\n subject?: string;\n keywords?: string;\n category?: string;\n description?: string;\n company?: string;\n manager?: string;\n\n properties: WorkbookProperties = {};\n calcProperties: CalculationProperties = {};\n views: WorkbookView[] = [];\n\n private readonly _byId = new Map<number, Worksheet>();\n private _sheets: Worksheet[] = [];\n private _nextId = 1;\n\n constructor() {\n const now = new Date();\n this.created = now;\n this.modified = now;\n }\n\n /** Ordered, O(n). A fresh copy so callers cannot mutate the backing order. */\n get worksheets(): Worksheet[] {\n return [...this._sheets];\n }\n\n addWorksheet(name?: string, options?: Partial<AddWorksheetOptions>): Worksheet {\n const resolvedName = name ?? this.uniqueSheetName();\n validateWorksheetNameFormat(resolvedName);\n const lower = resolvedName.toLowerCase();\n for (const ws of this._sheets) {\n if (ws.name.toLowerCase() === lower) throw new DuplicateWorksheetNameError(resolvedName);\n }\n\n const id = this._nextId++;\n const ws = new Worksheet(this, id, resolvedName, this._sheets.length);\n\n if (options) {\n if (options.state) ws.state = options.state;\n if (options.properties) ws.properties = { ...ws.properties, ...options.properties };\n if (options.views) ws.views = options.views;\n if (options.pageSetup !== undefined) ws.pageSetup = options.pageSetup;\n if (options.headerFooter !== undefined) ws.headerFooter = options.headerFooter;\n }\n\n this._byId.set(id, ws);\n this._sheets.push(ws);\n return ws;\n }\n\n private uniqueSheetName(): string {\n const taken = new Set(this._sheets.map((w) => w.name.toLowerCase()));\n let n = this._sheets.length + 1;\n let candidate = `Sheet${n}`;\n while (taken.has(candidate.toLowerCase())) {\n n++;\n candidate = `Sheet${n}`;\n }\n return candidate;\n }\n\n getWorksheet(idOrName?: number | string): Worksheet | undefined {\n if (idOrName === undefined) return this._sheets[0];\n if (typeof idOrName === \"number\") return this._byId.get(idOrName);\n return this._sheets.find((w) => w.name === idOrName);\n }\n\n removeWorksheet(idOrName: number | string): void {\n const ws =\n typeof idOrName === \"number\"\n ? this._byId.get(idOrName)\n : this._sheets.find((w) => w.name === idOrName);\n if (!ws) return;\n this._byId.delete(ws.id);\n this._sheets = this._sheets.filter((w) => w !== ws);\n this.reindex();\n }\n\n /** Keeps `orderNo` equal to array position after a removal. */\n private reindex(): void {\n this._sheets.forEach((w, i) => {\n w.orderNo = i;\n });\n }\n\n eachSheet(cb: (ws: Worksheet, id: number) => void): void {\n for (const ws of this._sheets) cb(ws, ws.id);\n }\n\n // --- model ------------------------------------------------------------------------------------\n\n get model(): WorkbookModel {\n const m: WorkbookModel = {\n created: this.created,\n modified: this.modified,\n properties: { ...this.properties },\n calcProperties: { ...this.calcProperties },\n views: this.views.map((v) => ({ ...v })),\n sheets: this._sheets.map((w) => w.model),\n nextId: this._nextId,\n };\n if (this.creator !== undefined) m.creator = this.creator;\n if (this.lastModifiedBy !== undefined) m.lastModifiedBy = this.lastModifiedBy;\n if (this.lastPrinted !== undefined) m.lastPrinted = this.lastPrinted;\n if (this.title !== undefined) m.title = this.title;\n if (this.subject !== undefined) m.subject = this.subject;\n if (this.keywords !== undefined) m.keywords = this.keywords;\n if (this.category !== undefined) m.category = this.category;\n if (this.description !== undefined) m.description = this.description;\n if (this.company !== undefined) m.company = this.company;\n if (this.manager !== undefined) m.manager = this.manager;\n return m;\n }\n\n set model(m: WorkbookModel) {\n this.creator = m.creator;\n this.lastModifiedBy = m.lastModifiedBy;\n this.created = m.created;\n this.modified = m.modified;\n this.lastPrinted = m.lastPrinted;\n this.title = m.title;\n this.subject = m.subject;\n this.keywords = m.keywords;\n this.category = m.category;\n this.description = m.description;\n this.company = m.company;\n this.manager = m.manager;\n this.properties = { ...m.properties };\n this.calcProperties = { ...m.calcProperties };\n this.views = m.views.map((v) => ({ ...v }));\n\n this._byId.clear();\n this._sheets = [];\n for (const sheetModel of m.sheets) {\n const ws = new Worksheet(this, sheetModel.id, sheetModel.name, sheetModel.orderNo);\n ws.model = sheetModel;\n this._byId.set(ws.id, ws);\n this._sheets.push(ws);\n }\n this._nextId = m.nextId;\n }\n}\n","// Excel serial-date <-> JS Date conversion (see docs/STAGE-1.3-SPEC.md §6, docs/OOXML-NOTES.md §8).\n// Self-contained: no dayjs. Excel stores dates as day serials, and we honor both epoch systems plus\n// the deliberate 1900 leap-year bug that Excel preserves for Lotus 1-2-3 compatibility.\n\nconst MS_PER_DAY = 86_400_000;\n\n/** 1900 date system: this UTC instant is serial 0, so 1899-12-31 + serial days => the date.\n * serial 1 = 1900-01-01, serial 59 = 1900-02-28. */\nconst EPOCH_1900 = Date.UTC(1899, 11, 31);\n\n/** 1904 date system: serial 0 = 1904-01-01 (Mac Excel's default). */\nconst EPOCH_1904 = Date.UTC(1904, 0, 1);\n\n/** Excel treats 1900 as a leap year, so serial 60 is the fictional 1900-02-29. Real dates on or after\n * 1900-03-01 are shifted one day up to make room for it; conversions bridge that gap here. */\nconst LEAP_BUG_SERIAL = 60;\n\n/** Convert a `Date` to its Excel day serial (fractional part carries the time of day). */\nexport function dateToSerial(d: Date, date1904 = false): number {\n if (date1904) {\n return (d.getTime() - EPOCH_1904) / MS_PER_DAY;\n }\n const raw = (d.getTime() - EPOCH_1900) / MS_PER_DAY;\n // Real dates from 1900-03-01 (raw 60) onward sit one serial higher because of the phantom 02-29.\n return raw >= LEAP_BUG_SERIAL ? raw + 1 : raw;\n}\n\n/** Convert an Excel day serial back to a `Date` (UTC-based instant). */\nexport function serialToDate(serial: number, date1904 = false): Date {\n if (date1904) {\n return new Date(EPOCH_1904 + serial * MS_PER_DAY);\n }\n // Undo the phantom-day shift for serials past the bug; serial 60 itself resolves to 1900-02-29,\n // which JS normalizes to 1900-03-01 (the same instant serial 61 also maps to).\n const adjusted = serial > LEAP_BUG_SERIAL ? serial - 1 : serial;\n return new Date(EPOCH_1900 + adjusted * MS_PER_DAY);\n}\n","// Shared OPC/OOXML constants (namespaces, content types, relationship-type URIs) used across the\n// part writers. These are the fixed identifiers from ECMA-376 / the Open Packaging Conventions —\n// clean-room, not copied from any implementation.\n\n/** XML namespaces. */\nexport const NS = {\n spreadsheetml: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\n relationships: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n contentTypes: \"http://schemas.openxmlformats.org/package/2006/content-types\",\n packageRels: \"http://schemas.openxmlformats.org/package/2006/relationships\",\n coreProps: \"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\",\n extProps: \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\",\n docPropsVt: \"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\",\n dc: \"http://purl.org/dc/elements/1.1/\",\n dcterms: \"http://purl.org/dc/terms/\",\n dcmitype: \"http://purl.org/dc/dcmitype/\",\n xsi: \"http://www.w3.org/2001/XMLSchema-instance\",\n} as const;\n\n/** Part content types (`[Content_Types].xml` overrides + the two defaults). */\nexport const CONTENT_TYPE = {\n rels: \"application/vnd.openxmlformats-package.relationships+xml\",\n xml: \"application/xml\",\n workbook: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n worksheet: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n styles: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n sharedStrings: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n theme: \"application/vnd.openxmlformats-officedocument.theme+xml\",\n coreProps: \"application/vnd.openxmlformats-package.core-properties+xml\",\n extProps: \"application/vnd.openxmlformats-officedocument.extended-properties+xml\",\n} as const;\n\n/** Relationship-type URIs (the `Type=` attribute on each `<Relationship>`). */\nexport const REL_TYPE = {\n officeDocument:\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n coreProps:\n \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n extProps:\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\",\n worksheet: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n styles: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n sharedStrings:\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n theme: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n hyperlink: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n} as const;\n\n/** Archive paths for the fixed (non-worksheet) parts. Worksheet paths are `xl/worksheets/sheetN.xml`. */\nexport const PART_PATH = {\n contentTypes: \"[Content_Types].xml\",\n rootRels: \"_rels/.rels\",\n coreProps: \"docProps/core.xml\",\n appProps: \"docProps/app.xml\",\n workbook: \"xl/workbook.xml\",\n workbookRels: \"xl/_rels/workbook.xml.rels\",\n styles: \"xl/styles.xml\",\n sharedStrings: \"xl/sharedStrings.xml\",\n theme: \"xl/theme/theme1.xml\",\n} as const;\n\n/** A resolved relationship-id assignment shared by workbook.xml and workbook.xml.rels so the\n * `r:id`s in the former always match the `Id`s in the latter. */\nexport interface WorkbookRel {\n rId: string;\n type: string;\n /** Target relative to `xl/` (e.g. `worksheets/sheet1.xml`). */\n target: string;\n}\n\n/** A single worksheet-level external relationship (e.g. a hyperlink). Its `rId` is local to the\n * worksheet's own `.rels` namespace and must match the `r:id` emitted in the sheet's `<hyperlinks>`. */\nexport interface WorksheetRel {\n rId: string;\n /** The link destination (e.g. `https://example.com`, `mailto:a@b.c`). */\n target: string;\n /** `TargetMode` attribute; external hyperlinks are always `\"External\"`. */\n mode: \"External\";\n}\n\n/** A worksheet's identity within the package: its position-derived file, its `r:id`, and model data. */\nexport interface SheetRel {\n rId: string;\n /** File name under `xl/worksheets/` (e.g. `sheet1.xml`). */\n fileName: string;\n /** `sheetId` attribute in workbook.xml (the model's stable worksheet id). */\n sheetId: number;\n name: string;\n state: \"visible\" | \"hidden\" | \"veryHidden\";\n}\n","// A tiny, non-validating pull parser for the OOXML reader (see docs/STAGE-2-SPEC.md §2). Hand-rolled\n// for the same reason xml-writer.ts is: fflate stays the only runtime dependency, so we scan strings\n// rather than pulling in a DOM/SAX library. Not a general XML engine — it targets the well-formed\n// subset Excel/LibreOffice/our own writer emit (no DTDs, no external entities).\n\n/** One token from the document in source order. Prefixed names are kept verbatim (\"r:id\",\n * \"cp:coreProperties\") — OOXML fixes its namespace prefixes, so literal matching is sufficient. */\nexport type XmlEvent =\n | { kind: \"open\"; name: string; attrs: Record<string, string>; selfClosing: boolean }\n | { kind: \"text\"; text: string }\n | { kind: \"close\"; name: string };\n\nconst NAMED_ENTITIES: Record<string, string> = {\n amp: \"&\",\n lt: \"<\",\n gt: \">\",\n quot: '\"',\n apos: \"'\",\n};\n\nconst ENTITY_RE = /&(#x[0-9a-fA-F]+|#[0-9]+|[a-zA-Z][a-zA-Z0-9]*);/g;\n\n/** Decodes the five named XML entities plus numeric `&#nn;`/`&#xhh;` references. Unknown entities are\n * left untouched (better a literal `&foo;` survive than we silently drop it). */\nfunction decodeEntities(s: string): string {\n if (!s.includes(\"&\")) return s;\n return s.replace(ENTITY_RE, (match, ent: string) => {\n if (ent.startsWith(\"#x\") || ent.startsWith(\"#X\")) {\n const code = Number.parseInt(ent.slice(2), 16);\n return Number.isFinite(code) ? String.fromCodePoint(code) : match;\n }\n if (ent.startsWith(\"#\")) {\n const code = Number.parseInt(ent.slice(1), 10);\n return Number.isFinite(code) ? String.fromCodePoint(code) : match;\n }\n const named = NAMED_ENTITIES[ent];\n return named !== undefined ? named : match;\n });\n}\n\nfunction isSpace(c: string | undefined): boolean {\n return c === \" \" || c === \"\\t\" || c === \"\\n\" || c === \"\\r\";\n}\n\n/** Finds the unquoted `>` that ends a tag starting at `start` (the char right after `<`). Attribute\n * values may legally contain a literal `>`, so quote state must be tracked while scanning. */\nfunction findTagEnd(xml: string, start: number): number {\n let i = start;\n let quote: string | undefined;\n while (i < xml.length) {\n const c = xml[i];\n if (quote) {\n if (c === quote) quote = undefined;\n } else if (c === '\"' || c === \"'\") {\n quote = c;\n } else if (c === \">\") {\n return i;\n }\n i++;\n }\n return xml.length;\n}\n\n/** Parses `name attr1=\"val1\" attr2='val2'` (the tag's inner content, `<`/`>`/trailing `/` stripped). */\nfunction parseOpenTag(inner: string): { name: string; attrs: Record<string, string> } {\n const len = inner.length;\n let i = 0;\n while (i < len && !isSpace(inner[i])) i++;\n const name = inner.slice(0, i);\n const attrs: Record<string, string> = {};\n\n while (i < len) {\n while (i < len && isSpace(inner[i])) i++;\n if (i >= len) break;\n let j = i;\n while (j < len && inner[j] !== \"=\" && !isSpace(inner[j])) j++;\n const attrName = inner.slice(i, j);\n if (!attrName) break;\n while (j < len && isSpace(inner[j])) j++;\n if (inner[j] === \"=\") {\n j++;\n while (j < len && isSpace(inner[j])) j++;\n const quote = inner[j];\n j++;\n const valStart = j;\n while (j < len && inner[j] !== quote) j++;\n attrs[attrName] = decodeEntities(inner.slice(valStart, j));\n j++; // skip closing quote\n i = j;\n } else {\n attrs[attrName] = \"\";\n i = j;\n }\n }\n\n return { name, attrs };\n}\n\n/** Streams events in document order. Skips the `<?xml …?>` declaration (and any other processing\n * instruction), `<!-- comments -->` and `<!DOCTYPE …>`-shaped declarations; emits `<![CDATA[…]]>`\n * content as literal text. Whitespace in text nodes is never trimmed or collapsed. */\nexport function* parseXml(xml: string): Generator<XmlEvent> {\n const len = xml.length;\n let i = 0;\n\n while (i < len) {\n if (xml[i] === \"<\") {\n if (xml.startsWith(\"<?\", i)) {\n const end = xml.indexOf(\"?>\", i + 2);\n i = end === -1 ? len : end + 2;\n continue;\n }\n if (xml.startsWith(\"<!--\", i)) {\n const end = xml.indexOf(\"-->\", i + 4);\n i = end === -1 ? len : end + 3;\n continue;\n }\n if (xml.startsWith(\"<![CDATA[\", i)) {\n const end = xml.indexOf(\"]]>\", i + 9);\n const text = end === -1 ? xml.slice(i + 9) : xml.slice(i + 9, end);\n i = end === -1 ? len : end + 3;\n if (text.length > 0) yield { kind: \"text\", text };\n continue;\n }\n if (xml.startsWith(\"<!\", i)) {\n const end = xml.indexOf(\">\", i + 2);\n i = end === -1 ? len : end + 1;\n continue;\n }\n if (xml[i + 1] === \"/\") {\n const end = xml.indexOf(\">\", i + 2);\n const name = xml.slice(i + 2, end === -1 ? len : end).trim();\n i = end === -1 ? len : end + 1;\n yield { kind: \"close\", name };\n continue;\n }\n\n const tagEnd = findTagEnd(xml, i + 1);\n const selfClosing = xml[tagEnd - 1] === \"/\";\n const inner = xml.slice(i + 1, selfClosing ? tagEnd - 1 : tagEnd);\n const { name, attrs } = parseOpenTag(inner);\n i = tagEnd === len ? len : tagEnd + 1;\n yield { kind: \"open\", name, attrs, selfClosing };\n continue;\n }\n\n const next = xml.indexOf(\"<\", i);\n const raw = next === -1 ? xml.slice(i) : xml.slice(i, next);\n i = next === -1 ? len : next;\n if (raw.length > 0) yield { kind: \"text\", text: decodeEntities(raw) };\n }\n}\n\n/** Strips a namespace prefix (`\"cp:coreProperties\"` → `\"coreProperties\"`) for the few comparisons that\n * must be prefix-agnostic. Most matching is literal — OOXML's prefixes are fixed by convention. */\nexport function localName(name: string): string {\n const idx = name.indexOf(\":\");\n return idx === -1 ? name : name.slice(idx + 1);\n}\n\n/** Convenience cursor over the event stream for recursive-descent readers. */\nexport interface XmlCursor {\n next(): XmlEvent | undefined;\n peek(): XmlEvent | undefined;\n /** Collects raw text content until the matching close of `name` (assumes its `open` was already\n * consumed). Only text events contribute; child markup is skipped over, not included. */\n textUntilClose(name: string): string;\n /** Invokes `onOpen` for each direct child element of the current open element (whose `open` was\n * already consumed by the caller), then consumes the container's own close. `onOpen` is responsible\n * for fully consuming its element (including any nested close) before returning, unless it is\n * self-closing. */\n eachChild(name: string, onOpen: (ev: Extract<XmlEvent, { kind: \"open\" }>) => void): void;\n}\n\n/** Builds a {@link XmlCursor} over `xml`. */\nexport function cursor(xml: string): XmlCursor {\n const gen = parseXml(xml);\n let lookahead: XmlEvent | undefined;\n let hasLookahead = false;\n\n function pull(): XmlEvent | undefined {\n const result = gen.next();\n return result.done ? undefined : result.value;\n }\n\n function next(): XmlEvent | undefined {\n if (hasLookahead) {\n hasLookahead = false;\n const ev = lookahead;\n lookahead = undefined;\n return ev;\n }\n return pull();\n }\n\n function peek(): XmlEvent | undefined {\n if (!hasLookahead) {\n lookahead = pull();\n hasLookahead = true;\n }\n return lookahead;\n }\n\n function textUntilClose(name: string): string {\n let text = \"\";\n let depth = 1;\n for (let ev = next(); ev; ev = next()) {\n if (ev.kind === \"text\") {\n text += ev.text;\n } else if (ev.kind === \"open\") {\n if (ev.name === name && !ev.selfClosing) depth++;\n } else if (ev.kind === \"close\" && ev.name === name) {\n depth--;\n if (depth === 0) break;\n }\n }\n return text;\n }\n\n function eachChild(\n name: string,\n onOpen: (ev: Extract<XmlEvent, { kind: \"open\" }>) => void,\n ): void {\n for (let ev = next(); ev; ev = next()) {\n if (ev.kind === \"close\" && ev.name === name) break;\n if (ev.kind === \"open\") onOpen(ev);\n }\n }\n\n return { next, peek, textUntilClose, eachChild };\n}\n","// A tiny, allocation-light XML string builder for the OOXML writer (see docs/STAGE-1.3-SPEC.md §2).\n// Hand-rolled on purpose: fflate is the only runtime dependency and stays that way, so we escape and\n// concatenate strings rather than pulling in a DOM/XML library. No streaming, no validation — the\n// callers know the schema.\n\n/** Emitted at the head of every part unless `declaration: false` is passed. */\nconst XML_DECLARATION = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\n/** Attribute values accepted by {@link XmlWriter}; `undefined` (and `null`) attributes are dropped. */\ntype AttrValue = string | number | boolean | undefined | null;\n\n/** Escapes text content: `&`, `<`, `>`. `&` must be replaced first so the others' entities survive. */\nexport function escapeXmlText(s: string): string {\n return s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\n/** Escapes an attribute value: the text set plus `\"` and `'` (both may appear inside a quoted attr). */\nexport function escapeXmlAttr(s: string): string {\n return escapeXmlText(s).replace(/\"/g, \"&quot;\").replace(/'/g, \"&apos;\");\n}\n\n/** A string needs `xml:space=\"preserve\"` when it has leading or trailing whitespace that Excel would\n * otherwise trim off a `<t>` shared/inline-string element. */\nfunction needsWhitespacePreserve(s: string): boolean {\n return /^\\s|\\s$/.test(s);\n}\n\nexport class XmlWriter {\n private buffer = \"\";\n\n constructor(opts?: { declaration?: boolean }) {\n if (opts?.declaration !== false) {\n this.buffer = XML_DECLARATION;\n }\n }\n\n /** Serialize an attribute record, omitting `undefined`/`null` and rendering booleans as `1`/`0`. */\n private renderAttrs(attrs?: Record<string, AttrValue>): string {\n if (!attrs) return \"\";\n let out = \"\";\n for (const key of Object.keys(attrs)) {\n const value = attrs[key];\n if (value === undefined || value === null) continue;\n const raw = typeof value === \"boolean\" ? (value ? \"1\" : \"0\") : String(value);\n out += ` ${key}=\"${escapeXmlAttr(raw)}\"`;\n }\n return out;\n }\n\n /** Open an element: `<tag …>`. */\n open(tag: string, attrs?: Record<string, AttrValue>): this {\n this.buffer += `<${tag}${this.renderAttrs(attrs)}>`;\n return this;\n }\n\n /** Self-closing element with attributes only: `<tag …/>`. */\n leaf(tag: string, attrs?: Record<string, AttrValue>): this {\n this.buffer += `<${tag}${this.renderAttrs(attrs)}/>`;\n return this;\n }\n\n /** Element with escaped text content: `<tag …>text</tag>`. A `<t>` whose text has leading/trailing\n * whitespace automatically gains `xml:space=\"preserve\"` (explicit attrs win if they set it). */\n el(tag: string, text: string, attrs?: Record<string, AttrValue>): this {\n const finalAttrs =\n tag === \"t\" && needsWhitespacePreserve(text) ? { \"xml:space\": \"preserve\", ...attrs } : attrs;\n this.buffer += `<${tag}${this.renderAttrs(finalAttrs)}>${escapeXmlText(text)}</${tag}>`;\n return this;\n }\n\n /** Append escaped text content at the current position. */\n text(value: string): this {\n this.buffer += escapeXmlText(value);\n return this;\n }\n\n /** Append already-serialized markup verbatim (escape hatch for composing sub-builders). */\n raw(xml: string): this {\n this.buffer += xml;\n return this;\n }\n\n /** Close an element: `</tag>`. */\n close(tag: string): this {\n this.buffer += `</${tag}>`;\n return this;\n }\n\n toString(): string {\n return this.buffer;\n }\n\n toBytes(): Uint8Array {\n return new TextEncoder().encode(this.buffer);\n }\n}\n","// ZIP abstraction layer. Uses fflate under the hood for reading/writing OOXML archives.\n\nimport { unzipSync, zipSync } from \"fflate\";\n\n/** Entries of a ZIP archive, keyed by path (e.g. \"xl/worksheets/sheet1.xml\"). */\nexport type ZipEntries = Map<string, Uint8Array>;\n\n/** Reads a ZIP archive buffer into a map of entry path -> raw bytes. */\nfunction readZipArchive(data: Uint8Array): ZipEntries {\n const unzipped = unzipSync(data);\n return new Map(Object.entries(unzipped));\n}\n\n/** Writes a map of entry path -> raw bytes into a ZIP archive buffer. */\nfunction writeZipArchive(entries: ZipEntries): Uint8Array {\n return zipSync(Object.fromEntries(entries));\n}\n\nexport { readZipArchive, writeZipArchive };\n","// Unzip + part discovery (see docs/STAGE-2-SPEC.md §3). Mirrors the write side's `zip-layer` +\n// `parts/root-rels.ts`/`parts/workbook-rels.ts` in reverse: everything is resolved through the OPC\n// relationships rather than fixed paths, so a foreign producer using different part names still works.\n\nimport { InvalidPackageError, UnsupportedFeatureError } from \"../../errors.js\";\nimport { cursor } from \"../../xml/index.js\";\nimport { readZipArchive, type ZipEntries } from \"../../zip-layer.js\";\nimport { CONTENT_TYPE, PART_PATH, REL_TYPE } from \"../parts/constants.js\";\n\n/** A relationship resolved from some part's `.rels` sibling. `target` is package-root-relative for\n * `mode: \"Internal\"`; left verbatim (a URL/mailto, not a package path) for `mode: \"External\"`. */\nexport interface ResolvedRel {\n type: string;\n target: string;\n mode: \"Internal\" | \"External\";\n}\n\n/** Resolved OOXML package parts, discovered via the OPC relationships. */\nexport interface PackageParts {\n /** Raw bytes of a part, or `undefined` if the archive has no such entry. */\n entry(path: string): Uint8Array | undefined;\n /** UTF-8 decoded text of a part, or `undefined` if the archive has no such entry. */\n text(path: string): string | undefined;\n /** rId -> target resolved relative to the workbook part's directory (e.g. `rId1` -> `\"xl/worksheets/sheet1.xml\"`). */\n workbookRels(): Map<string, { type: string; target: string }>;\n /** Absolute path of the workbook part from `_rels/.rels` (normally `xl/workbook.xml`). */\n workbookPath(): string;\n /** rId -> relationship info from an arbitrary part's own `.rels` sibling (e.g. a worksheet's\n * `xl/worksheets/_rels/sheetN.xml.rels`, holding its hyperlink relationships). Returns an empty\n * map when the part has no `.rels` sibling. */\n partRels(partPath: string): Map<string, ResolvedRel>;\n}\n\ninterface RelEntry {\n id: string;\n type: string;\n target: string;\n mode: \"Internal\" | \"External\";\n}\n\nconst decoder = new TextDecoder();\n\n/** Unzips `.xlsx` bytes and resolves the workbook part + its relationships. */\nexport function openPackage(bytes: Uint8Array): PackageParts {\n const zip = readZip(bytes);\n\n const entry = (path: string): Uint8Array | undefined => zip.get(path);\n const text = (path: string): string | undefined => {\n const raw = zip.get(path);\n return raw === undefined ? undefined : decoder.decode(raw);\n };\n\n const rootRelsXml = text(PART_PATH.rootRels);\n if (rootRelsXml === undefined) {\n throw new InvalidPackageError(`missing ${PART_PATH.rootRels}`);\n }\n const officeDocRel = parseRels(rootRelsXml).find((r) => r.type === REL_TYPE.officeDocument);\n if (!officeDocRel) {\n throw new InvalidPackageError(`${PART_PATH.rootRels} has no officeDocument relationship`);\n }\n const workbookPath = resolveRelTarget(\"\", officeDocRel.target);\n\n const contentTypesXml = text(PART_PATH.contentTypes);\n if (contentTypesXml === undefined) {\n throw new UnsupportedFeatureError(\n `package is missing ${PART_PATH.contentTypes}; not a recognizable OOXML package`,\n );\n }\n assertSpreadsheetPackage(contentTypesXml, workbookPath);\n\n if (entry(workbookPath) === undefined) {\n throw new InvalidPackageError(`workbook part not found at ${workbookPath}`);\n }\n\n const workbookDir = dirname(workbookPath);\n const workbookRelsXml = text(relsPathFor(workbookPath));\n const relsMap = new Map<string, { type: string; target: string }>();\n if (workbookRelsXml !== undefined) {\n for (const rel of parseRels(workbookRelsXml)) {\n relsMap.set(rel.id, { type: rel.type, target: resolveRelTarget(workbookDir, rel.target) });\n }\n }\n\n /** rId -> relationship info for an arbitrary part, resolving `Internal` targets against that\n * part's own directory and leaving `External` targets (URLs) untouched. */\n const partRels = (partPath: string): Map<string, ResolvedRel> => {\n const dir = dirname(partPath);\n const relsXml = text(relsPathFor(partPath));\n const map = new Map<string, ResolvedRel>();\n if (relsXml === undefined) return map;\n for (const rel of parseRels(relsXml)) {\n const target = rel.mode === \"External\" ? rel.target : resolveRelTarget(dir, rel.target);\n map.set(rel.id, { type: rel.type, target, mode: rel.mode });\n }\n return map;\n };\n\n return {\n entry,\n text,\n workbookRels: () => relsMap,\n workbookPath: () => workbookPath,\n partRels,\n };\n}\n\nfunction readZip(bytes: Uint8Array): ZipEntries {\n try {\n return readZipArchive(bytes);\n } catch (e) {\n throw new InvalidPackageError(`could not read zip archive: ${(e as Error).message}`);\n }\n}\n\n/** Parses a `.rels` document (`_rels/.rels` or `xl/_rels/workbook.xml.rels`-shaped) into its entries. */\nfunction parseRels(xml: string): RelEntry[] {\n const c = cursor(xml);\n let ev = c.next();\n while (ev && !(ev.kind === \"open\" && ev.name === \"Relationships\")) ev = c.next();\n if (ev?.kind !== \"open\") return [];\n\n const rels: RelEntry[] = [];\n if (!ev.selfClosing) {\n c.eachChild(ev.name, (child) => {\n if (child.name !== \"Relationship\") return;\n rels.push({\n id: child.attrs.Id ?? \"\",\n type: child.attrs.Type ?? \"\",\n target: child.attrs.Target ?? \"\",\n mode: child.attrs.TargetMode === \"External\" ? \"External\" : \"Internal\",\n });\n });\n }\n return rels;\n}\n\n/** Sanity-checks `[Content_Types].xml` declares the workbook part as a spreadsheet main part. Fails\n * fast on foreign OPC packages (e.g. a `.docx`) rather than parsing garbage worksheets later. */\nfunction assertSpreadsheetPackage(contentTypesXml: string, workbookPath: string): void {\n const c = cursor(contentTypesXml);\n let ev = c.next();\n while (ev && !(ev.kind === \"open\" && ev.name === \"Types\")) ev = c.next();\n if (ev?.kind !== \"open\") {\n throw new UnsupportedFeatureError(\n `${PART_PATH.contentTypes} has no <Types> root; not a recognizable OOXML package`,\n );\n }\n\n let isSpreadsheet = false;\n if (!ev.selfClosing) {\n c.eachChild(ev.name, (child) => {\n if (child.name !== \"Override\") return;\n const partName = child.attrs.PartName?.replace(/^\\//, \"\");\n if (partName === workbookPath && child.attrs.ContentType === CONTENT_TYPE.workbook) {\n isSpreadsheet = true;\n }\n });\n }\n if (!isSpreadsheet) {\n throw new UnsupportedFeatureError(\n `package does not declare ${workbookPath} as a spreadsheet workbook in ${PART_PATH.contentTypes}`,\n );\n }\n}\n\nfunction dirname(path: string): string {\n const idx = path.lastIndexOf(\"/\");\n return idx === -1 ? \"\" : path.slice(0, idx);\n}\n\n/** The `.rels` sibling of a part: `xl/workbook.xml` -> `xl/_rels/workbook.xml.rels`. */\nfunction relsPathFor(partPath: string): string {\n const dir = dirname(partPath);\n const base = dir ? partPath.slice(dir.length + 1) : partPath;\n return dir ? `${dir}/_rels/${base}.rels` : `_rels/${base}.rels`;\n}\n\n/** Resolves a relationship `Target` against the directory containing the part that references it.\n * Handles package-root-absolute targets (`/xl/media/image1.png`) and `../` traversal. */\nfunction resolveRelTarget(baseDir: string, target: string): string {\n if (target.startsWith(\"/\")) return target.slice(1);\n const parts = baseDir ? baseDir.split(\"/\") : [];\n for (const seg of target.split(\"/\")) {\n if (seg === \"\" || seg === \".\") continue;\n if (seg === \"..\") parts.pop();\n else parts.push(seg);\n }\n return parts.join(\"/\");\n}\n","// Parses `docProps/core.xml` + `docProps/app.xml` back onto a `Workbook` (see\n// docs/STAGE-2-SPEC.md §7). Inverts `../parts/core-props.ts` / `../parts/app-props.ts`: unset\n// elements leave the model's defaults untouched.\n\nimport type { Workbook } from \"../../model/index.js\";\nimport { cursor, localName } from \"../../xml/index.js\";\n\n/** Parses a W3CDTF timestamp (`YYYY-MM-DDTHH:mm:ssZ`, as emitted by `toW3CDTF`) into a `Date`. */\nexport function fromW3CDTF(text: string): Date {\n return new Date(text);\n}\n\n/** Applies `docProps/core.xml` (Dublin Core metadata, W3CDTF dates) onto `wb`. */\nexport function applyCoreProps(wb: Workbook, xml: string): void {\n const c = cursor(xml);\n let ev = c.next();\n while (ev && !(ev.kind === \"open\" && localName(ev.name) === \"coreProperties\")) ev = c.next();\n if (ev?.kind !== \"open\" || ev.selfClosing) return;\n\n c.eachChild(ev.name, (child) => {\n const name = localName(child.name);\n const text = child.selfClosing ? \"\" : c.textUntilClose(child.name);\n switch (name) {\n case \"creator\":\n wb.creator = text;\n break;\n case \"title\":\n wb.title = text;\n break;\n case \"subject\":\n wb.subject = text;\n break;\n case \"description\":\n wb.description = text;\n break;\n case \"keywords\":\n wb.keywords = text;\n break;\n case \"category\":\n wb.category = text;\n break;\n case \"lastModifiedBy\":\n wb.lastModifiedBy = text;\n break;\n case \"created\":\n wb.created = fromW3CDTF(text);\n break;\n case \"modified\":\n wb.modified = fromW3CDTF(text);\n break;\n }\n });\n}\n\n/** Applies `docProps/app.xml` (Company/Manager) onto `wb`. */\nexport function applyAppProps(wb: Workbook, xml: string): void {\n const c = cursor(xml);\n let ev = c.next();\n while (ev && !(ev.kind === \"open\" && localName(ev.name) === \"Properties\")) ev = c.next();\n if (ev?.kind !== \"open\" || ev.selfClosing) return;\n\n c.eachChild(ev.name, (child) => {\n const name = localName(child.name);\n const text = child.selfClosing ? \"\" : c.textUntilClose(child.name);\n if (name === \"Company\") wb.company = text;\n else if (name === \"Manager\") wb.manager = text;\n });\n}\n","// Parses `xl/sharedStrings.xml` back into the pool the writer built from (see\n// docs/STAGE-2-SPEC.md §4). Inverts `../shared-strings.ts`: a `<si>` holding a lone `<t>` becomes a\n// plain string; otherwise its `<r>` runs become a `RichText`, each run's `<rPr>` inverting\n// `renderRunProps` into a `Font`.\n\nimport type { Font, RichText, RichTextRun } from \"../../model/index.js\";\nimport { cursor, localName, type XmlCursor } from \"../../xml/index.js\";\n\n/** Parses `xl/sharedStrings.xml`. An absent/empty part (no `<sst>` root) yields `[]`. */\nexport function parseSharedStrings(xml: string): (string | RichText)[] {\n const c = cursor(xml);\n let ev = c.next();\n while (ev && !(ev.kind === \"open\" && localName(ev.name) === \"sst\")) ev = c.next();\n if (ev?.kind !== \"open\" || ev.selfClosing) return [];\n\n const entries: (string | RichText)[] = [];\n c.eachChild(ev.name, (child) => {\n if (localName(child.name) !== \"si\") return;\n entries.push(child.selfClosing ? \"\" : parseRichString(c, child.name));\n });\n return entries;\n}\n\n/**\n * Parses a CT_Rst container's children (`<si>` in sharedStrings, or `<is>` inline on a worksheet cell —\n * the grammar is identical): a lone `<t>` is a plain string, `<r>` runs make a `RichText`. `container`\n * is the open element's name (prefix included); its `open` must already be consumed.\n */\nexport function parseRichString(c: XmlCursor, container: string): string | RichText {\n let text: string | undefined;\n const runs: RichTextRun[] = [];\n\n c.eachChild(container, (child) => {\n const name = localName(child.name);\n if (name === \"t\") {\n text = child.selfClosing ? \"\" : c.textUntilClose(child.name);\n } else if (name === \"r\") {\n runs.push(child.selfClosing ? { text: \"\" } : parseRun(c, child.name));\n } else if (!child.selfClosing) {\n c.textUntilClose(child.name); // skip rPh/phoneticPr etc.\n }\n });\n\n return runs.length > 0 ? { richText: runs } : (text ?? \"\");\n}\n\n/** Parses one `<r>` run: its `<rPr>` (via {@link parseRunProps}) and `<t>` text. */\nfunction parseRun(c: XmlCursor, rName: string): RichTextRun {\n let text = \"\";\n let font: Font | undefined;\n\n c.eachChild(rName, (child) => {\n const name = localName(child.name);\n if (name === \"t\") {\n text = child.selfClosing ? \"\" : c.textUntilClose(child.name);\n } else if (name === \"rPr\") {\n font = child.selfClosing ? {} : parseRunProps(c, child.name);\n } else if (!child.selfClosing) {\n c.textUntilClose(child.name);\n }\n });\n\n return font ? { text, font } : { text };\n}\n\n/** Inverts `renderRunProps`: `<rPr>`'s children back into a `Font`. */\nfunction parseRunProps(c: XmlCursor, rPrName: string): Font {\n const font: Font = {};\n\n c.eachChild(rPrName, (child) => {\n const name = localName(child.name);\n switch (name) {\n case \"rFont\":\n font.name = child.attrs.val;\n break;\n case \"charset\":\n font.charset = Number(child.attrs.val);\n break;\n case \"family\":\n font.family = Number(child.attrs.val);\n break;\n case \"b\":\n font.bold = readBool(child.attrs.val);\n break;\n case \"i\":\n font.italic = readBool(child.attrs.val);\n break;\n case \"strike\":\n font.strike = readBool(child.attrs.val);\n break;\n case \"outline\":\n font.outline = readBool(child.attrs.val);\n break;\n case \"color\":\n font.color = parseColor(child.attrs);\n break;\n case \"sz\":\n font.size = Number(child.attrs.val);\n break;\n case \"u\":\n font.underline = (child.attrs.val as Font[\"underline\"]) ?? true;\n break;\n case \"vertAlign\":\n font.vertAlign = child.attrs.val as Font[\"vertAlign\"];\n break;\n case \"scheme\":\n font.scheme = child.attrs.val as Font[\"scheme\"];\n break;\n }\n if (!child.selfClosing) c.textUntilClose(child.name);\n });\n\n return font;\n}\n\nfunction parseColor(attrs: Record<string, string>): Font[\"color\"] {\n if (attrs.rgb !== undefined) return { argb: attrs.rgb };\n if (attrs.theme !== undefined) return { theme: Number(attrs.theme) };\n if (attrs.indexed !== undefined) return { indexed: Number(attrs.indexed) };\n return undefined;\n}\n\n/** CT_BooleanProperty: an absent `val` means true (the writer only ever emits the bare element),\n * `\"0\"`/`\"false\"` mean false, anything else true. */\nfunction readBool(val: string | undefined): boolean {\n return val === undefined || (val !== \"0\" && val !== \"false\");\n}\n","// The style dedup pools (see docs/STAGE-1.3-SPEC.md §4, docs/OOXML-NOTES.md §5). xl/styles.xml is a set\n// of indexed sub-pools (numFmts, fonts, fills, borders, cellXfs); a cell references a composed cellXf by\n// integer id via its `s=\"\"` attribute. `addStyle` decomposes an already-resolved Style (Stage 1.2 did the\n// row/column/cell precedence), interns each sub-object structurally, then interns the composed <xf>.\n//\n// The baseline seeds — fonts[0] Calibri, fills[0] none + fills[1] gray125, borders[0] empty, one default\n// cellStyleXf/cellXf — are mandatory: Excel prompts to \"repair\" the file if these indices are wrong.\n\nimport type {\n Alignment,\n Border,\n Borders,\n Color,\n Fill,\n Font,\n Protection,\n Style,\n} from \"../model/index.js\";\nimport { XmlWriter } from \"../xml/index.js\";\n\nconst SPREADSHEETML_NS = \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\";\n\n/** Custom number-format codes allocate ids from here upward; 0–163 are reserved for built-ins. */\nconst FIRST_CUSTOM_NUMFMT_ID = 164;\n\n/** The default font (cellXf/font id 0). Matches Excel's out-of-the-box Calibri 11, theme text colour. */\nconst DEFAULT_FONT: Font = {\n size: 11,\n color: { theme: 1 },\n name: \"Calibri\",\n family: 2,\n scheme: \"minor\",\n};\n\n/** cellStyleXfs holds a single default <xf> (id 0); every cellXf points back at it via `xfId=\"0\"`. */\nconst DEFAULT_CELL_STYLE_XF = '<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/>';\n\n/**\n * Built-in number formats: reserved code → id. A cell whose `numFmt` matches one of these reuses the\n * reserved id and emits no `<numFmt>` entry; anything else becomes a custom code at id ≥ 164. Strings must\n * match exactly to dedup, so these mirror the canonical ECMA-376 built-in codes.\n */\nexport const BUILTIN_NUMFMT_BY_CODE = new Map<string, number>([\n [\"General\", 0],\n [\"0\", 1],\n [\"0.00\", 2],\n [\"#,##0\", 3],\n [\"#,##0.00\", 4],\n [\"0%\", 9],\n [\"0.00%\", 10],\n [\"0.00E+00\", 11],\n [\"# ?/?\", 12],\n [\"# ??/??\", 13],\n [\"mm-dd-yy\", 14],\n [\"d-mmm-yy\", 15],\n [\"d-mmm\", 16],\n [\"mmm-yy\", 17],\n [\"h:mm AM/PM\", 18],\n [\"h:mm:ss AM/PM\", 19],\n [\"h:mm\", 20],\n [\"h:mm:ss\", 21],\n [\"m/d/yy h:mm\", 22],\n [\"#,##0 ;(#,##0)\", 37],\n [\"#,##0 ;[Red](#,##0)\", 38],\n [\"#,##0.00;(#,##0.00)\", 39],\n [\"#,##0.00;[Red](#,##0.00)\", 40],\n [\"mm:ss\", 45],\n [\"[h]:mm:ss\", 46],\n [\"mmss.0\", 47],\n [\"##0.0E+0\", 48],\n [\"@\", 49],\n]);\n\nexport interface Styles {\n /** Intern a resolved cell Style; returns its cellXf index (the value for a cell's `s=\"\"` attr). A cell\n * with no style — or a structurally-default one — returns 0, the seeded default cellXf. */\n addStyle(style: Style | undefined): number;\n /** Render the complete xl/styles.xml. Always non-empty (the baseline seeds are always present). */\n toXml(): string;\n}\n\nexport function createStyles(): Styles {\n return new StylesBuilder();\n}\n\n/** A structural-dedup pool: identical rendered XML collapses to one entry, its array index the id. */\nclass InternPool {\n private readonly ids = new Map<string, number>();\n readonly xml: string[] = [];\n\n constructor(seeds: string[]) {\n for (const seed of seeds) this.intern(seed);\n }\n\n intern(rendered: string): number {\n const existing = this.ids.get(rendered);\n if (existing !== undefined) return existing;\n const id = this.xml.length;\n this.ids.set(rendered, id);\n this.xml.push(rendered);\n return id;\n }\n\n get count(): number {\n return this.xml.length;\n }\n}\n\nclass StylesBuilder implements Styles {\n private readonly fonts = new InternPool([renderFont(DEFAULT_FONT)]);\n private readonly fills = new InternPool([\n renderFill({ type: \"pattern\", pattern: \"none\" }),\n renderFill({ type: \"pattern\", pattern: \"gray125\" }),\n ]);\n private readonly borders = new InternPool([renderBorder(undefined)]);\n private readonly cellXfs = new InternPool([\n renderXf({ numFmtId: 0, fontId: 0, fillId: 0, borderId: 0 }),\n ]);\n\n /** Custom number-format code → allocated id (≥ 164), and the `<numFmt>` fragments in id order. */\n private readonly customNumFmtIds = new Map<string, number>();\n private readonly numFmtXml: string[] = [];\n private nextNumFmtId = FIRST_CUSTOM_NUMFMT_ID;\n\n /** Fast path for the common case of one Style object shared across many cells. */\n private readonly cache = new WeakMap<Style, number>();\n\n addStyle(style: Style | undefined): number {\n if (style === undefined) return 0;\n const cached = this.cache.get(style);\n if (cached !== undefined) return cached;\n\n const numFmtId = this.internNumFmt(style.numFmt);\n const fontId = style.font ? this.fonts.intern(renderFont(style.font)) : 0;\n const fillId = style.fill ? this.fills.intern(renderFill(style.fill)) : 0;\n const borderId = style.border ? this.borders.intern(renderBorder(style.border)) : 0;\n\n const id = this.cellXfs.intern(\n renderXf({\n numFmtId,\n fontId,\n fillId,\n borderId,\n alignment: style.alignment,\n protection: style.protection,\n }),\n );\n this.cache.set(style, id);\n return id;\n }\n\n private internNumFmt(code: string | undefined): number {\n if (code === undefined) return 0;\n const builtin = BUILTIN_NUMFMT_BY_CODE.get(code);\n if (builtin !== undefined) return builtin;\n const existing = this.customNumFmtIds.get(code);\n if (existing !== undefined) return existing;\n const id = this.nextNumFmtId++;\n this.customNumFmtIds.set(code, id);\n this.numFmtXml.push(renderNumFmt(id, code));\n return id;\n }\n\n toXml(): string {\n const w = new XmlWriter();\n w.open(\"styleSheet\", { xmlns: SPREADSHEETML_NS });\n\n if (this.numFmtXml.length > 0) {\n w.open(\"numFmts\", { count: this.numFmtXml.length });\n for (const x of this.numFmtXml) w.raw(x);\n w.close(\"numFmts\");\n }\n\n w.open(\"fonts\", { count: this.fonts.count });\n for (const x of this.fonts.xml) w.raw(x);\n w.close(\"fonts\");\n\n w.open(\"fills\", { count: this.fills.count });\n for (const x of this.fills.xml) w.raw(x);\n w.close(\"fills\");\n\n w.open(\"borders\", { count: this.borders.count });\n for (const x of this.borders.xml) w.raw(x);\n w.close(\"borders\");\n\n w.open(\"cellStyleXfs\", { count: 1 });\n w.raw(DEFAULT_CELL_STYLE_XF);\n w.close(\"cellStyleXfs\");\n\n w.open(\"cellXfs\", { count: this.cellXfs.count });\n for (const x of this.cellXfs.xml) w.raw(x);\n w.close(\"cellXfs\");\n\n w.open(\"cellStyles\", { count: 1 });\n w.leaf(\"cellStyle\", { name: \"Normal\", xfId: 0, builtinId: 0 });\n w.close(\"cellStyles\");\n\n w.leaf(\"dxfs\", { count: 0 });\n w.leaf(\"tableStyles\", {\n count: 0,\n defaultTableStyle: \"TableStyleMedium2\",\n defaultPivotStyle: \"PivotStyleLight16\",\n });\n\n w.close(\"styleSheet\");\n return w.toString();\n }\n}\n\n// --- Pure renderers ---------------------------------------------------------------------------------\n\n/** `<font>` per ECMA-376 CT_Font element order (distinct from the run-property CT_RPrElt order used by\n * shared strings: here the name element is `<name>`, and strike/underline sit before size). */\nexport function renderFont(font: Font): string {\n const w = new XmlWriter({ declaration: false });\n w.open(\"font\");\n if (font.bold) w.leaf(\"b\");\n if (font.italic) w.leaf(\"i\");\n if (font.strike) w.leaf(\"strike\");\n if (font.outline) w.leaf(\"outline\");\n renderUnderline(w, font.underline);\n if (font.vertAlign) w.leaf(\"vertAlign\", { val: font.vertAlign });\n if (font.size !== undefined) w.leaf(\"sz\", { val: font.size });\n if (font.color) renderColor(w, \"color\", font.color);\n if (font.name !== undefined) w.leaf(\"name\", { val: font.name });\n if (font.family !== undefined) w.leaf(\"family\", { val: font.family });\n if (font.charset !== undefined) w.leaf(\"charset\", { val: font.charset });\n if (font.scheme) w.leaf(\"scheme\", { val: font.scheme });\n w.close(\"font\");\n return w.toString();\n}\n\n/** `<fill>` — a `<patternFill>` (with optional fg/bg colours) or a linear/path `<gradientFill>`. */\nexport function renderFill(fill: Fill): string {\n const w = new XmlWriter({ declaration: false });\n w.open(\"fill\");\n if (fill.type === \"pattern\") {\n if (fill.fgColor || fill.bgColor) {\n w.open(\"patternFill\", { patternType: fill.pattern });\n if (fill.fgColor) renderColor(w, \"fgColor\", fill.fgColor);\n if (fill.bgColor) renderColor(w, \"bgColor\", fill.bgColor);\n w.close(\"patternFill\");\n } else {\n w.leaf(\"patternFill\", { patternType: fill.pattern });\n }\n } else if (fill.gradient === \"angle\") {\n w.open(\"gradientFill\", { degree: fill.degree });\n renderStops(w, fill.stops);\n w.close(\"gradientFill\");\n } else {\n // A path gradient's single centre maps to the OOXML left/right & top/bottom insets.\n w.open(\"gradientFill\", {\n type: \"path\",\n left: fill.center.left,\n right: fill.center.left,\n top: fill.center.top,\n bottom: fill.center.top,\n });\n renderStops(w, fill.stops);\n w.close(\"gradientFill\");\n }\n w.close(\"fill\");\n return w.toString();\n}\n\nfunction renderStops(w: XmlWriter, stops: { position: number; color: Color }[]): void {\n for (const stop of stops) {\n w.open(\"stop\", { position: stop.position });\n renderColor(w, \"color\", stop.color);\n w.close(\"stop\");\n }\n}\n\n/** `<border>` — CT_Border always lists all four sides plus the diagonal, empty ones self-closed. */\nexport function renderBorder(borders: Borders | undefined): string {\n const w = new XmlWriter({ declaration: false });\n w.open(\"border\", {\n diagonalUp: borders?.diagonal?.up || undefined,\n diagonalDown: borders?.diagonal?.down || undefined,\n });\n renderBorderSide(w, \"left\", borders?.left);\n renderBorderSide(w, \"right\", borders?.right);\n renderBorderSide(w, \"top\", borders?.top);\n renderBorderSide(w, \"bottom\", borders?.bottom);\n renderBorderSide(w, \"diagonal\", borders?.diagonal);\n w.close(\"border\");\n return w.toString();\n}\n\nfunction renderBorderSide(w: XmlWriter, tag: string, side: Border | undefined): void {\n if (!side || side.style === undefined) {\n w.leaf(tag);\n return;\n }\n if (!side.color) {\n w.leaf(tag, { style: side.style });\n return;\n }\n w.open(tag, { style: side.style });\n renderColor(w, \"color\", side.color);\n w.close(tag);\n}\n\n/** `<numFmt numFmtId=\"164\" formatCode=\"…\"/>` — only ever called for custom (id ≥ 164) codes. */\nexport function renderNumFmt(id: number, code: string): string {\n const w = new XmlWriter({ declaration: false });\n w.leaf(\"numFmt\", { numFmtId: id, formatCode: code });\n return w.toString();\n}\n\ninterface XfParts {\n numFmtId: number;\n fontId: number;\n fillId: number;\n borderId: number;\n alignment?: Alignment;\n protection?: Protection;\n}\n\n/** `<xf …>` — the composed cell format. Each `applyX` flag is set only when its component is non-default,\n * and `<alignment>`/`<protection>` children are emitted only when they carry real content. */\nexport function renderXf(xf: XfParts): string {\n const alignmentXml = xf.alignment ? renderAlignment(xf.alignment) : \"\";\n const protectionXml = xf.protection ? renderProtection(xf.protection) : \"\";\n const attrs = {\n numFmtId: xf.numFmtId,\n fontId: xf.fontId,\n fillId: xf.fillId,\n borderId: xf.borderId,\n xfId: 0,\n applyNumberFormat: xf.numFmtId !== 0 || undefined,\n applyFont: xf.fontId !== 0 || undefined,\n applyFill: xf.fillId !== 0 || undefined,\n applyBorder: xf.borderId !== 0 || undefined,\n applyAlignment: alignmentXml !== \"\" || undefined,\n applyProtection: protectionXml !== \"\" || undefined,\n };\n\n const w = new XmlWriter({ declaration: false });\n if (alignmentXml === \"\" && protectionXml === \"\") {\n w.leaf(\"xf\", attrs);\n } else {\n w.open(\"xf\", attrs);\n if (alignmentXml) w.raw(alignmentXml);\n if (protectionXml) w.raw(protectionXml);\n w.close(\"xf\");\n }\n return w.toString();\n}\n\n/** `<alignment>`, or `\"\"` when the alignment carries no meaningful attributes. */\nfunction renderAlignment(a: Alignment): string {\n const attrs = {\n horizontal: a.horizontal,\n vertical: a.vertical,\n textRotation: convertTextRotation(a.textRotation),\n wrapText: a.wrapText || undefined,\n indent: a.indent,\n shrinkToFit: a.shrinkToFit || undefined,\n readingOrder: convertReadingOrder(a.readingOrder),\n };\n if (!hasDefinedValue(attrs)) return \"\";\n const w = new XmlWriter({ declaration: false });\n w.leaf(\"alignment\", attrs);\n return w.toString();\n}\n\n/** `<protection>`, or `\"\"` when neither locked nor hidden is set (false is meaningful, so it is kept). */\nfunction renderProtection(p: Protection): string {\n const attrs = { locked: p.locked, hidden: p.hidden };\n if (!hasDefinedValue(attrs)) return \"\";\n const w = new XmlWriter({ declaration: false });\n w.leaf(\"protection\", attrs);\n return w.toString();\n}\n\nfunction renderColor(w: XmlWriter, tag: string, color: Color): void {\n if (color.argb !== undefined) w.leaf(tag, { rgb: color.argb });\n else if (color.theme !== undefined) w.leaf(tag, { theme: color.theme });\n else if (color.indexed !== undefined) w.leaf(tag, { indexed: color.indexed });\n}\n\nfunction renderUnderline(w: XmlWriter, underline: Font[\"underline\"]): void {\n if (underline === undefined || underline === false || underline === \"none\") return;\n if (underline === true) {\n w.leaf(\"u\");\n return;\n }\n w.leaf(\"u\", { val: underline });\n}\n\n/** Excel stores rotation as 0–90 (counter-clockwise), 91–180 (= 90 − angle, clockwise), or 255 (stacked\n * \"vertical\"). Out-of-range numbers are dropped rather than producing an invalid attribute. */\nfunction convertTextRotation(textRotation: Alignment[\"textRotation\"]): number | undefined {\n if (textRotation === undefined) return undefined;\n if (textRotation === \"vertical\") return 255;\n const r = Math.round(textRotation);\n if (r >= 0 && r <= 90) return r;\n if (r < 0 && r >= -90) return 90 - r;\n return undefined;\n}\n\nfunction convertReadingOrder(readingOrder: Alignment[\"readingOrder\"]): number | undefined {\n if (readingOrder === \"ltr\") return 1;\n if (readingOrder === \"rtl\") return 2;\n return undefined;\n}\n\nfunction hasDefinedValue(attrs: Record<string, unknown>): boolean {\n for (const key of Object.keys(attrs)) {\n if (attrs[key] !== undefined) return true;\n }\n return false;\n}\n","// Inverse of the Stage 1.3 styles builder (see docs/STAGE-2-SPEC.md §5, and src/xlsx/styles.ts for the\n// forward direction). xl/styles.xml is a set of indexed sub-pools; a cell's `s=\"\"` is a cellXf index.\n// We rebuild every pool into an array, then compose a Style per cellXf — emitting a sub-object only when\n// its `applyX` flag is set or its id is non-default, exactly mirroring the writer. This keeps a\n// write -> read -> write cycle structurally identical: the reconstructed Style re-interns to the same\n// pool ids in the same order because each sub-object renders byte-for-byte the same XML it was parsed\n// from.\n\nimport type {\n Alignment,\n Border,\n BorderDiagonal,\n BorderStyle,\n Borders,\n Color,\n Fill,\n FillPattern,\n Font,\n Protection,\n Style,\n} from \"../../model/index.js\";\nimport { parseXml } from \"../../xml/index.js\";\nimport { BUILTIN_NUMFMT_BY_CODE } from \"../styles.js\";\n\n/** The reverse of {@link BUILTIN_NUMFMT_BY_CODE}: reserved numFmtId -> canonical format code. */\nconst BUILTIN_NUMFMT_BY_ID = new Map<number, string>();\nfor (const [code, id] of BUILTIN_NUMFMT_BY_CODE) BUILTIN_NUMFMT_BY_ID.set(id, code);\n\nexport interface StyleTable {\n /** Reconstructed Style for a cell's `s` index; index 0 (or out of range) -> {} (the default). */\n styleFor(index: number): Style;\n /** Whether a cellXf's resolved numFmt is a date/time format (drives number-vs-date on read). */\n isDateStyle(index: number): boolean;\n}\n\n/** Parse xl/styles.xml into a {@link StyleTable}. A missing part yields an all-default table. */\nexport function parseStyles(xml: string | undefined): StyleTable {\n if (xml === undefined) return EMPTY_TABLE;\n const root = parseTree(xml);\n if (root === undefined) return EMPTY_TABLE;\n\n const customNumFmts = parseNumFmts(findChild(root, \"numFmts\"));\n const fonts = mapChildren(findChild(root, \"fonts\"), \"font\", parseFont);\n const fills = mapChildren(findChild(root, \"fills\"), \"fill\", parseFill);\n const borders = mapChildren(findChild(root, \"borders\"), \"border\", parseBorder);\n const xfs = mapChildren(findChild(root, \"cellXfs\"), \"xf\", parseXf);\n\n const numFmtCode = (id: number): string | undefined =>\n customNumFmts.get(id) ?? BUILTIN_NUMFMT_BY_ID.get(id);\n\n const styleFor = (index: number): Style => {\n if (!Number.isInteger(index) || index <= 0 || index >= xfs.length) return {};\n const xf = xfs[index];\n if (xf === undefined) return {};\n\n const style: Style = {};\n\n if (xf.numFmtId !== 0 || xf.applyNumberFormat) {\n const code = numFmtCode(xf.numFmtId);\n if (code !== undefined && code !== \"General\") style.numFmt = code;\n }\n if (xf.fontId !== 0 || xf.applyFont) {\n const font = fonts[xf.fontId];\n if (font !== undefined && hasKeys(font)) style.font = font;\n }\n if (xf.fillId !== 0 || xf.applyFill) {\n const fill = fills[xf.fillId];\n if (fill !== undefined) style.fill = fill;\n }\n if (xf.borderId !== 0 || xf.applyBorder) {\n const border = borders[xf.borderId];\n if (border !== undefined && hasKeys(border)) style.border = border;\n }\n if (xf.alignment !== undefined && hasKeys(xf.alignment)) style.alignment = xf.alignment;\n if (xf.protection !== undefined && hasKeys(xf.protection)) style.protection = xf.protection;\n\n return style;\n };\n\n const isDateStyle = (index: number): boolean => {\n if (!Number.isInteger(index) || index < 0 || index >= xfs.length) return false;\n const xf = xfs[index];\n if (xf === undefined) return false;\n const id = xf.numFmtId;\n if ((id >= 14 && id <= 22) || (id >= 45 && id <= 47)) return true;\n const code = numFmtCode(id);\n return code !== undefined && isDateFormatCode(code);\n };\n\n return { styleFor, isDateStyle };\n}\n\nconst EMPTY_TABLE: StyleTable = {\n styleFor: () => ({}),\n isDateStyle: () => false,\n};\n\n// --- number-format date detection -------------------------------------------------------------------\n\n/**\n * Whether a format code renders a date/time. True when it carries a date/time token (`y m d h s`, an\n * elapsed-time bracket like `[h]`/`[mm]`, and by extension AM/PM which always co-occurs with `m`)\n * outside quoted literals, escapes and colour/condition brackets (`[Red]`, `[>100]`, `[$-409]`). Callers\n * short-circuit the reserved built-in date ids (14–22, 45–47); this handles custom codes. Mirrors the\n * ambiguity resolution Excel and ExcelJS apply to decide number-vs-date on read.\n */\nexport function isDateFormatCode(code: string): boolean {\n const n = code.length;\n let i = 0;\n while (i < n) {\n const ch = code[i];\n if (ch === undefined) break;\n if (ch === \"\\\\\") {\n i += 2; // an escaped literal char is never a token\n continue;\n }\n if (ch === '\"') {\n i++;\n while (i < n && code[i] !== '\"') i++;\n i++; // skip the closing quote\n continue;\n }\n if (ch === \"[\") {\n const close = code.indexOf(\"]\", i);\n const first = code[i + 1];\n // `[h]`/`[hh]`/`[mm]`/`[ss]` are elapsed-time tokens; `[Red]`/`[>100]`/`[$-x]` are not.\n if (first !== undefined && \"hHmMsS\".includes(first)) return true;\n i = close === -1 ? n : close + 1;\n continue;\n }\n if (\"yYmMdDhHsS\".includes(ch)) return true;\n i++;\n }\n return false;\n}\n\n// --- xf composition ---------------------------------------------------------------------------------\n\ninterface XfData {\n numFmtId: number;\n fontId: number;\n fillId: number;\n borderId: number;\n applyNumberFormat: boolean;\n applyFont: boolean;\n applyFill: boolean;\n applyBorder: boolean;\n alignment?: Alignment;\n protection?: Protection;\n}\n\nfunction parseXf(el: Element): XfData {\n const xf: XfData = {\n numFmtId: numAttr(el, \"numFmtId\", 0),\n fontId: numAttr(el, \"fontId\", 0),\n fillId: numAttr(el, \"fillId\", 0),\n borderId: numAttr(el, \"borderId\", 0),\n applyNumberFormat: attrTrue(el.attrs.applyNumberFormat),\n applyFont: attrTrue(el.attrs.applyFont),\n applyFill: attrTrue(el.attrs.applyFill),\n applyBorder: attrTrue(el.attrs.applyBorder),\n };\n const alignmentEl = findChild(el, \"alignment\");\n if (alignmentEl !== undefined) xf.alignment = parseAlignment(alignmentEl);\n const protectionEl = findChild(el, \"protection\");\n if (protectionEl !== undefined) xf.protection = parseProtection(protectionEl);\n return xf;\n}\n\nfunction parseAlignment(el: Element): Alignment {\n const a: Alignment = {};\n if (el.attrs.horizontal !== undefined)\n a.horizontal = el.attrs.horizontal as Alignment[\"horizontal\"];\n if (el.attrs.vertical !== undefined) a.vertical = el.attrs.vertical as Alignment[\"vertical\"];\n if (el.attrs.textRotation !== undefined) {\n const rotation = inverseTextRotation(Number(el.attrs.textRotation));\n if (rotation !== undefined) a.textRotation = rotation;\n }\n if (attrTrue(el.attrs.wrapText)) a.wrapText = true;\n if (el.attrs.indent !== undefined) a.indent = Number(el.attrs.indent);\n if (attrTrue(el.attrs.shrinkToFit)) a.shrinkToFit = true;\n if (el.attrs.readingOrder === \"1\") a.readingOrder = \"ltr\";\n else if (el.attrs.readingOrder === \"2\") a.readingOrder = \"rtl\";\n return a;\n}\n\n/** Inverse of the writer's rotation encoding: 255 -> \"vertical\", 0–90 unchanged, 91–180 -> 90 − r. */\nfunction inverseTextRotation(val: number): number | \"vertical\" | undefined {\n if (val === 255) return \"vertical\";\n if (val >= 0 && val <= 90) return val;\n if (val > 90 && val <= 180) return 90 - val;\n return undefined;\n}\n\nfunction parseProtection(el: Element): Protection {\n const p: Protection = {};\n if (el.attrs.locked !== undefined) p.locked = attrTrue(el.attrs.locked);\n if (el.attrs.hidden !== undefined) p.hidden = attrTrue(el.attrs.hidden);\n return p;\n}\n\n// --- font / fill / border pools ---------------------------------------------------------------------\n\nfunction parseFont(el: Element): Font {\n const font: Font = {};\n for (const c of el.children) {\n switch (c.name) {\n case \"b\":\n if (elementOn(c.attrs.val)) font.bold = true;\n break;\n case \"i\":\n if (elementOn(c.attrs.val)) font.italic = true;\n break;\n case \"strike\":\n if (elementOn(c.attrs.val)) font.strike = true;\n break;\n case \"outline\":\n if (elementOn(c.attrs.val)) font.outline = true;\n break;\n case \"u\":\n font.underline = c.attrs.val === undefined ? true : (c.attrs.val as Font[\"underline\"]);\n break;\n case \"vertAlign\":\n if (c.attrs.val !== undefined) font.vertAlign = c.attrs.val as Font[\"vertAlign\"];\n break;\n case \"sz\":\n if (c.attrs.val !== undefined) font.size = Number(c.attrs.val);\n break;\n case \"color\": {\n const color = parseColor(c);\n if (color !== undefined) font.color = color;\n break;\n }\n case \"name\":\n if (c.attrs.val !== undefined) font.name = c.attrs.val;\n break;\n case \"family\":\n if (c.attrs.val !== undefined) font.family = Number(c.attrs.val);\n break;\n case \"charset\":\n if (c.attrs.val !== undefined) font.charset = Number(c.attrs.val);\n break;\n case \"scheme\":\n if (c.attrs.val !== undefined) font.scheme = c.attrs.val as Font[\"scheme\"];\n break;\n }\n }\n return font;\n}\n\nfunction parseFill(el: Element): Fill {\n const patternFill = findChild(el, \"patternFill\");\n if (patternFill !== undefined) {\n const fill: Fill = {\n type: \"pattern\",\n pattern: (patternFill.attrs.patternType ?? \"none\") as FillPattern,\n };\n const fg = findChild(patternFill, \"fgColor\");\n if (fg !== undefined) {\n const color = parseColor(fg);\n if (color !== undefined) fill.fgColor = color;\n }\n const bg = findChild(patternFill, \"bgColor\");\n if (bg !== undefined) {\n const color = parseColor(bg);\n if (color !== undefined) fill.bgColor = color;\n }\n return fill;\n }\n\n const gradientFill = findChild(el, \"gradientFill\");\n if (gradientFill !== undefined) {\n const stops = findChildren(gradientFill, \"stop\").map((stop) => {\n const colorEl = findChild(stop, \"color\");\n return {\n position: Number(stop.attrs.position ?? 0),\n color: (colorEl !== undefined ? parseColor(colorEl) : undefined) ?? {},\n };\n });\n if (gradientFill.attrs.type === \"path\") {\n return {\n type: \"gradient\",\n gradient: \"path\",\n center: {\n left: Number(gradientFill.attrs.left ?? 0),\n top: Number(gradientFill.attrs.top ?? 0),\n },\n stops,\n };\n }\n return {\n type: \"gradient\",\n gradient: \"angle\",\n degree: Number(gradientFill.attrs.degree ?? 0),\n stops,\n };\n }\n\n // No recognizable child — fall back to an empty pattern fill so the pool index stays aligned.\n return { type: \"pattern\", pattern: \"none\" };\n}\n\nfunction parseBorder(el: Element): Borders {\n const borders: Borders = {};\n const left = parseBorderSide(findChild(el, \"left\"));\n if (left !== undefined) borders.left = left;\n const right = parseBorderSide(findChild(el, \"right\"));\n if (right !== undefined) borders.right = right;\n const top = parseBorderSide(findChild(el, \"top\"));\n if (top !== undefined) borders.top = top;\n const bottom = parseBorderSide(findChild(el, \"bottom\"));\n if (bottom !== undefined) borders.bottom = bottom;\n\n const diagonalSide = parseBorderSide(findChild(el, \"diagonal\"));\n const up = attrTrue(el.attrs.diagonalUp);\n const down = attrTrue(el.attrs.diagonalDown);\n if (diagonalSide !== undefined || up || down) {\n const diagonal: BorderDiagonal = { ...diagonalSide };\n if (up) diagonal.up = true;\n if (down) diagonal.down = true;\n borders.diagonal = diagonal;\n }\n return borders;\n}\n\nfunction parseBorderSide(el: Element | undefined): Border | undefined {\n if (el === undefined || el.attrs.style === undefined) return undefined;\n const border: Border = { style: el.attrs.style as BorderStyle };\n const colorEl = findChild(el, \"color\");\n if (colorEl !== undefined) {\n const color = parseColor(colorEl);\n if (color !== undefined) border.color = color;\n }\n return border;\n}\n\n/** Inverse of `renderColor`: rgb -> argb, else theme, else indexed (writer emits exactly one). */\nfunction parseColor(el: Element): Color | undefined {\n if (el.attrs.rgb !== undefined) return { argb: el.attrs.rgb };\n if (el.attrs.theme !== undefined) return { theme: Number(el.attrs.theme) };\n if (el.attrs.indexed !== undefined) return { indexed: Number(el.attrs.indexed) };\n return undefined;\n}\n\nfunction parseNumFmts(el: Element | undefined): Map<number, string> {\n const map = new Map<number, string>();\n if (el === undefined) return map;\n for (const c of findChildren(el, \"numFmt\")) {\n const id = c.attrs.numFmtId;\n const code = c.attrs.formatCode;\n if (id !== undefined && code !== undefined) map.set(Number(id), code);\n }\n return map;\n}\n\n// --- minimal element tree over the pull parser ------------------------------------------------------\n\ninterface Element {\n name: string;\n attrs: Record<string, string>;\n children: Element[];\n}\n\n/** Build a shallow element tree from styles.xml. Text nodes are ignored — every datum lives in an\n * attribute — which keeps this immune to insignificant whitespace between elements. */\nfunction parseTree(xml: string): Element | undefined {\n const root: Element = { name: \"#root\", attrs: {}, children: [] };\n const stack: Element[] = [root];\n for (const ev of parseXml(xml)) {\n const top = stack[stack.length - 1];\n if (top === undefined) break;\n if (ev.kind === \"open\") {\n const el: Element = { name: ev.name, attrs: ev.attrs, children: [] };\n top.children.push(el);\n if (!ev.selfClosing) stack.push(el);\n } else if (ev.kind === \"close\" && stack.length > 1) {\n stack.pop();\n }\n }\n return root.children[0];\n}\n\nfunction findChild(el: Element, name: string): Element | undefined {\n return el.children.find((c) => c.name === name);\n}\n\nfunction findChildren(el: Element, name: string): Element[] {\n return el.children.filter((c) => c.name === name);\n}\n\n/** Map every `name` child of a pool container through `fn`, preserving order so array index == id. */\nfunction mapChildren<T>(el: Element | undefined, name: string, fn: (child: Element) => T): T[] {\n if (el === undefined) return [];\n return findChildren(el, name).map(fn);\n}\n\nfunction numAttr(el: Element, name: string, fallback: number): number {\n const raw = el.attrs[name];\n return raw === undefined ? fallback : Number(raw);\n}\n\n/** A boolean toggle *element* like `<b/>`: its mere presence means on, so an absent `val` is `true`;\n * only an explicit `val=\"0\"`/`\"false\"`/`\"off\"` turns it off. */\nfunction elementOn(val: string | undefined): boolean {\n return val !== \"0\" && val !== \"false\" && val !== \"off\";\n}\n\n/** A boolean *attribute* (`applyFont`, `wrapText`, `diagonalUp`, `locked`…): absent means `false`; only\n * `\"1\"`/`\"true\"`/`\"on\"` mean `true`. The inverse convention to {@link elementOn}. */\nfunction attrTrue(val: string | undefined): boolean {\n return val === \"1\" || val === \"true\" || val === \"on\";\n}\n\nfunction hasKeys(obj: object): boolean {\n for (const _ in obj) return true;\n return false;\n}\n","// Inverse of the Stage 1.3 workbook part writer (see docs/STAGE-2-SPEC.md §7, and\n// src/xlsx/parts/workbook.ts for the forward direction). Reads xl/workbook.xml for the sheet list\n// (name / sheetId / state / `r:id`), the `date1904` flag, and the active tab. Part *locations* are not\n// here — each `r:id` is resolved to a worksheet part through workbook.xml.rels by the orchestrator.\n\nimport { cursor, localName, type XmlCursor, type XmlEvent } from \"../../xml/index.js\";\n\nexport interface WorkbookHeader {\n sheets: {\n name: string;\n sheetId: number;\n state: \"visible\" | \"hidden\" | \"veryHidden\";\n rId: string;\n }[];\n date1904: boolean;\n activeTab?: number;\n}\n\ntype OpenEvent = Extract<XmlEvent, { kind: \"open\" }>;\n\n/** Parse xl/workbook.xml. A malformed/rootless document yields an empty header (no sheets). */\nexport function parseWorkbook(xml: string): WorkbookHeader {\n const header: WorkbookHeader = { sheets: [], date1904: false };\n\n const c = cursor(xml);\n let ev = c.next();\n while (ev && !(ev.kind === \"open\" && localName(ev.name) === \"workbook\")) ev = c.next();\n if (ev?.kind !== \"open\" || ev.selfClosing) return header;\n\n c.eachChild(ev.name, (child) => {\n switch (localName(child.name)) {\n case \"workbookPr\":\n if (truthy(child.attrs.date1904)) header.date1904 = true;\n break;\n case \"bookViews\":\n if (!child.selfClosing) parseBookViews(c, child.name, header);\n break;\n case \"sheets\":\n if (!child.selfClosing) parseSheets(c, child.name, header);\n break;\n default:\n if (!child.selfClosing) c.textUntilClose(child.name);\n }\n });\n\n return header;\n}\n\nfunction parseBookViews(c: XmlCursor, container: string, header: WorkbookHeader): void {\n c.eachChild(container, (child) => {\n if (localName(child.name) === \"workbookView\") {\n const activeTab = child.attrs.activeTab;\n if (activeTab !== undefined) {\n const n = Number(activeTab);\n if (Number.isFinite(n)) header.activeTab = n;\n }\n } else if (!child.selfClosing) {\n c.textUntilClose(child.name);\n }\n });\n}\n\nfunction parseSheets(c: XmlCursor, container: string, header: WorkbookHeader): void {\n c.eachChild(container, (child) => {\n if (localName(child.name) !== \"sheet\") {\n if (!child.selfClosing) c.textUntilClose(child.name);\n return;\n }\n header.sheets.push({\n name: child.attrs.name ?? \"\",\n sheetId: Number(child.attrs.sheetId ?? 0),\n state: normalizeState(child.attrs.state),\n rId: relId(child),\n });\n });\n}\n\n/** The `r:id` relationship reference. OOXML fixes the `r` prefix, but fall back to any `*:id` attribute\n * so an unconventional prefix still resolves. */\nfunction relId(sheet: OpenEvent): string {\n const direct = sheet.attrs[\"r:id\"];\n if (direct !== undefined) return direct;\n for (const key of Object.keys(sheet.attrs)) {\n if (localName(key) === \"id\") return sheet.attrs[key] ?? \"\";\n }\n return \"\";\n}\n\nfunction normalizeState(state: string | undefined): \"visible\" | \"hidden\" | \"veryHidden\" {\n if (state === \"hidden\") return \"hidden\";\n if (state === \"veryHidden\") return \"veryHidden\";\n return \"visible\";\n}\n\n/** A boolean-ish OOXML attribute: `\"1\"`/`\"true\"` mean true; absent or anything else false. */\nfunction truthy(val: string | undefined): boolean {\n return val === \"1\" || val === \"true\";\n}\n","// Inverse of the Stage 1.3 worksheet writer (see docs/STAGE-2-SPEC.md §6, and src/xlsx/parts/worksheet.ts\n// for the forward direction). Walks sheetN.xml with the pull parser and populates an already-created\n// Worksheet: `<cols>` -> Column defaults, `<sheetData>` rows/cells -> values + styles, `<mergeCells>` ->\n// merge regions (applied last so masters keep their values).\n//\n// The `t` attribute drives value decoding, exactly reversing the writer's mapping:\n// s -> shared-string index inlineStr -> <is> text/runs str -> formula string result\n// b -> boolean e -> error code n/absent -> number, or Date when the\n// cell's number format is a date/time one.\n// A `<f>` present makes it a formula cell whose cached `<v>` becomes the typed `result`.\n\nimport { decodeAddress } from \"../../address/index.js\";\nimport { InvalidCellValueError } from \"../../errors.js\";\nimport type {\n CellError,\n CellValue,\n ErrorCode,\n RichText,\n Row,\n Worksheet,\n} from \"../../model/index.js\";\nimport { cursor, localName, type XmlCursor, type XmlEvent } from \"../../xml/index.js\";\nimport { serialToDate } from \"../date.js\";\nimport type { ResolvedRel } from \"./package.js\";\nimport { parseRichString } from \"./shared-strings.js\";\nimport type { StyleTable } from \"./styles.js\";\n\nexport interface WorksheetReadContext {\n sharedStrings: (string | RichText)[];\n styles: StyleTable;\n date1904: boolean;\n /** This worksheet's own relationships (rId -> {type, target, mode}), used to resolve\n * `<hyperlinks>` entries. `undefined`/absent means hyperlinks are left as plain string cells. */\n rels?: Map<string, ResolvedRel>;\n}\n\ntype OpenEvent = Extract<XmlEvent, { kind: \"open\" }>;\n\n/** A parsed `<hyperlink>` sheet-level record, before its `r:id` is resolved to a target. */\ninterface HyperlinkRef {\n ref: string;\n rId: string;\n tooltip?: string;\n}\n\n/** Populate an already-created {@link Worksheet} from its sheetN.xml. */\nexport function parseWorksheet(ws: Worksheet, xml: string, ctx: WorksheetReadContext): void {\n const c = cursor(xml);\n let ev = c.next();\n while (ev && !(ev.kind === \"open\" && localName(ev.name) === \"worksheet\")) ev = c.next();\n if (ev?.kind !== \"open\" || ev.selfClosing) return;\n\n // Merges are collected and applied after every cell is placed, regardless of document order, so a\n // master cell's value is never clobbered by linking its slaves. Hyperlinks are collected the same\n // way and resolved last, once the display-text cells they point at already hold their string value.\n const merges: string[] = [];\n const hyperlinks: HyperlinkRef[] = [];\n\n c.eachChild(ev.name, (child) => {\n switch (localName(child.name)) {\n case \"cols\":\n if (!child.selfClosing) parseCols(c, child.name, ws, ctx);\n break;\n case \"sheetData\":\n if (!child.selfClosing) parseSheetData(c, child.name, ws, ctx);\n break;\n case \"mergeCells\":\n if (!child.selfClosing) collectMerges(c, child.name, merges);\n break;\n case \"hyperlinks\":\n if (!child.selfClosing) collectHyperlinks(c, child.name, hyperlinks);\n break;\n default:\n if (!child.selfClosing) c.textUntilClose(child.name);\n }\n });\n\n for (const ref of merges) ws.mergeCells(ref);\n if (ctx.rels) {\n for (const link of hyperlinks) applyHyperlink(ws, link, ctx.rels);\n }\n}\n\nfunction parseCols(\n c: XmlCursor,\n container: string,\n ws: Worksheet,\n ctx: WorksheetReadContext,\n): void {\n c.eachChild(container, (col) => {\n if (localName(col.name) !== \"col\") {\n if (!col.selfClosing) c.textUntilClose(col.name);\n return;\n }\n const min = num(col.attrs.min);\n const max = num(col.attrs.max);\n if (min === undefined || max === undefined) return;\n\n const width = num(col.attrs.width);\n const hidden = truthy(col.attrs.hidden);\n const outline = num(col.attrs.outlineLevel);\n const styleIdx = num(col.attrs.style);\n const style = styleIdx ? ctx.styles.styleFor(styleIdx) : undefined;\n\n for (let n = min; n <= max; n++) {\n const column = ws.getColumn(n);\n if (width !== undefined) column.width = width;\n if (hidden) column.hidden = true;\n if (outline) column.outlineLevel = outline;\n if (style) column.style = style;\n }\n });\n}\n\nfunction parseSheetData(\n c: XmlCursor,\n container: string,\n ws: Worksheet,\n ctx: WorksheetReadContext,\n): void {\n let expectedRow = 0;\n c.eachChild(container, (rowEl) => {\n if (localName(rowEl.name) !== \"row\") {\n if (!rowEl.selfClosing) c.textUntilClose(rowEl.name);\n return;\n }\n expectedRow = num(rowEl.attrs.r) ?? expectedRow + 1;\n parseRow(c, rowEl, expectedRow, ws, ctx);\n });\n}\n\nfunction parseRow(\n c: XmlCursor,\n rowEl: OpenEvent,\n rowNumber: number,\n ws: Worksheet,\n ctx: WorksheetReadContext,\n): void {\n const row = ws.getRow(rowNumber);\n\n const height = num(rowEl.attrs.ht);\n if (height !== undefined) row.height = height;\n if (truthy(rowEl.attrs.hidden)) row.hidden = true;\n const outline = num(rowEl.attrs.outlineLevel);\n if (outline) row.outlineLevel = outline;\n // Set the row style before creating any cell so the (empty) fan-out to existing cells is a no-op;\n // cells created below then resolve this row style plus their column style at construction.\n const rowStyleIdx = num(rowEl.attrs.s);\n if (rowStyleIdx) row.style = ctx.styles.styleFor(rowStyleIdx);\n\n if (rowEl.selfClosing) return;\n\n let expectedCol = 0;\n c.eachChild(rowEl.name, (cellEl) => {\n if (localName(cellEl.name) !== \"c\") {\n if (!cellEl.selfClosing) c.textUntilClose(cellEl.name);\n return;\n }\n expectedCol = parseCell(c, cellEl, expectedCol + 1, row, ctx);\n });\n}\n\n/** Parse one `<c>`; returns the column index it occupied (so a following `<c>` without an `r` can be\n * placed in the next column). */\nfunction parseCell(\n c: XmlCursor,\n cellEl: OpenEvent,\n fallbackCol: number,\n row: Row,\n ctx: WorksheetReadContext,\n): number {\n const col = cellEl.attrs.r !== undefined ? decodeAddress(cellEl.attrs.r).col : fallbackCol;\n const styleIdx = num(cellEl.attrs.s) ?? 0;\n const t = cellEl.attrs.t;\n\n let vText: string | undefined;\n let inlineValue: string | RichText | undefined;\n let formulaExpr: string | undefined;\n let hasFormula = false;\n\n if (!cellEl.selfClosing) {\n c.eachChild(cellEl.name, (child) => {\n switch (localName(child.name)) {\n case \"v\":\n vText = child.selfClosing ? \"\" : c.textUntilClose(child.name);\n break;\n case \"f\":\n hasFormula = true;\n formulaExpr = child.selfClosing ? \"\" : c.textUntilClose(child.name);\n break;\n case \"is\":\n inlineValue = child.selfClosing ? \"\" : parseRichString(c, child.name);\n break;\n default:\n if (!child.selfClosing) c.textUntilClose(child.name);\n }\n });\n }\n\n const value = hasFormula\n ? buildFormula(formulaExpr ?? \"\", t, vText, styleIdx, ctx)\n : decodeValue(t, vText, inlineValue, styleIdx, ctx);\n\n // An empty, unstyled, non-formula cell contributes nothing to the model — skip it.\n if (value === null && styleIdx === 0 && !hasFormula) return col;\n\n const cell = row.getCell(col);\n if (value !== null) cell.value = value;\n if (styleIdx !== 0) cell.style = ctx.styles.styleFor(styleIdx);\n return col;\n}\n\n/** Decode a non-formula cell's value from its `t` and body. Returns `null` for a valueless cell. */\nfunction decodeValue(\n t: string | undefined,\n vText: string | undefined,\n inlineValue: string | RichText | undefined,\n styleIdx: number,\n ctx: WorksheetReadContext,\n): CellValue {\n switch (t) {\n case \"s\": {\n if (vText === undefined) return null;\n return ctx.sharedStrings[Number(vText)] ?? \"\";\n }\n case \"inlineStr\":\n return inlineValue ?? \"\";\n case \"str\":\n return vText ?? \"\";\n case \"b\":\n return vText === undefined ? null : decodeBool(vText);\n case \"e\":\n return vText === undefined ? null : { error: vText as ErrorCode };\n default: {\n // \"n\" or the attribute absent: a number, promoted to a Date when the style is a date format.\n if (vText === undefined) return null;\n const n = Number(vText);\n return ctx.styles.isDateStyle(styleIdx) ? serialToDate(n, ctx.date1904) : n;\n }\n }\n}\n\n/** Build a formula cell: the bare `<f>` expression (matching the writer, which stripped the leading\n * `=`) plus its cached `<v>` decoded into the typed `result`. */\nfunction buildFormula(\n expr: string,\n t: string | undefined,\n vText: string | undefined,\n styleIdx: number,\n ctx: WorksheetReadContext,\n): CellValue {\n const result = vText === undefined ? undefined : decodeScalar(t, vText, styleIdx, ctx);\n return result === undefined ? { formula: expr } : { formula: expr, result };\n}\n\n/** Decode a cached formula `<v>` into the scalar `result` union (no RichText — a rich shared-string\n * result, which the writer never emits, flattens to its text). */\nfunction decodeScalar(\n t: string | undefined,\n vText: string,\n styleIdx: number,\n ctx: WorksheetReadContext,\n): number | string | boolean | Date | CellError {\n switch (t) {\n case \"b\":\n return decodeBool(vText);\n case \"e\":\n return { error: vText as ErrorCode };\n case \"str\":\n return vText;\n case \"s\": {\n const entry = ctx.sharedStrings[Number(vText)];\n if (entry === undefined) return \"\";\n return typeof entry === \"string\" ? entry : entry.richText.map((run) => run.text).join(\"\");\n }\n default: {\n const n = Number(vText);\n return ctx.styles.isDateStyle(styleIdx) ? serialToDate(n, ctx.date1904) : n;\n }\n }\n}\n\nfunction collectMerges(c: XmlCursor, container: string, merges: string[]): void {\n c.eachChild(container, (mergeCell) => {\n if (localName(mergeCell.name) === \"mergeCell\" && mergeCell.attrs.ref !== undefined) {\n merges.push(mergeCell.attrs.ref);\n } else if (!mergeCell.selfClosing) {\n c.textUntilClose(mergeCell.name);\n }\n });\n}\n\nfunction collectHyperlinks(c: XmlCursor, container: string, hyperlinks: HyperlinkRef[]): void {\n c.eachChild(container, (child) => {\n if (localName(child.name) !== \"hyperlink\") {\n if (!child.selfClosing) c.textUntilClose(child.name);\n return;\n }\n const ref = child.attrs.ref;\n const rId = relId(child);\n if (ref === undefined || rId === \"\") return;\n const tooltip = child.attrs.tooltip;\n hyperlinks.push(tooltip !== undefined ? { ref, rId, tooltip } : { ref, rId });\n });\n}\n\n/** Resolve a hyperlink record to its worksheet-rels target and set the model value on its (top-left,\n * for a range `ref`) cell, keeping that cell's already-parsed string as the display `text`. A rId\n * that doesn't resolve (malformed package) is silently skipped. */\nfunction applyHyperlink(ws: Worksheet, link: HyperlinkRef, rels: Map<string, ResolvedRel>): void {\n const rel = rels.get(link.rId);\n if (!rel) return;\n\n const topLeft = link.ref.split(\":\")[0] ?? link.ref;\n const cell = ws.getCell(topLeft);\n const text = typeof cell.value === \"string\" ? cell.value : \"\";\n cell.value =\n link.tooltip !== undefined\n ? { text, hyperlink: rel.target, tooltip: link.tooltip }\n : { text, hyperlink: rel.target };\n}\n\n/** The `r:id` relationship reference on a `<hyperlink>` element. OOXML fixes the `r` prefix, but\n * fall back to any `*:id` attribute so an unconventional namespace prefix still resolves. */\nfunction relId(el: OpenEvent): string {\n const direct = el.attrs[\"r:id\"];\n if (direct !== undefined) return direct;\n for (const key of Object.keys(el.attrs)) {\n if (localName(key) === \"id\") return el.attrs[key] ?? \"\";\n }\n return \"\";\n}\n\n/** A boolean cell's `<v>` is `1`/`0`; anything else is a malformed package, surfaced as a typed error. */\nfunction decodeBool(raw: string): boolean {\n if (raw === \"1\" || raw === \"true\" || raw === \"TRUE\") return true;\n if (raw === \"0\" || raw === \"false\" || raw === \"FALSE\") return false;\n throw new InvalidCellValueError(raw);\n}\n\n/** Parse a numeric attribute; `undefined` when absent or not a finite number. */\nfunction num(val: string | undefined): number | undefined {\n if (val === undefined) return undefined;\n const n = Number(val);\n return Number.isFinite(n) ? n : undefined;\n}\n\n/** A boolean-ish OOXML attribute (`hidden`): absent means false; `\"1\"`/`\"true\"` mean true. */\nfunction truthy(val: string | undefined): boolean {\n return val === \"1\" || val === \"true\";\n}\n","// The read orchestrator (SPEC §8): `.xlsx` bytes -> parts -> a Stage 1.2 `Workbook`. The inverse of\n// write-workbook.ts, mirroring its write order in reverse: open the package, parse the pooled parts\n// (styles, sharedStrings), read the workbook header for the sheet list + `date1904`, then populate each\n// worksheet with the shared read context, and finally lay the doc-props metadata back on top.\n\nimport { Workbook } from \"../model/index.js\";\nimport { PART_PATH, REL_TYPE } from \"./parts/constants.js\";\nimport { openPackage } from \"./read/package.js\";\nimport { applyAppProps, applyCoreProps } from \"./read/props.js\";\nimport { parseSharedStrings } from \"./read/shared-strings.js\";\nimport { parseStyles } from \"./read/styles.js\";\nimport { parseWorkbook } from \"./read/workbook.js\";\nimport { parseWorksheet } from \"./read/worksheet.js\";\n\n/** Reserved for future read options (e.g. `ignoreStyles`). None are required for v1. */\n// biome-ignore lint/suspicious/noEmptyInterface: intentionally empty; a stable extension point.\nexport interface ReadOptions {}\n\n/** Parse a buffered `.xlsx` into a `Workbook`. Environment-agnostic (no `fs`); see `readWorkbookFile`. */\nexport function readWorkbookBuffer(bytes: Uint8Array, _options?: ReadOptions): Workbook {\n const pkg = openPackage(bytes);\n const rels = pkg.workbookRels();\n\n // The pooled parts, located by relationship type so a foreign producer's file names still resolve.\n let stylesXml: string | undefined;\n let sharedStringsXml: string | undefined;\n for (const { type, target } of rels.values()) {\n if (type === REL_TYPE.styles) stylesXml = pkg.text(target);\n else if (type === REL_TYPE.sharedStrings) sharedStringsXml = pkg.text(target);\n }\n\n const styles = parseStyles(stylesXml);\n const sharedStrings = sharedStringsXml !== undefined ? parseSharedStrings(sharedStringsXml) : [];\n\n const workbookXml = pkg.text(pkg.workbookPath()) ?? \"\";\n const header = parseWorkbook(workbookXml);\n\n const wb = new Workbook();\n if (header.date1904) wb.properties.date1904 = true;\n if (header.activeTab !== undefined) wb.views = [{ activeTab: header.activeTab }];\n\n const ctx = { sharedStrings, styles, date1904: header.date1904 };\n\n for (const sheet of header.sheets) {\n const ws = wb.addWorksheet(sheet.name, { state: sheet.state });\n const target = rels.get(sheet.rId)?.target;\n if (target === undefined) continue;\n const sheetXml = pkg.text(target);\n if (sheetXml !== undefined) {\n parseWorksheet(ws, sheetXml, { ...ctx, rels: pkg.partRels(target) });\n }\n }\n\n // Doc-props sit at their conventional paths (both our writer and Excel/LibreOffice use these).\n const coreXml = pkg.text(PART_PATH.coreProps);\n if (coreXml !== undefined) applyCoreProps(wb, coreXml);\n const appXml = pkg.text(PART_PATH.appProps);\n if (appXml !== undefined) applyAppProps(wb, appXml);\n\n return wb;\n}\n\n/** Node-only convenience: read and parse a `.xlsx` from disk. Isolated here so browser bundles that\n * only use {@link readWorkbookBuffer} never pull in `node:fs`. */\nexport async function readWorkbookFile(path: string, options?: ReadOptions): Promise<Workbook> {\n const { readFile } = await import(\"node:fs/promises\");\n const bytes = await readFile(path);\n return readWorkbookBuffer(bytes, options);\n}\n","// The shared-string pool (see docs/STAGE-1.3-SPEC.md §3, docs/OOXML-NOTES.md §4). String cells store an\n// index into xl/sharedStrings.xml so a value repeated across the workbook is stored once. Plain strings\n// dedup by value; rich text dedups by a stable serialization of its runs.\n\nimport type { Color, Font, RichText } from \"../model/index.js\";\nimport { XmlWriter } from \"../xml/index.js\";\n\nconst SPREADSHEETML_NS = \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\";\n\nexport interface SharedStrings {\n /** Intern a plain string or rich text; returns its 0-based index. Repeated values return the same\n * index (but still count as a reference). */\n add(value: string | RichText): number;\n /** Total references added (the sum of `add` calls). */\n readonly count: number;\n /** Distinct entries in the pool. */\n readonly uniqueCount: number;\n /** Render xl/sharedStrings.xml, or `undefined` when the pool is empty (the part is then omitted). */\n toXml(): string | undefined;\n}\n\nexport function createSharedStrings(): SharedStrings {\n return new SharedStringsPool();\n}\n\nclass SharedStringsPool implements SharedStrings {\n private readonly index = new Map<string, number>();\n private readonly entries: (string | RichText)[] = [];\n private references = 0;\n\n add(value: string | RichText): number {\n this.references += 1;\n const key = keyFor(value);\n const existing = this.index.get(key);\n if (existing !== undefined) return existing;\n const idx = this.entries.length;\n this.index.set(key, idx);\n this.entries.push(value);\n return idx;\n }\n\n get count(): number {\n return this.references;\n }\n\n get uniqueCount(): number {\n return this.entries.length;\n }\n\n toXml(): string | undefined {\n if (this.entries.length === 0) return undefined;\n const w = new XmlWriter();\n w.open(\"sst\", {\n xmlns: SPREADSHEETML_NS,\n count: this.references,\n uniqueCount: this.entries.length,\n });\n for (const entry of this.entries) {\n w.open(\"si\");\n if (typeof entry === \"string\") {\n w.el(\"t\", entry);\n } else {\n for (const run of entry.richText) {\n w.open(\"r\");\n const props = renderRunProps(run.font);\n if (props) w.raw(props);\n w.el(\"t\", run.text);\n w.close(\"r\");\n }\n }\n w.close(\"si\");\n }\n w.close(\"sst\");\n return w.toString();\n }\n}\n\n/** Dedup key: plain strings key on their value, rich text on a stable serialization of its runs.\n * The `s:`/`r:` prefixes keep a plain string from ever colliding with a rich-text serialization. */\nfunction keyFor(value: string | RichText): string {\n return typeof value === \"string\" ? `s:${value}` : `r:${stableStringify(value.richText)}`;\n}\n\n/** Deterministic JSON-ish serialization with object keys sorted and `undefined`-valued keys dropped, so\n * two structurally identical runs (regardless of property insertion order) produce the same key. */\nfunction stableStringify(value: unknown): string {\n if (value === null || typeof value !== \"object\") {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(\",\")}]`;\n }\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj)\n .filter((k) => obj[k] !== undefined)\n .sort();\n return `{${keys.map((k) => `${JSON.stringify(k)}:${stableStringify(obj[k])}`).join(\",\")}}`;\n}\n\n/** Render a run's `<rPr>` properties from its font, or `\"\"` when there is nothing to emit. Element\n * order follows the ECMA-376 CT_RPrElt schema so Excel accepts the file without repair. */\nfunction renderRunProps(font: Font | undefined): string {\n if (!font) return \"\";\n const w = new XmlWriter({ declaration: false });\n if (font.name !== undefined) w.leaf(\"rFont\", { val: font.name });\n if (font.charset !== undefined) w.leaf(\"charset\", { val: font.charset });\n if (font.family !== undefined) w.leaf(\"family\", { val: font.family });\n if (font.bold) w.leaf(\"b\");\n if (font.italic) w.leaf(\"i\");\n if (font.strike) w.leaf(\"strike\");\n if (font.outline) w.leaf(\"outline\");\n if (font.color) renderColor(w, font.color);\n if (font.size !== undefined) w.leaf(\"sz\", { val: font.size });\n renderUnderline(w, font.underline);\n if (font.vertAlign) w.leaf(\"vertAlign\", { val: font.vertAlign });\n if (font.scheme) w.leaf(\"scheme\", { val: font.scheme });\n const inner = w.toString();\n return inner === \"\" ? \"\" : `<rPr>${inner}</rPr>`;\n}\n\nfunction renderColor(w: XmlWriter, color: Color): void {\n if (color.argb !== undefined) w.leaf(\"color\", { rgb: color.argb });\n else if (color.theme !== undefined) w.leaf(\"color\", { theme: color.theme });\n else if (color.indexed !== undefined) w.leaf(\"color\", { indexed: color.indexed });\n}\n\nfunction renderUnderline(w: XmlWriter, underline: Font[\"underline\"]): void {\n if (underline === undefined || underline === false || underline === \"none\") return;\n if (underline === true) {\n w.leaf(\"u\");\n return;\n }\n w.leaf(\"u\", { val: underline });\n}\n","// `docProps/app.xml` — extended (application) properties. The `HeadingPairs`/`TitlesOfParts`\n// vectors describe the worksheet tab names; Company/Manager ride along when set (SPEC §5).\n\nimport type { Workbook } from \"../../model/index.js\";\nimport { XmlWriter } from \"../../xml/index.js\";\nimport { NS } from \"./constants.js\";\n\nexport function renderAppProps(wb: Workbook, sheetNames: string[]): string {\n const w = new XmlWriter();\n w.open(\"Properties\", { xmlns: NS.extProps, \"xmlns:vt\": NS.docPropsVt });\n\n w.el(\"Application\", \"Microsoft Excel\");\n w.el(\"DocSecurity\", \"0\");\n w.el(\"ScaleCrop\", \"false\");\n\n w.open(\"HeadingPairs\");\n w.open(\"vt:vector\", { size: 2, baseType: \"variant\" });\n w.open(\"vt:variant\");\n w.el(\"vt:lpstr\", \"Worksheets\");\n w.close(\"vt:variant\");\n w.open(\"vt:variant\");\n w.el(\"vt:i4\", String(sheetNames.length));\n w.close(\"vt:variant\");\n w.close(\"vt:vector\");\n w.close(\"HeadingPairs\");\n\n w.open(\"TitlesOfParts\");\n w.open(\"vt:vector\", { size: sheetNames.length, baseType: \"lpstr\" });\n for (const name of sheetNames) w.el(\"vt:lpstr\", name);\n w.close(\"vt:vector\");\n w.close(\"TitlesOfParts\");\n\n if (wb.company !== undefined) w.el(\"Company\", wb.company);\n if (wb.manager !== undefined) w.el(\"Manager\", wb.manager);\n w.el(\"LinksUpToDate\", \"false\");\n w.el(\"SharedDoc\", \"false\");\n w.el(\"HyperlinksChanged\", \"false\");\n w.el(\"AppVersion\", \"1.0000\");\n\n w.close(\"Properties\");\n return w.toString();\n}\n","// `[Content_Types].xml` — declares the MIME type of every part in the package. Two `<Default>`s cover\n// the `.rels` and `.xml` extensions; one `<Override>` names each concrete part. The sharedStrings\n// override is emitted only when that part exists (SPEC §5).\n\nimport { XmlWriter } from \"../../xml/index.js\";\nimport { CONTENT_TYPE, NS, PART_PATH } from \"./constants.js\";\n\nexport interface ContentTypesInput {\n /** Worksheet file names under `xl/worksheets/` (e.g. `[\"sheet1.xml\", \"sheet2.xml\"]`). */\n worksheetFiles: string[];\n hasSharedStrings: boolean;\n}\n\nexport function renderContentTypes(input: ContentTypesInput): string {\n const w = new XmlWriter();\n w.open(\"Types\", { xmlns: NS.contentTypes });\n\n w.leaf(\"Default\", { Extension: \"rels\", ContentType: CONTENT_TYPE.rels });\n w.leaf(\"Default\", { Extension: \"xml\", ContentType: CONTENT_TYPE.xml });\n\n w.leaf(\"Override\", { PartName: `/${PART_PATH.workbook}`, ContentType: CONTENT_TYPE.workbook });\n for (const file of input.worksheetFiles) {\n w.leaf(\"Override\", {\n PartName: `/xl/worksheets/${file}`,\n ContentType: CONTENT_TYPE.worksheet,\n });\n }\n w.leaf(\"Override\", { PartName: `/${PART_PATH.styles}`, ContentType: CONTENT_TYPE.styles });\n if (input.hasSharedStrings) {\n w.leaf(\"Override\", {\n PartName: `/${PART_PATH.sharedStrings}`,\n ContentType: CONTENT_TYPE.sharedStrings,\n });\n }\n w.leaf(\"Override\", { PartName: `/${PART_PATH.theme}`, ContentType: CONTENT_TYPE.theme });\n w.leaf(\"Override\", { PartName: `/${PART_PATH.coreProps}`, ContentType: CONTENT_TYPE.coreProps });\n w.leaf(\"Override\", { PartName: `/${PART_PATH.appProps}`, ContentType: CONTENT_TYPE.extProps });\n\n w.close(\"Types\");\n return w.toString();\n}\n","// `docProps/core.xml` — Dublin Core document metadata. Dates are W3CDTF (ISO 8601 without\n// milliseconds), tagged `xsi:type=\"dcterms:W3CDTF\"`. Optional fields are omitted when unset (SPEC §5).\n\nimport type { Workbook } from \"../../model/index.js\";\nimport { XmlWriter } from \"../../xml/index.js\";\nimport { NS } from \"./constants.js\";\n\n/** W3CDTF: `YYYY-MM-DDTHH:mm:ssZ` (drop the `.sssZ` millisecond fraction `toISOString` adds). */\nexport function toW3CDTF(date: Date): string {\n return `${date.toISOString().replace(/\\.\\d{3}Z$/, \"Z\")}`;\n}\n\nexport function renderCoreProps(wb: Workbook): string {\n const w = new XmlWriter();\n w.open(\"cp:coreProperties\", {\n \"xmlns:cp\": NS.coreProps,\n \"xmlns:dc\": NS.dc,\n \"xmlns:dcterms\": NS.dcterms,\n \"xmlns:dcmitype\": NS.dcmitype,\n \"xmlns:xsi\": NS.xsi,\n });\n\n if (wb.creator !== undefined) w.el(\"dc:creator\", wb.creator);\n if (wb.title !== undefined) w.el(\"dc:title\", wb.title);\n if (wb.subject !== undefined) w.el(\"dc:subject\", wb.subject);\n if (wb.description !== undefined) w.el(\"dc:description\", wb.description);\n if (wb.keywords !== undefined) w.el(\"cp:keywords\", wb.keywords);\n if (wb.category !== undefined) w.el(\"cp:category\", wb.category);\n if (wb.lastModifiedBy !== undefined) w.el(\"cp:lastModifiedBy\", wb.lastModifiedBy);\n w.el(\"dcterms:created\", toW3CDTF(wb.created), { \"xsi:type\": \"dcterms:W3CDTF\" });\n w.el(\"dcterms:modified\", toW3CDTF(wb.modified), { \"xsi:type\": \"dcterms:W3CDTF\" });\n\n w.close(\"cp:coreProperties\");\n return w.toString();\n}\n","// `_rels/.rels` — the package root relationships: the office document (workbook), and the two\n// document-property parts (core + app). rIds are local to this file (SPEC §5).\n\nimport { XmlWriter } from \"../../xml/index.js\";\nimport { NS, PART_PATH, REL_TYPE } from \"./constants.js\";\n\nexport function renderRootRels(): string {\n const w = new XmlWriter();\n w.open(\"Relationships\", { xmlns: NS.packageRels });\n w.leaf(\"Relationship\", {\n Id: \"rId1\",\n Type: REL_TYPE.officeDocument,\n Target: PART_PATH.workbook,\n });\n w.leaf(\"Relationship\", {\n Id: \"rId2\",\n Type: REL_TYPE.coreProps,\n Target: PART_PATH.coreProps,\n });\n w.leaf(\"Relationship\", {\n Id: \"rId3\",\n Type: REL_TYPE.extProps,\n Target: PART_PATH.appProps,\n });\n w.close(\"Relationships\");\n return w.toString();\n}\n","// `xl/theme/theme1.xml` — a fixed, known-good default Office theme shipped verbatim as a constant\n// (SPEC §5; ExcelJS does the same). Colours in styles.xml reference this theme's clrScheme by index\n// (`<color theme=\"n\"/>`), so it must be present and schema-valid or Excel prompts to repair.\n\nconst THEME1_XML = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\"><a:themeElements><a:clrScheme name=\"Office\"><a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1><a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1><a:dk2><a:srgbClr val=\"44546A\"/></a:dk2><a:lt2><a:srgbClr val=\"E7E6E6\"/></a:lt2><a:accent1><a:srgbClr val=\"4472C4\"/></a:accent1><a:accent2><a:srgbClr val=\"ED7D31\"/></a:accent2><a:accent3><a:srgbClr val=\"A5A5A5\"/></a:accent3><a:accent4><a:srgbClr val=\"FFC000\"/></a:accent4><a:accent5><a:srgbClr val=\"5B9BD5\"/></a:accent5><a:accent6><a:srgbClr val=\"70AD47\"/></a:accent6><a:hlink><a:srgbClr val=\"0563C1\"/></a:hlink><a:folHlink><a:srgbClr val=\"954F72\"/></a:folHlink></a:clrScheme><a:fontScheme name=\"Office\"><a:majorFont><a:latin typeface=\"Calibri Light\" panose=\"020F0302020204030204\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/></a:majorFont><a:minorFont><a:latin typeface=\"Calibri\" panose=\"020F0502020204030204\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/></a:minorFont></a:fontScheme><a:fmtScheme name=\"Office\"><a:fillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"110000\"/><a:satMod val=\"105000\"/><a:tint val=\"67000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"103000\"/><a:tint val=\"73000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"109000\"/><a:tint val=\"81000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:satMod val=\"103000\"/><a:lumMod val=\"102000\"/><a:tint val=\"94000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:satMod val=\"110000\"/><a:lumMod val=\"100000\"/><a:shade val=\"100000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"99000\"/><a:satMod val=\"120000\"/><a:shade val=\"78000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w=\"6350\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"12700\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"19050\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad=\"57150\" dist=\"19050\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"63000\"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"><a:tint val=\"95000\"/><a:satMod val=\"170000\"/></a:schemeClr></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"93000\"/><a:satMod val=\"150000\"/><a:shade val=\"98000\"/><a:lumMod val=\"102000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:tint val=\"98000\"/><a:satMod val=\"130000\"/><a:shade val=\"90000\"/><a:lumMod val=\"103000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"63000\"/><a:satMod val=\"120000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/></a:theme>`;\n\n/** The default theme part, returned as-is. Pure and side-effect free (SPEC §5). */\nexport function renderTheme(): string {\n return THEME1_XML;\n}\n","// `xl/workbook.xml` — the workbook part: the `<sheets>` list (each `<sheet>` links to its worksheet\n// part via `r:id`), `<workbookPr date1904=…>` when the 1904 system is set, and a minimal `<bookViews>`.\n// The `r:id`s here resolve against xl/_rels/workbook.xml.rels, so they must match the SheetRel rIds\n// assigned once by the orchestrator (SPEC §5).\n\nimport type { Workbook } from \"../../model/index.js\";\nimport { XmlWriter } from \"../../xml/index.js\";\nimport type { SheetRel } from \"./constants.js\";\nimport { NS } from \"./constants.js\";\n\nexport function renderWorkbook(wb: Workbook, sheets: SheetRel[]): string {\n const w = new XmlWriter();\n w.open(\"workbook\", { xmlns: NS.spreadsheetml, \"xmlns:r\": NS.relationships });\n\n if (wb.properties.date1904) {\n w.leaf(\"workbookPr\", { date1904: true });\n }\n\n const activeTab = typeof wb.views[0]?.activeTab === \"number\" ? wb.views[0].activeTab : undefined;\n w.open(\"bookViews\");\n w.leaf(\"workbookView\", { activeTab });\n w.close(\"bookViews\");\n\n w.open(\"sheets\");\n for (const sheet of sheets) {\n w.leaf(\"sheet\", {\n name: sheet.name,\n sheetId: sheet.sheetId,\n state: sheet.state === \"visible\" ? undefined : sheet.state,\n \"r:id\": sheet.rId,\n });\n }\n w.close(\"sheets\");\n\n if (wb.calcProperties.fullCalcOnLoad) {\n w.leaf(\"calcPr\", { calcId: 0, fullCalcOnLoad: true });\n }\n\n w.close(\"workbook\");\n return w.toString();\n}\n","// `xl/_rels/workbook.xml.rels` — relationships from the workbook to its worksheets, styles,\n// sharedStrings (when present) and theme. Worksheet rIds here MUST equal the `r:id`s emitted in\n// workbook.xml; the orchestrator assigns them once and passes the same list to both (SPEC §5).\n\nimport { XmlWriter } from \"../../xml/index.js\";\nimport type { WorkbookRel } from \"./constants.js\";\nimport { NS } from \"./constants.js\";\n\nexport function renderWorkbookRels(rels: WorkbookRel[]): string {\n const w = new XmlWriter();\n w.open(\"Relationships\", { xmlns: NS.packageRels });\n for (const rel of rels) {\n w.leaf(\"Relationship\", { Id: rel.rId, Type: rel.type, Target: rel.target });\n }\n w.close(\"Relationships\");\n return w.toString();\n}\n","// `xl/worksheets/_rels/sheetN.xml.rels` — a worksheet's own relationships, currently only its\n// external hyperlinks. The `Id`s here MUST equal the `r:id`s emitted in the sheet's `<hyperlinks>`\n// block; `worksheet.ts` assigns them in one pass and passes the same list to both. rIds live in the\n// worksheet's local namespace (rId1, rId2, … per sheet), independent of the workbook rels. Mirrors\n// `workbook-rels.ts`.\n\nimport { XmlWriter } from \"../../xml/index.js\";\nimport type { WorksheetRel } from \"./constants.js\";\nimport { NS, REL_TYPE } from \"./constants.js\";\n\nexport function renderWorksheetRels(rels: WorksheetRel[]): string {\n const w = new XmlWriter();\n w.open(\"Relationships\", { xmlns: NS.packageRels });\n for (const rel of rels) {\n w.leaf(\"Relationship\", {\n Id: rel.rId,\n Type: REL_TYPE.hyperlink,\n Target: rel.target,\n TargetMode: rel.mode,\n });\n }\n w.close(\"Relationships\");\n return w.toString();\n}\n","// `xl/worksheets/sheetN.xml` — the grid (SPEC §5, OOXML-NOTES §3). Serialized from a worksheet's\n// `model` snapshot plus `dimensions`. Rendering a cell interns its value into the shared-strings pool\n// (when enabled) and its style into the styles pool, so this MUST run before those parts are rendered.\n//\n// Cell `t` mapping (from CellModel.type / a formula's cached-result type):\n// string -> \"s\" (shared index) or \"inlineStr\" number -> \"n\" (attr omitted, the default)\n// boolean -> \"b\" date -> \"n\" with a date numFmt (serial value)\n// error -> \"e\" richtext -> shared string (or inline runs)\n// hyperlink-> its display text as a string formula -> <f>expr</f> + typed cached <v>\n// merge-slave / styled-empty -> empty <c> carrying only its style null (no style) -> skipped\n\nimport type { CellModel } from \"../../model/index.js\";\nimport { CellType, type RichText, type Worksheet } from \"../../model/index.js\";\nimport { XmlWriter } from \"../../xml/index.js\";\nimport { dateToSerial } from \"../date.js\";\nimport type { SharedStrings } from \"../shared-strings.js\";\nimport type { Styles } from \"../styles.js\";\nimport type { WorksheetRel } from \"./constants.js\";\nimport { NS } from \"./constants.js\";\nimport { renderWorksheetRels } from \"./worksheet-rels.js\";\n\nexport interface WorksheetContext {\n styles: Styles;\n sharedStrings: SharedStrings;\n useSharedStrings: boolean;\n date1904: boolean;\n}\n\n/** The rendered worksheet plus its `.rels` doc, if the sheet has any relationships (hyperlinks). */\nexport interface RenderedWorksheet {\n xml: string;\n /** Rendered `xl/worksheets/_rels/sheetN.xml.rels`; `undefined` when the sheet has no hyperlinks. */\n rels?: string;\n}\n\n/** A cell hyperlink collected during the sheetData pass, emitted as a `<hyperlink>` after merges. */\ninterface HyperlinkRecord {\n ref: string;\n target: string;\n tooltip?: string;\n}\n\n/** Applied to a Date cell whose style carries no explicit number format, so Excel shows a date rather\n * than the raw serial. Built-in id 14, so it adds no custom `<numFmt>` entry. */\nconst DEFAULT_DATE_NUMFMT = \"mm-dd-yy\";\n\nexport function renderWorksheet(ws: Worksheet, ctx: WorksheetContext): RenderedWorksheet {\n const model = ws.model;\n const w = new XmlWriter();\n w.open(\"worksheet\", { xmlns: NS.spreadsheetml, \"xmlns:r\": NS.relationships });\n\n w.leaf(\"dimension\", { ref: ws.dimensions.range });\n\n w.open(\"sheetViews\");\n w.leaf(\"sheetView\", {\n workbookViewId: 0,\n showGridLines: model.properties.showGridLines === false ? false : undefined,\n });\n w.close(\"sheetViews\");\n\n w.leaf(\"sheetFormatPr\", {\n defaultRowHeight: model.properties.defaultRowHeight ?? 15,\n defaultColWidth: model.properties.defaultColWidth,\n });\n\n const hyperlinks: HyperlinkRecord[] = [];\n renderCols(w, model.columns, ctx);\n renderSheetData(w, model.rows, ctx, hyperlinks);\n renderMergeCells(w, model.merges);\n // CT_Worksheet order: `<hyperlinks>` sits after `<mergeCells>`.\n const rels = renderHyperlinks(w, hyperlinks);\n\n w.close(\"worksheet\");\n return { xml: w.toString(), rels };\n}\n\nfunction renderCols(\n w: XmlWriter,\n columns: Worksheet[\"model\"][\"columns\"],\n ctx: WorksheetContext,\n): void {\n if (!columns || columns.length === 0) return;\n\n const fragments: string[] = [];\n for (const range of columns) {\n const styleId = range.style ? ctx.styles.addStyle(range.style) : 0;\n const hasWidth = range.width !== undefined;\n if (!hasWidth && !range.hidden && !range.outlineLevel && styleId === 0) continue;\n\n const col = new XmlWriter({ declaration: false });\n col.leaf(\"col\", {\n min: range.min,\n max: range.max,\n width: range.width,\n customWidth: hasWidth ? true : undefined,\n style: styleId !== 0 ? styleId : undefined,\n hidden: range.hidden || undefined,\n outlineLevel: range.outlineLevel || undefined,\n });\n fragments.push(col.toString());\n }\n\n if (fragments.length === 0) return;\n w.open(\"cols\");\n for (const f of fragments) w.raw(f);\n w.close(\"cols\");\n}\n\nfunction renderSheetData(\n w: XmlWriter,\n rows: Worksheet[\"model\"][\"rows\"],\n ctx: WorksheetContext,\n hyperlinks: HyperlinkRecord[],\n): void {\n w.open(\"sheetData\");\n for (const row of rows) {\n const styleId = row.style ? ctx.styles.addStyle(row.style) : 0;\n\n let cellsXml = \"\";\n for (const cell of row.cells) {\n cellsXml += renderCell(cell, ctx, hyperlinks);\n }\n\n const hasAttrs =\n row.height !== undefined || row.hidden || (row.outlineLevel ?? 0) !== 0 || styleId !== 0;\n if (cellsXml === \"\" && !hasAttrs) continue;\n\n w.open(\"row\", {\n r: row.number,\n ht: row.height,\n customHeight: row.height !== undefined ? true : undefined,\n hidden: row.hidden || undefined,\n outlineLevel: row.outlineLevel || undefined,\n s: styleId !== 0 ? styleId : undefined,\n customFormat: styleId !== 0 ? true : undefined,\n });\n w.raw(cellsXml);\n w.close(\"row\");\n }\n w.close(\"sheetData\");\n}\n\n/** Render one `<c>` element, or `\"\"` when the cell contributes nothing (a null/merge cell with the\n * default style). Value interning into the shared-strings/styles pools happens here. */\nfunction renderCell(cell: CellModel, ctx: WorksheetContext, hyperlinks: HyperlinkRecord[]): string {\n const styleId = cell.style ? ctx.styles.addStyle(cell.style) : 0;\n const r = cell.address;\n\n switch (cell.type) {\n case CellType.Null:\n case CellType.Merge:\n return styleId !== 0 ? leafCell(r, styleId) : \"\";\n\n case CellType.Number:\n return valueCell(r, styleId, undefined, String(cell.value as number));\n\n case CellType.Boolean:\n return valueCell(r, styleId, \"b\", (cell.value as boolean) ? \"1\" : \"0\");\n\n case CellType.Date: {\n const s = cell.style?.numFmt\n ? styleId\n : ctx.styles.addStyle({ ...cell.style, numFmt: DEFAULT_DATE_NUMFMT });\n return valueCell(r, s, undefined, String(dateToSerial(cell.value as Date, ctx.date1904)));\n }\n\n case CellType.Error:\n return valueCell(r, styleId, \"e\", (cell.value as { error: string }).error);\n\n case CellType.String:\n return stringCell(r, styleId, cell.value as string, ctx);\n\n case CellType.Hyperlink: {\n const link = cell.value as { text: string; hyperlink: string; tooltip?: string };\n hyperlinks.push({ ref: r, target: link.hyperlink, tooltip: link.tooltip });\n // Still emit the display text as a normal string cell — the link is a sheet-level record.\n return stringCell(r, styleId, link.text, ctx);\n }\n\n case CellType.RichText:\n return richTextCell(r, styleId, cell.value as RichText, ctx);\n\n case CellType.Formula:\n return formulaCell(r, styleId, cell, ctx);\n\n default:\n return styleId !== 0 ? leafCell(r, styleId) : \"\";\n }\n}\n\n/** `<c r s t><v>raw</v></c>` — `raw` is already a serialized number/token, escaped on write. */\nfunction valueCell(r: string, s: number, t: string | undefined, raw: string): string {\n const w = new XmlWriter({ declaration: false });\n w.open(\"c\", { r, s: s !== 0 ? s : undefined, t });\n w.el(\"v\", raw);\n w.close(\"c\");\n return w.toString();\n}\n\n/** `<c r s/>` — an empty cell carrying only its style (merge slave / styled blank). */\nfunction leafCell(r: string, s: number): string {\n const w = new XmlWriter({ declaration: false });\n w.leaf(\"c\", { r, s });\n return w.toString();\n}\n\nfunction stringCell(r: string, s: number, value: string, ctx: WorksheetContext): string {\n if (ctx.useSharedStrings) {\n return valueCell(r, s, \"s\", String(ctx.sharedStrings.add(value)));\n }\n const w = new XmlWriter({ declaration: false });\n w.open(\"c\", { r, s: s !== 0 ? s : undefined, t: \"inlineStr\" });\n w.open(\"is\");\n w.el(\"t\", value);\n w.close(\"is\");\n w.close(\"c\");\n return w.toString();\n}\n\nfunction richTextCell(r: string, s: number, value: RichText, ctx: WorksheetContext): string {\n if (ctx.useSharedStrings) {\n return valueCell(r, s, \"s\", String(ctx.sharedStrings.add(value)));\n }\n // Inline fallback flattens the runs to plain text (formatting survives only via shared strings).\n const text = value.richText.map((run) => run.text).join(\"\");\n return stringCell(r, s, text, { ...ctx, useSharedStrings: false });\n}\n\nfunction formulaCell(r: string, s: number, cell: CellModel, ctx: WorksheetContext): string {\n const expr = (cell.formula ?? \"\").replace(/^=/, \"\");\n const result = cell.result;\n\n let t: string | undefined;\n let cachedV: string | undefined;\n if (result === undefined) {\n cachedV = undefined;\n } else if (typeof result === \"number\") {\n cachedV = String(result);\n } else if (typeof result === \"boolean\") {\n t = \"b\";\n cachedV = result ? \"1\" : \"0\";\n } else if (result instanceof Date) {\n cachedV = String(dateToSerial(result, ctx.date1904));\n } else if (typeof result === \"object\" && result !== null && \"error\" in result) {\n t = \"e\";\n cachedV = (result as { error: string }).error;\n } else {\n t = \"str\";\n cachedV = String(result);\n }\n\n const w = new XmlWriter({ declaration: false });\n w.open(\"c\", { r, s: s !== 0 ? s : undefined, t });\n w.el(\"f\", expr);\n if (cachedV !== undefined) w.el(\"v\", cachedV);\n w.close(\"c\");\n return w.toString();\n}\n\nfunction renderMergeCells(w: XmlWriter, merges: string[]): void {\n if (merges.length === 0) return;\n w.open(\"mergeCells\", { count: merges.length });\n for (const ref of merges) w.leaf(\"mergeCell\", { ref });\n w.close(\"mergeCells\");\n}\n\n/** Emit the `<hyperlinks>` block, assigning each link a worksheet-local `rId${n}`. Returns the\n * matching `.rels` doc (or `undefined` when the sheet has no hyperlinks), so the same rId space\n * backs both the `<hyperlink r:id>` and the relationship `Id`. */\nfunction renderHyperlinks(w: XmlWriter, hyperlinks: HyperlinkRecord[]): string | undefined {\n if (hyperlinks.length === 0) return undefined;\n\n const rels: WorksheetRel[] = [];\n w.open(\"hyperlinks\");\n hyperlinks.forEach((h, i) => {\n const rId = `rId${i + 1}`;\n w.leaf(\"hyperlink\", { ref: h.ref, \"r:id\": rId, tooltip: h.tooltip });\n rels.push({ rId, target: h.target, mode: \"External\" });\n });\n w.close(\"hyperlinks\");\n\n return renderWorksheetRels(rels);\n}\n","// The write orchestrator (SPEC §7): in-memory Workbook -> the OOXML part set -> zip -> Uint8Array.\n// Single pass, mirroring OOXML-NOTES §2's write order: worksheets first (they populate the shared-\n// strings and styles pools as cells emit), then the pooled parts, then the wiring parts.\n//\n// Relationship-id discipline: sheet rIds (rId1..N) are assigned once and shared between workbook.xml\n// and workbook.xml.rels; styles/sharedStrings/theme take the ids after them. sharedStrings only gets\n// an id (and a part) when the pool is non-empty.\n\nimport type { Workbook } from \"../model/index.js\";\nimport { writeZipArchive, type ZipEntries } from \"../zip-layer.js\";\nimport { renderAppProps } from \"./parts/app-props.js\";\nimport type { SheetRel, WorkbookRel } from \"./parts/constants.js\";\nimport { PART_PATH, REL_TYPE } from \"./parts/constants.js\";\nimport { renderContentTypes } from \"./parts/content-types.js\";\nimport { renderCoreProps } from \"./parts/core-props.js\";\nimport { renderRootRels } from \"./parts/root-rels.js\";\nimport { renderTheme } from \"./parts/theme.js\";\nimport { renderWorkbook } from \"./parts/workbook.js\";\nimport { renderWorkbookRels } from \"./parts/workbook-rels.js\";\nimport { type RenderedWorksheet, renderWorksheet } from \"./parts/worksheet.js\";\nimport { createSharedStrings } from \"./shared-strings.js\";\nimport { createStyles, type Styles } from \"./styles.js\";\n\nexport interface WriteOptions {\n /** Emit a shared-string table (string cells store an index). When `false`, strings render inline.\n * Default `true`. */\n useSharedStrings?: boolean;\n /** Intern cell/row/column styles into styles.xml. When `false`, cells render unstyled (`s` omitted)\n * and styles.xml carries only the mandatory baseline. Default `true`. */\n useStyles?: boolean;\n}\n\n/** Serialize a workbook to `.xlsx` bytes. Environment-agnostic (no `fs`); see `writeWorkbookFile`. */\nexport function writeWorkbookBuffer(wb: Workbook, options?: WriteOptions): Uint8Array {\n const useSharedStrings = options?.useSharedStrings !== false;\n const useStyles = options?.useStyles !== false;\n const date1904 = wb.properties.date1904 === true;\n\n const worksheets = wb.worksheets;\n const sheetRels: SheetRel[] = worksheets.map((ws, i) => ({\n rId: `rId${i + 1}`,\n fileName: `sheet${i + 1}.xml`,\n sheetId: ws.id,\n name: ws.name,\n state: ws.state,\n }));\n\n const sharedStrings = createSharedStrings();\n const styles = createStyles();\n // When styles are disabled, cells intern nothing (always `s=0`); styles.xml still ships the baseline.\n const cellStyles: Styles = useStyles\n ? styles\n : { addStyle: () => 0, toXml: styles.toXml.bind(styles) };\n\n const ctx = { styles: cellStyles, sharedStrings, useSharedStrings, date1904 };\n\n // 1. Worksheets first — this is what fills the shared-strings and styles pools.\n const worksheetXml = new Map<string, RenderedWorksheet>();\n worksheets.forEach((ws, i) => {\n worksheetXml.set(sheetRels[i]!.fileName, renderWorksheet(ws, ctx));\n });\n\n // 2. Now the pools are populated: decide whether a sharedStrings part exists.\n const sharedStringsXml = useSharedStrings ? sharedStrings.toXml() : undefined;\n const hasSharedStrings = sharedStringsXml !== undefined;\n\n // 3. Assign the remaining rIds after the sheets, then wire the workbook rels.\n let counter = worksheets.length;\n const stylesRId = `rId${++counter}`;\n const sharedRId = hasSharedStrings ? `rId${++counter}` : undefined;\n const themeRId = `rId${++counter}`;\n\n const workbookRels: WorkbookRel[] = sheetRels.map((s) => ({\n rId: s.rId,\n type: REL_TYPE.worksheet,\n target: `worksheets/${s.fileName}`,\n }));\n workbookRels.push({ rId: stylesRId, type: REL_TYPE.styles, target: \"styles.xml\" });\n if (sharedRId) {\n workbookRels.push({\n rId: sharedRId,\n type: REL_TYPE.sharedStrings,\n target: \"sharedStrings.xml\",\n });\n }\n workbookRels.push({ rId: themeRId, type: REL_TYPE.theme, target: \"theme/theme1.xml\" });\n\n // 4. Assemble every part.\n const enc = new TextEncoder();\n const entries: ZipEntries = new Map();\n const put = (path: string, xml: string) => entries.set(path, enc.encode(xml));\n\n put(\n PART_PATH.contentTypes,\n renderContentTypes({ worksheetFiles: sheetRels.map((s) => s.fileName), hasSharedStrings }),\n );\n put(PART_PATH.rootRels, renderRootRels());\n put(PART_PATH.coreProps, renderCoreProps(wb));\n put(\n PART_PATH.appProps,\n renderAppProps(\n wb,\n sheetRels.map((s) => s.name),\n ),\n );\n put(PART_PATH.workbook, renderWorkbook(wb, sheetRels));\n put(PART_PATH.workbookRels, renderWorkbookRels(workbookRels));\n put(PART_PATH.styles, styles.toXml());\n if (sharedStringsXml !== undefined) put(PART_PATH.sharedStrings, sharedStringsXml);\n put(PART_PATH.theme, renderTheme());\n for (const [file, { xml, rels }] of worksheetXml) {\n put(`xl/worksheets/${file}`, xml);\n // The worksheet `.rels` file is covered by the existing `<Default Extension=\"rels\" …>` in\n // [Content_Types].xml, so no content-types change is needed.\n if (rels !== undefined) put(`xl/worksheets/_rels/${file}.rels`, rels);\n }\n\n return writeZipArchive(entries);\n}\n\n/** Node-only convenience: serialize and write to disk. Isolated here so browser bundles that only\n * use {@link writeWorkbookBuffer} never pull in `node:fs`. */\nexport async function writeWorkbookFile(\n wb: Workbook,\n path: string,\n options?: WriteOptions,\n): Promise<void> {\n const bytes = writeWorkbookBuffer(wb, options);\n const { writeFile } = await import(\"node:fs/promises\");\n await writeFile(path, bytes);\n}\n","/**\n * @alosha/xlsx — a modern TypeScript library for reading and writing XLSX\n * spreadsheets, inspired by exceljs.\n *\n * This is the public entry point: the Stage 1.2 document model plus the Stage 1.3 OOXML writer. The\n * writer is exposed two ways — the free functions from `./xlsx` (the environment-agnostic core) and\n * an ExcelJS-style `workbook.xlsx.writeBuffer/writeFile` accessor attached here at the composition\n * root, so the model layer keeps no dependency on the serializer.\n */\n\nimport { Workbook } from \"./model/index.js\";\nimport {\n type ReadOptions,\n readWorkbookBuffer,\n readWorkbookFile,\n type WriteOptions,\n writeWorkbookBuffer,\n writeWorkbookFile,\n} from \"./xlsx/index.js\";\n\nexport * from \"./address/index.js\";\nexport * from \"./errors.js\";\nexport * from \"./model/index.js\";\nexport * from \"./xlsx/index.js\";\n\n/** A source of chunks for {@link XlsxAccessor.read}; a Node `Readable` satisfies this structurally. */\ntype ByteStream = AsyncIterable<Uint8Array>;\n\n/** The ExcelJS-compatible read/write surface reached via `workbook.xlsx`. `load`/`readFile`/`read`\n * mutate the receiving workbook in place and return it, matching ExcelJS. */\nexport interface XlsxAccessor {\n /** Serialize the workbook to `.xlsx` bytes. Async to mirror ExcelJS; wraps the sync core. */\n writeBuffer(options?: WriteOptions): Promise<Uint8Array>;\n /** Node-only: serialize and write to `path`. */\n writeFile(path: string, options?: WriteOptions): Promise<void>;\n /** Parse `.xlsx` bytes into this workbook (replaces its contents), returning it. */\n load(data: Uint8Array, options?: ReadOptions): Promise<Workbook>;\n /** Node-only: read and parse a `.xlsx` from `path` into this workbook, returning it. */\n readFile(path: string, options?: ReadOptions): Promise<Workbook>;\n /** Drain a byte stream (e.g. a Node `Readable`) and parse it into this workbook, returning it. */\n read(stream: ByteStream, options?: ReadOptions): Promise<Workbook>;\n}\n\ndeclare module \"./model/workbook.js\" {\n interface Workbook {\n /** ExcelJS-style read/write accessor (see {@link XlsxAccessor}). */\n readonly xlsx: XlsxAccessor;\n }\n}\n\n/** Concatenate a byte stream's chunks into a single buffer (no `fs`; browser-safe). */\nasync function drainStream(stream: ByteStream): Promise<Uint8Array> {\n const chunks: Uint8Array[] = [];\n let total = 0;\n for await (const chunk of stream) {\n chunks.push(chunk);\n total += chunk.length;\n }\n const out = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n out.set(chunk, offset);\n offset += chunk.length;\n }\n return out;\n}\n\nObject.defineProperty(Workbook.prototype, \"xlsx\", {\n configurable: true,\n get(this: Workbook): XlsxAccessor {\n return {\n writeBuffer: (options?: WriteOptions) => Promise.resolve(writeWorkbookBuffer(this, options)),\n writeFile: (path: string, options?: WriteOptions) => writeWorkbookFile(this, path, options),\n load: (data: Uint8Array, options?: ReadOptions) => {\n this.model = readWorkbookBuffer(data, options).model;\n return Promise.resolve(this);\n },\n readFile: async (path: string, options?: ReadOptions) => {\n this.model = (await readWorkbookFile(path, options)).model;\n return this;\n },\n read: async (stream: ByteStream, options?: ReadOptions) => {\n this.model = readWorkbookBuffer(await drainStream(stream), options).model;\n return this;\n },\n };\n },\n});\n\n/** The semantic version of the library. */\nexport const version = \"0.0.0\";\n"]}