api_binding_ui 3.2.0 → 3.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/app/{index-xww2x0kd.js → index-bv4ej4bf.js} +9 -9
- package/dist/app/index.html +1 -1
- package/dist/cli.js +9 -9
- package/dist/{index-gfw08965.js → index-s44cgmck.js} +4 -2
- package/dist/{index-gfw08965.js.map → index-s44cgmck.js.map} +3 -3
- package/dist/index.js +11 -11
- package/dist/index.js.map +3 -3
- package/dist/studio/index.js +1 -1
- package/dist/vite/plugin.d.ts +6 -2
- package/dist/vite.js +33 -15
- package/package.json +1 -1
- package/spec/FRAMEWORK.md +178 -178
package/dist/app/index.html
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><title>Bind API</title>
|
|
4
4
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@500;600&display=swap" />
|
|
5
|
-
<style>html, body, #root { height: 100%; margin: 0; overflow: hidden; background: #f8fafc; }</style><link rel="stylesheet" crossorigin href="./index-aaxy714b.css"><script type="module" crossorigin src="./index-
|
|
5
|
+
<style>html, body, #root { height: 100%; margin: 0; overflow: hidden; background: #f8fafc; }</style><link rel="stylesheet" crossorigin href="./index-aaxy714b.css"><script type="module" crossorigin src="./index-bv4ej4bf.js"></script></head>
|
|
6
6
|
<body><div id="root"></div></body>
|
|
7
7
|
</html>
|
package/dist/cli.js
CHANGED
|
@@ -612,10 +612,6 @@ function compileSteps(steps, cx, at, ops, imports) {
|
|
|
612
612
|
cx.use.add("finish");
|
|
613
613
|
for (const st of steps) {
|
|
614
614
|
const op = ops.get(st.operation);
|
|
615
|
-
if (!op) {
|
|
616
|
-
cx.issue("catalog.operation-missing", `${st.operation} is not in the API docs.`, at);
|
|
617
|
-
continue;
|
|
618
|
-
}
|
|
619
615
|
const scope = { item: true, steps: done };
|
|
620
616
|
const call = compileCall(op, st.request, cx, scope, at);
|
|
621
617
|
imports.add(call.fn);
|
|
@@ -686,6 +682,12 @@ function generate(file, catalog) {
|
|
|
686
682
|
issue: (code, message, at) => issues.push({ severity: "error", screen: screen.id, code, message, ...at }),
|
|
687
683
|
warn: (code, message, at) => issues.push({ severity: "warning", screen: screen.id, code, message, ...at })
|
|
688
684
|
};
|
|
685
|
+
const gone = (operations, at) => {
|
|
686
|
+
const missing = operations.filter((o) => !ops.has(o));
|
|
687
|
+
for (const o of missing)
|
|
688
|
+
cx.warn("catalog.operation-missing", `${o} is no longer in the API docs; generated unbound until it is rebound.`, at);
|
|
689
|
+
return missing.length > 0;
|
|
690
|
+
};
|
|
689
691
|
const bindings = new Map;
|
|
690
692
|
for (const b of index[screen.id] ?? []) {
|
|
691
693
|
if (!keys.has(b.component)) {
|
|
@@ -723,7 +725,7 @@ function generate(file, catalog) {
|
|
|
723
725
|
if (s.role === "trigger") {
|
|
724
726
|
types.add("Action");
|
|
725
727
|
outT.push(`${prop(s.id)}: Action`);
|
|
726
|
-
if (b?.type !== "steps") {
|
|
728
|
+
if (b?.type !== "steps" || gone(b.steps.map((st) => st.operation), at)) {
|
|
727
729
|
unbound(s.id, "UNBOUND_ACTION");
|
|
728
730
|
continue;
|
|
729
731
|
}
|
|
@@ -749,13 +751,11 @@ function generate(file, catalog) {
|
|
|
749
751
|
out.push(`${prop(s.id)}: { bound: true, data: ${compileExpr(b.value, cx, { item: false }, at)}, loading: false, error: undefined }`);
|
|
750
752
|
continue;
|
|
751
753
|
}
|
|
752
|
-
|
|
753
|
-
if (b?.type === "operation" && !op)
|
|
754
|
-
cx.issue("catalog.operation-missing", `${b.operation} is not in the API docs.`, at);
|
|
755
|
-
if (b?.type !== "operation" || !op) {
|
|
754
|
+
if (b?.type !== "operation" || gone([b.operation], at)) {
|
|
756
755
|
unbound(s.id, "UNBOUND_DATA");
|
|
757
756
|
continue;
|
|
758
757
|
}
|
|
758
|
+
const op = ops.get(b.operation);
|
|
759
759
|
const call = compileCall(op, b.request, cx, { item: false }, at);
|
|
760
760
|
imports.add(call.fn);
|
|
761
761
|
["useData", "ok"].forEach((h) => cx.use.add(h));
|
|
@@ -421,6 +421,8 @@ function createEngine2(fw, manifests) {
|
|
|
421
421
|
const t = base(target), s = base(source);
|
|
422
422
|
if (t === "any" || s === "any" || t === s)
|
|
423
423
|
return { ok: true };
|
|
424
|
+
if (t === "number" && s === "integer" || t === "string" && ["integer", "number", "boolean"].includes(s))
|
|
425
|
+
return { ok: true };
|
|
424
426
|
const tr = transforms.find((x) => typeName(x.input) === s && typeName(x.output) === t);
|
|
425
427
|
return tr ? { ok: true, transform: tr.name } : { ok: false };
|
|
426
428
|
}
|
|
@@ -743,5 +745,5 @@ function validateBindings2(engine) {
|
|
|
743
745
|
|
|
744
746
|
export { catalogFromOpenApi2, CatalogLoadError2, catalogFromText2, loadCatalog2, humanize, ID2, parseBindingsFile2, screenOf2, fromFile2, toFile2, memoryStore2, httpStore2, flat, createEngine2, validateRegistry2, validateBindings2 };
|
|
745
747
|
|
|
746
|
-
//# debugId=
|
|
747
|
-
//# sourceMappingURL=index-
|
|
748
|
+
//# debugId=C910E92233516EEC64756E2164756E21
|
|
749
|
+
//# sourceMappingURL=index-s44cgmck.js.map
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
"/** Identifiers to words, for matching and labels. */\nimport type { Glossary } from \"./contract\";\n\n/* ------------------------------------------------------------------ */\n/* Names */\n/* ------------------------------------------------------------------ */\n\nexport const sing = (w: string) => (w.length > 3 && w.endsWith(\"s\") ? w.slice(0, -1) : w);\nexport function synonymIndex(glossaries: Glossary[]) {\n const m: Record<string, string[]> = {};\n glossaries.forEach(g => g.synonyms.forEach(grp => { const g2 = grp.map(x => sing(x.toLowerCase())); g2.forEach(w => { m[w] = g2; }); }));\n return m;\n}\nexport function words(text: string): string[] {\n return text.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\").toLowerCase().split(/[^a-z0-9]+/).filter(w => w.length > 1).map(sing);\n}\n/** Turns an identifier into words people read: \"noteTypeId\" → \"Note type id\". */\nexport function humanize(id: string): string {\n const s = id.replace(/^\\$\\.?/, \"\").replace(/\\[\\*\\]/g, \"\").split(/[./]/).filter(Boolean).pop() ?? id;\n const w = s.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\").replace(/[_-]+/g, \" \").toLowerCase().trim();\n return w ? w[0].toUpperCase() + w.slice(1) : id;\n}\n",
|
|
8
8
|
"/** The bindings file: parsing, and conversion to and from the studio's working model. */\r\nimport type { BindingsFile, Catalog, FileComponent, FileScreen, RegistryFile, RegistryNode, RegistryScreen, ScreenEntry, ScreenId, SlotBinding, ValidationIssue } from \"./contract\";\r\nimport type { BindingIndex, FrameworkData } from \"./engine\";\r\nimport { humanize } from \"./names\";\r\n\r\n/** Screen and component ids: lowercase kebab-case segments joined by dots, at least two. */\r\nexport const ID = /^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$/;\r\n\r\nconst BINDING_TYPES = new Set([\"operation\", \"expression\", \"steps\", \"none\"]);\r\n\r\n/** Parses and shape-checks a bindings file. Throws a message a person can act on. */\r\nexport function parseBindingsFile(text: string): BindingsFile {\r\n let data: unknown;\r\n try { data = JSON.parse(text); } catch { throw new Error(\"The bindings file is not valid JSON.\"); }\r\n return checkBindingsFile(data);\r\n}\r\n\r\n/** Shape-checks a bindings file with its registry already merged in. */\r\nexport function checkBindingsFile(data: unknown): BindingsFile {\r\n const f = data as Partial<BindingsFile> | null;\r\n if (!f || typeof f !== \"object\") throw new Error(\"The bindings file must be a JSON object.\");\r\n if (f.version !== 3) throw new Error(`The bindings file must have \"version\": 3.`);\r\n if (typeof f.openapi !== \"string\" || !f.openapi) throw new Error(`The bindings file needs \"openapi\": the docs URL or a path.`);\r\n for (const k of [\"kinds\", \"screens\", \"components\", \"bindings\"] as const) if (!Array.isArray(f[k])) throw new Error(`\"${k}\" must be a list.`);\r\n f.bindings!.forEach((b, i) => {\r\n const x = b as Partial<SlotBinding> | null;\r\n if (!x || typeof x.component !== \"string\" || typeof x.slot !== \"string\" || !BINDING_TYPES.has(x.type as string))\r\n throw new Error(`Binding ${i + 1} needs \"component\", \"slot\" and a known \"type\".`);\r\n });\r\n if (f.output && (typeof f.output.dir !== \"string\" || typeof f.output.client !== \"string\")) throw new Error(`\"output\" needs \"dir\" and \"client\".`);\r\n return f as BindingsFile;\r\n}\r\n\r\n/** What the registry contributes to the bindings file; on disk these live only in registry.json. */\r\nexport const REGISTRY_KEYS = [\"kinds\", \"screens\", \"components\"] as const;\r\n\r\n/** Parses registry.json and flattens its tree into kinds, screens and components (with `parent`). */\r\nexport function parseRegistry(text: string): Pick<BindingsFile, (typeof REGISTRY_KEYS)[number]> {\r\n let r: Partial<RegistryFile>;\r\n try { r = JSON.parse(text); } catch { throw new Error(\"The registry file is not valid JSON.\"); }\r\n if (!r || r.version !== 1) throw new Error(`The registry file must have \"version\": 1.`);\r\n if (!Array.isArray(r.kinds) || !Array.isArray(r.screens)) throw new Error(`The registry file needs \"kinds\" and \"screens\" lists.`);\r\n const screens: FileScreen[] = [];\r\n const components: FileComponent[] = [];\r\n const under = (id: unknown, owner: string | undefined, what: string) => {\r\n if (typeof id !== \"string\" || !id) throw new Error(`A ${what} in the registry has no \"id\".`);\r\n if (owner && !id.startsWith(owner + \".\")) throw new Error(`\"${id}\" must start with \"${owner}.\", the id it is nested under.`);\r\n };\r\n const node = (n: RegistryNode, owner: string, parent?: string) => {\r\n under(n.id, owner, \"component\");\r\n if (typeof n.kind !== \"string\" || typeof n.label !== \"string\") throw new Error(`\"${n.id}\" needs \"kind\" and \"label\".`);\r\n const { children, ...c } = n;\r\n components.push(parent ? { ...c, parent } : c);\r\n for (const ch of children ?? []) node(ch, n.id, n.id);\r\n };\r\n const screen = (s: RegistryScreen, owner?: string) => {\r\n under(s.id, owner, \"screen\");\r\n const { components: cs, screens: subs, ...rest } = s;\r\n screens.push(rest);\r\n for (const c of cs ?? []) node(c, s.id);\r\n for (const sub of subs ?? []) screen(sub, s.id);\r\n };\r\n for (const s of r.screens) screen(s);\r\n return { kinds: r.kinds, screens, components };\r\n}\r\n\r\n/** The screen an id belongs to: the longest screen id that prefixes it. */\r\nexport function screenOf(id: string, screens: readonly ScreenId[]): ScreenId | undefined {\r\n let best: ScreenId | undefined;\r\n for (const s of screens) if (id.startsWith(s + \".\") && (!best || s.length > best.length)) best = s;\r\n return best;\r\n}\r\n\r\n/** Product label for a screen: the docs' product whose name matches the first id segment, else the segment in words. */\r\nfunction productLabel(seg: string, catalog: Catalog): string {\r\n const names = new Set(catalog.operations.map(o => o.product).filter((p): p is string => !!p));\r\n return [...names].find(n => n.toLowerCase().replace(/[^a-z0-9]+/g, \"-\") === seg) ?? humanize(seg);\r\n}\r\n\r\n/** Builds the studio's model. Components and bindings that fit no screen are dropped with an issue. */\r\nexport function fromFile(file: BindingsFile, catalog: Catalog): { fw: FrameworkData; index: BindingIndex; issues: ValidationIssue[] } {\r\n const issues: ValidationIssue[] = [];\r\n const ids = file.screens.map(s => s.id);\r\n const screens: ScreenEntry[] = file.screens.map(s => ({\r\n id: s.id, label: s.label, description: s.description, context: s.context ?? [], components: [],\r\n path: [productLabel(s.id.split(\".\")[0], catalog)],\r\n parent: screenOf(s.id, ids),\r\n }));\r\n const byId = new Map(screens.map(s => [s.id, s]));\r\n const screenIds = new Set(ids);\r\n for (const c of file.components) {\r\n // One namespace: a component named like a screen would also capture that screen's components.\r\n if (screenIds.has(c.id)) { issues.push({ severity: \"error\", screen: c.id, component: c.id, code: \"registry.id-clash\", message: `\"${c.id}\" is both a screen and a component id.` }); continue; }\r\n const s = screenOf(c.id, ids);\r\n if (!s) { issues.push({ severity: \"error\", screen: \"\", component: c.id, code: \"registry.no-screen\", message: `\"${c.id}\" starts with no registered screen id.` }); continue; }\r\n byId.get(s)!.components.push({ bindId: c.id, kind: c.kind, label: c.label, parent: c.parent, info: c.info });\r\n }\r\n const index: BindingIndex = {};\r\n for (const b of file.bindings) {\r\n const s = screenOf(b.component, ids);\r\n if (!s) { issues.push({ severity: \"error\", screen: \"\", component: b.component, slot: b.slot, code: \"binding.no-screen\", message: `Binding for \"${b.component}\" fits no screen.` }); continue; }\r\n (index[s] ??= []).push(b);\r\n }\r\n return {\r\n fw: { descriptors: file.kinds, registry: { registryVersion: 1, screens }, catalog, glossaries: file.glossaries },\r\n index, issues,\r\n };\r\n}\r\n\r\n/** The file with its bindings replaced by the index, in registry order so diffs stay small. */\r\nexport function toFile(file: BindingsFile, index: BindingIndex): BindingsFile {\r\n const order = new Map(file.components.map((c, i) => [c.id, i]));\r\n const bindings = Object.values(index).flat()\r\n .sort((a, b) => (order.get(a.component) ?? 1e9) - (order.get(b.component) ?? 1e9) || a.slot.localeCompare(b.slot));\r\n return { ...file, bindings };\r\n}\r\n\r\n/** In-memory store, for tests and embedding. */\r\nexport function memoryStore(seed: BindingsFile) {\r\n let file = seed;\r\n return { load: async () => file, save: async (f: BindingsFile) => { file = f; }, get current() { return file; } };\r\n}\r\n\r\n/** Store backed by the CLI's studio server. */\r\nexport function httpStore(url: string) {\r\n return {\r\n async load() {\r\n const res = await fetch(url, { cache: \"no-store\" });\r\n if (!res.ok) throw new Error(`Could not read the bindings file (HTTP ${res.status}).`);\r\n return parseBindingsFile(await res.text());\r\n },\r\n async save(file: BindingsFile) {\r\n const res = await fetch(url, { method: \"PUT\", headers: { \"Content-Type\": \"application/json\" }, body: JSON.stringify(file, null, 2) + \"\\n\" });\r\n if (!res.ok) throw new Error((await res.text()) || `Could not save (HTTP ${res.status}).`);\r\n },\r\n };\r\n}\r\n",
|
|
9
9
|
"/** JSON Schema helpers and per-operation views. */\nimport type { Catalog, CatalogOperation, JsonSchema } from \"./contract\";\n\nexport type Field = [name: string, type: string];\nexport type ReqField = [pointer: string, type: string, required: boolean];\n\nexport interface OpView {\n op: CatalogOperation;\n req: ReqField[];\n lists: Array<{ select: string; fields: Field[] }>;\n one: Field[] | null;\n scalars: Field[];\n}\n\n/* ------------------------------------------------------------------ */\n/* JSON Schema reading */\n/* ------------------------------------------------------------------ */\n\ntype S = Record<string, any>;\nexport const obj = (s: JsonSchema | undefined): S => (s && typeof s === \"object\" ? (s as S) : {});\nexport function flat(s: JsonSchema | undefined): S {\n const o = obj(s);\n const parts = [o, ...((o.allOf as JsonSchema[]) ?? []).map(flat)];\n if (parts.length === 1 && !o.oneOf && !o.anyOf) return o;\n const props: S = {};\n const required: string[] = [];\n parts.forEach(p => { Object.assign(props, p.properties ?? {}); required.push(...(p.required ?? [])); });\n const alt = ((o.oneOf ?? o.anyOf) as JsonSchema[] | undefined)?.map(flat).find(x => x.type !== \"null\");\n return { ...(alt ?? {}), ...o, properties: Object.keys(props).length ? props : alt?.properties, required };\n}\nexport function typeName(s: JsonSchema | undefined): string {\n const o = flat(s);\n const t = Array.isArray(o.type) ? o.type.find((x: string) => x !== \"null\") : o.type;\n if (t === \"array\") return typeName(o.items) + \"[]\";\n if (o.format === \"date-time\" || o.format === \"date\") return \"date-time\";\n if (t === \"integer\" || t === \"number\") return \"number\";\n return t ?? (o.properties ? \"object\" : \"any\");\n}\nexport const isObject = (s: JsonSchema | undefined) => { const o = flat(s); return o.type === \"object\" || !!o.properties; };\nexport const propsOf = (s: JsonSchema | undefined): Field[] => Object.entries<JsonSchema>(flat(s).properties ?? {}).map(([k, v]) => [k, typeName(v)]);\n\nfunction leaves(schema: JsonSchema, prefix: string, required: boolean, out: ReqField[], depth = 0) {\n const s = flat(schema);\n if (isObject(s)) {\n const props = Object.entries<JsonSchema>(s.properties ?? {});\n if (!props.length || depth > 3) { out.push([prefix, \"object\", required]); return; }\n const req = new Set<string>(s.required ?? []);\n props.forEach(([k, v]) => { if (!flat(v).readOnly) leaves(v, `${prefix}/${k}`, required && req.has(k), out, depth + 1); });\n } else out.push([prefix, typeName(s), required]);\n}\nfunction listsIn(schema: JsonSchema | undefined, path: string, out: OpView[\"lists\"], depth = 0) {\n const s = flat(schema);\n if (s.type === \"array\") { if (isObject(s.items)) out.push({ select: `${path}[*]`, fields: propsOf(s.items) }); return; }\n if (isObject(s) && depth < 4) Object.entries<JsonSchema>(s.properties ?? {}).forEach(([k, v]) => listsIn(v, `${path}.${k}`, out, depth + 1));\n}\n\nconst views = new WeakMap<Catalog, Map<string, OpView>>();\nexport function opViews(catalog: Catalog): Map<string, OpView> {\n let m = views.get(catalog);\n if (m) return m;\n m = new Map();\n for (const op of catalog.operations) {\n const req: ReqField[] = op.parameters.map(p => [p.pointer, typeName(p.schema), p.required]);\n if (op.body) leaves(op.body.schema, \"/body\", op.body.required, req);\n const ok = op.responses.find(r => /^2/.test(r.status) && r.schema);\n const lists: OpView[\"lists\"] = [];\n if (ok) listsIn(ok.schema, \"$\", lists);\n const one = ok && !lists.length && isObject(ok.schema) ? propsOf(ok.schema) : null;\n const scalars = ok ? propsOf(ok.schema).filter(([, t]) => t !== \"object\" && !t.endsWith(\"[]\")).map(([k, t]) => [`$.${k}`, t] as Field) : [];\n m.set(op.id, { op, req, lists, one, scalars });\n }\n views.set(catalog, m);\n return m;\n}\n",
|
|
10
|
-
"/** Matching, proposals and status for bindings. Generic: no kinds, products or field names. */\nimport type {\n OperationConsumeBinding,\n BindId, Catalog, CatalogOperation, ComponentDescriptor, ComponentInstance, ContextDeclaration,\n ContextProvider, Glossary, ScreenEntry, ScreenId, ScreenRegistry, SlotBinding,\n SlotDescriptor, TransformDefinition,\n} from \"./contract\";\nimport { synonymIndex, words, humanize } from \"./names\";\nimport { flat, obj, opViews, propsOf, typeName, type Field, type OpView } from \"./schema\";\n\nexport type { Field, OpView, ReqField } from \"./schema\";\nexport { opViews } from \"./schema\";\nexport { humanize, words } from \"./names\";\n\n\nexport interface FrameworkData {\n descriptors: ComponentDescriptor[];\n registry: ScreenRegistry;\n catalog: Catalog;\n transforms?: TransformDefinition[];\n providers?: ContextProvider[];\n glossaries?: Glossary[];\n}\n\n\nexport interface Source {\n expr: string; label: string; name?: string; type: string; group: \"item\" | \"screen\" | \"context\" | \"provider\"; fields?: Field[];\n /** Set when the value's shape is not known yet: names the slot that must be connected first. */\n waitsFor?: string;\n}\nexport interface Ranked { view: OpView; score: number; reasons: string[] }\nexport type SlotState = \"bound\" | \"suggested\" | \"unbound\";\n\n/* ------------------------------------------------------------------ */\n/* Engine */\n/* ------------------------------------------------------------------ */\n\nexport type BindingIndex = Record<ScreenId, SlotBinding[]>;\n\nexport function createEngine(fw: FrameworkData, manifests: BindingIndex) {\n const OPV = opViews(fw.catalog);\n const OPS = [...OPV.values()];\n const DESC = new Map(fw.descriptors.map(d => [d.kind, d]));\n const SCR = new Map(fw.registry.screens.map(s => [s.id, s]));\n const transforms = fw.transforms ?? [];\n const providers = fw.providers ?? [];\n const syn = synonymIndex(fw.glossaries ?? []);\n\n const key = (s: string, c: string, sl: string) => `${s}|${c}|${sl}`;\n const BIND = new Map<string, SlotBinding>();\n for (const [s, list] of Object.entries(manifests)) for (const b of list) {\n if (b.type === \"operation\" && !OPV.has(b.operation)) continue; // operation no longer in the catalog\n if (b.type === \"steps\" && b.steps.some(st => !OPV.has(st.operation))) continue;\n BIND.set(key(s, b.component, b.slot), b);\n }\n const getB = (s: ScreenId, c: BindId, sl: string) => BIND.get(key(s, c, sl));\n const screen = (id: ScreenId) => SCR.get(id)!;\n const compOf = (s: ScreenId, id: BindId) => SCR.get(s)?.components.find(c => c.bindId === id);\n const descOf = (c: ComponentInstance) => DESC.get(c.kind);\n const bindable = (d: ComponentDescriptor | undefined) => (d ? d.slots.filter(x => x.role !== \"produce\") : []);\n\n /* names */\n const tokCache = new Map<string, Set<string>>();\n const tok = (text: string, expand: boolean) => {\n const k = (expand ? \"+\" : \"-\") + text;\n let out = tokCache.get(k);\n if (out) return out;\n out = new Set<string>();\n for (const w of words(text)) { out.add(w); if (expand) (syn[w] ?? []).forEach(x => out!.add(x)); }\n tokCache.set(k, out);\n return out;\n };\n /** Synonyms expand the source side only, so a glossary widens matches without raising scores. */\n function nameScore(target: string, source: string) {\n const a = tok(target, false), b = tok(source, true);\n if (!a.size || !b.size) return 0;\n let n = 0; a.forEach(x => { if (b.has(x)) n++; });\n return n && n / a.size >= 0.5 ? (0.6 * n) / a.size + (0.4 * n) / b.size : 0;\n }\n const base = (t: string) => t.replace(\"[]\", \"\");\n function typeFit(target: string, source: string): { ok: boolean; transform?: string } {\n if (target !== \"any\" && source !== \"any\" && target.endsWith(\"[]\") !== source.endsWith(\"[]\")) return { ok: false };\n const t = base(target), s = base(source);\n if (t === \"any\" || s === \"any\" || t === s) return { ok: true };\n const tr = transforms.find(x => typeName(x.input) === s && typeName(x.output) === t);\n return tr ? { ok: true, transform: tr.name } : { ok: false };\n }\n\n /* shapes: types flow through bindings */\n function bindingFields(s: ScreenId, c: BindId, slotId: string): Field[] | null {\n const b = getB(s, c, slotId);\n if (!b || b.type !== \"operation\") return null;\n const v = OPV.get(b.operation);\n if (!v) return null;\n if (b.select === \"$\" && v.one) return v.one;\n return v.lists.find(x => x.select === b.select)?.fields ?? null;\n }\n function shapeOf(s: ScreenId, comp: ComponentInstance, slot: SlotDescriptor): { many: boolean; fields?: Field[]; type?: string; via?: string } {\n const sc = obj(slot.schema);\n if (typeof sc.$ref === \"string\" && sc.$ref.startsWith(\"#slot/\")) {\n const via = sc.$ref.slice(6);\n return { many: !!slot.many, fields: bindingFields(s, comp.bindId, via) ?? [], via };\n }\n if (flat(sc).properties) return { many: !!slot.many, fields: propsOf(sc) };\n return { many: !!slot.many, type: typeName(sc) };\n }\n function contextShape(ctx: ContextDeclaration): { many: boolean; fields: Field[] } {\n if (\"schema\" in ctx.shape) return { many: !!ctx.many, fields: propsOf(ctx.shape.schema) };\n const f = ctx.shape.from, comp = compOf(f.screen, f.component), d = comp && descOf(comp), slot = d?.slots.find(x => x.id === f.slot);\n return { many: !!ctx.many, fields: (slot && comp ? shapeOf(f.screen, comp, slot).fields : null) ?? [] };\n }\n /** Fields of `$item` for a scoped slot: the parent's bound data. */\n function scopeFields(s: ScreenId, comp: ComponentInstance, slot: SlotDescriptor): Field[] | null {\n if (!slot.scope || !comp.parent) return null;\n return bindingFields(s, comp.parent, slot.scope.parentSlot);\n }\n function manyContext(s: ScreenId) { return screen(s).context.find(x => x.many); }\n\n /* values available on a screen */\n function sources(s: ScreenId, opts: { item?: Field[] } = {}): Source[] {\n const out: Source[] = [], S = screen(s);\n opts.item?.forEach(([f, t]) => out.push({ expr: `$item.${f}`, label: humanize(f), name: f, type: t, group: \"item\" }));\n S.components.forEach(c => {\n const d = descOf(c);\n d?.slots.filter(x => x.role === \"produce\").forEach(sl => {\n const sh = shapeOf(s, c, sl);\n if (sh.fields?.length) {\n if (sh.many) out.push({ expr: `${c.bindId}:${sl.id}`, label: `${c.label} · ${sl.label}`, type: \"list\", group: \"screen\", fields: sh.fields });\n sh.fields.forEach(([f, t]) => out.push({ expr: `${c.bindId}:${sl.id}${sh.many ? \"[*]\" : \"\"}.${f}`, label: `${c.label} · ${humanize(f)}`, name: f, type: sh.many ? t + \"[]\" : t, group: \"screen\" }));\n } else if (sh.via) {\n const via = d.slots.find(x => x.id === sh.via);\n out.push({ expr: `${c.bindId}:${sl.id}`, label: `${c.label} · ${sl.label}`, type: \"pending\", group: \"screen\", waitsFor: `${c.label} · ${via?.label ?? sh.via}` });\n } else out.push({ expr: `${c.bindId}:${sl.id}`, label: c.label + (sl.label && bindable(d).length + 1 < d.slots.length ? ` · ${sl.label}` : \"\"), name: c.label, type: sh.many ? \"list\" : sh.type ?? \"any\", group: \"screen\" });\n });\n });\n S.context.forEach(ctx => {\n const sh = contextShape(ctx);\n if (ctx.many) out.push({ expr: `$context.${ctx.id}`, label: ctx.label, type: \"list\", group: \"context\", fields: sh.fields });\n sh.fields.forEach(([f, t]) => out.push({ expr: `$context.${ctx.id}${ctx.many ? \"[*]\" : \"\"}.${f}`, label: `${ctx.label} · ${humanize(f)}`, name: f, type: ctx.many ? t + \"[]\" : t, group: \"context\" }));\n });\n providers.forEach(p => propsOf(p.schema).forEach(([f, t]) => out.push({ expr: `$${p.id}.${f}`, label: `${p.label} · ${humanize(f)}`, name: `${p.label} ${f}`, type: t, group: \"provider\" })));\n return out;\n }\n /** Sources that fit the target type, best name match first. */\n function rankSources(targetName: string, targetType: string, srcs: Source[], min = 0.65) {\n const out: Array<{ expr: string; score: number; source: Source }> = [];\n for (const x of srcs) {\n if (x.type === \"list\" || x.waitsFor) continue;\n const fit = typeFit(targetType, x.type);\n if (!fit.ok) continue;\n let sc = Math.max(nameScore(targetName, x.name ?? x.label), nameScore(targetName, x.label) * 0.9);\n if (x.group === \"screen\") sc += 0.12; else if (x.group === \"item\") sc += 0.05;\n if (fit.transform) sc -= 0.05;\n if (sc >= min) out.push({ expr: x.expr + (fit.transform ? ` | ${fit.transform}()` : \"\"), score: sc, source: x });\n }\n return out.sort((a, b) => b.score - a.score);\n }\n function bestSource(targetName: string, targetType: string, srcs: Source[]) {\n return rankSources(targetName, targetType, srcs)[0] ?? null;\n }\n /** A one-word field is qualified by its parent: the path resource for parameters, the parent object for body fields. */\n function qualified(ptr: string, op: CatalogOperation) {\n const parts = ptr.split(\"/\").filter(Boolean), name = parts[parts.length - 1];\n if (words(name).length > 1) return name;\n if (parts[0] === \"body\") return parts.length > 2 ? `${parts[parts.length - 2]} ${name}` : name;\n const segs = op.path.split(\"/\").filter(x => x && !x.startsWith(\"{\"));\n return `${segs[segs.length - 1] ?? \"\"} ${name}`;\n }\n function proposeRequest(v: OpView, srcs: Source[]) {\n const req: Record<string, string> = {};\n v.req.forEach(([ptr, t]) => { const m = bestSource(qualified(ptr, v.op), t, srcs); if (m) req[ptr] = m.expr; });\n return req;\n }\n function proposeMap(slotFields: Field[], itemFields: Field[]) {\n const map: Record<string, string> = {};\n const srcs: Source[] = itemFields.map(([f, t]) => ({ expr: `$item.${f}`, name: f, label: f, type: t, group: \"item\" }));\n slotFields.forEach(([p, t]) => { const m = bestSource(p, t, srcs); if (m) map[p] = m.expr; });\n return map;\n }\n function triggerSources(s: ScreenId, item?: Field[]) {\n const mc = manyContext(s);\n return sources(s, { item: item ?? (mc ? contextShape(mc).fields : undefined) });\n }\n\n /* matchers: generic, metadata only */\n function rank(s: ScreenId, comp: ComponentInstance, slot: SlotDescriptor): Ranked[] {\n const S = screen(s);\n const near = tok([comp.label, ...(slot.hints?.keywords ?? [])].join(\" \"), true);\n const far = tok([S.label, ...S.path].join(\" \"), true);\n /** Share of the operation's name covered by the component (full weight) or the screen (half). */\n const cover = (o: CatalogOperation) => {\n const own = tok([o.id, ...o.tags].join(\" \"), false);\n if (!own.size) return { score: 0, near: false };\n let a = 0, b = 0; own.forEach(w => { if (near.has(w)) a++; else if (far.has(w)) b++; });\n return { score: Math.min(1, (a + 0.5 * b) / own.size), near: a > 0 };\n };\n const srcs = slot.role === \"trigger\" ? triggerSources(s) : sources(s);\n const own = srcs.filter(x => x.group === \"screen\" && x.type !== \"list\").length || 1;\n return OPS.map(v => {\n const reasons: string[] = []; let tot = 0, w = 0;\n const add = (weight: number, score: number, why: string | null) => { tot += weight * score; w += weight; if (score >= 0.5 && why) reasons.push(why); };\n const o = v.op;\n const prop = proposeRequest(v, srcs);\n if (slot.role === \"consume\") {\n const sh = shapeOf(s, comp, slot);\n const shape = sh.many ? (v.lists.length ? 1 : 0) : sh.fields?.length ? (v.one || v.lists.length ? 0.7 : 0) : (v.scalars.some(([, t]) => typeFit(sh.type ?? \"any\", t).ok) || v.one ? 0.7 : 0);\n add(0.3, shape, sh.many ? \"Returns a list\" : \"Returns a matching value\");\n add(0.15, o.intent === \"read\" ? 1 : o.intent ? 0 : 0.5, o.intent === \"read\" ? \"Reads data\" : null);\n } else {\n add(0.2, v.req.length ? 0.8 : 0.2, null);\n add(0.15, o.intent === \"write\" ? 1 : o.intent === \"read\" ? 0.1 : 0.5, o.intent === \"write\" ? \"Saves data\" : null);\n const body = v.req.filter(([p]) => p.startsWith(\"/body/\"));\n const filled = Object.entries(prop).filter(([p, e]) => p.startsWith(\"/body/\") && !e.startsWith(\"$\")).length;\n add(0.3, body.length ? Math.min(1, filled / Math.min(own, body.length)) : 0, filled ? `Uses ${filled} values from this screen` : null);\n }\n const required = v.req.filter(r => r[2]);\n if (required.length) {\n const ok = required.filter(([p]) => prop[p]).length;\n add(0.25, ok / required.length, ok === required.length ? \"All required inputs available\" : null);\n } else add(0.25, 1, null);\n if (o.product) add(0.1, o.product === S.path[0] ? 1 : 0, o.product === S.path[0] ? `From ${o.product}` : null);\n const nm = cover(o);\n add(0.35, nm.score, nm.score >= 0.5 ? (nm.near ? `Name fits “${comp.label}”` : \"Name fits this screen\") : null);\n return { view: v, score: w ? tot / w : 0, reasons };\n }).sort((a, b) => b.score - a.score);\n }\n\n /* status */\n function slotState(s: ScreenId, c: BindId, sl: string): SlotState {\n const b = getB(s, c, sl);\n return !b ? \"unbound\" : b.state === \"confirmed\" ? \"bound\" : \"suggested\";\n }\n function compState(s: ScreenId, comp: ComponentInstance): SlotState | \"partial\" {\n const sl = bindable(descOf(comp));\n if (!sl.length) return \"bound\";\n const st = sl.map(x => slotState(s, comp.bindId, x.id));\n if (st.includes(\"suggested\")) return \"suggested\";\n if (st.every(x => x === \"bound\")) return \"bound\";\n const must = sl.filter(x => x.required);\n if (must.length && must.every(x => slotState(s, comp.bindId, x.id) === \"bound\") && st.includes(\"bound\")) return \"bound\";\n return st.includes(\"bound\") ? \"partial\" : \"unbound\";\n }\n /** Counts components, not slots. */\n function tally(screens: ScreenEntry[]) {\n const t = { bound: 0, suggested: 0, unbound: 0, total: 0 };\n screens.forEach(S => S.components.forEach(c => {\n if (!bindable(descOf(c)).length) return;\n const st = compState(S.id, c);\n t[st === \"partial\" ? \"unbound\" : st]++; t.total++;\n }));\n return t;\n }\n\n const fieldsAt = (v: OpView, select: string): Field[] => (select === \"$\" ? v.one ?? [] : v.lists.find(l => l.select === select)?.fields ?? []);\n\n /** Consume binding for `opId`. With `strict`, null when nothing in the response fits the slot. */\n function proposeConsume(s: ScreenId, comp: ComponentInstance, slot: SlotDescriptor, opId: string, strict = false): OperationConsumeBinding | null {\n const v = OPV.get(opId);\n if (!v) return null;\n const shape = shapeOf(s, comp, slot);\n const props = shape.fields && !shape.via ? shape.fields : null;\n let select: string | undefined;\n if (shape.many) select = v.lists[0]?.select;\n else if (props) select = v.one ? \"$\" : v.lists[0]?.select;\n else {\n const scal: Source[] = v.scalars.map(([path, t]) => ({ expr: path, label: humanize(path), name: path.slice(2), type: t, group: \"item\" }));\n select = (rankSources(slot.label, shape.type ?? \"any\", scal)[0] ?? rankSources(`${comp.label} ${slot.label}`, shape.type ?? \"any\", scal)[0])?.expr.split(\" | \")[0];\n if (!select && !strict) select = v.scalars.find(([, t]) => typeFit(shape.type ?? \"any\", t).ok)?.[0];\n }\n if (!select) { if (strict) return null; select = \"$\"; }\n return {\n component: comp.bindId, slot: slot.id, type: \"operation\", operation: opId, select,\n request: proposeRequest(v, sources(s)),\n map: props ? proposeMap(props, fieldsAt(v, select)) : undefined,\n load: \"open\", origin: \"suggested\", state: \"draft\",\n };\n }\n /** Unbound consume slots of the same component that the same response can fill. */\n function siblingFills(s: ScreenId, comp: ComponentInstance, slot: SlotDescriptor, opId: string): OperationConsumeBinding[] {\n return bindable(descOf(comp)).filter(x => x.role === \"consume\" && !x.scope && x.id !== slot.id && !getB(s, comp.bindId, x.id))\n .map(x => proposeConsume(s, comp, x, opId, true)).filter((b): b is OperationConsumeBinding => !!b);\n }\n\n return {\n fw, OPV, OPS, DESC, SCR, getB, screen, compOf, descOf, bindable, typeFit, shapeOf, contextShape, scopeFields,\n sources, triggerSources, bestSource, rankSources, proposeRequest, proposeMap, rank, slotState, compState, tally, manyContext,\n fieldsAt, proposeConsume, siblingFills,\n };\n}\nexport type Engine = ReturnType<typeof createEngine>;\n\n",
|
|
10
|
+
"/** Matching, proposals and status for bindings. Generic: no kinds, products or field names. */\r\nimport type {\r\n OperationConsumeBinding,\r\n BindId, Catalog, CatalogOperation, ComponentDescriptor, ComponentInstance, ContextDeclaration,\r\n ContextProvider, Glossary, ScreenEntry, ScreenId, ScreenRegistry, SlotBinding,\r\n SlotDescriptor, TransformDefinition,\r\n} from \"./contract\";\r\nimport { synonymIndex, words, humanize } from \"./names\";\r\nimport { flat, obj, opViews, propsOf, typeName, type Field, type OpView } from \"./schema\";\r\n\r\nexport type { Field, OpView, ReqField } from \"./schema\";\r\nexport { opViews } from \"./schema\";\r\nexport { humanize, words } from \"./names\";\r\n\r\n\r\nexport interface FrameworkData {\r\n descriptors: ComponentDescriptor[];\r\n registry: ScreenRegistry;\r\n catalog: Catalog;\r\n transforms?: TransformDefinition[];\r\n providers?: ContextProvider[];\r\n glossaries?: Glossary[];\r\n}\r\n\r\n\r\nexport interface Source {\r\n expr: string; label: string; name?: string; type: string; group: \"item\" | \"screen\" | \"context\" | \"provider\"; fields?: Field[];\r\n /** Set when the value's shape is not known yet: names the slot that must be connected first. */\r\n waitsFor?: string;\r\n}\r\nexport interface Ranked { view: OpView; score: number; reasons: string[] }\r\nexport type SlotState = \"bound\" | \"suggested\" | \"unbound\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Engine */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport type BindingIndex = Record<ScreenId, SlotBinding[]>;\r\n\r\nexport function createEngine(fw: FrameworkData, manifests: BindingIndex) {\r\n const OPV = opViews(fw.catalog);\r\n const OPS = [...OPV.values()];\r\n const DESC = new Map(fw.descriptors.map(d => [d.kind, d]));\r\n const SCR = new Map(fw.registry.screens.map(s => [s.id, s]));\r\n const transforms = fw.transforms ?? [];\r\n const providers = fw.providers ?? [];\r\n const syn = synonymIndex(fw.glossaries ?? []);\r\n\r\n const key = (s: string, c: string, sl: string) => `${s}|${c}|${sl}`;\r\n const BIND = new Map<string, SlotBinding>();\r\n for (const [s, list] of Object.entries(manifests)) for (const b of list) {\r\n if (b.type === \"operation\" && !OPV.has(b.operation)) continue; // operation no longer in the catalog\r\n if (b.type === \"steps\" && b.steps.some(st => !OPV.has(st.operation))) continue;\r\n BIND.set(key(s, b.component, b.slot), b);\r\n }\r\n const getB = (s: ScreenId, c: BindId, sl: string) => BIND.get(key(s, c, sl));\r\n const screen = (id: ScreenId) => SCR.get(id)!;\r\n const compOf = (s: ScreenId, id: BindId) => SCR.get(s)?.components.find(c => c.bindId === id);\r\n const descOf = (c: ComponentInstance) => DESC.get(c.kind);\r\n const bindable = (d: ComponentDescriptor | undefined) => (d ? d.slots.filter(x => x.role !== \"produce\") : []);\r\n\r\n /* names */\r\n const tokCache = new Map<string, Set<string>>();\r\n const tok = (text: string, expand: boolean) => {\r\n const k = (expand ? \"+\" : \"-\") + text;\r\n let out = tokCache.get(k);\r\n if (out) return out;\r\n out = new Set<string>();\r\n for (const w of words(text)) { out.add(w); if (expand) (syn[w] ?? []).forEach(x => out!.add(x)); }\r\n tokCache.set(k, out);\r\n return out;\r\n };\r\n /** Synonyms expand the source side only, so a glossary widens matches without raising scores. */\r\n function nameScore(target: string, source: string) {\r\n const a = tok(target, false), b = tok(source, true);\r\n if (!a.size || !b.size) return 0;\r\n let n = 0; a.forEach(x => { if (b.has(x)) n++; });\r\n return n && n / a.size >= 0.5 ? (0.6 * n) / a.size + (0.4 * n) / b.size : 0;\r\n }\r\n const base = (t: string) => t.replace(\"[]\", \"\");\r\n function typeFit(target: string, source: string): { ok: boolean; transform?: string } {\r\n if (target !== \"any\" && source !== \"any\" && target.endsWith(\"[]\") !== source.endsWith(\"[]\")) return { ok: false };\r\n const t = base(target), s = base(source);\r\n if (t === \"any\" || s === \"any\" || t === s) return { ok: true };\r\n // Widening never loses a value: an integer is a number, and any scalar shows as text (ids, codes).\r\n if ((t === \"number\" && s === \"integer\") || (t === \"string\" && [\"integer\", \"number\", \"boolean\"].includes(s))) return { ok: true };\r\n const tr = transforms.find(x => typeName(x.input) === s && typeName(x.output) === t);\r\n return tr ? { ok: true, transform: tr.name } : { ok: false };\r\n }\r\n\r\n /* shapes: types flow through bindings */\r\n function bindingFields(s: ScreenId, c: BindId, slotId: string): Field[] | null {\r\n const b = getB(s, c, slotId);\r\n if (!b || b.type !== \"operation\") return null;\r\n const v = OPV.get(b.operation);\r\n if (!v) return null;\r\n if (b.select === \"$\" && v.one) return v.one;\r\n return v.lists.find(x => x.select === b.select)?.fields ?? null;\r\n }\r\n function shapeOf(s: ScreenId, comp: ComponentInstance, slot: SlotDescriptor): { many: boolean; fields?: Field[]; type?: string; via?: string } {\r\n const sc = obj(slot.schema);\r\n if (typeof sc.$ref === \"string\" && sc.$ref.startsWith(\"#slot/\")) {\r\n const via = sc.$ref.slice(6);\r\n return { many: !!slot.many, fields: bindingFields(s, comp.bindId, via) ?? [], via };\r\n }\r\n if (flat(sc).properties) return { many: !!slot.many, fields: propsOf(sc) };\r\n return { many: !!slot.many, type: typeName(sc) };\r\n }\r\n function contextShape(ctx: ContextDeclaration): { many: boolean; fields: Field[] } {\r\n if (\"schema\" in ctx.shape) return { many: !!ctx.many, fields: propsOf(ctx.shape.schema) };\r\n const f = ctx.shape.from, comp = compOf(f.screen, f.component), d = comp && descOf(comp), slot = d?.slots.find(x => x.id === f.slot);\r\n return { many: !!ctx.many, fields: (slot && comp ? shapeOf(f.screen, comp, slot).fields : null) ?? [] };\r\n }\r\n /** Fields of `$item` for a scoped slot: the parent's bound data. */\r\n function scopeFields(s: ScreenId, comp: ComponentInstance, slot: SlotDescriptor): Field[] | null {\r\n if (!slot.scope || !comp.parent) return null;\r\n return bindingFields(s, comp.parent, slot.scope.parentSlot);\r\n }\r\n function manyContext(s: ScreenId) { return screen(s).context.find(x => x.many); }\r\n\r\n /* values available on a screen */\r\n function sources(s: ScreenId, opts: { item?: Field[] } = {}): Source[] {\r\n const out: Source[] = [], S = screen(s);\r\n opts.item?.forEach(([f, t]) => out.push({ expr: `$item.${f}`, label: humanize(f), name: f, type: t, group: \"item\" }));\r\n S.components.forEach(c => {\r\n const d = descOf(c);\r\n d?.slots.filter(x => x.role === \"produce\").forEach(sl => {\r\n const sh = shapeOf(s, c, sl);\r\n if (sh.fields?.length) {\r\n if (sh.many) out.push({ expr: `${c.bindId}:${sl.id}`, label: `${c.label} · ${sl.label}`, type: \"list\", group: \"screen\", fields: sh.fields });\r\n sh.fields.forEach(([f, t]) => out.push({ expr: `${c.bindId}:${sl.id}${sh.many ? \"[*]\" : \"\"}.${f}`, label: `${c.label} · ${humanize(f)}`, name: f, type: sh.many ? t + \"[]\" : t, group: \"screen\" }));\r\n } else if (sh.via) {\r\n const via = d.slots.find(x => x.id === sh.via);\r\n out.push({ expr: `${c.bindId}:${sl.id}`, label: `${c.label} · ${sl.label}`, type: \"pending\", group: \"screen\", waitsFor: `${c.label} · ${via?.label ?? sh.via}` });\r\n } else out.push({ expr: `${c.bindId}:${sl.id}`, label: c.label + (sl.label && bindable(d).length + 1 < d.slots.length ? ` · ${sl.label}` : \"\"), name: c.label, type: sh.many ? \"list\" : sh.type ?? \"any\", group: \"screen\" });\r\n });\r\n });\r\n S.context.forEach(ctx => {\r\n const sh = contextShape(ctx);\r\n if (ctx.many) out.push({ expr: `$context.${ctx.id}`, label: ctx.label, type: \"list\", group: \"context\", fields: sh.fields });\r\n sh.fields.forEach(([f, t]) => out.push({ expr: `$context.${ctx.id}${ctx.many ? \"[*]\" : \"\"}.${f}`, label: `${ctx.label} · ${humanize(f)}`, name: f, type: ctx.many ? t + \"[]\" : t, group: \"context\" }));\r\n });\r\n providers.forEach(p => propsOf(p.schema).forEach(([f, t]) => out.push({ expr: `$${p.id}.${f}`, label: `${p.label} · ${humanize(f)}`, name: `${p.label} ${f}`, type: t, group: \"provider\" })));\r\n return out;\r\n }\r\n /** Sources that fit the target type, best name match first. */\r\n function rankSources(targetName: string, targetType: string, srcs: Source[], min = 0.65) {\r\n const out: Array<{ expr: string; score: number; source: Source }> = [];\r\n for (const x of srcs) {\r\n if (x.type === \"list\" || x.waitsFor) continue;\r\n const fit = typeFit(targetType, x.type);\r\n if (!fit.ok) continue;\r\n let sc = Math.max(nameScore(targetName, x.name ?? x.label), nameScore(targetName, x.label) * 0.9);\r\n if (x.group === \"screen\") sc += 0.12; else if (x.group === \"item\") sc += 0.05;\r\n if (fit.transform) sc -= 0.05;\r\n if (sc >= min) out.push({ expr: x.expr + (fit.transform ? ` | ${fit.transform}()` : \"\"), score: sc, source: x });\r\n }\r\n return out.sort((a, b) => b.score - a.score);\r\n }\r\n function bestSource(targetName: string, targetType: string, srcs: Source[]) {\r\n return rankSources(targetName, targetType, srcs)[0] ?? null;\r\n }\r\n /** A one-word field is qualified by its parent: the path resource for parameters, the parent object for body fields. */\r\n function qualified(ptr: string, op: CatalogOperation) {\r\n const parts = ptr.split(\"/\").filter(Boolean), name = parts[parts.length - 1];\r\n if (words(name).length > 1) return name;\r\n if (parts[0] === \"body\") return parts.length > 2 ? `${parts[parts.length - 2]} ${name}` : name;\r\n const segs = op.path.split(\"/\").filter(x => x && !x.startsWith(\"{\"));\r\n return `${segs[segs.length - 1] ?? \"\"} ${name}`;\r\n }\r\n function proposeRequest(v: OpView, srcs: Source[]) {\r\n const req: Record<string, string> = {};\r\n v.req.forEach(([ptr, t]) => { const m = bestSource(qualified(ptr, v.op), t, srcs); if (m) req[ptr] = m.expr; });\r\n return req;\r\n }\r\n function proposeMap(slotFields: Field[], itemFields: Field[]) {\r\n const map: Record<string, string> = {};\r\n const srcs: Source[] = itemFields.map(([f, t]) => ({ expr: `$item.${f}`, name: f, label: f, type: t, group: \"item\" }));\r\n slotFields.forEach(([p, t]) => { const m = bestSource(p, t, srcs); if (m) map[p] = m.expr; });\r\n return map;\r\n }\r\n function triggerSources(s: ScreenId, item?: Field[]) {\r\n const mc = manyContext(s);\r\n return sources(s, { item: item ?? (mc ? contextShape(mc).fields : undefined) });\r\n }\r\n\r\n /* matchers: generic, metadata only */\r\n function rank(s: ScreenId, comp: ComponentInstance, slot: SlotDescriptor): Ranked[] {\r\n const S = screen(s);\r\n const near = tok([comp.label, ...(slot.hints?.keywords ?? [])].join(\" \"), true);\r\n const far = tok([S.label, ...S.path].join(\" \"), true);\r\n /** Share of the operation's name covered by the component (full weight) or the screen (half). */\r\n const cover = (o: CatalogOperation) => {\r\n const own = tok([o.id, ...o.tags].join(\" \"), false);\r\n if (!own.size) return { score: 0, near: false };\r\n let a = 0, b = 0; own.forEach(w => { if (near.has(w)) a++; else if (far.has(w)) b++; });\r\n return { score: Math.min(1, (a + 0.5 * b) / own.size), near: a > 0 };\r\n };\r\n const srcs = slot.role === \"trigger\" ? triggerSources(s) : sources(s);\r\n const own = srcs.filter(x => x.group === \"screen\" && x.type !== \"list\").length || 1;\r\n return OPS.map(v => {\r\n const reasons: string[] = []; let tot = 0, w = 0;\r\n const add = (weight: number, score: number, why: string | null) => { tot += weight * score; w += weight; if (score >= 0.5 && why) reasons.push(why); };\r\n const o = v.op;\r\n const prop = proposeRequest(v, srcs);\r\n if (slot.role === \"consume\") {\r\n const sh = shapeOf(s, comp, slot);\r\n const shape = sh.many ? (v.lists.length ? 1 : 0) : sh.fields?.length ? (v.one || v.lists.length ? 0.7 : 0) : (v.scalars.some(([, t]) => typeFit(sh.type ?? \"any\", t).ok) || v.one ? 0.7 : 0);\r\n add(0.3, shape, sh.many ? \"Returns a list\" : \"Returns a matching value\");\r\n add(0.15, o.intent === \"read\" ? 1 : o.intent ? 0 : 0.5, o.intent === \"read\" ? \"Reads data\" : null);\r\n } else {\r\n add(0.2, v.req.length ? 0.8 : 0.2, null);\r\n add(0.15, o.intent === \"write\" ? 1 : o.intent === \"read\" ? 0.1 : 0.5, o.intent === \"write\" ? \"Saves data\" : null);\r\n const body = v.req.filter(([p]) => p.startsWith(\"/body/\"));\r\n const filled = Object.entries(prop).filter(([p, e]) => p.startsWith(\"/body/\") && !e.startsWith(\"$\")).length;\r\n add(0.3, body.length ? Math.min(1, filled / Math.min(own, body.length)) : 0, filled ? `Uses ${filled} values from this screen` : null);\r\n }\r\n const required = v.req.filter(r => r[2]);\r\n if (required.length) {\r\n const ok = required.filter(([p]) => prop[p]).length;\r\n add(0.25, ok / required.length, ok === required.length ? \"All required inputs available\" : null);\r\n } else add(0.25, 1, null);\r\n if (o.product) add(0.1, o.product === S.path[0] ? 1 : 0, o.product === S.path[0] ? `From ${o.product}` : null);\r\n const nm = cover(o);\r\n add(0.35, nm.score, nm.score >= 0.5 ? (nm.near ? `Name fits “${comp.label}”` : \"Name fits this screen\") : null);\r\n return { view: v, score: w ? tot / w : 0, reasons };\r\n }).sort((a, b) => b.score - a.score);\r\n }\r\n\r\n /* status */\r\n function slotState(s: ScreenId, c: BindId, sl: string): SlotState {\r\n const b = getB(s, c, sl);\r\n return !b ? \"unbound\" : b.state === \"confirmed\" ? \"bound\" : \"suggested\";\r\n }\r\n function compState(s: ScreenId, comp: ComponentInstance): SlotState | \"partial\" {\r\n const sl = bindable(descOf(comp));\r\n if (!sl.length) return \"bound\";\r\n const st = sl.map(x => slotState(s, comp.bindId, x.id));\r\n if (st.includes(\"suggested\")) return \"suggested\";\r\n if (st.every(x => x === \"bound\")) return \"bound\";\r\n const must = sl.filter(x => x.required);\r\n if (must.length && must.every(x => slotState(s, comp.bindId, x.id) === \"bound\") && st.includes(\"bound\")) return \"bound\";\r\n return st.includes(\"bound\") ? \"partial\" : \"unbound\";\r\n }\r\n /** Counts components, not slots. */\r\n function tally(screens: ScreenEntry[]) {\r\n const t = { bound: 0, suggested: 0, unbound: 0, total: 0 };\r\n screens.forEach(S => S.components.forEach(c => {\r\n if (!bindable(descOf(c)).length) return;\r\n const st = compState(S.id, c);\r\n t[st === \"partial\" ? \"unbound\" : st]++; t.total++;\r\n }));\r\n return t;\r\n }\r\n\r\n const fieldsAt = (v: OpView, select: string): Field[] => (select === \"$\" ? v.one ?? [] : v.lists.find(l => l.select === select)?.fields ?? []);\r\n\r\n /** Consume binding for `opId`. With `strict`, null when nothing in the response fits the slot. */\r\n function proposeConsume(s: ScreenId, comp: ComponentInstance, slot: SlotDescriptor, opId: string, strict = false): OperationConsumeBinding | null {\r\n const v = OPV.get(opId);\r\n if (!v) return null;\r\n const shape = shapeOf(s, comp, slot);\r\n const props = shape.fields && !shape.via ? shape.fields : null;\r\n let select: string | undefined;\r\n if (shape.many) select = v.lists[0]?.select;\r\n else if (props) select = v.one ? \"$\" : v.lists[0]?.select;\r\n else {\r\n const scal: Source[] = v.scalars.map(([path, t]) => ({ expr: path, label: humanize(path), name: path.slice(2), type: t, group: \"item\" }));\r\n select = (rankSources(slot.label, shape.type ?? \"any\", scal)[0] ?? rankSources(`${comp.label} ${slot.label}`, shape.type ?? \"any\", scal)[0])?.expr.split(\" | \")[0];\r\n if (!select && !strict) select = v.scalars.find(([, t]) => typeFit(shape.type ?? \"any\", t).ok)?.[0];\r\n }\r\n if (!select) { if (strict) return null; select = \"$\"; }\r\n return {\r\n component: comp.bindId, slot: slot.id, type: \"operation\", operation: opId, select,\r\n request: proposeRequest(v, sources(s)),\r\n map: props ? proposeMap(props, fieldsAt(v, select)) : undefined,\r\n load: \"open\", origin: \"suggested\", state: \"draft\",\r\n };\r\n }\r\n /** Unbound consume slots of the same component that the same response can fill. */\r\n function siblingFills(s: ScreenId, comp: ComponentInstance, slot: SlotDescriptor, opId: string): OperationConsumeBinding[] {\r\n return bindable(descOf(comp)).filter(x => x.role === \"consume\" && !x.scope && x.id !== slot.id && !getB(s, comp.bindId, x.id))\r\n .map(x => proposeConsume(s, comp, x, opId, true)).filter((b): b is OperationConsumeBinding => !!b);\r\n }\r\n\r\n return {\r\n fw, OPV, OPS, DESC, SCR, getB, screen, compOf, descOf, bindable, typeFit, shapeOf, contextShape, scopeFields,\r\n sources, triggerSources, bestSource, rankSources, proposeRequest, proposeMap, rank, slotState, compState, tally, manyContext,\r\n fieldsAt, proposeConsume, siblingFills,\r\n };\r\n}\r\nexport type Engine = ReturnType<typeof createEngine>;\r\n\r\n",
|
|
11
11
|
"import type { ScreenRegistry, ValidationIssue } from \"./contract\";\nimport type { Engine, FrameworkData } from \"./engine\";\nimport { ID } from \"./file\";\n\n/* ------------------------------------------------------------------ */\n/* Validation: what does not validate is not shown */\n/* ------------------------------------------------------------------ */\n\nexport function validateRegistry(fw: FrameworkData): { registry: ScreenRegistry; issues: ValidationIssue[] } {\n const kinds = new Set(fw.descriptors.map(d => d.kind));\n const issues: ValidationIssue[] = [];\n const ids = new Set(fw.registry.screens.map(s => s.id));\n const seen = new Set<string>();\n const screens = fw.registry.screens.map(S => {\n if (!ID.test(S.id)) { issues.push({ severity: \"error\", screen: S.id, code: \"registry.invalid-id\", message: `Screen id \"${S.id}\" must be lowercase kebab-case segments joined by dots.` }); return { ...S, components: [] }; }\n const components = S.components.filter(c => {\n if (!ID.test(c.bindId)) { issues.push({ severity: \"error\", screen: S.id, component: c.bindId, code: \"registry.invalid-id\", message: `Component id \"${c.bindId}\" must be lowercase kebab-case segments joined by dots.` }); return false; }\n if (!kinds.has(c.kind)) { issues.push({ severity: \"error\", screen: S.id, component: c.bindId, code: \"registry.unknown-kind\", message: `\"${c.label}\" uses ${c.kind}, which has no descriptor.` }); return false; }\n if (seen.has(c.bindId)) { issues.push({ severity: \"error\", screen: S.id, component: c.bindId, code: \"registry.duplicate-id\", message: `Component id \"${c.bindId}\" is used twice.` }); return false; }\n seen.add(c.bindId); return true;\n }).filter(c => !c.parent || seen.has(c.parent) || (issues.push({ severity: \"error\", screen: S.id, component: c.bindId, code: \"registry.missing-parent\", message: `\"${c.label}\" names a parent that is not on the screen.` }), false));\n const parent = S.parent && ids.has(S.parent) ? S.parent : undefined;\n return { ...S, components, parent };\n });\n return { registry: { ...fw.registry, screens }, issues };\n}\n\nexport function validateBindings(engine: Engine): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n for (const S of engine.fw.registry.screens) for (const c of S.components) {\n const d = engine.descOf(c);\n d?.slots.filter(sl => sl.required && sl.role !== \"produce\").forEach(sl => {\n if (engine.slotState(S.id, c.bindId, sl.id) !== \"bound\") issues.push({ severity: \"warning\", screen: S.id, component: c.bindId, slot: sl.id, code: \"slot.required-unbound\", message: `${c.label}: ${sl.label} is not connected.` });\n });\n }\n return issues;\n}\n"
|
|
12
12
|
],
|
|
13
|
-
"mappings": ";AAIA,IAAM,UAAU,CAAC,OAAO,OAAO,QAAQ,UAAU,SAAS,QAAQ,WAAW,SAAS,OAAO;AAGtF,SAAS,UAAU,CAAC,GAAmB;AAAA,EAC5C,IAAI,IAAI;AAAA,EACR,SAAS,IAAI,EAAG,IAAI,EAAE,QAAQ,KAAK;AAAA,IAAE,KAAK,EAAE,WAAW,CAAC;AAAA,IAAG,IAAI,KAAK,KAAK,GAAG,QAAU;AAAA,EAAG;AAAA,EACzF,QAAQ,MAAM,GAAG,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA;AAG/C,SAAS,UAAU,CAAC,KAAU,KAAsB;AAAA,EAClD,IAAI,CAAC,IAAI,WAAW,IAAI;AAAA,IAAG;AAAA,EAC3B,OAAO,IAAI,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,CAAC,EAC9E,OAAY,CAAC,GAAG,MAAO,KAAK,OAAO,YAAY,EAAE,IAAK,GAAG;AAAA;AAI9D,SAAS,KAAK,CAAC,KAAU,MAAe,OAAiB,CAAC,GAAQ;AAAA,EAChE,IAAI,MAAM,QAAQ,IAAI;AAAA,IAAG,OAAO,KAAK,IAAI,OAAK,MAAM,KAAK,GAAG,IAAI,CAAC;AAAA,EACjE,IAAI,CAAC,QAAQ,OAAO,SAAS;AAAA,IAAU,OAAO;AAAA,EAC9C,MAAM,IAAI;AAAA,EACV,IAAI,OAAO,EAAE,SAAS,UAAU;AAAA,IAC9B,IAAI,KAAK,SAAS,EAAE,IAAI,KAAK,KAAK,SAAS;AAAA,MAAI,OAAO,EAAE,MAAM,EAAE,KAAK;AAAA,IACrE,QAAQ,SAAS,SAAS;AAAA,IAC1B,MAAM,SAAS,MAAM,KAAK,WAAW,KAAK,IAAI,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,IAChE,OAAO,OAAO,KAAK,IAAI,EAAE,SAAS,KAAK,WAAW,MAAM,KAAK,MAAM,IAAI,EAAE,IAAI;AAAA,EAC/E;AAAA,EACA,MAAM,MAAW,CAAC;AAAA,EAClB,YAAY,GAAG,MAAM,OAAO,QAAQ,CAAC;AAAA,IAAG,IAAI,KAAK,MAAM,KAAK,GAAG,IAAI;AAAA,EACnE,OAAO;AAAA;AAGT,SAAS,WAAW,CAAC,SAAkD;AAAA,EACrE,IAAI,CAAC;AAAA,IAAS;AAAA,EACd,MAAM,MAAM,OAAO,KAAK,OAAO,EAAE,KAAK,OAAK,QAAQ,KAAK,CAAC,CAAC,KAAK,OAAO,KAAK,OAAO,EAAE;AAAA,EACpF,OAAO,MAAM,QAAQ,MAAM,SAAS;AAAA;AAGtC,SAAS,QAAQ,CAAC,QAAgB,IAA6B;AAAA,EAC7D,IAAI,OAAO,GAAG,wBAAwB;AAAA,IAAU,OAAO,GAAG;AAAA,EAC1D,IAAI,WAAW,SAAS,WAAW,UAAU,WAAW;AAAA,IAAS,OAAO;AAAA,EACxE,IAAI,CAAC,OAAO,SAAS,QAAQ,EAAE,SAAS,MAAM;AAAA,IAAG,OAAO;AAAA,EACxD;AAAA;AAGK,SAAS,mBAAkB,CAAC,OAAgB,SAA2B,CAAC,GAAY;AAAA,EACzF,MAAM,MAAM;AAAA,EACZ,IAAI,CAAC,OAAO,OAAO,QAAQ,YAAY,CAAC,IAAI;AAAA,IAAO,MAAM,IAAI,MAAM,wDAAwD;AAAA,EAC3H,MAAM,aAAiC,CAAC;AAAA,EAExC,MAAM,YAAY,IAAI;AAAA,EACtB,WAAW,KAAM,IAAI,kBAA4E,CAAC;AAAA,IAAG,EAAE,MAAM,QAAQ,OAAK;AAAA,MAAE,IAAI,EAAE;AAAA,QAAM,UAAU,IAAI,GAAG,EAAE,IAAI;AAAA,KAAI;AAAA,EACnK,YAAY,MAAM,YAAY,OAAO,QAAa,IAAI,KAAK,GAAG;AAAA,IAC5D,MAAM,OAAO,MAAM,KAAK,OAAO;AAAA,IAC/B,WAAW,UAAU,SAAS;AAAA,MAC5B,MAAM,KAAK,OAAO;AAAA,MAClB,IAAI,CAAC,MAAM,CAAC,GAAG;AAAA,QAAa;AAAA,MAC5B,MAAM,SAA6B,CAAC;AAAA,MACpC,WAAW,KAAK,CAAC,GAAI,KAAK,cAAc,CAAC,GAAI,GAAI,GAAG,cAAc,CAAC,CAAE,GAAG;AAAA,QACtE,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG;AAAA,UAAI;AAAA,QACxB,MAAM,UAAU,IAAI,EAAE,MAAM,EAAE;AAAA,QAC9B,MAAM,KAAK,OAAO,UAAU,OAAK,EAAE,YAAY,OAAO;AAAA,QACtD,MAAM,QAAQ,EAAE,SAAS,MAAM,EAAE,MAAM,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,QAAQ,QAAQ,EAAE,UAAU,CAAC,GAAG,aAAa,EAAE,YAAY;AAAA,QACrI,IAAI,MAAM;AAAA,UAAG,OAAO,MAAM;AAAA,QAAO;AAAA,UAAK,OAAO,KAAK,KAAK;AAAA,MACzD;AAAA,MACA,WAAW,KAAK,KAAK,SAAS,cAAc,GAAG;AAAA,QAC7C,IAAI,CAAC,OAAO,KAAK,OAAK,EAAE,YAAY,SAAS,EAAE,IAAI;AAAA,UAAG,OAAO,QAAQ,EAAE,SAAS,SAAS,EAAE,MAAM,MAAM,EAAE,IAAI,UAAU,MAAM,QAAQ,EAAE,MAAM,SAAS,EAAE,CAAC;AAAA,MAC3J;AAAA,MACA,MAAM,aAAa,YAAY,GAAG,aAAa,OAAO;AAAA,MACtD,MAAM,YAAY,OAAO,QAAa,GAAG,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,QAAQ,EAAE,QAAQ,QAAQ,YAAY,GAAG,OAAO,EAAE,EAAE;AAAA,MAC5H,MAAM,aAAkB,CAAC;AAAA,MACzB,YAAY,GAAG,MAAM,OAAO,QAAQ,EAAE;AAAA,QAAG,IAAI,EAAE,WAAW,IAAI;AAAA,UAAG,WAAW,KAAK;AAAA,MACjF,WAAW,KAAK;AAAA,QACd,IAAI,GAAG;AAAA,QAAa,QAAQ,OAAO,YAAY;AAAA,QAAG;AAAA,QAClD,SAAS,GAAG;AAAA,QAAS,aAAa,GAAG;AAAA,QAAa,MAAM,GAAG,QAAQ,CAAC;AAAA,QACpE,SAAU,GAAG,MAA+B,IAAI,OAAK,UAAU,IAAI,CAAC,CAAC,EAAE,KAAK,OAAO;AAAA,QACnF,QAAQ,SAAS,QAAQ,EAAE;AAAA,QAAG,YAAY;AAAA,QAC1C,MAAM,aAAa,EAAE,UAAU,CAAC,CAAC,GAAG,aAAa,UAAU,QAAQ,WAAW,IAAI;AAAA,QAClF;AAAA,QAAW;AAAA,MACb,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EACA,MAAM,OAAO,KAAK,UAAU,UAAU;AAAA,EACtC,OAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,QAAQ,EAAE,OAAO,IAAI,MAAM,SAAS,OAAO,SAAS,IAAI,MAAM,WAAW,IAAI,KAAK,OAAO,IAAI;AAAA,IAC7F,MAAM,WAAW,IAAI;AAAA,IACrB;AAAA,IACA,SAAS,CAAC;AAAA,EACZ;AAAA;;;AC3FF;AAIO,MAAM,0BAAyB,MAAM;AAAA,EACJ;AAAA,EAAtC,WAAW,CAAC,SAA0B,QAAgB;AAAA,IAAE,MAAM,OAAO;AAAA,IAA/B;AAAA,IAAkC,KAAK,OAAO;AAAA;AACtF;AAGO,SAAS,gBAAe,CAAC,MAAc,QAAyB;AAAA,EACrE,MAAM,OAAO,KAAK,KAAK;AAAA,EACvB,IAAI,CAAC;AAAA,IAAM,MAAM,IAAI,kBAAiB,uCAAuC,MAAM;AAAA,EACnF,IAAI;AAAA,EACJ,IAAI;AAAA,IAEF,MAAM,KAAK,WAAW,GAAG,IAAI,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,IAC1D,MAAM;AAAA,IACN,MAAM,IAAI,kBAAiB,uCAAuC,MAAM;AAAA;AAAA,EAE1E,IAAI;AAAA,IACF,OAAO,oBAAmB,KAAK,OAAO,SAAS,KAAK,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC;AAAA,IAC5E,OAAO,GAAG;AAAA,IACV,MAAM,IAAI,kBAAiB,aAAa,QAAQ,EAAE,UAAU,wCAAwC,MAAM;AAAA;AAAA;AAIvG,eAAe,YAAW,CAAC,KAAa,MAAsC;AAAA,EACnF,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,MAAM,MAAM,MAAM,KAAK,KAAK,MAAM,SAAS,EAAE,QAAQ,yDAAyD,MAAM,QAAQ,EAAE,CAAC;AAAA,IAC/H,MAAM;AAAA,IAEN,MAAM,IAAI,kBAAiB,iHAAiH,GAAG;AAAA;AAAA,EAEjJ,IAAI,CAAC,IAAI;AAAA,IAAI,MAAM,IAAI,kBAAiB,4BAA4B,IAAI,UAAU,IAAI,8BAA8B,GAAG;AAAA,EACvH,OAAO,iBAAgB,MAAM,IAAI,KAAK,GAAG,GAAG;AAAA;;;AC7BvC,IAAM,OAAO,CAAC,MAAe,EAAE,SAAS,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,MAAM,GAAG,EAAE,IAAI;AAChF,SAAS,YAAY,CAAC,YAAwB;AAAA,EACnD,MAAM,IAA8B,CAAC;AAAA,EACrC,WAAW,QAAQ,OAAK,EAAE,SAAS,QAAQ,SAAO;AAAA,IAAE,MAAM,KAAK,IAAI,IAAI,OAAK,KAAK,EAAE,YAAY,CAAC,CAAC;AAAA,IAAG,GAAG,QAAQ,OAAK;AAAA,MAAE,EAAE,KAAK;AAAA,KAAK;AAAA,GAAI,CAAC;AAAA,EACvI,OAAO;AAAA;AAEF,SAAS,KAAK,CAAC,MAAwB;AAAA,EAC5C,OAAO,KAAK,QAAQ,sBAAsB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,EAAE,OAAO,OAAK,EAAE,SAAS,CAAC,EAAE,IAAI,IAAI;AAAA;AAGlH,SAAS,QAAQ,CAAC,IAAoB;AAAA,EAC3C,MAAM,IAAI,GAAG,QAAQ,UAAU,EAAE,EAAE,QAAQ,WAAW,EAAE,EAAE,MAAM,MAAM,EAAE,OAAO,OAAO,EAAE,IAAI,KAAK;AAAA,EACjG,MAAM,IAAI,EAAE,QAAQ,sBAAsB,OAAO,EAAE,QAAQ,UAAU,GAAG,EAAE,YAAY,EAAE,KAAK;AAAA,EAC7F,OAAO,IAAI,EAAE,GAAG,YAAY,IAAI,EAAE,MAAM,CAAC,IAAI;AAAA;;;ACdxC,IAAM,MAAK;AAElB,IAAM,gBAAgB,IAAI,IAAI,CAAC,aAAa,cAAc,SAAS,MAAM,CAAC;AAGnE,SAAS,kBAAiB,CAAC,MAA4B;AAAA,EAC5D,IAAI;AAAA,EACJ,IAAI;AAAA,IAAE,OAAO,KAAK,MAAM,IAAI;AAAA,IAAK,MAAM;AAAA,IAAE,MAAM,IAAI,MAAM,sCAAsC;AAAA;AAAA,EAC/F,OAAO,kBAAkB,IAAI;AAAA;AAIxB,SAAS,iBAAiB,CAAC,MAA6B;AAAA,EAC7D,MAAM,IAAI;AAAA,EACV,IAAI,CAAC,KAAK,OAAO,MAAM;AAAA,IAAU,MAAM,IAAI,MAAM,0CAA0C;AAAA,EAC3F,IAAI,EAAE,YAAY;AAAA,IAAG,MAAM,IAAI,MAAM,2CAA2C;AAAA,EAChF,IAAI,OAAO,EAAE,YAAY,YAAY,CAAC,EAAE;AAAA,IAAS,MAAM,IAAI,MAAM,4DAA4D;AAAA,EAC7H,WAAW,KAAK,CAAC,SAAS,WAAW,cAAc,UAAU;AAAA,IAAY,IAAI,CAAC,MAAM,QAAQ,EAAE,EAAE;AAAA,MAAG,MAAM,IAAI,MAAM,IAAI,oBAAoB;AAAA,EAC3I,EAAE,SAAU,QAAQ,CAAC,GAAG,MAAM;AAAA,IAC5B,MAAM,IAAI;AAAA,IACV,IAAI,CAAC,KAAK,OAAO,EAAE,cAAc,YAAY,OAAO,EAAE,SAAS,YAAY,CAAC,cAAc,IAAI,EAAE,IAAc;AAAA,MAC5G,MAAM,IAAI,MAAM,WAAW,IAAI,iDAAiD;AAAA,GACnF;AAAA,EACD,IAAI,EAAE,WAAW,OAAO,EAAE,OAAO,QAAQ,YAAY,OAAO,EAAE,OAAO,WAAW;AAAA,IAAW,MAAM,IAAI,MAAM,oCAAoC;AAAA,EAC/I,OAAO;AAAA;AAqCF,SAAS,SAAQ,CAAC,IAAY,SAAoD;AAAA,EACvF,IAAI;AAAA,EACJ,WAAW,KAAK;AAAA,IAAS,IAAI,GAAG,WAAW,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,KAAK;AAAA,MAAS,OAAO;AAAA,EACjG,OAAO;AAAA;AAIT,SAAS,YAAY,CAAC,KAAa,SAA0B;AAAA,EAC3D,MAAM,QAAQ,IAAI,IAAI,QAAQ,WAAW,IAAI,OAAK,EAAE,OAAO,EAAE,OAAO,CAAC,MAAmB,CAAC,CAAC,CAAC,CAAC;AAAA,EAC5F,OAAO,CAAC,GAAG,KAAK,EAAE,KAAK,OAAK,EAAE,YAAY,EAAE,QAAQ,eAAe,GAAG,MAAM,GAAG,KAAK,SAAS,GAAG;AAAA;AAI3F,SAAS,SAAQ,CAAC,MAAoB,SAAyF;AAAA,EACpI,MAAM,SAA4B,CAAC;AAAA,EACnC,MAAM,MAAM,KAAK,QAAQ,IAAI,OAAK,EAAE,EAAE;AAAA,EACtC,MAAM,UAAyB,KAAK,QAAQ,IAAI,QAAM;AAAA,IACpD,IAAI,EAAE;AAAA,IAAI,OAAO,EAAE;AAAA,IAAO,aAAa,EAAE;AAAA,IAAa,SAAS,EAAE,WAAW,CAAC;AAAA,IAAG,YAAY,CAAC;AAAA,IAC7F,MAAM,CAAC,aAAa,EAAE,GAAG,MAAM,GAAG,EAAE,IAAI,OAAO,CAAC;AAAA,IAChD,QAAQ,UAAS,EAAE,IAAI,GAAG;AAAA,EAC5B,EAAE;AAAA,EACF,MAAM,OAAO,IAAI,IAAI,QAAQ,IAAI,OAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAAA,EAChD,MAAM,YAAY,IAAI,IAAI,GAAG;AAAA,EAC7B,WAAW,KAAK,KAAK,YAAY;AAAA,IAE/B,IAAI,UAAU,IAAI,EAAE,EAAE,GAAG;AAAA,MAAE,OAAO,KAAK,EAAE,UAAU,SAAS,QAAQ,EAAE,IAAI,WAAW,EAAE,IAAI,MAAM,qBAAqB,SAAS,IAAI,EAAE,2CAA2C,CAAC;AAAA,MAAG;AAAA,IAAU;AAAA,IAC9L,MAAM,IAAI,UAAS,EAAE,IAAI,GAAG;AAAA,IAC5B,IAAI,CAAC,GAAG;AAAA,MAAE,OAAO,KAAK,EAAE,UAAU,SAAS,QAAQ,IAAI,WAAW,EAAE,IAAI,MAAM,sBAAsB,SAAS,IAAI,EAAE,2CAA2C,CAAC;AAAA,MAAG;AAAA,IAAU;AAAA,IAC5K,KAAK,IAAI,CAAC,EAAG,WAAW,KAAK,EAAE,QAAQ,EAAE,IAAI,MAAM,EAAE,MAAM,OAAO,EAAE,OAAO,QAAQ,EAAE,QAAQ,MAAM,EAAE,KAAK,CAAC;AAAA,EAC7G;AAAA,EACA,MAAM,QAAsB,CAAC;AAAA,EAC7B,WAAW,KAAK,KAAK,UAAU;AAAA,IAC7B,MAAM,IAAI,UAAS,EAAE,WAAW,GAAG;AAAA,IACnC,IAAI,CAAC,GAAG;AAAA,MAAE,OAAO,KAAK,EAAE,UAAU,SAAS,QAAQ,IAAI,WAAW,EAAE,WAAW,MAAM,EAAE,MAAM,MAAM,qBAAqB,SAAS,gBAAgB,EAAE,6BAA6B,CAAC;AAAA,MAAG;AAAA,IAAU;AAAA,KAC7L,MAAM,OAAO,CAAC,GAAG,KAAK,CAAC;AAAA,EAC1B;AAAA,EACA,OAAO;AAAA,IACL,IAAI,EAAE,aAAa,KAAK,OAAO,UAAU,EAAE,iBAAiB,GAAG,QAAQ,GAAG,SAAS,YAAY,KAAK,WAAW;AAAA,IAC/G;AAAA,IAAO;AAAA,EACT;AAAA;AAIK,SAAS,OAAM,CAAC,MAAoB,OAAmC;AAAA,EAC5E,MAAM,QAAQ,IAAI,IAAI,KAAK,WAAW,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAAA,EAC9D,MAAM,WAAW,OAAO,OAAO,KAAK,EAAE,KAAK,EACxC,KAAK,CAAC,GAAG,OAAO,MAAM,IAAI,EAAE,SAAS,KAAK,QAAQ,MAAM,IAAI,EAAE,SAAS,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAAA,EACnH,OAAO,KAAK,MAAM,SAAS;AAAA;AAItB,SAAS,YAAW,CAAC,MAAoB;AAAA,EAC9C,IAAI,OAAO;AAAA,EACX,OAAO,EAAE,MAAM,YAAY,MAAM,MAAM,OAAO,MAAoB;AAAA,IAAE,OAAO;AAAA,SAAU,OAAO,GAAG;AAAA,IAAE,OAAO;AAAA,IAAQ;AAAA;AAI3G,SAAS,UAAS,CAAC,KAAa;AAAA,EACrC,OAAO;AAAA,UACC,IAAI,GAAG;AAAA,MACX,MAAM,MAAM,MAAM,MAAM,KAAK,EAAE,OAAO,WAAW,CAAC;AAAA,MAClD,IAAI,CAAC,IAAI;AAAA,QAAI,MAAM,IAAI,MAAM,0CAA0C,IAAI,UAAU;AAAA,MACrF,OAAO,mBAAkB,MAAM,IAAI,KAAK,CAAC;AAAA;AAAA,UAErC,IAAI,CAAC,MAAoB;AAAA,MAC7B,MAAM,MAAM,MAAM,MAAM,KAAK,EAAE,QAAQ,OAAO,SAAS,EAAE,gBAAgB,mBAAmB,GAAG,MAAM,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI;AAAA,EAAK,CAAC;AAAA,MAC3I,IAAI,CAAC,IAAI;AAAA,QAAI,MAAM,IAAI,MAAO,MAAM,IAAI,KAAK,KAAM,wBAAwB,IAAI,UAAU;AAAA;AAAA,EAE7F;AAAA;;;ACpHK,IAAM,MAAM,CAAC,MAAkC,KAAK,OAAO,MAAM,WAAY,IAAU,CAAC;AACxF,SAAS,IAAI,CAAC,GAA8B;AAAA,EACjD,MAAM,IAAI,IAAI,CAAC;AAAA,EACf,MAAM,QAAQ,CAAC,GAAG,IAAK,EAAE,SAA0B,CAAC,GAAG,IAAI,IAAI,CAAC;AAAA,EAChE,IAAI,MAAM,WAAW,KAAK,CAAC,EAAE,SAAS,CAAC,EAAE;AAAA,IAAO,OAAO;AAAA,EACvD,MAAM,QAAW,CAAC;AAAA,EAClB,MAAM,WAAqB,CAAC;AAAA,EAC5B,MAAM,QAAQ,OAAK;AAAA,IAAE,OAAO,OAAO,OAAO,EAAE,cAAc,CAAC,CAAC;AAAA,IAAG,SAAS,KAAK,GAAI,EAAE,YAAY,CAAC,CAAE;AAAA,GAAI;AAAA,EACtG,MAAM,OAAQ,EAAE,SAAS,EAAE,QAAqC,IAAI,IAAI,EAAE,KAAK,OAAK,EAAE,SAAS,MAAM;AAAA,EACrG,OAAO,KAAM,OAAO,CAAC,MAAO,GAAG,YAAY,OAAO,KAAK,KAAK,EAAE,SAAS,QAAQ,KAAK,YAAY,SAAS;AAAA;AAEpG,SAAS,QAAQ,CAAC,GAAmC;AAAA,EAC1D,MAAM,IAAI,KAAK,CAAC;AAAA,EAChB,MAAM,IAAI,MAAM,QAAQ,EAAE,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,MAAc,MAAM,MAAM,IAAI,EAAE;AAAA,EAC/E,IAAI,MAAM;AAAA,IAAS,OAAO,SAAS,EAAE,KAAK,IAAI;AAAA,EAC9C,IAAI,EAAE,WAAW,eAAe,EAAE,WAAW;AAAA,IAAQ,OAAO;AAAA,EAC5D,IAAI,MAAM,aAAa,MAAM;AAAA,IAAU,OAAO;AAAA,EAC9C,OAAO,MAAM,EAAE,aAAa,WAAW;AAAA;AAElC,IAAM,WAAW,CAAC,MAA8B;AAAA,EAAE,MAAM,IAAI,KAAK,CAAC;AAAA,EAAG,OAAO,EAAE,SAAS,YAAY,CAAC,CAAC,EAAE;AAAA;AACvG,IAAM,UAAU,CAAC,MAAuC,OAAO,QAAoB,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AAEpJ,SAAS,MAAM,CAAC,QAAoB,QAAgB,UAAmB,KAAiB,QAAQ,GAAG;AAAA,EACjG,MAAM,IAAI,KAAK,MAAM;AAAA,EACrB,IAAI,SAAS,CAAC,GAAG;AAAA,IACf,MAAM,QAAQ,OAAO,QAAoB,EAAE,cAAc,CAAC,CAAC;AAAA,IAC3D,IAAI,CAAC,MAAM,UAAU,QAAQ,GAAG;AAAA,MAAE,IAAI,KAAK,CAAC,QAAQ,UAAU,QAAQ,CAAC;AAAA,MAAG;AAAA,IAAQ;AAAA,IAClF,MAAM,MAAM,IAAI,IAAY,EAAE,YAAY,CAAC,CAAC;AAAA,IAC5C,MAAM,QAAQ,EAAE,GAAG,OAAO;AAAA,MAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AAAA,QAAU,OAAO,GAAG,GAAG,UAAU,KAAK,YAAY,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC;AAAA,KAAI;AAAA,EAC3H,EAAE;AAAA,IAAK,IAAI,KAAK,CAAC,QAAQ,SAAS,CAAC,GAAG,QAAQ,CAAC;AAAA;AAEjD,SAAS,OAAO,CAAC,QAAgC,MAAc,KAAsB,QAAQ,GAAG;AAAA,EAC9F,MAAM,IAAI,KAAK,MAAM;AAAA,EACrB,IAAI,EAAE,SAAS,SAAS;AAAA,IAAE,IAAI,SAAS,EAAE,KAAK;AAAA,MAAG,IAAI,KAAK,EAAE,QAAQ,GAAG,WAAW,QAAQ,QAAQ,EAAE,KAAK,EAAE,CAAC;AAAA,IAAG;AAAA,EAAQ;AAAA,EACvH,IAAI,SAAS,CAAC,KAAK,QAAQ;AAAA,IAAG,OAAO,QAAoB,EAAE,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,OAAO,QAAQ,GAAG,GAAG,QAAQ,KAAK,KAAK,QAAQ,CAAC,CAAC;AAAA;AAG7I,IAAM,QAAQ,IAAI;AACX,SAAS,OAAO,CAAC,SAAuC;AAAA,EAC7D,IAAI,IAAI,MAAM,IAAI,OAAO;AAAA,EACzB,IAAI;AAAA,IAAG,OAAO;AAAA,EACd,IAAI,IAAI;AAAA,EACR,WAAW,MAAM,QAAQ,YAAY;AAAA,IACnC,MAAM,MAAkB,GAAG,WAAW,IAAI,OAAK,CAAC,EAAE,SAAS,SAAS,EAAE,MAAM,GAAG,EAAE,QAAQ,CAAC;AAAA,IAC1F,IAAI,GAAG;AAAA,MAAM,OAAO,GAAG,KAAK,QAAQ,SAAS,GAAG,KAAK,UAAU,GAAG;AAAA,IAClE,MAAM,KAAK,GAAG,UAAU,KAAK,OAAK,KAAK,KAAK,EAAE,MAAM,KAAK,EAAE,MAAM;AAAA,IACjE,MAAM,QAAyB,CAAC;AAAA,IAChC,IAAI;AAAA,MAAI,QAAQ,GAAG,QAAQ,KAAK,KAAK;AAAA,IACrC,MAAM,MAAM,MAAM,CAAC,MAAM,UAAU,SAAS,GAAG,MAAM,IAAI,QAAQ,GAAG,MAAM,IAAI;AAAA,IAC9E,MAAM,UAAU,KAAK,QAAQ,GAAG,MAAM,EAAE,OAAO,IAAI,OAAO,MAAM,YAAY,CAAC,EAAE,SAAS,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,KAAK,CAAC,CAAU,IAAI,CAAC;AAAA,IAC1I,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,KAAK,QAAQ,CAAC;AAAA,EAC/C;AAAA,EACA,MAAM,IAAI,SAAS,CAAC;AAAA,EACpB,OAAO;AAAA;;;ACjCF,SAAS,aAAY,CAAC,IAAmB,WAAyB;AAAA,EACvE,MAAM,MAAM,QAAQ,GAAG,OAAO;AAAA,EAC9B,MAAM,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC;AAAA,EAC5B,MAAM,OAAO,IAAI,IAAI,GAAG,YAAY,IAAI,OAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAAA,EACzD,MAAM,MAAM,IAAI,IAAI,GAAG,SAAS,QAAQ,IAAI,OAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAAA,EAC3D,MAAM,aAAa,GAAG,cAAc,CAAC;AAAA,EACrC,MAAM,YAAY,GAAG,aAAa,CAAC;AAAA,EACnC,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC;AAAA,EAE5C,MAAM,MAAM,CAAC,GAAW,GAAW,OAAe,GAAG,KAAK,KAAK;AAAA,EAC/D,MAAM,OAAO,IAAI;AAAA,EACjB,YAAY,GAAG,SAAS,OAAO,QAAQ,SAAS;AAAA,IAAG,WAAW,KAAK,MAAM;AAAA,MACvE,IAAI,EAAE,SAAS,eAAe,CAAC,IAAI,IAAI,EAAE,SAAS;AAAA,QAAG;AAAA,MACrD,IAAI,EAAE,SAAS,WAAW,EAAE,MAAM,KAAK,QAAM,CAAC,IAAI,IAAI,GAAG,SAAS,CAAC;AAAA,QAAG;AAAA,MACtE,KAAK,IAAI,IAAI,GAAG,EAAE,WAAW,EAAE,IAAI,GAAG,CAAC;AAAA,IACzC;AAAA,EACA,MAAM,OAAO,CAAC,GAAa,GAAW,OAAe,KAAK,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;AAAA,EAC3E,MAAM,SAAS,CAAC,OAAiB,IAAI,IAAI,EAAE;AAAA,EAC3C,MAAM,SAAS,CAAC,GAAa,OAAe,IAAI,IAAI,CAAC,GAAG,WAAW,KAAK,OAAK,EAAE,WAAW,EAAE;AAAA,EAC5F,MAAM,SAAS,CAAC,MAAyB,KAAK,IAAI,EAAE,IAAI;AAAA,EACxD,MAAM,WAAW,CAAC,MAAwC,IAAI,EAAE,MAAM,OAAO,OAAK,EAAE,SAAS,SAAS,IAAI,CAAC;AAAA,EAG3G,MAAM,WAAW,IAAI;AAAA,EACrB,MAAM,MAAM,CAAC,MAAc,WAAoB;AAAA,IAC7C,MAAM,KAAK,SAAS,MAAM,OAAO;AAAA,IACjC,IAAI,MAAM,SAAS,IAAI,CAAC;AAAA,IACxB,IAAI;AAAA,MAAK,OAAO;AAAA,IAChB,MAAM,IAAI;AAAA,IACV,WAAW,KAAK,MAAM,IAAI,GAAG;AAAA,MAAE,IAAI,IAAI,CAAC;AAAA,MAAG,IAAI;AAAA,SAAS,IAAI,MAAM,CAAC,GAAG,QAAQ,OAAK,IAAK,IAAI,CAAC,CAAC;AAAA,IAAG;AAAA,IACjG,SAAS,IAAI,GAAG,GAAG;AAAA,IACnB,OAAO;AAAA;AAAA,EAGT,SAAS,SAAS,CAAC,QAAgB,QAAgB;AAAA,IACjD,MAAM,IAAI,IAAI,QAAQ,KAAK,GAAG,IAAI,IAAI,QAAQ,IAAI;AAAA,IAClD,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE;AAAA,MAAM,OAAO;AAAA,IAC/B,IAAI,IAAI;AAAA,IAAG,EAAE,QAAQ,OAAK;AAAA,MAAE,IAAI,EAAE,IAAI,CAAC;AAAA,QAAG;AAAA,KAAM;AAAA,IAChD,OAAO,KAAK,IAAI,EAAE,QAAQ,MAAO,MAAM,IAAK,EAAE,OAAQ,MAAM,IAAK,EAAE,OAAO;AAAA;AAAA,EAE5E,MAAM,OAAO,CAAC,MAAc,EAAE,QAAQ,MAAM,EAAE;AAAA,EAC9C,SAAS,OAAO,CAAC,QAAgB,QAAqD;AAAA,IACpF,IAAI,WAAW,SAAS,WAAW,SAAS,OAAO,SAAS,IAAI,MAAM,OAAO,SAAS,IAAI;AAAA,MAAG,OAAO,EAAE,IAAI,MAAM;AAAA,IAChH,MAAM,IAAI,KAAK,MAAM,GAAG,IAAI,KAAK,MAAM;AAAA,IACvC,IAAI,MAAM,SAAS,MAAM,SAAS,MAAM;AAAA,MAAG,OAAO,EAAE,IAAI,KAAK;AAAA,IAC7D,MAAM,KAAK,WAAW,KAAK,OAAK,SAAS,EAAE,KAAK,MAAM,KAAK,SAAS,EAAE,MAAM,MAAM,CAAC;AAAA,IACnF,OAAO,KAAK,EAAE,IAAI,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE,IAAI,MAAM;AAAA;AAAA,EAI7D,SAAS,aAAa,CAAC,GAAa,GAAW,QAAgC;AAAA,IAC7E,MAAM,IAAI,KAAK,GAAG,GAAG,MAAM;AAAA,IAC3B,IAAI,CAAC,KAAK,EAAE,SAAS;AAAA,MAAa,OAAO;AAAA,IACzC,MAAM,IAAI,IAAI,IAAI,EAAE,SAAS;AAAA,IAC7B,IAAI,CAAC;AAAA,MAAG,OAAO;AAAA,IACf,IAAI,EAAE,WAAW,OAAO,EAAE;AAAA,MAAK,OAAO,EAAE;AAAA,IACxC,OAAO,EAAE,MAAM,KAAK,OAAK,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU;AAAA;AAAA,EAE7D,SAAS,OAAO,CAAC,GAAa,MAAyB,MAAwF;AAAA,IAC7I,MAAM,KAAK,IAAI,KAAK,MAAM;AAAA,IAC1B,IAAI,OAAO,GAAG,SAAS,YAAY,GAAG,KAAK,WAAW,QAAQ,GAAG;AAAA,MAC/D,MAAM,MAAM,GAAG,KAAK,MAAM,CAAC;AAAA,MAC3B,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,MAAM,QAAQ,cAAc,GAAG,KAAK,QAAQ,GAAG,KAAK,CAAC,GAAG,IAAI;AAAA,IACpF;AAAA,IACA,IAAI,KAAK,EAAE,EAAE;AAAA,MAAY,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,MAAM,QAAQ,QAAQ,EAAE,EAAE;AAAA,IACzE,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,MAAM,MAAM,SAAS,EAAE,EAAE;AAAA;AAAA,EAEjD,SAAS,YAAY,CAAC,KAA6D;AAAA,IACjF,IAAI,YAAY,IAAI;AAAA,MAAO,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,MAAM,QAAQ,QAAQ,IAAI,MAAM,MAAM,EAAE;AAAA,IACxF,MAAM,IAAI,IAAI,MAAM,MAAM,OAAO,OAAO,EAAE,QAAQ,EAAE,SAAS,GAAG,IAAI,QAAQ,OAAO,IAAI,GAAG,OAAO,GAAG,MAAM,KAAK,OAAK,EAAE,OAAO,EAAE,IAAI;AAAA,IACnI,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,MAAM,SAAS,QAAQ,OAAO,QAAQ,EAAE,QAAQ,MAAM,IAAI,EAAE,SAAS,SAAS,CAAC,EAAE;AAAA;AAAA,EAGxG,SAAS,WAAW,CAAC,GAAa,MAAyB,MAAsC;AAAA,IAC/F,IAAI,CAAC,KAAK,SAAS,CAAC,KAAK;AAAA,MAAQ,OAAO;AAAA,IACxC,OAAO,cAAc,GAAG,KAAK,QAAQ,KAAK,MAAM,UAAU;AAAA;AAAA,EAE5D,SAAS,WAAW,CAAC,GAAa;AAAA,IAAE,OAAO,OAAO,CAAC,EAAE,QAAQ,KAAK,OAAK,EAAE,IAAI;AAAA;AAAA,EAG7E,SAAS,OAAO,CAAC,GAAa,OAA2B,CAAC,GAAa;AAAA,IACrE,MAAM,MAAgB,CAAC,GAAG,IAAI,OAAO,CAAC;AAAA,IACtC,KAAK,MAAM,QAAQ,EAAE,GAAG,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,KAAK,OAAO,SAAS,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,OAAO,CAAC,CAAC;AAAA,IACpH,EAAE,WAAW,QAAQ,OAAK;AAAA,MACxB,MAAM,IAAI,OAAO,CAAC;AAAA,MAClB,GAAG,MAAM,OAAO,OAAK,EAAE,SAAS,SAAS,EAAE,QAAQ,QAAM;AAAA,QACvD,MAAM,KAAK,QAAQ,GAAG,GAAG,EAAE;AAAA,QAC3B,IAAI,GAAG,QAAQ,QAAQ;AAAA,UACrB,IAAI,GAAG;AAAA,YAAM,IAAI,KAAK,EAAE,MAAM,GAAG,EAAE,UAAU,GAAG,MAAM,OAAO,GAAG,EAAE,WAAW,GAAG,SAAS,MAAM,QAAQ,OAAO,UAAU,QAAQ,GAAG,OAAO,CAAC;AAAA,UAC3I,GAAG,OAAO,QAAQ,EAAE,GAAG,OAAO,IAAI,KAAK,EAAE,MAAM,GAAG,EAAE,UAAU,GAAG,KAAK,GAAG,OAAO,QAAQ,MAAM,KAAK,OAAO,GAAG,EAAE,WAAW,SAAS,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,IAAI,OAAO,GAAG,OAAO,SAAS,CAAC,CAAC;AAAA,QACpM,EAAE,KAAK,IAAI,GAAG,KAAK;AAAA,UACjB,MAAM,MAAM,EAAE,MAAM,KAAK,OAAK,EAAE,OAAO,GAAG,GAAG;AAAA,UAC7C,IAAI,KAAK,EAAE,MAAM,GAAG,EAAE,UAAU,GAAG,MAAM,OAAO,GAAG,EAAE,WAAW,GAAG,SAAS,MAAM,WAAW,OAAO,UAAU,UAAU,GAAG,EAAE,WAAW,KAAK,SAAS,GAAG,MAAM,CAAC;AAAA,QAClK,EAAE;AAAA,UAAK,IAAI,KAAK,EAAE,MAAM,GAAG,EAAE,UAAU,GAAG,MAAM,OAAO,EAAE,SAAS,GAAG,SAAS,SAAS,CAAC,EAAE,SAAS,IAAI,EAAE,MAAM,SAAS,MAAM,GAAG,UAAU,KAAK,MAAM,EAAE,OAAO,MAAM,GAAG,OAAO,SAAS,GAAG,QAAQ,OAAO,OAAO,SAAS,CAAC;AAAA,OAC5N;AAAA,KACF;AAAA,IACD,EAAE,QAAQ,QAAQ,SAAO;AAAA,MACvB,MAAM,KAAK,aAAa,GAAG;AAAA,MAC3B,IAAI,IAAI;AAAA,QAAM,IAAI,KAAK,EAAE,MAAM,YAAY,IAAI,MAAM,OAAO,IAAI,OAAO,MAAM,QAAQ,OAAO,WAAW,QAAQ,GAAG,OAAO,CAAC;AAAA,MAC1H,GAAG,OAAO,QAAQ,EAAE,GAAG,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,IAAI,KAAK,IAAI,OAAO,QAAQ,MAAM,KAAK,OAAO,GAAG,IAAI,WAAW,SAAS,CAAC,KAAK,MAAM,GAAG,MAAM,IAAI,OAAO,IAAI,OAAO,GAAG,OAAO,UAAU,CAAC,CAAC;AAAA,KACtM;AAAA,IACD,UAAU,QAAQ,OAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,IAAI,KAAK,EAAE,MAAM,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,EAAE,WAAW,SAAS,CAAC,KAAK,MAAM,GAAG,EAAE,SAAS,KAAK,MAAM,GAAG,OAAO,WAAW,CAAC,CAAC,CAAC;AAAA,IAC5L,OAAO;AAAA;AAAA,EAGT,SAAS,WAAW,CAAC,YAAoB,YAAoB,MAAgB,MAAM,MAAM;AAAA,IACvF,MAAM,MAA8D,CAAC;AAAA,IACrE,WAAW,KAAK,MAAM;AAAA,MACpB,IAAI,EAAE,SAAS,UAAU,EAAE;AAAA,QAAU;AAAA,MACrC,MAAM,MAAM,QAAQ,YAAY,EAAE,IAAI;AAAA,MACtC,IAAI,CAAC,IAAI;AAAA,QAAI;AAAA,MACb,IAAI,KAAK,KAAK,IAAI,UAAU,YAAY,EAAE,QAAQ,EAAE,KAAK,GAAG,UAAU,YAAY,EAAE,KAAK,IAAI,GAAG;AAAA,MAChG,IAAI,EAAE,UAAU;AAAA,QAAU,MAAM;AAAA,MAAM,KAAK,IAAI,EAAE,UAAU;AAAA,QAAQ,MAAM;AAAA,MACzE,IAAI,IAAI;AAAA,QAAW,MAAM;AAAA,MACzB,IAAI,MAAM;AAAA,QAAK,IAAI,KAAK,EAAE,MAAM,EAAE,QAAQ,IAAI,YAAY,MAAM,IAAI,gBAAgB,KAAK,OAAO,IAAI,QAAQ,EAAE,CAAC;AAAA,IACjH;AAAA,IACA,OAAO,IAAI,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAAA;AAAA,EAE7C,SAAS,UAAU,CAAC,YAAoB,YAAoB,MAAgB;AAAA,IAC1E,OAAO,YAAY,YAAY,YAAY,IAAI,EAAE,MAAM;AAAA;AAAA,EAGzD,SAAS,SAAS,CAAC,KAAa,IAAsB;AAAA,IACpD,MAAM,QAAQ,IAAI,MAAM,GAAG,EAAE,OAAO,OAAO,GAAG,OAAO,MAAM,MAAM,SAAS;AAAA,IAC1E,IAAI,MAAM,IAAI,EAAE,SAAS;AAAA,MAAG,OAAO;AAAA,IACnC,IAAI,MAAM,OAAO;AAAA,MAAQ,OAAO,MAAM,SAAS,IAAI,GAAG,MAAM,MAAM,SAAS,MAAM,SAAS;AAAA,IAC1F,MAAM,OAAO,GAAG,KAAK,MAAM,GAAG,EAAE,OAAO,OAAK,KAAK,CAAC,EAAE,WAAW,GAAG,CAAC;AAAA,IACnE,OAAO,GAAG,KAAK,KAAK,SAAS,MAAM,MAAM;AAAA;AAAA,EAE3C,SAAS,cAAc,CAAC,GAAW,MAAgB;AAAA,IACjD,MAAM,MAA8B,CAAC;AAAA,IACrC,EAAE,IAAI,QAAQ,EAAE,KAAK,OAAO;AAAA,MAAE,MAAM,IAAI,WAAW,UAAU,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI;AAAA,MAAG,IAAI;AAAA,QAAG,IAAI,OAAO,EAAE;AAAA,KAAO;AAAA,IAC9G,OAAO;AAAA;AAAA,EAET,SAAS,UAAU,CAAC,YAAqB,YAAqB;AAAA,IAC5D,MAAM,MAA8B,CAAC;AAAA,IACrC,MAAM,OAAiB,WAAW,IAAI,EAAE,GAAG,QAAQ,EAAE,MAAM,SAAS,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,OAAO,EAAE;AAAA,IACrH,WAAW,QAAQ,EAAE,GAAG,OAAO;AAAA,MAAE,MAAM,IAAI,WAAW,GAAG,GAAG,IAAI;AAAA,MAAG,IAAI;AAAA,QAAG,IAAI,KAAK,EAAE;AAAA,KAAO;AAAA,IAC5F,OAAO;AAAA;AAAA,EAET,SAAS,cAAc,CAAC,GAAa,MAAgB;AAAA,IACnD,MAAM,KAAK,YAAY,CAAC;AAAA,IACxB,OAAO,QAAQ,GAAG,EAAE,MAAM,SAAS,KAAK,aAAa,EAAE,EAAE,SAAS,WAAW,CAAC;AAAA;AAAA,EAIhF,SAAS,IAAI,CAAC,GAAa,MAAyB,MAAgC;AAAA,IAClF,MAAM,IAAI,OAAO,CAAC;AAAA,IAClB,MAAM,OAAO,IAAI,CAAC,KAAK,OAAO,GAAI,KAAK,OAAO,YAAY,CAAC,CAAE,EAAE,KAAK,GAAG,GAAG,IAAI;AAAA,IAC9E,MAAM,MAAM,IAAI,CAAC,EAAE,OAAO,GAAG,EAAE,IAAI,EAAE,KAAK,GAAG,GAAG,IAAI;AAAA,IAEpD,MAAM,QAAQ,CAAC,MAAwB;AAAA,MACrC,MAAM,MAAM,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,GAAG,GAAG,KAAK;AAAA,MAClD,IAAI,CAAC,IAAI;AAAA,QAAM,OAAO,EAAE,OAAO,GAAG,MAAM,MAAM;AAAA,MAC9C,IAAI,IAAI,GAAG,IAAI;AAAA,MAAG,IAAI,QAAQ,OAAK;AAAA,QAAE,IAAI,KAAK,IAAI,CAAC;AAAA,UAAG;AAAA,QAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AAAA,UAAG;AAAA,OAAM;AAAA,MACtF,OAAO,EAAE,OAAO,KAAK,IAAI,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE;AAAA;AAAA,IAErE,MAAM,OAAO,KAAK,SAAS,YAAY,eAAe,CAAC,IAAI,QAAQ,CAAC;AAAA,IACpE,MAAM,MAAM,KAAK,OAAO,OAAK,EAAE,UAAU,YAAY,EAAE,SAAS,MAAM,EAAE,UAAU;AAAA,IAClF,OAAO,IAAI,IAAI,OAAK;AAAA,MAClB,MAAM,UAAoB,CAAC;AAAA,MAAG,IAAI,MAAM,GAAG,IAAI;AAAA,MAC/C,MAAM,MAAM,CAAC,QAAgB,OAAe,QAAuB;AAAA,QAAE,OAAO,SAAS;AAAA,QAAO,KAAK;AAAA,QAAQ,IAAI,SAAS,OAAO;AAAA,UAAK,QAAQ,KAAK,GAAG;AAAA;AAAA,MAClJ,MAAM,IAAI,EAAE;AAAA,MACZ,MAAM,OAAO,eAAe,GAAG,IAAI;AAAA,MACnC,IAAI,KAAK,SAAS,WAAW;AAAA,QAC3B,MAAM,KAAK,QAAQ,GAAG,MAAM,IAAI;AAAA,QAChC,MAAM,QAAQ,GAAG,OAAQ,EAAE,MAAM,SAAS,IAAI,IAAK,GAAG,QAAQ,SAAU,EAAE,OAAO,EAAE,MAAM,SAAS,MAAM,IAAM,EAAE,QAAQ,KAAK,IAAI,OAAO,QAAQ,GAAG,QAAQ,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,MAAM;AAAA,QAC1L,IAAI,KAAK,OAAO,GAAG,OAAO,mBAAmB,0BAA0B;AAAA,QACvE,IAAI,MAAM,EAAE,WAAW,SAAS,IAAI,EAAE,SAAS,IAAI,KAAK,EAAE,WAAW,SAAS,eAAe,IAAI;AAAA,MACnG,EAAE,KAAK;AAAA,QACL,IAAI,KAAK,EAAE,IAAI,SAAS,MAAM,KAAK,IAAI;AAAA,QACvC,IAAI,MAAM,EAAE,WAAW,UAAU,IAAI,EAAE,WAAW,SAAS,MAAM,KAAK,EAAE,WAAW,UAAU,eAAe,IAAI;AAAA,QAChH,MAAM,OAAO,EAAE,IAAI,OAAO,EAAE,OAAO,EAAE,WAAW,QAAQ,CAAC;AAAA,QACzD,MAAM,SAAS,OAAO,QAAQ,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,WAAW,QAAQ,KAAK,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE;AAAA,QACrG,IAAI,KAAK,KAAK,SAAS,KAAK,IAAI,GAAG,SAAS,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,IAAI,GAAG,SAAS,QAAQ,mCAAmC,IAAI;AAAA;AAAA,MAEvI,MAAM,WAAW,EAAE,IAAI,OAAO,OAAK,EAAE,EAAE;AAAA,MACvC,IAAI,SAAS,QAAQ;AAAA,QACnB,MAAM,KAAK,SAAS,OAAO,EAAE,OAAO,KAAK,EAAE,EAAE;AAAA,QAC7C,IAAI,MAAM,KAAK,SAAS,QAAQ,OAAO,SAAS,SAAS,kCAAkC,IAAI;AAAA,MACjG,EAAE;AAAA,QAAK,IAAI,MAAM,GAAG,IAAI;AAAA,MACxB,IAAI,EAAE;AAAA,QAAS,IAAI,KAAK,EAAE,YAAY,EAAE,KAAK,KAAK,IAAI,GAAG,EAAE,YAAY,EAAE,KAAK,KAAK,QAAQ,EAAE,YAAY,IAAI;AAAA,MAC7G,MAAM,KAAK,MAAM,CAAC;AAAA,MAClB,IAAI,MAAM,GAAG,OAAO,GAAG,SAAS,MAAO,GAAG,OAAO,cAAc,KAAK,WAAW,0BAA2B,IAAI;AAAA,MAC9G,OAAO,EAAE,MAAM,GAAG,OAAO,IAAI,MAAM,IAAI,GAAG,QAAQ;AAAA,KACnD,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAAA;AAAA,EAIrC,SAAS,SAAS,CAAC,GAAa,GAAW,IAAuB;AAAA,IAChE,MAAM,IAAI,KAAK,GAAG,GAAG,EAAE;AAAA,IACvB,OAAO,CAAC,IAAI,YAAY,EAAE,UAAU,cAAc,UAAU;AAAA;AAAA,EAE9D,SAAS,SAAS,CAAC,GAAa,MAAgD;AAAA,IAC9E,MAAM,KAAK,SAAS,OAAO,IAAI,CAAC;AAAA,IAChC,IAAI,CAAC,GAAG;AAAA,MAAQ,OAAO;AAAA,IACvB,MAAM,KAAK,GAAG,IAAI,OAAK,UAAU,GAAG,KAAK,QAAQ,EAAE,EAAE,CAAC;AAAA,IACtD,IAAI,GAAG,SAAS,WAAW;AAAA,MAAG,OAAO;AAAA,IACrC,IAAI,GAAG,MAAM,OAAK,MAAM,OAAO;AAAA,MAAG,OAAO;AAAA,IACzC,MAAM,OAAO,GAAG,OAAO,OAAK,EAAE,QAAQ;AAAA,IACtC,IAAI,KAAK,UAAU,KAAK,MAAM,OAAK,UAAU,GAAG,KAAK,QAAQ,EAAE,EAAE,MAAM,OAAO,KAAK,GAAG,SAAS,OAAO;AAAA,MAAG,OAAO;AAAA,IAChH,OAAO,GAAG,SAAS,OAAO,IAAI,YAAY;AAAA;AAAA,EAG5C,SAAS,KAAK,CAAC,SAAwB;AAAA,IACrC,MAAM,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,EAAE;AAAA,IACzD,QAAQ,QAAQ,OAAK,EAAE,WAAW,QAAQ,OAAK;AAAA,MAC7C,IAAI,CAAC,SAAS,OAAO,CAAC,CAAC,EAAE;AAAA,QAAQ;AAAA,MACjC,MAAM,KAAK,UAAU,EAAE,IAAI,CAAC;AAAA,MAC5B,EAAE,OAAO,YAAY,YAAY;AAAA,MAAO,EAAE;AAAA,KAC3C,CAAC;AAAA,IACF,OAAO;AAAA;AAAA,EAGT,MAAM,WAAW,CAAC,GAAW,WAA6B,WAAW,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,KAAK,OAAK,EAAE,WAAW,MAAM,GAAG,UAAU,CAAC;AAAA,EAG5I,SAAS,cAAc,CAAC,GAAa,MAAyB,MAAsB,MAAc,SAAS,OAAuC;AAAA,IAChJ,MAAM,IAAI,IAAI,IAAI,IAAI;AAAA,IACtB,IAAI,CAAC;AAAA,MAAG,OAAO;AAAA,IACf,MAAM,QAAQ,QAAQ,GAAG,MAAM,IAAI;AAAA,IACnC,MAAM,QAAQ,MAAM,UAAU,CAAC,MAAM,MAAM,MAAM,SAAS;AAAA,IAC1D,IAAI;AAAA,IACJ,IAAI,MAAM;AAAA,MAAM,SAAS,EAAE,MAAM,IAAI;AAAA,IACrC,KAAK,IAAI;AAAA,MAAO,SAAS,EAAE,MAAM,MAAM,EAAE,MAAM,IAAI;AAAA,IACnD,KAAK;AAAA,MACH,MAAM,OAAiB,EAAE,QAAQ,IAAI,EAAE,MAAM,QAAQ,EAAE,MAAM,MAAM,OAAO,SAAS,IAAI,GAAG,MAAM,KAAK,MAAM,CAAC,GAAG,MAAM,GAAG,OAAO,OAAO,EAAE;AAAA,MACxI,UAAU,YAAY,KAAK,OAAO,MAAM,QAAQ,OAAO,IAAI,EAAE,MAAM,YAAY,GAAG,KAAK,SAAS,KAAK,SAAS,MAAM,QAAQ,OAAO,IAAI,EAAE,KAAK,KAAK,MAAM,KAAK,EAAE;AAAA,MAChK,IAAI,CAAC,UAAU,CAAC;AAAA,QAAQ,SAAS,EAAE,QAAQ,KAAK,IAAI,OAAO,QAAQ,MAAM,QAAQ,OAAO,CAAC,EAAE,EAAE,IAAI;AAAA;AAAA,IAEnG,IAAI,CAAC,QAAQ;AAAA,MAAE,IAAI;AAAA,QAAQ,OAAO;AAAA,MAAM,SAAS;AAAA,IAAK;AAAA,IACtD,OAAO;AAAA,MACL,WAAW,KAAK;AAAA,MAAQ,MAAM,KAAK;AAAA,MAAI,MAAM;AAAA,MAAa,WAAW;AAAA,MAAM;AAAA,MAC3E,SAAS,eAAe,GAAG,QAAQ,CAAC,CAAC;AAAA,MACrC,KAAK,QAAQ,WAAW,OAAO,SAAS,GAAG,MAAM,CAAC,IAAI;AAAA,MACtD,MAAM;AAAA,MAAQ,QAAQ;AAAA,MAAa,OAAO;AAAA,IAC5C;AAAA;AAAA,EAGF,SAAS,YAAY,CAAC,GAAa,MAAyB,MAAsB,MAAyC;AAAA,IACzH,OAAO,SAAS,OAAO,IAAI,CAAC,EAAE,OAAO,OAAK,EAAE,SAAS,aAAa,CAAC,EAAE,SAAS,EAAE,OAAO,KAAK,MAAM,CAAC,KAAK,GAAG,KAAK,QAAQ,EAAE,EAAE,CAAC,EAC1H,IAAI,OAAK,eAAe,GAAG,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,OAAO,CAAC,MAAoC,CAAC,CAAC,CAAC;AAAA;AAAA,EAGrG,OAAO;AAAA,IACL;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAM;AAAA,IAAK;AAAA,IAAM;AAAA,IAAQ;AAAA,IAAQ;AAAA,IAAQ;AAAA,IAAU;AAAA,IAAS;AAAA,IAAS;AAAA,IAAc;AAAA,IACjG;AAAA,IAAS;AAAA,IAAgB;AAAA,IAAY;AAAA,IAAa;AAAA,IAAgB;AAAA,IAAY;AAAA,IAAM;AAAA,IAAW;AAAA,IAAW;AAAA,IAAO;AAAA,IACjH;AAAA,IAAU;AAAA,IAAgB;AAAA,EAC5B;AAAA;;;ACvRK,SAAS,iBAAgB,CAAC,IAA4E;AAAA,EAC3G,MAAM,QAAQ,IAAI,IAAI,GAAG,YAAY,IAAI,OAAK,EAAE,IAAI,CAAC;AAAA,EACrD,MAAM,SAA4B,CAAC;AAAA,EACnC,MAAM,MAAM,IAAI,IAAI,GAAG,SAAS,QAAQ,IAAI,OAAK,EAAE,EAAE,CAAC;AAAA,EACtD,MAAM,OAAO,IAAI;AAAA,EACjB,MAAM,UAAU,GAAG,SAAS,QAAQ,IAAI,OAAK;AAAA,IAC3C,IAAI,CAAC,IAAG,KAAK,EAAE,EAAE,GAAG;AAAA,MAAE,OAAO,KAAK,EAAE,UAAU,SAAS,QAAQ,EAAE,IAAI,MAAM,uBAAuB,SAAS,cAAc,EAAE,4DAA4D,CAAC;AAAA,MAAG,OAAO,KAAK,GAAG,YAAY,CAAC,EAAE;AAAA,IAAG;AAAA,IAC5N,MAAM,aAAa,EAAE,WAAW,OAAO,OAAK;AAAA,MAC1C,IAAI,CAAC,IAAG,KAAK,EAAE,MAAM,GAAG;AAAA,QAAE,OAAO,KAAK,EAAE,UAAU,SAAS,QAAQ,EAAE,IAAI,WAAW,EAAE,QAAQ,MAAM,uBAAuB,SAAS,iBAAiB,EAAE,gEAAgE,CAAC;AAAA,QAAG,OAAO;AAAA,MAAO;AAAA,MACzO,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,GAAG;AAAA,QAAE,OAAO,KAAK,EAAE,UAAU,SAAS,QAAQ,EAAE,IAAI,WAAW,EAAE,QAAQ,MAAM,yBAAyB,SAAS,IAAI,EAAE,eAAe,EAAE,iCAAiC,CAAC;AAAA,QAAG,OAAO;AAAA,MAAO;AAAA,MAChN,IAAI,KAAK,IAAI,EAAE,MAAM,GAAG;AAAA,QAAE,OAAO,KAAK,EAAE,UAAU,SAAS,QAAQ,EAAE,IAAI,WAAW,EAAE,QAAQ,MAAM,yBAAyB,SAAS,iBAAiB,EAAE,yBAAyB,CAAC;AAAA,QAAG,OAAO;AAAA,MAAO;AAAA,MACpM,KAAK,IAAI,EAAE,MAAM;AAAA,MAAG,OAAO;AAAA,KAC5B,EAAE,OAAO,OAAK,CAAC,EAAE,UAAU,KAAK,IAAI,EAAE,MAAM,MAAM,OAAO,KAAK,EAAE,UAAU,SAAS,QAAQ,EAAE,IAAI,WAAW,EAAE,QAAQ,MAAM,2BAA2B,SAAS,IAAI,EAAE,mDAAmD,CAAC,GAAG,MAAM;AAAA,IACpO,MAAM,SAAS,EAAE,UAAU,IAAI,IAAI,EAAE,MAAM,IAAI,EAAE,SAAS;AAAA,IAC1D,OAAO,KAAK,GAAG,YAAY,OAAO;AAAA,GACnC;AAAA,EACD,OAAO,EAAE,UAAU,KAAK,GAAG,UAAU,QAAQ,GAAG,OAAO;AAAA;AAGlD,SAAS,iBAAgB,CAAC,QAAmC;AAAA,EAClE,MAAM,SAA4B,CAAC;AAAA,EACnC,WAAW,KAAK,OAAO,GAAG,SAAS;AAAA,IAAS,WAAW,KAAK,EAAE,YAAY;AAAA,MACxE,MAAM,IAAI,OAAO,OAAO,CAAC;AAAA,MACzB,GAAG,MAAM,OAAO,QAAM,GAAG,YAAY,GAAG,SAAS,SAAS,EAAE,QAAQ,QAAM;AAAA,QACxE,IAAI,OAAO,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,EAAE,MAAM;AAAA,UAAS,OAAO,KAAK,EAAE,UAAU,WAAW,QAAQ,EAAE,IAAI,WAAW,EAAE,QAAQ,MAAM,GAAG,IAAI,MAAM,yBAAyB,SAAS,GAAG,EAAE,UAAU,GAAG,0BAA0B,CAAC;AAAA,OAClO;AAAA,IACH;AAAA,EACA,OAAO;AAAA;",
|
|
14
|
-
"debugId": "
|
|
13
|
+
"mappings": "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",
|
|
14
|
+
"debugId": "C910E92233516EEC64756E2164756E21",
|
|
15
15
|
"names": []
|
|
16
16
|
}
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
createEngine2,
|
|
15
15
|
validateRegistry2,
|
|
16
16
|
validateBindings2
|
|
17
|
-
} from "./index-
|
|
17
|
+
} from "./index-s44cgmck.js";
|
|
18
18
|
// src/framework/expr.ts
|
|
19
19
|
var cache = new Map;
|
|
20
20
|
function segments(path) {
|
|
@@ -291,10 +291,6 @@ function compileSteps(steps, cx, at, ops, imports) {
|
|
|
291
291
|
cx.use.add("finish");
|
|
292
292
|
for (const st of steps) {
|
|
293
293
|
const op = ops.get(st.operation);
|
|
294
|
-
if (!op) {
|
|
295
|
-
cx.issue("catalog.operation-missing", `${st.operation} is not in the API docs.`, at);
|
|
296
|
-
continue;
|
|
297
|
-
}
|
|
298
294
|
const scope = { item: true, steps: done };
|
|
299
295
|
const call = compileCall(op, st.request, cx, scope, at);
|
|
300
296
|
imports.add(call.fn);
|
|
@@ -365,6 +361,12 @@ function generate(file, catalog) {
|
|
|
365
361
|
issue: (code, message, at) => issues.push({ severity: "error", screen: screen.id, code, message, ...at }),
|
|
366
362
|
warn: (code, message, at) => issues.push({ severity: "warning", screen: screen.id, code, message, ...at })
|
|
367
363
|
};
|
|
364
|
+
const gone = (operations, at) => {
|
|
365
|
+
const missing = operations.filter((o) => !ops.has(o));
|
|
366
|
+
for (const o of missing)
|
|
367
|
+
cx.warn("catalog.operation-missing", `${o} is no longer in the API docs; generated unbound until it is rebound.`, at);
|
|
368
|
+
return missing.length > 0;
|
|
369
|
+
};
|
|
368
370
|
const bindings = new Map;
|
|
369
371
|
for (const b of index[screen.id] ?? []) {
|
|
370
372
|
if (!keys.has(b.component)) {
|
|
@@ -402,7 +404,7 @@ function generate(file, catalog) {
|
|
|
402
404
|
if (s.role === "trigger") {
|
|
403
405
|
types.add("Action");
|
|
404
406
|
outT.push(`${prop(s.id)}: Action`);
|
|
405
|
-
if (b?.type !== "steps") {
|
|
407
|
+
if (b?.type !== "steps" || gone(b.steps.map((st) => st.operation), at)) {
|
|
406
408
|
unbound(s.id, "UNBOUND_ACTION");
|
|
407
409
|
continue;
|
|
408
410
|
}
|
|
@@ -428,13 +430,11 @@ function generate(file, catalog) {
|
|
|
428
430
|
out.push(`${prop(s.id)}: { bound: true, data: ${compileExpr(b.value, cx, { item: false }, at)}, loading: false, error: undefined }`);
|
|
429
431
|
continue;
|
|
430
432
|
}
|
|
431
|
-
|
|
432
|
-
if (b?.type === "operation" && !op)
|
|
433
|
-
cx.issue("catalog.operation-missing", `${b.operation} is not in the API docs.`, at);
|
|
434
|
-
if (b?.type !== "operation" || !op) {
|
|
433
|
+
if (b?.type !== "operation" || gone([b.operation], at)) {
|
|
435
434
|
unbound(s.id, "UNBOUND_DATA");
|
|
436
435
|
continue;
|
|
437
436
|
}
|
|
437
|
+
const op = ops.get(b.operation);
|
|
438
438
|
const call = compileCall(op, b.request, cx, { item: false }, at);
|
|
439
439
|
imports.add(call.fn);
|
|
440
440
|
["useData", "ok"].forEach((h) => cx.use.add(h));
|
|
@@ -514,5 +514,5 @@ export {
|
|
|
514
514
|
validateRegistry2 as validateRegistry
|
|
515
515
|
};
|
|
516
516
|
|
|
517
|
-
//# debugId=
|
|
517
|
+
//# debugId=83AB46009B22A46A64756E2164756E21
|
|
518
518
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * Expression grammar (FRAMEWORK.md §7). One grammar for every source:\n *\n * <componentId>:<slot>[.path] a produce slot on the screen\n * $item[.path] the current item (scoped slot, forEach, or the trigger's payload)\n * $context.<id>[.path] a value the screen received\n * $steps.<stepId>[.path] an earlier call step's result ({ response })\n * <expr>[*].<path> every item of a list\n *\n * Component ids contain dots, so \":\" ends the id. Nothing outside this grammar is valid.\n */\n\nexport type Head =\n | { type: \"slot\"; component: string; slot: string }\n | { type: \"item\" }\n | { type: \"context\"; id: string }\n | { type: \"steps\"; id: string };\n\nexport interface Parsed { head: Head; path: string[] }\n\nconst cache = new Map<string, Parsed>();\n\n/** \"a.b[*].c\" → [\"a\", \"b\", \"*\", \"c\"] */\nexport function segments(path: string): string[] {\n return path.replace(/\\[(\\*|\\d+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n}\n\nexport function parse(expr: string): Parsed {\n const hit = cache.get(expr);\n if (hit) return hit;\n const e = expr.trim();\n let parsed: Parsed;\n if (e.startsWith(\"$\")) {\n const segs = segments(e);\n const [h, id] = segs;\n if (h === \"$item\") parsed = { head: { type: \"item\" }, path: segs.slice(1) };\n else if ((h === \"$context\" || h === \"$steps\") && id) parsed = { head: { type: h === \"$context\" ? \"context\" : \"steps\", id }, path: segs.slice(2) };\n else throw new Error(`Unknown source \"${h}\" in \"${expr}\".`);\n } else {\n const colon = e.indexOf(\":\");\n if (colon < 1) throw new Error(`\"${expr}\" must read \"<componentId>:<slot>\".`);\n const [slot, ...path] = segments(e.slice(colon + 1));\n if (!slot) throw new Error(`\"${expr}\" names no slot.`);\n parsed = { head: { type: \"slot\", component: e.slice(0, colon), slot }, path };\n }\n cache.set(expr, parsed);\n return parsed;\n}\n\n/** Reads a path; \"*\" maps the rest of the path over a list. */\nexport function walk(value: unknown, path: readonly string[]): unknown {\n let v = value;\n for (let i = 0; i < path.length; i++) {\n if (v == null) return undefined;\n if (path[i] === \"*\") {\n if (!Array.isArray(v)) return undefined;\n const rest = path.slice(i + 1);\n return v.map(x => walk(x, rest));\n }\n v = (v as Record<string, unknown>)[path[i]];\n }\n return v;\n}\n",
|
|
6
6
|
"/** Source of the generated `screen-helpers.ts`: the only shared code the generated hooks use. */\nexport const HELPERS = `import { useMutation, useQuery } from \"@tanstack/react-query\";\n\n/** Data for a slot. \\`bound\\` is false when no API feeds it; keep the UI's own value then. */\nexport interface Data<T> { bound: boolean; data: T | undefined; loading: boolean; error: unknown }\n/** An action. \\`run\\` rejects when a call fails; it resolves at once when no API is connected. */\nexport interface Action { bound: boolean; run: (payload?: any) => Promise<void>; running: boolean; error: unknown }\n/** A per-item value, such as a cell in a row. */\nexport interface Cell<T> { bound: boolean; read: (item: any) => T | undefined }\n\nexport const UNBOUND_DATA: Data<never> = { bound: false, data: undefined, loading: false, error: undefined };\nexport const UNBOUND_ACTION: Action = { bound: false, run: async () => {}, running: false, error: undefined };\nexport const UNBOUND_CELL: Cell<never> = { bound: false, read: () => undefined };\n\nexport class ApiError extends Error {\n constructor(readonly status: number, readonly data: unknown) { super(\\`API call failed (\\${status})\\`); this.name = \"ApiError\"; }\n}\n\n/** Reads a path; \"*\" maps the rest of the path over a list. */\nexport function at(value: unknown, path: readonly string[]): any {\n let v: any = value;\n for (let i = 0; i < path.length; i++) {\n if (v == null) return undefined;\n if (path[i] === \"*\") return Array.isArray(v) ? v.map(x => at(x, path.slice(i + 1))) : undefined;\n v = v[path[i]];\n }\n return v;\n}\n\n/** The body of a client response; throws on a non-2xx status. Passes through clients that return the body. */\nexport function ok(res: any): any {\n if (res && typeof res === \"object\" && typeof res.status === \"number\" && \"data\" in res && \"headers\" in res) {\n if (res.status < 200 || res.status >= 300) throw new ApiError(res.status, res.data);\n return res.data;\n }\n return res;\n}\n\n/** True when every required input has a value. */\nexport const has = (inputs: Record<string, unknown>) => Object.values(inputs).every(v => v !== undefined);\n\n/** Throws when a required input has no value. */\nexport function need(operation: string, inputs: Record<string, unknown>) {\n const missing = Object.keys(inputs).filter(k => inputs[k] === undefined);\n if (missing.length) throw new Error(\\`\\${operation}: missing \\${missing.join(\", \")}\\`);\n}\n\n/** Drops undefined values. */\nexport const defined = (o: Record<string, unknown>): any => Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined));\n\nexport const path = (v: unknown): any => (v === undefined ? undefined : encodeURIComponent(String(v)));\n\n/** A body from a base value and [keys, value] entries; undefined values are skipped. */\nexport function assemble(base: unknown, entries: Array<[string[], unknown]>): any {\n const out: any = base && typeof base === \"object\" ? { ...base } : {};\n for (const [keys, value] of entries) {\n if (value === undefined) continue;\n let node = out;\n keys.slice(0, -1).forEach(k => { node = node[k] = node[k] && typeof node[k] === \"object\" ? { ...node[k] } : {}; });\n node[keys[keys.length - 1]] = value;\n }\n return out;\n}\n\n/** Adds mapped fields to each item, keeping the fields the API returned. */\nexport function mapItems(data: any, map: (item: any) => Record<string, unknown>): any {\n const one = (item: any) => ({ ...(item && typeof item === \"object\" ? item : {}), ...map(item) });\n return Array.isArray(data) ? data.map(one) : data == null ? data : one(data);\n}\n\nexport const list = (v: unknown): unknown[] => (Array.isArray(v) ? v : v === undefined ? [] : [v]);\n\nexport function finish(failed: unknown[]) {\n if (failed.length === 1) throw failed[0];\n if (failed.length) throw new AggregateError(failed, \\`\\${failed.length} API calls failed\\`);\n}\n\nexport function useData<T>(key: readonly unknown[], fetch: () => Promise<unknown>, select: (data: any) => T, options: { enabled: boolean; everySeconds?: number }): Data<T> {\n const q = useQuery({ queryKey: key, queryFn: fetch, select, enabled: options.enabled, refetchInterval: options.everySeconds ? options.everySeconds * 1000 : false });\n return { bound: true, data: q.data, loading: q.isLoading, error: q.error ?? undefined };\n}\n\nexport function useAction(run: (payload?: any) => Promise<void>): Action {\n const m = useMutation({ mutationFn: run });\n return { bound: true, run: payload => m.mutateAsync(payload), running: m.isPending, error: m.error ?? undefined };\n}\n`;\n",
|
|
7
|
-
"/**\r\n * Code generator: bindings file + catalog → one plain React Query hook per screen, calling the Orval client.\r\n *\r\n * A screen hook's signature comes from the registry only (its components and slots), so call sites stay put\r\n * when bindings change; bindings change only the hook bodies. Unbound slots return an unbound value.\r\n */\r\nimport type {\r\n BindingsFile, Catalog, CatalogOperation, ContextDeclaration, JsonSchema, ScreenEntry, SlotBinding, Step, ValidationIssue,\r\n} from \"../framework/contract\";\r\nimport { parse, segments } from \"../framework/expr\";\r\nimport { fromFile } from \"../framework/file\";\r\nimport { flat } from \"../framework/schema\";\r\nimport { validateRegistry } from \"../framework/validate\";\r\nimport { HELPERS } from \"./helpers\";\r\n\r\nexport interface GeneratedFile { path: string; content: string }\r\nexport interface GenerateResult { files: GeneratedFile[]; issues: ValidationIssue[] }\r\n\r\n/** First-line marker; the CLI only ever deletes files that carry it. */\r\nexport const GENERATED_MARK = \"@generated\";\r\nconst HEADER = `// ${GENERATED_MARK} Do not edit: change the bindings and regenerate.\\n`;\r\n\r\nconst words = (s: string) => s.split(/[.\\-_]+/).filter(Boolean);\r\nconst pascal = (s: string) => words(s).map(w => w[0].toUpperCase() + w.slice(1)).join(\"\");\r\nconst camel = (s: string) => { const p = pascal(s); return p[0].toLowerCase() + p.slice(1); };\r\nconst str = (v: unknown) => JSON.stringify(v);\r\nconst IDENT = /^[A-Za-z_$][\\w$]*$/;\r\nconst prop = (k: string) => (IDENT.test(k) ? k : str(k));\r\n/** Orval names functions after the operationId, first letter lowercased. */\r\nexport const orvalName = (id: string) => (IDENT.test(id) ? id[0].toLowerCase() + id.slice(1) : camel(id));\r\n\r\n/** JSON Schema → a TypeScript type. Loose on purpose: the API checks API data, the UI only reads it. */\r\nexport function tsType(schema: JsonSchema | undefined, many = false, depth = 0): string {\r\n const one = (): string => {\r\n if (!schema || typeof schema !== \"object\" || depth > 3) return \"any\";\r\n const s = schema as Record<string, unknown>;\r\n if (Array.isArray(s.enum) && s.enum.length && s.enum.every(v => typeof v === \"string\")) return (s.enum as string[]).map(str).join(\" | \");\r\n switch (s.type) {\r\n case \"string\": return \"string\";\r\n case \"integer\": case \"number\": return \"number\";\r\n case \"boolean\": return \"boolean\";\r\n case \"array\": return `Array<${tsType(s.items as JsonSchema, false, depth + 1)}>`;\r\n case \"object\": {\r\n const props = Object.entries((s.properties as Record<string, JsonSchema>) ?? {});\r\n if (!props.length) return \"Record<string, any>\";\r\n return `{ ${props.map(([k, v]) => `${prop(k)}?: ${tsType(v, false, depth + 1)}`).join(\"; \")}; [key: string]: any }`;\r\n }\r\n default: return \"any\";\r\n }\r\n };\r\n return many ? `Array<${one()}>` : one();\r\n}\r\n\r\ntype At = { component: string; slot: string };\r\ninterface Scope { item: boolean; steps?: Set<string> }\r\n\r\ninterface Ctx {\r\n screen: ScreenEntry;\r\n keys: Map<string, string>;\r\n produces: Map<string, Set<string>>;\r\n use: Set<string>;\r\n issue: (code: string, message: string, at?: At) => void;\r\n warn: (code: string, message: string, at?: At) => void;\r\n}\r\n\r\n/** One expression → TypeScript over `state`, `item` and `steps`. */\r\nfunction compileExpr(expr: string, cx: Ctx, scope: Scope, at: At): string {\r\n let p;\r\n try { p = parse(expr); } catch (e) { cx.issue(\"expr.invalid\", (e as Error).message, at); return \"undefined\"; }\r\n const path = p.path.map(str);\r\n const h = p.head;\r\n const read = (root: string, keys: string[]) => { cx.use.add(\"at\"); return `at(${root}, [${keys.join(\", \")}])`; };\r\n if (h.type === \"item\") {\r\n if (!scope.item) { cx.issue(\"expr.no-item\", `\"${expr}\" reads $item, which this slot does not have.`, at); return \"undefined\"; }\r\n return path.length ? read(\"item\", path) : \"item\";\r\n }\r\n if (h.type === \"context\") {\r\n if (!cx.screen.context.some(c => c.id === h.id)) { cx.issue(\"expr.unknown-context\", `\"${expr}\": ${cx.screen.id} declares no context \"${h.id}\".`, at); return \"undefined\"; }\r\n return read(\"state.context\", [str(h.id), ...path]);\r\n }\r\n if (h.type === \"steps\") {\r\n if (!scope.steps?.has(h.id)) { cx.issue(\"expr.unknown-step\", `\"${expr}\" reads step \"${h.id}\", which does not run before it.`, at); return \"undefined\"; }\r\n return read(\"steps\", [str(h.id), ...path]);\r\n }\r\n if (!cx.produces.get(h.component)?.has(h.slot)) {\r\n cx.issue(\"expr.unknown-slot\", `\"${expr}\" reads a value that is not produced on ${cx.screen.id}.`, at);\r\n return \"undefined\";\r\n }\r\n return read(\"state\", [str(cx.keys.get(h.component)!), str(h.slot), ...path]);\r\n}\r\n\r\nconst decode = (k: string) => k.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\r\n\r\n/**\r\n * The Orval call for an operation: path params in path order, then the body, then the query params object,\r\n * then fetch options (header params go there).\r\n */\r\nfunction compileCall(op: CatalogOperation, request: Record<string, string>, cx: Ctx, scope: Scope, at: At) {\r\n const e = (x: string) => compileExpr(x, cx, scope, at);\r\n const known = new Set(op.parameters.map(p => p.pointer));\r\n const body: string[] = [];\r\n let whole: string | undefined;\r\n const query: string[] = [];\r\n const headers: string[] = [];\r\n for (const [pointer, x] of Object.entries(request)) {\r\n const [, where, ...rest] = pointer.split(\"/\");\r\n const keys = rest.map(decode);\r\n if (where === \"body\") {\r\n if (!op.body) { cx.issue(\"request.no-body\", `${op.id} takes no body, but \"${pointer}\" is set.`, at); continue; }\r\n if (!keys.length) whole = e(x); else body.push(`[[${keys.map(str).join(\", \")}], ${e(x)}]`);\r\n } else if (!known.has(pointer)) cx.issue(\"request.unknown-input\", `${op.id} has no input \"${pointer}\".`, at);\r\n else if (where === \"query\") query.push(`${prop(keys[0])}: ${e(x)}`);\r\n else if (where === \"header\") headers.push(`${str(keys[0])}: ${e(x)}`);\r\n }\r\n const args = [...op.path.matchAll(/\\{([^}]+)\\}/g)].map(m => {\r\n const x = request[`/path/${m[1]}`];\r\n if (x === undefined) { cx.issue(\"request.missing-path\", `${op.id} needs \"${m[1]}\" in its path; it is not connected.`, at); return \"undefined\"; }\r\n cx.use.add(\"path\");\r\n return `path(${e(x)})`;\r\n });\r\n if (op.body) {\r\n // Typed loosely: the API, not the compiler, decides what a body needs. Unconnected required fields are flagged.\r\n const set = new Set(Object.keys(request).filter(k => k.startsWith(\"/body/\")).map(k => decode(k.split(\"/\")[2])));\r\n const schema = flat(op.body.schema);\r\n const unset = whole ? [] : ((schema.required ?? []) as string[]).filter(f => !set.has(f));\r\n // A required object whose own fields are all optional is valid as {}, so it is sent empty rather than left out.\r\n const empty = unset.filter(f => { const p = flat(schema.properties?.[f]); return p.type === \"object\" && !p.required?.length; });\r\n const gaps = unset.filter(f => !empty.includes(f));\r\n if (gaps.length) cx.warn(\"request.required-body\", `${op.id} requires ${gaps.join(\", \")} in its body; not connected.`, at);\r\n cx.use.add(\"assemble\");\r\n const base = whole ?? (empty.length ? `{ ${empty.map(f => `${prop(f)}: {}`).join(\", \")} }` : \"undefined\");\r\n args.push(`assemble(${base}, [${body.join(\", \")}])`);\r\n }\r\n if (op.parameters.some(p => p.pointer.startsWith(\"/query/\"))) { cx.use.add(\"defined\"); args.push(`defined({ ${query.join(\", \")} })`); }\r\n const key = `[${[str(op.id), ...args].join(\", \")}]`;\r\n if (headers.length) { cx.use.add(\"defined\"); args.push(`{ headers: defined({ ${headers.join(\", \")} }) }`); }\r\n const required = op.parameters.filter(p => p.required).map(p => `${prop(p.name)}: ${request[p.pointer] === undefined ? \"undefined\" : e(request[p.pointer])}`);\r\n return { fn: orvalName(op.id), call: `${orvalName(op.id)}(${args.join(\", \")})`, key, required: required.length ? `{ ${required.join(\", \")} }` : \"\" };\r\n}\r\n\r\n/** \"$\", \"$.a\" or \"$.a.items[*]\" → path keys. */\r\nconst selectPath = (selector: string) => segments(selector.replace(/^\\$\\.?/, \"\").replace(/\\[\\*\\]$/, \"\"));\r\n\r\nfunction compileSteps(steps: Step[], cx: Ctx, at: At, ops: Map<string, CatalogOperation>, imports: Set<string>): string {\r\n const done = new Set<string>();\r\n const blocks: string[] = [];\r\n let usesPayload = false;\r\n cx.use.add(\"ok\"); cx.use.add(\"finish\");\r\n for (const st of steps) {\r\n const op = ops.get(st.operation);\r\n if (!op) { cx.issue(\"catalog.operation-missing\", `${st.operation} is not in the API docs.`, at); continue; }\r\n const scope = { item: true, steps: done };\r\n const call = compileCall(op, st.request, cx, scope, at);\r\n imports.add(call.fn);\r\n const each = st.forEach ? compileExpr(st.forEach, cx, scope, at) : undefined;\r\n if (each) cx.use.add(\"list\"); else usesPayload = true;\r\n if (call.required) cx.use.add(\"need\");\r\n const readsItem = /\\bitem\\b/.test(call.call + call.required);\r\n blocks.push([\r\n ` {`,\r\n ` const responses: unknown[] = [];`,\r\n ` for (const item of ${each ? `list(${each})` : \"[payload]\"}) {`,\r\n readsItem ? \"\" : ` void item;`,\r\n ` try {`,\r\n call.required ? ` need(${str(op.id)}, ${call.required});` : \"\",\r\n ` responses.push(ok(await ${call.call}));`,\r\n ` } catch (error) {`,\r\n st.onError === \"stop\" ? ` throw error;` : ` failed.push(error);`,\r\n ` }`,\r\n ` }`,\r\n ` steps[${str(st.id)}] = { response: ${each ? \"responses\" : \"responses[0]\"} };`,\r\n ` }`,\r\n ].filter(Boolean).join(\"\\n\"));\r\n done.add(st.id);\r\n }\r\n return [\r\n `async (${usesPayload ? \"payload\" : \"_payload\"}?: any) => {`,\r\n ` const steps: Record<string, unknown> = {};`,\r\n ` const failed: unknown[] = [];`,\r\n ...blocks,\r\n ` finish(failed);`,\r\n ` }`,\r\n ].join(\"\\n\");\r\n}\r\n\r\nexport function generate(file: BindingsFile, catalog: Catalog): GenerateResult {\r\n const issues: ValidationIssue[] = [];\r\n const { fw, index, issues: fileIssues } = fromFile(file, catalog);\r\n const valid = validateRegistry(fw);\r\n issues.push(...fileIssues, ...valid.issues);\r\n const ops = new Map(catalog.operations.map(o => [o.id, o]));\r\n const DESC = new Map(fw.descriptors.map(d => [d.kind, d]));\r\n const client = file.output?.client;\r\n if (!client) issues.push({ severity: \"error\", screen: \"\", code: \"output.missing\", message: `Set \"output\": { \"dir\", \"client\" } in the bindings file.` });\r\n\r\n const files: GeneratedFile[] = [{ path: \"screen-helpers.ts\", content: HEADER + HELPERS }];\r\n const exports: string[] = [];\r\n\r\n for (const screen of valid.registry.screens) {\r\n const name = pascal(screen.id);\r\n const keys = new Map<string, string>();\r\n const taken = new Map<string, string>();\r\n for (const c of screen.components) {\r\n const k = camel(c.bindId.slice(screen.id.length + 1));\r\n if (taken.has(k)) issues.push({ severity: \"error\", screen: screen.id, component: c.bindId, code: \"codegen.name-clash\", message: `\"${c.bindId}\" and \"${taken.get(k)}\" both become \"${k}\".` });\r\n taken.set(k, c.bindId); keys.set(c.bindId, k);\r\n }\r\n const cx: Ctx = {\r\n screen, keys, use: new Set(),\r\n produces: new Map(screen.components.map(c => [c.bindId, new Set(DESC.get(c.kind)!.slots.filter(s => s.role === \"produce\").map(s => s.id))])),\r\n issue: (code, message, at) => issues.push({ severity: \"error\", screen: screen.id, code, message, ...at }),\r\n warn: (code, message, at) => issues.push({ severity: \"warning\", screen: screen.id, code, message, ...at }),\r\n };\r\n const bindings = new Map<string, SlotBinding>();\r\n for (const b of index[screen.id] ?? []) {\r\n if (!keys.has(b.component)) { cx.issue(\"binding.unknown-component\", `A binding names \"${b.component}\", which is not registered.`, b); continue; }\r\n if (b.state !== \"confirmed\") { issues.push({ severity: \"warning\", screen: screen.id, component: b.component, slot: b.slot, code: \"binding.draft\", message: `${b.component} · ${b.slot} is a draft; it is not generated.` }); continue; }\r\n bindings.set(`${b.component}|${b.slot}`, b);\r\n }\r\n\r\n const imports = new Set<string>();\r\n const types = new Set<string>();\r\n const body: string[] = [];\r\n const ret: string[] = [];\r\n const apiType: string[] = [];\r\n const stateType: string[] = [];\r\n\r\n for (const c of screen.components) {\r\n const d = DESC.get(c.kind)!;\r\n const k = keys.get(c.bindId)!;\r\n const produce = d.slots.filter(s => s.role === \"produce\");\r\n if (produce.length) stateType.push(` ${prop(k)}?: { ${produce.map(s => `${prop(s.id)}?: ${tsType(s.schema, s.many)}`).join(\"; \")} };`);\r\n const out: string[] = [];\r\n const outT: string[] = [];\r\n const unbound = (slot: string, v: string) => { cx.use.add(v); out.push(`${prop(slot)}: ${v}`); };\r\n for (const s of d.slots.filter(x => x.role !== \"produce\")) {\r\n const b = bindings.get(`${c.bindId}|${s.id}`);\r\n const at = { component: c.bindId, slot: s.id };\r\n const v = `${k}${pascal(s.id)}`;\r\n if (s.role === \"trigger\") {\r\n types.add(\"Action\"); outT.push(`${prop(s.id)}: Action`);\r\n if (b?.type !== \"steps\") { unbound(s.id, \"UNBOUND_ACTION\"); continue; }\r\n cx.use.add(\"useAction\");\r\n body.push(` const ${v} = useAction(${compileSteps(b.steps, cx, at, ops, imports)});`);\r\n out.push(`${prop(s.id)}: ${v}`);\r\n continue;\r\n }\r\n const T = tsType(s.schema, s.many);\r\n if (s.scope) {\r\n types.add(\"Cell\"); outT.push(`${prop(s.id)}: Cell<${T}>`);\r\n if (b?.type !== \"expression\") { unbound(s.id, \"UNBOUND_CELL\"); continue; }\r\n out.push(`${prop(s.id)}: { bound: true, read: (item: any) => ${compileExpr(b.value, cx, { item: true }, at)} }`);\r\n continue;\r\n }\r\n types.add(\"Data\"); outT.push(`${prop(s.id)}: Data<${T}>`);\r\n if (b?.type === \"expression\") {\r\n out.push(`${prop(s.id)}: { bound: true, data: ${compileExpr(b.value, cx, { item: false }, at)}, loading: false, error: undefined }`);\r\n continue;\r\n }\r\n const op = b?.type === \"operation\" ? ops.get(b.operation) : undefined;\r\n if (b?.type === \"operation\" && !op) cx.issue(\"catalog.operation-missing\", `${b.operation} is not in the API docs.`, at);\r\n if (b?.type !== \"operation\" || !op) { unbound(s.id, \"UNBOUND_DATA\"); continue; }\r\n const call = compileCall(op, b.request, cx, { item: false }, at);\r\n imports.add(call.fn);\r\n [\"useData\", \"ok\"].forEach(h => cx.use.add(h));\r\n if (call.required) cx.use.add(\"has\");\r\n const sel = selectPath(b.select).map(str);\r\n if (sel.length) cx.use.add(\"at\");\r\n const picked = sel.length ? `at(data, [${sel.join(\", \")}])` : \"data\";\r\n const map = Object.entries(b.map ?? {});\r\n if (map.length) cx.use.add(\"mapItems\");\r\n const select = map.length ? `mapItems(${picked}, (item: any) => ({ ${map.map(([f, x]) => `${prop(f)}: ${compileExpr(x, cx, { item: true }, at)}`).join(\", \")} }))` : picked;\r\n const every = typeof b.load === \"object\" ? `, everySeconds: ${b.load.everySeconds}` : \"\";\r\n body.push(` const ${v} = useData<${T}>(${call.key}, async () => ok(await ${call.call}), (data: any) => ${select}, { enabled: ${call.required ? `has(${call.required})` : \"true\"}${every} });`);\r\n out.push(`${prop(s.id)}: ${v}`);\r\n }\r\n if (out.length) { ret.push(` ${prop(k)}: { ${out.join(\", \")} },`); apiType.push(` ${prop(k)}: { ${outT.join(\"; \")} };`); }\r\n }\r\n if (screen.context.length) stateType.push(` context?: { ${screen.context.map((c: ContextDeclaration) => `${prop(c.id)}?: ${\"schema\" in c.shape ? tsType(c.shape.schema, c.many) : c.many ? \"Array<any>\" : \"any\"}`).join(\"; \")} };`);\r\n\r\n const usesState = [...body, ...ret].some(l => /\\bstate\\b/.test(l));\r\n const lines = [\r\n HEADER.trimEnd(),\r\n imports.size ? `import { ${[...imports].sort().join(\", \")} } from ${str(client ?? \"\")};` : null,\r\n cx.use.size ? `import { ${[...cx.use].sort().join(\", \")} } from \"./screen-helpers\";` : null,\r\n types.size ? `import type { ${[...types].sort().join(\", \")} } from \"./screen-helpers\";` : null,\r\n \"\",\r\n `/** ${screen.label}: values its components produce, and what it was opened with. */`,\r\n stateType.length ? `export interface ${name}State {\\n${stateType.join(\"\\n\")}\\n}` : `export type ${name}State = Record<string, never>;`,\r\n \"\",\r\n `export interface ${name}Api {\\n${apiType.join(\"\\n\")}\\n}`,\r\n \"\",\r\n `/** API data and actions for ${screen.label} (${screen.id}). */`,\r\n `export function use${name}Api(${usesState ? \"state\" : \"_state\"}: ${name}State = {}): ${name}Api {`,\r\n ...body,\r\n ` return {`,\r\n ...ret,\r\n ` };`,\r\n `}`,\r\n \"\",\r\n ].filter((l): l is string => l !== null);\r\n files.push({ path: `${screen.id}.ts`, content: lines.join(\"\\n\") });\r\n exports.push(`export * from \"./${screen.id}\";`);\r\n }\r\n files.push({ path: \"index.ts\", content: HEADER + exports.join(\"\\n\") + \"\\n\" });\r\n return { files, issues };\r\n}\r\n"
|
|
7
|
+
"/**\r\n * Code generator: bindings file + catalog → one plain React Query hook per screen, calling the Orval client.\r\n *\r\n * A screen hook's signature comes from the registry only (its components and slots), so call sites stay put\r\n * when bindings change; bindings change only the hook bodies. Unbound slots return an unbound value.\r\n */\r\nimport type {\r\n BindingsFile, Catalog, CatalogOperation, ContextDeclaration, JsonSchema, ScreenEntry, SlotBinding, Step, ValidationIssue,\r\n} from \"../framework/contract\";\r\nimport { parse, segments } from \"../framework/expr\";\r\nimport { fromFile } from \"../framework/file\";\r\nimport { flat } from \"../framework/schema\";\r\nimport { validateRegistry } from \"../framework/validate\";\r\nimport { HELPERS } from \"./helpers\";\r\n\r\nexport interface GeneratedFile { path: string; content: string }\r\nexport interface GenerateResult { files: GeneratedFile[]; issues: ValidationIssue[] }\r\n\r\n/** First-line marker; the CLI only ever deletes files that carry it. */\r\nexport const GENERATED_MARK = \"@generated\";\r\nconst HEADER = `// ${GENERATED_MARK} Do not edit: change the bindings and regenerate.\\n`;\r\n\r\nconst words = (s: string) => s.split(/[.\\-_]+/).filter(Boolean);\r\nconst pascal = (s: string) => words(s).map(w => w[0].toUpperCase() + w.slice(1)).join(\"\");\r\nconst camel = (s: string) => { const p = pascal(s); return p[0].toLowerCase() + p.slice(1); };\r\nconst str = (v: unknown) => JSON.stringify(v);\r\nconst IDENT = /^[A-Za-z_$][\\w$]*$/;\r\nconst prop = (k: string) => (IDENT.test(k) ? k : str(k));\r\n/** Orval names functions after the operationId, first letter lowercased. */\r\nexport const orvalName = (id: string) => (IDENT.test(id) ? id[0].toLowerCase() + id.slice(1) : camel(id));\r\n\r\n/** JSON Schema → a TypeScript type. Loose on purpose: the API checks API data, the UI only reads it. */\r\nexport function tsType(schema: JsonSchema | undefined, many = false, depth = 0): string {\r\n const one = (): string => {\r\n if (!schema || typeof schema !== \"object\" || depth > 3) return \"any\";\r\n const s = schema as Record<string, unknown>;\r\n if (Array.isArray(s.enum) && s.enum.length && s.enum.every(v => typeof v === \"string\")) return (s.enum as string[]).map(str).join(\" | \");\r\n switch (s.type) {\r\n case \"string\": return \"string\";\r\n case \"integer\": case \"number\": return \"number\";\r\n case \"boolean\": return \"boolean\";\r\n case \"array\": return `Array<${tsType(s.items as JsonSchema, false, depth + 1)}>`;\r\n case \"object\": {\r\n const props = Object.entries((s.properties as Record<string, JsonSchema>) ?? {});\r\n if (!props.length) return \"Record<string, any>\";\r\n return `{ ${props.map(([k, v]) => `${prop(k)}?: ${tsType(v, false, depth + 1)}`).join(\"; \")}; [key: string]: any }`;\r\n }\r\n default: return \"any\";\r\n }\r\n };\r\n return many ? `Array<${one()}>` : one();\r\n}\r\n\r\ntype At = { component: string; slot: string };\r\ninterface Scope { item: boolean; steps?: Set<string> }\r\n\r\ninterface Ctx {\r\n screen: ScreenEntry;\r\n keys: Map<string, string>;\r\n produces: Map<string, Set<string>>;\r\n use: Set<string>;\r\n issue: (code: string, message: string, at?: At) => void;\r\n warn: (code: string, message: string, at?: At) => void;\r\n}\r\n\r\n/** One expression → TypeScript over `state`, `item` and `steps`. */\r\nfunction compileExpr(expr: string, cx: Ctx, scope: Scope, at: At): string {\r\n let p;\r\n try { p = parse(expr); } catch (e) { cx.issue(\"expr.invalid\", (e as Error).message, at); return \"undefined\"; }\r\n const path = p.path.map(str);\r\n const h = p.head;\r\n const read = (root: string, keys: string[]) => { cx.use.add(\"at\"); return `at(${root}, [${keys.join(\", \")}])`; };\r\n if (h.type === \"item\") {\r\n if (!scope.item) { cx.issue(\"expr.no-item\", `\"${expr}\" reads $item, which this slot does not have.`, at); return \"undefined\"; }\r\n return path.length ? read(\"item\", path) : \"item\";\r\n }\r\n if (h.type === \"context\") {\r\n if (!cx.screen.context.some(c => c.id === h.id)) { cx.issue(\"expr.unknown-context\", `\"${expr}\": ${cx.screen.id} declares no context \"${h.id}\".`, at); return \"undefined\"; }\r\n return read(\"state.context\", [str(h.id), ...path]);\r\n }\r\n if (h.type === \"steps\") {\r\n if (!scope.steps?.has(h.id)) { cx.issue(\"expr.unknown-step\", `\"${expr}\" reads step \"${h.id}\", which does not run before it.`, at); return \"undefined\"; }\r\n return read(\"steps\", [str(h.id), ...path]);\r\n }\r\n if (!cx.produces.get(h.component)?.has(h.slot)) {\r\n cx.issue(\"expr.unknown-slot\", `\"${expr}\" reads a value that is not produced on ${cx.screen.id}.`, at);\r\n return \"undefined\";\r\n }\r\n return read(\"state\", [str(cx.keys.get(h.component)!), str(h.slot), ...path]);\r\n}\r\n\r\nconst decode = (k: string) => k.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\r\n\r\n/**\r\n * The Orval call for an operation: path params in path order, then the body, then the query params object,\r\n * then fetch options (header params go there).\r\n */\r\nfunction compileCall(op: CatalogOperation, request: Record<string, string>, cx: Ctx, scope: Scope, at: At) {\r\n const e = (x: string) => compileExpr(x, cx, scope, at);\r\n const known = new Set(op.parameters.map(p => p.pointer));\r\n const body: string[] = [];\r\n let whole: string | undefined;\r\n const query: string[] = [];\r\n const headers: string[] = [];\r\n for (const [pointer, x] of Object.entries(request)) {\r\n const [, where, ...rest] = pointer.split(\"/\");\r\n const keys = rest.map(decode);\r\n if (where === \"body\") {\r\n if (!op.body) { cx.issue(\"request.no-body\", `${op.id} takes no body, but \"${pointer}\" is set.`, at); continue; }\r\n if (!keys.length) whole = e(x); else body.push(`[[${keys.map(str).join(\", \")}], ${e(x)}]`);\r\n } else if (!known.has(pointer)) cx.issue(\"request.unknown-input\", `${op.id} has no input \"${pointer}\".`, at);\r\n else if (where === \"query\") query.push(`${prop(keys[0])}: ${e(x)}`);\r\n else if (where === \"header\") headers.push(`${str(keys[0])}: ${e(x)}`);\r\n }\r\n const args = [...op.path.matchAll(/\\{([^}]+)\\}/g)].map(m => {\r\n const x = request[`/path/${m[1]}`];\r\n if (x === undefined) { cx.issue(\"request.missing-path\", `${op.id} needs \"${m[1]}\" in its path; it is not connected.`, at); return \"undefined\"; }\r\n cx.use.add(\"path\");\r\n return `path(${e(x)})`;\r\n });\r\n if (op.body) {\r\n // Typed loosely: the API, not the compiler, decides what a body needs. Unconnected required fields are flagged.\r\n const set = new Set(Object.keys(request).filter(k => k.startsWith(\"/body/\")).map(k => decode(k.split(\"/\")[2])));\r\n const schema = flat(op.body.schema);\r\n const unset = whole ? [] : ((schema.required ?? []) as string[]).filter(f => !set.has(f));\r\n // A required object whose own fields are all optional is valid as {}, so it is sent empty rather than left out.\r\n const empty = unset.filter(f => { const p = flat(schema.properties?.[f]); return p.type === \"object\" && !p.required?.length; });\r\n const gaps = unset.filter(f => !empty.includes(f));\r\n if (gaps.length) cx.warn(\"request.required-body\", `${op.id} requires ${gaps.join(\", \")} in its body; not connected.`, at);\r\n cx.use.add(\"assemble\");\r\n const base = whole ?? (empty.length ? `{ ${empty.map(f => `${prop(f)}: {}`).join(\", \")} }` : \"undefined\");\r\n args.push(`assemble(${base}, [${body.join(\", \")}])`);\r\n }\r\n if (op.parameters.some(p => p.pointer.startsWith(\"/query/\"))) { cx.use.add(\"defined\"); args.push(`defined({ ${query.join(\", \")} })`); }\r\n const key = `[${[str(op.id), ...args].join(\", \")}]`;\r\n if (headers.length) { cx.use.add(\"defined\"); args.push(`{ headers: defined({ ${headers.join(\", \")} }) }`); }\r\n const required = op.parameters.filter(p => p.required).map(p => `${prop(p.name)}: ${request[p.pointer] === undefined ? \"undefined\" : e(request[p.pointer])}`);\r\n return { fn: orvalName(op.id), call: `${orvalName(op.id)}(${args.join(\", \")})`, key, required: required.length ? `{ ${required.join(\", \")} }` : \"\" };\r\n}\r\n\r\n/** \"$\", \"$.a\" or \"$.a.items[*]\" → path keys. */\r\nconst selectPath = (selector: string) => segments(selector.replace(/^\\$\\.?/, \"\").replace(/\\[\\*\\]$/, \"\"));\r\n\r\nfunction compileSteps(steps: Step[], cx: Ctx, at: At, ops: Map<string, CatalogOperation>, imports: Set<string>): string {\r\n const done = new Set<string>();\r\n const blocks: string[] = [];\r\n let usesPayload = false;\r\n cx.use.add(\"ok\"); cx.use.add(\"finish\");\r\n for (const st of steps) {\r\n const op = ops.get(st.operation)!; // the caller leaves an action with an undocumented step unbound\r\n const scope = { item: true, steps: done };\r\n const call = compileCall(op, st.request, cx, scope, at);\r\n imports.add(call.fn);\r\n const each = st.forEach ? compileExpr(st.forEach, cx, scope, at) : undefined;\r\n if (each) cx.use.add(\"list\"); else usesPayload = true;\r\n if (call.required) cx.use.add(\"need\");\r\n const readsItem = /\\bitem\\b/.test(call.call + call.required);\r\n blocks.push([\r\n ` {`,\r\n ` const responses: unknown[] = [];`,\r\n ` for (const item of ${each ? `list(${each})` : \"[payload]\"}) {`,\r\n readsItem ? \"\" : ` void item;`,\r\n ` try {`,\r\n call.required ? ` need(${str(op.id)}, ${call.required});` : \"\",\r\n ` responses.push(ok(await ${call.call}));`,\r\n ` } catch (error) {`,\r\n st.onError === \"stop\" ? ` throw error;` : ` failed.push(error);`,\r\n ` }`,\r\n ` }`,\r\n ` steps[${str(st.id)}] = { response: ${each ? \"responses\" : \"responses[0]\"} };`,\r\n ` }`,\r\n ].filter(Boolean).join(\"\\n\"));\r\n done.add(st.id);\r\n }\r\n return [\r\n `async (${usesPayload ? \"payload\" : \"_payload\"}?: any) => {`,\r\n ` const steps: Record<string, unknown> = {};`,\r\n ` const failed: unknown[] = [];`,\r\n ...blocks,\r\n ` finish(failed);`,\r\n ` }`,\r\n ].join(\"\\n\");\r\n}\r\n\r\nexport function generate(file: BindingsFile, catalog: Catalog): GenerateResult {\r\n const issues: ValidationIssue[] = [];\r\n const { fw, index, issues: fileIssues } = fromFile(file, catalog);\r\n const valid = validateRegistry(fw);\r\n issues.push(...fileIssues, ...valid.issues);\r\n const ops = new Map(catalog.operations.map(o => [o.id, o]));\r\n const DESC = new Map(fw.descriptors.map(d => [d.kind, d]));\r\n const client = file.output?.client;\r\n if (!client) issues.push({ severity: \"error\", screen: \"\", code: \"output.missing\", message: `Set \"output\": { \"dir\", \"client\" } in the bindings file.` });\r\n\r\n const files: GeneratedFile[] = [{ path: \"screen-helpers.ts\", content: HEADER + HELPERS }];\r\n const exports: string[] = [];\r\n\r\n for (const screen of valid.registry.screens) {\r\n const name = pascal(screen.id);\r\n const keys = new Map<string, string>();\r\n const taken = new Map<string, string>();\r\n for (const c of screen.components) {\r\n const k = camel(c.bindId.slice(screen.id.length + 1));\r\n if (taken.has(k)) issues.push({ severity: \"error\", screen: screen.id, component: c.bindId, code: \"codegen.name-clash\", message: `\"${c.bindId}\" and \"${taken.get(k)}\" both become \"${k}\".` });\r\n taken.set(k, c.bindId); keys.set(c.bindId, k);\r\n }\r\n const cx: Ctx = {\r\n screen, keys, use: new Set(),\r\n produces: new Map(screen.components.map(c => [c.bindId, new Set(DESC.get(c.kind)!.slots.filter(s => s.role === \"produce\").map(s => s.id))])),\r\n issue: (code, message, at) => issues.push({ severity: \"error\", screen: screen.id, code, message, ...at }),\r\n warn: (code, message, at) => issues.push({ severity: \"warning\", screen: screen.id, code, message, ...at }),\r\n };\r\n // An API removed from the docs leaves its slot unbound, so the hooks never import what the client no longer has.\r\n const gone = (operations: string[], at: At) => {\r\n const missing = operations.filter(o => !ops.has(o));\r\n for (const o of missing) cx.warn(\"catalog.operation-missing\", `${o} is no longer in the API docs; generated unbound until it is rebound.`, at);\r\n return missing.length > 0;\r\n };\r\n const bindings = new Map<string, SlotBinding>();\r\n for (const b of index[screen.id] ?? []) {\r\n if (!keys.has(b.component)) { cx.issue(\"binding.unknown-component\", `A binding names \"${b.component}\", which is not registered.`, b); continue; }\r\n if (b.state !== \"confirmed\") { issues.push({ severity: \"warning\", screen: screen.id, component: b.component, slot: b.slot, code: \"binding.draft\", message: `${b.component} · ${b.slot} is a draft; it is not generated.` }); continue; }\r\n bindings.set(`${b.component}|${b.slot}`, b);\r\n }\r\n\r\n const imports = new Set<string>();\r\n const types = new Set<string>();\r\n const body: string[] = [];\r\n const ret: string[] = [];\r\n const apiType: string[] = [];\r\n const stateType: string[] = [];\r\n\r\n for (const c of screen.components) {\r\n const d = DESC.get(c.kind)!;\r\n const k = keys.get(c.bindId)!;\r\n const produce = d.slots.filter(s => s.role === \"produce\");\r\n if (produce.length) stateType.push(` ${prop(k)}?: { ${produce.map(s => `${prop(s.id)}?: ${tsType(s.schema, s.many)}`).join(\"; \")} };`);\r\n const out: string[] = [];\r\n const outT: string[] = [];\r\n const unbound = (slot: string, v: string) => { cx.use.add(v); out.push(`${prop(slot)}: ${v}`); };\r\n for (const s of d.slots.filter(x => x.role !== \"produce\")) {\r\n const b = bindings.get(`${c.bindId}|${s.id}`);\r\n const at = { component: c.bindId, slot: s.id };\r\n const v = `${k}${pascal(s.id)}`;\r\n if (s.role === \"trigger\") {\r\n types.add(\"Action\"); outT.push(`${prop(s.id)}: Action`);\r\n if (b?.type !== \"steps\" || gone(b.steps.map(st => st.operation), at)) { unbound(s.id, \"UNBOUND_ACTION\"); continue; }\r\n cx.use.add(\"useAction\");\r\n body.push(` const ${v} = useAction(${compileSteps(b.steps, cx, at, ops, imports)});`);\r\n out.push(`${prop(s.id)}: ${v}`);\r\n continue;\r\n }\r\n const T = tsType(s.schema, s.many);\r\n if (s.scope) {\r\n types.add(\"Cell\"); outT.push(`${prop(s.id)}: Cell<${T}>`);\r\n if (b?.type !== \"expression\") { unbound(s.id, \"UNBOUND_CELL\"); continue; }\r\n out.push(`${prop(s.id)}: { bound: true, read: (item: any) => ${compileExpr(b.value, cx, { item: true }, at)} }`);\r\n continue;\r\n }\r\n types.add(\"Data\"); outT.push(`${prop(s.id)}: Data<${T}>`);\r\n if (b?.type === \"expression\") {\r\n out.push(`${prop(s.id)}: { bound: true, data: ${compileExpr(b.value, cx, { item: false }, at)}, loading: false, error: undefined }`);\r\n continue;\r\n }\r\n if (b?.type !== \"operation\" || gone([b.operation], at)) { unbound(s.id, \"UNBOUND_DATA\"); continue; }\r\n const op = ops.get(b.operation)!;\r\n const call = compileCall(op, b.request, cx, { item: false }, at);\r\n imports.add(call.fn);\r\n [\"useData\", \"ok\"].forEach(h => cx.use.add(h));\r\n if (call.required) cx.use.add(\"has\");\r\n const sel = selectPath(b.select).map(str);\r\n if (sel.length) cx.use.add(\"at\");\r\n const picked = sel.length ? `at(data, [${sel.join(\", \")}])` : \"data\";\r\n const map = Object.entries(b.map ?? {});\r\n if (map.length) cx.use.add(\"mapItems\");\r\n const select = map.length ? `mapItems(${picked}, (item: any) => ({ ${map.map(([f, x]) => `${prop(f)}: ${compileExpr(x, cx, { item: true }, at)}`).join(\", \")} }))` : picked;\r\n const every = typeof b.load === \"object\" ? `, everySeconds: ${b.load.everySeconds}` : \"\";\r\n body.push(` const ${v} = useData<${T}>(${call.key}, async () => ok(await ${call.call}), (data: any) => ${select}, { enabled: ${call.required ? `has(${call.required})` : \"true\"}${every} });`);\r\n out.push(`${prop(s.id)}: ${v}`);\r\n }\r\n if (out.length) { ret.push(` ${prop(k)}: { ${out.join(\", \")} },`); apiType.push(` ${prop(k)}: { ${outT.join(\"; \")} };`); }\r\n }\r\n if (screen.context.length) stateType.push(` context?: { ${screen.context.map((c: ContextDeclaration) => `${prop(c.id)}?: ${\"schema\" in c.shape ? tsType(c.shape.schema, c.many) : c.many ? \"Array<any>\" : \"any\"}`).join(\"; \")} };`);\r\n\r\n const usesState = [...body, ...ret].some(l => /\\bstate\\b/.test(l));\r\n const lines = [\r\n HEADER.trimEnd(),\r\n imports.size ? `import { ${[...imports].sort().join(\", \")} } from ${str(client ?? \"\")};` : null,\r\n cx.use.size ? `import { ${[...cx.use].sort().join(\", \")} } from \"./screen-helpers\";` : null,\r\n types.size ? `import type { ${[...types].sort().join(\", \")} } from \"./screen-helpers\";` : null,\r\n \"\",\r\n `/** ${screen.label}: values its components produce, and what it was opened with. */`,\r\n stateType.length ? `export interface ${name}State {\\n${stateType.join(\"\\n\")}\\n}` : `export type ${name}State = Record<string, never>;`,\r\n \"\",\r\n `export interface ${name}Api {\\n${apiType.join(\"\\n\")}\\n}`,\r\n \"\",\r\n `/** API data and actions for ${screen.label} (${screen.id}). */`,\r\n `export function use${name}Api(${usesState ? \"state\" : \"_state\"}: ${name}State = {}): ${name}Api {`,\r\n ...body,\r\n ` return {`,\r\n ...ret,\r\n ` };`,\r\n `}`,\r\n \"\",\r\n ].filter((l): l is string => l !== null);\r\n files.push({ path: `${screen.id}.ts`, content: lines.join(\"\\n\") });\r\n exports.push(`export * from \"./${screen.id}\";`);\r\n }\r\n files.push({ path: \"index.ts\", content: HEADER + exports.join(\"\\n\") + \"\\n\" });\r\n return { files, issues };\r\n}\r\n"
|
|
8
8
|
],
|
|
9
|
-
"mappings": "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",
|
|
10
|
-
"debugId": "
|
|
9
|
+
"mappings": "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",
|
|
10
|
+
"debugId": "83AB46009B22A46A64756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|