@omgbase/core 0.11.1 → 0.19.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/README.md +1 -1
- package/dist/src/core/ids.d.ts +4 -0
- package/dist/src/core/ids.js +17 -0
- package/dist/src/core/ingest.d.ts +39 -3
- package/dist/src/core/ingest.js +233 -202
- package/dist/src/core/store/schema.d.ts +3 -2
- package/dist/src/core/store/schema.js +28 -3
- package/dist/src/core/store/size.d.ts +76 -0
- package/dist/src/core/store/size.js +223 -0
- package/dist/src/core/store/store.d.ts +9 -0
- package/dist/src/core/store/store.js +11 -0
- package/dist/src/graph/history.js +15 -12
- package/dist/src/index.d.ts +12 -5
- package/dist/src/index.js +18 -7
- package/dist/src/mcp/arguments.d.ts +9 -2
- package/dist/src/mcp/arguments.js +15 -2
- package/dist/src/mcp/errors.d.ts +1 -1
- package/dist/src/mcp/errors.js +3 -0
- package/dist/src/mcp/reference.d.ts +1 -1
- package/dist/src/mcp/reference.js +27 -6
- package/dist/src/mcp/server.d.ts +56 -1
- package/dist/src/mcp/server.js +365 -203
- package/dist/src/mutate/apply.d.ts +93 -12
- package/dist/src/mutate/apply.js +203 -113
- package/dist/src/mutate/canonical.d.ts +27 -0
- package/dist/src/mutate/canonical.js +138 -0
- package/dist/src/mutate/commit.d.ts +150 -0
- package/dist/src/mutate/commit.js +349 -0
- package/dist/src/mutate/doc-store.d.ts +3 -3
- package/dist/src/mutate/doc-store.js +21 -6
- package/dist/src/mutate/docs.d.ts +42 -87
- package/dist/src/mutate/docs.js +50 -204
- package/dist/src/mutate/effects.d.ts +363 -0
- package/dist/src/mutate/effects.js +1161 -0
- package/dist/src/mutate/materialize.d.ts +49 -0
- package/dist/src/mutate/materialize.js +174 -0
- package/dist/src/mutate/opset.d.ts +27 -2
- package/dist/src/mutate/opset.js +12 -5
- package/dist/src/mutate/plan-update.d.ts +1 -46
- package/dist/src/mutate/plan-update.js +19 -67
- package/dist/src/mutate/plan.d.ts +210 -0
- package/dist/src/mutate/plan.js +512 -0
- package/dist/src/mutate/select.d.ts +89 -0
- package/dist/src/mutate/select.js +879 -0
- package/dist/src/mutate/sugar.d.ts +135 -0
- package/dist/src/mutate/sugar.js +167 -0
- package/dist/src/mutate/tree.d.ts +4 -2
- package/dist/src/oqx-js/planner.js +4 -0
- package/dist/src/oqx-js/run.d.ts +28 -1
- package/dist/src/oqx-js/run.js +85 -22
- package/dist/src/spec-versions.d.ts +6 -6
- package/dist/src/spec-versions.js +5 -5
- package/dist/src/surface-paths.d.ts +17 -26
- package/dist/src/surface-paths.js +27 -22
- package/dist/src/sync/checkpoint.d.ts +5 -2
- package/dist/src/sync/checkpoint.js +10 -6
- package/dist/src/sync/freshness.d.ts +10 -7
- package/dist/src/sync/freshness.js +15 -17
- package/dist/src/sync/observe.d.ts +4 -1
- package/dist/src/sync/observe.js +56 -5
- package/dist/src/sync/recovery.d.ts +4 -0
- package/dist/src/sync/recovery.js +4 -1
- package/dist/src/sync/stat-cache.d.ts +7 -0
- package/dist/src/sync/stat-cache.js +22 -0
- package/dist/src/sync/tombstone.js +23 -19
- package/dist/src/sync/watcher.d.ts +2 -0
- package/dist/src/sync/watcher.js +4 -1
- package/dist/src/sync/writer-lock.d.ts +15 -0
- package/dist/src/sync/writer-lock.js +104 -17
- package/dist/src/version.d.ts +7 -2
- package/dist/src/version.js +5 -2
- package/package.json +2 -2
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
import type { Store } from "../core/store/store.js";
|
|
2
|
+
import { type IdMinter } from "../core/ids.js";
|
|
3
|
+
import { type InboundLink } from "../graph/inbound-links.js";
|
|
4
|
+
import type { ChangesetPlanner, Op } from "./apply.js";
|
|
5
|
+
import { type DocBase } from "./commit.js";
|
|
6
|
+
import type { DocStore } from "./doc-store.js";
|
|
7
|
+
import { type LinkRepairCount, type RetargetHit } from "./macros.js";
|
|
8
|
+
import type { At, Expect } from "./ops.js";
|
|
9
|
+
import type { IdentityPreview } from "./opset.js";
|
|
10
|
+
import { MutationError } from "./tree.js";
|
|
11
|
+
/** What an effect addresses. `section` is a derived range (ADR-005), never a stored id.
|
|
12
|
+
* `symbol` (3.2, §11.8 "Sugar"): a bare `"$new.n"` target whose kind — document or block — the
|
|
13
|
+
* symbol table decides when the effect is resolved; it never reaches a resolved effect. */
|
|
14
|
+
export type EffectTarget = {
|
|
15
|
+
kind: "document";
|
|
16
|
+
id?: string;
|
|
17
|
+
path?: string;
|
|
18
|
+
} | {
|
|
19
|
+
kind: "block";
|
|
20
|
+
id: string;
|
|
21
|
+
} | {
|
|
22
|
+
kind: "node";
|
|
23
|
+
id: string;
|
|
24
|
+
} | {
|
|
25
|
+
kind: "section";
|
|
26
|
+
heading_id: string;
|
|
27
|
+
} | {
|
|
28
|
+
kind: "symbol";
|
|
29
|
+
id: string;
|
|
30
|
+
};
|
|
31
|
+
export type EffectAt = At;
|
|
32
|
+
/** Guards: the kernel's two CAS fields plus the document's `current_rev` at plan time. */
|
|
33
|
+
export interface EffectExpect {
|
|
34
|
+
content_hash?: string;
|
|
35
|
+
parent_children_hash?: string;
|
|
36
|
+
revision?: string;
|
|
37
|
+
}
|
|
38
|
+
/** Per-block guards for `remove`/`merge` (the kernel's `expect[id]`), keyed by block id. */
|
|
39
|
+
export type EffectExpectMap = Record<string, Expect>;
|
|
40
|
+
export type Effect = {
|
|
41
|
+
op: "create";
|
|
42
|
+
path: string;
|
|
43
|
+
markdown: string;
|
|
44
|
+
frontmatter?: Record<string, unknown>;
|
|
45
|
+
} | {
|
|
46
|
+
op: "insert";
|
|
47
|
+
into: EffectTarget;
|
|
48
|
+
at?: EffectAt;
|
|
49
|
+
markdown: string;
|
|
50
|
+
expect?: EffectExpect;
|
|
51
|
+
} | {
|
|
52
|
+
op: "set";
|
|
53
|
+
target: EffectTarget;
|
|
54
|
+
field: string;
|
|
55
|
+
value: unknown;
|
|
56
|
+
expect?: EffectExpect;
|
|
57
|
+
} | {
|
|
58
|
+
op: "unset";
|
|
59
|
+
target: EffectTarget;
|
|
60
|
+
field: string;
|
|
61
|
+
expect?: EffectExpect;
|
|
62
|
+
} | {
|
|
63
|
+
op: "move";
|
|
64
|
+
target: EffectTarget;
|
|
65
|
+
to: string;
|
|
66
|
+
retarget_inbound?: boolean;
|
|
67
|
+
} | {
|
|
68
|
+
op: "move";
|
|
69
|
+
targets: EffectTarget[];
|
|
70
|
+
into: EffectTarget;
|
|
71
|
+
at?: EffectAt;
|
|
72
|
+
expect?: EffectExpect;
|
|
73
|
+
} | {
|
|
74
|
+
op: "remove";
|
|
75
|
+
target: EffectTarget;
|
|
76
|
+
} | {
|
|
77
|
+
op: "remove";
|
|
78
|
+
targets: EffectTarget[];
|
|
79
|
+
expect?: EffectExpectMap;
|
|
80
|
+
} | {
|
|
81
|
+
op: "split";
|
|
82
|
+
target: EffectTarget;
|
|
83
|
+
at: number[];
|
|
84
|
+
expect?: EffectExpect;
|
|
85
|
+
} | {
|
|
86
|
+
op: "merge";
|
|
87
|
+
targets: EffectTarget[];
|
|
88
|
+
separator?: string;
|
|
89
|
+
expect?: EffectExpectMap;
|
|
90
|
+
} | {
|
|
91
|
+
op: "retarget";
|
|
92
|
+
repairs: {
|
|
93
|
+
from: string;
|
|
94
|
+
to: string;
|
|
95
|
+
}[];
|
|
96
|
+
path_glob?: string;
|
|
97
|
+
};
|
|
98
|
+
export declare const EFFECT_OPS: readonly ["create", "insert", "set", "unset", "move", "remove", "split", "merge", "retarget"];
|
|
99
|
+
/** `$new.<n>`: an identity an earlier effect of the same request creates (§11.1). */
|
|
100
|
+
export declare const NEW_SYMBOL_RE: RegExp;
|
|
101
|
+
export declare function isNewSymbol(s: string): boolean;
|
|
102
|
+
/** A target with its document resolved to `{ id, path }` (path in the storage form; a `$new.n` document keeps its symbol). */
|
|
103
|
+
export type ResolvedTarget = {
|
|
104
|
+
kind: "document";
|
|
105
|
+
id: string;
|
|
106
|
+
path: string;
|
|
107
|
+
} | {
|
|
108
|
+
kind: "block";
|
|
109
|
+
id: string;
|
|
110
|
+
} | {
|
|
111
|
+
kind: "node";
|
|
112
|
+
id: string;
|
|
113
|
+
} | {
|
|
114
|
+
kind: "section";
|
|
115
|
+
heading_id: string;
|
|
116
|
+
};
|
|
117
|
+
export type ResolvedEffect = {
|
|
118
|
+
op: "create";
|
|
119
|
+
path: string;
|
|
120
|
+
markdown: string;
|
|
121
|
+
frontmatter?: Record<string, unknown>;
|
|
122
|
+
} | {
|
|
123
|
+
op: "insert";
|
|
124
|
+
into: ResolvedTarget;
|
|
125
|
+
at: EffectAt;
|
|
126
|
+
markdown: string;
|
|
127
|
+
expect?: EffectExpect;
|
|
128
|
+
} | {
|
|
129
|
+
op: "set";
|
|
130
|
+
target: ResolvedTarget;
|
|
131
|
+
field: string;
|
|
132
|
+
value: unknown;
|
|
133
|
+
expect?: EffectExpect;
|
|
134
|
+
} | {
|
|
135
|
+
op: "unset";
|
|
136
|
+
target: ResolvedTarget;
|
|
137
|
+
field: string;
|
|
138
|
+
expect?: EffectExpect;
|
|
139
|
+
} | {
|
|
140
|
+
op: "move";
|
|
141
|
+
target: ResolvedTarget;
|
|
142
|
+
to: string;
|
|
143
|
+
retarget_inbound: boolean;
|
|
144
|
+
} | {
|
|
145
|
+
op: "move";
|
|
146
|
+
targets: ResolvedTarget[];
|
|
147
|
+
into: ResolvedTarget;
|
|
148
|
+
at: EffectAt;
|
|
149
|
+
expect?: EffectExpect;
|
|
150
|
+
} | {
|
|
151
|
+
op: "remove";
|
|
152
|
+
target: ResolvedTarget;
|
|
153
|
+
} | {
|
|
154
|
+
op: "remove";
|
|
155
|
+
targets: ResolvedTarget[];
|
|
156
|
+
expect?: EffectExpectMap;
|
|
157
|
+
} | {
|
|
158
|
+
op: "split";
|
|
159
|
+
target: ResolvedTarget;
|
|
160
|
+
at: number[];
|
|
161
|
+
expect?: EffectExpect;
|
|
162
|
+
} | {
|
|
163
|
+
op: "merge";
|
|
164
|
+
targets: ResolvedTarget[];
|
|
165
|
+
separator: string;
|
|
166
|
+
expect?: EffectExpectMap;
|
|
167
|
+
} | {
|
|
168
|
+
op: "retarget";
|
|
169
|
+
repairs: {
|
|
170
|
+
from: string;
|
|
171
|
+
to: string;
|
|
172
|
+
}[];
|
|
173
|
+
path_glob?: string;
|
|
174
|
+
};
|
|
175
|
+
/** The argument-shape error of the surface, thrown from the planner: `filter_invalid { reason, hint: "arguments" }`. */
|
|
176
|
+
export declare function effectInvalid(message: string): MutationError;
|
|
177
|
+
/** The `-> ` leader (3.2, §11.8 "Sugar"): a string beginning exactly so is an OQX expression, the rest of the string. */
|
|
178
|
+
export declare const EXPRESSION_LEADER = "-> ";
|
|
179
|
+
/** A path-looking string: contains `/` or ends `.md` (the bare document target of §11.8 "Sugar"). */
|
|
180
|
+
export declare function looksLikePath(s: string): boolean;
|
|
181
|
+
/** A bare id of the three target kinds (§11.8 "Sugar"). */
|
|
182
|
+
export declare function isTargetId(s: string): boolean;
|
|
183
|
+
/**
|
|
184
|
+
* A bare string where a target object is expected (3.2, §11.8 "Sugar"): a
|
|
185
|
+
* path-looking string → `{ kind: "document", path }`; a `b_`/`d_`/`n_` id →
|
|
186
|
+
* that kind; `$new.n` → `{ kind: "symbol", id }` (its kind is the symbol
|
|
187
|
+
* table's at resolution); a `#` locator → `filter_invalid` with a `fix`;
|
|
188
|
+
* anything else is no target. A `-> ` leader never reaches here from the
|
|
189
|
+
* planner (`select.ts` desugars it first); as a library input it is refused
|
|
190
|
+
* the same way, naming the planner.
|
|
191
|
+
*/
|
|
192
|
+
export declare function bareTarget(ref: string, here: string): EffectTarget;
|
|
193
|
+
export declare function validateTarget(v: unknown, here: string, kinds: readonly EffectTarget["kind"][]): EffectTarget;
|
|
194
|
+
/** The shape check of one effect (§11.1). `i` names it in the message (`effects[i]`). */
|
|
195
|
+
export declare function validateEffect(v: unknown, i: number): Effect;
|
|
196
|
+
/** The whole list; a non-array or an empty list is a shape error too. */
|
|
197
|
+
export declare function validateEffects(v: unknown): Effect[];
|
|
198
|
+
export declare const FRONTMATTER_FIELD: RegExp;
|
|
199
|
+
/** The focus a conflict names: `{ kind, target, field? }`. */
|
|
200
|
+
export interface Focus {
|
|
201
|
+
kind: "scalar" | "positional" | "identity";
|
|
202
|
+
target: {
|
|
203
|
+
kind: "document" | "block" | "node" | "path";
|
|
204
|
+
id?: string;
|
|
205
|
+
path?: string;
|
|
206
|
+
};
|
|
207
|
+
field?: string;
|
|
208
|
+
}
|
|
209
|
+
export declare function conflictingEffects(effects: [number, number], focus: Focus): MutationError;
|
|
210
|
+
/**
|
|
211
|
+
* What one effect addresses and retires, for the conflict rules. `scalar` is a
|
|
212
|
+
* value write to one key; `docs`/`blocks`/`paths` are everything the effect
|
|
213
|
+
* addresses (an earlier retirement of any of them is a conflict); `retires*`
|
|
214
|
+
* is what later effects may no longer address.
|
|
215
|
+
*/
|
|
216
|
+
export interface FocusInfo {
|
|
217
|
+
scalar?: {
|
|
218
|
+
key: string;
|
|
219
|
+
target: Focus["target"];
|
|
220
|
+
field: string;
|
|
221
|
+
op: "set" | "unset";
|
|
222
|
+
value: unknown;
|
|
223
|
+
};
|
|
224
|
+
/** every scalar (block, markdown) focus of a retarget */
|
|
225
|
+
scalars?: {
|
|
226
|
+
key: string;
|
|
227
|
+
target: Focus["target"];
|
|
228
|
+
field: string;
|
|
229
|
+
}[];
|
|
230
|
+
docs: string[];
|
|
231
|
+
blocks: string[];
|
|
232
|
+
paths: string[];
|
|
233
|
+
retiresDocs?: string[];
|
|
234
|
+
retiresBlocks?: string[];
|
|
235
|
+
retiresPaths?: string[];
|
|
236
|
+
/** `set document.content`: the whole document is rewritten */
|
|
237
|
+
wholeDoc?: string;
|
|
238
|
+
}
|
|
239
|
+
/** The focus bookkeeping over an ordered effect list (§11.3). */
|
|
240
|
+
export declare class ConflictTracker {
|
|
241
|
+
private readonly canonical;
|
|
242
|
+
private readonly scalar;
|
|
243
|
+
private readonly retiredDocs;
|
|
244
|
+
private readonly retiredBlocks;
|
|
245
|
+
private readonly retiredPaths;
|
|
246
|
+
private readonly touchedDocs;
|
|
247
|
+
readonly diagnostics: string[];
|
|
248
|
+
constructor(canonical: (v: unknown) => string);
|
|
249
|
+
/** Check effect `i`; returns `false` when it is an identical duplicate to drop. Throws `conflicting_effects`. */
|
|
250
|
+
check(i: number, info: FocusInfo, describe: string): boolean;
|
|
251
|
+
}
|
|
252
|
+
/** `$new.n` symbols in allocation order (§11.4 `new_ids`). */
|
|
253
|
+
export declare class SymbolTable {
|
|
254
|
+
readonly entries: {
|
|
255
|
+
symbol: string;
|
|
256
|
+
kind: "block" | "document";
|
|
257
|
+
}[];
|
|
258
|
+
alloc(kind: "block" | "document"): string;
|
|
259
|
+
kindOf(symbol: string): "block" | "document" | undefined;
|
|
260
|
+
}
|
|
261
|
+
/** A `create` as the plan carries it (§11.4 `opset.creates[]`, 3.0): its document symbol, path, the
|
|
262
|
+
* composed bytes, and the index of the first kernel op planned after it (`ops.length` when none) —
|
|
263
|
+
* where `execute` adopts it again so the replay mints its block ids in the plan's order. */
|
|
264
|
+
export interface CreateEntry {
|
|
265
|
+
symbol: string;
|
|
266
|
+
path: string;
|
|
267
|
+
source: string;
|
|
268
|
+
before_op: number;
|
|
269
|
+
}
|
|
270
|
+
/** `preview.retarget[]` (§11.4, 3.0): what a `retarget` effect found — the `links_repair` hits and pair counts. */
|
|
271
|
+
export interface RetargetPreview {
|
|
272
|
+
effect_index: number;
|
|
273
|
+
hits: RetargetHit[];
|
|
274
|
+
pairs: LinkRepairCount[];
|
|
275
|
+
}
|
|
276
|
+
export interface MoveDraft {
|
|
277
|
+
id: string;
|
|
278
|
+
from: string;
|
|
279
|
+
to: string;
|
|
280
|
+
currentRev: string | null;
|
|
281
|
+
/** read at plan time for the move's own preview; `execute` re-reads */
|
|
282
|
+
inbound: InboundLink[];
|
|
283
|
+
retargeted: {
|
|
284
|
+
blocks: string[];
|
|
285
|
+
docs: string[];
|
|
286
|
+
} | null;
|
|
287
|
+
}
|
|
288
|
+
export interface TombstoneDraft {
|
|
289
|
+
id: string;
|
|
290
|
+
path: string;
|
|
291
|
+
currentRev: string | null;
|
|
292
|
+
}
|
|
293
|
+
export interface LoweringContext {
|
|
294
|
+
store: Store;
|
|
295
|
+
repoId: string;
|
|
296
|
+
docStore: DocStore;
|
|
297
|
+
planner: ChangesetPlanner;
|
|
298
|
+
symbols: SymbolTable;
|
|
299
|
+
/** `$new.n` (a block an op minted) → the kernel placeholder `$k.ids[j]` that names it */
|
|
300
|
+
blockSymbols: Map<string, string>;
|
|
301
|
+
/** the created documents, in effect order (`opset.creates`) */
|
|
302
|
+
creates: CreateEntry[];
|
|
303
|
+
/** `preview.identity`: per `set content` document, the whole-document planner's identity consequences */
|
|
304
|
+
identity: Map<string, IdentityPreview>;
|
|
305
|
+
/** `preview.retarget`: per `retarget` effect, its hits and pair counts */
|
|
306
|
+
retargets: RetargetPreview[];
|
|
307
|
+
moves: MoveDraft[];
|
|
308
|
+
tombstones: TombstoneDraft[];
|
|
309
|
+
/** doc id → the file head (`set_frontmatter[].raw`), last write per document */
|
|
310
|
+
heads: Map<string, string>;
|
|
311
|
+
/** the kernel ops pushed, in order (`opset.ops`) */
|
|
312
|
+
ops: Op[];
|
|
313
|
+
/** `preconditions.blocks`: every pinned content hash, in first-pin order */
|
|
314
|
+
pins: Map<string, string>;
|
|
315
|
+
/** `preconditions.parents` */
|
|
316
|
+
parents: {
|
|
317
|
+
doc: string;
|
|
318
|
+
parent: string | null;
|
|
319
|
+
parent_children_hash: string;
|
|
320
|
+
}[];
|
|
321
|
+
/** `preconditions.absent_paths` */
|
|
322
|
+
absentPaths: string[];
|
|
323
|
+
/** docs addressed by a move/remove document effect, in effect order (`preconditions.docs` after the loaded ones) */
|
|
324
|
+
docBases: Map<string, DocBase>;
|
|
325
|
+
tracker: ConflictTracker;
|
|
326
|
+
canonical: (v: unknown) => string;
|
|
327
|
+
/** the resolved effects kept (dropped duplicates excluded) */
|
|
328
|
+
resolved: ResolvedEffect[];
|
|
329
|
+
/** `preview.summary` (3.3, §11.9): one line in words per resolved effect, in order */
|
|
330
|
+
summary: string[];
|
|
331
|
+
}
|
|
332
|
+
/** Resolve a document target: an existing document's `{ id, path }`, or a `$new.n` document this plan creates. */
|
|
333
|
+
export declare function resolveDocumentTarget(ctx: LoweringContext, t: Extract<EffectTarget, {
|
|
334
|
+
kind: "document";
|
|
335
|
+
}>): Extract<ResolvedTarget, {
|
|
336
|
+
kind: "document";
|
|
337
|
+
}>;
|
|
338
|
+
/** An existing document's `{ id, path }` for a literal document target (`doc_missing`; `filter_invalid` when `id` and `path` disagree). */
|
|
339
|
+
export declare function findDocumentTarget(store: Store, repoId: string, t: Extract<EffectTarget, {
|
|
340
|
+
kind: "document";
|
|
341
|
+
}>): Extract<ResolvedTarget, {
|
|
342
|
+
kind: "document";
|
|
343
|
+
}>;
|
|
344
|
+
/** `1 block` / `2 blocks` (an `s` on every noun of the table). */
|
|
345
|
+
export declare function plural(n: number, noun: string): string;
|
|
346
|
+
/** Resolve one validated effect's targets (§11.4): documents to `{ id, path }`, defaults made explicit; `i` names the effect in messages. */
|
|
347
|
+
export declare function resolveEffect(ctx: LoweringContext, e: Effect, i?: number): ResolvedEffect;
|
|
348
|
+
/** Shift a kernel op's `$n.ids[i]` placeholders by `offset` (an opset planned alone, spliced into a longer op list). */
|
|
349
|
+
export declare function shiftPlaceholders(op: Op, offset: number): Op;
|
|
350
|
+
/**
|
|
351
|
+
* Lower effect `i` (already validated): resolve its targets, classify its
|
|
352
|
+
* focus (throwing `conflicting_effects`, or dropping an identical duplicate
|
|
353
|
+
* with a diagnostic), then push its kernel ops / document drafts. Returns the
|
|
354
|
+
* resolved effect, or null when it was dropped.
|
|
355
|
+
*/
|
|
356
|
+
export declare function lowerEffect(ctx: LoweringContext, i: number, effect: Effect): ResolvedEffect | null;
|
|
357
|
+
/**
|
|
358
|
+
* The symbolic minter (§11.4): `b` and `d` mints yield `$new.0, $new.1, …`
|
|
359
|
+
* from `symbols`, so a plan consumes no real id and the kernel (id-agnostic
|
|
360
|
+
* for rendering, ADR-002) renders exact bytes. Planning mints nothing else —
|
|
361
|
+
* `c`/`r`/`x`/`e` are minted inside the commit transaction.
|
|
362
|
+
*/
|
|
363
|
+
export declare function symbolicMinter(symbols: SymbolTable): IdMinter;
|