@quillmark/wasm 0.97.0 → 0.99.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/CHANGELOG.md +303 -0
- package/LICENSE +13 -0
- package/README.md +63 -60
- package/backends/pdfform/wasm.d.ts +300 -143
- package/backends/pdfform/wasm_bg.js +101 -102
- package/backends/pdfform/wasm_bg.wasm +0 -0
- package/backends/typst/wasm.d.ts +300 -143
- package/backends/typst/wasm_bg.js +101 -102
- package/backends/typst/wasm_bg.wasm +0 -0
- package/core/wasm.d.ts +127 -93
- package/core/wasm_bg.js +84 -82
- package/core/wasm_bg.wasm +0 -0
- package/package.json +2 -2
- package/runtime/runtime.d.ts +157 -79
- package/runtime/runtime.js +375 -95
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
|
|
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
|
|
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
|
|
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
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
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
|
*
|
|
@@ -170,7 +170,7 @@ export class Document {
|
|
|
170
170
|
}
|
|
171
171
|
/**
|
|
172
172
|
* Revise the richtext field at `addr` from markdown, typed *and*
|
|
173
|
-
* anchor-preserving
|
|
173
|
+
* anchor-preserving: the ABI under `writer.reviseField`. Resolves the
|
|
174
174
|
* field's schema from `quill` (main card, or the addressed card's `$kind`)
|
|
175
175
|
* and defers to [`TypedWriter::revise_field`](quillmark_core::TypedWriter::revise_field):
|
|
176
176
|
* surviving anchors rebase (as [`revise`](Self::revise)), then the diffed
|
|
@@ -179,7 +179,7 @@ export class Document {
|
|
|
179
179
|
* text `Delta`.
|
|
180
180
|
*
|
|
181
181
|
* `addr` must name a field (a bare string is `{ field }`); a body address
|
|
182
|
-
* throws (a body carries no field schema
|
|
182
|
+
* throws (a body carries no field schema: use [`revise`](Self::revise)). A
|
|
183
183
|
* name the schema does not declare throws `edit::unknown_field`. Throws
|
|
184
184
|
* on an out-of-range card. Hidden from the `.d.ts`; the visible verb is
|
|
185
185
|
* `writer.reviseField` in the runtime layer.
|
|
@@ -208,7 +208,7 @@ export class Document {
|
|
|
208
208
|
}
|
|
209
209
|
/**
|
|
210
210
|
* **Apply** a committed content edit `bundle` (`{ delta?, lineOps?, markOps? }`)
|
|
211
|
-
* at `addr
|
|
211
|
+
* at `addr`, the editor splice: text delta first, then line ops, then mark
|
|
212
212
|
* ops (mark ranges in final-text coordinates), each all-or-nothing. An absent
|
|
213
213
|
* `addr.field` targets the body, an absent `addr.card` the main card.
|
|
214
214
|
*
|
|
@@ -258,7 +258,7 @@ export class Document {
|
|
|
258
258
|
}
|
|
259
259
|
}
|
|
260
260
|
/**
|
|
261
|
-
* A single composable card by index
|
|
261
|
+
* A single composable card by index: the whole `Card`, the card-indexed
|
|
262
262
|
* twin of the [`main`](Self::main) getter, so reading one card need not
|
|
263
263
|
* materialize every card via [`cards`](Self::cards). An out-of-range
|
|
264
264
|
* `index` throws `edit::index_out_of_range`, matching the card write
|
|
@@ -459,7 +459,7 @@ export class Document {
|
|
|
459
459
|
}
|
|
460
460
|
/**
|
|
461
461
|
* 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
|
|
462
|
+
* `undefined` when the card carries none. The fine-grained `$ext` read:
|
|
463
463
|
* your own state without serializing the whole card. Throws on a present
|
|
464
464
|
* `field` (a card address takes only `card`) or an out-of-range card.
|
|
465
465
|
* @param {CardAddr} [addr]
|
|
@@ -482,7 +482,7 @@ export class Document {
|
|
|
482
482
|
}
|
|
483
483
|
/**
|
|
484
484
|
* The value stored under `$ext[ns]` at `addr` (a card address, absent `card`
|
|
485
|
-
* = main), or `undefined`. The namespace-scoped `$ext` read
|
|
485
|
+
* = main), or `undefined`. The namespace-scoped `$ext` read: your own slot
|
|
486
486
|
* without a whole-card serialize, and non-destructive (unlike
|
|
487
487
|
* `removeExtNamespace`). Throws on a present `field` or an out-of-range card.
|
|
488
488
|
* @param {CardAddr} addr
|
|
@@ -507,15 +507,15 @@ export class Document {
|
|
|
507
507
|
}
|
|
508
508
|
}
|
|
509
509
|
/**
|
|
510
|
-
* The **body** markdown projection
|
|
511
|
-
* body (`{ card }`)
|
|
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
|
|
512
512
|
* survive markdown). A body's type is a format fact, not a schema fact, so
|
|
513
513
|
* this read stays quill-free; a body is never absent.
|
|
514
514
|
*
|
|
515
515
|
* `addr` is an optional **card address** (`{ card }`, absent = main). A
|
|
516
|
-
* present `field` throws
|
|
516
|
+
* present `field` throws: a field's markdown is read through the
|
|
517
517
|
* schema-plane `quill.reader(doc).get(field)`, which interprets by declared
|
|
518
|
-
* type
|
|
518
|
+
* type. An out-of-range `addr.card` throws.
|
|
519
519
|
* @param {CardAddr} [addr]
|
|
520
520
|
* @returns {string}
|
|
521
521
|
*/
|
|
@@ -535,13 +535,13 @@ export class Document {
|
|
|
535
535
|
}
|
|
536
536
|
}
|
|
537
537
|
/**
|
|
538
|
-
* Read the **verbatim stored value** at `addr
|
|
538
|
+
* Read the **verbatim stored value** at `addr`: the raw payload value of a
|
|
539
539
|
* field (a content object for a richtext field, a scalar/array/object
|
|
540
540
|
* otherwise), or the **body content** when `addr.field` is absent. A bare
|
|
541
541
|
* string is `Addr` shorthand for `{ field }`. Reads are total over the field
|
|
542
542
|
* axis: an absent field is `undefined`; only an out-of-range `addr.card`
|
|
543
543
|
* throws `edit::index_out_of_range`. Needs no schema, so it lives on
|
|
544
|
-
* `Document
|
|
544
|
+
* `Document`: the read echo of the verbatim `store*` write, distinct from
|
|
545
545
|
* the interpreted schema-plane [`reader.get`](Self::reader_get). For the
|
|
546
546
|
* markdown projection use [`getMarkdown`](Self::get_markdown) (body) or
|
|
547
547
|
* `reader.get` (a field's declared type).
|
|
@@ -564,9 +564,9 @@ export class Document {
|
|
|
564
564
|
}
|
|
565
565
|
}
|
|
566
566
|
/**
|
|
567
|
-
* Insert a card
|
|
567
|
+
* Insert a card, the single insertion verb: `at` absent appends, a number
|
|
568
568
|
* inserts at that index (must be in `0..=cards.length`). Accepts a
|
|
569
|
-
* `CardInput
|
|
569
|
+
* `CardInput`: a card read back (`cards` / `removeCard` / `quill.seedCard`),
|
|
570
570
|
* a [`makeCard`](Document::make_card) result, or a bare `{ kind, body }`
|
|
571
571
|
* (every returned `Card` is a valid `CardInput`). Throws if `card.kind` is
|
|
572
572
|
* not a valid kind name, or if `at` is out of range.
|
|
@@ -587,7 +587,7 @@ export class Document {
|
|
|
587
587
|
}
|
|
588
588
|
}
|
|
589
589
|
/**
|
|
590
|
-
* **Install** a richtext value at `addr
|
|
590
|
+
* **Install** a richtext value at `addr`: **value semantics**, content only.
|
|
591
591
|
* Stores exactly `rt` (a canonical `Content` content object); the identity
|
|
592
592
|
* anchors of any previous value are gone. An absent `addr.field` targets the
|
|
593
593
|
* body, an absent `addr.card` the main card. For "here's new markdown," use
|
|
@@ -615,7 +615,7 @@ export class Document {
|
|
|
615
615
|
}
|
|
616
616
|
/**
|
|
617
617
|
* Whether the field at `addr` is marked `!must_fill`. A bare string is `Addr`
|
|
618
|
-
* shorthand for `{ field }`. `false` for an absent field (truthful
|
|
618
|
+
* shorthand for `{ field }`. `false` for an absent field (truthful: it isn't
|
|
619
619
|
* marked) and for a body address (a body is never a fill). Only an
|
|
620
620
|
* out-of-range `addr.card` throws.
|
|
621
621
|
* @param {Addr | string} addr
|
|
@@ -638,13 +638,13 @@ export class Document {
|
|
|
638
638
|
}
|
|
639
639
|
/**
|
|
640
640
|
* Replace this document's contents **in place** from a versioned storage
|
|
641
|
-
* DTO string
|
|
641
|
+
* DTO string: the mutating twin of the static
|
|
642
642
|
* [`fromJson`](Document::from_json) constructor. Parse-time `warnings` are
|
|
643
643
|
* cleared. Throws (leaving the document unchanged) on an invalid DTO.
|
|
644
644
|
*
|
|
645
645
|
* The cross-WASM-memory `Document` bridge: mutate a document on a
|
|
646
646
|
* backend-memory clone, then write the mutated state back into the caller's
|
|
647
|
-
* canonical document with this
|
|
647
|
+
* canonical document with this, the one way to update a live handle across
|
|
648
648
|
* the linear-memory seam without the caller re-binding its variable.
|
|
649
649
|
* @param {string} json
|
|
650
650
|
*/
|
|
@@ -665,7 +665,7 @@ export class Document {
|
|
|
665
665
|
}
|
|
666
666
|
/**
|
|
667
667
|
* The document's main (entry) card. Allocates and serializes on each
|
|
668
|
-
* call
|
|
668
|
+
* call: cache locally if read in a hot loop.
|
|
669
669
|
* @returns {Card}
|
|
670
670
|
*/
|
|
671
671
|
get main() {
|
|
@@ -684,11 +684,19 @@ export class Document {
|
|
|
684
684
|
}
|
|
685
685
|
}
|
|
686
686
|
/**
|
|
687
|
-
* Build a fresh `Card` from a kind and a flat field map
|
|
687
|
+
* Build a fresh `Card` from a kind and a flat field map: the ergonomic
|
|
688
688
|
* constructor for `insertCard`. `fields` is an optional
|
|
689
689
|
* `Record<string, unknown>` (each entry becomes a card field, in
|
|
690
|
-
* insertion order); `body` defaults to `""`.
|
|
691
|
-
*
|
|
690
|
+
* insertion order); `body` defaults to `""`.
|
|
691
|
+
*
|
|
692
|
+
* Sugar, not a required step: `insertCard` takes any `Card` object, and
|
|
693
|
+
* `removeCard` returns one, so a card round-trips without passing through
|
|
694
|
+
* here.
|
|
695
|
+
*
|
|
696
|
+
* 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
|
|
699
|
+
* any kind string is accepted here.
|
|
692
700
|
* @param {string} kind
|
|
693
701
|
* @param {Record<string, unknown>} [fields]
|
|
694
702
|
* @param {string} [body]
|
|
@@ -732,7 +740,7 @@ export class Document {
|
|
|
732
740
|
}
|
|
733
741
|
}
|
|
734
742
|
/**
|
|
735
|
-
* `new Document(quillRef)
|
|
743
|
+
* `new Document(quillRef)`, a blank document: a main card carrying only
|
|
736
744
|
* `$quill`, an empty body, and no composable cards. The programmatic
|
|
737
745
|
* blank canvas: absent fields resolve at render time (`default`, else
|
|
738
746
|
* type-empty zero), so nothing the caller did not set reaches the
|
|
@@ -781,7 +789,7 @@ export class Document {
|
|
|
781
789
|
/**
|
|
782
790
|
* The canonical `$quill` reference grammar as author-facing text. Core is
|
|
783
791
|
* the single source of truth: drive schema `describe` and validation
|
|
784
|
-
* messages from this instead of re-stating the rule
|
|
792
|
+
* messages from this instead of re-stating the rule; it matches the
|
|
785
793
|
* `hint` on `parse::invalid_quill_reference`. Cache it; the value never
|
|
786
794
|
* changes.
|
|
787
795
|
* @returns {string}
|
|
@@ -823,7 +831,7 @@ export class Document {
|
|
|
823
831
|
}
|
|
824
832
|
/**
|
|
825
833
|
* Remove the `$ext` map on the card `addr` targets *entirely*, returning the
|
|
826
|
-
* previous map or `undefined
|
|
834
|
+
* previous map or `undefined`: a blunt escape hatch that discards every
|
|
827
835
|
* namespace at once (prefer `removeExtNamespace`). `addr` is a card address
|
|
828
836
|
* (absent = main). Throws on a present `field` or an out-of-range card.
|
|
829
837
|
* @param {CardAddr} [addr]
|
|
@@ -918,7 +926,7 @@ export class Document {
|
|
|
918
926
|
}
|
|
919
927
|
}
|
|
920
928
|
/**
|
|
921
|
-
* **Revise** the richtext value at `addr` from a markdown string
|
|
929
|
+
* **Revise** the richtext value at `addr` from a markdown string: **edit
|
|
922
930
|
* semantics**, the default write path, returning the text `Delta`. Imports
|
|
923
931
|
* the markdown, diffs it against the current value, rebases surviving
|
|
924
932
|
* identity anchors, and returns the change an editor bridge maps its own
|
|
@@ -950,7 +958,7 @@ export class Document {
|
|
|
950
958
|
}
|
|
951
959
|
/**
|
|
952
960
|
* Read the `schema` version tag from a raw storage DTO string without a
|
|
953
|
-
* full parse, or `undefined`. Returns unknown future versions as-is
|
|
961
|
+
* full parse, or `undefined`. Returns unknown future versions as-is:
|
|
954
962
|
* useful to distinguish "build too old" from "payload corrupt" when
|
|
955
963
|
* `fromJson` throws.
|
|
956
964
|
* @param {string} json
|
|
@@ -978,7 +986,7 @@ export class Document {
|
|
|
978
986
|
* The main card's `$seed` overlay object for `kind` (the `$seed[kind]`
|
|
979
987
|
* entry), or `undefined` when absent. The cheap read that feeds
|
|
980
988
|
* `quill.seedCard(kind, overlay)` without serializing the whole main card
|
|
981
|
-
* via [`main`](Self::main) to fish out one key
|
|
989
|
+
* via [`main`](Self::main) to fish out one key, and it keeps `seedCard`
|
|
982
990
|
* pure: the quill still never reads the document.
|
|
983
991
|
* @param {string} kind
|
|
984
992
|
* @returns {Record<string, unknown> | undefined}
|
|
@@ -1045,7 +1053,7 @@ export class Document {
|
|
|
1045
1053
|
* Replace the opaque `$ext` map on the card `addr` targets (a card address,
|
|
1046
1054
|
* absent `card` = main). `value` must be a plain object. `$ext` carries
|
|
1047
1055
|
* out-of-band consumer state and never reaches the rendered output; pass
|
|
1048
|
-
* `{}` for an explicit empty `$ext`. Quill-free and verbatim
|
|
1056
|
+
* `{}` for an explicit empty `$ext`. Quill-free and verbatim: an opaque
|
|
1049
1057
|
* `store` verb. Throws on a present `field` or an out-of-range card.
|
|
1050
1058
|
* @param {CardAddr} addr
|
|
1051
1059
|
* @param {any} value
|
|
@@ -1065,8 +1073,8 @@ export class Document {
|
|
|
1065
1073
|
}
|
|
1066
1074
|
/**
|
|
1067
1075
|
* Merge `value` into `$ext[ns]` on the card `addr` targets, preserving
|
|
1068
|
-
* sibling namespaces
|
|
1069
|
-
* address (absent = main). Quill-free and verbatim
|
|
1076
|
+
* sibling namespaces: the recommended `$ext` write. `addr` is a card
|
|
1077
|
+
* address (absent = main). Quill-free and verbatim: an opaque `store` verb.
|
|
1070
1078
|
* Throws on a present `field` or an out-of-range card.
|
|
1071
1079
|
* @param {CardAddr} addr
|
|
1072
1080
|
* @param {string} ns
|
|
@@ -1088,12 +1096,12 @@ export class Document {
|
|
|
1088
1096
|
}
|
|
1089
1097
|
}
|
|
1090
1098
|
/**
|
|
1091
|
-
* Store a field verbatim at `addr
|
|
1099
|
+
* Store a field verbatim at `addr`: the opaque store (**store** = verbatim,
|
|
1092
1100
|
* coercion deferred to render; the typed write is
|
|
1093
1101
|
* [`commitField`](Document::commit_field)). A bare string is `Addr`
|
|
1094
1102
|
* shorthand for `{ field }`, so `doc.storeField("qty", 3)` reads as written;
|
|
1095
1103
|
* `{ card: 2, field: "qty" }` targets a composable card. Clears any
|
|
1096
|
-
* `!must_fill` marker. A body address (no `field`) throws
|
|
1104
|
+
* `!must_fill` marker. A body address (no `field`) throws: a body is never
|
|
1097
1105
|
* opaque; write it with `revise` / `install` / `writer.setBody`. Throws on
|
|
1098
1106
|
* an out-of-range card or a malformed name.
|
|
1099
1107
|
* @param {Addr | string} addr
|
|
@@ -1113,12 +1121,12 @@ export class Document {
|
|
|
1113
1121
|
}
|
|
1114
1122
|
}
|
|
1115
1123
|
/**
|
|
1116
|
-
* Store several fields verbatim and atomically on the card `addr` targets
|
|
1124
|
+
* Store several fields verbatim and atomically on the card `addr` targets:
|
|
1117
1125
|
* the opaque store's batch. `addr` is a **card address** (`{ card }`, absent
|
|
1118
1126
|
* = main); a present `field` throws. The batch verb takes the address first
|
|
1119
1127
|
* and is never shape-overloaded, because `card` is a legal field name:
|
|
1120
1128
|
* `storeFields({}, fields)` is the main card, `storeFields({ card: 2 },
|
|
1121
|
-
* fields)` a composable one
|
|
1129
|
+
* fields)` a composable one, never ambiguous with "set field `card`".
|
|
1122
1130
|
* Nothing is applied on error; the thrown error's `diagnostics` carry one
|
|
1123
1131
|
* entry per offending field. Throws on an out-of-range card.
|
|
1124
1132
|
* @param {CardAddr} addr
|
|
@@ -1138,7 +1146,7 @@ export class Document {
|
|
|
1138
1146
|
}
|
|
1139
1147
|
}
|
|
1140
1148
|
/**
|
|
1141
|
-
* Store a field verbatim at `addr` and mark it `!must_fill
|
|
1149
|
+
* Store a field verbatim at `addr` and mark it `!must_fill`: the opaque
|
|
1142
1150
|
* store's fill variant, card-capable (a bare string or `{ field }` for main,
|
|
1143
1151
|
* `{ card, field }` for a composable card). A body address throws. Same
|
|
1144
1152
|
* validation as [`storeField`](Document::store_field).
|
|
@@ -1160,9 +1168,9 @@ export class Document {
|
|
|
1160
1168
|
}
|
|
1161
1169
|
/**
|
|
1162
1170
|
* Merge a card-kind's seed `overlay` into the **main** card's `$seed` map
|
|
1163
|
-
* under `cardKind`, preserving sibling kinds
|
|
1171
|
+
* under `cardKind`, preserving sibling kinds: `$seed` lives on the main
|
|
1164
1172
|
* card by model, so this takes no address. Sets the starting values new
|
|
1165
|
-
* cards of that kind spawn with. Quill-free and verbatim
|
|
1173
|
+
* cards of that kind spawn with. Quill-free and verbatim: an opaque `store`
|
|
1166
1174
|
* verb. Throws if `overlay` cannot be serialized or nests too deep.
|
|
1167
1175
|
* @param {string} card_kind
|
|
1168
1176
|
* @param {any} overlay
|
|
@@ -1186,7 +1194,7 @@ export class Document {
|
|
|
1186
1194
|
* Serialize this document to a versioned storage DTO string.
|
|
1187
1195
|
*
|
|
1188
1196
|
* Prefer this over `toMarkdown` for persistence across restarts or crate
|
|
1189
|
-
* upgrades
|
|
1197
|
+
* upgrades: the wire format is frozen per `schema` version. Parse-time
|
|
1190
1198
|
* `warnings` are excluded from the DTO.
|
|
1191
1199
|
*
|
|
1192
1200
|
* Output is **byte-deterministic** within a `schema` version: equal
|
|
@@ -1232,7 +1240,7 @@ export class Document {
|
|
|
1232
1240
|
}
|
|
1233
1241
|
/**
|
|
1234
1242
|
* Like [`fromJson`](Document::from_json) but returns `undefined` instead
|
|
1235
|
-
* of throwing when `json` is not a valid storage DTO
|
|
1243
|
+
* of throwing when `json` is not a valid storage DTO: use to
|
|
1236
1244
|
* discriminate format without exceptions as control flow.
|
|
1237
1245
|
* `undefined` means "not a storage DTO"; `fromMarkdown` still throws on
|
|
1238
1246
|
* genuinely malformed markdown.
|
|
@@ -1286,7 +1294,7 @@ export class Quill {
|
|
|
1286
1294
|
}
|
|
1287
1295
|
/**
|
|
1288
1296
|
* The *declared* backend identifier (`config.backend`, e.g. `"typst"`).
|
|
1289
|
-
* Intent, not a resolved capability
|
|
1297
|
+
* Intent, not a resolved capability: capability (`supportedFormats` /
|
|
1290
1298
|
* `supportsCanvas`) is read from the engine.
|
|
1291
1299
|
* @returns {string}
|
|
1292
1300
|
*/
|
|
@@ -1326,7 +1334,7 @@ export class Quill {
|
|
|
1326
1334
|
}
|
|
1327
1335
|
}
|
|
1328
1336
|
/**
|
|
1329
|
-
* Build a quill from a file tree. Pure
|
|
1337
|
+
* Build a quill from a file tree. Pure: no backend, no engine; the
|
|
1330
1338
|
* declared backend is resolved later, at render time.
|
|
1331
1339
|
*
|
|
1332
1340
|
* Accepts either a `Map<string, Uint8Array>` or a plain object
|
|
@@ -1353,7 +1361,7 @@ export class Quill {
|
|
|
1353
1361
|
}
|
|
1354
1362
|
/**
|
|
1355
1363
|
* Identity snapshot of the `quill:` section of `Quill.yaml` plus any extra
|
|
1356
|
-
* `quill:` keys. Pure config
|
|
1364
|
+
* `quill:` keys. Pure config: the backend's output formats are a
|
|
1357
1365
|
* resolved-backend capability read from the engine
|
|
1358
1366
|
* (`Quillmark.supportedFormats`), not part of this snapshot.
|
|
1359
1367
|
* @returns {QuillMetadata}
|
|
@@ -1374,11 +1382,11 @@ export class Quill {
|
|
|
1374
1382
|
}
|
|
1375
1383
|
}
|
|
1376
1384
|
/**
|
|
1377
|
-
* The resolved-value view of `doc` against this quill's schema
|
|
1385
|
+
* The resolved-value view of `doc` against this quill's schema: for every
|
|
1378
1386
|
* declared field the value the render projection would use and the
|
|
1379
1387
|
* `FieldSource` rung it came from (`"authored" | "default" | "zero"`), in
|
|
1380
1388
|
* one call. The card body is a `body` sibling on its card (row `name`
|
|
1381
|
-
* `"body"`), never a row in `fields
|
|
1389
|
+
* `"body"`), never a row in `fields`: `null` when the kind enables no body.
|
|
1382
1390
|
*
|
|
1383
1391
|
* Value and provenance only: completeness and errors stay `validate`'s
|
|
1384
1392
|
* (a consumer merges it with its own diagnostic producers regardless), and
|
|
@@ -1405,8 +1413,8 @@ export class Quill {
|
|
|
1405
1413
|
/**
|
|
1406
1414
|
* Document schema for the quill: the user-fillable fields plus their
|
|
1407
1415
|
* `ui` hints (title / group / compact / multiline). The single
|
|
1408
|
-
* field-metadata surface
|
|
1409
|
-
* alike. Key order in `fields`/`properties` is declaration order
|
|
1416
|
+
* field-metadata surface: drives form editors and LLM/MCP consumers
|
|
1417
|
+
* alike. Key order in `fields`/`properties` is declaration order: the
|
|
1410
1418
|
* ordering contract. Returns the `QuillSchema` shape.
|
|
1411
1419
|
* @returns {QuillSchema}
|
|
1412
1420
|
*/
|
|
@@ -1435,7 +1443,7 @@ export class Quill {
|
|
|
1435
1443
|
* Pass `document.seedOverlay(cardKind)` as `overlay` so a card added to a
|
|
1436
1444
|
* template-derived document inherits its curated starting values; omit it
|
|
1437
1445
|
* (or pass `undefined` / `null`) for the bare schema seed. `overlay` is a
|
|
1438
|
-
* plain object
|
|
1446
|
+
* plain object: this reads the document, it does not mutate it.
|
|
1439
1447
|
* @param {string} card_kind
|
|
1440
1448
|
* @param {Record<string, unknown> | undefined} overlay
|
|
1441
1449
|
* @returns {Card | undefined}
|
|
@@ -1458,7 +1466,7 @@ export class Quill {
|
|
|
1458
1466
|
}
|
|
1459
1467
|
}
|
|
1460
1468
|
/**
|
|
1461
|
-
* Seed a starter `Document` from the schema
|
|
1469
|
+
* Seed a starter `Document` from the schema, the main card plus one
|
|
1462
1470
|
* instance of each composable card kind, each committing its fields'
|
|
1463
1471
|
* `example:` values and leaving every other field absent (interpolated at
|
|
1464
1472
|
* render: `default:`, else type-empty zero). Illustration-first: a field
|
|
@@ -1471,7 +1479,7 @@ export class Quill {
|
|
|
1471
1479
|
return Document.__wrap(ret);
|
|
1472
1480
|
}
|
|
1473
1481
|
/**
|
|
1474
|
-
* Seed a starter main `Card` (carries `$quill`) from the schema
|
|
1482
|
+
* Seed a starter main `Card` (carries `$quill`) from the schema: the
|
|
1475
1483
|
* `$kind: main` card of [`seedDocument`](Self::seed_document) in
|
|
1476
1484
|
* isolation, committing each field's `example:` value. Returns the same
|
|
1477
1485
|
* `Card` shape as the `Document.main` getter.
|
|
@@ -1493,7 +1501,7 @@ export class Quill {
|
|
|
1493
1501
|
}
|
|
1494
1502
|
}
|
|
1495
1503
|
/**
|
|
1496
|
-
* Flatten this quill back into its canonical file tree
|
|
1504
|
+
* Flatten this quill back into its canonical file tree: the inverse of
|
|
1497
1505
|
* [`fromTree`](Self::from_tree). Round-trips: `Quill.fromTree(q.toTree())`
|
|
1498
1506
|
* reproduces an equivalent quill.
|
|
1499
1507
|
*
|
|
@@ -1513,8 +1521,8 @@ export class Quill {
|
|
|
1513
1521
|
* Validate `doc` against this quill's schema, returning every diagnostic
|
|
1514
1522
|
* (an empty array when the document is valid).
|
|
1515
1523
|
*
|
|
1516
|
-
* Forwards the canonical `validation::*` diagnostics
|
|
1517
|
-
* `path`, and `hint` the engine emits
|
|
1524
|
+
* Forwards the canonical `validation::*` diagnostics (same `code`,
|
|
1525
|
+
* `path`, and `hint` the engine emits) including the non-fatal
|
|
1518
1526
|
* `validation::must_fill` warning for each `!must_fill` marker left in
|
|
1519
1527
|
* the document. Field values, defaults, and order are not part of this
|
|
1520
1528
|
* surface: read them from the `Document` payload and `Quill.schema`
|
|
@@ -1542,7 +1550,7 @@ export class Quill {
|
|
|
1542
1550
|
if (Symbol.dispose) Quill.prototype[Symbol.dispose] = Quill.prototype.free;
|
|
1543
1551
|
|
|
1544
1552
|
/**
|
|
1545
|
-
* Export a canonical `Content` content to its markdown projection
|
|
1553
|
+
* Export a canonical `Content` content to its markdown projection: the pure
|
|
1546
1554
|
* on-demand codec behind `exportMarkdown(card.body)`. Throws if `rt` is not a
|
|
1547
1555
|
* canonical content.
|
|
1548
1556
|
* @param {Content} rt
|
|
@@ -1575,7 +1583,7 @@ export function exportMarkdown(rt) {
|
|
|
1575
1583
|
|
|
1576
1584
|
/**
|
|
1577
1585
|
* Serialize structured [`DocPathSeg`] segments back to the canonical path
|
|
1578
|
-
* string
|
|
1586
|
+
* string: the inverse of `parseDocPath`, for a consumer that builds a path
|
|
1579
1587
|
* rather than reads one. Throws on a segment array the deserializer rejects,
|
|
1580
1588
|
* and on an empty segment array (symmetric with `parseDocPath("")`, which
|
|
1581
1589
|
* throws "empty path").
|
|
@@ -1608,7 +1616,7 @@ export function formatDocPath(segs) {
|
|
|
1608
1616
|
}
|
|
1609
1617
|
|
|
1610
1618
|
/**
|
|
1611
|
-
* Import a markdown string to a canonical `Content` content
|
|
1619
|
+
* Import a markdown string to a canonical `Content` content: the pure,
|
|
1612
1620
|
* document-free codec. Pair with `install(addr, importMarkdown(md))` to spell
|
|
1613
1621
|
* the cold (anchor-losing) write at the call site; prefer `revise` for edit
|
|
1614
1622
|
* semantics. Throws on an over-nested input.
|
|
@@ -1641,8 +1649,8 @@ export function init() {
|
|
|
1641
1649
|
}
|
|
1642
1650
|
|
|
1643
1651
|
/**
|
|
1644
|
-
* Map a base content position
|
|
1645
|
-
* offset
|
|
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
|
|
1646
1654
|
* codec an editor bridge composes to hold a caret stable across a `revise`.
|
|
1647
1655
|
* `assoc` decides the side of a same-position insertion (`"after"` moves past
|
|
1648
1656
|
* it). Throws on a malformed `delta`.
|
|
@@ -1670,7 +1678,7 @@ export function mapPos(delta, pos, assoc) {
|
|
|
1670
1678
|
/**
|
|
1671
1679
|
* Parse a canonical document-model `Diagnostic.path`
|
|
1672
1680
|
* (`cards.<kind>[<i>].<field>`, `main.body`, `recipients[0].name`) into its
|
|
1673
|
-
* structured [`DocPathSeg`] segments
|
|
1681
|
+
* structured [`DocPathSeg`] segments: the exported inverse of the engine's
|
|
1674
1682
|
* one path serializer, so a consumer routes on segments instead of regexing
|
|
1675
1683
|
* the string. Throws on a malformed path.
|
|
1676
1684
|
* @param {string} path
|
|
@@ -1695,7 +1703,7 @@ export function parseDocPath(path) {
|
|
|
1695
1703
|
}
|
|
1696
1704
|
|
|
1697
1705
|
/**
|
|
1698
|
-
* Rebase `markdown` onto a `base` content
|
|
1706
|
+
* Rebase `markdown` onto a `base` content, the pure, document-free twin of
|
|
1699
1707
|
* `revise`: cold-import + `diff_import`, returning the new `content` and the
|
|
1700
1708
|
* text `delta` (its offsets USV indices into `Content.text`, surviving anchors
|
|
1701
1709
|
* rebased). Use it to compute a revise without a document in hand; `revise(addr,
|
|
@@ -1737,13 +1745,6 @@ export function __wbg_String_8564e559799eccda(arg0, arg1) {
|
|
|
1737
1745
|
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
|
|
1738
1746
|
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
|
|
1739
1747
|
}
|
|
1740
|
-
export function __wbg_String_b51de6b05a10845b(arg0, arg1) {
|
|
1741
|
-
const ret = String(getObject(arg1));
|
|
1742
|
-
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);
|
|
1743
|
-
const len1 = WASM_VECTOR_LEN;
|
|
1744
|
-
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
|
|
1745
|
-
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
|
|
1746
|
-
}
|
|
1747
1748
|
export function __wbg___wbindgen_bigint_get_as_i64_3d3aba5d616c6a51(arg0, arg1) {
|
|
1748
1749
|
const v = getObject(arg1);
|
|
1749
1750
|
const ret = typeof(v) === 'bigint' ? v : undefined;
|
|
@@ -1847,9 +1848,6 @@ export function __wbg_from_0dbf29f09e7fb200(arg0) {
|
|
|
1847
1848
|
const ret = Array.from(getObject(arg0));
|
|
1848
1849
|
return addHeapObject(ret);
|
|
1849
1850
|
}
|
|
1850
|
-
export function __wbg_getRandomValues_3f44b700395062e5() { return handleError(function (arg0, arg1) {
|
|
1851
|
-
globalThis.crypto.getRandomValues(getArrayU8FromWasm0(arg0, arg1));
|
|
1852
|
-
}, arguments); }
|
|
1853
1851
|
export function __wbg_get_1affdbdd5573b16a() { return handleError(function (arg0, arg1) {
|
|
1854
1852
|
const ret = Reflect.get(getObject(arg0), getObject(arg1));
|
|
1855
1853
|
return addHeapObject(ret);
|
|
@@ -1866,10 +1864,6 @@ export function __wbg_get_with_ref_key_6412cf3094599694(arg0, arg1) {
|
|
|
1866
1864
|
const ret = getObject(arg0)[getObject(arg1)];
|
|
1867
1865
|
return addHeapObject(ret);
|
|
1868
1866
|
}
|
|
1869
|
-
export function __wbg_get_with_ref_key_f64427178466f623(arg0, arg1) {
|
|
1870
|
-
const ret = getObject(arg0)[getObject(arg1)];
|
|
1871
|
-
return addHeapObject(ret);
|
|
1872
|
-
}
|
|
1873
1867
|
export function __wbg_instanceof_ArrayBuffer_7c8433c6ed14ffe3(arg0) {
|
|
1874
1868
|
let result;
|
|
1875
1869
|
try {
|
|
@@ -1998,6 +1992,14 @@ export function __wbg_value_ee3a06f4579184fa(arg0) {
|
|
|
1998
1992
|
const ret = getObject(arg0).value;
|
|
1999
1993
|
return addHeapObject(ret);
|
|
2000
1994
|
}
|
|
1995
|
+
export function __wbg_values_1e6d547ce555ce44(arg0) {
|
|
1996
|
+
const ret = getObject(arg0).values();
|
|
1997
|
+
return addHeapObject(ret);
|
|
1998
|
+
}
|
|
1999
|
+
export function __wbg_values_301a77363cf6c773(arg0) {
|
|
2000
|
+
const ret = Object.values(getObject(arg0));
|
|
2001
|
+
return addHeapObject(ret);
|
|
2002
|
+
}
|
|
2001
2003
|
export function __wbindgen_cast_0000000000000001(arg0) {
|
|
2002
2004
|
// Cast intrinsic for `F64 -> Externref`.
|
|
2003
2005
|
const ret = arg0;
|
package/core/wasm_bg.wasm
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quillmark/wasm",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.99.0",
|
|
4
4
|
"description": "WebAssembly bindings for Quillmark, a schema-driven document engine",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"license": "
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
7
|
"engines": {
|
|
8
8
|
"node": ">=22"
|
|
9
9
|
},
|