@quillmark/wasm 0.98.0 → 0.100.0

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/core/wasm_bg.js CHANGED
@@ -21,7 +21,7 @@ export class Document {
21
21
  }
22
22
  /**
23
23
  * Build a composable card of `kind`, typed-commit `fields` onto it, set its
24
- * body from optional markdown, and place it the ABI under `writer.addCard`.
24
+ * body from optional markdown, and place it: the ABI under `writer.addCard`.
25
25
  * `at` picks the position: absent appends, a number inserts at that index
26
26
  * (`0..=cards.length`), so a positioned typed insert is one atomic call
27
27
  * rather than `addCard` + `moveCard`. Fuses `makeCard` + typed commit +
@@ -58,7 +58,7 @@ export class Document {
58
58
  }
59
59
  /**
60
60
  * Typed field write at `addr`, resolving the field's schema `type` from
61
- * `quill` the stable ABI under the runtime `writer.set` / `writer.card(i).set`.
61
+ * `quill`: the stable ABI under the runtime `writer.set` / `writer.card(i).set`.
62
62
  * The one write verb for **every** field type (richtext, scalar, array,
63
63
  * object); the schema carries the `inline` constraint, so no type token or
64
64
  * flag is passed. A richtext-typed field stores the canonical content, so
@@ -69,10 +69,10 @@ export class Document {
69
69
  *
70
70
  * A bare string is `Addr` shorthand for `{ field }`; `{ card, field }`
71
71
  * targets a composable card (its `$kind` resolves the schema). A body
72
- * address throws a body has no field schema; write it with `writer.setBody`
72
+ * address throws: a body has no field schema; write it with `writer.setBody`
73
73
  * / `revise`. A field declared in the schema is strict-committed (a mismatch
74
74
  * throws now, not at render); a name the schema does not declare throws
75
- * `edit::unknown_field` rather than falling to the opaque store on
75
+ * `edit::unknown_field` rather than falling to the opaque store: on
76
76
  * the typed path it is a typo. Use [`storeField`](Document::store_field) for
77
77
  * opaque storage. Also throws `edit::field_conform` /
78
78
  * `edit::field_richtext_decode` / `edit::field_richtext_not_inline`
@@ -105,7 +105,7 @@ export class Document {
105
105
  * field's schema `type` from `quill`. `addr` is a **card address**
106
106
  * (`{ card }`, absent = main; a present `field` throws). All-or-nothing with
107
107
  * the same per-field-diagnostic error contract as
108
- * [`storeFields`](Document::store_fields) nothing is applied on error and
108
+ * [`storeFields`](Document::store_fields): nothing is applied on error and
109
109
  * the thrown error's `diagnostics` carry one entry per offending field,
110
110
  * including an `edit::unknown_field` for any name the schema does not
111
111
  * declare, so a whole-form submit sees every typo in one pass. Throws on an
@@ -130,7 +130,7 @@ export class Document {
130
130
  }
131
131
  /**
132
132
  * Interpreted read at `addr`, resolving the field's declared `type` from
133
- * `quill` the stable ABI under the runtime `reader.get` / `reader.card(i).get`.
133
+ * `quill`: the stable ABI under the runtime `reader.get` / `reader.card(i).get`.
134
134
  * The schema-plane twin of the quill-free [`getStored`](Self::get_stored): a `richtext`
135
135
  * field returns its markdown projection, every other declared type its
136
136
  * canonical value verbatim, so a consumer holding the quill reads by field
@@ -139,10 +139,10 @@ export class Document {
139
139
  * A bare string is `Addr` shorthand for `{ field }`; `{ card, field }`
140
140
  * targets a composable card (its `$kind` resolves the schema). Returns
141
141
  * `undefined` for an **absent** field. An absent `addr.field` reads the body
142
- * markdown quill-free, mirroring [`getMarkdown`](Self::get_markdown), since
142
+ * markdown: quill-free, mirroring [`getMarkdown`](Self::get_markdown), since
143
143
  * a body's type is a format fact, not a schema fact. A name the schema does
144
144
  * not declare throws `edit::unknown_field` (the authority `getMarkdown`
145
- * lacks there an unknown name reads back `undefined`); a `richtext` field
145
+ * lacks: there an unknown name reads back `undefined`); a `richtext` field
146
146
  * holding a value that does not decode throws `edit::field_richtext_decode`;
147
147
  * an out-of-range `addr.card` throws.
148
148
  *
@@ -169,8 +169,49 @@ export class Document {
169
169
  }
170
170
  }
171
171
  /**
172
- * Revise the richtext field at `addr` from markdown, typed *and*
173
- * anchor-preserving the ABI under `writer.reviseField`. Resolves the
172
+ * Interpreted **corpus** read at `addr`: the stable ABI under the runtime
173
+ * `reader.getContent` / `reader.card(i).getContent`. The corpus twin of
174
+ * [`reader.get`](Self::reader_get), which projects; this decodes the stored
175
+ * value through the codec the field's declared type names (`richtext` as
176
+ * markdown, `plaintext` as literal text) and returns the canonical `Content`.
177
+ *
178
+ * Total over the storage form: a committed field holds a content object and
179
+ * a parsed one holds the authored string, and both read back as a corpus
180
+ * here, so a consumer mounting a corpus editor stops branching on how the
181
+ * document was built.
182
+ *
183
+ * A bare string is `Addr` shorthand for `{ field }`; `{ card, field }`
184
+ * targets a composable card. Returns `undefined` for an **absent** field. An
185
+ * absent `addr.field` reads the **body** corpus, quill-free, mirroring
186
+ * [`getStored`](Self::get_stored). Throws `edit::unknown_field` for a name
187
+ * the schema does not declare, `edit::field_not_content` for a declared type
188
+ * that is not a content leaf (`array<richtext>` carries content and still has
189
+ * no one corpus), `edit::field_richtext_decode` for a stored value
190
+ * that decodes under neither encoding, and `edit::index_out_of_range` for a
191
+ * bad `addr.card`.
192
+ * @param {Quill} quill
193
+ * @param {Addr | string} addr
194
+ * @returns {Content | undefined}
195
+ */
196
+ _readerGetContent(quill, addr) {
197
+ try {
198
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
199
+ _assertClass(quill, Quill);
200
+ wasm.document__readerGetContent(retptr, this.__wbg_ptr, quill.__wbg_ptr, addHeapObject(addr));
201
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
202
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
203
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
204
+ if (r2) {
205
+ throw takeObject(r1);
206
+ }
207
+ return takeObject(r0);
208
+ } finally {
209
+ wasm.__wbindgen_add_to_stack_pointer(16);
210
+ }
211
+ }
212
+ /**
213
+ * Revise the content field at `addr` from authored text, typed *and*
214
+ * anchor-preserving: the ABI under `writer.reviseField`. Resolves the
174
215
  * field's schema from `quill` (main card, or the addressed card's `$kind`)
175
216
  * and defers to [`TypedWriter::revise_field`](quillmark_core::TypedWriter::revise_field):
176
217
  * surviving anchors rebase (as [`revise`](Self::revise)), then the diffed
@@ -178,21 +219,24 @@ export class Document {
178
219
  * multi-block result with `edit::field_richtext_not_inline`. Returns the
179
220
  * text `Delta`.
180
221
  *
222
+ * The codec is the declared type's: `richtext` diffs markdown, `plaintext`
223
+ * the literal text.
224
+ *
181
225
  * `addr` must name a field (a bare string is `{ field }`); a body address
182
- * throws (a body carries no field schema use [`revise`](Self::revise)). A
226
+ * throws (a body carries no field schema: use [`revise`](Self::revise)). A
183
227
  * name the schema does not declare throws `edit::unknown_field`. Throws
184
228
  * on an out-of-range card. Hidden from the `.d.ts`; the visible verb is
185
229
  * `writer.reviseField` in the runtime layer.
186
230
  * @param {Quill} quill
187
231
  * @param {Addr | string} addr
188
- * @param {string} markdown
232
+ * @param {string} text
189
233
  * @returns {Delta}
190
234
  */
191
- _reviseField(quill, addr, markdown) {
235
+ _reviseField(quill, addr, text) {
192
236
  try {
193
237
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
194
238
  _assertClass(quill, Quill);
195
- const ptr0 = passStringToWasm0(markdown, wasm.__wbindgen_export, wasm.__wbindgen_export2);
239
+ const ptr0 = passStringToWasm0(text, wasm.__wbindgen_export, wasm.__wbindgen_export2);
196
240
  const len0 = WASM_VECTOR_LEN;
197
241
  wasm.document__reviseField(retptr, this.__wbg_ptr, quill.__wbg_ptr, addHeapObject(addr), ptr0, len0);
198
242
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
@@ -208,7 +252,7 @@ export class Document {
208
252
  }
209
253
  /**
210
254
  * **Apply** a committed content edit `bundle` (`{ delta?, lineOps?, markOps? }`)
211
- * at `addr` the editor splice: text delta first, then line ops, then mark
255
+ * at `addr`, the editor splice: text delta first, then line ops, then mark
212
256
  * ops (mark ranges in final-text coordinates), each all-or-nothing. An absent
213
257
  * `addr.field` targets the body, an absent `addr.card` the main card.
214
258
  *
@@ -258,7 +302,7 @@ export class Document {
258
302
  }
259
303
  }
260
304
  /**
261
- * A single composable card by index the whole `Card`, the card-indexed
305
+ * A single composable card by index: the whole `Card`, the card-indexed
262
306
  * twin of the [`main`](Self::main) getter, so reading one card need not
263
307
  * materialize every card via [`cards`](Self::cards). An out-of-range
264
308
  * `index` throws `edit::index_out_of_range`, matching the card write
@@ -289,20 +333,6 @@ export class Document {
289
333
  const ret = wasm.document_cardCount(this.__wbg_ptr);
290
334
  return ret >>> 0;
291
335
  }
292
- /**
293
- * The index of the composable card whose `$id` equals `id`, or
294
- * `undefined` when none carries it. Resolves the durable card handle
295
- * without a hand-rolled scan over [`cards`](Self::cards); `$id` is
296
- * unique per document, so at most one card matches.
297
- * @param {string} id
298
- * @returns {number | undefined}
299
- */
300
- cardIndexById(id) {
301
- const ptr0 = passStringToWasm0(id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
302
- const len0 = WASM_VECTOR_LEN;
303
- const ret = wasm.document_cardIndexById(this.__wbg_ptr, ptr0, len0);
304
- return takeObject(ret);
305
- }
306
336
  /**
307
337
  * @returns {Card[]}
308
338
  */
@@ -459,7 +489,7 @@ export class Document {
459
489
  }
460
490
  /**
461
491
  * The whole `$ext` map at `addr` (a card address, absent `card` = main), or
462
- * `undefined` when the card carries none. The fine-grained `$ext` read
492
+ * `undefined` when the card carries none. The fine-grained `$ext` read:
463
493
  * your own state without serializing the whole card. Throws on a present
464
494
  * `field` (a card address takes only `card`) or an out-of-range card.
465
495
  * @param {CardAddr} [addr]
@@ -482,7 +512,7 @@ export class Document {
482
512
  }
483
513
  /**
484
514
  * The value stored under `$ext[ns]` at `addr` (a card address, absent `card`
485
- * = main), or `undefined`. The namespace-scoped `$ext` read your own slot
515
+ * = main), or `undefined`. The namespace-scoped `$ext` read: your own slot
486
516
  * without a whole-card serialize, and non-destructive (unlike
487
517
  * `removeExtNamespace`). Throws on a present `field` or an out-of-range card.
488
518
  * @param {CardAddr} addr
@@ -507,15 +537,15 @@ export class Document {
507
537
  }
508
538
  }
509
539
  /**
510
- * The **body** markdown projection the main body, or a composable card's
511
- * body (`{ card }`) the on-demand, lossy export (content-only marks do not
540
+ * The **body** markdown projection (the main body, or a composable card's
541
+ * body (`{ card }`)) the on-demand, lossy export (content-only marks do not
512
542
  * survive markdown). A body's type is a format fact, not a schema fact, so
513
543
  * this read stays quill-free; a body is never absent.
514
544
  *
515
545
  * `addr` is an optional **card address** (`{ card }`, absent = main). A
516
- * present `field` throws a field's markdown is read through the
546
+ * present `field` throws: a field's markdown is read through the
517
547
  * schema-plane `quill.reader(doc).get(field)`, which interprets by declared
518
- * type (#978). An out-of-range `addr.card` throws.
548
+ * type. An out-of-range `addr.card` throws.
519
549
  * @param {CardAddr} [addr]
520
550
  * @returns {string}
521
551
  */
@@ -535,16 +565,25 @@ export class Document {
535
565
  }
536
566
  }
537
567
  /**
538
- * Read the **verbatim stored value** at `addr` the raw payload value of a
539
- * field (a content object for a richtext field, a scalar/array/object
540
- * otherwise), or the **body content** when `addr.field` is absent. A bare
568
+ * Read the **verbatim stored value** at `addr`: the raw payload value of a
569
+ * field, or the **body content** when `addr.field` is absent. A bare
541
570
  * string is `Addr` shorthand for `{ field }`. Reads are total over the field
542
571
  * axis: an absent field is `undefined`; only an out-of-range `addr.card`
543
572
  * throws `edit::index_out_of_range`. Needs no schema, so it lives on
544
- * `Document` the read echo of the verbatim `store*` write, distinct from
573
+ * `Document`: the read echo of the verbatim `store*` write, distinct from
545
574
  * the interpreted schema-plane [`reader.get`](Self::reader_get). For the
546
575
  * markdown projection use [`getMarkdown`](Self::get_markdown) (body) or
547
576
  * `reader.get` (a field's declared type).
577
+ *
578
+ * **A content field at rest has one stored form per codec**: a `richtext`
579
+ * field holds the canonical content object, a `plaintext` field its literal
580
+ * string. A document that came through the bound door (`quill.parse` /
581
+ * `quill.conform`) is at rest, so this read no longer depends on which lane
582
+ * built it. A document that came through the transport door
583
+ * (`Document.fromMarkdown`, a legacy stored row) may rest as authored until
584
+ * it is conformed, and this read reports what is there. For the corpus
585
+ * either way, use the schema-plane `reader.getContent`, which decodes
586
+ * through the codec the field's declared type names.
548
587
  * @param {Addr | string} addr
549
588
  * @returns {unknown}
550
589
  */
@@ -564,9 +603,9 @@ export class Document {
564
603
  }
565
604
  }
566
605
  /**
567
- * Insert a card the single insertion verb: `at` absent appends, a number
606
+ * Insert a card, the single insertion verb: `at` absent appends, a number
568
607
  * inserts at that index (must be in `0..=cards.length`). Accepts a
569
- * `CardInput` a card read back (`cards` / `removeCard` / `quill.seedCard`),
608
+ * `CardInput`: a card read back (`cards` / `removeCard` / `quill.seedCard`),
570
609
  * a [`makeCard`](Document::make_card) result, or a bare `{ kind, body }`
571
610
  * (every returned `Card` is a valid `CardInput`). Throws if `card.kind` is
572
611
  * not a valid kind name, or if `at` is out of range.
@@ -587,7 +626,7 @@ export class Document {
587
626
  }
588
627
  }
589
628
  /**
590
- * **Install** a richtext value at `addr` **value semantics**, content only.
629
+ * **Install** a richtext value at `addr`: **value semantics**, content only.
591
630
  * Stores exactly `rt` (a canonical `Content` content object); the identity
592
631
  * anchors of any previous value are gone. An absent `addr.field` targets the
593
632
  * body, an absent `addr.card` the main card. For "here's new markdown," use
@@ -615,7 +654,7 @@ export class Document {
615
654
  }
616
655
  /**
617
656
  * Whether the field at `addr` is marked `!must_fill`. A bare string is `Addr`
618
- * shorthand for `{ field }`. `false` for an absent field (truthful it isn't
657
+ * shorthand for `{ field }`. `false` for an absent field (truthful: it isn't
619
658
  * marked) and for a body address (a body is never a fill). Only an
620
659
  * out-of-range `addr.card` throws.
621
660
  * @param {Addr | string} addr
@@ -638,13 +677,13 @@ export class Document {
638
677
  }
639
678
  /**
640
679
  * Replace this document's contents **in place** from a versioned storage
641
- * DTO string the mutating twin of the static
680
+ * DTO string: the mutating twin of the static
642
681
  * [`fromJson`](Document::from_json) constructor. Parse-time `warnings` are
643
682
  * cleared. Throws (leaving the document unchanged) on an invalid DTO.
644
683
  *
645
684
  * The cross-WASM-memory `Document` bridge: mutate a document on a
646
685
  * backend-memory clone, then write the mutated state back into the caller's
647
- * canonical document with this the one way to update a live handle across
686
+ * canonical document with this, the one way to update a live handle across
648
687
  * the linear-memory seam without the caller re-binding its variable.
649
688
  * @param {string} json
650
689
  */
@@ -665,7 +704,7 @@ export class Document {
665
704
  }
666
705
  /**
667
706
  * The document's main (entry) card. Allocates and serializes on each
668
- * call cache locally if read in a hot loop.
707
+ * call: cache locally if read in a hot loop.
669
708
  * @returns {Card}
670
709
  */
671
710
  get main() {
@@ -684,7 +723,7 @@ export class Document {
684
723
  }
685
724
  }
686
725
  /**
687
- * Build a fresh `Card` from a kind and a flat field map the ergonomic
726
+ * Build a fresh `Card` from a kind and a flat field map: the ergonomic
688
727
  * constructor for `insertCard`. `fields` is an optional
689
728
  * `Record<string, unknown>` (each entry becomes a card field, in
690
729
  * insertion order); `body` defaults to `""`.
@@ -694,8 +733,8 @@ export class Document {
694
733
  * here.
695
734
  *
696
735
  * Checks only what a detached card can decide alone: field-name grammar
697
- * and value depth. Kind validity is positional `main` is right for the
698
- * root, reserved for a composable card so `insertCard` is its gate, and
736
+ * and value depth. Kind validity is positional (`main` is right for the
737
+ * root, reserved for a composable card) so `insertCard` is its gate, and
699
738
  * any kind string is accepted here.
700
739
  * @param {string} kind
701
740
  * @param {Record<string, unknown>} [fields]
@@ -740,7 +779,7 @@ export class Document {
740
779
  }
741
780
  }
742
781
  /**
743
- * `new Document(quillRef)` a blank document: a main card carrying only
782
+ * `new Document(quillRef)`, a blank document: a main card carrying only
744
783
  * `$quill`, an empty body, and no composable cards. The programmatic
745
784
  * blank canvas: absent fields resolve at render time (`default`, else
746
785
  * type-empty zero), so nothing the caller did not set reaches the
@@ -789,7 +828,7 @@ export class Document {
789
828
  /**
790
829
  * The canonical `$quill` reference grammar as author-facing text. Core is
791
830
  * the single source of truth: drive schema `describe` and validation
792
- * messages from this instead of re-stating the rule it matches the
831
+ * messages from this instead of re-stating the rule; it matches the
793
832
  * `hint` on `parse::invalid_quill_reference`. Cache it; the value never
794
833
  * changes.
795
834
  * @returns {string}
@@ -831,7 +870,7 @@ export class Document {
831
870
  }
832
871
  /**
833
872
  * Remove the `$ext` map on the card `addr` targets *entirely*, returning the
834
- * previous map or `undefined` a blunt escape hatch that discards every
873
+ * previous map or `undefined`: a blunt escape hatch that discards every
835
874
  * namespace at once (prefer `removeExtNamespace`). `addr` is a card address
836
875
  * (absent = main). Throws on a present `field` or an out-of-range card.
837
876
  * @param {CardAddr} [addr]
@@ -926,7 +965,7 @@ export class Document {
926
965
  }
927
966
  }
928
967
  /**
929
- * **Revise** the richtext value at `addr` from a markdown string **edit
968
+ * **Revise** the richtext value at `addr` from a markdown string: **edit
930
969
  * semantics**, the default write path, returning the text `Delta`. Imports
931
970
  * the markdown, diffs it against the current value, rebases surviving
932
971
  * identity anchors, and returns the change an editor bridge maps its own
@@ -958,7 +997,7 @@ export class Document {
958
997
  }
959
998
  /**
960
999
  * Read the `schema` version tag from a raw storage DTO string without a
961
- * full parse, or `undefined`. Returns unknown future versions as-is
1000
+ * full parse, or `undefined`. Returns unknown future versions as-is:
962
1001
  * useful to distinguish "build too old" from "payload corrupt" when
963
1002
  * `fromJson` throws.
964
1003
  * @param {string} json
@@ -986,7 +1025,7 @@ export class Document {
986
1025
  * The main card's `$seed` overlay object for `kind` (the `$seed[kind]`
987
1026
  * entry), or `undefined` when absent. The cheap read that feeds
988
1027
  * `quill.seedCard(kind, overlay)` without serializing the whole main card
989
- * via [`main`](Self::main) to fish out one key and it keeps `seedCard`
1028
+ * via [`main`](Self::main) to fish out one key, and it keeps `seedCard`
990
1029
  * pure: the quill still never reads the document.
991
1030
  * @param {string} kind
992
1031
  * @returns {Record<string, unknown> | undefined}
@@ -1053,7 +1092,7 @@ export class Document {
1053
1092
  * Replace the opaque `$ext` map on the card `addr` targets (a card address,
1054
1093
  * absent `card` = main). `value` must be a plain object. `$ext` carries
1055
1094
  * out-of-band consumer state and never reaches the rendered output; pass
1056
- * `{}` for an explicit empty `$ext`. Quill-free and verbatim an opaque
1095
+ * `{}` for an explicit empty `$ext`. Quill-free and verbatim: an opaque
1057
1096
  * `store` verb. Throws on a present `field` or an out-of-range card.
1058
1097
  * @param {CardAddr} addr
1059
1098
  * @param {any} value
@@ -1073,8 +1112,8 @@ export class Document {
1073
1112
  }
1074
1113
  /**
1075
1114
  * Merge `value` into `$ext[ns]` on the card `addr` targets, preserving
1076
- * sibling namespaces the recommended `$ext` write. `addr` is a card
1077
- * address (absent = main). Quill-free and verbatim an opaque `store` verb.
1115
+ * sibling namespaces: the recommended `$ext` write. `addr` is a card
1116
+ * address (absent = main). Quill-free and verbatim: an opaque `store` verb.
1078
1117
  * Throws on a present `field` or an out-of-range card.
1079
1118
  * @param {CardAddr} addr
1080
1119
  * @param {string} ns
@@ -1096,12 +1135,12 @@ export class Document {
1096
1135
  }
1097
1136
  }
1098
1137
  /**
1099
- * Store a field verbatim at `addr` the opaque store (**store** = verbatim,
1138
+ * Store a field verbatim at `addr`: the opaque store (**store** = verbatim,
1100
1139
  * coercion deferred to render; the typed write is
1101
1140
  * [`commitField`](Document::commit_field)). A bare string is `Addr`
1102
1141
  * shorthand for `{ field }`, so `doc.storeField("qty", 3)` reads as written;
1103
1142
  * `{ card: 2, field: "qty" }` targets a composable card. Clears any
1104
- * `!must_fill` marker. A body address (no `field`) throws a body is never
1143
+ * `!must_fill` marker. A body address (no `field`) throws: a body is never
1105
1144
  * opaque; write it with `revise` / `install` / `writer.setBody`. Throws on
1106
1145
  * an out-of-range card or a malformed name.
1107
1146
  * @param {Addr | string} addr
@@ -1121,12 +1160,12 @@ export class Document {
1121
1160
  }
1122
1161
  }
1123
1162
  /**
1124
- * Store several fields verbatim and atomically on the card `addr` targets
1163
+ * Store several fields verbatim and atomically on the card `addr` targets:
1125
1164
  * the opaque store's batch. `addr` is a **card address** (`{ card }`, absent
1126
1165
  * = main); a present `field` throws. The batch verb takes the address first
1127
1166
  * and is never shape-overloaded, because `card` is a legal field name:
1128
1167
  * `storeFields({}, fields)` is the main card, `storeFields({ card: 2 },
1129
- * fields)` a composable one never ambiguous with "set field `card`".
1168
+ * fields)` a composable one, never ambiguous with "set field `card`".
1130
1169
  * Nothing is applied on error; the thrown error's `diagnostics` carry one
1131
1170
  * entry per offending field. Throws on an out-of-range card.
1132
1171
  * @param {CardAddr} addr
@@ -1146,7 +1185,7 @@ export class Document {
1146
1185
  }
1147
1186
  }
1148
1187
  /**
1149
- * Store a field verbatim at `addr` and mark it `!must_fill` the opaque
1188
+ * Store a field verbatim at `addr` and mark it `!must_fill`: the opaque
1150
1189
  * store's fill variant, card-capable (a bare string or `{ field }` for main,
1151
1190
  * `{ card, field }` for a composable card). A body address throws. Same
1152
1191
  * validation as [`storeField`](Document::store_field).
@@ -1168,9 +1207,9 @@ export class Document {
1168
1207
  }
1169
1208
  /**
1170
1209
  * Merge a card-kind's seed `overlay` into the **main** card's `$seed` map
1171
- * under `cardKind`, preserving sibling kinds `$seed` lives on the main
1210
+ * under `cardKind`, preserving sibling kinds: `$seed` lives on the main
1172
1211
  * card by model, so this takes no address. Sets the starting values new
1173
- * cards of that kind spawn with. Quill-free and verbatim an opaque `store`
1212
+ * cards of that kind spawn with. Quill-free and verbatim: an opaque `store`
1174
1213
  * verb. Throws if `overlay` cannot be serialized or nests too deep.
1175
1214
  * @param {string} card_kind
1176
1215
  * @param {any} overlay
@@ -1194,7 +1233,7 @@ export class Document {
1194
1233
  * Serialize this document to a versioned storage DTO string.
1195
1234
  *
1196
1235
  * Prefer this over `toMarkdown` for persistence across restarts or crate
1197
- * upgrades the wire format is frozen per `schema` version. Parse-time
1236
+ * upgrades: the wire format is frozen per `schema` version. Parse-time
1198
1237
  * `warnings` are excluded from the DTO.
1199
1238
  *
1200
1239
  * Output is **byte-deterministic** within a `schema` version: equal
@@ -1240,7 +1279,7 @@ export class Document {
1240
1279
  }
1241
1280
  /**
1242
1281
  * Like [`fromJson`](Document::from_json) but returns `undefined` instead
1243
- * of throwing when `json` is not a valid storage DTO use to
1282
+ * of throwing when `json` is not a valid storage DTO: use to
1244
1283
  * discriminate format without exceptions as control flow.
1245
1284
  * `undefined` means "not a storage DTO"; `fromMarkdown` still throws on
1246
1285
  * genuinely malformed markdown.
@@ -1254,6 +1293,10 @@ export class Document {
1254
1293
  return ret === 0 ? undefined : Document.__wrap(ret);
1255
1294
  }
1256
1295
  /**
1296
+ * The non-fatal diagnostics of the load that produced this document: parse
1297
+ * warnings, plus the `conform::*` warnings when it came through
1298
+ * `quill.parse`. Session state, not document value: `equals` and the
1299
+ * storage DTO exclude it, and `fromJson` / `loadJson` clear it.
1257
1300
  * @returns {Diagnostic[]}
1258
1301
  */
1259
1302
  get warnings() {
@@ -1294,7 +1337,7 @@ export class Quill {
1294
1337
  }
1295
1338
  /**
1296
1339
  * The *declared* backend identifier (`config.backend`, e.g. `"typst"`).
1297
- * Intent, not a resolved capability capability (`supportedFormats` /
1340
+ * Intent, not a resolved capability: capability (`supportedFormats` /
1298
1341
  * `supportsCanvas`) is read from the engine.
1299
1342
  * @returns {string}
1300
1343
  */
@@ -1334,7 +1377,41 @@ export class Quill {
1334
1377
  }
1335
1378
  }
1336
1379
  /**
1337
- * Build a quill from a file tree. Pure no backend, no engine; the
1380
+ * Land `doc`'s declared content fields at their canonical rest **in
1381
+ * place**, returning the `conform::*` diagnostics for the values that would
1382
+ * not commit (an empty array when everything rested).
1383
+ *
1384
+ * The read-repair verb: a document that arrived through the transport door
1385
+ * (`fromMarkdown`, `fromJson`, a stored row) converges here, and is then
1386
+ * eligible for rewrite under its current schema tag. Idempotent, and a
1387
+ * no-op on an already-canonical document: an equal value is not rewritten,
1388
+ * so YAML comments and stored bytes survive.
1389
+ *
1390
+ * A `!must_fill` marker anywhere in a field's value skips that field (the
1391
+ * marker is the state), and a value the strict write refuses stays as
1392
+ * authored with a diagnostic. Throws when `doc` declares a different
1393
+ * `$quill`, before any mutation.
1394
+ * @param {Document} doc
1395
+ * @returns {Diagnostic[]}
1396
+ */
1397
+ conform(doc) {
1398
+ try {
1399
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1400
+ _assertClass(doc, Document);
1401
+ wasm.quill_conform(retptr, this.__wbg_ptr, doc.__wbg_ptr);
1402
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1403
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1404
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
1405
+ if (r2) {
1406
+ throw takeObject(r1);
1407
+ }
1408
+ return takeObject(r0);
1409
+ } finally {
1410
+ wasm.__wbindgen_add_to_stack_pointer(16);
1411
+ }
1412
+ }
1413
+ /**
1414
+ * Build a quill from a file tree. Pure: no backend, no engine; the
1338
1415
  * declared backend is resolved later, at render time.
1339
1416
  *
1340
1417
  * Accepts either a `Map<string, Uint8Array>` or a plain object
@@ -1361,7 +1438,7 @@ export class Quill {
1361
1438
  }
1362
1439
  /**
1363
1440
  * Identity snapshot of the `quill:` section of `Quill.yaml` plus any extra
1364
- * `quill:` keys. Pure config the backend's output formats are a
1441
+ * `quill:` keys. Pure config: the backend's output formats are a
1365
1442
  * resolved-backend capability read from the engine
1366
1443
  * (`Quillmark.supportedFormats`), not part of this snapshot.
1367
1444
  * @returns {QuillMetadata}
@@ -1382,11 +1459,44 @@ export class Quill {
1382
1459
  }
1383
1460
  }
1384
1461
  /**
1385
- * The resolved-value view of `doc` against this quill's schema — for every
1462
+ * Parse `markdown` and conform it against this quill: the **primary
1463
+ * ingestion path**, and the bound twin of the schema-free
1464
+ * `Document.fromMarkdown`. The returned document rests at its canonical
1465
+ * form (a `richtext` field as a content object, a `plaintext` field as its
1466
+ * literal string), so `getStored` no longer answers "corpus or string?"
1467
+ * with "depends how this document was built".
1468
+ *
1469
+ * Parse warnings and the `conform::*` diagnostics both land on
1470
+ * `doc.warnings`. Throws on a parse failure, or when `markdown` declares a
1471
+ * `$quill` this quill does not answer to: nothing conforms under the wrong
1472
+ * schema. To open a document whose `$quill` is stale, use the transport
1473
+ * door (`Document.fromMarkdown`, `setQuillRef`, then `quill.conform`).
1474
+ * @param {string} markdown
1475
+ * @returns {Document}
1476
+ */
1477
+ parse(markdown) {
1478
+ try {
1479
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1480
+ const ptr0 = passStringToWasm0(markdown, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1481
+ const len0 = WASM_VECTOR_LEN;
1482
+ wasm.quill_parse(retptr, this.__wbg_ptr, ptr0, len0);
1483
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1484
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1485
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
1486
+ if (r2) {
1487
+ throw takeObject(r1);
1488
+ }
1489
+ return Document.__wrap(r0);
1490
+ } finally {
1491
+ wasm.__wbindgen_add_to_stack_pointer(16);
1492
+ }
1493
+ }
1494
+ /**
1495
+ * The resolved-value view of `doc` against this quill's schema: for every
1386
1496
  * declared field the value the render projection would use and the
1387
1497
  * `FieldSource` rung it came from (`"authored" | "default" | "zero"`), in
1388
1498
  * one call. The card body is a `body` sibling on its card (row `name`
1389
- * `"body"`), never a row in `fields` `null` when the kind enables no body.
1499
+ * `"body"`), never a row in `fields`: `null` when the kind enables no body.
1390
1500
  *
1391
1501
  * Value and provenance only: completeness and errors stay `validate`'s
1392
1502
  * (a consumer merges it with its own diagnostic producers regardless), and
@@ -1413,8 +1523,8 @@ export class Quill {
1413
1523
  /**
1414
1524
  * Document schema for the quill: the user-fillable fields plus their
1415
1525
  * `ui` hints (title / group / compact / multiline). The single
1416
- * field-metadata surface drives form editors and LLM/MCP consumers
1417
- * alike. Key order in `fields`/`properties` is declaration order the
1526
+ * field-metadata surface: drives form editors and LLM/MCP consumers
1527
+ * alike. Key order in `fields`/`properties` is declaration order: the
1418
1528
  * ordering contract. Returns the `QuillSchema` shape.
1419
1529
  * @returns {QuillSchema}
1420
1530
  */
@@ -1443,7 +1553,7 @@ export class Quill {
1443
1553
  * Pass `document.seedOverlay(cardKind)` as `overlay` so a card added to a
1444
1554
  * template-derived document inherits its curated starting values; omit it
1445
1555
  * (or pass `undefined` / `null`) for the bare schema seed. `overlay` is a
1446
- * plain object this reads the document, it does not mutate it.
1556
+ * plain object: this reads the document, it does not mutate it.
1447
1557
  * @param {string} card_kind
1448
1558
  * @param {Record<string, unknown> | undefined} overlay
1449
1559
  * @returns {Card | undefined}
@@ -1466,7 +1576,7 @@ export class Quill {
1466
1576
  }
1467
1577
  }
1468
1578
  /**
1469
- * Seed a starter `Document` from the schema the main card plus one
1579
+ * Seed a starter `Document` from the schema, the main card plus one
1470
1580
  * instance of each composable card kind, each committing its fields'
1471
1581
  * `example:` values and leaving every other field absent (interpolated at
1472
1582
  * render: `default:`, else type-empty zero). Illustration-first: a field
@@ -1479,7 +1589,7 @@ export class Quill {
1479
1589
  return Document.__wrap(ret);
1480
1590
  }
1481
1591
  /**
1482
- * Seed a starter main `Card` (carries `$quill`) from the schema the
1592
+ * Seed a starter main `Card` (carries `$quill`) from the schema: the
1483
1593
  * `$kind: main` card of [`seedDocument`](Self::seed_document) in
1484
1594
  * isolation, committing each field's `example:` value. Returns the same
1485
1595
  * `Card` shape as the `Document.main` getter.
@@ -1501,7 +1611,7 @@ export class Quill {
1501
1611
  }
1502
1612
  }
1503
1613
  /**
1504
- * Flatten this quill back into its canonical file tree the inverse of
1614
+ * Flatten this quill back into its canonical file tree: the inverse of
1505
1615
  * [`fromTree`](Self::from_tree). Round-trips: `Quill.fromTree(q.toTree())`
1506
1616
  * reproduces an equivalent quill.
1507
1617
  *
@@ -1521,8 +1631,8 @@ export class Quill {
1521
1631
  * Validate `doc` against this quill's schema, returning every diagnostic
1522
1632
  * (an empty array when the document is valid).
1523
1633
  *
1524
- * Forwards the canonical `validation::*` diagnostics same `code`,
1525
- * `path`, and `hint` the engine emits including the non-fatal
1634
+ * Forwards the canonical `validation::*` diagnostics (same `code`,
1635
+ * `path`, and `hint` the engine emits) including the non-fatal
1526
1636
  * `validation::must_fill` warning for each `!must_fill` marker left in
1527
1637
  * the document. Field values, defaults, and order are not part of this
1528
1638
  * surface: read them from the `Document` payload and `Quill.schema`
@@ -1550,7 +1660,7 @@ export class Quill {
1550
1660
  if (Symbol.dispose) Quill.prototype[Symbol.dispose] = Quill.prototype.free;
1551
1661
 
1552
1662
  /**
1553
- * Export a canonical `Content` content to its markdown projection the pure
1663
+ * Export a canonical `Content` content to its markdown projection: the pure
1554
1664
  * on-demand codec behind `exportMarkdown(card.body)`. Throws if `rt` is not a
1555
1665
  * canonical content.
1556
1666
  * @param {Content} rt
@@ -1583,7 +1693,7 @@ export function exportMarkdown(rt) {
1583
1693
 
1584
1694
  /**
1585
1695
  * Serialize structured [`DocPathSeg`] segments back to the canonical path
1586
- * string the inverse of `parseDocPath`, for a consumer that builds a path
1696
+ * string: the inverse of `parseDocPath`, for a consumer that builds a path
1587
1697
  * rather than reads one. Throws on a segment array the deserializer rejects,
1588
1698
  * and on an empty segment array (symmetric with `parseDocPath("")`, which
1589
1699
  * throws "empty path").
@@ -1616,7 +1726,7 @@ export function formatDocPath(segs) {
1616
1726
  }
1617
1727
 
1618
1728
  /**
1619
- * Import a markdown string to a canonical `Content` content the pure,
1729
+ * Import a markdown string to a canonical `Content` content: the pure,
1620
1730
  * document-free codec. Pair with `install(addr, importMarkdown(md))` to spell
1621
1731
  * the cold (anchor-losing) write at the call site; prefer `revise` for edit
1622
1732
  * semantics. Throws on an over-nested input.
@@ -1649,8 +1759,8 @@ export function init() {
1649
1759
  }
1650
1760
 
1651
1761
  /**
1652
- * Map a base content position a USV index into `Content.text`, not a UTF-16
1653
- * offset through a `delta` to its new USV position: the pure position-mapping
1762
+ * Map a base content position (a USV index into `Content.text`, not a UTF-16
1763
+ * offset) through a `delta` to its new USV position: the pure position-mapping
1654
1764
  * codec an editor bridge composes to hold a caret stable across a `revise`.
1655
1765
  * `assoc` decides the side of a same-position insertion (`"after"` moves past
1656
1766
  * it). Throws on a malformed `delta`.
@@ -1678,7 +1788,7 @@ export function mapPos(delta, pos, assoc) {
1678
1788
  /**
1679
1789
  * Parse a canonical document-model `Diagnostic.path`
1680
1790
  * (`cards.<kind>[<i>].<field>`, `main.body`, `recipients[0].name`) into its
1681
- * structured [`DocPathSeg`] segments the exported inverse of the engine's
1791
+ * structured [`DocPathSeg`] segments: the exported inverse of the engine's
1682
1792
  * one path serializer, so a consumer routes on segments instead of regexing
1683
1793
  * the string. Throws on a malformed path.
1684
1794
  * @param {string} path
@@ -1703,7 +1813,7 @@ export function parseDocPath(path) {
1703
1813
  }
1704
1814
 
1705
1815
  /**
1706
- * Rebase `markdown` onto a `base` content the pure, document-free twin of
1816
+ * Rebase `markdown` onto a `base` content, the pure, document-free twin of
1707
1817
  * `revise`: cold-import + `diff_import`, returning the new `content` and the
1708
1818
  * text `delta` (its offsets USV indices into `Content.text`, surviving anchors
1709
1819
  * rebased). Use it to compute a revise without a document in hand; `revise(addr,
@@ -1745,13 +1855,6 @@ export function __wbg_String_8564e559799eccda(arg0, arg1) {
1745
1855
  getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
1746
1856
  getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
1747
1857
  }
1748
- export function __wbg_String_b51de6b05a10845b(arg0, arg1) {
1749
- const ret = String(getObject(arg1));
1750
- const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1751
- const len1 = WASM_VECTOR_LEN;
1752
- getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
1753
- getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
1754
- }
1755
1858
  export function __wbg___wbindgen_bigint_get_as_i64_3d3aba5d616c6a51(arg0, arg1) {
1756
1859
  const v = getObject(arg1);
1757
1860
  const ret = typeof(v) === 'bigint' ? v : undefined;
@@ -1855,9 +1958,6 @@ export function __wbg_from_0dbf29f09e7fb200(arg0) {
1855
1958
  const ret = Array.from(getObject(arg0));
1856
1959
  return addHeapObject(ret);
1857
1960
  }
1858
- export function __wbg_getRandomValues_3f44b700395062e5() { return handleError(function (arg0, arg1) {
1859
- globalThis.crypto.getRandomValues(getArrayU8FromWasm0(arg0, arg1));
1860
- }, arguments); }
1861
1961
  export function __wbg_get_1affdbdd5573b16a() { return handleError(function (arg0, arg1) {
1862
1962
  const ret = Reflect.get(getObject(arg0), getObject(arg1));
1863
1963
  return addHeapObject(ret);
@@ -1874,10 +1974,6 @@ export function __wbg_get_with_ref_key_6412cf3094599694(arg0, arg1) {
1874
1974
  const ret = getObject(arg0)[getObject(arg1)];
1875
1975
  return addHeapObject(ret);
1876
1976
  }
1877
- export function __wbg_get_with_ref_key_f64427178466f623(arg0, arg1) {
1878
- const ret = getObject(arg0)[getObject(arg1)];
1879
- return addHeapObject(ret);
1880
- }
1881
1977
  export function __wbg_instanceof_ArrayBuffer_7c8433c6ed14ffe3(arg0) {
1882
1978
  let result;
1883
1979
  try {
@@ -2006,6 +2102,14 @@ export function __wbg_value_ee3a06f4579184fa(arg0) {
2006
2102
  const ret = getObject(arg0).value;
2007
2103
  return addHeapObject(ret);
2008
2104
  }
2105
+ export function __wbg_values_1e6d547ce555ce44(arg0) {
2106
+ const ret = getObject(arg0).values();
2107
+ return addHeapObject(ret);
2108
+ }
2109
+ export function __wbg_values_301a77363cf6c773(arg0) {
2110
+ const ret = Object.values(getObject(arg0));
2111
+ return addHeapObject(ret);
2112
+ }
2009
2113
  export function __wbindgen_cast_0000000000000001(arg0) {
2010
2114
  // Cast intrinsic for `F64 -> Externref`.
2011
2115
  const ret = arg0;