xlvane 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -5
- package/dist/cli.js +9 -17
- package/docs/exceljs-compat.md +1 -0
- package/llms-full.txt +13 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ Read, inspect and write XLSX files; input files are treated as untrusted. ESM on
|
|
|
6
6
|
npm install xlvane
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
The package also contains `docs/` (error codes, JSON schemas, exceljs compatibility), the Agent Skill `skills/xlvane/SKILL.md` and `llms-full.txt` (all of it in one file), for reading without network access: after installing, they are in `node_modules/xlvane/`. Links below point to the same files on GitHub.
|
|
9
|
+
The package also contains `docs/` (error codes, JSON schemas, exceljs compatibility), the Agent Skill `skills/xlvane/SKILL.md` and `llms-full.txt` (all of it in one file), for reading without network access: after installing, they are in `node_modules/xlvane/`. Links below point to the same files on GitHub. The skill can be installed into a project with the [`skills`](https://github.com/vercel-labs/skills) CLI, offline: `npx skills add ./node_modules/xlvane/skills --skill xlvane`.
|
|
10
10
|
|
|
11
11
|
## Quick start
|
|
12
12
|
|
|
@@ -30,12 +30,12 @@ From a shell: `npx xlvane inspect orders.xlsx`, then `npx xlvane read orders.xls
|
|
|
30
30
|
- [Tasks in one call](#tasks-in-one-call): tables of rows, CSV, JSON, editing files, diff · [inserting and deleting rows](#inserting-and-deleting-rows)
|
|
31
31
|
- [Large files: streaming](#large-files-streaming)
|
|
32
32
|
- [Inspecting a workbook](#inspecting-a-workbook) · [Errors and warnings](#errors-and-warnings) · [Untrusted input and limits](#untrusted-input-and-limits)
|
|
33
|
-
- [Limitations](#limitations) · [Package size](#package-size)
|
|
33
|
+
- [Limitations](#limitations) · [Package size](#package-size) · [Links](#links)
|
|
34
34
|
- exceljs users: [`@xlvane/compat`](https://www.npmjs.com/package/@xlvane/compat) and `xlvane migrate`
|
|
35
35
|
|
|
36
36
|
## Tested environments
|
|
37
37
|
|
|
38
|
-
The core API (reading, writing, inspect, tables, CSV, editing, diff, streaming with Web Streams) and `@xlvane/compat` are tested in Node.js 22, 24 and 26, Bun, Deno, Chromium (Playwright) and the Cloudflare Workers runtime (workerd), with the same test bundle (`npm run test:runtimes`). Reading is tested on 340 files of the Apache POI test corpus (written by Excel for Windows, Mac and the web, LibreOffice, ONLYOFFICE and others, and damaged files) and on files saved by LibreOffice; see `tests/corpus/`.
|
|
38
|
+
The core API (reading, writing, inspect, tables, CSV, editing, diff, streaming with Web Streams) and `@xlvane/compat` are tested in Node.js 22, 24 and 26, Bun, Deno, Chromium (Playwright) and the Cloudflare Workers runtime (workerd), with the same test bundle (`npm run test:runtimes`). In Deno, import from `npm:xlvane`; in browsers and Workers, through a bundler such as Vite, esbuild or webpack. `xlvane/node` and the command line need Node.js. Reading is tested on 340 files of the Apache POI test corpus (written by Excel for Windows, Mac and the web, LibreOffice, ONLYOFFICE and others, and damaged files) and on files saved by LibreOffice; see `tests/corpus/`.
|
|
39
39
|
|
|
40
40
|
## Command line in 5 minutes
|
|
41
41
|
|
|
@@ -335,7 +335,7 @@ const stream = writeWorkbookStream({ sheets: [{ name: 'Data', rows: rows() }] })
|
|
|
335
335
|
|
|
336
336
|
## Benchmark
|
|
337
337
|
|
|
338
|
-
100 000 rows × 20 columns (numbers, texts, dates, booleans). Median of 5 runs, each in a fresh Node.js 22.22.0 process. Machine: Intel Xeon @ 2.10 GHz, 4 logical cores, 15.7 GiB RAM, Linux (a cloud VM). Measured on 2026-10-30. Peak RSS includes Node.js and the imported libraries; the baseline with all three libraries imported is 135 MiB. Method, raw data and caveats: [bench/perf/RESULTS.md](
|
|
338
|
+
100 000 rows × 20 columns (numbers, texts, dates, booleans). Median of 5 runs, each in a fresh Node.js 22.22.0 process. Machine: Intel Xeon @ 2.10 GHz, 4 logical cores, 15.7 GiB RAM, Linux (a cloud VM). Measured on 2026-10-30. Peak RSS includes Node.js and the imported libraries; the baseline with all three libraries imported is 135 MiB. Method, raw data and caveats: [bench/perf/RESULTS.md](https://github.com/DevXord/xlvane/blob/main/bench/perf/RESULTS.md). Reproduce with `npm run bench`.
|
|
339
339
|
|
|
340
340
|
| Write | Time, s | Peak RSS, MiB | | Read | Time, s | Peak RSS, MiB |
|
|
341
341
|
|---|---|---|---|---|---|---|
|
|
@@ -392,7 +392,7 @@ Limits can be changed per call, for example `readWorkbook(bytes, { limits: { max
|
|
|
392
392
|
|
|
393
393
|
## Package size
|
|
394
394
|
|
|
395
|
-
**Size budget:** 300 kB of gzip-compressed JavaScript for the library files in `dist/` (level 9, unminified as published; measured
|
|
395
|
+
**Size budget:** 300 kB of gzip-compressed JavaScript for the library files in `dist/` (level 9, unminified as published; measured 209.1 kB for 1.0.0). **CLI size budget:** 40 kB for `dist/cli.js`, which is not loaded by `import 'xlvane'` (measured 27.3 kB for 1.0.0). `npm run check:pkg` fails when the budget is exceeded. The only dependency, fflate, adds about 22 kB gzip (its `esm/browser.js`, measured the same way).
|
|
396
396
|
|
|
397
397
|
## Limitations
|
|
398
398
|
|
|
@@ -401,4 +401,10 @@ Limits can be changed per call, for example `readWorkbook(bytes, { limits: { max
|
|
|
401
401
|
- Charts, shapes, pivot tables, slicers and form controls are not modelled: reading skips them (with a warning for drawings), `editCells` keeps them unchanged, and row operations refuse sheets where they would have to move.
|
|
402
402
|
- The command line reads files, not standard input.
|
|
403
403
|
|
|
404
|
+
## Links
|
|
405
|
+
|
|
406
|
+
- Changes in each version: [CHANGELOG.md](https://github.com/DevXord/xlvane/blob/main/CHANGELOG.md)
|
|
407
|
+
- Bugs and questions: [GitHub issues](https://github.com/DevXord/xlvane/issues)
|
|
408
|
+
- Reporting a vulnerability: [SECURITY.md](https://github.com/DevXord/xlvane/blob/main/SECURITY.md)
|
|
409
|
+
|
|
404
410
|
License: MIT
|
package/dist/cli.js
CHANGED
|
@@ -1519,23 +1519,15 @@ const MAX_FILE_BYTES = 2097152;
|
|
|
1519
1519
|
* exceljs API that @xlvane/compat does not support or supports only partly
|
|
1520
1520
|
* (docs/exceljs-compat.md). Matching is textual, so a hit is a place to look at, not proof.
|
|
1521
1521
|
*/
|
|
1522
|
-
const PATTERNS = [
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
re: /\bModelContainer\b/
|
|
1532
|
-
},
|
|
1533
|
-
{
|
|
1534
|
-
api: "deep import (exceljs/lib/...)",
|
|
1535
|
-
status: "not supported",
|
|
1536
|
-
re: /['"]exceljs\/lib\/[^'"]*['"]/
|
|
1537
|
-
}
|
|
1538
|
-
];
|
|
1522
|
+
const PATTERNS = [{
|
|
1523
|
+
api: "ModelContainer",
|
|
1524
|
+
status: "not supported",
|
|
1525
|
+
re: /\bModelContainer\b/
|
|
1526
|
+
}, {
|
|
1527
|
+
api: "deep import (exceljs/lib/...)",
|
|
1528
|
+
status: "not supported",
|
|
1529
|
+
re: /['"]exceljs\/lib\/[^'"]*['"]/
|
|
1530
|
+
}];
|
|
1539
1531
|
async function sourceFiles(root) {
|
|
1540
1532
|
const files = [];
|
|
1541
1533
|
let limited = false;
|
package/docs/exceljs-compat.md
CHANGED
|
@@ -151,6 +151,7 @@ Status: **supported** means the same behaviour as exceljs for the cases covered
|
|
|
151
151
|
| Named ESM imports | extra | Not available with exceljs 4.4.0. |
|
|
152
152
|
| `exceljs/dist/es5`, `exceljs/dist/es5/index.js`, `exceljs/dist/exceljs.js`, `exceljs/dist/exceljs.min.js`, `exceljs/dist/exceljs.bare.js`, `exceljs/dist/exceljs.bare.min.js` | supported | Mapped to the main entry in the package's `exports` (an ES module; `require()` needs Node.js 22.12+). exceljs's files there are an ES5 build and UMD browser bundles; the API is the same (X4-26). |
|
|
153
153
|
| Other deep imports (`exceljs/lib/...`) | not supported | Internal files of exceljs; not offered. |
|
|
154
|
+
| `ModelContainer` | not supported | exceljs exports it as a holder of a workbook model with an `xlsx` property (`lib/exceljs.nodejs.js` L3, `lib/doc/modelcontainer.js`). The class is on the module object so that code referring to it loads; constructing it throws `XLV_E_NOT_SUPPORTED`. `xlvane migrate` lists its uses. |
|
|
154
155
|
| `RelationshipType`, `DocumentType`, `ReadingOrder` | supported | The enums of `lib/doc/enums.js`, on the module object and as named exports. |
|
|
155
156
|
| `PaperSize` | supported | exceljs declares it as a `const enum` in index.d.ts (inlined by TypeScript, absent at run time); @xlvane/compat exports it as an object and on the default export. |
|
|
156
157
|
| TypeScript types (`ExcelJS.Worksheet`, `ExcelJS.Fill`, `ExcelJS.stream.xlsx.WorkbookWriterOptions`, …) | supported | The type names of exceljs's index.d.ts are exported and usable through `import * as ExcelJS`, `import ExcelJS from`, and `import ExcelJS = require('exceljs')`, under `moduleResolution` bundler, nodenext (ESM and CommonJS) and `module: commonjs` (`tests/exceljs/types-compat.test.ts`, which type-checks code from the exceljs README). In a CommonJS project TypeScript refuses `import ExcelJS = require(...)` of an ES module under `module: node16` (TS1471, checked with TypeScript 5.9.3); `module: nodenext` and `module: commonjs` accept it. `Buffer` is `Uint8Array`. Enums (`ValueType`, `FormulaType`, `ErrorValue`, `PaperSize`) are also types. `WorkbookStreamReaderOptions` is an alias of `WorkbookReaderOptions`. As in exceljs's declarations, `getTable(name)` returns `Table`, `workbook.getImage(id)` returns `Image`, `getImages()[i].range` is required and `fillFormula`'s `results` is `(row, col) => value`, a flat or a 2-D array (index.d.ts L1327, L1342–1346, L1365, L1780); at run time an unknown table name or image id gives `undefined`, as in exceljs. The module object is frozen: adding or replacing its properties (monkey-patching) has no effect. |
|
package/llms-full.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# xlvane 1.0.
|
|
1
|
+
# xlvane 1.0.1: documentation in one file
|
|
2
2
|
|
|
3
3
|
This file joins the README of the xlvane package, the Agent Skill and the documentation in docs/. It is generated by scripts/package-docs.mjs; the separate files are in the same package.
|
|
4
4
|
|
|
@@ -12,7 +12,7 @@ Read, inspect and write XLSX files; input files are treated as untrusted. ESM on
|
|
|
12
12
|
npm install xlvane
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
The package also contains `docs/` (error codes, JSON schemas, exceljs compatibility), the Agent Skill `skills/xlvane/SKILL.md` and `llms-full.txt` (all of it in one file), for reading without network access: after installing, they are in `node_modules/xlvane/`. Links below point to the same files on GitHub.
|
|
15
|
+
The package also contains `docs/` (error codes, JSON schemas, exceljs compatibility), the Agent Skill `skills/xlvane/SKILL.md` and `llms-full.txt` (all of it in one file), for reading without network access: after installing, they are in `node_modules/xlvane/`. Links below point to the same files on GitHub. The skill can be installed into a project with the [`skills`](https://github.com/vercel-labs/skills) CLI, offline: `npx skills add ./node_modules/xlvane/skills --skill xlvane`.
|
|
16
16
|
|
|
17
17
|
## Quick start
|
|
18
18
|
|
|
@@ -36,12 +36,12 @@ From a shell: `npx xlvane inspect orders.xlsx`, then `npx xlvane read orders.xls
|
|
|
36
36
|
- [Tasks in one call](#tasks-in-one-call): tables of rows, CSV, JSON, editing files, diff · [inserting and deleting rows](#inserting-and-deleting-rows)
|
|
37
37
|
- [Large files: streaming](#large-files-streaming)
|
|
38
38
|
- [Inspecting a workbook](#inspecting-a-workbook) · [Errors and warnings](#errors-and-warnings) · [Untrusted input and limits](#untrusted-input-and-limits)
|
|
39
|
-
- [Limitations](#limitations) · [Package size](#package-size)
|
|
39
|
+
- [Limitations](#limitations) · [Package size](#package-size) · [Links](#links)
|
|
40
40
|
- exceljs users: [`@xlvane/compat`](https://www.npmjs.com/package/@xlvane/compat) and `xlvane migrate`
|
|
41
41
|
|
|
42
42
|
## Tested environments
|
|
43
43
|
|
|
44
|
-
The core API (reading, writing, inspect, tables, CSV, editing, diff, streaming with Web Streams) and `@xlvane/compat` are tested in Node.js 22, 24 and 26, Bun, Deno, Chromium (Playwright) and the Cloudflare Workers runtime (workerd), with the same test bundle (`npm run test:runtimes`). Reading is tested on 340 files of the Apache POI test corpus (written by Excel for Windows, Mac and the web, LibreOffice, ONLYOFFICE and others, and damaged files) and on files saved by LibreOffice; see `tests/corpus/`.
|
|
44
|
+
The core API (reading, writing, inspect, tables, CSV, editing, diff, streaming with Web Streams) and `@xlvane/compat` are tested in Node.js 22, 24 and 26, Bun, Deno, Chromium (Playwright) and the Cloudflare Workers runtime (workerd), with the same test bundle (`npm run test:runtimes`). In Deno, import from `npm:xlvane`; in browsers and Workers, through a bundler such as Vite, esbuild or webpack. `xlvane/node` and the command line need Node.js. Reading is tested on 340 files of the Apache POI test corpus (written by Excel for Windows, Mac and the web, LibreOffice, ONLYOFFICE and others, and damaged files) and on files saved by LibreOffice; see `tests/corpus/`.
|
|
45
45
|
|
|
46
46
|
## Command line in 5 minutes
|
|
47
47
|
|
|
@@ -341,7 +341,7 @@ const stream = writeWorkbookStream({ sheets: [{ name: 'Data', rows: rows() }] })
|
|
|
341
341
|
|
|
342
342
|
## Benchmark
|
|
343
343
|
|
|
344
|
-
100 000 rows × 20 columns (numbers, texts, dates, booleans). Median of 5 runs, each in a fresh Node.js 22.22.0 process. Machine: Intel Xeon @ 2.10 GHz, 4 logical cores, 15.7 GiB RAM, Linux (a cloud VM). Measured on 2026-10-30. Peak RSS includes Node.js and the imported libraries; the baseline with all three libraries imported is 135 MiB. Method, raw data and caveats: [bench/perf/RESULTS.md](
|
|
344
|
+
100 000 rows × 20 columns (numbers, texts, dates, booleans). Median of 5 runs, each in a fresh Node.js 22.22.0 process. Machine: Intel Xeon @ 2.10 GHz, 4 logical cores, 15.7 GiB RAM, Linux (a cloud VM). Measured on 2026-10-30. Peak RSS includes Node.js and the imported libraries; the baseline with all three libraries imported is 135 MiB. Method, raw data and caveats: [bench/perf/RESULTS.md](https://github.com/DevXord/xlvane/blob/main/bench/perf/RESULTS.md). Reproduce with `npm run bench`.
|
|
345
345
|
|
|
346
346
|
| Write | Time, s | Peak RSS, MiB | | Read | Time, s | Peak RSS, MiB |
|
|
347
347
|
|---|---|---|---|---|---|---|
|
|
@@ -398,7 +398,7 @@ Limits can be changed per call, for example `readWorkbook(bytes, { limits: { max
|
|
|
398
398
|
|
|
399
399
|
## Package size
|
|
400
400
|
|
|
401
|
-
**Size budget:** 300 kB of gzip-compressed JavaScript for the library files in `dist/` (level 9, unminified as published; measured
|
|
401
|
+
**Size budget:** 300 kB of gzip-compressed JavaScript for the library files in `dist/` (level 9, unminified as published; measured 209.1 kB for 1.0.0). **CLI size budget:** 40 kB for `dist/cli.js`, which is not loaded by `import 'xlvane'` (measured 27.3 kB for 1.0.0). `npm run check:pkg` fails when the budget is exceeded. The only dependency, fflate, adds about 22 kB gzip (its `esm/browser.js`, measured the same way).
|
|
402
402
|
|
|
403
403
|
## Limitations
|
|
404
404
|
|
|
@@ -407,6 +407,12 @@ Limits can be changed per call, for example `readWorkbook(bytes, { limits: { max
|
|
|
407
407
|
- Charts, shapes, pivot tables, slicers and form controls are not modelled: reading skips them (with a warning for drawings), `editCells` keeps them unchanged, and row operations refuse sheets where they would have to move.
|
|
408
408
|
- The command line reads files, not standard input.
|
|
409
409
|
|
|
410
|
+
## Links
|
|
411
|
+
|
|
412
|
+
- Changes in each version: [CHANGELOG.md](https://github.com/DevXord/xlvane/blob/main/CHANGELOG.md)
|
|
413
|
+
- Bugs and questions: [GitHub issues](https://github.com/DevXord/xlvane/issues)
|
|
414
|
+
- Reporting a vulnerability: [SECURITY.md](https://github.com/DevXord/xlvane/blob/main/SECURITY.md)
|
|
415
|
+
|
|
410
416
|
License: MIT
|
|
411
417
|
|
|
412
418
|
<!-- file: skills/xlvane/SKILL.md -->
|
|
@@ -1348,6 +1354,7 @@ Status: **supported** means the same behaviour as exceljs for the cases covered
|
|
|
1348
1354
|
| Named ESM imports | extra | Not available with exceljs 4.4.0. |
|
|
1349
1355
|
| `exceljs/dist/es5`, `exceljs/dist/es5/index.js`, `exceljs/dist/exceljs.js`, `exceljs/dist/exceljs.min.js`, `exceljs/dist/exceljs.bare.js`, `exceljs/dist/exceljs.bare.min.js` | supported | Mapped to the main entry in the package's `exports` (an ES module; `require()` needs Node.js 22.12+). exceljs's files there are an ES5 build and UMD browser bundles; the API is the same (X4-26). |
|
|
1350
1356
|
| Other deep imports (`exceljs/lib/...`) | not supported | Internal files of exceljs; not offered. |
|
|
1357
|
+
| `ModelContainer` | not supported | exceljs exports it as a holder of a workbook model with an `xlsx` property (`lib/exceljs.nodejs.js` L3, `lib/doc/modelcontainer.js`). The class is on the module object so that code referring to it loads; constructing it throws `XLV_E_NOT_SUPPORTED`. `xlvane migrate` lists its uses. |
|
|
1351
1358
|
| `RelationshipType`, `DocumentType`, `ReadingOrder` | supported | The enums of `lib/doc/enums.js`, on the module object and as named exports. |
|
|
1352
1359
|
| `PaperSize` | supported | exceljs declares it as a `const enum` in index.d.ts (inlined by TypeScript, absent at run time); @xlvane/compat exports it as an object and on the default export. |
|
|
1353
1360
|
| TypeScript types (`ExcelJS.Worksheet`, `ExcelJS.Fill`, `ExcelJS.stream.xlsx.WorkbookWriterOptions`, …) | supported | The type names of exceljs's index.d.ts are exported and usable through `import * as ExcelJS`, `import ExcelJS from`, and `import ExcelJS = require('exceljs')`, under `moduleResolution` bundler, nodenext (ESM and CommonJS) and `module: commonjs` (`tests/exceljs/types-compat.test.ts`, which type-checks code from the exceljs README). In a CommonJS project TypeScript refuses `import ExcelJS = require(...)` of an ES module under `module: node16` (TS1471, checked with TypeScript 5.9.3); `module: nodenext` and `module: commonjs` accept it. `Buffer` is `Uint8Array`. Enums (`ValueType`, `FormulaType`, `ErrorValue`, `PaperSize`) are also types. `WorkbookStreamReaderOptions` is an alias of `WorkbookReaderOptions`. As in exceljs's declarations, `getTable(name)` returns `Table`, `workbook.getImage(id)` returns `Image`, `getImages()[i].range` is required and `fillFormula`'s `results` is `(row, col) => value`, a flat or a 2-D array (index.d.ts L1327, L1342–1346, L1365, L1780); at run time an unknown table name or image id gives `undefined`, as in exceljs. The module object is frozen: adding or replacing its properties (monkey-patching) has no effect. |
|