@markitdownjs/xlsx 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=xlsx-converter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx-converter.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/xlsx-converter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { XlsxConverter } from '../xlsx-converter.js';
3
+ describe('XlsxConverter', () => {
4
+ const converter = new XlsxConverter();
5
+ it('should detect XLSX by MIME type', async () => {
6
+ expect(await converter.canConvert({
7
+ data: '',
8
+ mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
9
+ })).toBe(true);
10
+ });
11
+ it('should detect XLSX by extension', async () => {
12
+ expect(await converter.canConvert({ data: '', fileName: 'data.xlsx' })).toBe(true);
13
+ });
14
+ it('should detect XLSX by PK magic bytes (ZIP)', async () => {
15
+ const zipHeader = new Uint8Array([0x50, 0x4b, 0x03, 0x04, 0, 0, 0, 0]);
16
+ expect(await converter.canConvert({ data: zipHeader })).toBe(true);
17
+ });
18
+ it('should reject non-XLSX files', async () => {
19
+ expect(await converter.canConvert({ data: 'hello', fileName: 'test.txt' })).toBe(false);
20
+ });
21
+ });
22
+ //# sourceMappingURL=xlsx-converter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx-converter.test.js","sourceRoot":"","sources":["../../src/__tests__/xlsx-converter.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,MAAM,SAAS,GAAG,IAAI,aAAa,EAAE,CAAC;IAEtC,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,CAAC,MAAM,SAAS,CAAC,UAAU,CAAC;YAChC,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,mEAAmE;SAC9E,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,CAAC,MAAM,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,MAAM,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,CAAC,MAAM,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { XlsxConverter } from "./xlsx-converter.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { XlsxConverter } from "./xlsx-converter.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,80 @@
1
+ import type { Converter, ConversionInput, ConversionResult } from "@markitdownjs/shared";
2
+ /** Convert XLSX files to markdown via AST-first processing. */
3
+ export declare class XlsxConverter implements Converter {
4
+ readonly id: "xlsx";
5
+ readonly supportedMimeTypes: string[];
6
+ readonly supportedExtensions: string[];
7
+ /**
8
+ * Determine whether this converter can handle the given input.
9
+ * @param input - The conversion input to inspect.
10
+ * @returns True if the input is a supported XLSX.
11
+ */
12
+ canConvert(input: ConversionInput): Promise<boolean>;
13
+ /**
14
+ * Convert an XLSX workbook into markdown via an AST intermediate.
15
+ *
16
+ * The converter uses JSZip to unpack the archive, parses the workbook for
17
+ * sheet names, reads the shared string table, then processes every sheet
18
+ * extracting cell data with proper type handling (string, number, boolean)
19
+ * and merge cell support.
20
+ *
21
+ * @param input - The conversion input containing XLSX data.
22
+ * @returns A complete ConversionResult with markdown, AST, and metadata.
23
+ */
24
+ convert(input: ConversionInput): Promise<ConversionResult>;
25
+ /**
26
+ * Parse xl/sharedStrings.xml to build the shared string index.
27
+ *
28
+ * @param zip - The JSZip archive of the XLSX.
29
+ * @returns A Map from string index to string value.
30
+ */
31
+ private parseSharedStrings;
32
+ /**
33
+ * Parse xl/workbook.xml to extract sheet names and their indices.
34
+ *
35
+ * @param zip - The JSZip archive of the XLSX.
36
+ * @returns An array of SheetInfo objects with name, rid, and sheet index.
37
+ */
38
+ private parseWorkbook;
39
+ /**
40
+ * Parse xl/worksheets/sheetN.xml to extract cell data and merge ranges.
41
+ *
42
+ * @param zip - The JSZip archive of the XLSX.
43
+ * @param sheetNumber - The 1-based sheet index.
44
+ * @param sharedStrings - The shared string table.
45
+ * @returns An object with cells and merges arrays.
46
+ */
47
+ private parseSheet;
48
+ /**
49
+ * Convert a column letter string to a zero-based index.
50
+ *
51
+ * Supports single letters (A-Z) and multi-character columns (AA, AB, etc.).
52
+ *
53
+ * @param col - The column letter(s).
54
+ * @returns Zero-based column index.
55
+ */
56
+ private columnLetterToIndex;
57
+ /**
58
+ * Build a TableNode from a 2D string grid.
59
+ *
60
+ * The first row is treated as the header row.
61
+ *
62
+ * @param grid - A 2D array of cell values.
63
+ * @returns A TableNode AST node.
64
+ */
65
+ private buildTableFromGrid;
66
+ /**
67
+ * Convert a 2D string grid into a TableData summary.
68
+ *
69
+ * @param grid - A 2D array of cell values.
70
+ * @returns A TableData object.
71
+ */
72
+ private gridToTableData;
73
+ /**
74
+ * Convert input data to a Uint8Array.
75
+ * @param data - The input data in any supported format.
76
+ * @returns The data as a Uint8Array.
77
+ */
78
+ private toByteArray;
79
+ }
80
+ //# sourceMappingURL=xlsx-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx-converter.d.ts","sourceRoot":"","sources":["../src/xlsx-converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,gBAAgB,EAIjB,MAAM,sBAAsB,CAAC;AAsC9B,+DAA+D;AAC/D,qBAAa,aAAc,YAAW,SAAS;IAC7C,QAAQ,CAAC,EAAE,EAAG,MAAM,CAAU;IAC9B,QAAQ,CAAC,kBAAkB,WAEzB;IACF,QAAQ,CAAC,mBAAmB,WAAa;IAEzC;;;;OAIG;IACG,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IA4B1D;;;;;;;;;;OAUG;IACG,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8HhE;;;;;OAKG;YACW,kBAAkB;IAyBhC;;;;;OAKG;YACW,aAAa;IAmB3B;;;;;;;OAOG;YACW,UAAU;IAmFxB;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAQvB;;;;OAIG;YACW,WAAW;CAQ1B"}
@@ -0,0 +1,366 @@
1
+ import { createNode, parseXML, } from "@markitdownjs/shared";
2
+ import { MarkdownRenderer } from "@markitdownjs/ast";
3
+ /* eslint-enable @typescript-eslint/no-explicit-any */
4
+ /** Convert XLSX files to markdown via AST-first processing. */
5
+ export class XlsxConverter {
6
+ id = "xlsx";
7
+ supportedMimeTypes = [
8
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
9
+ ];
10
+ supportedExtensions = [".xlsx"];
11
+ /**
12
+ * Determine whether this converter can handle the given input.
13
+ * @param input - The conversion input to inspect.
14
+ * @returns True if the input is a supported XLSX.
15
+ */
16
+ async canConvert(input) {
17
+ if (input.mimeType && this.supportedMimeTypes.includes(input.mimeType)) {
18
+ return true;
19
+ }
20
+ if (input.fileName) {
21
+ const ext = input.fileName.toLowerCase();
22
+ if (this.supportedExtensions.some((e) => ext.endsWith(e))) {
23
+ return true;
24
+ }
25
+ }
26
+ if (input.data instanceof Uint8Array || input.data instanceof ArrayBuffer) {
27
+ const bytes = input.data instanceof Uint8Array
28
+ ? input.data
29
+ : new Uint8Array(input.data);
30
+ if (bytes.length >= 4 &&
31
+ bytes[0] === 0x50 &&
32
+ bytes[1] === 0x4b &&
33
+ bytes[2] === 0x03 &&
34
+ bytes[3] === 0x04) {
35
+ return true;
36
+ }
37
+ }
38
+ return false;
39
+ }
40
+ /**
41
+ * Convert an XLSX workbook into markdown via an AST intermediate.
42
+ *
43
+ * The converter uses JSZip to unpack the archive, parses the workbook for
44
+ * sheet names, reads the shared string table, then processes every sheet
45
+ * extracting cell data with proper type handling (string, number, boolean)
46
+ * and merge cell support.
47
+ *
48
+ * @param input - The conversion input containing XLSX data.
49
+ * @returns A complete ConversionResult with markdown, AST, and metadata.
50
+ */
51
+ async convert(input) {
52
+ const startTime = Date.now();
53
+ const data = await this.toByteArray(input.data);
54
+ const JSZip = (await import("jszip")).default;
55
+ const zip = await JSZip.loadAsync(data);
56
+ const renderer = new MarkdownRenderer();
57
+ const sharedStrings = await this.parseSharedStrings(zip);
58
+ const sheets = await this.parseWorkbook(zip);
59
+ const sectionNodes = [];
60
+ const headings = [];
61
+ const tables = [];
62
+ for (const sheet of sheets) {
63
+ const { cells, merges } = await this.parseSheet(zip, sheet.index, sharedStrings);
64
+ if (cells.length === 0)
65
+ continue;
66
+ // Determine grid dimensions.
67
+ let maxRow = 0;
68
+ let maxCol = 0;
69
+ for (const cell of cells) {
70
+ if (cell.row > maxRow)
71
+ maxRow = cell.row;
72
+ if (cell.col > maxCol)
73
+ maxCol = cell.col;
74
+ }
75
+ // Build a lookup map for quick cell access.
76
+ const cellMap = new Map();
77
+ for (const cell of cells) {
78
+ cellMap.set(`${cell.row},${cell.col}`, cell);
79
+ }
80
+ // Resolve merged cells: copy the top-left value into all merged positions.
81
+ for (const merge of merges) {
82
+ const topCell = cellMap.get(`${merge.startRow},${merge.startCol}`);
83
+ if (!topCell)
84
+ continue;
85
+ for (let r = merge.startRow; r <= merge.endRow; r++) {
86
+ for (let c = merge.startCol; c <= merge.endCol; c++) {
87
+ if (r === merge.startRow && c === merge.startCol)
88
+ continue;
89
+ cellMap.set(`${r},${c}`, {
90
+ value: topCell.value,
91
+ type: topCell.type,
92
+ row: r,
93
+ col: c,
94
+ });
95
+ }
96
+ }
97
+ // Expand grid bounds.
98
+ if (merge.endRow > maxRow)
99
+ maxRow = merge.endRow;
100
+ if (merge.endCol > maxCol)
101
+ maxCol = merge.endCol;
102
+ }
103
+ // Build the grid.
104
+ const grid = [];
105
+ for (let r = 0; r <= maxRow; r++) {
106
+ const row = [];
107
+ for (let c = 0; c <= maxCol; c++) {
108
+ const cell = cellMap.get(`${r},${c}`);
109
+ row.push(cell?.value ?? "");
110
+ }
111
+ grid.push(row);
112
+ }
113
+ if (grid.length === 0)
114
+ continue;
115
+ // Build AST: SectionNode > HeadingNode + TableNode.
116
+ const sheetChildren = [];
117
+ const headingNode = createNode({
118
+ type: "heading",
119
+ level: 2,
120
+ children: [
121
+ createNode({ type: "text", value: sheet.name }),
122
+ ],
123
+ });
124
+ sheetChildren.push(headingNode);
125
+ headings.push({ level: 2, text: sheet.name });
126
+ // Build table from grid.
127
+ const tableNode = this.buildTableFromGrid(grid);
128
+ sheetChildren.push(tableNode);
129
+ // Build TableData summary.
130
+ const tableData = this.gridToTableData(grid);
131
+ tables.push(tableData);
132
+ sectionNodes.push(createNode({
133
+ type: "section",
134
+ title: sheet.name,
135
+ children: sheetChildren,
136
+ }));
137
+ }
138
+ const ast = createNode({
139
+ type: "document",
140
+ children: sectionNodes,
141
+ });
142
+ const markdown = renderer.render(ast);
143
+ const endTime = Date.now();
144
+ return {
145
+ markdown,
146
+ metadata: {
147
+ format: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
148
+ source: "jszip",
149
+ },
150
+ assets: [],
151
+ tables,
152
+ images: [],
153
+ headings,
154
+ ast,
155
+ format: "markdown",
156
+ converterId: this.id,
157
+ stats: {
158
+ startTime,
159
+ endTime,
160
+ duration: endTime - startTime,
161
+ inputSize: data.length,
162
+ outputSize: markdown.length,
163
+ },
164
+ };
165
+ }
166
+ /**
167
+ * Parse xl/sharedStrings.xml to build the shared string index.
168
+ *
169
+ * @param zip - The JSZip archive of the XLSX.
170
+ * @returns A Map from string index to string value.
171
+ */
172
+ async parseSharedStrings(zip) {
173
+ const map = new Map();
174
+ const xml = await zip.file("xl/sharedStrings.xml")?.async("string");
175
+ if (!xml)
176
+ return map;
177
+ const doc = await parseXML(xml);
178
+ const siElements = doc.getElementsByTagName("si");
179
+ for (let i = 0; i < siElements.length; i++) {
180
+ const siEl = siElements.item(i);
181
+ if (!siEl)
182
+ continue;
183
+ const texts = siEl.getElementsByTagName("t");
184
+ let value = "";
185
+ for (let j = 0; j < texts.length; j++) {
186
+ const tEl = texts.item(j);
187
+ if (tEl)
188
+ value += tEl.textContent ?? "";
189
+ }
190
+ map.set(i, value);
191
+ }
192
+ return map;
193
+ }
194
+ /**
195
+ * Parse xl/workbook.xml to extract sheet names and their indices.
196
+ *
197
+ * @param zip - The JSZip archive of the XLSX.
198
+ * @returns An array of SheetInfo objects with name, rid, and sheet index.
199
+ */
200
+ async parseWorkbook(zip) {
201
+ const sheets = [];
202
+ const xml = await zip.file("xl/workbook.xml")?.async("string");
203
+ if (!xml)
204
+ return sheets;
205
+ const doc = await parseXML(xml);
206
+ const sheetEls = doc.getElementsByTagName("sheet");
207
+ for (let i = 0; i < sheetEls.length; i++) {
208
+ const sheetEl = sheetEls.item(i);
209
+ if (!sheetEl)
210
+ continue;
211
+ const name = sheetEl.getAttribute("name") ?? `Sheet ${i + 1}`;
212
+ const rid = sheetEl.getAttribute("r:id") ?? "";
213
+ sheets.push({ name, rid, index: i + 1 });
214
+ }
215
+ return sheets;
216
+ }
217
+ /**
218
+ * Parse xl/worksheets/sheetN.xml to extract cell data and merge ranges.
219
+ *
220
+ * @param zip - The JSZip archive of the XLSX.
221
+ * @param sheetNumber - The 1-based sheet index.
222
+ * @param sharedStrings - The shared string table.
223
+ * @returns An object with cells and merges arrays.
224
+ */
225
+ async parseSheet(zip, sheetNumber, sharedStrings) {
226
+ const cells = [];
227
+ const merges = [];
228
+ const sheetPath = `xl/worksheets/sheet${sheetNumber}.xml`;
229
+ const xml = await zip.file(sheetPath)?.async("string");
230
+ if (!xml)
231
+ return { cells, merges };
232
+ const doc = await parseXML(xml);
233
+ // Parse merge cells.
234
+ const mergeCells = doc.getElementsByTagName("mergeCell");
235
+ for (let i = 0; i < mergeCells.length; i++) {
236
+ const mc = mergeCells.item(i);
237
+ if (!mc)
238
+ continue;
239
+ const ref = mc.getAttribute("ref") ?? "";
240
+ const match = ref.match(/^([A-Z]+)(\d+):([A-Z]+)(\d+)$/);
241
+ if (match) {
242
+ merges.push({
243
+ startCol: this.columnLetterToIndex(match[1]),
244
+ startRow: parseInt(match[2], 10) - 1,
245
+ endCol: this.columnLetterToIndex(match[3]),
246
+ endRow: parseInt(match[4], 10) - 1,
247
+ });
248
+ }
249
+ }
250
+ // Parse sheet data.
251
+ const sheetData = doc.getElementsByTagName("sheetData")[0];
252
+ if (!sheetData)
253
+ return { cells, merges };
254
+ const rowEls = sheetData.getElementsByTagName("row");
255
+ for (let i = 0; i < rowEls.length; i++) {
256
+ const rowEl = rowEls.item(i);
257
+ if (!rowEl)
258
+ continue;
259
+ const cellEls = rowEl.getElementsByTagName("c");
260
+ for (let j = 0; j < cellEls.length; j++) {
261
+ const cellEl = cellEls.item(j);
262
+ if (!cellEl)
263
+ continue;
264
+ const ref = cellEl.getAttribute("r") ?? "";
265
+ const type = cellEl.getAttribute("t") ?? "";
266
+ const vEl = cellEl.getElementsByTagName("v")[0];
267
+ let rawValue = vEl?.textContent ?? "";
268
+ // Resolve shared strings.
269
+ if (type === "s" && rawValue) {
270
+ const index = parseInt(rawValue, 10);
271
+ rawValue = sharedStrings.get(index) ?? rawValue;
272
+ }
273
+ // Handle boolean type.
274
+ if (type === "b") {
275
+ rawValue = rawValue === "1" ? "TRUE" : "FALSE";
276
+ }
277
+ // Parse cell position.
278
+ const colMatch = ref.match(/^([A-Z]+)/);
279
+ const rowMatch = ref.match(/(\d+)$/);
280
+ if (!colMatch || !rowMatch)
281
+ continue;
282
+ const col = this.columnLetterToIndex(colMatch[1]);
283
+ const row = parseInt(rowMatch[1], 10) - 1;
284
+ cells.push({
285
+ value: rawValue,
286
+ type,
287
+ row,
288
+ col,
289
+ });
290
+ }
291
+ }
292
+ return { cells, merges };
293
+ }
294
+ /**
295
+ * Convert a column letter string to a zero-based index.
296
+ *
297
+ * Supports single letters (A-Z) and multi-character columns (AA, AB, etc.).
298
+ *
299
+ * @param col - The column letter(s).
300
+ * @returns Zero-based column index.
301
+ */
302
+ columnLetterToIndex(col) {
303
+ let index = 0;
304
+ for (let i = 0; i < col.length; i++) {
305
+ index = index * 26 + (col.charCodeAt(i) - 64);
306
+ }
307
+ return index - 1;
308
+ }
309
+ /**
310
+ * Build a TableNode from a 2D string grid.
311
+ *
312
+ * The first row is treated as the header row.
313
+ *
314
+ * @param grid - A 2D array of cell values.
315
+ * @returns A TableNode AST node.
316
+ */
317
+ buildTableFromGrid(grid) {
318
+ const rows = [];
319
+ for (let r = 0; r < grid.length; r++) {
320
+ const row = grid[r];
321
+ const isHeader = r === 0;
322
+ rows.push(createNode({
323
+ type: "table-row",
324
+ isHeader,
325
+ children: row.map((cellValue) => createNode({
326
+ type: "table-cell",
327
+ children: [
328
+ createNode({ type: "text", value: cellValue }),
329
+ ],
330
+ })),
331
+ }));
332
+ }
333
+ return createNode({
334
+ type: "table",
335
+ children: rows,
336
+ });
337
+ }
338
+ /**
339
+ * Convert a 2D string grid into a TableData summary.
340
+ *
341
+ * @param grid - A 2D array of cell values.
342
+ * @returns A TableData object.
343
+ */
344
+ gridToTableData(grid) {
345
+ if (grid.length === 0)
346
+ return { headers: [], rows: [] };
347
+ const headers = grid[0];
348
+ const rows = grid.slice(1);
349
+ return { headers, rows };
350
+ }
351
+ /**
352
+ * Convert input data to a Uint8Array.
353
+ * @param data - The input data in any supported format.
354
+ * @returns The data as a Uint8Array.
355
+ */
356
+ async toByteArray(data) {
357
+ if (data instanceof Uint8Array)
358
+ return data;
359
+ if (data instanceof ArrayBuffer)
360
+ return new Uint8Array(data);
361
+ if (data instanceof Blob)
362
+ return new Uint8Array(await data.arrayBuffer());
363
+ return new TextEncoder().encode(data);
364
+ }
365
+ }
366
+ //# sourceMappingURL=xlsx-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx-converter.js","sourceRoot":"","sources":["../src/xlsx-converter.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@markitdownjs/xlsx",
3
+ "version": "0.1.0",
4
+ "description": "Excel (XLSX) converter for MarkItDownJS",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "module": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/index.js",
13
+ "types": "./dist/index.d.ts"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "dependencies": {
20
+ "jszip": "^3.10.0",
21
+ "@markitdownjs/ast": "0.1.0",
22
+ "@markitdownjs/shared": "0.1.0"
23
+ },
24
+ "devDependencies": {
25
+ "typescript": "^5.5.0"
26
+ },
27
+ "scripts": {
28
+ "build": "tsc --project tsconfig.json",
29
+ "dev": "tsc --watch --project tsconfig.json",
30
+ "typecheck": "tsc --noEmit",
31
+ "clean": "rm -rf dist tsconfig.tsbuildinfo"
32
+ }
33
+ }