Files
onenote-tools/docs/PORTING.md

9.1 KiB

Port provenance

The desktop .one reader adapts selected structures from the pinned onenote.rs implementation. It is not a line-for-line or complete port.

TypeScript module Upstream path(s) Revision Port scope and deviations
src/onenote/onestore/file-node.ts onestore/desktop/file_structure/file_node_list_fragment.rs, file_node/*, chunk references onenote.rs@5138a39a3f4e72b840932f9872fecde52fa9da60 Selected; immutable byte input, strict range checks, fragment/child cycle detection, and depth/count limits
src/onenote/onestore/property-set.ts onestore/shared/{object_prop_set,prop_set,property,object_stream_header}.rs same Substantial; bounded vectors/counts/nesting and serializable discriminated unions
src/onenote/onestore/desktop-store.ts onestore/desktop/{file_node,file_structure,objects}/* same Selected desktop section/TOC paths; explicit missing-reference errors; bounded file-data references
src/onenote/onestore/file-data.ts onestore/desktop/{file_node/shared,objects/file_data_store}.rs same Bounded zero-copy file-data payload ranges, checked declarations, and explicit external/invalid availability
src/onenote/onestore/types.ts onestore/desktop/common/*, onestore/shared/*, and desktop object modules same Serializable structural records used across desktop and FSSHTTPB adapters
src/onenote/fsshttpb/* fsshttpb/{data,data_element,packaging}.rs same Native bounded package/header/data-element records, checked compact integers, zero-copy BLOB ranges; fragment records parsed but not assembled
src/onenote/onestore/fsshttp-store.ts onestore/fsshttpb/{header,mapping_table,object,object_space,revision,revision_role}.rs same Unfragmented package-store adapter; bounded/cycle-checked revision chains, newest-revision precedence, resolved positional reference arrays
src/onenote/one/{constants,section,content}.ts one/property*, one/property_set/*, onenote/{section,page,page_series,outline,rich_text,table,image,embedded_file,ink}.rs same Page metadata plus bounded recursive rich text, tables, resources, layout hints, and decoded ink in an inert browser DTO
src/onenote/one/property-access.ts one/property/{simple,object_reference}.rs same Typed property access and resolved/compact reference validation without coercion
src/onenote/one/section-content.ts onenote/{section,page_series,page}.rs same Worker-retained page/content/resource model with bounded diagnostics and timestamps
src/onenote/parser/parse-toc.ts one/property_set/toc_container.rs and desktop/FSSHTTP OneStore readers same Desktop/FSSHTTP TOC content, names, identities, ordering, colors, nesting, and bounded diagnostics

The browser-native package path has separate upstream provenance:

TypeScript module Upstream path(s) Revision and selected licence Port scope and deviations
src/onenote/onepkg/{cabinet,checksum}.ts rust-cab src/{cabinet,folder,file,ctype,checksum}.rs c5839f5fdfa4c4e7cc9b22f570c79c96af0560e2, MIT CAB reading/checksum adapted for immutable browser bytes, strict normalized paths, checked ranges/checksums, whole-folder extraction, explicit limits, and cancellation/yield hooks; writers are not ported
src/onenote/onepkg/cabinet-set.ts libmspack mspack/cabd.c 55d501976171397ccd5d5a7a1ca7da065b1d9a06, LGPL-2.1-only Complete named-set validation, split CFDATA reassembly, codec continuity, spanning-file reconciliation, aggregate limits, and immutable browser inputs
src/onenote/onepkg/mszip/decoder.ts rust-cab src/mszip.rs; fflate raw DEFLATE rust-cab revision above; fflate 0.8.3, MIT CK framing and persistent 32 KiB folder history follow rust-cab; raw DEFLATE uses fflate with a caller-owned bounded buffer and strict declared-size checks
src/onenote/onepkg/quantum/{bit-reader,budget,decoder,model,tables}.ts compcol src/quantum/{bits,decoder,model,tables}.rs 04a6db2aa7bd487a89c559631d79d1b384139f50, MIT Native TypeScript arithmetic/model/LZ decoder; fixed CAB output, 2 MiB maximum window, strict match/frame/trailer checks, two-block lookahead, operation budget, and cancellation checkpoints
src/onenote/onepkg/lzx/{bit-reader,huffman,decoder}.ts lzxd 0.2.5 src/{bitstream,tree,block,window,lib}.rs 4748e43594e3e30cff2ace3a6ad7a376c9816fdd, MIT option of MIT OR Apache-2.0 Directly translated core with typed arrays, CAB CFDATA boundaries, persistent folder state, strict malformed-stream errors, and operation/window/cancellation limits; delta reference data is omitted

The bounded binary readers, format detection, parser limits/error model, path policy, package TOC-to-section hierarchy, worker protocol/DTOs, safe image inspection, export serializers/ZIP writer, and React application UI are original TypeScript implementations guided by the normative specifications and project requirements. The pinned one2html renderer informed expected visual semantics for rich text, tables, images, attachments, and ink; its Rust/templates/CSS were not copied or shipped.

Files adapted from onenote.rs carry an MPL-2.0 notice, SPDX identifier, upstream path/revision, and deviations. Files adapted from rust-cab, compcol, or lzxd carry their MIT provenance, copyright notice, exact revision, and deviations. The multi-cabinet module carries libmspack's LGPL-2.1-only notice. Licence texts are reproduced in LICENSES/ and included in the release ZIP.

Focused tests cover successful pinned fixtures plus malformed bounds, references, checksums, paths, Huffman trees, compressed blocks, limits, and cancellation. Fixture origins and redistribution terms are recorded separately in tests/fixtures/README.md.