@ricsam/excel-to-formula-engine 0.1.1 → 0.2.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,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/xlsx/package.ts", "../src/a1.ts", "../src/xlsx/worksheet.ts", "../src/xlsx/workbook.ts", "../src/xlsx/styles.ts", "../src/translate/formula.ts", "../src/translate/conditional-format.ts", "../src/translate/dates.ts", "../src/convert.ts", "../index.ts"],
3
+ "sources": ["../src/xlsx/package.ts", "../src/a1.ts", "../src/xlsx/worksheet.ts", "../src/xlsx/workbook.ts", "../src/xlsx/styles.ts", "../src/translate/formula.ts", "../src/translate/conditional-format.ts", "../src/translate/dates.ts", "../src/convert.ts", "../src/csv/parse.ts", "../src/csv/convert.ts", "../index.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * Reads the OPC (zip) container of an .xlsx file and exposes its parts as\n * parsed XML.\n */\n\nimport { unzipSync, strFromU8 } from \"fflate\";\nimport { XMLParser } from \"fast-xml-parser\";\n\nexport type XmlNode = Record<string, unknown>;\n\nconst parser = new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: \"@\",\n // Repeating elements are NOT forced into arrays here: the same tag name can\n // be a container in one part and a repeating element in another (<color> is\n // one of each). Every read site wraps with asArray() instead, which is\n // correct for both shapes.\n // Cell text must survive exactly as stored: Excel writes \"007\" and \" x \" and\n // both must round-trip.\n parseTagValue: false,\n parseAttributeValue: false,\n trimValues: false,\n processEntities: true,\n});\n\nexport interface XlsxPackage {\n /** Raw part bytes keyed by zip path, e.g. `\"xl/worksheets/sheet1.xml\"`. */\n readonly files: Map<string, Uint8Array>;\n /** Parse a part as XML, or undefined when the part is absent. */\n xml(path: string): XmlNode | undefined;\n text(path: string): string | undefined;\n has(path: string): boolean;\n /** Every part path beginning with the given prefix. */\n list(prefix: string): string[];\n}\n\nexport async function readXlsxPackage(\n source: Blob | ArrayBuffer | Uint8Array\n): Promise<XlsxPackage> {\n const bytes = await toBytes(source);\n let unzipped: Record<string, Uint8Array>;\n try {\n unzipped = unzipSync(bytes);\n } catch (cause) {\n throw new Error(\n \"Could not read the file as an .xlsx package. Legacy .xls files and \" +\n \"password-protected workbooks are not supported.\",\n { cause }\n );\n }\n\n const files = new Map<string, Uint8Array>();\n for (const [path, content] of Object.entries(unzipped)) {\n // Zip paths are sometimes written with a leading slash or backslashes.\n files.set(normalizePath(path), content);\n }\n\n if (!files.has(\"xl/workbook.xml\")) {\n throw new Error(\n \"The file is a zip archive but does not contain xl/workbook.xml, so it \" +\n \"is not an Excel workbook.\"\n );\n }\n\n const xmlCache = new Map<string, XmlNode | undefined>();\n\n return {\n files,\n text(path) {\n const content = files.get(normalizePath(path));\n return content ? strFromU8(content) : undefined;\n },\n xml(path) {\n const key = normalizePath(path);\n if (xmlCache.has(key)) {\n return xmlCache.get(key);\n }\n const content = files.get(key);\n const parsed = content ? (parser.parse(strFromU8(content)) as XmlNode) : undefined;\n xmlCache.set(key, parsed);\n return parsed;\n },\n has(path) {\n return files.has(normalizePath(path));\n },\n list(prefix) {\n const normalized = normalizePath(prefix);\n return Array.from(files.keys()).filter((path) =>\n path.startsWith(normalized)\n );\n },\n };\n}\n\nfunction normalizePath(path: string): string {\n return path.replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\");\n}\n\nasync function toBytes(\n source: Blob | ArrayBuffer | Uint8Array\n): Promise<Uint8Array> {\n if (source instanceof Uint8Array) {\n return source;\n }\n if (source instanceof ArrayBuffer) {\n return new Uint8Array(source);\n }\n return new Uint8Array(await source.arrayBuffer());\n}\n\n/**\n * fast-xml-parser gives a single child as an object and repeated children as an\n * array. Parts we do not force into arrays go through this.\n */\nexport function asArray<T>(value: T | T[] | undefined): T[] {\n if (value === undefined || value === null) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\nexport function attr(node: unknown, name: string): string | undefined {\n if (!node || typeof node !== \"object\") {\n return undefined;\n }\n const value = (node as Record<string, unknown>)[`@${name}`];\n return value === undefined || value === null ? undefined : String(value);\n}\n\nexport function numAttr(node: unknown, name: string): number | undefined {\n const raw = attr(node, name);\n if (raw === undefined) {\n return undefined;\n }\n const parsed = Number(raw);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nexport function boolAttr(\n node: unknown,\n name: string,\n fallback = false\n): boolean {\n const raw = attr(node, name);\n if (raw === undefined) {\n return fallback;\n }\n return raw === \"1\" || raw.toLowerCase() === \"true\";\n}\n\n/** Text content of an element parsed by fast-xml-parser. */\nexport function textOf(node: unknown): string {\n if (node === undefined || node === null) {\n return \"\";\n }\n if (typeof node === \"string\") {\n return node;\n }\n if (typeof node === \"number\" || typeof node === \"boolean\") {\n return String(node);\n }\n if (typeof node === \"object\") {\n const value = (node as Record<string, unknown>)[\"#text\"];\n return value === undefined || value === null ? \"\" : String(value);\n }\n return \"\";\n}\n",
6
6
  "/**\n * A1-notation helpers. These mirror the engine's own addressing (0-based row\n * and column indices) so translated references line up exactly.\n */\n\nimport type { SpreadsheetRange } from \"@ricsam/formula-engine\";\n\nconst A1_CELL = /^\\$?([A-Za-z]+)\\$?(\\d+)$/;\n\nexport function columnLabelToIndex(label: string): number {\n let index = 0;\n for (let i = 0; i < label.length; i++) {\n index = index * 26 + (label.toUpperCase().charCodeAt(i) - 64);\n }\n return index - 1;\n}\n\nexport function columnIndexToLabel(index: number): string {\n let label = \"\";\n let remaining = index + 1;\n while (remaining > 0) {\n const rest = (remaining - 1) % 26;\n label = String.fromCharCode(65 + rest) + label;\n remaining = Math.floor((remaining - rest) / 26);\n }\n return label;\n}\n\nexport interface ParsedCell {\n colIndex: number;\n rowIndex: number;\n}\n\nexport function parseA1(reference: string): ParsedCell | undefined {\n const match = A1_CELL.exec(reference.trim());\n if (!match || match[1] === undefined || match[2] === undefined) {\n return undefined;\n }\n return {\n colIndex: columnLabelToIndex(match[1]),\n rowIndex: Number.parseInt(match[2], 10) - 1,\n };\n}\n\nexport function toA1({ colIndex, rowIndex }: ParsedCell): string {\n return `${columnIndexToLabel(colIndex)}${rowIndex + 1}`;\n}\n\nexport interface ParsedRange {\n start: ParsedCell;\n end: ParsedCell;\n}\n\n/**\n * Parse an Excel range such as `A1:B10`, `A1`, `A:C` or `2:5`.\n *\n * Whole-column and whole-row ranges are clamped to Excel's grid limits rather\n * than being left open-ended, because Excel's own semantics are bounded.\n */\nexport const EXCEL_MAX_ROW_INDEX = 1_048_575;\nexport const EXCEL_MAX_COL_INDEX = 16_383;\n\nexport function parseA1Range(reference: string): ParsedRange | undefined {\n const trimmed = reference.trim().replace(/\\$/g, \"\");\n const [rawStart, rawEnd] = trimmed.split(\":\");\n if (rawStart === undefined) {\n return undefined;\n }\n if (rawEnd === undefined) {\n const cell = parseA1(rawStart);\n return cell ? { start: cell, end: cell } : undefined;\n }\n\n const startCell = parseA1(rawStart);\n const endCell = parseA1(rawEnd);\n if (startCell && endCell) {\n return { start: startCell, end: endCell };\n }\n\n // Whole columns, e.g. \"A:C\".\n if (/^[A-Za-z]+$/.test(rawStart) && /^[A-Za-z]+$/.test(rawEnd)) {\n return {\n start: { colIndex: columnLabelToIndex(rawStart), rowIndex: 0 },\n end: {\n colIndex: columnLabelToIndex(rawEnd),\n rowIndex: EXCEL_MAX_ROW_INDEX,\n },\n };\n }\n\n // Whole rows, e.g. \"2:5\".\n if (/^\\d+$/.test(rawStart) && /^\\d+$/.test(rawEnd)) {\n return {\n start: { colIndex: 0, rowIndex: Number.parseInt(rawStart, 10) - 1 },\n end: {\n colIndex: EXCEL_MAX_COL_INDEX,\n rowIndex: Number.parseInt(rawEnd, 10) - 1,\n },\n };\n }\n\n return undefined;\n}\n\nexport function toSpreadsheetRange(range: ParsedRange): SpreadsheetRange {\n return {\n start: { col: range.start.colIndex, row: range.start.rowIndex },\n end: {\n col: { type: \"number\", value: range.end.colIndex },\n row: { type: \"number\", value: range.end.rowIndex },\n },\n };\n}\n\n/** Parse an Excel range reference straight into an engine range. */\nexport function rangeReferenceToSpreadsheetRange(\n reference: string\n): SpreadsheetRange | undefined {\n const parsed = parseA1Range(reference);\n return parsed ? toSpreadsheetRange(parsed) : undefined;\n}\n",
@@ -11,9 +11,11 @@
11
11
  "/**\n * Translates Excel conditional formatting into engine conditional styles.\n *\n * The engine offers two kinds of rule: a formula rule, which paints a cell one\n * colour when a formula is true, and a gradient rule, which interpolates\n * between two colour stops. Excel's rule catalogue is much larger, so this maps\n * what fits and reports the rest.\n *\n * Excel writes each rule's condition relative to the top-left cell of the range\n * it applies to, which is exactly the convention the engine's formula rules use,\n * so conditions carry over without rebasing.\n */\n\nimport {\n hexToLch,\n type ConditionalStyle,\n type LCHColor,\n type StyleCondition,\n} from \"@ricsam/formula-engine\";\nimport type { RawConditionalFormat } from \"../xlsx/worksheet\";\nimport type { Diagnostic } from \"../types\";\nimport type { WorkbookDataArea } from \"@ricsam/formula-engine\";\nimport { rangeReferenceToSpreadsheetRange } from \"../a1\";\nimport { translateFormula } from \"./formula\";\n\nexport interface TranslatedConditionalFormat {\n areas: WorkbookDataArea[];\n condition: StyleCondition;\n}\n\nexport interface TranslateConditionalFormatOptions {\n sheetName: string;\n /** Differential formats from styles.xml, indexed by `dxfId`. */\n differentialFormats: { backgroundColor?: string; color?: string }[];\n}\n\nexport function translateConditionalFormat(\n rule: RawConditionalFormat,\n options: TranslateConditionalFormatOptions\n): { result?: TranslatedConditionalFormat; diagnostics: Diagnostic[] } {\n const diagnostics: Diagnostic[] = [];\n\n const areas: WorkbookDataArea[] = [];\n for (const reference of rule.ranges) {\n const range = rangeReferenceToSpreadsheetRange(reference);\n if (range) {\n areas.push({ sheetName: options.sheetName, range });\n }\n }\n if (areas.length === 0) {\n return { diagnostics };\n }\n\n const anchor = rule.ranges[0]?.split(\":\")[0]?.replace(/\\$/g, \"\") ?? \"A1\";\n\n if (rule.type === \"colorScale\") {\n return translateColorScale(rule, areas, options, diagnostics);\n }\n\n const condition = buildFormulaCondition(rule, anchor, options, diagnostics);\n if (!condition) {\n return { diagnostics };\n }\n\n return { result: { areas, condition }, diagnostics };\n}\n\nfunction buildFormulaCondition(\n rule: RawConditionalFormat,\n anchor: string,\n options: TranslateConditionalFormatOptions,\n diagnostics: Diagnostic[]\n): StyleCondition | undefined {\n const color = ruleColor(rule, options);\n if (!color) {\n diagnostics.push({\n severity: \"warning\",\n code: \"unsupported-conditional-format\",\n message:\n `A ${rule.type} rule was skipped because its format has no fill or ` +\n `font colour the engine can apply.`,\n sheetName: options.sheetName,\n });\n return undefined;\n }\n\n const expression = buildExpression(rule, anchor, options, diagnostics);\n if (!expression) {\n return undefined;\n }\n\n const translated = translateFormula(expression, {\n sheetName: options.sheetName,\n cellReference: anchor,\n });\n diagnostics.push(...translated.diagnostics);\n\n return { type: \"formula\", formula: translated.formula, color };\n}\n\n/**\n * Build the boolean expression for a rule, in terms of the range's anchor cell.\n */\nfunction buildExpression(\n rule: RawConditionalFormat,\n anchor: string,\n options: TranslateConditionalFormatOptions,\n diagnostics: Diagnostic[]\n): string | undefined {\n const [first, second] = rule.formulas;\n\n switch (rule.type) {\n case \"expression\":\n return first ? `=${first}` : undefined;\n\n case \"cellIs\":\n return cellIsExpression(rule.operator, anchor, first, second);\n\n case \"containsText\":\n return rule.text === undefined\n ? undefined\n : `=IFERROR(FIND(${quote(rule.text)},${anchor})>0,FALSE)`;\n\n case \"notContainsText\":\n return rule.text === undefined\n ? undefined\n : `=IFERROR(FIND(${quote(rule.text)},${anchor})>0,FALSE)=FALSE`;\n\n case \"beginsWith\":\n return rule.text === undefined\n ? undefined\n : `=EXACT(LEFT(${anchor},${rule.text.length}),${quote(rule.text)})`;\n\n case \"endsWith\":\n return rule.text === undefined\n ? undefined\n : `=EXACT(RIGHT(${anchor},${rule.text.length}),${quote(rule.text)})`;\n\n case \"containsBlanks\":\n return `=LEN(${anchor})=0`;\n\n case \"notContainsBlanks\":\n return `=LEN(${anchor})>0`;\n\n default:\n diagnostics.push({\n severity: \"warning\",\n code: \"unsupported-conditional-format\",\n message:\n `The engine cannot express a \"${rule.type}\" conditional formatting ` +\n `rule, so it was skipped.`,\n sheetName: options.sheetName,\n });\n return undefined;\n }\n}\n\nfunction cellIsExpression(\n operator: string | undefined,\n anchor: string,\n first: string | undefined,\n second: string | undefined\n): string | undefined {\n if (first === undefined) {\n return undefined;\n }\n\n switch (operator) {\n case \"equal\":\n return `=${anchor}=${first}`;\n case \"notEqual\":\n return `=${anchor}<>${first}`;\n case \"greaterThan\":\n return `=${anchor}>${first}`;\n case \"greaterThanOrEqual\":\n return `=${anchor}>=${first}`;\n case \"lessThan\":\n return `=${anchor}<${first}`;\n case \"lessThanOrEqual\":\n return `=${anchor}<=${first}`;\n case \"between\":\n return second === undefined\n ? undefined\n : `=AND(${anchor}>=${first},${anchor}<=${second})`;\n case \"notBetween\":\n return second === undefined\n ? undefined\n : `=OR(${anchor}<${first},${anchor}>${second})`;\n default:\n return undefined;\n }\n}\n\nfunction translateColorScale(\n rule: RawConditionalFormat,\n areas: WorkbookDataArea[],\n options: TranslateConditionalFormatOptions,\n diagnostics: Diagnostic[]\n): { result?: TranslatedConditionalFormat; diagnostics: Diagnostic[] } {\n const scale = rule.colorScale;\n if (!scale || scale.cfvo.length < 2 || scale.colors.length < 2) {\n return { diagnostics };\n }\n\n if (scale.cfvo.length > 2) {\n diagnostics.push({\n severity: \"info\",\n code: \"unsupported-conditional-format\",\n message:\n \"A three-colour scale was imported as a two-colour gradient between \" +\n \"its lowest and highest stops; the midpoint colour was dropped.\",\n sheetName: options.sheetName,\n });\n }\n\n const firstStop = scale.cfvo[0]!;\n const lastStop = scale.cfvo[scale.cfvo.length - 1]!;\n const firstColor = toLch(scale.colors[0]);\n const lastColor = toLch(scale.colors[scale.colors.length - 1]);\n\n if (!firstColor || !lastColor) {\n return { diagnostics };\n }\n\n const min =\n firstStop.type === \"num\" && firstStop.val !== undefined\n ? ({\n type: \"number\" as const,\n color: firstColor,\n valueFormula: `=${firstStop.val}`,\n })\n : ({ type: \"lowest_value\" as const, color: firstColor });\n\n const max =\n lastStop.type === \"num\" && lastStop.val !== undefined\n ? ({\n type: \"number\" as const,\n color: lastColor,\n valueFormula: `=${lastStop.val}`,\n })\n : ({ type: \"highest_value\" as const, color: lastColor });\n\n if (\n (firstStop.type !== \"num\" && firstStop.type !== \"min\") ||\n (lastStop.type !== \"num\" && lastStop.type !== \"max\")\n ) {\n diagnostics.push({\n severity: \"info\",\n code: \"unsupported-conditional-format\",\n message:\n `A colour scale using \"${firstStop.type}\"/\"${lastStop.type}\" stops was ` +\n \"imported as a gradient across the range's own lowest and highest \" +\n \"values.\",\n sheetName: options.sheetName,\n });\n }\n\n return {\n result: { areas, condition: { type: \"gradient\", min, max } },\n diagnostics,\n };\n}\n\n/**\n * The colour a rule paints. The engine's formula rule takes a single colour, so\n * a differential format's fill wins over its font colour.\n */\nfunction ruleColor(\n rule: RawConditionalFormat,\n options: TranslateConditionalFormatOptions\n): LCHColor | undefined {\n if (rule.dxfId === undefined) {\n return undefined;\n }\n const format = options.differentialFormats[rule.dxfId];\n if (!format) {\n return undefined;\n }\n const hex = format.backgroundColor ?? format.color;\n return hex ? hexToLch(hex) : undefined;\n}\n\nfunction toLch(argb: string | undefined): LCHColor | undefined {\n if (!argb) {\n return undefined;\n }\n const value = argb.replace(/^#/, \"\");\n const rgb = value.length === 8 ? value.slice(2) : value;\n if (!/^[0-9A-Fa-f]{6}$/.test(rgb)) {\n return undefined;\n }\n return hexToLch(`#${rgb.toLowerCase()}`);\n}\n\nfunction quote(text: string): string {\n return `\"${text.replace(/\"/g, '\"\"')}\"`;\n}\n\nexport type { ConditionalStyle };\n",
12
12
  "/**\n * Excel date handling.\n *\n * Excel stores dates as a serial number of days since an epoch, and the engine\n * has no date type. A date-formatted number would therefore display as a bare\n * serial (45000), so it is converted to an ISO 8601 string instead, which is\n * both readable and sortable.\n */\n\n/** Milliseconds in one day. */\nconst DAY_MS = 86_400_000;\n\n/**\n * Excel's 1900 date system has a deliberate bug: it treats 1900 as a leap year,\n * so serial 60 is the non-existent 1900-02-29 and every serial after it is one\n * day ahead of the true date. Serials above 60 are therefore offset by an epoch\n * of 1899-12-30 rather than 1899-12-31.\n */\nconst EPOCH_1900_UTC = Date.UTC(1899, 11, 30);\nconst EPOCH_1904_UTC = Date.UTC(1904, 0, 1);\n\nexport function excelSerialToIso(serial: number, date1904 = false): string {\n if (!Number.isFinite(serial)) {\n return String(serial);\n }\n\n const epoch = date1904 ? EPOCH_1904_UTC : EPOCH_1900_UTC;\n\n // In the 1900 system serials 1-59 map to Jan 1 - Feb 28 1900 and need the\n // extra day that the leap-year bug adds back for later serials.\n const adjusted =\n !date1904 && serial < 60 && serial >= 1 ? serial + 1 : serial;\n\n const wholeDays = Math.floor(adjusted);\n const fraction = adjusted - wholeDays;\n const ms = epoch + wholeDays * DAY_MS + Math.round(fraction * DAY_MS);\n const date = new Date(ms);\n\n if (Number.isNaN(date.getTime())) {\n return String(serial);\n }\n\n const iso = date.toISOString();\n\n // A whole serial is a date with no time component; Excel represents a\n // time-only value as a fraction below 1.\n if (fraction === 0) {\n return iso.slice(0, 10);\n }\n if (wholeDays === 0) {\n return iso.slice(11, 19);\n }\n return iso.slice(0, 19).replace(\"T\", \" \");\n}\n",
13
13
  "/**\n * The conversion pipeline: an .xlsx package in, `WorkbookData` out.\n */\n\nimport type {\n SerializedCellValue,\n WorkbookDataCellStyle,\n WorkbookDataConditionalStyle,\n WorkbookDataNamedExpression,\n WorkbookDataSheet,\n WorkbookDataTable,\n} from \"@ricsam/formula-engine\";\nimport { readXlsxPackage } from \"./xlsx/package\";\nimport {\n parseSharedStrings,\n parseTables,\n parseWorkbook,\n type RawTable,\n} from \"./xlsx/workbook\";\nimport { parseWorksheet, type RawCell } from \"./xlsx/worksheet\";\nimport { parseStyles, type ExcelFormat } from \"./xlsx/styles\";\nimport { offsetFormulaReferences, translateFormula } from \"./translate/formula\";\nimport { translateConditionalFormat } from \"./translate/conditional-format\";\nimport { excelSerialToIso } from \"./translate/dates\";\nimport {\n parseA1Range,\n rangeReferenceToSpreadsheetRange,\n toA1,\n toSpreadsheetRange,\n type ParsedRange,\n} from \"./a1\";\nimport type {\n ConvertOptions,\n ConvertResult,\n Diagnostic,\n ExcelCellMetadata,\n ExcelSheetMetadata,\n ExcelWorkbookData,\n} from \"./types\";\n\n/**\n * Excel's built-in defined names. They configure print areas and filters rather\n * than naming a value, so importing them as named expressions would be noise.\n */\nconst BUILTIN_DEFINED_NAMES = new Set([\n \"_xlnm.print_area\",\n \"_xlnm.print_titles\",\n \"_xlnm._filterdatabase\",\n \"_xlnm.criteria\",\n \"_xlnm.extract\",\n \"_xlnm.database\",\n \"_xlnm.sheet_title\",\n]);\n\nexport async function convertWorkbook(\n source: Blob | ArrayBuffer | Uint8Array,\n options: ConvertOptions = {}\n): Promise<ConvertResult> {\n const {\n styles: importStyles = true,\n conditionalFormatting: importConditionalFormatting = true,\n tables: importTables = true,\n definedNames: importDefinedNames = true,\n cellMetadata: importCellMetadata = true,\n convertDates = true,\n } = options;\n\n const diagnostics: Diagnostic[] = [];\n const pkg = await readXlsxPackage(source);\n\n const sharedStrings = parseSharedStrings(pkg);\n const { sheets: sheetEntries, definedNames, date1904 } = parseWorkbook(pkg);\n const styleTable = parseStyles(pkg);\n\n const selected = options.sheets\n ? sheetEntries.filter((entry) => options.sheets!.includes(entry.name))\n : sheetEntries;\n\n const sheets: WorkbookDataSheet<ExcelCellMetadata, ExcelSheetMetadata>[] = [];\n const tables: WorkbookDataTable[] = [];\n const cellStyles: WorkbookDataCellStyle[] = [];\n const conditionalStyles: WorkbookDataConditionalStyle[] = [];\n const importedSheetNames = new Set<string>();\n\n for (const entry of selected) {\n const worksheet = parseWorksheet(pkg, entry.partPath, sharedStrings);\n importedSheetNames.add(entry.name);\n\n /*\n Tables are read before the cells are, because a formula's translation\n depends on whether its own cell sits inside one: Excel stores a calculated\n column's reference as `Table[[#This Row],[Col]]` and displays it as\n `[@Col]`, and reproducing that needs to know which table \"this row\" is in.\n */\n const sheetTables = importTables ? parseTables(pkg, entry.partPath) : [];\n const tableRanges = sheetTables\n .map((table) => ({ name: table.displayName, range: parseA1Range(table.ref) }))\n .filter(\n (entryTable): entryTable is { name: string; range: ParsedRange } =>\n entryTable.range !== undefined\n );\n\n /** The table a cell sits inside, or undefined when it sits in none. */\n const tableAt = (colIndex: number, rowIndex: number): string | undefined =>\n tableRanges.find(\n ({ range }) =>\n colIndex >= range.start.colIndex &&\n colIndex <= range.end.colIndex &&\n rowIndex >= range.start.rowIndex &&\n rowIndex <= range.end.rowIndex\n )?.name;\n\n const content = new Map<string, SerializedCellValue>();\n const cellMetadata = new Map<string, ExcelCellMetadata>();\n // Cells sharing one style are collected so each distinct style becomes a\n // single engine rule over many areas rather than one rule per cell.\n const styleGroups = new Map<number, RawCell[]>();\n\n for (const cell of worksheet.cells) {\n const format =\n cell.styleIndex === undefined\n ? undefined\n : styleTable.formats[cell.styleIndex];\n\n const value = cellValue(cell, format, {\n convertDates,\n date1904,\n sheetName: entry.name,\n diagnostics,\n containingTableName: tableAt(cell.colIndex, cell.rowIndex),\n });\n if (value !== undefined) {\n content.set(cell.reference, value);\n }\n\n if (importStyles && cell.styleIndex !== undefined && format) {\n if (Object.keys(format.style).length > 0) {\n const group = styleGroups.get(cell.styleIndex);\n if (group) {\n group.push(cell);\n } else {\n styleGroups.set(cell.styleIndex, [cell]);\n }\n }\n }\n\n if (importCellMetadata) {\n const metadata: ExcelCellMetadata = {};\n if (format?.numberFormat) {\n metadata.numberFormat = format.numberFormat;\n }\n const hyperlink = worksheet.hyperlinks[cell.reference];\n if (hyperlink) {\n metadata.hyperlink = hyperlink;\n }\n if (Object.keys(metadata).length > 0) {\n cellMetadata.set(cell.reference, metadata);\n }\n }\n }\n\n if (importStyles) {\n for (const [styleIndex, cells] of styleGroups) {\n const format = styleTable.formats[styleIndex];\n if (!format) {\n continue;\n }\n cellStyles.push({\n areas: coalesceCellsIntoAreas(entry.name, cells),\n style: format.style,\n });\n }\n }\n\n if (importConditionalFormatting) {\n // Excel evaluates the lowest priority number last, so it wins. The engine\n // applies later rules on top, so rules are emitted in reverse priority.\n const ordered = [...worksheet.conditionalFormats].sort(\n (a, b) => b.priority - a.priority\n );\n for (const rule of ordered) {\n const { result, diagnostics: ruleDiagnostics } =\n translateConditionalFormat(rule, {\n sheetName: entry.name,\n differentialFormats: styleTable.differentialFormats,\n });\n diagnostics.push(...ruleDiagnostics);\n if (result) {\n conditionalStyles.push(result);\n }\n }\n }\n\n if (importTables) {\n for (const table of sheetTables) {\n const converted = convertTable(table, entry.name, diagnostics);\n if (converted) {\n tables.push(converted);\n }\n }\n }\n\n const sheetMetadata: ExcelSheetMetadata = {};\n if (Object.keys(worksheet.columnWidths).length > 0) {\n sheetMetadata.columnWidths = worksheet.columnWidths;\n }\n if (Object.keys(worksheet.rowHeights).length > 0) {\n sheetMetadata.rowHeights = worksheet.rowHeights;\n }\n if (worksheet.merges.length > 0) {\n sheetMetadata.merges = worksheet.merges;\n }\n if (worksheet.frozen) {\n sheetMetadata.frozen = worksheet.frozen;\n }\n if (entry.state !== \"visible\") {\n sheetMetadata.visible = false;\n }\n\n sheets.push({\n name: entry.name,\n content,\n cellMetadata: cellMetadata.size > 0 ? cellMetadata : undefined,\n sheetMetadata:\n Object.keys(sheetMetadata).length > 0 ? sheetMetadata : undefined,\n });\n }\n\n const namedExpressions = importDefinedNames\n ? convertDefinedNames(\n definedNames,\n sheetEntries.map((entry) => entry.name),\n importedSheetNames,\n diagnostics\n )\n : [];\n\n const data: ExcelWorkbookData = {\n sheets,\n tables: tables.length > 0 ? tables : undefined,\n namedExpressions:\n namedExpressions.length > 0 ? namedExpressions : undefined,\n cellStyles: cellStyles.length > 0 ? cellStyles : undefined,\n conditionalStyles:\n conditionalStyles.length > 0 ? conditionalStyles : undefined,\n workbookMetadata: {\n fileName: options.fileName,\n sheetOrder: sheetEntries.map((entry) => entry.name),\n diagnostics: diagnostics.length > 0 ? diagnostics : undefined,\n },\n };\n\n return { data, diagnostics };\n}\n\ninterface CellValueContext {\n convertDates: boolean;\n date1904: boolean;\n sheetName: string;\n diagnostics: Diagnostic[];\n /** The table this cell sits inside, when it sits inside one. */\n containingTableName?: string;\n}\n\n/**\n * The engine stores a cell as a formula string, a literal, or nothing. A cell\n * with a formula keeps the formula: Excel's cached result is discarded, because\n * the engine recalculates.\n */\nfunction cellValue(\n cell: RawCell,\n format: ExcelFormat | undefined,\n context: CellValueContext\n): SerializedCellValue {\n if (cell.formula !== undefined) {\n const body = cell.formulaOffset\n ? offsetFormulaReferences(\n cell.formula,\n cell.formulaOffset.cols,\n cell.formulaOffset.rows\n )\n : cell.formula;\n\n const translated = translateFormula(body, {\n sheetName: context.sheetName,\n cellReference: cell.reference,\n containingTableName: context.containingTableName,\n });\n context.diagnostics.push(...translated.diagnostics);\n return translated.formula;\n }\n\n switch (cell.kind) {\n case \"number\": {\n const value = cell.value as number;\n if (context.convertDates && format?.isDateFormat) {\n return excelSerialToIso(value, context.date1904);\n }\n return value;\n }\n case \"boolean\":\n return cell.value as boolean;\n case \"string\":\n return cell.value as string;\n case \"date\":\n return cell.value as string;\n case \"error\":\n // Excel's own error text is valid engine cell content.\n return cell.value as string;\n case \"empty\":\n return undefined;\n }\n}\n\nfunction convertTable(\n table: RawTable,\n sheetName: string,\n diagnostics: Diagnostic[]\n): WorkbookDataTable | undefined {\n const parsed = parseA1Range(table.ref);\n if (!parsed) {\n diagnostics.push({\n severity: \"warning\",\n code: \"skipped-table\",\n message: `Table \"${table.displayName}\" has an unreadable range (${table.ref}).`,\n sheetName,\n });\n return undefined;\n }\n\n if (table.headerRowCount === 0) {\n // The engine requires a header row, since structured references name it.\n diagnostics.push({\n severity: \"warning\",\n code: \"skipped-table\",\n message:\n `Table \"${table.displayName}\" has no header row, which the engine ` +\n `requires for structured references, so it was skipped.`,\n sheetName,\n });\n return undefined;\n }\n\n const numCols = parsed.end.colIndex - parsed.start.colIndex + 1;\n const dataRows =\n parsed.end.rowIndex -\n parsed.start.rowIndex +\n 1 -\n table.headerRowCount -\n table.totalsRowCount;\n\n if (numCols <= 0 || dataRows < 0) {\n diagnostics.push({\n severity: \"warning\",\n code: \"skipped-table\",\n message: `Table \"${table.displayName}\" has an empty range (${table.ref}).`,\n sheetName,\n });\n return undefined;\n }\n\n return {\n name: table.displayName,\n sheetName,\n start: toA1(parsed.start),\n numRows: { type: \"number\", value: dataRows },\n numCols,\n };\n}\n\nfunction convertDefinedNames(\n definedNames: { name: string; formula: string; localSheetId?: number; hidden: boolean }[],\n sheetNames: string[],\n importedSheetNames: Set<string>,\n diagnostics: Diagnostic[]\n): WorkbookDataNamedExpression[] {\n const result: WorkbookDataNamedExpression[] = [];\n\n for (const definedName of definedNames) {\n if (BUILTIN_DEFINED_NAMES.has(definedName.name.toLowerCase())) {\n continue;\n }\n if (definedName.hidden || definedName.formula.trim() === \"\") {\n continue;\n }\n if (definedName.formula.includes(\"#REF!\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"skipped-defined-name\",\n message: `Defined name \"${definedName.name}\" refers to a deleted range.`,\n source: definedName.formula,\n });\n continue;\n }\n\n const sheetName =\n definedName.localSheetId === undefined\n ? undefined\n : sheetNames[definedName.localSheetId];\n\n if (sheetName !== undefined && !importedSheetNames.has(sheetName)) {\n continue;\n }\n\n // Named expressions are stored as a formula body with no leading \"=\".\n const translated = translateFormula(definedName.formula);\n diagnostics.push(...translated.diagnostics);\n\n result.push({\n name: definedName.name,\n expression: translated.formula.slice(1),\n sheetName,\n });\n }\n\n return result;\n}\n\n/**\n * Turn a set of cells sharing one style into as few rectangular areas as\n * possible.\n *\n * Excel's style model is per-cell, but the engine's is per-area, so emitting\n * one area per cell would produce enormous rule lists on real workbooks. Cells\n * are merged into horizontal runs, then adjacent identical runs are merged\n * vertically into blocks.\n */\nexport function coalesceCellsIntoAreas(\n sheetName: string,\n cells: { colIndex: number; rowIndex: number }[]\n): { sheetName: string; range: ReturnType<typeof toSpreadsheetRange> }[] {\n const byRow = new Map<number, number[]>();\n for (const cell of cells) {\n const row = byRow.get(cell.rowIndex);\n if (row) {\n row.push(cell.colIndex);\n } else {\n byRow.set(cell.rowIndex, [cell.colIndex]);\n }\n }\n\n interface Run {\n rowIndex: number;\n startCol: number;\n endCol: number;\n }\n\n const runs: Run[] = [];\n for (const [rowIndex, columns] of byRow) {\n columns.sort((a, b) => a - b);\n let startCol = columns[0]!;\n let previous = startCol;\n for (let i = 1; i < columns.length; i++) {\n const current = columns[i]!;\n if (current === previous + 1) {\n previous = current;\n continue;\n }\n runs.push({ rowIndex, startCol, endCol: previous });\n startCol = current;\n previous = current;\n }\n runs.push({ rowIndex, startCol, endCol: previous });\n }\n\n // Merge runs with identical column spans in consecutive rows into blocks.\n runs.sort((a, b) =>\n a.startCol - b.startCol || a.endCol - b.endCol || a.rowIndex - b.rowIndex\n );\n\n const areas: { sheetName: string; range: ReturnType<typeof toSpreadsheetRange> }[] = [];\n let index = 0;\n while (index < runs.length) {\n const first = runs[index]!;\n let lastRow = first.rowIndex;\n let next = index + 1;\n while (\n next < runs.length &&\n runs[next]!.startCol === first.startCol &&\n runs[next]!.endCol === first.endCol &&\n runs[next]!.rowIndex === lastRow + 1\n ) {\n lastRow = runs[next]!.rowIndex;\n next++;\n }\n\n areas.push({\n sheetName,\n range: toSpreadsheetRange({\n start: { colIndex: first.startCol, rowIndex: first.rowIndex },\n end: { colIndex: first.endCol, rowIndex: lastRow },\n }),\n });\n index = next;\n }\n\n return areas;\n}\n\nexport { rangeReferenceToSpreadsheetRange };\n",
14
- "/**\n * excel-to-formula-engine\n *\n * Converts an Excel .xlsx file into `WorkbookData` for `@ricsam/formula-engine`,\n * in the browser and in Node/Bun.\n *\n * ```ts\n * const data = await excelToFormulaEngine(blob);\n * engine.addWorkbook({ workbookName: \"Budget\", data });\n * ```\n */\n\nimport { convertWorkbook } from \"./src/convert\";\nimport type {\n ConvertOptions,\n ConvertResult,\n ExcelWorkbookData,\n} from \"./src/types\";\n\n/**\n * Convert an Excel file into engine `WorkbookData`.\n *\n * Accepts a `Blob` or `File` from a file input, or raw bytes. The result is\n * ready to hand to `FormulaEngine.addWorkbook`.\n *\n * Anything that could not be translated is reported in\n * `data.workbookMetadata.diagnostics`; use {@link excelToFormulaEngineDetailed}\n * when you want the diagnostics alongside the data instead.\n *\n * @throws when the input is not a readable .xlsx package.\n */\nexport async function excelToFormulaEngine(\n source: Blob | ArrayBuffer | Uint8Array,\n options?: ConvertOptions\n): Promise<ExcelWorkbookData> {\n const { data } = await convertWorkbook(source, withFileName(source, options));\n return data;\n}\n\n/**\n * Convert an Excel file, returning the data and the translation diagnostics as\n * separate values.\n */\nexport async function excelToFormulaEngineDetailed(\n source: Blob | ArrayBuffer | Uint8Array,\n options?: ConvertOptions\n): Promise<ConvertResult> {\n return convertWorkbook(source, withFileName(source, options));\n}\n\n/** Pick up the name from a `File` so it lands in workbook metadata. */\nfunction withFileName(\n source: Blob | ArrayBuffer | Uint8Array,\n options: ConvertOptions | undefined\n): ConvertOptions {\n if (options?.fileName !== undefined) {\n return options;\n }\n const name =\n typeof File !== \"undefined\" && source instanceof File\n ? source.name\n : undefined;\n return name ? { ...options, fileName: name } : { ...options };\n}\n\nexport { convertWorkbook };\n\nexport type {\n ConvertOptions,\n ConvertResult,\n Diagnostic,\n DiagnosticCode,\n DiagnosticSeverity,\n ExcelCellMetadata,\n ExcelSheetMetadata,\n ExcelWorkbookData,\n ExcelWorkbookMetadata,\n} from \"./src/types\";\n\nexport {\n findUnsupportedFunctions,\n offsetFormulaReferences,\n translateFormula,\n} from \"./src/translate/formula\";\n\nexport { excelSerialToIso } from \"./src/translate/dates\";\n\nexport {\n columnIndexToLabel,\n columnLabelToIndex,\n parseA1,\n parseA1Range,\n toA1,\n} from \"./src/a1\";\n"
14
+ "/**\n * Delimited-text parsing: CSV, TSV, and the semicolon-separated files a\n * comma-decimal locale produces.\n *\n * Follows RFC 4180 for quoting — a field wrapped in double quotes may contain\n * the delimiter, line breaks, and doubled quotes standing for one — because that\n * is what every spreadsheet writes and the naive `split(\",\")` gets wrong on the\n * first address field it meets.\n */\n\n/** Delimiters worth guessing between. */\nexport const CANDIDATE_DELIMITERS = [\",\", \"\\t\", \";\", \"|\"] as const;\n\nexport type Delimiter = string;\n\n/**\n * Split delimited text into rows of raw string fields.\n *\n * Values keep the exact text they had: trimming and type conversion are separate\n * decisions made later, where the caller's options are in scope.\n */\nexport function parseDelimitedText(text: string, delimiter: Delimiter): string[][] {\n const rows: string[][] = [];\n let row: string[] = [];\n let field = \"\";\n let inQuotes = false;\n let fieldWasQuoted = false;\n // Distinguishes \"no fields yet\" from \"one empty field\", so a trailing newline\n // does not produce a spurious final row.\n let rowHasContent = false;\n\n const endField = () => {\n row.push(field);\n field = \"\";\n fieldWasQuoted = false;\n rowHasContent = true;\n };\n\n const endRow = () => {\n endField();\n rows.push(row);\n row = [];\n rowHasContent = false;\n };\n\n for (let i = 0; i < text.length; i++) {\n const char = text[i]!;\n\n if (inQuotes) {\n if (char === '\"') {\n if (text[i + 1] === '\"') {\n // A doubled quote inside a quoted field is one literal quote.\n field += '\"';\n i++;\n } else {\n inQuotes = false;\n }\n } else {\n field += char;\n }\n continue;\n }\n\n if (char === '\"' && field.length === 0) {\n inQuotes = true;\n fieldWasQuoted = true;\n continue;\n }\n\n if (char === delimiter) {\n endField();\n continue;\n }\n\n if (char === \"\\r\") {\n // Treat CRLF and a bare CR as one line ending.\n if (text[i + 1] === \"\\n\") i++;\n endRow();\n continue;\n }\n\n if (char === \"\\n\") {\n endRow();\n continue;\n }\n\n field += char;\n }\n\n // A file not ending in a newline still has a last row; one that does should\n // not gain an empty one. A lone quoted empty field counts as content.\n if (field.length > 0 || fieldWasQuoted || rowHasContent) {\n endRow();\n }\n\n return rows;\n}\n\n/**\n * Guess the delimiter from the text itself.\n *\n * Scores each candidate on how *consistently* it splits the first several lines\n * rather than on how often it appears: prose full of commas scores badly because\n * its lines disagree about the field count, while a two-column TSV scores\n * perfectly on one tab per line. Quoted sections are skipped, so a comma inside\n * `\"Smith, J\"` never votes for comma.\n *\n * Falls back to comma, which is both the commonest and the least surprising\n * thing to be wrong about.\n */\nexport function detectDelimiter(\n text: string,\n candidates: readonly string[] = CANDIDATE_DELIMITERS\n): Delimiter {\n const lines = takeSampleLines(text, 20);\n if (lines.length === 0) return \",\";\n\n let best: { delimiter: string; score: number } | undefined;\n\n for (const delimiter of candidates) {\n const counts = lines.map((line) => countOutsideQuotes(line, delimiter));\n const present = counts.filter((count) => count > 0);\n // A delimiter that never appears is not a candidate.\n if (present.length === 0) continue;\n\n const first = counts[0]!;\n // Consistency across lines is the signal; ties break toward more fields,\n // which is what distinguishes the real delimiter from one that happens to\n // appear once per line inside the data.\n const consistent = counts.filter((count) => count === first).length;\n const score = consistent / counts.length + Math.min(first, 50) / 1000;\n\n if (!best || score > best.score) {\n best = { delimiter, score };\n }\n }\n\n return best?.delimiter ?? \",\";\n}\n\n/**\n * The first `limit` non-empty lines, ignoring line breaks inside quoted fields.\n */\nfunction takeSampleLines(text: string, limit: number): string[] {\n const lines: string[] = [];\n let current = \"\";\n let inQuotes = false;\n\n for (let i = 0; i < text.length && lines.length < limit; i++) {\n const char = text[i]!;\n\n if (char === '\"') {\n if (inQuotes && text[i + 1] === '\"') {\n current += '\"\"';\n i++;\n continue;\n }\n inQuotes = !inQuotes;\n current += char;\n continue;\n }\n\n if (!inQuotes && (char === \"\\n\" || char === \"\\r\")) {\n if (char === \"\\r\" && text[i + 1] === \"\\n\") i++;\n if (current.trim().length > 0) lines.push(current);\n current = \"\";\n continue;\n }\n\n current += char;\n }\n\n if (current.trim().length > 0 && lines.length < limit) lines.push(current);\n return lines;\n}\n\nfunction countOutsideQuotes(line: string, delimiter: string): number {\n let count = 0;\n let inQuotes = false;\n\n for (let i = 0; i < line.length; i++) {\n const char = line[i]!;\n if (char === '\"') {\n if (inQuotes && line[i + 1] === '\"') {\n i++;\n continue;\n }\n inQuotes = !inQuotes;\n continue;\n }\n if (!inQuotes && char === delimiter) count++;\n }\n\n return count;\n}\n\n/**\n * Strip a UTF-8 byte-order mark.\n *\n * Excel writes one on every CSV it exports, and left in place it becomes part of\n * the first header cell — where it is invisible, so the column looks right and\n * every lookup against its name silently misses.\n */\nexport function stripBom(text: string): string {\n return text.charCodeAt(0) === 0xfeff ? text.slice(1) : text;\n}\n",
15
+ "/**\n * Delimited text in, `WorkbookData` out.\n *\n * The interesting decisions here are all about what a bare string *is*. A CSV\n * carries no types, so every cell is a judgement call, and the ones that matter\n * are the cases where guessing wrong destroys data rather than merely looking\n * wrong: a leading-zero part number, an identifier too long for a float.\n */\n\nimport type { SerializedCellValue } from \"@ricsam/formula-engine\";\nimport { columnIndexToLabel } from \"../a1\";\nimport { translateFormula } from \"../translate/formula\";\nimport type {\n CsvConvertOptions,\n Diagnostic,\n ExcelWorkbookData,\n} from \"../types\";\nimport { detectDelimiter, parseDelimitedText, stripBom } from \"./parse\";\n\nexport interface ConvertCsvResult {\n data: ExcelWorkbookData;\n diagnostics: Diagnostic[];\n}\n\n/** Cells beyond this are refused rather than silently locking up the tab. */\nconst MAX_CELLS = 2_000_000;\n\nexport function convertDelimitedText(\n text: string,\n options: CsvConvertOptions = {}\n): ConvertCsvResult {\n const {\n sheetName = \"Sheet1\",\n fileName,\n parseNumbers = true,\n parseBooleans = true,\n trimFields = false,\n } = options;\n\n const diagnostics: Diagnostic[] = [];\n const body = stripBom(text);\n const delimiter = options.delimiter ?? detectDelimiter(body);\n const rows = parseDelimitedText(body, delimiter);\n\n const widest = rows.reduce((max, row) => Math.max(max, row.length), 0);\n if (rows.length * widest > MAX_CELLS) {\n throw new Error(\n `The file has about ${rows.length * widest} cells, more than the ` +\n `${MAX_CELLS} this importer will load at once.`\n );\n }\n\n const content = new Map<string, SerializedCellValue>();\n\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n const row = rows[rowIndex]!;\n for (let colIndex = 0; colIndex < row.length; colIndex++) {\n const raw = trimFields ? row[colIndex]!.trim() : row[colIndex]!;\n // An empty cell is absent rather than an empty string: the engine deletes\n // empty values anyway, and a sparse sheet is the point of its storage.\n if (raw.length === 0) continue;\n\n const reference = `${columnIndexToLabel(colIndex)}${rowIndex + 1}`;\n content.set(\n reference,\n toCellValue(raw, {\n parseNumbers,\n parseBooleans,\n sheetName,\n reference,\n diagnostics,\n })\n );\n }\n }\n\n const data: ExcelWorkbookData = {\n sheets: [{ name: sheetName, content }],\n workbookMetadata: {\n fileName,\n sheetOrder: [sheetName],\n diagnostics: diagnostics.length > 0 ? diagnostics : undefined,\n },\n };\n\n return { data, diagnostics };\n}\n\ninterface ToCellValueContext {\n parseNumbers: boolean;\n parseBooleans: boolean;\n sheetName: string;\n reference: string;\n diagnostics: Diagnostic[];\n}\n\nfunction toCellValue(raw: string, context: ToCellValueContext): SerializedCellValue {\n // A field beginning with `=` is a formula, the way it is when a spreadsheet\n // opens the same file. See the note on CsvConvertOptions.\n if (raw.startsWith(\"=\") && raw.length > 1) {\n const translated = translateFormula(raw, {\n sheetName: context.sheetName,\n cellReference: context.reference,\n });\n context.diagnostics.push(...translated.diagnostics);\n return translated.formula;\n }\n\n if (context.parseBooleans) {\n const upper = raw.toUpperCase();\n if (upper === \"TRUE\") return true;\n if (upper === \"FALSE\") return false;\n }\n\n if (context.parseNumbers) {\n const number = toNumber(raw);\n if (number !== undefined) return number;\n }\n\n return raw;\n}\n\n/**\n * The numeric value of a field, or undefined to keep it as text.\n *\n * Deliberately narrower than `Number()`. Three kinds of string look numeric and\n * must not be converted, because converting them loses information that cannot\n * be recovered from the result:\n *\n * - Leading zeros (`007`, `01234`) — part numbers, postcodes, phone extensions.\n * This is the mangling Excel is notorious for.\n * - Integers beyond `Number.MAX_SAFE_INTEGER` — long identifiers, which silently\n * change value when they become floats.\n * - Anything `Number()` accepts that is not a plain decimal: `0x1f`, `Infinity`,\n * `1_000`, and the empty string.\n */\nexport function toNumber(raw: string): number | undefined {\n const text = raw.trim();\n if (text.length === 0) return undefined;\n\n // A plain decimal, with an optional sign and exponent. Nothing else.\n if (!/^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$/.test(text)) {\n return undefined;\n }\n\n const digits = text.replace(/^[+-]/, \"\");\n // `0`, `0.5` and `0e3` are fine; `007` and `01.5` are identifiers.\n if (/^0\\d/.test(digits)) return undefined;\n\n const value = Number(text);\n if (!Number.isFinite(value)) return undefined;\n\n // A long integer that cannot survive as a float stays text.\n if (\n !text.includes(\".\") &&\n !/[eE]/.test(text) &&\n !Number.isSafeInteger(value)\n ) {\n return undefined;\n }\n\n return value;\n}\n\n/** Decode bytes as UTF-8, which is what every modern exporter writes. */\nexport async function readTextFrom(\n source: Blob | ArrayBuffer | Uint8Array | string\n): Promise<string> {\n if (typeof source === \"string\") return source;\n if (source instanceof Uint8Array || source instanceof ArrayBuffer) {\n return new TextDecoder(\"utf-8\").decode(source);\n }\n return source.text();\n}\n",
16
+ "/**\n * excel-to-formula-engine\n *\n * Converts an Excel .xlsx file into `WorkbookData` for `@ricsam/formula-engine`,\n * in the browser and in Node/Bun.\n *\n * ```ts\n * const data = await excelToFormulaEngine(blob);\n * engine.addWorkbook({ workbookName: \"Budget\", data });\n * ```\n */\n\nimport { convertWorkbook } from \"./src/convert\";\nimport { convertDelimitedText, readTextFrom } from \"./src/csv/convert\";\nimport type {\n ConvertOptions,\n ConvertResult,\n CsvConvertOptions,\n ExcelWorkbookData,\n} from \"./src/types\";\n\n/**\n * Convert an Excel file into engine `WorkbookData`.\n *\n * Accepts a `Blob` or `File` from a file input, or raw bytes. The result is\n * ready to hand to `FormulaEngine.addWorkbook`.\n *\n * Anything that could not be translated is reported in\n * `data.workbookMetadata.diagnostics`; use {@link excelToFormulaEngineDetailed}\n * when you want the diagnostics alongside the data instead.\n *\n * @throws when the input is not a readable .xlsx package.\n */\nexport async function excelToFormulaEngine(\n source: Blob | ArrayBuffer | Uint8Array,\n options?: ConvertOptions\n): Promise<ExcelWorkbookData> {\n const { data } = await convertWorkbook(source, withFileName(source, options));\n return data;\n}\n\n/**\n * Convert an Excel file, returning the data and the translation diagnostics as\n * separate values.\n */\nexport async function excelToFormulaEngineDetailed(\n source: Blob | ArrayBuffer | Uint8Array,\n options?: ConvertOptions\n): Promise<ConvertResult> {\n return convertWorkbook(source, withFileName(source, options));\n}\n\n/** Pick up the name from a `File` so it lands in workbook metadata. */\nfunction withFileName(\n source: Blob | ArrayBuffer | Uint8Array,\n options: ConvertOptions | undefined\n): ConvertOptions {\n if (options?.fileName !== undefined) {\n return options;\n }\n const name =\n typeof File !== \"undefined\" && source instanceof File\n ? source.name\n : undefined;\n return name ? { ...options, fileName: name } : { ...options };\n}\n\n/**\n * Convert delimited text — CSV, TSV, or semicolon-separated — into engine\n * `WorkbookData` holding a single sheet.\n *\n * The delimiter is detected from the text unless one is given: a `.csv`\n * extension says nothing about the separator, and a comma-decimal locale\n * exports semicolons.\n */\nexport async function csvToFormulaEngine(\n source: Blob | ArrayBuffer | Uint8Array | string,\n options?: CsvConvertOptions\n): Promise<ExcelWorkbookData> {\n const { data } = await csvToFormulaEngineDetailed(source, options);\n return data;\n}\n\n/** As {@link csvToFormulaEngine}, with the diagnostics returned separately. */\nexport async function csvToFormulaEngineDetailed(\n source: Blob | ArrayBuffer | Uint8Array | string,\n options?: CsvConvertOptions\n): Promise<ConvertResult> {\n const text = await readTextFrom(source);\n const resolved = withCsvFileName(source, options);\n return convertDelimitedText(text, resolved);\n}\n\n/**\n * Convert whichever kind of spreadsheet file this is.\n *\n * For a drop target, which is handed whatever the user let go of and has to\n * decide afterwards. An `.xlsx` is a ZIP and delimited text is not, so the\n * format is settled by looking at the bytes rather than by trusting the name —\n * a file saved as `.csv` but actually a workbook is a common enough export\n * mistake to be worth handling quietly.\n */\nexport async function spreadsheetToFormulaEngine(\n source: Blob | ArrayBuffer | Uint8Array,\n options?: ConvertOptions & CsvConvertOptions\n): Promise<ExcelWorkbookData> {\n const { data } = await spreadsheetToFormulaEngineDetailed(source, options);\n return data;\n}\n\n/** As {@link spreadsheetToFormulaEngine}, with the diagnostics separately. */\nexport async function spreadsheetToFormulaEngineDetailed(\n source: Blob | ArrayBuffer | Uint8Array,\n options?: ConvertOptions & CsvConvertOptions\n): Promise<ConvertResult> {\n const bytes = await toBytes(source);\n if (looksLikeZip(bytes)) {\n return convertWorkbook(bytes, withFileName(source, options));\n }\n return csvToFormulaEngineDetailed(bytes, withCsvFileName(source, options));\n}\n\n/** Every .xlsx is a ZIP, and every ZIP starts `PK\\x03\\x04`. */\nfunction looksLikeZip(bytes: Uint8Array): boolean {\n return (\n bytes.length >= 4 &&\n bytes[0] === 0x50 &&\n bytes[1] === 0x4b &&\n bytes[2] === 0x03 &&\n bytes[3] === 0x04\n );\n}\n\nasync function toBytes(\n source: Blob | ArrayBuffer | Uint8Array\n): Promise<Uint8Array> {\n if (source instanceof Uint8Array) return source;\n if (source instanceof ArrayBuffer) return new Uint8Array(source);\n return new Uint8Array(await source.arrayBuffer());\n}\n\n/**\n * Default the sheet name to the file's own name, so a dropped `sales.csv`\n * becomes a sheet called `sales` rather than `Sheet1`.\n */\nfunction withCsvFileName(\n source: Blob | ArrayBuffer | Uint8Array | string,\n options: CsvConvertOptions | undefined\n): CsvConvertOptions {\n const name =\n typeof File !== \"undefined\" && source instanceof File ? source.name : undefined;\n const fileName = options?.fileName ?? name;\n if (!fileName) return { ...options };\n return {\n ...options,\n fileName,\n sheetName:\n options?.sheetName ??\n (fileName.replace(/\\.(csv|tsv|tab|txt)$/i, \"\").trim() || \"Sheet1\")\n };\n}\n\nexport { convertWorkbook };\nexport { convertDelimitedText } from \"./src/csv/convert\";\nexport {\n detectDelimiter,\n parseDelimitedText,\n stripBom,\n} from \"./src/csv/parse\";\n\nexport type {\n ConvertOptions,\n ConvertResult,\n CsvConvertOptions,\n Diagnostic,\n DiagnosticCode,\n DiagnosticSeverity,\n ExcelCellMetadata,\n ExcelSheetMetadata,\n ExcelWorkbookData,\n ExcelWorkbookMetadata,\n} from \"./src/types\";\n\nexport {\n findUnsupportedFunctions,\n offsetFormulaReferences,\n translateFormula,\n} from \"./src/translate/formula\";\n\nexport { excelSerialToIso } from \"./src/translate/dates\";\n\nexport {\n columnIndexToLabel,\n columnLabelToIndex,\n parseA1,\n parseA1Range,\n toA1,\n} from \"./src/a1\";\n"
15
17
  ],
16
- "mappings": "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",
17
- "debugId": "0B0A199FAC38549264756E2164756E21",
18
+ "mappings": "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",
19
+ "debugId": "D5F9B2A423DC266864756E2164756E21",
18
20
  "names": []
19
21
  }
@@ -10,7 +10,7 @@
10
10
  * ```
11
11
  */
12
12
  import { convertWorkbook } from "./src/convert";
13
- import type { ConvertOptions, ConvertResult, ExcelWorkbookData } from "./src/types";
13
+ import type { ConvertOptions, ConvertResult, CsvConvertOptions, ExcelWorkbookData } from "./src/types";
14
14
  /**
15
15
  * Convert an Excel file into engine `WorkbookData`.
16
16
  *
@@ -29,8 +29,33 @@ export declare function excelToFormulaEngine(source: Blob | ArrayBuffer | Uint8A
29
29
  * separate values.
30
30
  */
31
31
  export declare function excelToFormulaEngineDetailed(source: Blob | ArrayBuffer | Uint8Array, options?: ConvertOptions): Promise<ConvertResult>;
32
+ /**
33
+ * Convert delimited text — CSV, TSV, or semicolon-separated — into engine
34
+ * `WorkbookData` holding a single sheet.
35
+ *
36
+ * The delimiter is detected from the text unless one is given: a `.csv`
37
+ * extension says nothing about the separator, and a comma-decimal locale
38
+ * exports semicolons.
39
+ */
40
+ export declare function csvToFormulaEngine(source: Blob | ArrayBuffer | Uint8Array | string, options?: CsvConvertOptions): Promise<ExcelWorkbookData>;
41
+ /** As {@link csvToFormulaEngine}, with the diagnostics returned separately. */
42
+ export declare function csvToFormulaEngineDetailed(source: Blob | ArrayBuffer | Uint8Array | string, options?: CsvConvertOptions): Promise<ConvertResult>;
43
+ /**
44
+ * Convert whichever kind of spreadsheet file this is.
45
+ *
46
+ * For a drop target, which is handed whatever the user let go of and has to
47
+ * decide afterwards. An `.xlsx` is a ZIP and delimited text is not, so the
48
+ * format is settled by looking at the bytes rather than by trusting the name —
49
+ * a file saved as `.csv` but actually a workbook is a common enough export
50
+ * mistake to be worth handling quietly.
51
+ */
52
+ export declare function spreadsheetToFormulaEngine(source: Blob | ArrayBuffer | Uint8Array, options?: ConvertOptions & CsvConvertOptions): Promise<ExcelWorkbookData>;
53
+ /** As {@link spreadsheetToFormulaEngine}, with the diagnostics separately. */
54
+ export declare function spreadsheetToFormulaEngineDetailed(source: Blob | ArrayBuffer | Uint8Array, options?: ConvertOptions & CsvConvertOptions): Promise<ConvertResult>;
32
55
  export { convertWorkbook };
33
- export type { ConvertOptions, ConvertResult, Diagnostic, DiagnosticCode, DiagnosticSeverity, ExcelCellMetadata, ExcelSheetMetadata, ExcelWorkbookData, ExcelWorkbookMetadata, } from "./src/types";
56
+ export { convertDelimitedText } from "./src/csv/convert";
57
+ export { detectDelimiter, parseDelimitedText, stripBom, } from "./src/csv/parse";
58
+ export type { ConvertOptions, ConvertResult, CsvConvertOptions, Diagnostic, DiagnosticCode, DiagnosticSeverity, ExcelCellMetadata, ExcelSheetMetadata, ExcelWorkbookData, ExcelWorkbookMetadata, } from "./src/types";
34
59
  export { findUnsupportedFunctions, offsetFormulaReferences, translateFormula, } from "./src/translate/formula";
35
60
  export { excelSerialToIso } from "./src/translate/dates";
36
61
  export { columnIndexToLabel, columnLabelToIndex, parseA1, parseA1Range, toA1, } from "./src/a1";
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Delimited text in, `WorkbookData` out.
3
+ *
4
+ * The interesting decisions here are all about what a bare string *is*. A CSV
5
+ * carries no types, so every cell is a judgement call, and the ones that matter
6
+ * are the cases where guessing wrong destroys data rather than merely looking
7
+ * wrong: a leading-zero part number, an identifier too long for a float.
8
+ */
9
+ import type { CsvConvertOptions, Diagnostic, ExcelWorkbookData } from "../types";
10
+ export interface ConvertCsvResult {
11
+ data: ExcelWorkbookData;
12
+ diagnostics: Diagnostic[];
13
+ }
14
+ export declare function convertDelimitedText(text: string, options?: CsvConvertOptions): ConvertCsvResult;
15
+ /**
16
+ * The numeric value of a field, or undefined to keep it as text.
17
+ *
18
+ * Deliberately narrower than `Number()`. Three kinds of string look numeric and
19
+ * must not be converted, because converting them loses information that cannot
20
+ * be recovered from the result:
21
+ *
22
+ * - Leading zeros (`007`, `01234`) — part numbers, postcodes, phone extensions.
23
+ * This is the mangling Excel is notorious for.
24
+ * - Integers beyond `Number.MAX_SAFE_INTEGER` — long identifiers, which silently
25
+ * change value when they become floats.
26
+ * - Anything `Number()` accepts that is not a plain decimal: `0x1f`, `Infinity`,
27
+ * `1_000`, and the empty string.
28
+ */
29
+ export declare function toNumber(raw: string): number | undefined;
30
+ /** Decode bytes as UTF-8, which is what every modern exporter writes. */
31
+ export declare function readTextFrom(source: Blob | ArrayBuffer | Uint8Array | string): Promise<string>;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Delimited-text parsing: CSV, TSV, and the semicolon-separated files a
3
+ * comma-decimal locale produces.
4
+ *
5
+ * Follows RFC 4180 for quoting — a field wrapped in double quotes may contain
6
+ * the delimiter, line breaks, and doubled quotes standing for one — because that
7
+ * is what every spreadsheet writes and the naive `split(",")` gets wrong on the
8
+ * first address field it meets.
9
+ */
10
+ /** Delimiters worth guessing between. */
11
+ export declare const CANDIDATE_DELIMITERS: readonly [",", "\t", ";", "|"];
12
+ export type Delimiter = string;
13
+ /**
14
+ * Split delimited text into rows of raw string fields.
15
+ *
16
+ * Values keep the exact text they had: trimming and type conversion are separate
17
+ * decisions made later, where the caller's options are in scope.
18
+ */
19
+ export declare function parseDelimitedText(text: string, delimiter: Delimiter): string[][];
20
+ /**
21
+ * Guess the delimiter from the text itself.
22
+ *
23
+ * Scores each candidate on how *consistently* it splits the first several lines
24
+ * rather than on how often it appears: prose full of commas scores badly because
25
+ * its lines disagree about the field count, while a two-column TSV scores
26
+ * perfectly on one tab per line. Quoted sections are skipped, so a comma inside
27
+ * `"Smith, J"` never votes for comma.
28
+ *
29
+ * Falls back to comma, which is both the commonest and the least surprising
30
+ * thing to be wrong about.
31
+ */
32
+ export declare function detectDelimiter(text: string, candidates?: readonly string[]): Delimiter;
33
+ /**
34
+ * Strip a UTF-8 byte-order mark.
35
+ *
36
+ * Excel writes one on every CSV it exports, and left in place it becomes part of
37
+ * the first header cell — where it is invisible, so the column looks right and
38
+ * every lookup against its name silently misses.
39
+ */
40
+ export declare function stripBom(text: string): string;
@@ -21,7 +21,9 @@ export type DiagnosticCode =
21
21
  /** A table could not be created. */
22
22
  | "skipped-table"
23
23
  /** A sheet was skipped, for example a chart sheet. */
24
- | "skipped-sheet";
24
+ | "skipped-sheet"
25
+ /** A delimiter had to be guessed from the text. */
26
+ | "guessed-delimiter";
25
27
  export interface Diagnostic {
26
28
  severity: DiagnosticSeverity;
27
29
  code: DiagnosticCode;
@@ -113,6 +115,45 @@ export interface ConvertOptions {
113
115
  */
114
116
  sheets?: string[];
115
117
  }
118
+ /**
119
+ * Options for reading delimited text (CSV, TSV).
120
+ *
121
+ * The parsing defaults match what a spreadsheet does with the same file, on the
122
+ * grounds that the file usually came out of one.
123
+ *
124
+ * There is deliberately no option to keep `=`-leading fields as text. The engine
125
+ * stores a formula as a string beginning with `=` and has no escape for text
126
+ * that merely looks like one, so such an option could only be honoured by
127
+ * altering the value — which is worse than not offering it.
128
+ */
129
+ export interface CsvConvertOptions {
130
+ /** Name for the single sheet the file becomes. @default "Sheet1" */
131
+ sheetName?: string;
132
+ /** Recorded in workbook metadata. */
133
+ fileName?: string;
134
+ /**
135
+ * Field separator. Detected from the text when omitted, which is the right
136
+ * choice for `.csv` — the extension says nothing about the separator, and a
137
+ * comma-decimal locale writes semicolons.
138
+ */
139
+ delimiter?: string;
140
+ /**
141
+ * Convert plain decimals to numbers. Leading-zero strings and integers too
142
+ * long to survive as floats are kept as text either way.
143
+ * @default true
144
+ */
145
+ parseNumbers?: boolean;
146
+ /** Convert `TRUE` / `FALSE` (any case) to booleans. @default true */
147
+ parseBooleans?: boolean;
148
+ /**
149
+ * Strip surrounding whitespace from every field.
150
+ *
151
+ * Off by default because the whitespace may be data, and a quoted field that
152
+ * carries it meant to.
153
+ * @default false
154
+ */
155
+ trimFields?: boolean;
156
+ }
116
157
  export interface ConvertResult {
117
158
  data: ExcelWorkbookData;
118
159
  diagnostics: Diagnostic[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ricsam/excel-to-formula-engine",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Convert an Excel .xlsx file into FormulaEngine WorkbookData, in the browser",
5
5
  "type": "module",
6
6
  "module": "./dist/index.mjs",