/** * How a vocabulary is arranged, which decides how a tool may walk it. * * - `keyed-by-kind` — one entry per widget kind. A tool asking "what does this kind declare" indexes * straight in; one enumerating the whole contract iterates the seventeen. * - `names` — a flat dictionary from a role to the class name that carries it. The keys are a * vocabulary of *roles*, not of instances, so a consumer reads a name and never enumerates. * - `table` — keys that carry structure rather than a single name: a list of states, a nested shape. * - `list` — an array of names belonging to no key at all. * - `data` — a collection the package publishes that is **not** a vocabulary: translations, colour * presets, icon paths. It is in the index for the same reason the others are — an index with a gap * is one a tool trusts and should not — and it is marked so a tool sweeping *the contract* skips it * without keeping a list of names to ignore, which is the hand-kept exception this index removes. */ export type MdyVocabularyShape = "keyed-by-kind" | "names" | "table" | "list" | "data"; export interface MdyVocabulary { /** The exported name, so a report can say where a finding came from. */ readonly name: string; readonly shape: MdyVocabularyShape; /** The vocabulary itself, so a consumer reads it here rather than importing ten symbols. */ readonly value: unknown; /** What it is for, in one line, for a tool that lists them to a person. */ readonly describes: string; /** * The subpath it is published from. * * Recorded because it has already cost two mistakes: a vocabulary reachable only from * `./vocabulary` reads as unpublished to anybody grepping the barrel, and three of the entries * below were found that way — by a check, after two of us had counted them by hand and agreed on * the wrong number. */ readonly door: "." | "./vocabulary"; } export declare const MDY_CONTRACT_VOCABULARIES: readonly MdyVocabulary[];