@wildwinter/toolkit 0.2.7 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/conformance/extensions/defaults.json +1 -1
- package/conformance/extensions/manifest.json +321 -172
- package/conformance/extensions/values.json +0 -86
- package/dist/extensions.cjs +74 -132
- package/dist/extensions.cjs.map +1 -1
- package/dist/extensions.d.cts +10 -48
- package/dist/extensions.d.ts +10 -48
- package/dist/extensions.js +74 -129
- package/dist/extensions.js.map +1 -1
- package/extensions.md +28 -25
- package/package.json +1 -1
package/dist/extensions.cjs.map
CHANGED
|
@@ -1 +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\", \"pick\", \"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 pick's sources, in the order its choices are shown. */\n readonly from?: readonly PickSource[];\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/**\n * Where a pick's choices come from: fixed words, the nodes of a reference kind (by id, as a reference holds\n * them), or a list of text on the extension's own project node, by that field's name.\n */\nexport type PickSource =\n | { readonly words: readonly string[] }\n | { readonly to: string }\n | { readonly list: string };\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 /** Views the extension's installed package supplies (tier 2), each a web component a host opens in a window. */\n readonly views?: readonly ViewDecl[];\n /** Other extensions whose data this one's views read, by id. */\n readonly reads?: readonly string[];\n}\n\n/** A view: a web component in the extension's installed package, opened by a host in a floating window. */\nexport interface ViewDecl {\n /** Lower case, digits and hyphens, unique within the manifest. */\n readonly id: string;\n /** The window's title and the menu item. */\n readonly name: string;\n /** The component's script, a relative path within the package, such as `view/sheet.js`. */\n readonly entry: string;\n /** The custom element the script defines, such as `pattershot-sheet`. */\n readonly element: string;\n /** The hosts that offer it; every host the manifest targets when absent. */\n readonly hosts?: readonly HostName[];\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, PickSource, Problem, TargetDecl, TypeDecl } from \"./types.js\";\n\n/** What the host knows about its nodes, for references, and about the extension's project lists, for picks. */\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 /** The entries of a list of text on the extension's own project node, by field name (`pickLists`), for a\n * pick's `list` source. Absent, list sources are not checked. */\n readonly list?: (name: string) => readonly string[] | undefined;\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 \"pick\": {\n if (typeof value !== \"string\") { wrong(\"one of its choices, as text\"); break; }\n if (value === \"\") break; // automatic\n const sources = decl.from ?? [];\n const holding = sources.filter((s) => sourceHolds(s, value, ctx) === true);\n if (holding.length > 1) {\n out.push({ severity: \"warning\", code: \"pick-ambiguous\", path,\n message: `${where(path)} is \"${value}\", which is ${holding.map(sourceWord).join(\" and \")}` });\n } else if (holding.length === 0 && sources.every((s) => sourceHolds(s, value, ctx) !== undefined)) {\n out.push(err(\"not-a-choice\", path, `${where(path)} is \"${value}\", which is not one of its choices`));\n }\n break;\n }\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// --- picks ----------------------------------------------------------------------\n\n/** Does one source hold `value`? Undefined when the context can't say (no nodes or lists to hand). */\nfunction sourceHolds(source: PickSource, value: string, ctx: ValueContext): boolean | undefined {\n if (\"words\" in source) return Array.isArray(source.words) && source.words.includes(value);\n if (\"to\" in source) return ctx.exists === undefined ? undefined : ctx.exists(source.to, value);\n if (\"list\" in source) return ctx.list === undefined ? undefined : (ctx.list(source.list) ?? []).includes(value);\n return false;\n}\n\n/** A source in words, for a message: \"a fixed word\", \"a cast member\", \"an entry of the list \"moods\"\". */\nfunction sourceWord(source: PickSource): string {\n if (\"words\" in source) return \"a fixed word\";\n if (\"to\" in source) return source.to === \"cast\" ? \"a cast member\" : `a ${source.to}`;\n return `an entry of the list \"${source.list}\"`;\n}\n\n/** What a host offers a pick: the nodes of a reference kind, and the extension's project lists. */\nexport interface PickSources {\n /** The nodes of `kind`, by id, with the name the author knows each by (the id when absent). */\n readonly nodes?: (kind: string) => readonly { readonly id: string; readonly label?: string }[];\n /** As `ValueContext.list`. */\n readonly list?: (name: string) => readonly string[] | undefined;\n}\n\n/** One choice of a pick: the text a value holds, the name it is shown by, and where it comes from. */\nexport interface PickChoice {\n readonly value: string;\n readonly label: string;\n readonly source: PickSource;\n}\n\n/**\n * Every choice a pick offers, source by source in its declared order, each source's own in its order. A name\n * in two sources appears under each (`pickClashes` reports it); an empty entry is left out, as empty means\n * automatic.\n */\nexport function pickChoices(decl: TypeDecl, src: PickSources): PickChoice[] {\n const out: PickChoice[] = [];\n for (const source of decl.from ?? []) {\n if (\"words\" in source) {\n for (const w of source.words ?? []) if (typeof w === \"string\" && w !== \"\") out.push({ value: w, label: w, source });\n } else if (\"to\" in source) {\n for (const n of src.nodes?.(source.to) ?? []) if (n.id !== \"\") out.push({ value: n.id, label: n.label ?? n.id, source });\n } else if (\"list\" in source) {\n for (const e of src.list?.(source.list) ?? []) if (e !== \"\") out.push({ value: e, label: e, source });\n }\n }\n return out;\n}\n\n/**\n * A pick's names that more than one of its sources holds (a character and a point of interest both called\n * Gate): a warning each, once, for the project; each value naming one has its own from `valueProblems`.\n */\nexport function pickClashes(decl: TypeDecl, src: PickSources, path = \"\"): Problem[] {\n const by = new Map<string, PickSource[]>();\n for (const c of pickChoices(decl, src)) {\n const held = by.get(c.value) ?? [];\n if (!held.includes(c.source)) held.push(c.source);\n by.set(c.value, held);\n }\n const out: Problem[] = [];\n for (const [name, sources] of by) {\n if (sources.length < 2) continue;\n out.push({ severity: \"warning\", code: \"pick-clash\", path, options: [name],\n message: `\"${name}\" is ${sources.map(sourceWord).join(\" and \")}, so a value naming it is ambiguous` });\n }\n return out;\n}\n\n/**\n * The lists of text a pick's `list` sources name, read off the extension's project entry: each a list field of\n * the extension's `project` target holding text, the entry's own value else the field's default. Undefined for a\n * name that is no such field.\n */\nexport function pickLists(projectTarget: TargetDecl | undefined, projectEntry: Readonly<Record<string, unknown>> | undefined): (name: string) => readonly string[] | undefined {\n return (name) => {\n const field = (projectTarget?.fields ?? []).find((f) => f.name === name);\n if (field === undefined || !isTextList(field)) return undefined;\n const held = projectEntry !== undefined && own(projectEntry, name) ? projectEntry[name] : undefined;\n const value = Array.isArray(held) ? held : defaultOf(field);\n return Array.isArray(value) ? value.filter((v): v is string => typeof v === \"string\") : [];\n };\n}\n\n/** A list without ids holding text: what a pick's `list` source names. */\nexport function isTextList(decl: TypeDecl): boolean {\n return decl.type === \"list\" && decl.id === undefined && decl.of?.type === \"text\";\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 \"pick\": 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, ViewDecl } from \"./types.js\";\nimport { isTextList, 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\", \"from\", \"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\", \"views\", \"reads\"]);\nconst VIEW_KEYS = new Set([\"id\", \"name\", \"entry\", \"element\", \"hosts\"]);\n/** A custom element name: lower case, starting with a letter, with a hyphen. */\nconst ELEMENT = /^[a-z][a-z0-9._]*-[a-z0-9._-]*$/;\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 viewsProblems(m[\"views\"], m[\"targets\"], out);\n readsProblems(m[\"reads\"], m[\"id\"], 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 pickListProblems(kinds, hostPath, out);\n }\n return out;\n}\n\n/** A pick's fixed words, across its `words` sources: what its value help may describe. */\nfunction pickWords(from: unknown): string[] {\n if (!Array.isArray(from)) return [];\n return from.flatMap((s: unknown) => (isObject(s) && Array.isArray(s[\"words\"]) ? s[\"words\"].filter((w): w is string => typeof w === \"string\") : []));\n}\n\n/** A pick's `from`: a list of sources, each exactly one of `words`, `to` and `list`. */\nfunction pickSourcesSound(host: HostName, from: unknown, path: string, out: Problem[]): boolean {\n if (!Array.isArray(from) || from.length === 0) {\n out.push(err(\"pick-from\", path, \"a pick lists its sources in \\\"from\\\": { \\\"words\\\": [...] }, { \\\"to\\\": a node kind }, or { \\\"list\\\": a project list }\"));\n return false;\n }\n let sound = true;\n from.forEach((s: unknown, i) => {\n const at = atIndex(path, i);\n const keys = isObject(s) ? Object.keys(s).filter((k) => k === \"words\" || k === \"to\" || k === \"list\") : [];\n if (!isObject(s) || keys.length !== 1) {\n out.push(err(\"pick-source\", at, \"a source is one of { \\\"words\\\": [...] }, { \\\"to\\\": a node kind }, { \\\"list\\\": a project list }\"));\n sound = false;\n return;\n }\n unknownKeys(s, new Set(keys), at, out);\n if (keys[0] === \"words\") {\n const words = s[\"words\"];\n const seen = new Set<string>();\n if (!Array.isArray(words) || words.length === 0) { out.push(err(\"pick-words\", atKey(at, \"words\"), \"fixed words are a list of at least one\")); sound = false; return; }\n words.forEach((w, j) => {\n if (typeof w !== \"string\" || w.trim() === \"\") { out.push(err(\"value-empty\", atIndex(atKey(at, \"words\"), j), \"a word has a name\")); sound = false; }\n else if (seen.has(w)) { out.push(err(\"value-duplicate\", atIndex(atKey(at, \"words\"), j), `\"${w}\" is listed twice`)); sound = false; }\n else seen.add(w);\n });\n } else if (keys[0] === \"to\") {\n if (typeof s[\"to\"] !== \"string\" || !HOSTS[host].references.includes(s[\"to\"])) {\n out.push(err(\"reference-to\", atKey(at, \"to\"), `a source's nodes are of a kind, one of ${HOSTS[host].references.join(\", \")}`));\n sound = false;\n }\n } else if (typeof s[\"list\"] !== \"string\" || !NAME.test(s[\"list\"])) {\n out.push(err(\"pick-list\", atKey(at, \"list\"), \"a list source names a field of the extension's project node\"));\n sound = false;\n }\n });\n return sound;\n}\n\n/** Each pick's `list` sources against the extension's project target: a list of text the project node holds. */\nfunction pickListProblems(kinds: Record<string, unknown>, hostPath: string, out: Problem[]): void {\n const project = isObject(kinds[\"project\"]) && Array.isArray(kinds[\"project\"][\"fields\"]) ? kinds[\"project\"][\"fields\"] as unknown[] : [];\n const lists = new Set(project.filter((f): f is FieldDecl => isObject(f) && isTextList(f as unknown as TypeDecl)).map((f) => f.name));\n const walk = (decl: unknown, path: string): void => {\n if (!isObject(decl)) return;\n const d = decl as unknown as TypeDecl;\n if (d.type === \"pick\" && Array.isArray(d.from)) {\n d.from.forEach((s, i) => {\n if (isObject(s) && typeof (s as { list?: unknown }).list === \"string\" && !lists.has((s as { list: string }).list)) {\n const name = (s as { list: string }).list;\n out.push(err(\"pick-list\", atKey(atIndex(atKey(path, \"from\"), i), \"list\"),\n `\"${name}\" is not a list of text on the extension's project node; declare it there, as { \"name\": \"${name}\", \"type\": \"list\", \"of\": { \"type\": \"text\" } }`));\n }\n });\n }\n if (Array.isArray(d.fields)) d.fields.forEach((f, i) => walk(f, atIndex(atKey(path, \"fields\"), i)));\n if (d.of !== undefined) walk(d.of, atKey(path, \"of\"));\n };\n for (const [kind, target] of Object.entries(kinds)) {\n if (!isObject(target) || !Array.isArray(target[\"fields\"])) continue;\n (target[\"fields\"] as unknown[]).forEach((f, i) => walk(f, atIndex(atKey(atKey(hostPath, kind), \"fields\"), i)));\n }\n}\n\n/** A package path a view's entry may name: relative, forward slashes, no `.` or `..` segment, a `.js` file. */\nexport function isViewEntry(entry: unknown): entry is string {\n if (typeof entry !== \"string\" || !entry.endsWith(\".js\") || entry.includes(\"\\\\\")) return false;\n const parts = entry.split(\"/\");\n return parts.every((p) => p !== \"\" && p !== \".\" && p !== \"..\");\n}\n\nfunction viewsProblems(views: unknown, targets: unknown, out: Problem[]): void {\n if (views === undefined) return;\n if (!Array.isArray(views)) { out.push(err(\"not-a-list\", \"views\", \"views are a list\")); return; }\n const ids = new Set<string>();\n const elements = new Set<string>();\n const targeted = isObject(targets) ? Object.keys(targets) : [];\n views.forEach((v: unknown, i) => {\n const at = atIndex(\"views\", i);\n if (!isObject(v)) { out.push(err(\"not-an-object\", at, \"a view is an object\")); return; }\n unknownKeys(v, VIEW_KEYS, at, out);\n const id = v[\"id\"];\n if (typeof id !== \"string\" || !ID.test(id)) out.push(err(\"view-id\", atKey(at, \"id\"), \"a view's id is lower case letters, digits and hyphens, starting with a letter\"));\n else if (ids.has(id)) out.push(err(\"view-duplicate\", atKey(at, \"id\"), `two views are called \"${id}\"`));\n else ids.add(id);\n if (typeof v[\"name\"] !== \"string\" || v[\"name\"].trim() === \"\") out.push(err(\"view-name\", atKey(at, \"name\"), \"a view has a name, shown as its window's title\"));\n if (!isViewEntry(v[\"entry\"])) {\n out.push(err(\"view-entry\", atKey(at, \"entry\"), \"a view's entry is a .js file in the extension's package, as a relative path such as view/sheet.js\"));\n }\n const element = v[\"element\"];\n if (typeof element !== \"string\" || !ELEMENT.test(element)) {\n out.push(err(\"view-element\", atKey(at, \"element\"), \"a view's element is a custom element name: lower case, starting with a letter, with a hyphen, such as probe-view\"));\n } else if (elements.has(element)) out.push(err(\"view-duplicate\", atKey(at, \"element\"), `two views define <${element}>`));\n else elements.add(element);\n const hosts = v[\"hosts\"];\n if (hosts === undefined) return;\n if (!Array.isArray(hosts) || hosts.length === 0) { out.push(err(\"view-hosts\", atKey(at, \"hosts\"), \"a view's hosts are a list of at least one host\")); return; }\n hosts.forEach((h: unknown, j) => {\n const hp = atIndex(atKey(at, \"hosts\"), j);\n if (typeof h !== \"string\" || !own(HOSTS, h)) out.push(err(\"unknown-host\", hp, `${JSON.stringify(h)} is not a host; a view opens in \"patter\" or \"storylets\"`));\n else if (!targeted.includes(h)) out.push({ severity: \"warning\", code: \"view-host-untargeted\", path: hp, message: `the view opens in ${h}, but the manifest targets nothing there` });\n });\n });\n}\n\nfunction readsProblems(reads: unknown, self: unknown, out: Problem[]): void {\n if (reads === undefined) return;\n if (!Array.isArray(reads)) { out.push(err(\"not-a-list\", \"reads\", \"reads is a list of extension ids\")); return; }\n const seen = new Set<string>();\n reads.forEach((r: unknown, i) => {\n const at = atIndex(\"reads\", i);\n if (typeof r !== \"string\" || !ID.test(r)) out.push(err(\"reads-id\", at, \"an extension read is named by its id: lower case letters, digits and hyphens\"));\n else if (r === self) out.push({ severity: \"warning\", code: \"reads-self\", path: at, message: \"an extension always reads its own data; this entry is ignored\" });\n else if (seen.has(r)) out.push(err(\"reads-duplicate\", at, `\"${r}\" is listed twice`));\n else seen.add(r);\n });\n}\n\n/** The views a host offers from a manifest: those naming the host, or every view when it names none and the\n * manifest targets the host. A view that fails its checks is left out. */\nexport function viewsFor(manifest: Manifest, host: HostName): ViewDecl[] {\n const targeted = Object.keys(manifest.targets ?? {});\n return (Array.isArray(manifest.views) ? manifest.views : []).filter((v) =>\n isObject(v) && typeof v.id === \"string\" && ID.test(v.id) && typeof v.name === \"string\" && isViewEntry(v.entry)\n && typeof v.element === \"string\" && ELEMENT.test(v.element)\n && (v.hosts === undefined ? targeted.includes(host) : Array.isArray(v.hosts) && v.hosts.includes(host)));\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, true);\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/**\n * A declaration's type and constraints. `named` is false for a map's or a list's bare `of`. `claim` is true for\n * a claim on a host field, which may leave out an enum's or flags' values and a quality's stages: the host's\n * declaration then gives them (`effectiveClaim`), and its value help may describe values the host does not\n * declare, which are simply unused.\n */\nfunction typeProblems(host: HostName, decl: TypeDecl, path: string, named: boolean, out: Problem[], claim = false): 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 (claim && values === undefined) break;\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 if (claim && decl.stages === undefined) break;\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 \"pick\":\n if (!pickSourcesSound(host, decl.from, at(\"from\"), out)) sound = false;\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 && claim) {\n if (!isObject(decl.valueHelp) || !([\"enum\", \"flags\", \"quality\"] as const).includes(decl.type as \"enum\")) {\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 }\n } else if (decl.valueHelp !== undefined) {\n const vocabulary = decl.type === \"quality\" ? decl.stages : decl.type === \"enum\" || decl.type === \"flags\" ? decl.values\n : decl.type === \"pick\" ? pickWords(decl.from) : 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, a quality's stages, or a pick's words\"));\n } else {\n for (const k of Object.keys(decl.valueHelp)) {\n if (!vocabulary.includes(k)) {\n out.push(err(\"value-help\", atKey(at(\"valueHelp\"), k), decl.type === \"pick\"\n ? `\"${k}\" is not one of its words: value help describes a pick's fixed words, never the project's lists or nodes`\n : `\"${k}\" is not one of its values`));\n }\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/**\n * A claim as a host draws and checks its field: the claim's label, help, value help and constraints, over the\n * host's own declaration for what the claim leaves out (an enum's or flags' values, a quality's stages, the\n * default). The host's vocabulary stands when the claim names none, as the host's ladder always does.\n */\nexport function effectiveClaim<C extends ClaimDecl>(\n claim: C, hostDecl: { readonly type?: string; readonly values?: readonly string[]; readonly stages?: readonly string[]; readonly default?: unknown },\n): C {\n return {\n ...claim,\n ...(claim.values === undefined && hostDecl.values !== undefined ? { values: hostDecl.values } : {}),\n ...(claim.stages === undefined && hostDecl.stages !== undefined ? { stages: hostDecl.stages } : {}),\n ...(claim.default === undefined && hostDecl.default !== undefined ? { default: hostDecl.default } : {}),\n };\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 * comments a list of comment threads, merged message by message\n * (`mergeComments`)\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 | { readonly kind: \"comments\" };\n\nexport const ATOMIC: Strategy = { kind: \"atomic\" };\nexport const SET: Strategy = { kind: \"set\" };\nexport const COMMENTS: Strategy = { kind: \"comments\" };\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\":\n case \"comments\": 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 case \"comments\":\n return mergeThreads(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// --- comment threads ---------------------------------------------------------------\n\n/**\n * Three-way merge two lists of comment threads, the shape both families'\n * comments share: `{ id, messages: [{ author, ts, body, deleted? }], resolved?,\n * ...}`. Lifted from Patter's merge (patterkit design/family-parity-2026-10.md\n * item 5), where a thread merged whole made two replies to one thread clash.\n *\n * - Messages are keyed by author and timestamp, and are the union of both\n * sides', oldest first. A withdrawn message (a tombstone: body emptied,\n * `deleted` set) stays withdrawn whichever side withdrew it, and a message a\n * side removed outright, or lost with its whole thread, counts as withdrawn\n * by that side. One message edited two ways is a clash that keeps ours.\n * - A thread's other fields (its anchor, its marker, `resolved`) merge one by\n * one, a field changed two ways being a clash; a thread one side removed\n * takes the other side's.\n * - A thread with nothing readable left goes, as the editors drop it.\n *\n * Threads come back oldest first, by their first message, then by id.\n */\nexport function mergeComments(base: unknown, ours: unknown, theirs: unknown, opts?: TreeMergeOptions): TreeMergeResult {\n return mergeTree(COMMENTS, base, ours, theirs, opts);\n}\n\ntype Thread = Record<string, unknown>;\n\nfunction mergeThreads(B: unknown[], O: unknown[], T: unknown[], path: string, ctx: Ctx): unknown[] {\n const index = (arr: unknown[]): Map<string, Thread> => {\n const m = new Map<string, Thread>();\n for (const c of arr) if (isObject(c) && typeof c[\"id\"] === \"string\") m.set(c[\"id\"], c);\n return m;\n };\n const Bm = index(B), Om = index(O), Tm = index(T);\n const out: Thread[] = [];\n for (const id of new Set([...Bm.keys(), ...Om.keys(), ...Tm.keys()])) {\n const b = Bm.get(id), o = Om.get(id), t = Tm.get(id);\n const here = `${path}[${id}]`;\n if (o === undefined && t === undefined) continue; // gone on both sides\n // An entry with no messages anywhere (a comment from before threads) has nothing inside to merge.\n if (![b, o, t].some((c) => Array.isArray(c?.[\"messages\"]))) {\n const v = o !== undefined && t !== undefined ? merge3(b, o, t, id, here, ctx)\n : (b !== undefined && ctx.eq(o ?? t, b) ? undefined : o ?? t);\n if (isObject(v)) out.push(v);\n continue;\n }\n const messages = mergeMessages(b, o, t, id, here, ctx);\n if (messages.length === 0 || messages.every((m) => m[\"deleted\"] === true)) continue;\n // The thread's own fields: one by one when both sides have it, else the side that does.\n const fields: Thread = {};\n if (o !== undefined && t !== undefined) {\n const B0 = b ?? {};\n const flag = (c: Thread, k: string): unknown => (k === \"resolved\" ? (c[k] === true ? true : undefined) : c[k]);\n for (const k of new Set([...Object.keys(o), ...Object.keys(t), ...Object.keys(B0)])) {\n if (k === \"messages\") continue;\n const v = merge3(flag(B0, k), flag(o, k), flag(t, k), id, `${here}.${k}`, ctx);\n if (v !== undefined) fields[k] = v;\n }\n } else {\n for (const [k, v] of Object.entries((o ?? t)!)) if (k !== \"messages\") fields[k] = v;\n }\n out.push({ ...fields, messages });\n }\n const first = (c: Thread): string => {\n const m = asArr(c[\"messages\"])[0];\n return isObject(m) && typeof m[\"ts\"] === \"string\" ? m[\"ts\"] : \"\";\n };\n return out.sort((x, y) => first(x).localeCompare(first(y)) || String(x[\"id\"]).localeCompare(String(y[\"id\"])));\n}\n\nfunction mergeMessages(b: Thread | undefined, o: Thread | undefined, t: Thread | undefined, id: string, here: string, ctx: Ctx): Thread[] {\n const keyOf = (m: Thread): string => `${String(m[\"author\"] ?? \"\")}|${String(m[\"ts\"] ?? \"\")}`;\n const index = (c: Thread | undefined): Map<string, Thread> => {\n const m = new Map<string, Thread>();\n for (const x of asArr(c?.[\"messages\"])) if (isObject(x)) m.set(keyOf(x), x);\n return m;\n };\n const Bm = index(b), Om = index(o), Tm = index(t);\n const out: Thread[] = [];\n for (const k of new Set([...Bm.keys(), ...Om.keys(), ...Tm.keys()])) {\n const mb = Bm.get(k), mo = Om.get(k), mt = Tm.get(k);\n // Withdrawn on either side, or missing from a side that had it at the base.\n if ([mb, mo, mt].some((m) => m?.[\"deleted\"] === true) || (mb !== undefined && (mo === undefined || mt === undefined))) {\n out.push({ ...(mo ?? mt ?? mb)!, body: \"\", deleted: true });\n } else if (mo !== undefined && mt !== undefined) {\n out.push(merge3(mb, mo, mt, id, `${here}.messages[${k}]`, ctx) as Thread);\n } else {\n out.push((mo ?? mt)!);\n }\n }\n const ts = (m: Thread): string => String(m[\"ts\"] ?? \"\");\n return out.sort((x, y) => ts(x).localeCompare(ts(y)) || String(x[\"author\"] ?? \"\").localeCompare(String(y[\"author\"] ?? \"\")));\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"]}
|
|
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}\n\n/** Each host's node kinds and references. */\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 },\n storylets: {\n kinds: [\"box\", \"tagGroup\", \"tag\", \"deck\", \"card\", \"outcome\", \"handTemplate\", \"hand\", \"project\"],\n references: [\"box\", \"deck\", \"card\", \"outcome\", \"tag\"],\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\", \"pick\", \"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 pick's sources, in the order its choices are shown. */\n readonly from?: readonly PickSource[];\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/**\n * Where a pick's choices come from: fixed words, the nodes of a reference kind (by id, as a reference holds\n * them), or a list of text on the extension's own project node, by that field's name.\n */\nexport type PickSource =\n | { readonly words: readonly string[] }\n | { readonly to: string }\n | { readonly list: string };\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 /** One of the manifest's views, by id, that edits this field in the hosts it opens in: a target's own map of\n * records only. */\n readonly editor?: string;\n}\n\n/** What an extension declares for one node kind of one host. */\nexport interface TargetDecl {\n readonly fields?: readonly FieldDecl[];\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 targets: Readonly<Partial<Record<HostName, Readonly<Record<string, TargetDecl>>>>>;\n /** Views the extension's installed package supplies (tier 2), each a web component a host opens in a window. */\n readonly views?: readonly ViewDecl[];\n /** Other extensions whose data this one's views read, by id. */\n readonly reads?: readonly string[];\n /** Other extensions a project must take for this one to work, by id. */\n readonly requires?: readonly string[];\n}\n\n/** A view: a web component in the extension's installed package, opened by a host in a floating window. */\nexport interface ViewDecl {\n /** Lower case, digits and hyphens, unique within the manifest. */\n readonly id: string;\n /** The window's title and the menu item. */\n readonly name: string;\n /** The component's script, a relative path within the package, such as `view/sheet.js`. */\n readonly entry: string;\n /** The custom element the script defines, such as `pattershot-sheet`. */\n readonly element: string;\n /** The hosts that offer it; every host the manifest targets when absent. */\n readonly hosts?: readonly HostName[];\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, PickSource, Problem, TargetDecl, TypeDecl } from \"./types.js\";\n\n/** What the host knows about its nodes, for references, and about the extension's project lists, for picks. */\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 /** The entries of a list of text on the extension's own project node, by field name (`pickLists`), for a\n * pick's `list` source. Absent, list sources are not checked. */\n readonly list?: (name: string) => readonly string[] | undefined;\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 \"pick\": {\n if (typeof value !== \"string\") { wrong(\"one of its choices, as text\"); break; }\n if (value === \"\") break; // automatic\n const sources = decl.from ?? [];\n const holding = sources.filter((s) => sourceHolds(s, value, ctx) === true);\n if (holding.length > 1) {\n out.push({ severity: \"warning\", code: \"pick-ambiguous\", path,\n message: `${where(path)} is \"${value}\", which is ${holding.map(sourceWord).join(\" and \")}` });\n } else if (holding.length === 0 && sources.every((s) => sourceHolds(s, value, ctx) !== undefined)) {\n out.push(err(\"not-a-choice\", path, `${where(path)} is \"${value}\", which is not one of its choices`));\n }\n break;\n }\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// --- picks ----------------------------------------------------------------------\n\n/** Does one source hold `value`? Undefined when the context can't say (no nodes or lists to hand). */\nfunction sourceHolds(source: PickSource, value: string, ctx: ValueContext): boolean | undefined {\n if (\"words\" in source) return Array.isArray(source.words) && source.words.includes(value);\n if (\"to\" in source) return ctx.exists === undefined ? undefined : ctx.exists(source.to, value);\n if (\"list\" in source) return ctx.list === undefined ? undefined : (ctx.list(source.list) ?? []).includes(value);\n return false;\n}\n\n/** A source in words, for a message: \"a fixed word\", \"a cast member\", \"an entry of the list \"moods\"\". */\nfunction sourceWord(source: PickSource): string {\n if (\"words\" in source) return \"a fixed word\";\n if (\"to\" in source) return source.to === \"cast\" ? \"a cast member\" : `a ${source.to}`;\n return `an entry of the list \"${source.list}\"`;\n}\n\n/** What a host offers a pick: the nodes of a reference kind, and the extension's project lists. */\nexport interface PickSources {\n /** The nodes of `kind`, by id, with the name the author knows each by (the id when absent). */\n readonly nodes?: (kind: string) => readonly { readonly id: string; readonly label?: string }[];\n /** As `ValueContext.list`. */\n readonly list?: (name: string) => readonly string[] | undefined;\n}\n\n/** One choice of a pick: the text a value holds, the name it is shown by, and where it comes from. */\nexport interface PickChoice {\n readonly value: string;\n readonly label: string;\n readonly source: PickSource;\n}\n\n/**\n * Every choice a pick offers, source by source in its declared order, each source's own in its order. A name\n * in two sources appears under each (`pickClashes` reports it); an empty entry is left out, as empty means\n * automatic.\n */\nexport function pickChoices(decl: TypeDecl, src: PickSources): PickChoice[] {\n const out: PickChoice[] = [];\n for (const source of decl.from ?? []) {\n if (\"words\" in source) {\n for (const w of source.words ?? []) if (typeof w === \"string\" && w !== \"\") out.push({ value: w, label: w, source });\n } else if (\"to\" in source) {\n for (const n of src.nodes?.(source.to) ?? []) if (n.id !== \"\") out.push({ value: n.id, label: n.label ?? n.id, source });\n } else if (\"list\" in source) {\n for (const e of src.list?.(source.list) ?? []) if (e !== \"\") out.push({ value: e, label: e, source });\n }\n }\n return out;\n}\n\n/**\n * A pick's names that more than one of its sources holds (a character and a point of interest both called\n * Gate): a warning each, once, for the project; each value naming one has its own from `valueProblems`.\n */\nexport function pickClashes(decl: TypeDecl, src: PickSources, path = \"\"): Problem[] {\n const by = new Map<string, PickSource[]>();\n for (const c of pickChoices(decl, src)) {\n const held = by.get(c.value) ?? [];\n if (!held.includes(c.source)) held.push(c.source);\n by.set(c.value, held);\n }\n const out: Problem[] = [];\n for (const [name, sources] of by) {\n if (sources.length < 2) continue;\n out.push({ severity: \"warning\", code: \"pick-clash\", path, options: [name],\n message: `\"${name}\" is ${sources.map(sourceWord).join(\" and \")}, so a value naming it is ambiguous` });\n }\n return out;\n}\n\n/**\n * The lists of text a pick's `list` sources name, read off the extension's project entry: each a list field of\n * the extension's `project` target holding text, the entry's own value else the field's default. Undefined for a\n * name that is no such field.\n */\nexport function pickLists(projectTarget: TargetDecl | undefined, projectEntry: Readonly<Record<string, unknown>> | undefined): (name: string) => readonly string[] | undefined {\n return (name) => {\n const field = (projectTarget?.fields ?? []).find((f) => f.name === name);\n if (field === undefined || !isTextList(field)) return undefined;\n const held = projectEntry !== undefined && own(projectEntry, name) ? projectEntry[name] : undefined;\n const value = Array.isArray(held) ? held : defaultOf(field);\n return Array.isArray(value) ? value.filter((v): v is string => typeof v === \"string\") : [];\n };\n}\n\n/** A list without ids holding text: what a pick's `list` source names. */\nexport function isTextList(decl: TypeDecl): boolean {\n return decl.type === \"list\" && decl.id === undefined && decl.of?.type === \"text\";\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 \"pick\": 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, VALUE_TYPES } from \"./types.js\";\nimport type { FieldDecl, HostName, Manifest, Problem, TargetDecl, TypeDecl, ViewDecl } from \"./types.js\";\nimport { isTextList, 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\", \"from\", \"fields\", \"key\", \"of\", \"id\", \"min\", \"max\", \"valueHelp\", \"default\"];\nconst FIELD_KEYS = new Set([...TYPE_KEYS, \"name\", \"label\", \"help\", \"required\", \"group\", \"editorOnly\", \"editor\"]);\nconst BARE_KEYS = new Set(TYPE_KEYS);\nconst MANIFEST_KEYS = new Set([\"schema\", \"id\", \"name\", \"version\", \"docs\", \"targets\", \"views\", \"reads\", \"requires\"]);\n/** Keys the spec once had and has since removed: warned of by name, with what to do instead, and ignored. */\nconst REMOVED_MANIFEST_KEYS: Readonly<Record<string, string>> = {\n settings: \"settings were removed with claims; declare the extension's own fields, or a project field for a project-wide value\",\n};\nconst REMOVED_TARGET_KEYS: Readonly<Record<string, string>> = {\n claims: \"claims on host fields were removed; declare a field of the extension's own, which the runtimes hand the game\",\n};\nconst VIEW_KEYS = new Set([\"id\", \"name\", \"entry\", \"element\", \"hosts\"]);\n/** A custom element name: lower case, starting with a letter, with a hyphen. */\nconst ELEMENT = /^[a-z][a-z0-9._]*-[a-z0-9._-]*$/;\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, REMOVED_MANIFEST_KEYS);\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 viewsProblems(m[\"views\"], m[\"targets\"], out);\n readsProblems(m[\"reads\"], m[\"id\"], out);\n requiresProblems(m[\"requires\"], m[\"id\"], 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, target, kindPath, out);\n }\n pickListProblems(kinds, hostPath, out);\n editorProblems(host as HostName, kinds, m[\"views\"], Object.keys(targets), hostPath, out);\n }\n return out;\n}\n\n/** A pick's fixed words, across its `words` sources: what its value help may describe. */\nfunction pickWords(from: unknown): string[] {\n if (!Array.isArray(from)) return [];\n return from.flatMap((s: unknown) => (isObject(s) && Array.isArray(s[\"words\"]) ? s[\"words\"].filter((w): w is string => typeof w === \"string\") : []));\n}\n\n/** A pick's `from`: a list of sources, each exactly one of `words`, `to` and `list`. */\nfunction pickSourcesSound(host: HostName, from: unknown, path: string, out: Problem[]): boolean {\n if (!Array.isArray(from) || from.length === 0) {\n out.push(err(\"pick-from\", path, \"a pick lists its sources in \\\"from\\\": { \\\"words\\\": [...] }, { \\\"to\\\": a node kind }, or { \\\"list\\\": a project list }\"));\n return false;\n }\n let sound = true;\n from.forEach((s: unknown, i) => {\n const at = atIndex(path, i);\n const keys = isObject(s) ? Object.keys(s).filter((k) => k === \"words\" || k === \"to\" || k === \"list\") : [];\n if (!isObject(s) || keys.length !== 1) {\n out.push(err(\"pick-source\", at, \"a source is one of { \\\"words\\\": [...] }, { \\\"to\\\": a node kind }, { \\\"list\\\": a project list }\"));\n sound = false;\n return;\n }\n unknownKeys(s, new Set(keys), at, out);\n if (keys[0] === \"words\") {\n const words = s[\"words\"];\n const seen = new Set<string>();\n if (!Array.isArray(words) || words.length === 0) { out.push(err(\"pick-words\", atKey(at, \"words\"), \"fixed words are a list of at least one\")); sound = false; return; }\n words.forEach((w, j) => {\n if (typeof w !== \"string\" || w.trim() === \"\") { out.push(err(\"value-empty\", atIndex(atKey(at, \"words\"), j), \"a word has a name\")); sound = false; }\n else if (seen.has(w)) { out.push(err(\"value-duplicate\", atIndex(atKey(at, \"words\"), j), `\"${w}\" is listed twice`)); sound = false; }\n else seen.add(w);\n });\n } else if (keys[0] === \"to\") {\n if (typeof s[\"to\"] !== \"string\" || !HOSTS[host].references.includes(s[\"to\"])) {\n out.push(err(\"reference-to\", atKey(at, \"to\"), `a source's nodes are of a kind, one of ${HOSTS[host].references.join(\", \")}`));\n sound = false;\n }\n } else if (typeof s[\"list\"] !== \"string\" || !NAME.test(s[\"list\"])) {\n out.push(err(\"pick-list\", atKey(at, \"list\"), \"a list source names a field of the extension's project node\"));\n sound = false;\n }\n });\n return sound;\n}\n\n/** Each pick's `list` sources against the extension's project target: a list of text the project node holds. */\nfunction pickListProblems(kinds: Record<string, unknown>, hostPath: string, out: Problem[]): void {\n const project = isObject(kinds[\"project\"]) && Array.isArray(kinds[\"project\"][\"fields\"]) ? kinds[\"project\"][\"fields\"] as unknown[] : [];\n const lists = new Set(project.filter((f): f is FieldDecl => isObject(f) && isTextList(f as unknown as TypeDecl)).map((f) => f.name));\n const walk = (decl: unknown, path: string): void => {\n if (!isObject(decl)) return;\n const d = decl as unknown as TypeDecl;\n if (d.type === \"pick\" && Array.isArray(d.from)) {\n d.from.forEach((s, i) => {\n if (isObject(s) && typeof (s as { list?: unknown }).list === \"string\" && !lists.has((s as { list: string }).list)) {\n const name = (s as { list: string }).list;\n out.push(err(\"pick-list\", atKey(atIndex(atKey(path, \"from\"), i), \"list\"),\n `\"${name}\" is not a list of text on the extension's project node; declare it there, as { \"name\": \"${name}\", \"type\": \"list\", \"of\": { \"type\": \"text\" } }`));\n }\n });\n }\n if (Array.isArray(d.fields)) d.fields.forEach((f, i) => walk(f, atIndex(atKey(path, \"fields\"), i)));\n if (d.of !== undefined) walk(d.of, atKey(path, \"of\"));\n };\n for (const [kind, target] of Object.entries(kinds)) {\n if (!isObject(target) || !Array.isArray(target[\"fields\"])) continue;\n (target[\"fields\"] as unknown[]).forEach((f, i) => walk(f, atIndex(atKey(atKey(hostPath, kind), \"fields\"), i)));\n }\n}\n\n/** A package path a view's entry may name: relative, forward slashes, no `.` or `..` segment, a `.js` file. */\nexport function isViewEntry(entry: unknown): entry is string {\n if (typeof entry !== \"string\" || !entry.endsWith(\".js\") || entry.includes(\"\\\\\")) return false;\n const parts = entry.split(\"/\");\n return parts.every((p) => p !== \"\" && p !== \".\" && p !== \"..\");\n}\n\nfunction viewsProblems(views: unknown, targets: unknown, out: Problem[]): void {\n if (views === undefined) return;\n if (!Array.isArray(views)) { out.push(err(\"not-a-list\", \"views\", \"views are a list\")); return; }\n const ids = new Set<string>();\n const elements = new Set<string>();\n const targeted = isObject(targets) ? Object.keys(targets) : [];\n views.forEach((v: unknown, i) => {\n const at = atIndex(\"views\", i);\n if (!isObject(v)) { out.push(err(\"not-an-object\", at, \"a view is an object\")); return; }\n unknownKeys(v, VIEW_KEYS, at, out);\n const id = v[\"id\"];\n if (typeof id !== \"string\" || !ID.test(id)) out.push(err(\"view-id\", atKey(at, \"id\"), \"a view's id is lower case letters, digits and hyphens, starting with a letter\"));\n else if (ids.has(id)) out.push(err(\"view-duplicate\", atKey(at, \"id\"), `two views are called \"${id}\"`));\n else ids.add(id);\n if (typeof v[\"name\"] !== \"string\" || v[\"name\"].trim() === \"\") out.push(err(\"view-name\", atKey(at, \"name\"), \"a view has a name, shown as its window's title\"));\n if (!isViewEntry(v[\"entry\"])) {\n out.push(err(\"view-entry\", atKey(at, \"entry\"), \"a view's entry is a .js file in the extension's package, as a relative path such as view/sheet.js\"));\n }\n const element = v[\"element\"];\n if (typeof element !== \"string\" || !ELEMENT.test(element)) {\n out.push(err(\"view-element\", atKey(at, \"element\"), \"a view's element is a custom element name: lower case, starting with a letter, with a hyphen, such as probe-view\"));\n } else if (elements.has(element)) out.push(err(\"view-duplicate\", atKey(at, \"element\"), `two views define <${element}>`));\n else elements.add(element);\n const hosts = v[\"hosts\"];\n if (hosts === undefined) return;\n if (!Array.isArray(hosts) || hosts.length === 0) { out.push(err(\"view-hosts\", atKey(at, \"hosts\"), \"a view's hosts are a list of at least one host\")); return; }\n hosts.forEach((h: unknown, j) => {\n const hp = atIndex(atKey(at, \"hosts\"), j);\n if (typeof h !== \"string\" || !own(HOSTS, h)) out.push(err(\"unknown-host\", hp, `${JSON.stringify(h)} is not a host; a view opens in \"patter\" or \"storylets\"`));\n else if (!targeted.includes(h)) out.push({ severity: \"warning\", code: \"view-host-untargeted\", path: hp, message: `the view opens in ${h}, but the manifest targets nothing there` });\n });\n });\n}\n\nfunction readsProblems(reads: unknown, self: unknown, out: Problem[]): void {\n if (reads === undefined) return;\n if (!Array.isArray(reads)) { out.push(err(\"not-a-list\", \"reads\", \"reads is a list of extension ids\")); return; }\n const seen = new Set<string>();\n reads.forEach((r: unknown, i) => {\n const at = atIndex(\"reads\", i);\n if (typeof r !== \"string\" || !ID.test(r)) out.push(err(\"reads-id\", at, \"an extension read is named by its id: lower case letters, digits and hyphens\"));\n else if (r === self) out.push({ severity: \"warning\", code: \"reads-self\", path: at, message: \"an extension always reads its own data; this entry is ignored\" });\n else if (seen.has(r)) out.push(err(\"reads-duplicate\", at, `\"${r}\" is listed twice`));\n else seen.add(r);\n });\n}\n\nfunction requiresProblems(requires: unknown, self: unknown, out: Problem[]): void {\n if (requires === undefined) return;\n if (!Array.isArray(requires)) { out.push(err(\"not-a-list\", \"requires\", \"requires is a list of extension ids\")); return; }\n const seen = new Set<string>();\n requires.forEach((r: unknown, i) => {\n const at = atIndex(\"requires\", i);\n if (typeof r !== \"string\" || !ID.test(r)) out.push(err(\"requires-id\", at, \"a required extension is named by its id: lower case letters, digits and hyphens\"));\n else if (r === self) out.push(err(\"requires-self\", at, \"an extension can't require itself\"));\n else if (seen.has(r)) out.push(err(\"requires-duplicate\", at, `\"${r}\" is listed twice`));\n else seen.add(r);\n });\n}\n\n/** The extensions a manifest requires that a project doesn't take, by id, in the manifest's order. An entry that\n * fails its checks is left out. */\nexport function missingRequirements(manifest: Manifest, taken: Iterable<string>): string[] {\n const have = new Set(taken);\n const out: string[] = [];\n for (const r of Array.isArray(manifest.requires) ? manifest.requires : []) {\n if (typeof r === \"string\" && ID.test(r) && r !== manifest.id && !have.has(r) && !out.includes(r)) out.push(r);\n }\n return out;\n}\n\n/** Each of a host's target fields naming a view as its editor: a view the manifest declares, opening in that host,\n * on a map of records (the one kind of field the editors open elsewhere). */\nfunction editorProblems(host: HostName, kinds: Record<string, unknown>, views: unknown, targeted: readonly string[], hostPath: string, out: Problem[]): void {\n const declared = Array.isArray(views) ? views.filter((v): v is Record<string, unknown> => isObject(v) && typeof v[\"id\"] === \"string\") : [];\n for (const [kind, target] of Object.entries(kinds)) {\n if (!isObject(target) || !Array.isArray(target[\"fields\"])) continue;\n (target[\"fields\"] as unknown[]).forEach((f, i) => {\n if (!isObject(f) || f[\"editor\"] === undefined) return;\n const at = atKey(atIndex(atKey(atKey(hostPath, kind), \"fields\"), i), \"editor\");\n const editor = f[\"editor\"];\n const view = typeof editor === \"string\" ? declared.find((v) => v[\"id\"] === editor) : undefined;\n if (view === undefined) {\n out.push(err(\"editor-view\", at, typeof editor === \"string\"\n ? `the manifest declares no view called \"${editor}\"; an editor names one of its views by id`\n : \"an editor names one of the manifest's views by its id\"));\n return;\n }\n const opensIn = Array.isArray(view[\"hosts\"]) ? view[\"hosts\"] : targeted;\n if (!opensIn.includes(host)) { out.push(err(\"editor-host\", at, `the view \"${editor}\" doesn't open in ${host}`)); return; }\n const d = f as unknown as TypeDecl;\n if (!(d.type === \"map\" && isObject(d.of) && d.of.type === \"record\")) {\n out.push({ severity: \"warning\", code: \"editor-ignored\", path: at, message: \"only a map of records opens in an editor; this field is edited in place, so the editor is ignored\" });\n }\n });\n }\n}\n\n/** The views a host offers from a manifest: those naming the host, or every view when it names none and the\n * manifest targets the host. A view that fails its checks is left out. */\nexport function viewsFor(manifest: Manifest, host: HostName): ViewDecl[] {\n const targeted = Object.keys(manifest.targets ?? {});\n return (Array.isArray(manifest.views) ? manifest.views : []).filter((v) =>\n isObject(v) && typeof v.id === \"string\" && ID.test(v.id) && typeof v.name === \"string\" && isViewEntry(v.entry)\n && typeof v.element === \"string\" && ELEMENT.test(v.element)\n && (v.hosts === undefined ? targeted.includes(host) : Array.isArray(v.hosts) && v.hosts.includes(host)));\n}\n\nfunction unknownKeys(obj: Record<string, unknown>, known: ReadonlySet<string>, path: string, out: Problem[],\n removed: Readonly<Record<string, string>> = {}): void {\n for (const k of Object.keys(obj)) {\n if (own(removed, k)) {\n out.push({ severity: \"warning\", code: \"removed-key\", path: atKey(path, k), message: `\"${k}\" is ignored: ${removed[k]}` });\n } else 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 targetProblems(host: HostName, target: unknown, path: 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\"]), path, out, REMOVED_TARGET_KEYS);\n const t = target as TargetDecl;\n if (t.fields !== undefined) fieldListProblems(host, t.fields, atKey(path, \"fields\"), true, out);\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 if (field.editor !== undefined && !topLevel) {\n out.push(err(\"editor-nested\", atKey(at, \"editor\"), \"only a target's own fields open in a view, 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 \"pick\":\n if (!pickSourcesSound(host, decl.from, at(\"from\"), out)) sound = false;\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\n : decl.type === \"pick\" ? pickWords(decl.from) : 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, a quality's stages, or a pick's words\"));\n } else {\n for (const k of Object.keys(decl.valueHelp)) {\n if (!vocabulary.includes(k)) {\n out.push(err(\"value-help\", atKey(at(\"valueHelp\"), k), decl.type === \"pick\"\n ? `\"${k}\" is not one of its words: value help describes a pick's fixed words, never the project's lists or nodes`\n : `\"${k}\" is not one of its values`));\n }\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// --- a manifest's declarations ---------------------------------------------------\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 * comments a list of comment threads, merged message by message\n * (`mergeComments`)\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 | { readonly kind: \"comments\" };\n\nexport const ATOMIC: Strategy = { kind: \"atomic\" };\nexport const SET: Strategy = { kind: \"set\" };\nexport const COMMENTS: Strategy = { kind: \"comments\" };\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\":\n case \"comments\": 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 case \"comments\":\n return mergeThreads(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// --- comment threads ---------------------------------------------------------------\n\n/**\n * Three-way merge two lists of comment threads, the shape both families'\n * comments share: `{ id, messages: [{ author, ts, body, deleted? }], resolved?,\n * ...}`. Lifted from Patter's merge (patterkit design/family-parity-2026-10.md\n * item 5), where a thread merged whole made two replies to one thread clash.\n *\n * - Messages are keyed by author and timestamp, and are the union of both\n * sides', oldest first. A withdrawn message (a tombstone: body emptied,\n * `deleted` set) stays withdrawn whichever side withdrew it, and a message a\n * side removed outright, or lost with its whole thread, counts as withdrawn\n * by that side. One message edited two ways is a clash that keeps ours.\n * - A thread's other fields (its anchor, its marker, `resolved`) merge one by\n * one, a field changed two ways being a clash; a thread one side removed\n * takes the other side's.\n * - A thread with nothing readable left goes, as the editors drop it.\n *\n * Threads come back oldest first, by their first message, then by id.\n */\nexport function mergeComments(base: unknown, ours: unknown, theirs: unknown, opts?: TreeMergeOptions): TreeMergeResult {\n return mergeTree(COMMENTS, base, ours, theirs, opts);\n}\n\ntype Thread = Record<string, unknown>;\n\nfunction mergeThreads(B: unknown[], O: unknown[], T: unknown[], path: string, ctx: Ctx): unknown[] {\n const index = (arr: unknown[]): Map<string, Thread> => {\n const m = new Map<string, Thread>();\n for (const c of arr) if (isObject(c) && typeof c[\"id\"] === \"string\") m.set(c[\"id\"], c);\n return m;\n };\n const Bm = index(B), Om = index(O), Tm = index(T);\n const out: Thread[] = [];\n for (const id of new Set([...Bm.keys(), ...Om.keys(), ...Tm.keys()])) {\n const b = Bm.get(id), o = Om.get(id), t = Tm.get(id);\n const here = `${path}[${id}]`;\n if (o === undefined && t === undefined) continue; // gone on both sides\n // An entry with no messages anywhere (a comment from before threads) has nothing inside to merge.\n if (![b, o, t].some((c) => Array.isArray(c?.[\"messages\"]))) {\n const v = o !== undefined && t !== undefined ? merge3(b, o, t, id, here, ctx)\n : (b !== undefined && ctx.eq(o ?? t, b) ? undefined : o ?? t);\n if (isObject(v)) out.push(v);\n continue;\n }\n const messages = mergeMessages(b, o, t, id, here, ctx);\n if (messages.length === 0 || messages.every((m) => m[\"deleted\"] === true)) continue;\n // The thread's own fields: one by one when both sides have it, else the side that does.\n const fields: Thread = {};\n if (o !== undefined && t !== undefined) {\n const B0 = b ?? {};\n const flag = (c: Thread, k: string): unknown => (k === \"resolved\" ? (c[k] === true ? true : undefined) : c[k]);\n for (const k of new Set([...Object.keys(o), ...Object.keys(t), ...Object.keys(B0)])) {\n if (k === \"messages\") continue;\n const v = merge3(flag(B0, k), flag(o, k), flag(t, k), id, `${here}.${k}`, ctx);\n if (v !== undefined) fields[k] = v;\n }\n } else {\n for (const [k, v] of Object.entries((o ?? t)!)) if (k !== \"messages\") fields[k] = v;\n }\n out.push({ ...fields, messages });\n }\n const first = (c: Thread): string => {\n const m = asArr(c[\"messages\"])[0];\n return isObject(m) && typeof m[\"ts\"] === \"string\" ? m[\"ts\"] : \"\";\n };\n return out.sort((x, y) => first(x).localeCompare(first(y)) || String(x[\"id\"]).localeCompare(String(y[\"id\"])));\n}\n\nfunction mergeMessages(b: Thread | undefined, o: Thread | undefined, t: Thread | undefined, id: string, here: string, ctx: Ctx): Thread[] {\n const keyOf = (m: Thread): string => `${String(m[\"author\"] ?? \"\")}|${String(m[\"ts\"] ?? \"\")}`;\n const index = (c: Thread | undefined): Map<string, Thread> => {\n const m = new Map<string, Thread>();\n for (const x of asArr(c?.[\"messages\"])) if (isObject(x)) m.set(keyOf(x), x);\n return m;\n };\n const Bm = index(b), Om = index(o), Tm = index(t);\n const out: Thread[] = [];\n for (const k of new Set([...Bm.keys(), ...Om.keys(), ...Tm.keys()])) {\n const mb = Bm.get(k), mo = Om.get(k), mt = Tm.get(k);\n // Withdrawn on either side, or missing from a side that had it at the base.\n if ([mb, mo, mt].some((m) => m?.[\"deleted\"] === true) || (mb !== undefined && (mo === undefined || mt === undefined))) {\n out.push({ ...(mo ?? mt ?? mb)!, body: \"\", deleted: true });\n } else if (mo !== undefined && mt !== undefined) {\n out.push(merge3(mb, mo, mt, id, `${here}.messages[${k}]`, ctx) as Thread);\n } else {\n out.push((mo ?? mt)!);\n }\n }\n const ts = (m: Thread): string => String(m[\"ts\"] ?? \"\");\n return out.sort((x, y) => ts(x).localeCompare(ts(y)) || String(x[\"author\"] ?? \"\").localeCompare(String(y[\"author\"] ?? \"\")));\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"]}
|