@particle-academy/holy-sheet 2.10.1 → 2.10.2
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/CHANGELOG.md +23 -0
- package/README.md +7 -0
- package/dist/index.cjs +299 -98
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +18 -4
- package/dist/index.d.ts +18 -4
- package/dist/index.js +299 -99
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
10
10
|
|
|
11
11
|
## [Unreleased]
|
|
12
12
|
|
|
13
|
+
## [2.10.2] - 2026-10-26
|
|
14
|
+
|
|
15
|
+
### Security
|
|
16
|
+
|
|
17
|
+
- Route XLSX/ODS and public `unzipSync` reads through bounded ZIP validation:
|
|
18
|
+
coherent local/central records, safe unique member names, CRC and exact sizes,
|
|
19
|
+
archive/part/total/ratio limits and bounded DEFLATE output. Reject truncated or
|
|
20
|
+
invalid codes and back-references with typed `ArchiveRefused`; Node file input
|
|
21
|
+
is bounded before allocation. Defaults: 64 MiB archive/part, 256 MiB expanded,
|
|
22
|
+
16,384 entries and 1000:1 ratio. `unzipSync(bytes, limits)` supports lower host
|
|
23
|
+
ceilings. Existing valid payload bytes and spreadsheet projections are retained.
|
|
24
|
+
|
|
25
|
+
- Update Vitest to 4.1.12 for security fixes; dev toolchain only, nothing to do.
|
|
26
|
+
|
|
27
|
+
- **Dev toolchain only — no runtime change, nothing for consumers to do.** The
|
|
28
|
+
lockfile now resolves `vite` 8.3.5 (was 8.2.2), whose bundled
|
|
29
|
+
`launch-editor` fixes GHSA-587h-7wmj-h5pm (HIGH, `fs.existsSync()` check
|
|
30
|
+
bypassable on Windows), GHSA-698v-4r3x-3vcv (`escapeCmdArgs()` omits `%`
|
|
31
|
+
escaping on Windows) and GHSA-r825-w8mm-5pxw (editor CLI flag
|
|
32
|
+
misinterpretation). `vite` is only reached through the test/dev toolchain
|
|
33
|
+
and the published package does not ship our lockfile, so the exposure was
|
|
34
|
+
this repo's own dev server.
|
|
35
|
+
|
|
13
36
|
## [2.10.1] — 2026-10-19
|
|
14
37
|
|
|
15
38
|
### Fixed
|
package/README.md
CHANGED
|
@@ -37,6 +37,13 @@ await Agent.write(schema, "sales.xlsx");
|
|
|
37
37
|
|
|
38
38
|
## API
|
|
39
39
|
|
|
40
|
+
Spreadsheet reads and `unzipSync` validate ZIP structure, CRC, unique safe names
|
|
41
|
+
and expansion before XML parsing. Unsafe ZIPs throw exported `ArchiveRefused`
|
|
42
|
+
with a bounded `reason`; ordinary non-spreadsheet formats retain
|
|
43
|
+
`UnsupportedFormatException`. Defaults are 64 MiB archive/part, 256 MiB expanded,
|
|
44
|
+
16,384 entries and 1000:1 ratio. `unzipSync(bytes, limits)` accepts lower host
|
|
45
|
+
ceilings via `ArchiveLimits`. This input layer does not add lossless editing.
|
|
46
|
+
|
|
40
47
|
`Agent` (static) mirrors the PHP surface:
|
|
41
48
|
|
|
42
49
|
- `validate(schema)` → structured errors `{path, expected, got, value, hint}[]`
|