feat: add bounded MSZIP cabinet extraction

This commit is contained in:
2026-07-22 19:01:50 +02:00
parent a0c26d604d
commit d282b832ac
15 changed files with 318 additions and 48 deletions

View File

@@ -14,25 +14,28 @@ and is delivered to Toolbox Portal as an already-built, checksummed static ZIP.
- Desktop revision-store `.one` sections from the tested OneNote family. The
reader exposes section/page names, stable page IDs, created and updated
timestamps when present, page level, and readable plain text.
- Single-cabinet `.onepkg` files whose CAB folders are uncompressed or LZX
compressed. Each contained desktop `.one` section is parsed independently,
so one unsupported section does not hide sections that did parse.
- Single-cabinet `.onepkg` files whose CAB folders are uncompressed, MSZIP, or
LZX compressed. Each contained desktop `.one` section is parsed
independently, so one unsupported section does not hide sections that did
parse.
- Package entries, safe normalized paths, uncompressed sizes, compression
metadata, section/page navigation, and structured diagnostics.
The golden tests parse a real Joplin desktop `.one` file with three pages and a
real Joplin `.onepkg` with seven entries, five sections, and seven pages. LZX
`0x1203` and `0x1303` data and an uncompressed CAB are covered by fixtures.
`0x1203` and `0x1303`, uncompressed CAB, and one- and two-block MSZIP data are
covered by fixtures. The MSZIP fixtures are CAB-level evidence, not a claim
about a particular OneNote `.onepkg` producer.
This is a structural reader, not a full-fidelity OneNote renderer. Images,
tables, ink, embedded files, layout, formatting, links, and exports are not
rendered. FSSHTTP-packaged `.one`, MSZIP and Quantum CAB extraction,
multi-cabinet archives, and `.onetoc2` hierarchy/order interpretation are not
supported. See [format support](docs/FORMAT_SUPPORT.md) for the precise matrix.
rendered. FSSHTTP-packaged `.one`, Quantum CAB extraction, multi-cabinet
archives, and `.onetoc2` hierarchy/order interpretation are not supported. See
[format support](docs/FORMAT_SUPPORT.md) for the precise matrix.
There is no Rust/Wasm runtime, server, proxy, upload, telemetry, or notebook
storage. All parsing and CAB/LZX decompression are ordinary browser JavaScript
produced from the TypeScript source.
storage. All parsing and CAB/LZX/MSZIP decompression is ordinary browser
JavaScript produced from the TypeScript source.
## Use