odf-kit 0.9.7 → 0.9.9

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.
@@ -0,0 +1,449 @@
1
+ /**
2
+ * XLSX reader — parses an .xlsx file into an intermediate XlsxWorkbook model.
3
+ *
4
+ * Parsing pipeline:
5
+ * 1. Unzip the .xlsx bytes with fflate
6
+ * 2. Parse xl/workbook.xml → sheet names and rIds
7
+ * 3. Parse xl/_rels/workbook.xml.rels → rId → file path map
8
+ * 4. Parse xl/sharedStrings.xml → string lookup array
9
+ * 5. Parse xl/styles.xml → style index → date format detection
10
+ * 6. Parse each xl/worksheets/sheet*.xml → rows, cells, merges, freeze
11
+ * 7. Return XlsxWorkbook
12
+ *
13
+ * No external dependencies — uses fflate for ZIP and our existing xml-parser.
14
+ */
15
+ import { unzipSync, strFromU8 } from "fflate";
16
+ import { parseXml } from "../reader/xml-parser.js";
17
+ // ─── XML Helpers ──────────────────────────────────────────────────────
18
+ /** Strip namespace prefix from tag name: "ss:sheet" → "sheet", "sheet" → "sheet" */
19
+ function localName(tag) {
20
+ const colon = tag.indexOf(":");
21
+ return colon === -1 ? tag : tag.slice(colon + 1);
22
+ }
23
+ /** Find first child whose local name matches, ignoring namespace prefix. */
24
+ function findLocal(node, local) {
25
+ for (const child of node.children) {
26
+ if (child.type === "element" && localName(child.tag) === local)
27
+ return child;
28
+ }
29
+ return undefined;
30
+ }
31
+ function findLocals(node, local) {
32
+ return node.children.filter((c) => c.type === "element" && localName(c.tag) === local);
33
+ }
34
+ /** Get text content of all direct text children. */
35
+ function textContent(node) {
36
+ return node.children
37
+ .filter((c) => c.type === "text")
38
+ .map((c) => c.text)
39
+ .join("");
40
+ }
41
+ // ─── Cell Reference Parsing ───────────────────────────────────────────
42
+ /**
43
+ * Parse a cell reference like "A1", "Z3", "AA10" into zero-based col/row indices.
44
+ */
45
+ export function parseCellRef(ref) {
46
+ const match = ref.match(/^([A-Z]+)(\d+)$/);
47
+ if (!match)
48
+ throw new Error(`Invalid cell reference: ${ref}`);
49
+ const colStr = match[1];
50
+ const rowStr = match[2];
51
+ let col = 0;
52
+ for (const ch of colStr) {
53
+ col = col * 26 + (ch.charCodeAt(0) - 64);
54
+ }
55
+ return { col: col - 1, row: parseInt(rowStr, 10) - 1 };
56
+ }
57
+ /**
58
+ * Parse a merge range like "A1:C2" into start position and span.
59
+ */
60
+ export function parseMergeRef(ref) {
61
+ const [start, end] = ref.split(":");
62
+ const s = parseCellRef(start);
63
+ const e = parseCellRef(end);
64
+ return {
65
+ startCol: s.col,
66
+ startRow: s.row,
67
+ colSpan: e.col - s.col + 1,
68
+ rowSpan: e.row - s.row + 1,
69
+ };
70
+ }
71
+ // ─── Date Handling ────────────────────────────────────────────────────
72
+ /**
73
+ * Built-in XLSX numFmtId values that represent date or time formats.
74
+ * These are defined by the OOXML spec and always mean date/time regardless
75
+ * of any custom numFmts definitions.
76
+ */
77
+ const BUILTIN_DATE_FORMAT_IDS = new Set([
78
+ 14,
79
+ 15,
80
+ 16,
81
+ 17, // m/d/yy variants
82
+ 18,
83
+ 19,
84
+ 20,
85
+ 21,
86
+ 22, // h:mm variants and m/d/yy h:mm
87
+ 27,
88
+ 28,
89
+ 29,
90
+ 30,
91
+ 31, // CJK date formats
92
+ 32,
93
+ 33,
94
+ 34,
95
+ 35,
96
+ 36, // CJK time/date formats
97
+ 45,
98
+ 46,
99
+ 47, // mm:ss variants
100
+ 50,
101
+ 51,
102
+ 52,
103
+ 53,
104
+ 54, // more CJK
105
+ 55,
106
+ 56,
107
+ 57,
108
+ 58, // more CJK
109
+ ]);
110
+ /**
111
+ * Returns true if a custom number format code represents a date/time.
112
+ * Strips quoted strings first, then checks for date tokens (y, m, d, h).
113
+ */
114
+ export function isDateFormatCode(code) {
115
+ // Remove quoted literals like "yyyy" or "mm"
116
+ const stripped = code.replace(/"[^"]*"/g, "").toLowerCase();
117
+ // Remove numeric format tokens that look like date chars but aren't
118
+ if (/^[#0,. %]+$/.test(stripped))
119
+ return false;
120
+ return /[ymd]/.test(stripped);
121
+ }
122
+ /**
123
+ * Returns true if the given style index refers to a date/time format.
124
+ */
125
+ export function isDateStyle(styleIndex, cellXfs, customFormats) {
126
+ if (styleIndex < 0 || styleIndex >= cellXfs.length)
127
+ return false;
128
+ const numFmtId = cellXfs[styleIndex];
129
+ if (BUILTIN_DATE_FORMAT_IDS.has(numFmtId))
130
+ return true;
131
+ const custom = customFormats.get(numFmtId);
132
+ return custom !== undefined && isDateFormatCode(custom);
133
+ }
134
+ /**
135
+ * Convert an XLSX serial date number to a JavaScript Date (UTC).
136
+ *
137
+ * Excel stores dates as days since January 0, 1900, with a deliberate
138
+ * off-by-one bug inherited from Lotus 1-2-3 (Excel incorrectly treats
139
+ * 1900 as a leap year). The correct epoch is December 30, 1899 UTC.
140
+ */
141
+ export function xlsxSerialToDate(serial) {
142
+ // Excel serial 1 = January 1, 1900. Epoch = December 31, 1899.
143
+ // Excel incorrectly treats 1900 as a leap year (serial 60 = Feb 29, 1900,
144
+ // which never existed). For serials > 60, subtract 1 to correct this.
145
+ // serial 1 → no correction → Dec 31 + 1 day = Jan 1, 1900 ✓
146
+ // serial 25569 → corrected to 25568 → Dec 31 + 25568 days = Jan 1, 1970 ✓
147
+ const corrected = serial > 60 ? serial - 1 : serial;
148
+ const epoch = Date.UTC(1899, 11, 31); // December 31, 1899
149
+ const ms = Math.round(corrected * 24 * 60 * 60 * 1000);
150
+ return new Date(epoch + ms);
151
+ }
152
+ function parseStyles(xml) {
153
+ const cellXfs = [];
154
+ const customFormats = new Map();
155
+ try {
156
+ const root = parseXml(xml);
157
+ // Custom numFmts
158
+ const numFmtsEl = findLocal(root, "numFmts");
159
+ if (numFmtsEl) {
160
+ for (const fmt of findLocals(numFmtsEl, "numFmt")) {
161
+ const id = parseInt(fmt.attrs["numFmtId"] ?? "-1", 10);
162
+ const code = fmt.attrs["formatCode"] ?? "";
163
+ if (id >= 0)
164
+ customFormats.set(id, code);
165
+ }
166
+ }
167
+ // cellXfs
168
+ const cellXfsEl = findLocal(root, "cellXfs");
169
+ if (cellXfsEl) {
170
+ for (const xf of findLocals(cellXfsEl, "xf")) {
171
+ const numFmtId = parseInt(xf.attrs["numFmtId"] ?? "0", 10);
172
+ cellXfs.push(numFmtId);
173
+ }
174
+ }
175
+ }
176
+ catch {
177
+ // Malformed styles.xml — return empty, cells won't be detected as dates
178
+ }
179
+ return { cellXfs, customFormats };
180
+ }
181
+ // ─── Shared Strings Parser ────────────────────────────────────────────
182
+ function parseSharedStrings(xml) {
183
+ const strings = [];
184
+ try {
185
+ const root = parseXml(xml);
186
+ for (const si of findLocals(root, "si")) {
187
+ // Simple case: <si><t>text</t></si>
188
+ const t = findLocal(si, "t");
189
+ if (t) {
190
+ strings.push(textContent(t));
191
+ continue;
192
+ }
193
+ // Rich text case: <si><r><t>part1</t></r><r><t>part2</t></r></si>
194
+ const parts = [];
195
+ for (const r of findLocals(si, "r")) {
196
+ const rt = findLocal(r, "t");
197
+ if (rt)
198
+ parts.push(textContent(rt));
199
+ }
200
+ strings.push(parts.join(""));
201
+ }
202
+ }
203
+ catch {
204
+ // Malformed sharedStrings.xml — return empty array
205
+ }
206
+ return strings;
207
+ }
208
+ function parseWorkbook(xml) {
209
+ const sheets = [];
210
+ try {
211
+ const root = parseXml(xml);
212
+ const sheetsEl = findLocal(root, "sheets");
213
+ if (sheetsEl) {
214
+ for (const sheet of findLocals(sheetsEl, "sheet")) {
215
+ const name = sheet.attrs["name"] ?? "Sheet";
216
+ // rId may be "r:id" or "relationships:id" depending on namespace
217
+ const rId = sheet.attrs["r:id"] ??
218
+ Object.entries(sheet.attrs).find(([k]) => k.endsWith(":id"))?.[1] ??
219
+ "";
220
+ if (rId)
221
+ sheets.push({ name, rId });
222
+ }
223
+ }
224
+ }
225
+ catch {
226
+ // Malformed workbook.xml
227
+ }
228
+ return sheets;
229
+ }
230
+ function parseWorkbookRels(xml) {
231
+ const map = new Map();
232
+ try {
233
+ const root = parseXml(xml);
234
+ for (const rel of findLocals(root, "Relationship")) {
235
+ const id = rel.attrs["Id"] ?? "";
236
+ const target = rel.attrs["Target"] ?? "";
237
+ const type = rel.attrs["Type"] ?? "";
238
+ if (id && target && type.includes("worksheet")) {
239
+ // Normalize path: Target may be "worksheets/sheet1.xml" → "xl/worksheets/sheet1.xml"
240
+ const path = target.startsWith("xl/") ? target : `xl/${target}`;
241
+ map.set(id, path);
242
+ }
243
+ }
244
+ }
245
+ catch {
246
+ // Malformed rels
247
+ }
248
+ return map;
249
+ }
250
+ // ─── Sheet Parser ─────────────────────────────────────────────────────
251
+ function parseSheet(xml, sharedStrings, styles) {
252
+ const rows = new Map();
253
+ const merges = new Map();
254
+ const coveredCells = new Set();
255
+ let freezeRows;
256
+ let freezeColumns;
257
+ try {
258
+ const root = parseXml(xml);
259
+ // Freeze pane from sheetView
260
+ const sheetViews = findLocal(root, "sheetViews");
261
+ if (sheetViews) {
262
+ const sheetView = findLocal(sheetViews, "sheetView");
263
+ if (sheetView) {
264
+ const pane = findLocal(sheetView, "pane");
265
+ if (pane && pane.attrs["state"] === "frozen") {
266
+ const ySplit = parseInt(pane.attrs["ySplit"] ?? "0", 10);
267
+ const xSplit = parseInt(pane.attrs["xSplit"] ?? "0", 10);
268
+ if (ySplit > 0)
269
+ freezeRows = ySplit;
270
+ if (xSplit > 0)
271
+ freezeColumns = xSplit;
272
+ }
273
+ }
274
+ }
275
+ // Merge cells
276
+ const mergeCellsEl = findLocal(root, "mergeCells");
277
+ if (mergeCellsEl) {
278
+ for (const mc of findLocals(mergeCellsEl, "mergeCell")) {
279
+ const ref = mc.attrs["ref"];
280
+ if (!ref || !ref.includes(":"))
281
+ continue;
282
+ const m = parseMergeRef(ref);
283
+ merges.set(`${m.startCol}:${m.startRow}`, {
284
+ colSpan: m.colSpan,
285
+ rowSpan: m.rowSpan,
286
+ });
287
+ // Mark covered cells
288
+ for (let r = m.startRow; r < m.startRow + m.rowSpan; r++) {
289
+ for (let c = m.startCol; c < m.startCol + m.colSpan; c++) {
290
+ if (r === m.startRow && c === m.startCol)
291
+ continue; // skip primary
292
+ coveredCells.add(`${c}:${r}`);
293
+ }
294
+ }
295
+ }
296
+ }
297
+ // Sheet data
298
+ const sheetData = findLocal(root, "sheetData");
299
+ if (!sheetData)
300
+ return { name: "", rows, merges, coveredCells, freezeRows, freezeColumns };
301
+ for (const rowEl of findLocals(sheetData, "row")) {
302
+ const rowAttr = rowEl.attrs["r"];
303
+ if (!rowAttr)
304
+ continue;
305
+ const rowIdx = parseInt(rowAttr, 10) - 1;
306
+ const cells = new Map();
307
+ for (const cellEl of findLocals(rowEl, "c")) {
308
+ const cellRef = cellEl.attrs["r"];
309
+ if (!cellRef)
310
+ continue;
311
+ let colIdx;
312
+ try {
313
+ colIdx = parseCellRef(cellRef).col;
314
+ }
315
+ catch {
316
+ continue;
317
+ }
318
+ const t = cellEl.attrs["t"] ?? "n"; // type attribute
319
+ const s = parseInt(cellEl.attrs["s"] ?? "-1", 10); // style index
320
+ const vEl = findLocal(cellEl, "v");
321
+ const fEl = findLocal(cellEl, "f");
322
+ const isEl = findLocal(cellEl, "is"); // inline string
323
+ const rawValue = vEl ? textContent(vEl) : null;
324
+ const formulaStr = fEl ? textContent(fEl) : undefined;
325
+ let cell;
326
+ if (t === "s" && rawValue !== null) {
327
+ // Shared string
328
+ const idx = parseInt(rawValue, 10);
329
+ cell = {
330
+ type: "string",
331
+ value: sharedStrings[idx] ?? "",
332
+ formula: formulaStr,
333
+ };
334
+ }
335
+ else if (t === "b") {
336
+ // Boolean
337
+ cell = {
338
+ type: "boolean",
339
+ value: rawValue === "1",
340
+ formula: formulaStr,
341
+ };
342
+ }
343
+ else if (t === "str") {
344
+ // Formula result string
345
+ cell = {
346
+ type: "formula",
347
+ value: rawValue ?? "",
348
+ formula: formulaStr,
349
+ };
350
+ }
351
+ else if (t === "inlineStr" && isEl) {
352
+ // Inline string
353
+ const tEl = findLocal(isEl, "t");
354
+ cell = {
355
+ type: "string",
356
+ value: tEl ? textContent(tEl) : "",
357
+ };
358
+ }
359
+ else if (t === "e") {
360
+ // Error
361
+ cell = {
362
+ type: "error",
363
+ value: rawValue ?? "#ERROR!",
364
+ formula: formulaStr,
365
+ };
366
+ }
367
+ else {
368
+ // Number, date, or formula with numeric result
369
+ if (rawValue === null) {
370
+ cell = { type: "empty", value: null };
371
+ }
372
+ else {
373
+ const num = parseFloat(rawValue);
374
+ const isDate = s >= 0 && isDateStyle(s, styles.cellXfs, styles.customFormats);
375
+ if (formulaStr) {
376
+ cell = {
377
+ type: "formula",
378
+ value: isDate ? xlsxSerialToDate(num) : num,
379
+ formula: formulaStr,
380
+ };
381
+ }
382
+ else if (isDate) {
383
+ cell = { type: "date", value: xlsxSerialToDate(num) };
384
+ }
385
+ else {
386
+ cell = { type: "number", value: num };
387
+ }
388
+ }
389
+ }
390
+ cells.set(colIdx, cell);
391
+ }
392
+ if (cells.size > 0) {
393
+ rows.set(rowIdx, { cells });
394
+ }
395
+ }
396
+ }
397
+ catch {
398
+ // Malformed sheet XML — return what we have
399
+ }
400
+ return { name: "", rows, merges, coveredCells, freezeRows, freezeColumns };
401
+ }
402
+ // ─── Public API ───────────────────────────────────────────────────────
403
+ /**
404
+ * Parse an XLSX file into an intermediate XlsxWorkbook model.
405
+ *
406
+ * @param bytes - Raw .xlsx file bytes (Uint8Array or ArrayBuffer).
407
+ * @returns XlsxWorkbook with typed cell values.
408
+ */
409
+ export function readXlsx(bytes) {
410
+ const data = bytes instanceof ArrayBuffer ? new Uint8Array(bytes) : bytes;
411
+ const files = unzipSync(data);
412
+ const decode = (path) => {
413
+ const entry = files[path];
414
+ return entry ? strFromU8(entry) : null;
415
+ };
416
+ // Shared strings (optional)
417
+ const sharedStrings = (() => {
418
+ const xml = decode("xl/sharedStrings.xml");
419
+ return xml ? parseSharedStrings(xml) : [];
420
+ })();
421
+ // Styles (optional but needed for date detection)
422
+ const styles = (() => {
423
+ const xml = decode("xl/styles.xml");
424
+ return xml ? parseStyles(xml) : { cellXfs: [], customFormats: new Map() };
425
+ })();
426
+ // Workbook — sheet list
427
+ const workbookXml = decode("xl/workbook.xml");
428
+ if (!workbookXml)
429
+ return { sheets: [] };
430
+ const sheetRefs = parseWorkbook(workbookXml);
431
+ // Relationships — rId → file path
432
+ const relsXml = decode("xl/_rels/workbook.xml.rels");
433
+ const relsMap = relsXml ? parseWorkbookRels(relsXml) : new Map();
434
+ // Parse each sheet
435
+ const sheets = [];
436
+ for (const ref of sheetRefs) {
437
+ const path = relsMap.get(ref.rId);
438
+ if (!path)
439
+ continue;
440
+ const sheetXml = decode(path);
441
+ if (!sheetXml)
442
+ continue;
443
+ const sheet = parseSheet(sheetXml, sharedStrings, styles);
444
+ sheet.name = ref.name;
445
+ sheets.push(sheet);
446
+ }
447
+ return { sheets };
448
+ }
449
+ //# sourceMappingURL=reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/xlsx/reader.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "odf-kit",
3
- "version": "0.9.7",
3
+ "version": "0.9.9",
4
4
  "description": "Generate, fill, read, and convert OpenDocument Format (.odt) files in JavaScript and TypeScript. Works in Node.js and browsers.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -14,10 +14,22 @@
14
14
  "types": "./dist/odt/index.d.ts",
15
15
  "import": "./dist/odt/index.js"
16
16
  },
17
+ "./odt-reader": {
18
+ "types": "./dist/reader/index.d.ts",
19
+ "import": "./dist/reader/index.js"
20
+ },
17
21
  "./ods": {
18
22
  "types": "./dist/ods/index.d.ts",
19
23
  "import": "./dist/ods/index.js"
20
24
  },
25
+ "./ods-reader": {
26
+ "types": "./dist/ods-reader/index.d.ts",
27
+ "import": "./dist/ods-reader/index.js"
28
+ },
29
+ "./xlsx": {
30
+ "types": "./dist/xlsx/index.d.ts",
31
+ "import": "./dist/xlsx/index.js"
32
+ },
21
33
  "./template": {
22
34
  "types": "./dist/template/index.d.ts",
23
35
  "import": "./dist/template/index.js"