@wildwinter/toolkit 0.1.0 → 0.2.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/extensions/types.ts","../src/source.ts","../src/extensions/path.ts","../src/extensions/values.ts","../src/extensions/manifest.ts","../src/extensions/merge.ts"],"names":["JSON5","valueFits","stagesEitherSide","defaultFor","out","err","qualityDeclarationProblems"],"mappings":"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","file":"extensions.cjs","sourcesContent":["// ---------------------------------------------------------------------------\n// The manifest's shapes, and what each host is.\n//\n// A manifest is data a project keeps a copy of, so every shape here is read\n// from JSON as it came: the checks in manifest.ts say what is wrong with one,\n// and nothing else in this package assumes a manifest is sound without them.\n// ---------------------------------------------------------------------------\n\n/** The manifest schema tag this build reads and writes. */\nexport const MANIFEST_SCHEMA = \"wildwinter/extension@0\";\n\n/** What a manifest file is called: `<id>.extension.json`. */\nexport const MANIFEST_FILE_SUFFIX = \".extension.json\";\n\n/** The hosts an extension can target. */\nexport type HostName = \"patter\" | \"storylets\";\n\nexport interface HostSpec {\n /** The node kinds a target may name. */\n readonly kinds: readonly string[];\n /** The node kinds a `reference` may point at. */\n readonly references: readonly string[];\n /** The node kinds with host fields of their own, which a claim may present. */\n readonly claimable: readonly string[];\n}\n\n/** Each host's node kinds, references and claimable kinds. */\nexport const HOSTS: Readonly<Record<HostName, HostSpec>> = {\n patter: {\n kinds: [\"scene\", \"block\", \"snippet\", \"line\", \"text\", \"gameEvent\", \"option\", \"project\"],\n references: [\"cast\", \"scene\", \"block\", \"snippet\", \"line\"],\n claimable: [\"scene\", \"block\", \"snippet\", \"line\", \"text\", \"gameEvent\", \"option\"],\n },\n storylets: {\n kinds: [\"box\", \"tagGroup\", \"tag\", \"deck\", \"card\", \"outcome\", \"handTemplate\", \"hand\", \"project\"],\n references: [\"box\", \"deck\", \"card\", \"outcome\", \"tag\"],\n claimable: [\"card\", \"outcome\"],\n },\n};\n\n/** The family's seven scalar types, spelled as the family spells them. */\nexport const SCALAR_TYPES = [\"text\", \"multiline\", \"number\", \"boolean\", \"enum\", \"flags\", \"quality\"] as const;\nexport type ScalarType = typeof SCALAR_TYPES[number];\n\n/** Every type a value can take. */\nexport const VALUE_TYPES = [...SCALAR_TYPES, \"reference\", \"record\", \"map\", \"list\"] as const;\nexport type ValueType = typeof VALUE_TYPES[number];\n\n/** A JSON value, as extension data holds it. */\nexport type JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue };\n\n/**\n * A value's type, with the constraints that belong to it. A target's fields\n * and a record's fields add a name and the editor's words (`FieldDecl`); the\n * `of` of a map or a list is a bare type.\n */\nexport interface TypeDecl {\n readonly type: string;\n /** An enum's values, or the flags a flags value may hold. */\n readonly values?: readonly string[];\n /** A quality's ladder. */\n readonly stages?: readonly string[];\n /** A quality's renames: every name a stage has had, to the stage it is now. */\n readonly renamedStages?: Readonly<Record<string, string>>;\n /** A reference's node kind. */\n readonly to?: string;\n /** A record's fields. */\n readonly fields?: readonly FieldDecl[];\n /** A map's key. */\n readonly key?: { readonly type: string; readonly to?: string };\n /** A map's or a list's value type. */\n readonly of?: TypeDecl;\n /** A list's id field: the text field of its records that keys each item. */\n readonly id?: string;\n /** A number's bounds. */\n readonly min?: number;\n readonly max?: number;\n /** One sentence per enum or flags value, or quality stage. Editor only. */\n readonly valueHelp?: Readonly<Record<string, string>>;\n /** Optional in source: the type's own default when absent (`defaultOf`). */\n readonly default?: unknown;\n}\n\n/** A named field: a target's, or a record's. */\nexport interface FieldDecl extends TypeDecl {\n readonly name: string;\n readonly label?: string;\n readonly help?: string;\n /** A node of this kind must set it. */\n readonly required?: boolean;\n /** A heading within the extension's group in the editor. */\n readonly group?: string;\n /** Stripped at compile: editor data, never in a bundle. A target's own fields only. */\n readonly editorOnly?: boolean;\n}\n\n/** A claim on a host field, named through one of the manifest's settings. */\nexport interface ClaimDecl extends TypeDecl {\n readonly setting: string;\n readonly label?: string;\n readonly help?: string;\n readonly required?: boolean;\n}\n\n/** What an extension declares for one node kind of one host. */\nexport interface TargetDecl {\n readonly fields?: readonly FieldDecl[];\n readonly claims?: readonly ClaimDecl[];\n}\n\n/** A project setting, naming a host field a claim presents. */\nexport interface SettingDecl {\n readonly name: string;\n readonly label?: string;\n readonly help?: string;\n /** The field name used when the project names none. */\n readonly default: string;\n}\n\nexport interface Manifest {\n readonly schema: string;\n readonly id: string;\n readonly name: string;\n readonly version: string;\n readonly docs?: string;\n readonly settings?: readonly SettingDecl[];\n readonly targets: Readonly<Partial<Record<HostName, Readonly<Record<string, TargetDecl>>>>>;\n}\n\n/** One thing wrong, with where it is. A host words it in its own report shape. */\nexport interface Problem {\n readonly severity: \"error\" | \"warning\";\n /** A stable name for the kind of problem, for tests and quick fixes. */\n readonly code: string;\n /** Where, relative to what was checked: `targets.storylets.card.fields[2].stages`. */\n readonly path: string;\n readonly message: string;\n /** The values a quick fix may offer (an enum's values, the stages either side). */\n readonly options?: readonly string[];\n}\n\n/** The format-neutral part of an extension data shard. */\nexport interface ExtensionData {\n readonly extension: string;\n /** By node kind, then node id, then field name. */\n readonly entries: Readonly<Record<string, Readonly<Record<string, Readonly<Record<string, unknown>>>>>>;\n readonly unresolved?: readonly UnresolvedEntry[];\n}\n\n/** How a three-way merge failed to agree on one value. */\nexport type ConflictKind =\n | \"both-changed\" // both sides changed the same value differently\n | \"delete-vs-edit\" // one side deleted it, the other edited it\n | \"added-both\" // both sides added it, with different content\n | \"structural\"; // a format's own post-merge check failed (a duplicate id)\n\n/** One clash, as the reserved `unresolved` key of a merged shard holds it. */\nexport interface UnresolvedEntry {\n readonly path: string;\n readonly kind: ConflictKind;\n readonly base?: unknown;\n readonly ours?: unknown;\n readonly theirs?: unknown;\n}\n","// ---------------------------------------------------------------------------\n// Reading authored source files.\n// ---------------------------------------------------------------------------\n\nimport JSON5 from \"json5\";\n\n/**\n * Parse JSON5 source text. A leading byte-order mark is tolerated, because\n * editors on Windows add one and JSON5 will not accept it. Throws on malformed\n * input.\n */\nexport function parseSource(text: string): unknown {\n const body = text.charCodeAt(0) === 0xfeff ? text.slice(1) : text;\n return JSON5.parse(body);\n}\n","// Where a problem is: dotted names, `[i]` for a list position, and `[\"...\"]`\n// for a key that is not an identifier, so a path reads the way the JSON does.\n\nconst IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\n\n/** `base` and then the key `key`. */\nexport const atKey = (base: string, key: string): string =>\n (IDENTIFIER.test(key) ? (base === \"\" ? key : `${base}.${key}`) : `${base}[${JSON.stringify(key)}]`);\n\n/** `base` and then list position `i`. */\nexport const atIndex = (base: string, i: number): string => `${base}[${i}]`;\n\nexport const isObject = (v: unknown): v is Record<string, unknown> =>\n typeof v === \"object\" && v !== null && !Array.isArray(v);\n\n/** An author-written name read as an own property, never through the prototype. */\nexport const own = (record: object, name: string): boolean => Object.prototype.hasOwnProperty.call(record, name);\n","// ---------------------------------------------------------------------------\n// Values against their declarations: the checks, the defaults, what a bundle\n// carries, and stage renames.\n//\n// The scalar checks are the kernel's (`valueFits`, `stagesEitherSide`), so a\n// value an extension holds is judged by the rule every field and property in\n// both formats is. What this file adds is the structured types, which walk\n// down to scalars, and the extension's own constraints (ranges, required\n// fields, references).\n// ---------------------------------------------------------------------------\n\nimport { stagesEitherSide, valueFits } from \"@wildwinter/expr\";\nimport { defaultFor } from \"@wildwinter/scoperegistry\";\nimport { atIndex, atKey, isObject, own } from \"./path.js\";\nimport type { FieldDecl, Problem, TargetDecl, TypeDecl } from \"./types.js\";\n\n/** What the host knows about its nodes, for references. */\nexport interface ValueContext {\n /** Does a node of `kind` with `id` exist? Absent, references are not checked\n * (a host checking a manifest's default, say, has no nodes to hand). */\n readonly exists?: (kind: string, id: string) => boolean;\n}\n\nconst typeWord = (v: unknown): string =>\n (Array.isArray(v) ? \"a list\" : v === null ? \"null\" : isObject(v) ? \"an object\" : `a ${typeof v}`);\n\nconst where = (path: string): string => (path === \"\" ? \"the value\" : `\"${path}\"`);\n\nconst err = (code: string, path: string, message: string, options?: readonly string[]): Problem =>\n ({ severity: \"error\", code, path, message, ...(options !== undefined ? { options } : {}) });\n\n/** Every problem with `value` as a value of `decl`, paths relative to the value. */\nexport function valueProblems(decl: TypeDecl, value: unknown, ctx: ValueContext = {}, path = \"\"): Problem[] {\n const out: Problem[] = [];\n const wrong = (expected: string): void => {\n out.push(err(\"wrong-type\", path, `${where(path)} should be ${expected}, not ${typeWord(value)}`));\n };\n switch (decl.type) {\n case \"text\":\n case \"multiline\":\n if (typeof value !== \"string\") wrong(\"text\");\n break;\n case \"boolean\":\n if (typeof value !== \"boolean\") wrong(\"true or false\");\n break;\n case \"number\":\n if (typeof value !== \"number\" || !Number.isFinite(value)) { wrong(\"a number\"); break; }\n if (typeof decl.min === \"number\" && value < decl.min) {\n out.push(err(\"below-min\", path, `${where(path)} is ${value}, below the least it may be, ${decl.min}`));\n }\n if (typeof decl.max === \"number\" && value > decl.max) {\n out.push(err(\"above-max\", path, `${where(path)} is ${value}, above the most it may be, ${decl.max}`));\n }\n break;\n case \"enum\":\n if (typeof value !== \"string\") { wrong(\"one of its values\"); break; }\n if (!valueFits(decl, value, { noneChosen: true })) {\n out.push(err(\"not-a-value\", path, `${where(path)} is \"${value}\", which is not one of its values`, [...(decl.values ?? [])]));\n }\n break;\n case \"flags\":\n if (!Array.isArray(value) || !value.every((f) => typeof f === \"string\")) { wrong(\"a list of its flags\"); break; }\n if (!valueFits(decl, value)) {\n const odd = value.filter((f) => !(decl.values ?? []).includes(f as string));\n out.push(err(\"not-a-value\", path, `${where(path)} names ${odd.map((f) => `\"${f}\"`).join(\", \")}, not among its flags`, [...(decl.values ?? [])]));\n }\n break;\n case \"quality\": {\n if (typeof value !== \"string\") { wrong(\"one of its stages\"); break; }\n if (valueFits(decl, value)) break;\n const renamed = renamedStage(decl, value);\n if (renamed !== undefined) {\n // A warning: a host compiles the value through the rename, and the\n // project takes the new name when it takes the version (`renameStages`).\n out.push({ severity: \"warning\", code: \"renamed-stage\", path, options: [renamed],\n message: `${where(path)} is \"${value}\", a stage this extension has since renamed \"${renamed}\"` });\n } else {\n out.push(err(\"not-a-stage\", path, `${where(path)} is \"${value}\", which is not one of its stages`, stagesEitherSide(decl, value)));\n }\n break;\n }\n case \"reference\":\n if (typeof value !== \"string\") { wrong(`the id of a ${decl.to ?? \"node\"}`); break; }\n if (value !== \"\" && ctx.exists && decl.to !== undefined && !ctx.exists(decl.to, value)) {\n out.push(err(\"no-such-node\", path, `${where(path)} names ${decl.to} \"${value}\", which does not exist`));\n }\n break;\n case \"record\":\n if (!isObject(value)) { wrong(\"an object\"); break; }\n out.push(...fieldsProblems(decl.fields ?? [], value, ctx, path));\n break;\n case \"map\": {\n if (!isObject(value)) { wrong(\"an object\"); break; }\n const key = decl.key;\n for (const [k, v] of Object.entries(value)) {\n const at = atKey(path, k);\n if (key?.type === \"reference\" && ctx.exists && key.to !== undefined && !ctx.exists(key.to, k)) {\n out.push(err(\"no-such-node\", at, `${where(at)} is keyed by ${key.to} \"${k}\", which does not exist`));\n }\n if (decl.of) out.push(...valueProblems(decl.of, v, ctx, at));\n }\n break;\n }\n case \"list\": {\n if (!Array.isArray(value)) { wrong(\"a list\"); break; }\n const seen = new Set<string>();\n value.forEach((item, i) => {\n const at = atIndex(path, i);\n if (decl.id !== undefined && isObject(item)) {\n const id = item[decl.id];\n const idAt = atKey(at, decl.id);\n if (typeof id !== \"string\" || id === \"\") {\n out.push(err(\"missing-id\", idAt, `${where(at)} has no \"${decl.id}\", which keys every item of this list`));\n } else if (seen.has(id)) {\n out.push(err(\"duplicate-id\", idAt, `${where(at)} repeats the id \"${id}\"`));\n } else {\n seen.add(id);\n }\n }\n if (decl.of) out.push(...valueProblems(decl.of, item, ctx, at));\n });\n break;\n }\n default:\n // A type this build does not know constrains nothing: a newer manifest's\n // field is the manifest check's to report, not a reason to refuse data.\n break;\n }\n return out;\n}\n\n/** Named fields against an object: required fields, unknown ones, each value. */\nfunction fieldsProblems(fields: readonly FieldDecl[], value: Record<string, unknown>, ctx: ValueContext, path: string): Problem[] {\n const out: Problem[] = [];\n const named = new Map(fields.map((f) => [f.name, f]));\n for (const f of fields) {\n if (f.required === true && !own(value, f.name)) {\n const at = atKey(path, f.name);\n out.push(err(\"required\", at, `${where(at)} is required and not set`));\n }\n }\n for (const [k, v] of Object.entries(value)) {\n const at = atKey(path, k);\n const f = named.get(k);\n if (f === undefined) {\n out.push({ severity: \"warning\", code: \"unknown-field\", path: at,\n message: `${where(at)} is not a field this extension declares; it is kept, and not compiled` });\n continue;\n }\n out.push(...valueProblems(f, v, ctx, at));\n }\n return out;\n}\n\n/** Every problem with one node's entry, against its target. */\nexport function entryProblems(target: TargetDecl, entry: unknown, ctx: ValueContext = {}, path = \"\"): Problem[] {\n if (!isObject(entry)) {\n return [err(\"wrong-type\", path, `${where(path)} should be an object of field values, not ${typeWord(entry)}`)];\n }\n return fieldsProblems(target.fields ?? [], entry, ctx, path);\n}\n\n// --- defaults -------------------------------------------------------------------\n\n/**\n * A declaration's default: the one it gives, else its type's. A scalar's is\n * the kernel's (`defaultFor`: false, 0, \"\", the first enum value, no flags,\n * the first stage), a reference's is none (\"\"), a record's is each of its\n * fields' defaults, a map's and a list's are empty.\n */\nexport function defaultOf(decl: TypeDecl): unknown {\n if (decl.default !== undefined) return decl.default;\n switch (decl.type) {\n case \"reference\": return \"\";\n case \"record\": return Object.fromEntries((decl.fields ?? []).map((f) => [f.name, defaultOf(f)]));\n case \"map\": return {};\n case \"list\": return [];\n default:\n return defaultFor({\n type: decl.type,\n ...(decl.values !== undefined ? { values: decl.values } : {}),\n ...(decl.stages !== undefined ? { stages: decl.stages } : {}),\n });\n }\n}\n\n// --- what a bundle carries ------------------------------------------------------\n\n/** The editor's words, and the manifest's own bookkeeping: never in a bundle. */\nconst EDITOR_KEYS = new Set([\"label\", \"help\", \"valueHelp\", \"group\", \"editorOnly\", \"renamedStages\"]);\n\n/** One declaration as a bundle carries it: the editor's words gone, the default resolved, all the way down. */\nfunction compiledDecl<D extends TypeDecl>(decl: D): D {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(decl)) if (!EDITOR_KEYS.has(k)) out[k] = v;\n if (decl.fields !== undefined) out[\"fields\"] = decl.fields.map((f) => compiledDecl(f));\n if (decl.of !== undefined) out[\"of\"] = compiledDecl(decl.of);\n out[\"default\"] = defaultOf(decl);\n return out as D;\n}\n\n/** A target's fields with every default resolved and the editor's words gone, as a bundle carries them;\n * editor-only fields are left out. */\nexport function compiledTarget(target: TargetDecl): FieldDecl[] {\n return (target.fields ?? []).filter((f) => f.editorOnly !== true).map((f) => stripOfDefaults(compiledDecl(f)));\n}\n\n/** The `of` of a map or a list is a bare type: its items are each node's own. */\nfunction stripOfDefaults<D extends TypeDecl>(decl: D): D {\n const out: Record<string, unknown> = { ...(decl as TypeDecl) };\n if (decl.of !== undefined) {\n const { default: _drop, ...rest } = decl.of as TypeDecl & { default?: unknown };\n out[\"of\"] = stripOfDefaults(rest as TypeDecl);\n }\n if (decl.fields !== undefined) out[\"fields\"] = decl.fields.map((f) => stripOfDefaults(f));\n return out as D;\n}\n\n/**\n * A node's values as a bundle carries them: raw and sparse, with editor-only\n * and undeclared fields left out and renamed stages renamed. Undefined when\n * nothing is left, so a host writes no `extensions` entry for the node.\n */\nexport function compileEntry(target: TargetDecl, entry: Readonly<Record<string, unknown>>): Record<string, unknown> | undefined {\n const renamed = renameStages(target, entry).entry;\n const out: Record<string, unknown> = {};\n const named = new Map((target.fields ?? []).map((f) => [f.name, f]));\n for (const k of Object.keys(renamed).sort()) {\n const f = named.get(k);\n if (f === undefined || f.editorOnly === true) continue;\n out[k] = renamed[k];\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\n// --- stage renames --------------------------------------------------------------\n\n/** The stage an old name was renamed to, when the declaration says it was. */\nfunction renamedStage(decl: TypeDecl, value: string): string | undefined {\n const map = decl.renamedStages;\n if (map === undefined || !own(map, value)) return undefined;\n const to = map[value];\n return typeof to === \"string\" && (decl.stages ?? []).includes(to) ? to : undefined;\n}\n\nexport interface StageRename {\n readonly path: string;\n readonly from: string;\n readonly to: string;\n}\n\n/** Rename every stage the manifest says was renamed, at any depth. Returns the\n * entry (a new object when anything changed) and the renames made. */\nexport function renameStages(target: TargetDecl, entry: Readonly<Record<string, unknown>>): { entry: Record<string, unknown>; renames: StageRename[] } {\n const renames: StageRename[] = [];\n const walk = (decl: TypeDecl, value: unknown, path: string): unknown => {\n switch (decl.type) {\n case \"quality\": {\n if (typeof value !== \"string\" || (decl.stages ?? []).includes(value)) return value;\n const to = renamedStage(decl, value);\n if (to === undefined) return value;\n renames.push({ path, from: value, to });\n return to;\n }\n case \"record\":\n return isObject(value) ? walkFields(decl.fields ?? [], value, path) : value;\n case \"map\":\n if (!isObject(value) || decl.of === undefined) return value;\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, walk(decl.of!, v, atKey(path, k))]));\n case \"list\":\n if (!Array.isArray(value) || decl.of === undefined) return value;\n return value.map((v, i) => walk(decl.of!, v, atIndex(path, i)));\n default:\n return value;\n }\n };\n const walkFields = (fields: readonly FieldDecl[], value: Readonly<Record<string, unknown>>, path: string): Record<string, unknown> => {\n const named = new Map(fields.map((f) => [f.name, f]));\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n const f = named.get(k);\n out[k] = f === undefined ? v : walk(f, v, atKey(path, k));\n }\n return out;\n };\n const out = walkFields(target.fields ?? [], entry, \"\");\n return { entry: renames.length > 0 ? out : { ...entry }, renames };\n}\n","// ---------------------------------------------------------------------------\n// Manifest checks.\n//\n// A manifest is pinned and referenced, and nobody in the project edits it, so\n// a fault in one is the extension author's. The checks still run in every\n// project that takes it, because a project's validation is the only thing\n// standing between a broken manifest and a host reading it.\n// ---------------------------------------------------------------------------\n\nimport { qualityDeclarationProblems } from \"@wildwinter/expr\";\nimport { parseSource } from \"../source.js\";\nimport { atIndex, atKey, isObject, own } from \"./path.js\";\nimport { HOSTS, MANIFEST_SCHEMA, SCALAR_TYPES, VALUE_TYPES } from \"./types.js\";\nimport type { ClaimDecl, FieldDecl, HostName, Manifest, Problem, SettingDecl, TargetDecl, TypeDecl } from \"./types.js\";\nimport { valueProblems } from \"./values.js\";\n\nconst ID = /^[a-z][a-z0-9-]*$/;\nconst VERSION = /^\\d+\\.\\d+\\.\\d+$/;\nconst NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\n/** The keys a declaration may carry. Anything else is most likely a misspelling. */\nconst TYPE_KEYS = [\"type\", \"values\", \"stages\", \"renamedStages\", \"to\", \"fields\", \"key\", \"of\", \"id\", \"min\", \"max\", \"valueHelp\", \"default\"];\nconst FIELD_KEYS = new Set([...TYPE_KEYS, \"name\", \"label\", \"help\", \"required\", \"group\", \"editorOnly\"]);\nconst CLAIM_KEYS = new Set([...TYPE_KEYS, \"setting\", \"label\", \"help\", \"required\"]);\nconst BARE_KEYS = new Set(TYPE_KEYS);\nconst MANIFEST_KEYS = new Set([\"schema\", \"id\", \"name\", \"version\", \"docs\", \"settings\", \"targets\"]);\n\nconst err = (code: string, path: string, message: string): Problem => ({ severity: \"error\", code, path, message });\n\n/** Read a manifest file's text (JSON, or JSON5). Throws on text that will not parse. */\nexport function parseManifest(text: string): Manifest {\n return parseSource(text) as Manifest;\n}\n\n/** Every problem with a manifest, by path. An empty list means it is sound. */\nexport function manifestProblems(manifest: unknown): Problem[] {\n const out: Problem[] = [];\n if (!isObject(manifest)) return [err(\"not-an-object\", \"\", \"a manifest is a JSON object\")];\n const m = manifest;\n unknownKeys(m, MANIFEST_KEYS, \"\", out);\n if (m[\"schema\"] !== MANIFEST_SCHEMA) {\n out.push(err(\"schema\", \"schema\", `the schema tag is ${JSON.stringify(m[\"schema\"])}, not \"${MANIFEST_SCHEMA}\"`));\n }\n if (typeof m[\"id\"] !== \"string\" || !ID.test(m[\"id\"])) {\n out.push(err(\"id\", \"id\", \"the id is lower case letters, digits and hyphens, starting with a letter\"));\n }\n if (typeof m[\"name\"] !== \"string\" || m[\"name\"].trim() === \"\") out.push(err(\"name\", \"name\", \"the manifest has no name\"));\n if (typeof m[\"version\"] !== \"string\" || !VERSION.test(m[\"version\"])) {\n out.push(err(\"version\", \"version\", \"the version is major.minor.patch, such as 1.0.0\"));\n }\n if (m[\"docs\"] !== undefined && typeof m[\"docs\"] !== \"string\") out.push(err(\"docs\", \"docs\", \"docs is a link, as text\"));\n\n const settings = settingsProblems(m[\"settings\"], out);\n\n const targets = m[\"targets\"];\n if (!isObject(targets) || Object.keys(targets).length === 0) {\n out.push(err(\"no-targets\", \"targets\", \"the manifest targets no host\"));\n return out;\n }\n for (const [host, kinds] of Object.entries(targets)) {\n const hostPath = atKey(\"targets\", host);\n const spec = own(HOSTS, host) ? HOSTS[host as HostName] : undefined;\n if (spec === undefined) {\n out.push(err(\"unknown-host\", hostPath, `\"${host}\" is not a host; a manifest targets \"patter\" or \"storylets\"`));\n continue;\n }\n if (!isObject(kinds)) { out.push(err(\"not-an-object\", hostPath, \"a host's targets are an object, by node kind\")); continue; }\n for (const [kind, target] of Object.entries(kinds)) {\n const kindPath = atKey(hostPath, kind);\n if (!spec.kinds.includes(kind)) {\n out.push(err(\"unknown-kind\", kindPath, `\"${kind}\" is not a node kind of ${host}; it has ${spec.kinds.join(\", \")}`));\n continue;\n }\n targetProblems(host as HostName, kind, target, kindPath, settings, out);\n }\n }\n return out;\n}\n\nfunction unknownKeys(obj: Record<string, unknown>, known: ReadonlySet<string>, path: string, out: Problem[]): void {\n for (const k of Object.keys(obj)) {\n if (!known.has(k)) {\n out.push({ severity: \"warning\", code: \"unknown-key\", path: atKey(path, k), message: `\"${k}\" means nothing here; it is ignored` });\n }\n }\n}\n\nfunction settingsProblems(settings: unknown, out: Problem[]): Set<string> {\n const names = new Set<string>();\n if (settings === undefined) return names;\n if (!Array.isArray(settings)) { out.push(err(\"not-a-list\", \"settings\", \"settings are a list\")); return names; }\n settings.forEach((s: unknown, i) => {\n const at = atIndex(\"settings\", i);\n if (!isObject(s)) { out.push(err(\"not-an-object\", at, \"a setting is an object\")); return; }\n const name = s[\"name\"];\n if (typeof name !== \"string\" || !NAME.test(name)) {\n out.push(err(\"setting-name\", atKey(at, \"name\"), \"a setting's name is an identifier\"));\n } else if (names.has(name)) {\n out.push(err(\"setting-duplicate\", atKey(at, \"name\"), `setting \"${name}\" is declared twice`));\n } else {\n names.add(name);\n }\n const dflt = (s as Partial<SettingDecl>).default;\n if (typeof dflt !== \"string\" || !NAME.test(dflt)) {\n out.push(err(\"setting-default\", atKey(at, \"default\"), \"a setting names a host field by default, so its default is a field name\"));\n }\n });\n return names;\n}\n\nfunction targetProblems(host: HostName, kind: string, target: unknown, path: string, settings: ReadonlySet<string>, out: Problem[]): void {\n if (!isObject(target)) { out.push(err(\"not-an-object\", path, \"a target is an object\")); return; }\n unknownKeys(target, new Set([\"fields\", \"claims\"]), path, out);\n const t = target as TargetDecl;\n if (t.fields !== undefined) fieldListProblems(host, t.fields, atKey(path, \"fields\"), true, out);\n if (t.claims === undefined) return;\n if (!Array.isArray(t.claims)) { out.push(err(\"not-a-list\", atKey(path, \"claims\"), \"claims are a list\")); return; }\n const claimable = HOSTS[host].claimable.includes(kind);\n const claimed = new Set<string>();\n t.claims.forEach((c: unknown, i) => {\n const at = atIndex(atKey(path, \"claims\"), i);\n if (!claimable) {\n out.push(err(\"claim-kind\", at, `a ${kind} has no host fields to claim; ${host} has them on ${HOSTS[host].claimable.join(\", \")}`));\n return;\n }\n if (!isObject(c)) { out.push(err(\"not-an-object\", at, \"a claim is an object\")); return; }\n const claim = c as unknown as ClaimDecl;\n unknownKeys(c, CLAIM_KEYS, at, out);\n if (!(SCALAR_TYPES as readonly string[]).includes(claim.type)) {\n out.push(err(\"claim-type\", atKey(at, \"type\"), \"a claim presents a host field, which is a scalar\"));\n } else {\n typeProblems(host, claim, at, false, out);\n }\n if (typeof claim.setting !== \"string\" || !settings.has(claim.setting)) {\n out.push(err(\"claim-setting\", atKey(at, \"setting\"), `a claim names its field through a setting, and \"${String(claim.setting)}\" is not one of the manifest's settings`));\n } else if (claimed.has(claim.setting)) {\n out.push(err(\"claim-duplicate\", atKey(at, \"setting\"), `setting \"${claim.setting}\" is claimed twice for one kind`));\n } else {\n claimed.add(claim.setting);\n }\n });\n}\n\nfunction fieldListProblems(host: HostName, fields: unknown, path: string, topLevel: boolean, out: Problem[]): void {\n if (!Array.isArray(fields)) { out.push(err(\"not-a-list\", path, \"fields are a list\")); return; }\n const names = new Set<string>();\n fields.forEach((f: unknown, i) => {\n const at = atIndex(path, i);\n if (!isObject(f)) { out.push(err(\"not-an-object\", at, \"a field is an object\")); return; }\n const field = f as unknown as FieldDecl;\n unknownKeys(f, FIELD_KEYS, at, out);\n if (typeof field.name !== \"string\" || !NAME.test(field.name)) {\n out.push(err(\"field-name\", atKey(at, \"name\"), \"a field's name is an identifier: letters, digits and underscores, not starting with a digit\"));\n } else if (names.has(field.name)) {\n out.push(err(\"duplicate-field\", atKey(at, \"name\"), `field \"${field.name}\" is declared twice`));\n } else {\n names.add(field.name);\n }\n typeProblems(host, field, at, true, out);\n if (field.editorOnly !== undefined && !topLevel) {\n out.push(err(\"editor-only-nested\", atKey(at, \"editorOnly\"), \"only a target's own fields can be editor-only, not a record's\"));\n }\n for (const flag of [\"required\", \"editorOnly\"] as const) {\n if (field[flag] !== undefined && typeof field[flag] !== \"boolean\") {\n out.push(err(\"not-a-boolean\", atKey(at, flag), `${flag} is true or false`));\n }\n }\n });\n}\n\n/** A declaration's type and constraints. `named` is false for a map's or a list's bare `of`. */\nfunction typeProblems(host: HostName, decl: TypeDecl, path: string, named: boolean, out: Problem[]): void {\n const typeAt = atKey(path, \"type\");\n if (decl.type === \"string\") {\n out.push(err(\"string-type\", typeAt, \"the text type is spelled \\\"text\\\"\"));\n return;\n }\n if (typeof decl.type !== \"string\" || !(VALUE_TYPES as readonly string[]).includes(decl.type)) {\n out.push(err(\"unknown-type\", typeAt, `${JSON.stringify(decl.type)} is not a type; the types are ${VALUE_TYPES.join(\", \")}`));\n return;\n }\n const at = (k: string): string => atKey(path, k);\n let sound = true;\n switch (decl.type) {\n case \"enum\":\n case \"flags\": {\n const values = decl.values;\n if (!Array.isArray(values) || values.length === 0) {\n out.push(err(\"values-empty\", at(\"values\"), `an ${decl.type === \"enum\" ? \"enum\" : \"flags field\"} lists its values`));\n sound = false;\n break;\n }\n const seen = new Set<string>();\n values.forEach((v, i) => {\n if (typeof v !== \"string\" || v.trim() === \"\") { out.push(err(\"value-empty\", atIndex(at(\"values\"), i), \"a value has a name\")); sound = false; }\n else if (seen.has(v)) { out.push(err(\"value-duplicate\", atIndex(at(\"values\"), i), `\"${v}\" is listed twice`)); sound = false; }\n else seen.add(v);\n });\n break;\n }\n case \"quality\": {\n // The kernel's one rule; the default is checked below, with every type's.\n for (const p of qualityDeclarationProblems(decl.stages)) {\n out.push(err(`quality-${p.kind === \"default-not-a-stage\" ? \"default\" : p.kind}`, at(\"stages\"),\n p.kind === \"too-few-stages\" ? \"a quality's ladder has at least two stages\"\n : p.kind === \"empty-stage\" ? `stage ${p.index + 1} has no name`\n : p.kind === \"duplicate-stage\" ? `stage \"${p.stage}\" is listed twice` : \"the default is not a stage\"));\n sound = false;\n }\n break;\n }\n case \"reference\":\n if (typeof decl.to !== \"string\" || !HOSTS[host].references.includes(decl.to)) {\n out.push(err(\"reference-to\", at(\"to\"), `a reference names the kind it points at, one of ${HOSTS[host].references.join(\", \")}`));\n sound = false;\n }\n break;\n case \"record\":\n if (!Array.isArray(decl.fields) || decl.fields.length === 0) {\n out.push(err(\"record-empty\", at(\"fields\"), \"a record declares its fields\"));\n sound = false;\n } else {\n const before = out.length;\n fieldListProblems(host, decl.fields, at(\"fields\"), false, out);\n if (out.slice(before).some((p) => p.severity === \"error\")) sound = false;\n }\n break;\n case \"map\": {\n const key = decl.key;\n const keyOk = isObject(key) && (key[\"type\"] === \"text\"\n || (key[\"type\"] === \"reference\" && typeof key[\"to\"] === \"string\" && HOSTS[host].references.includes(key[\"to\"])));\n if (!keyOk) {\n out.push(err(\"map-key\", at(\"key\"), `a map is keyed by { type: \"text\" } or a reference, { type: \"reference\", to: \"${HOSTS[host].references[0]}\" }`));\n sound = false;\n }\n if (!ofProblems(host, decl, at, out)) sound = false;\n break;\n }\n case \"list\": {\n if (decl.id !== undefined) {\n const of = decl.of;\n const idField = isObject(of) && of[\"type\"] === \"record\" && Array.isArray(of[\"fields\"])\n ? (of[\"fields\"] as unknown[]).find((f) => isObject(f) && f[\"name\"] === decl.id) as FieldDecl | undefined\n : undefined;\n if (typeof decl.id !== \"string\" || idField === undefined || idField.type !== \"text\") {\n out.push(err(\"list-id\", at(\"id\"), \"a list with ids holds records, and its id names a text field of them\"));\n sound = false;\n }\n }\n if (!ofProblems(host, decl, at, out)) sound = false;\n break;\n }\n }\n\n // The constraints that belong to some types only.\n if (decl.min !== undefined || decl.max !== undefined) {\n const which = decl.max !== undefined ? \"max\" : \"min\";\n if (decl.type !== \"number\") {\n out.push(err(\"range\", at(which), \"a range applies to a number\"));\n } else if (typeof decl.min === \"number\" && typeof decl.max === \"number\" && decl.min > decl.max) {\n out.push(err(\"range\", at(\"max\"), `the range runs from ${decl.min} down to ${decl.max}`));\n sound = false;\n }\n }\n if (decl.renamedStages !== undefined) renamedStagesProblems(decl, at(\"renamedStages\"), out);\n if (decl.valueHelp !== undefined) {\n const vocabulary = decl.type === \"quality\" ? decl.stages : decl.type === \"enum\" || decl.type === \"flags\" ? decl.values : undefined;\n if (vocabulary === undefined || !isObject(decl.valueHelp)) {\n out.push(err(\"value-help\", at(\"valueHelp\"), \"value help describes the values of an enum or flags field, or a quality's stages\"));\n } else {\n for (const k of Object.keys(decl.valueHelp)) {\n if (!vocabulary.includes(k)) out.push(err(\"value-help\", atKey(at(\"valueHelp\"), k), `\"${k}\" is not one of its values`));\n }\n }\n }\n if (named && decl.default !== undefined && sound) {\n const misfit = valueProblems(decl, decl.default).filter((p) => p.severity === \"error\");\n if (misfit.length > 0) out.push(err(\"default-misfit\", at(\"default\"), `the default does not fit: ${misfit[0]!.message}`));\n }\n}\n\nfunction ofProblems(host: HostName, decl: TypeDecl, at: (k: string) => string, out: Problem[]): boolean {\n if (!isObject(decl.of)) {\n out.push(err(\"missing-of\", at(\"of\"), `a ${decl.type} says what it holds, in \"of\"`));\n return false;\n }\n const before = out.length;\n unknownKeys(decl.of as Record<string, unknown>, BARE_KEYS, at(\"of\"), out);\n typeProblems(host, decl.of, at(\"of\"), false, out);\n return !out.slice(before).some((p) => p.severity === \"error\");\n}\n\nfunction renamedStagesProblems(decl: TypeDecl, path: string, out: Problem[]): void {\n if (decl.type !== \"quality\" || !isObject(decl.renamedStages)) {\n out.push(err(\"renamed-stages\", path, \"renamed stages belong to a quality, as { \\\"old\\\": \\\"new\\\" }\"));\n return;\n }\n const stages = decl.stages ?? [];\n for (const [from, to] of Object.entries(decl.renamedStages)) {\n if (stages.includes(from)) {\n out.push(err(\"renamed-stages\", atKey(path, from), `\"${from}\" is still a stage, so it cannot also be an old name`));\n } else if (typeof to !== \"string\" || !stages.includes(to)) {\n out.push(err(\"renamed-stages\", atKey(path, from), `\"${from}\" is renamed to ${JSON.stringify(to)}, which is not a stage`));\n }\n }\n}\n\n// --- settings and claims across a project --------------------------------------\n\n/** The host field each of a manifest's settings names, the project's choice\n * first, else the setting's default. */\nexport function settingValues(manifest: Manifest, chosen?: Readonly<Record<string, unknown>>): Record<string, string> {\n const out: Record<string, string> = {};\n for (const s of manifest.settings ?? []) {\n const v = chosen !== undefined && own(chosen, s.name) ? chosen[s.name] : undefined;\n out[s.name] = typeof v === \"string\" && v !== \"\" ? v : s.default;\n }\n return out;\n}\n\n/** A claim as a project resolves it: the host field it presents, by name. */\nexport interface ResolvedClaim {\n readonly extension: string;\n readonly host: HostName;\n readonly kind: string;\n /** The host field's name, through the setting. */\n readonly field: string;\n readonly claim: ClaimDecl;\n}\n\n/** Every claim of a manifest for one host, resolved through the project's settings. */\nexport function resolvedClaims(manifest: Manifest, host: HostName, chosen?: Readonly<Record<string, unknown>>): ResolvedClaim[] {\n const settings = settingValues(manifest, chosen);\n const out: ResolvedClaim[] = [];\n for (const [kind, target] of Object.entries(manifest.targets[host] ?? {})) {\n for (const claim of target.claims ?? []) {\n const field = settings[claim.setting];\n if (field !== undefined) out.push({ extension: manifest.id, host, kind, field, claim });\n }\n }\n return out;\n}\n\n/** Two extensions claiming one host field: an error naming both, once per pair. */\nexport function claimClashes(claims: readonly ResolvedClaim[]): Problem[] {\n const out: Problem[] = [];\n const first = new Map<string, ResolvedClaim>();\n for (const c of claims) {\n const key = `${c.host}\\u0000${c.kind}\\u0000${c.field}`;\n const prior = first.get(key);\n if (prior === undefined) { first.set(key, c); continue; }\n if (prior.extension === c.extension) continue;\n out.push(err(\"claim-clash\", `${c.kind}.${c.field}`,\n `extensions \"${prior.extension}\" and \"${c.extension}\" both claim the ${c.kind} field \"${c.field}\"`));\n }\n return out;\n}\n\n/** One manifest's declarations for one host and node kind, or undefined. */\nexport function targetOf(manifest: Manifest | undefined, host: HostName, kind: string): TargetDecl | undefined {\n const kinds = manifest?.targets[host];\n return kinds !== undefined && own(kinds, kind) ? kinds[kind] : undefined;\n}\n","// ---------------------------------------------------------------------------\n// The type-driven three-way merge, and the unresolved mark.\n//\n// Lifted from the Storylets format's strategy table (storylets\n// packages/ops/src/merge.ts), which merged every shard of that format as a tree\n// of five behaviours, and generalised two ways: a strategy can be built from a\n// manifest's types, and a keyed list can keep its authored order rather than\n// sorting by key (patterkit design/family-parity-2026-10.md item 4: a list the\n// editor lets you reorder must not be re-sorted by a merge).\n//\n// Pure: data in, data out.\n// ---------------------------------------------------------------------------\n\nimport { isObject } from \"./path.js\";\nimport { targetOf } from \"./manifest.js\";\nimport type { ConflictKind, FieldDecl, HostName, Manifest, Problem, TargetDecl, TypeDecl, UnresolvedEntry } from \"./types.js\";\n\n/**\n * A merge strategy, as data:\n * atomic one value, classic three-way (objects compare by content)\n * map(of) an open string-keyed map, each value merged by `of`\n * set a list of strings as a set: additions union, deletions respected\n * keyed(key, of) a list of objects keyed by the string field `key`; output\n * sorted by key, or in the authored order with `order: \"preserve\"`\n * object(fields) named keys by their own strategy, every other key by `other`\n * (atomic when absent)\n */\nexport type Strategy =\n | { readonly kind: \"atomic\" }\n | { readonly kind: \"map\"; readonly of: Strategy }\n | { readonly kind: \"set\" }\n | { readonly kind: \"keyed\"; readonly key: string; readonly of: Strategy; readonly order?: \"sorted\" | \"preserve\"; readonly renameWarning?: string }\n | { readonly kind: \"object\"; readonly fields: Readonly<Record<string, Strategy>>; readonly other?: Strategy };\n\nexport const ATOMIC: Strategy = { kind: \"atomic\" };\nexport const SET: Strategy = { kind: \"set\" };\nexport const mapOf = (of: Strategy): Strategy => ({ kind: \"map\", of });\nexport const keyedBy = (key: string, of: Strategy, opts?: { order?: \"sorted\" | \"preserve\"; renameWarning?: string }): Strategy =>\n ({ kind: \"keyed\", key, of, ...(opts?.order !== undefined ? { order: opts.order } : {}),\n ...(opts?.renameWarning !== undefined ? { renameWarning: opts.renameWarning } : {}) });\nexport const objectOf = (fields: Readonly<Record<string, Strategy>>, other?: Strategy): Strategy =>\n ({ kind: \"object\", fields, ...(other !== undefined ? { other } : {}) });\n\n/** One clash; the merged value holds OURS for it. */\nexport interface Conflict {\n /** The entity key involved (a keyed item's key, a map's key), or \"\" at the top. */\n readonly id: string;\n /** Where, from the root: `entries.card.c_1.perf.v_ann.look`, `cards[c_1].priority`. */\n readonly path: string;\n readonly base: unknown;\n readonly ours: unknown;\n readonly theirs: unknown;\n readonly kind: ConflictKind;\n}\n\n/** A note on a merge that went through but that a person should check. */\nexport interface MergeWarning {\n readonly id: string;\n readonly path: string;\n readonly message: string;\n}\n\nexport interface TreeMergeResult {\n readonly merged: unknown;\n readonly conflicts: Conflict[];\n readonly warnings: MergeWarning[];\n}\n\nexport interface TreeMergeOptions {\n /** Whether two values say the same thing. Content equality with keys in any\n * order by default; a format whose canonical form is looser passes its own. */\n readonly equal?: (a: unknown, b: unknown) => boolean;\n}\n\n/** JSON with every object's keys sorted: two values with this text say the same thing. */\nexport function stableStringify(value: unknown): string {\n if (value === undefined) return \"undefined\";\n if (Array.isArray(value)) return `[${value.map((v) => (v === undefined ? \"null\" : stableStringify(v))).join(\",\")}]`;\n if (isObject(value)) {\n const keys = Object.keys(value).filter((k) => value[k] !== undefined).sort();\n return `{${keys.map((k) => `${JSON.stringify(k)}:${stableStringify(value[k])}`).join(\",\")}}`;\n }\n return JSON.stringify(value);\n}\n\nconst defaultEqual = (a: unknown, b: unknown): boolean => stableStringify(a) === stableStringify(b);\nconst asArr = (v: unknown): unknown[] => (Array.isArray(v) ? v : []);\n\ninterface Ctx {\n readonly eq: (a: unknown, b: unknown) => boolean;\n readonly conflicts: Conflict[];\n readonly warnings: MergeWarning[];\n}\n\n/** Three-way merge `base`, `ours` and `theirs` by `strategy`. A clash keeps ours. */\nexport function mergeTree(strategy: Strategy, base: unknown, ours: unknown, theirs: unknown, opts?: TreeMergeOptions): TreeMergeResult {\n const ctx: Ctx = { eq: opts?.equal ?? defaultEqual, conflicts: [], warnings: [] };\n const merged = mergeValue(strategy, base, ours, theirs, \"\", \"\", ctx);\n return { merged, conflicts: ctx.conflicts, warnings: ctx.warnings };\n}\n\nfunction deletedKind(base: unknown, ours: unknown, theirs: unknown): ConflictKind {\n if (base !== undefined && (ours === undefined || theirs === undefined)) return \"delete-vs-edit\";\n return base === undefined ? \"added-both\" : \"both-changed\";\n}\n\nfunction merge3(b: unknown, o: unknown, t: unknown, id: string, path: string, ctx: Ctx): unknown {\n if (ctx.eq(o, t)) return o;\n if (ctx.eq(b, o)) return t;\n if (ctx.eq(b, t)) return o;\n ctx.conflicts.push({ id, path, base: b, ours: o, theirs: t, kind: deletedKind(b, o, t) });\n return o;\n}\n\n/** Does a value fit a composite strategy's shape? One that does not (a scalar where a list was) merges whole. */\nfunction hasShape(spec: Strategy, v: unknown): boolean {\n switch (spec.kind) {\n case \"atomic\": return true;\n case \"set\":\n case \"keyed\": return Array.isArray(v);\n case \"map\":\n case \"object\": return isObject(v);\n }\n}\n\nfunction mergeValue(spec: Strategy, b: unknown, o: unknown, t: unknown, id: string, path: string, ctx: Ctx): unknown {\n // A composite strategy applies only when neither side deleted the whole\n // value; a delete against an edit is decided here, as one value.\n if (spec.kind === \"atomic\" || o === undefined || t === undefined || !hasShape(spec, o) || !hasShape(spec, t)) {\n return merge3(b, o, t, id, path, ctx);\n }\n switch (spec.kind) {\n case \"set\": {\n const strings = (v: unknown): Set<string> => new Set(asArr(v).filter((x): x is string => typeof x === \"string\"));\n const B = strings(b), O = strings(o), T = strings(t);\n const out = new Set<string>();\n for (const x of [...O, ...T]) if ((O.has(x) && T.has(x)) || !B.has(x)) out.add(x);\n return [...out].sort();\n }\n case \"map\": {\n const B = isObject(b) ? b : {}, O = o as Record<string, unknown>, T = t as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const k of Object.keys({ ...B, ...O, ...T }).sort()) {\n const v = mergeValue(spec.of, B[k], O[k], T[k], id || k, `${path}.${k}`, ctx);\n if (v !== undefined) out[k] = v;\n }\n return out;\n }\n case \"object\": {\n const B = isObject(b) ? b : {}, O = o as Record<string, unknown>, T = t as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const k of Object.keys({ ...B, ...O, ...T }).sort()) {\n const field = Object.prototype.hasOwnProperty.call(spec.fields, k) ? spec.fields[k]! : spec.other ?? ATOMIC;\n const v = mergeValue(field, B[k], O[k], T[k], id, path ? `${path}.${k}` : k, ctx);\n if (v !== undefined) out[k] = v;\n }\n return out;\n }\n case \"keyed\":\n return mergeKeyed(spec, asArr(b), o as unknown[], t as unknown[], path, ctx);\n }\n}\n\nfunction mergeKeyed(spec: Extract<Strategy, { kind: \"keyed\" }>, B: unknown[], O: unknown[], T: unknown[], path: string, ctx: Ctx): unknown[] {\n const keyOf = (v: unknown): string | undefined => (isObject(v) && typeof v[spec.key] === \"string\" ? (v[spec.key] as string) : undefined);\n const keysOf = (arr: unknown[]): string[] => arr.map(keyOf).filter((k): k is string => k !== undefined);\n const toMap = (arr: unknown[]): Map<string, unknown> => {\n const m = new Map<string, unknown>();\n for (const v of arr) {\n const k = keyOf(v);\n if (k !== undefined) m.set(k, v);\n }\n return m;\n };\n const Bm = toMap(B), Om = toMap(O), Tm = toMap(T);\n const out = new Map<string, unknown>();\n const here = (k: string): string => `${path}[${k}]`;\n\n for (const k of new Set([...Bm.keys(), ...Om.keys(), ...Tm.keys()])) {\n const b = Bm.get(k), o = Om.get(k), t = Tm.get(k);\n const inB = Bm.has(k), inO = Om.has(k), inT = Tm.has(k);\n if (inO && inT) {\n if (!inB && !ctx.eq(o, t)) {\n ctx.conflicts.push({ id: k, path: here(k), base: undefined, ours: o, theirs: t, kind: \"added-both\" });\n out.set(k, o);\n } else {\n out.set(k, mergeValue(spec.of, b, o, t, k, here(k), ctx));\n }\n } else if (inO && !inT) {\n if (inB && !ctx.eq(o, b)) {\n ctx.conflicts.push({ id: k, path: here(k), base: b, ours: o, theirs: undefined, kind: \"delete-vs-edit\" });\n out.set(k, o); // theirs deleted, ours edited: ours keeps it\n } else if (!inB) {\n out.set(k, o); // ours added\n } // else ours unchanged and theirs deleted: gone\n } else if (!inO && inT) {\n if (inB && !ctx.eq(t, b)) {\n ctx.conflicts.push({ id: k, path: here(k), base: b, ours: undefined, theirs: t, kind: \"delete-vs-edit\" });\n } else if (!inB) {\n out.set(k, t); // theirs added\n }\n } // else in the base only: both deleted\n }\n\n if (spec.renameWarning !== undefined) {\n for (const [k, v] of out) {\n const b = Bm.get(k);\n if (isObject(b) && isObject(v) && typeof b[\"gameId\"] === \"string\" && typeof v[\"gameId\"] === \"string\" && b[\"gameId\"] !== v[\"gameId\"]) {\n ctx.warnings.push({ id: k, path: here(k), message: `${spec.renameWarning} (\"${b[\"gameId\"]}\" -> \"${v[\"gameId\"]}\")` });\n }\n }\n }\n\n if (spec.order !== \"preserve\") return [...out.keys()].sort().map((k) => out.get(k));\n return preservedOrder(keysOf(B), keysOf(O), keysOf(T), out, path, ctx).map((k) => out.get(k));\n}\n\n/**\n * The authored order of a keyed list after a merge. The side that reordered\n * the items both sides kept is the skeleton (ours when neither did, and ours,\n * with a clash, when both did differently); the other side's additions then\n * go in after the item they followed there, or at the front when they led.\n */\nfunction preservedOrder(B: string[], O: string[], T: string[], survivors: ReadonlyMap<string, unknown>, path: string, ctx: Ctx): string[] {\n const inAll = new Set(B.filter((k) => O.includes(k) && T.includes(k) && survivors.has(k)));\n const common = (seq: string[]): string[] => seq.filter((k) => inAll.has(k));\n const same = (a: string[], b: string[]): boolean => a.length === b.length && a.every((x, i) => x === b[i]);\n const oMoved = !same(common(O), common(B)), tMoved = !same(common(T), common(B));\n if (oMoved && tMoved && !same(common(O), common(T))) {\n ctx.conflicts.push({ id: \"\", path: `${path}:order`, base: common(B), ours: common(O), theirs: common(T), kind: \"both-changed\" });\n }\n const [skeleton, other] = tMoved && !oMoved ? [T, O] : [O, T];\n const result = skeleton.filter((k) => survivors.has(k));\n for (let i = 0; i < other.length; i++) {\n const k = other[i]!;\n if (!survivors.has(k) || result.includes(k)) continue;\n let at = 0;\n for (let j = i - 1; j >= 0; j--) {\n const p = result.indexOf(other[j]!);\n if (p >= 0) { at = p + 1; break; }\n }\n result.splice(at, 0, k);\n }\n // Survivors neither list holds in order (cannot happen for well-formed input) go last, sorted.\n for (const k of [...survivors.keys()].sort()) if (!result.includes(k)) result.push(k);\n return result;\n}\n\n// --- strategies from a manifest ---------------------------------------------------\n\n/** How a value of this type merges (the README's table). */\nexport function strategyForType(decl: TypeDecl): Strategy {\n switch (decl.type) {\n case \"flags\": return SET;\n case \"record\": return strategyForFields(decl.fields ?? []);\n case \"map\": return mapOf(decl.of !== undefined ? strategyForType(decl.of) : ATOMIC);\n case \"list\":\n return decl.id !== undefined\n ? keyedBy(decl.id, decl.of !== undefined ? strategyForType(decl.of) : ATOMIC, { order: \"preserve\" })\n : ATOMIC;\n default: return ATOMIC;\n }\n}\n\nfunction strategyForFields(fields: readonly FieldDecl[]): Strategy {\n return objectOf(Object.fromEntries(fields.map((f) => [f.name, strategyForType(f)])));\n}\n\n/** How one node's entry merges: field by field, each by its type. */\nexport function strategyForTarget(target: TargetDecl): Strategy {\n return strategyForFields(target.fields ?? []);\n}\n\n/**\n * How an extension data shard merges for one host. With the manifest, each\n * kind's entries merge node by node and each entry field by field; a kind the\n * manifest does not target, and every kind without the manifest, merges node\n * by node with each entry as one value.\n */\nexport function extensionDataStrategy(manifest: Manifest | undefined, host: HostName): Strategy {\n const perNode = mapOf(ATOMIC);\n const kinds: Record<string, Strategy> = {};\n for (const kind of Object.keys(manifest?.targets[host] ?? {})) {\n const target = targetOf(manifest, host, kind);\n if (target !== undefined) kinds[kind] = mapOf(strategyForTarget(target));\n }\n return objectOf({ entries: objectOf(kinds, perNode) });\n}\n\n// --- the unresolved mark ---------------------------------------------------------\n\n/** The reserved key a merged shard carries its clashes under. */\nexport const UNRESOLVED_KEY = \"unresolved\";\n\n/** A shard's mark, when it carries one. */\nexport function unresolvedOf(shard: unknown): readonly UnresolvedEntry[] | undefined {\n if (!isObject(shard) || !Object.prototype.hasOwnProperty.call(shard, UNRESOLVED_KEY)) return undefined;\n const mark = shard[UNRESOLVED_KEY];\n return Array.isArray(mark) ? (mark as UnresolvedEntry[]) : [];\n}\n\n/** A shard without its mark, for merging and for comparing content. */\nexport function withoutMark<T>(shard: T): T {\n if (!isObject(shard) || !Object.prototype.hasOwnProperty.call(shard, UNRESOLVED_KEY)) return shard;\n const { [UNRESOLVED_KEY]: _mark, ...rest } = shard;\n return rest as T;\n}\n\nconst entryOf = (c: Conflict): UnresolvedEntry => ({\n path: c.path, kind: c.kind,\n ...(c.base !== undefined ? { base: c.base } : {}),\n ...(c.ours !== undefined ? { ours: c.ours } : {}),\n ...(c.theirs !== undefined ? { theirs: c.theirs } : {}),\n});\n\n/**\n * Write a merge's clashes into the merged shard under `unresolved`, carrying\n * any mark either side already had (a mark is a set by path: one side\n * resolving it, by removing it, resolves it). A clash found now replaces a\n * carried one at the same path. With nothing to mark, the key is absent.\n */\nexport function markUnresolved<T extends Record<string, unknown>>(\n merged: T, conflicts: readonly Conflict[], sides?: { base?: unknown; ours?: unknown; theirs?: unknown },\n): T {\n const byPath = (mark: readonly UnresolvedEntry[] | undefined): Map<string, UnresolvedEntry> =>\n new Map((mark ?? []).filter((e) => isObject(e) && typeof e.path === \"string\").map((e) => [e.path, e]));\n const B = byPath(unresolvedOf(sides?.base)), O = byPath(unresolvedOf(sides?.ours)), T = byPath(unresolvedOf(sides?.theirs));\n const out = new Map<string, UnresolvedEntry>();\n for (const [p, e] of [...O, ...T]) {\n const kept = (O.has(p) && T.has(p)) || !B.has(p); // on both sides still, or newly marked on one\n if (kept && !out.has(p)) out.set(p, e);\n }\n for (const c of conflicts) out.set(c.path, entryOf(c));\n const result = withoutMark(merged) as Record<string, unknown>;\n if (out.size === 0) return result as T;\n return { ...result, [UNRESOLVED_KEY]: [...out.keys()].sort().map((p) => out.get(p)!) } as unknown as T;\n}\n\n/** Validation's refusal of a marked shard: one error per clash, or one for an empty mark. */\nexport function unresolvedProblems(shard: unknown): Problem[] {\n const mark = unresolvedOf(shard);\n if (mark === undefined) return [];\n const message = \"unresolved merge: this shard holds our side of a clash; resolve it, then remove the entry from \\\"unresolved\\\"\";\n if (mark.length === 0) return [{ severity: \"error\", code: \"unresolved\", path: UNRESOLVED_KEY, message }];\n return mark.map((e) => ({\n severity: \"error\" as const, code: \"unresolved\",\n path: isObject(e) && typeof e.path === \"string\" ? e.path : UNRESOLVED_KEY,\n message: `${message} (${isObject(e) && typeof e.kind === \"string\" ? e.kind : \"clash\"})`,\n }));\n}\n\n// --- extension data ----------------------------------------------------------------\n\nexport interface DataMergeResult {\n /** The merged shard: ours where it clashed, with the mark written in. */\n readonly merged: Record<string, unknown>;\n readonly conflicts: Conflict[];\n readonly warnings: MergeWarning[];\n}\n\n/**\n * Three-way merge of one extension data shard. `manifest` is the project's copy,\n * read from the working tree, or undefined when it is missing, unreadable or\n * itself in conflict, which merges each node's entry as one value: always safe.\n * The shard's other keys (a format's schema tag, the extension id) merge as values.\n */\nexport function mergeExtensionData(\n base: Record<string, unknown>, ours: Record<string, unknown>, theirs: Record<string, unknown>,\n opts: { manifest?: Manifest; host: HostName } & TreeMergeOptions,\n): DataMergeResult {\n const strategy = extensionDataStrategy(opts.manifest, opts.host);\n const { merged, conflicts, warnings } = mergeTree(strategy, withoutMark(base), withoutMark(ours), withoutMark(theirs),\n opts.equal !== undefined ? { equal: opts.equal } : undefined);\n return {\n merged: markUnresolved(merged as Record<string, unknown>, conflicts, { base, ours, theirs }),\n conflicts, warnings,\n };\n}\n\n/** Entries naming a node the host no longer has: kept, and reported as warnings. */\nexport function orphanedEntries(data: unknown, exists: (kind: string, id: string) => boolean): Problem[] {\n const out: Problem[] = [];\n const entries = isObject(data) ? data[\"entries\"] : undefined;\n if (!isObject(entries)) return out;\n for (const [kind, nodes] of Object.entries(entries)) {\n if (!isObject(nodes)) continue;\n for (const id of Object.keys(nodes)) {\n if (!exists(kind, id)) {\n out.push({ severity: \"warning\", code: \"orphan\", path: `entries.${kind}.${id}`,\n message: `an entry for ${kind} \"${id}\", which no longer exists; it is kept, and not compiled` });\n }\n }\n }\n return out;\n}\n"]}
@@ -0,0 +1,313 @@
1
+ /** The manifest schema tag this build reads and writes. */
2
+ declare const MANIFEST_SCHEMA = "wildwinter/extension@0";
3
+ /** What a manifest file is called: `<id>.extension.json`. */
4
+ declare const MANIFEST_FILE_SUFFIX = ".extension.json";
5
+ /** The hosts an extension can target. */
6
+ type HostName = "patter" | "storylets";
7
+ interface HostSpec {
8
+ /** The node kinds a target may name. */
9
+ readonly kinds: readonly string[];
10
+ /** The node kinds a `reference` may point at. */
11
+ readonly references: readonly string[];
12
+ /** The node kinds with host fields of their own, which a claim may present. */
13
+ readonly claimable: readonly string[];
14
+ }
15
+ /** Each host's node kinds, references and claimable kinds. */
16
+ declare const HOSTS: Readonly<Record<HostName, HostSpec>>;
17
+ /** The family's seven scalar types, spelled as the family spells them. */
18
+ declare const SCALAR_TYPES: readonly ["text", "multiline", "number", "boolean", "enum", "flags", "quality"];
19
+ type ScalarType = typeof SCALAR_TYPES[number];
20
+ /** Every type a value can take. */
21
+ declare const VALUE_TYPES: readonly ["text", "multiline", "number", "boolean", "enum", "flags", "quality", "reference", "record", "map", "list"];
22
+ type ValueType = typeof VALUE_TYPES[number];
23
+ /** A JSON value, as extension data holds it. */
24
+ type JsonValue = null | boolean | number | string | JsonValue[] | {
25
+ [key: string]: JsonValue;
26
+ };
27
+ /**
28
+ * A value's type, with the constraints that belong to it. A target's fields
29
+ * and a record's fields add a name and the editor's words (`FieldDecl`); the
30
+ * `of` of a map or a list is a bare type.
31
+ */
32
+ interface TypeDecl {
33
+ readonly type: string;
34
+ /** An enum's values, or the flags a flags value may hold. */
35
+ readonly values?: readonly string[];
36
+ /** A quality's ladder. */
37
+ readonly stages?: readonly string[];
38
+ /** A quality's renames: every name a stage has had, to the stage it is now. */
39
+ readonly renamedStages?: Readonly<Record<string, string>>;
40
+ /** A reference's node kind. */
41
+ readonly to?: string;
42
+ /** A record's fields. */
43
+ readonly fields?: readonly FieldDecl[];
44
+ /** A map's key. */
45
+ readonly key?: {
46
+ readonly type: string;
47
+ readonly to?: string;
48
+ };
49
+ /** A map's or a list's value type. */
50
+ readonly of?: TypeDecl;
51
+ /** A list's id field: the text field of its records that keys each item. */
52
+ readonly id?: string;
53
+ /** A number's bounds. */
54
+ readonly min?: number;
55
+ readonly max?: number;
56
+ /** One sentence per enum or flags value, or quality stage. Editor only. */
57
+ readonly valueHelp?: Readonly<Record<string, string>>;
58
+ /** Optional in source: the type's own default when absent (`defaultOf`). */
59
+ readonly default?: unknown;
60
+ }
61
+ /** A named field: a target's, or a record's. */
62
+ interface FieldDecl extends TypeDecl {
63
+ readonly name: string;
64
+ readonly label?: string;
65
+ readonly help?: string;
66
+ /** A node of this kind must set it. */
67
+ readonly required?: boolean;
68
+ /** A heading within the extension's group in the editor. */
69
+ readonly group?: string;
70
+ /** Stripped at compile: editor data, never in a bundle. A target's own fields only. */
71
+ readonly editorOnly?: boolean;
72
+ }
73
+ /** A claim on a host field, named through one of the manifest's settings. */
74
+ interface ClaimDecl extends TypeDecl {
75
+ readonly setting: string;
76
+ readonly label?: string;
77
+ readonly help?: string;
78
+ readonly required?: boolean;
79
+ }
80
+ /** What an extension declares for one node kind of one host. */
81
+ interface TargetDecl {
82
+ readonly fields?: readonly FieldDecl[];
83
+ readonly claims?: readonly ClaimDecl[];
84
+ }
85
+ /** A project setting, naming a host field a claim presents. */
86
+ interface SettingDecl {
87
+ readonly name: string;
88
+ readonly label?: string;
89
+ readonly help?: string;
90
+ /** The field name used when the project names none. */
91
+ readonly default: string;
92
+ }
93
+ interface Manifest {
94
+ readonly schema: string;
95
+ readonly id: string;
96
+ readonly name: string;
97
+ readonly version: string;
98
+ readonly docs?: string;
99
+ readonly settings?: readonly SettingDecl[];
100
+ readonly targets: Readonly<Partial<Record<HostName, Readonly<Record<string, TargetDecl>>>>>;
101
+ }
102
+ /** One thing wrong, with where it is. A host words it in its own report shape. */
103
+ interface Problem {
104
+ readonly severity: "error" | "warning";
105
+ /** A stable name for the kind of problem, for tests and quick fixes. */
106
+ readonly code: string;
107
+ /** Where, relative to what was checked: `targets.storylets.card.fields[2].stages`. */
108
+ readonly path: string;
109
+ readonly message: string;
110
+ /** The values a quick fix may offer (an enum's values, the stages either side). */
111
+ readonly options?: readonly string[];
112
+ }
113
+ /** The format-neutral part of an extension data shard. */
114
+ interface ExtensionData {
115
+ readonly extension: string;
116
+ /** By node kind, then node id, then field name. */
117
+ readonly entries: Readonly<Record<string, Readonly<Record<string, Readonly<Record<string, unknown>>>>>>;
118
+ readonly unresolved?: readonly UnresolvedEntry[];
119
+ }
120
+ /** How a three-way merge failed to agree on one value. */
121
+ type ConflictKind = "both-changed" | "delete-vs-edit" | "added-both" | "structural";
122
+ /** One clash, as the reserved `unresolved` key of a merged shard holds it. */
123
+ interface UnresolvedEntry {
124
+ readonly path: string;
125
+ readonly kind: ConflictKind;
126
+ readonly base?: unknown;
127
+ readonly ours?: unknown;
128
+ readonly theirs?: unknown;
129
+ }
130
+
131
+ /** Read a manifest file's text (JSON, or JSON5). Throws on text that will not parse. */
132
+ declare function parseManifest(text: string): Manifest;
133
+ /** Every problem with a manifest, by path. An empty list means it is sound. */
134
+ declare function manifestProblems(manifest: unknown): Problem[];
135
+ /** The host field each of a manifest's settings names, the project's choice
136
+ * first, else the setting's default. */
137
+ declare function settingValues(manifest: Manifest, chosen?: Readonly<Record<string, unknown>>): Record<string, string>;
138
+ /** A claim as a project resolves it: the host field it presents, by name. */
139
+ interface ResolvedClaim {
140
+ readonly extension: string;
141
+ readonly host: HostName;
142
+ readonly kind: string;
143
+ /** The host field's name, through the setting. */
144
+ readonly field: string;
145
+ readonly claim: ClaimDecl;
146
+ }
147
+ /** Every claim of a manifest for one host, resolved through the project's settings. */
148
+ declare function resolvedClaims(manifest: Manifest, host: HostName, chosen?: Readonly<Record<string, unknown>>): ResolvedClaim[];
149
+ /** Two extensions claiming one host field: an error naming both, once per pair. */
150
+ declare function claimClashes(claims: readonly ResolvedClaim[]): Problem[];
151
+ /** One manifest's declarations for one host and node kind, or undefined. */
152
+ declare function targetOf(manifest: Manifest | undefined, host: HostName, kind: string): TargetDecl | undefined;
153
+
154
+ /** What the host knows about its nodes, for references. */
155
+ interface ValueContext {
156
+ /** Does a node of `kind` with `id` exist? Absent, references are not checked
157
+ * (a host checking a manifest's default, say, has no nodes to hand). */
158
+ readonly exists?: (kind: string, id: string) => boolean;
159
+ }
160
+ /** Every problem with `value` as a value of `decl`, paths relative to the value. */
161
+ declare function valueProblems(decl: TypeDecl, value: unknown, ctx?: ValueContext, path?: string): Problem[];
162
+ /** Every problem with one node's entry, against its target. */
163
+ declare function entryProblems(target: TargetDecl, entry: unknown, ctx?: ValueContext, path?: string): Problem[];
164
+ /**
165
+ * A declaration's default: the one it gives, else its type's. A scalar's is
166
+ * the kernel's (`defaultFor`: false, 0, "", the first enum value, no flags,
167
+ * the first stage), a reference's is none (""), a record's is each of its
168
+ * fields' defaults, a map's and a list's are empty.
169
+ */
170
+ declare function defaultOf(decl: TypeDecl): unknown;
171
+ /** A target's fields with every default resolved and the editor's words gone, as a bundle carries them;
172
+ * editor-only fields are left out. */
173
+ declare function compiledTarget(target: TargetDecl): FieldDecl[];
174
+ /**
175
+ * A node's values as a bundle carries them: raw and sparse, with editor-only
176
+ * and undeclared fields left out and renamed stages renamed. Undefined when
177
+ * nothing is left, so a host writes no `extensions` entry for the node.
178
+ */
179
+ declare function compileEntry(target: TargetDecl, entry: Readonly<Record<string, unknown>>): Record<string, unknown> | undefined;
180
+ interface StageRename {
181
+ readonly path: string;
182
+ readonly from: string;
183
+ readonly to: string;
184
+ }
185
+ /** Rename every stage the manifest says was renamed, at any depth. Returns the
186
+ * entry (a new object when anything changed) and the renames made. */
187
+ declare function renameStages(target: TargetDecl, entry: Readonly<Record<string, unknown>>): {
188
+ entry: Record<string, unknown>;
189
+ renames: StageRename[];
190
+ };
191
+
192
+ /**
193
+ * A merge strategy, as data:
194
+ * atomic one value, classic three-way (objects compare by content)
195
+ * map(of) an open string-keyed map, each value merged by `of`
196
+ * set a list of strings as a set: additions union, deletions respected
197
+ * keyed(key, of) a list of objects keyed by the string field `key`; output
198
+ * sorted by key, or in the authored order with `order: "preserve"`
199
+ * object(fields) named keys by their own strategy, every other key by `other`
200
+ * (atomic when absent)
201
+ */
202
+ type Strategy = {
203
+ readonly kind: "atomic";
204
+ } | {
205
+ readonly kind: "map";
206
+ readonly of: Strategy;
207
+ } | {
208
+ readonly kind: "set";
209
+ } | {
210
+ readonly kind: "keyed";
211
+ readonly key: string;
212
+ readonly of: Strategy;
213
+ readonly order?: "sorted" | "preserve";
214
+ readonly renameWarning?: string;
215
+ } | {
216
+ readonly kind: "object";
217
+ readonly fields: Readonly<Record<string, Strategy>>;
218
+ readonly other?: Strategy;
219
+ };
220
+ declare const ATOMIC: Strategy;
221
+ declare const SET: Strategy;
222
+ declare const mapOf: (of: Strategy) => Strategy;
223
+ declare const keyedBy: (key: string, of: Strategy, opts?: {
224
+ order?: "sorted" | "preserve";
225
+ renameWarning?: string;
226
+ }) => Strategy;
227
+ declare const objectOf: (fields: Readonly<Record<string, Strategy>>, other?: Strategy) => Strategy;
228
+ /** One clash; the merged value holds OURS for it. */
229
+ interface Conflict {
230
+ /** The entity key involved (a keyed item's key, a map's key), or "" at the top. */
231
+ readonly id: string;
232
+ /** Where, from the root: `entries.card.c_1.perf.v_ann.look`, `cards[c_1].priority`. */
233
+ readonly path: string;
234
+ readonly base: unknown;
235
+ readonly ours: unknown;
236
+ readonly theirs: unknown;
237
+ readonly kind: ConflictKind;
238
+ }
239
+ /** A note on a merge that went through but that a person should check. */
240
+ interface MergeWarning {
241
+ readonly id: string;
242
+ readonly path: string;
243
+ readonly message: string;
244
+ }
245
+ interface TreeMergeResult {
246
+ readonly merged: unknown;
247
+ readonly conflicts: Conflict[];
248
+ readonly warnings: MergeWarning[];
249
+ }
250
+ interface TreeMergeOptions {
251
+ /** Whether two values say the same thing. Content equality with keys in any
252
+ * order by default; a format whose canonical form is looser passes its own. */
253
+ readonly equal?: (a: unknown, b: unknown) => boolean;
254
+ }
255
+ /** JSON with every object's keys sorted: two values with this text say the same thing. */
256
+ declare function stableStringify(value: unknown): string;
257
+ /** Three-way merge `base`, `ours` and `theirs` by `strategy`. A clash keeps ours. */
258
+ declare function mergeTree(strategy: Strategy, base: unknown, ours: unknown, theirs: unknown, opts?: TreeMergeOptions): TreeMergeResult;
259
+ /** How a value of this type merges (the README's table). */
260
+ declare function strategyForType(decl: TypeDecl): Strategy;
261
+ /** How one node's entry merges: field by field, each by its type. */
262
+ declare function strategyForTarget(target: TargetDecl): Strategy;
263
+ /**
264
+ * How an extension data shard merges for one host. With the manifest, each
265
+ * kind's entries merge node by node and each entry field by field; a kind the
266
+ * manifest does not target, and every kind without the manifest, merges node
267
+ * by node with each entry as one value.
268
+ */
269
+ declare function extensionDataStrategy(manifest: Manifest | undefined, host: HostName): Strategy;
270
+ /** The reserved key a merged shard carries its clashes under. */
271
+ declare const UNRESOLVED_KEY = "unresolved";
272
+ /** A shard's mark, when it carries one. */
273
+ declare function unresolvedOf(shard: unknown): readonly UnresolvedEntry[] | undefined;
274
+ /** A shard without its mark, for merging and for comparing content. */
275
+ declare function withoutMark<T>(shard: T): T;
276
+ /**
277
+ * Write a merge's clashes into the merged shard under `unresolved`, carrying
278
+ * any mark either side already had (a mark is a set by path: one side
279
+ * resolving it, by removing it, resolves it). A clash found now replaces a
280
+ * carried one at the same path. With nothing to mark, the key is absent.
281
+ */
282
+ declare function markUnresolved<T extends Record<string, unknown>>(merged: T, conflicts: readonly Conflict[], sides?: {
283
+ base?: unknown;
284
+ ours?: unknown;
285
+ theirs?: unknown;
286
+ }): T;
287
+ /** Validation's refusal of a marked shard: one error per clash, or one for an empty mark. */
288
+ declare function unresolvedProblems(shard: unknown): Problem[];
289
+ interface DataMergeResult {
290
+ /** The merged shard: ours where it clashed, with the mark written in. */
291
+ readonly merged: Record<string, unknown>;
292
+ readonly conflicts: Conflict[];
293
+ readonly warnings: MergeWarning[];
294
+ }
295
+ /**
296
+ * Three-way merge of one extension data shard. `manifest` is the project's copy,
297
+ * read from the working tree, or undefined when it is missing, unreadable or
298
+ * itself in conflict, which merges each node's entry as one value: always safe.
299
+ * The shard's other keys (a format's schema tag, the extension id) merge as values.
300
+ */
301
+ declare function mergeExtensionData(base: Record<string, unknown>, ours: Record<string, unknown>, theirs: Record<string, unknown>, opts: {
302
+ manifest?: Manifest;
303
+ host: HostName;
304
+ } & TreeMergeOptions): DataMergeResult;
305
+ /** Entries naming a node the host no longer has: kept, and reported as warnings. */
306
+ declare function orphanedEntries(data: unknown, exists: (kind: string, id: string) => boolean): Problem[];
307
+
308
+ /** `base` and then the key `key`. */
309
+ declare const atKey: (base: string, key: string) => string;
310
+ /** `base` and then list position `i`. */
311
+ declare const atIndex: (base: string, i: number) => string;
312
+
313
+ export { ATOMIC, type ClaimDecl, type Conflict, type ConflictKind, type DataMergeResult, type ExtensionData, type FieldDecl, HOSTS, type HostName, type HostSpec, type JsonValue, MANIFEST_FILE_SUFFIX, MANIFEST_SCHEMA, type Manifest, type MergeWarning, type Problem, type ResolvedClaim, SCALAR_TYPES, SET, type ScalarType, type SettingDecl, type StageRename, type Strategy, type TargetDecl, type TreeMergeOptions, type TreeMergeResult, type TypeDecl, UNRESOLVED_KEY, type UnresolvedEntry, VALUE_TYPES, type ValueContext, type ValueType, atIndex, atKey, claimClashes, compileEntry, compiledTarget, defaultOf, entryProblems, extensionDataStrategy, keyedBy, manifestProblems, mapOf, markUnresolved, mergeExtensionData, mergeTree, objectOf, orphanedEntries, parseManifest, renameStages, resolvedClaims, settingValues, stableStringify, strategyForTarget, strategyForType, targetOf, unresolvedOf, unresolvedProblems, valueProblems, withoutMark };