@quillmark/wasm 0.108.1 → 0.108.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 CHANGED
@@ -1,5 +1,79 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.108.2 - 2026-08-20
4
+
5
+ - fix(core): **storage blobs tagged `@0.81.0` and `@0.82.0` load again.** Both
6
+ tags migrate forward on read instead of failing as an unknown schema version.
7
+ Migrations chain (`V0_81_0 → V0_82_0 → V0_92_0 → V0_93_0`); the write path is
8
+ untouched, so re-serializing a migrated row emits `@0.93.0`.
9
+
10
+ The `V0_82_0` hop is **lossy in one place**: the `$id` payload item is
11
+ dropped, the live model having no counterpart for it. The alternative is
12
+ refusing the row. A consumer that kept a key under `$id` re-establishes it
13
+ under a `$ext` namespace it owns.
14
+
15
+ This reverses the #929 retirement, whose two premises were both wrong. Rows
16
+ do predate `@0.92.0` — #1327 reports stored `@0.81.0` ones. And `0.82.0` was
17
+ not yanked: every published Quillmark version is live on crates.io, npm, and
18
+ PyPI. Because no yank happened, `@0.82.0` names a shape
19
+ union rather than a frozen format — every release from `0.83.0` through
20
+ `0.91.0` stamped it — so the restored reader accepts the union (#1327)
21
+
22
+ - refactor!: **one definition per mechanism across the rust crates.** A
23
+ whole-codebase simplify pass: the typst session compiles through one
24
+ `recompile` pipeline whose derived tables (regions, span windows, page hashes)
25
+ are built per commit instead of per query; the pdf reader's scan plumbing
26
+ (`object_dict`, `open_trailer`, `dict_end`, `ws_end`) and the page-dict array
27
+ splice are single definitions shared by stamp and flatten; the flattened PDF
28
+ is shared by `Arc` instead of copied per render; emission, prescan, payload
29
+ assembly and validation in core lose their duplicated dispatch and their
30
+ per-keystroke deep clones. Two outputs shift: a blank pdfform document returns
31
+ the base PDF unchanged rather than appending a revision carrying two
32
+ unreferenced font objects, and three `quillmark-pdf` parse-failure messages
33
+ share one `dict not parseable` spelling (codes unchanged). Dead public API is
34
+ deleted: `FileTreeNode::{file_exists, dir_exists, list_files,
35
+ list_subdirectories}`, `Payload::contains_key`, `PayloadItem::nested_comments`,
36
+ `QuillValue::{string, integer, bool, null}` (the `From` impls and `from_json`
37
+ are the constructors), `FieldSpec::{with_schema_field, with_value,
38
+ with_tooltip}` (assign the fields), and `quillmark-content`'s
39
+ `strip_bidi_formatting` / `fix_html_comment_fences` (internal to
40
+ `normalize_markdown`). None had a caller in the workspace or bindings.
41
+
42
+ - fix: **an empty mapping emits as `{}` rather than losing its key.** `emit_field`
43
+ dropped an empty-object field entirely, which composes with the block form of
44
+ its parent into markdown no parser accepts: a `$ext` whose every namespace
45
+ emptied wrote `$ext:` with no children, and re-parsed as null. That is the
46
+ `parse::invalid_structure` a `@quillmark/svelte` host hit on save, once a
47
+ tips-card dismissal had cleared `$ext.editor.tips`. One level down the same
48
+ rule ran silent: `$ext` is the only slot type-checked, so an inner mapping
49
+ turned null and the document parsed clean, handing a consumer back a type it
50
+ never wrote. Plain user fields carried that loss too — `cfg: {opts: {}}`
51
+ re-parsed as `cfg: null`, and the second emit then differed from the first.
52
+ Empty mappings now emit `key: {}` at every depth. That is the spelling a
53
+ sequence item (`- {}`) and a wholly empty `$ext: {}` already used, so an
54
+ emptied container survives the round-trip as the value a consumer stored.
55
+
56
+ <!-- seed: commits since v0.108.1, confirm the entries above cover them, then delete this comment
57
+ - docs(canon): record that @0.81.0 is the oldest tag that exists
58
+ - docs: leave the applied migration guide untouched
59
+ - docs: dense-prose pass on the DTO backfill
60
+ - test(core): drop the vacuous V0_81_0 body-import test
61
+ - fix(core): restore the V0_82_0 read shim; 0.82.0 was never yanked (#1327)
62
+ - chore(deps): bump the cargo group with 2 updates
63
+ - chore(deps): bump taiki-e/install-action in the actions group
64
+ - fix(core): restore the V0_81_0 storage read shim (#1327)
65
+ - docs: changelog entry for the simplify sweep
66
+ - refactor(core)!: apply simplify-review cleanups to the session seam
67
+ - docs(pdf): trim test helper doc to its contract
68
+ - refactor(core/document): apply simplify-review cleanups
69
+ - refactor(pdf): apply simplify-review cleanups
70
+ - refactor(typst): apply simplify-review cleanups
71
+ - refactor(core/quill): apply simplify-review cleanups
72
+ - refactor(content): apply simplify-review cleanups
73
+ - fix: an empty mapping emits as `{}` rather than losing its key
74
+ -->
75
+
76
+
3
77
  ## v0.108.1 - 2026-08-19
4
78
 
5
79
  - fix: **a content cell under `variants:` is readable at its codec.**
@@ -14,11 +88,6 @@
14
88
  variantless enum stays a scalar. The write is unchanged — a variant container
15
89
  has no per-cell op address and needs none, committing whole.
16
90
 
17
- <!-- seed: commits since v0.108.0, confirm the entries above cover them, then delete this comment
18
- - fix: a content cell under `variants:` reads at its codec
19
- -->
20
-
21
-
22
91
  ## v0.108.0 - 2026-08-18
23
92
 
24
93
  - fix: **the value ladder is cut per cell, so the plate is total at every
Binary file
Binary file
package/core/wasm_bg.wasm CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillmark/wasm",
3
- "version": "0.108.1",
3
+ "version": "0.108.2",
4
4
  "description": "WebAssembly bindings for Quillmark, a schema-driven document engine",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",