api_binding_ui 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +118 -94
- package/SKILL.md +45 -45
- package/dist/app/{index-4mgcb4wd.js → index-xww2x0kd.js} +72 -72
- package/dist/app/index.html +1 -1
- package/dist/cli/scan.d.ts +2 -0
- package/dist/cli.js +218 -129
- package/dist/codegen/write.d.ts +18 -0
- package/dist/framework/contract.d.ts +25 -1
- package/dist/framework/file.d.ts +6 -0
- package/dist/{index-jj8twdw9.js → index-gfw08965.js} +5 -2
- package/dist/{index-jj8twdw9.js.map → index-gfw08965.js.map} +3 -3
- package/dist/index.js +11 -4
- package/dist/index.js.map +3 -3
- package/dist/overlay.js +3 -3
- package/dist/server/handler.d.ts +8 -1
- package/dist/studio/index.js +1 -1
- package/dist/vite/plugin.d.ts +14 -1
- package/dist/vite.js +921 -9
- package/package.json +2 -2
- package/spec/FRAMEWORK.md +178 -177
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
"/** OpenAPI 3.0–3.2 → Catalog. */\nimport type { Catalog, CatalogOperation, CatalogParameter, JsonSchema } from \"./contract\";\n\ntype Obj = Record<string, any>;\nconst METHODS = [\"get\", \"put\", \"post\", \"delete\", \"patch\", \"head\", \"options\", \"trace\", \"query\"];\n\n/** FNV-1a, enough to detect catalog drift. */\nexport function hashString(s: string): string {\n let h = 0x811c9dc5;\n for (let i = 0; i < s.length; i++) { h ^= s.charCodeAt(i); h = Math.imul(h, 0x01000193); }\n return (h >>> 0).toString(16).padStart(8, \"0\");\n}\n\nfunction pointerGet(doc: Obj, ref: string): unknown {\n if (!ref.startsWith(\"#/\")) return undefined;\n return ref.slice(2).split(\"/\").map(k => k.replace(/~1/g, \"/\").replace(/~0/g, \"~\"))\n .reduce<any>((o, k) => (o == null ? undefined : o[k]), doc);\n}\n\n/** Inline every local $ref. Cycles stop at the first repeat and keep the $ref. */\nfunction deref(doc: Obj, node: unknown, seen: string[] = []): any {\n if (Array.isArray(node)) return node.map(n => deref(doc, n, seen));\n if (!node || typeof node !== \"object\") return node;\n const n = node as Obj;\n if (typeof n.$ref === \"string\") {\n if (seen.includes(n.$ref) || seen.length > 24) return { $ref: n.$ref };\n const { $ref, ...rest } = n;\n const target = deref(doc, pointerGet(doc, $ref), [...seen, $ref]);\n return Object.keys(rest).length ? { ...target, ...deref(doc, rest, seen) } : target;\n }\n const out: Obj = {};\n for (const [k, v] of Object.entries(n)) out[k] = deref(doc, v, seen);\n return out;\n}\n\nfunction jsonContent(content: Obj | undefined): JsonSchema | undefined {\n if (!content) return undefined;\n const key = Object.keys(content).find(k => /json/i.test(k)) ?? Object.keys(content)[0];\n return key ? content[key]?.schema : undefined;\n}\n\nfunction intentOf(method: string, op: Obj): string | undefined {\n if (typeof op[\"x-binding-intent\"] === \"string\") return op[\"x-binding-intent\"];\n if (method === \"get\" || method === \"head\" || method === \"query\") return \"read\";\n if ([\"put\", \"patch\", \"delete\"].includes(method)) return \"write\";\n return undefined; // unknown unless declared\n}\n\nexport function catalogFromOpenApi(input: unknown, source: { url?: string } = {}): Catalog {\n const doc = input as Obj;\n if (!doc || typeof doc !== \"object\" || !doc.paths) throw new Error(\"This file is not an OpenAPI document: it has no paths.\");\n const operations: CatalogOperation[] = [];\n // x-tagGroups: tag → product\n const productOf = new Map<string, string>();\n for (const g of (doc[\"x-tagGroups\"] as Array<{ name?: string; tags?: string[] }> | undefined) ?? []) g.tags?.forEach(t => { if (g.name) productOf.set(t, g.name); });\n for (const [path, rawItem] of Object.entries<Obj>(doc.paths)) {\n const item = deref(doc, rawItem) as Obj;\n for (const method of METHODS) {\n const op = item?.[method] as Obj | undefined;\n if (!op || !op.operationId) continue;\n const params: CatalogParameter[] = [];\n for (const p of [...(item.parameters ?? []), ...(op.parameters ?? [])]) {\n if (!p?.name || !p?.in) continue;\n const pointer = `/${p.in}/${p.name}`;\n const at = params.findIndex(x => x.pointer === pointer);\n const entry = { pointer, name: p.name, required: !!p.required || p.in === \"path\", schema: p.schema ?? {}, description: p.description };\n if (at >= 0) params[at] = entry; else params.push(entry);\n }\n for (const m of path.matchAll(/\\{([^}]+)\\}/g)) {\n if (!params.some(x => x.pointer === `/path/${m[1]}`)) params.unshift({ pointer: `/path/${m[1]}`, name: m[1], required: true, schema: { type: \"string\" } });\n }\n const bodySchema = jsonContent(op.requestBody?.content);\n const responses = Object.entries<Obj>(op.responses ?? {}).map(([status, r]) => ({ status, schema: jsonContent(r?.content) }));\n const extensions: Obj = {};\n for (const [k, v] of Object.entries(op)) if (k.startsWith(\"x-\")) extensions[k] = v;\n operations.push({\n id: op.operationId, method: method.toUpperCase(), path,\n summary: op.summary, description: op.description, tags: op.tags ?? [],\n product: (op.tags as string[] | undefined)?.map(t => productOf.get(t)).find(Boolean),\n intent: intentOf(method, op), parameters: params,\n body: bodySchema ? { required: !!op.requestBody?.required, schema: bodySchema } : undefined,\n responses, extensions,\n });\n }\n }\n const body = JSON.stringify(operations);\n return {\n catalogVersion: 1,\n source: { title: doc.info?.title ?? \"API\", version: doc.info?.version ?? \"\", url: source.url },\n hash: hashString(body),\n operations,\n schemas: {},\n };\n}\n\n",
|
|
6
6
|
"/** Reads a published OpenAPI document (JSON or YAML). Separate from openapi.ts to keep YAML out of the runtime bundle. */\nimport { parse } from \"yaml\";\nimport type { Catalog } from \"./contract\";\nimport { catalogFromOpenApi } from \"./openapi\";\n\nexport class CatalogLoadError extends Error {\n constructor(message: string, readonly source: string) { super(message); this.name = \"CatalogLoadError\"; }\n}\n\n/** Parses OpenAPI text. `source` names where it came from (a URL, or \"pasted\"). */\nexport function catalogFromText(text: string, source: string): Catalog {\n const body = text.trim();\n if (!body) throw new CatalogLoadError(\"Nothing to read: the text is empty.\", source);\n let doc: unknown;\n try {\n // JSON.parse is several times faster than the YAML parser, so try it first when the text looks like JSON.\n doc = body.startsWith(\"{\") ? JSON.parse(body) : parse(body);\n } catch {\n throw new CatalogLoadError(\"The text is not valid JSON or YAML.\", source);\n }\n try {\n return catalogFromOpenApi(doc, source.includes(\"://\") ? { url: source } : {});\n } catch (e) {\n throw new CatalogLoadError(e instanceof Error ? e.message : \"The text is not an OpenAPI document.\", source);\n }\n}\n\nexport async function loadCatalog(url: string, init?: RequestInit): Promise<Catalog> {\n let res: Response;\n try {\n res = await fetch(url, { ...init, headers: { Accept: \"application/yaml, application/json, text/yaml, */*\", ...init?.headers } });\n } catch {\n // fetch rejects only on network or CORS failure; the browser does not say which.\n throw new CatalogLoadError(\"The docs could not be reached. Check the URL, your network, and that the docs server allows this site (CORS).\", url);\n }\n if (!res.ok) throw new CatalogLoadError(`The docs server answered ${res.status} ${res.statusText}. Check the URL.`, url);\n return catalogFromText(await res.text(), url);\n}\n",
|
|
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
|
-
"/** The bindings file: parsing, and conversion to and from the studio's working model. */\nimport type { BindingsFile, Catalog, ScreenEntry, ScreenId, SlotBinding, ValidationIssue } from \"./contract\";\nimport type { BindingIndex, FrameworkData } from \"./engine\";\nimport { humanize } from \"./names\";\n\n/** Screen and component ids: lowercase kebab-case segments joined by dots, at least two. */\nexport const ID = /^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$/;\n\nconst BINDING_TYPES = new Set([\"operation\", \"expression\", \"steps\", \"none\"]);\n\n/** Parses and shape-checks a bindings file. Throws a message a person can act on. */\nexport function parseBindingsFile(text: string): BindingsFile {\n let data: unknown;\n try { data = JSON.parse(text); } catch { throw new Error(\"The bindings file is not valid JSON.\"); }\n const f = data as Partial<BindingsFile> | null;\n if (!f || typeof f !== \"object\") throw new Error(\"The bindings file must be a JSON object.\");\n if (f.version !== 3) throw new Error(`The bindings file must have \"version\": 3.`);\n if (typeof f.openapi !== \"string\" || !f.openapi) throw new Error(`The bindings file needs \"openapi\": the docs URL or a path.`);\n for (const k of [\"kinds\", \"screens\", \"components\", \"bindings\"] as const) if (!Array.isArray(f[k])) throw new Error(`\"${k}\" must be a list.`);\n f.bindings!.forEach((b, i) => {\n const x = b as Partial<SlotBinding> | null;\n if (!x || typeof x.component !== \"string\" || typeof x.slot !== \"string\" || !BINDING_TYPES.has(x.type as string))\n throw new Error(`Binding ${i + 1} needs \"component\", \"slot\" and a known \"type\".`);\n });\n if (f.output && (typeof f.output.dir !== \"string\" || typeof f.output.client !== \"string\")) throw new Error(`\"output\" needs \"dir\" and \"client\".`);\n return f as BindingsFile;\n}\n\n/** The screen an id belongs to: the longest screen id that prefixes it. */\nexport function screenOf(id: string, screens: readonly ScreenId[]): ScreenId | undefined {\n let best: ScreenId | undefined;\n for (const s of screens) if (id.startsWith(s + \".\") && (!best || s.length > best.length)) best = s;\n return best;\n}\n\n/** Product label for a screen: the docs' product whose name matches the first id segment, else the segment in words. */\nfunction productLabel(seg: string, catalog: Catalog): string {\n const names = new Set(catalog.operations.map(o => o.product).filter((p): p is string => !!p));\n return [...names].find(n => n.toLowerCase().replace(/[^a-z0-9]+/g, \"-\") === seg) ?? humanize(seg);\n}\n\n/** Builds the studio's model. Components and bindings that fit no screen are dropped with an issue. */\nexport function fromFile(file: BindingsFile, catalog: Catalog): { fw: FrameworkData; index: BindingIndex; issues: ValidationIssue[] } {\n const issues: ValidationIssue[] = [];\n const ids = file.screens.map(s => s.id);\n const screens: ScreenEntry[] = file.screens.map(s => ({\n id: s.id, label: s.label, description: s.description, context: s.context ?? [], components: [],\n path: [productLabel(s.id.split(\".\")[0], catalog)],\n parent: screenOf(s.id, ids),\n }));\n const byId = new Map(screens.map(s => [s.id, s]));\n const screenIds = new Set(ids);\n for (const c of file.components) {\n // One namespace: a component named like a screen would also capture that screen's components.\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; }\n const s = screenOf(c.id, ids);\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; }\n byId.get(s)!.components.push({ bindId: c.id, kind: c.kind, label: c.label, parent: c.parent, info: c.info });\n }\n const index: BindingIndex = {};\n for (const b of file.bindings) {\n const s = screenOf(b.component, ids);\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; }\n (index[s] ??= []).push(b);\n }\n return {\n fw: { descriptors: file.kinds, registry: { registryVersion: 1, screens }, catalog, glossaries: file.glossaries },\n index, issues,\n };\n}\n\n/** The file with its bindings replaced by the index, in registry order so diffs stay small. */\nexport function toFile(file: BindingsFile, index: BindingIndex): BindingsFile {\n const order = new Map(file.components.map((c, i) => [c.id, i]));\n const bindings = Object.values(index).flat()\n .sort((a, b) => (order.get(a.component) ?? 1e9) - (order.get(b.component) ?? 1e9) || a.slot.localeCompare(b.slot));\n return { ...file, bindings };\n}\n\n/** In-memory store, for tests and embedding. */\nexport function memoryStore(seed: BindingsFile) {\n let file = seed;\n return { load: async () => file, save: async (f: BindingsFile) => { file = f; }, get current() { return file; } };\n}\n\n/** Store backed by the CLI's studio server. */\nexport function httpStore(url: string) {\n return {\n async load() {\n const res = await fetch(url, { cache: \"no-store\" });\n if (!res.ok) throw new Error(`Could not read the bindings file (HTTP ${res.status}).`);\n return parseBindingsFile(await res.text());\n },\n async save(file: BindingsFile) {\n const res = await fetch(url, { method: \"PUT\", headers: { \"Content-Type\": \"application/json\" }, body: JSON.stringify(file, null, 2) + \"\\n\" });\n if (!res.ok) throw new Error((await res.text()) || `Could not save (HTTP ${res.status}).`);\n },\n };\n}\n",
|
|
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
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",
|
|
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": "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",
|
|
14
|
-
"debugId": "
|
|
13
|
+
"mappings": "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",
|
|
14
|
+
"debugId": "548F2EE21986ECDC64756E2164756E21",
|
|
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-gfw08965.js";
|
|
18
18
|
// src/framework/expr.ts
|
|
19
19
|
var cache = new Map;
|
|
20
20
|
function segments(path) {
|
|
@@ -257,11 +257,18 @@ function compileCall(op, request, cx, scope, at) {
|
|
|
257
257
|
});
|
|
258
258
|
if (op.body) {
|
|
259
259
|
const set = new Set(Object.keys(request).filter((k) => k.startsWith("/body/")).map((k) => decode(k.split("/")[2])));
|
|
260
|
-
const
|
|
260
|
+
const schema = flat(op.body.schema);
|
|
261
|
+
const unset = whole ? [] : (schema.required ?? []).filter((f) => !set.has(f));
|
|
262
|
+
const empty = unset.filter((f) => {
|
|
263
|
+
const p = flat(schema.properties?.[f]);
|
|
264
|
+
return p.type === "object" && !p.required?.length;
|
|
265
|
+
});
|
|
266
|
+
const gaps = unset.filter((f) => !empty.includes(f));
|
|
261
267
|
if (gaps.length)
|
|
262
268
|
cx.warn("request.required-body", `${op.id} requires ${gaps.join(", ")} in its body; not connected.`, at);
|
|
263
269
|
cx.use.add("assemble");
|
|
264
|
-
|
|
270
|
+
const base = whole ?? (empty.length ? `{ ${empty.map((f) => `${prop(f)}: {}`).join(", ")} }` : "undefined");
|
|
271
|
+
args.push(`assemble(${base}, [${body.join(", ")}])`);
|
|
265
272
|
}
|
|
266
273
|
if (op.parameters.some((p) => p.pointer.startsWith("/query/"))) {
|
|
267
274
|
cx.use.add("defined");
|
|
@@ -507,5 +514,5 @@ export {
|
|
|
507
514
|
validateRegistry2 as validateRegistry
|
|
508
515
|
};
|
|
509
516
|
|
|
510
|
-
//# debugId=
|
|
517
|
+
//# debugId=71CC284B82A9C3E764756E2164756E21
|
|
511
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
|
-
"/**\n * Code generator: bindings file + catalog → one plain React Query hook per screen, calling the Orval client.\n *\n * A screen hook's signature comes from the registry only (its components and slots), so call sites stay put\n * when bindings change; bindings change only the hook bodies. Unbound slots return an unbound value.\n */\nimport type {\n BindingsFile, Catalog, CatalogOperation, ContextDeclaration, JsonSchema, ScreenEntry, SlotBinding, Step, ValidationIssue,\n} from \"../framework/contract\";\nimport { parse, segments } from \"../framework/expr\";\nimport { fromFile } from \"../framework/file\";\nimport { flat } from \"../framework/schema\";\nimport { validateRegistry } from \"../framework/validate\";\nimport { HELPERS } from \"./helpers\";\n\nexport interface GeneratedFile { path: string; content: string }\nexport interface GenerateResult { files: GeneratedFile[]; issues: ValidationIssue[] }\n\n/** First-line marker; the CLI only ever deletes files that carry it. */\nexport const GENERATED_MARK = \"@generated\";\nconst HEADER = `// ${GENERATED_MARK} Do not edit: change the bindings and regenerate.\\n`;\n\nconst words = (s: string) => s.split(/[.\\-_]+/).filter(Boolean);\nconst pascal = (s: string) => words(s).map(w => w[0].toUpperCase() + w.slice(1)).join(\"\");\nconst camel = (s: string) => { const p = pascal(s); return p[0].toLowerCase() + p.slice(1); };\nconst str = (v: unknown) => JSON.stringify(v);\nconst IDENT = /^[A-Za-z_$][\\w$]*$/;\nconst prop = (k: string) => (IDENT.test(k) ? k : str(k));\n/** Orval names functions after the operationId, first letter lowercased. */\nexport const orvalName = (id: string) => (IDENT.test(id) ? id[0].toLowerCase() + id.slice(1) : camel(id));\n\n/** JSON Schema → a TypeScript type. Loose on purpose: the API checks API data, the UI only reads it. */\nexport function tsType(schema: JsonSchema | undefined, many = false, depth = 0): string {\n const one = (): string => {\n if (!schema || typeof schema !== \"object\" || depth > 3) return \"any\";\n const s = schema as Record<string, unknown>;\n if (Array.isArray(s.enum) && s.enum.length && s.enum.every(v => typeof v === \"string\")) return (s.enum as string[]).map(str).join(\" | \");\n switch (s.type) {\n case \"string\": return \"string\";\n case \"integer\": case \"number\": return \"number\";\n case \"boolean\": return \"boolean\";\n case \"array\": return `Array<${tsType(s.items as JsonSchema, false, depth + 1)}>`;\n case \"object\": {\n const props = Object.entries((s.properties as Record<string, JsonSchema>) ?? {});\n if (!props.length) return \"Record<string, any>\";\n return `{ ${props.map(([k, v]) => `${prop(k)}?: ${tsType(v, false, depth + 1)}`).join(\"; \")}; [key: string]: any }`;\n }\n default: return \"any\";\n }\n };\n return many ? `Array<${one()}>` : one();\n}\n\ntype At = { component: string; slot: string };\ninterface Scope { item: boolean; steps?: Set<string> }\n\ninterface Ctx {\n screen: ScreenEntry;\n keys: Map<string, string>;\n produces: Map<string, Set<string>>;\n use: Set<string>;\n issue: (code: string, message: string, at?: At) => void;\n warn: (code: string, message: string, at?: At) => void;\n}\n\n/** One expression → TypeScript over `state`, `item` and `steps`. */\nfunction compileExpr(expr: string, cx: Ctx, scope: Scope, at: At): string {\n let p;\n try { p = parse(expr); } catch (e) { cx.issue(\"expr.invalid\", (e as Error).message, at); return \"undefined\"; }\n const path = p.path.map(str);\n const h = p.head;\n const read = (root: string, keys: string[]) => { cx.use.add(\"at\"); return `at(${root}, [${keys.join(\", \")}])`; };\n if (h.type === \"item\") {\n if (!scope.item) { cx.issue(\"expr.no-item\", `\"${expr}\" reads $item, which this slot does not have.`, at); return \"undefined\"; }\n return path.length ? read(\"item\", path) : \"item\";\n }\n if (h.type === \"context\") {\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\"; }\n return read(\"state.context\", [str(h.id), ...path]);\n }\n if (h.type === \"steps\") {\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\"; }\n return read(\"steps\", [str(h.id), ...path]);\n }\n if (!cx.produces.get(h.component)?.has(h.slot)) {\n cx.issue(\"expr.unknown-slot\", `\"${expr}\" reads a value that is not produced on ${cx.screen.id}.`, at);\n return \"undefined\";\n }\n return read(\"state\", [str(cx.keys.get(h.component)!), str(h.slot), ...path]);\n}\n\nconst decode = (k: string) => k.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n\n/**\n * The Orval call for an operation: path params in path order, then the body, then the query params object,\n * then fetch options (header params go there).\n */\nfunction compileCall(op: CatalogOperation, request: Record<string, string>, cx: Ctx, scope: Scope, at: At) {\n const e = (x: string) => compileExpr(x, cx, scope, at);\n const known = new Set(op.parameters.map(p => p.pointer));\n const body: string[] = [];\n let whole: string | undefined;\n const query: string[] = [];\n const headers: string[] = [];\n for (const [pointer, x] of Object.entries(request)) {\n const [, where, ...rest] = pointer.split(\"/\");\n const keys = rest.map(decode);\n if (where === \"body\") {\n if (!op.body) { cx.issue(\"request.no-body\", `${op.id} takes no body, but \"${pointer}\" is set.`, at); continue; }\n if (!keys.length) whole = e(x); else body.push(`[[${keys.map(str).join(\", \")}], ${e(x)}]`);\n } else if (!known.has(pointer)) cx.issue(\"request.unknown-input\", `${op.id} has no input \"${pointer}\".`, at);\n else if (where === \"query\") query.push(`${prop(keys[0])}: ${e(x)}`);\n else if (where === \"header\") headers.push(`${str(keys[0])}: ${e(x)}`);\n }\n const args = [...op.path.matchAll(/\\{([^}]+)\\}/g)].map(m => {\n const x = request[`/path/${m[1]}`];\n if (x === undefined) { cx.issue(\"request.missing-path\", `${op.id} needs \"${m[1]}\" in its path; it is not connected.`, at); return \"undefined\"; }\n cx.use.add(\"path\");\n return `path(${e(x)})`;\n });\n if (op.body) {\n // Typed loosely: the API, not the compiler, decides what a body needs. Unconnected required fields are flagged.\n const set = new Set(Object.keys(request).filter(k => k.startsWith(\"/body/\")).map(k => decode(k.split(\"/\")[2])));\n const gaps = whole ? [] : ((flat(op.body.schema).required ?? []) as string[]).filter(f => !set.has(f));\n if (gaps.length) cx.warn(\"request.required-body\", `${op.id} requires ${gaps.join(\", \")} in its body; not connected.`, at);\n cx.use.add(\"assemble\");\n args.push(`assemble(${whole ?? \"undefined\"}, [${body.join(\", \")}])`);\n }\n if (op.parameters.some(p => p.pointer.startsWith(\"/query/\"))) { cx.use.add(\"defined\"); args.push(`defined({ ${query.join(\", \")} })`); }\n const key = `[${[str(op.id), ...args].join(\", \")}]`;\n if (headers.length) { cx.use.add(\"defined\"); args.push(`{ headers: defined({ ${headers.join(\", \")} }) }`); }\n const required = op.parameters.filter(p => p.required).map(p => `${prop(p.name)}: ${request[p.pointer] === undefined ? \"undefined\" : e(request[p.pointer])}`);\n return { fn: orvalName(op.id), call: `${orvalName(op.id)}(${args.join(\", \")})`, key, required: required.length ? `{ ${required.join(\", \")} }` : \"\" };\n}\n\n/** \"$\", \"$.a\" or \"$.a.items[*]\" → path keys. */\nconst selectPath = (selector: string) => segments(selector.replace(/^\\$\\.?/, \"\").replace(/\\[\\*\\]$/, \"\"));\n\nfunction compileSteps(steps: Step[], cx: Ctx, at: At, ops: Map<string, CatalogOperation>, imports: Set<string>): string {\n const done = new Set<string>();\n const blocks: string[] = [];\n let usesPayload = false;\n cx.use.add(\"ok\"); cx.use.add(\"finish\");\n for (const st of steps) {\n const op = ops.get(st.operation);\n if (!op) { cx.issue(\"catalog.operation-missing\", `${st.operation} is not in the API docs.`, at); continue; }\n const scope = { item: true, steps: done };\n const call = compileCall(op, st.request, cx, scope, at);\n imports.add(call.fn);\n const each = st.forEach ? compileExpr(st.forEach, cx, scope, at) : undefined;\n if (each) cx.use.add(\"list\"); else usesPayload = true;\n if (call.required) cx.use.add(\"need\");\n const readsItem = /\\bitem\\b/.test(call.call + call.required);\n blocks.push([\n ` {`,\n ` const responses: unknown[] = [];`,\n ` for (const item of ${each ? `list(${each})` : \"[payload]\"}) {`,\n readsItem ? \"\" : ` void item;`,\n ` try {`,\n call.required ? ` need(${str(op.id)}, ${call.required});` : \"\",\n ` responses.push(ok(await ${call.call}));`,\n ` } catch (error) {`,\n st.onError === \"stop\" ? ` throw error;` : ` failed.push(error);`,\n ` }`,\n ` }`,\n ` steps[${str(st.id)}] = { response: ${each ? \"responses\" : \"responses[0]\"} };`,\n ` }`,\n ].filter(Boolean).join(\"\\n\"));\n done.add(st.id);\n }\n return [\n `async (${usesPayload ? \"payload\" : \"_payload\"}?: any) => {`,\n ` const steps: Record<string, unknown> = {};`,\n ` const failed: unknown[] = [];`,\n ...blocks,\n ` finish(failed);`,\n ` }`,\n ].join(\"\\n\");\n}\n\nexport function generate(file: BindingsFile, catalog: Catalog): GenerateResult {\n const issues: ValidationIssue[] = [];\n const { fw, index, issues: fileIssues } = fromFile(file, catalog);\n const valid = validateRegistry(fw);\n issues.push(...fileIssues, ...valid.issues);\n const ops = new Map(catalog.operations.map(o => [o.id, o]));\n const DESC = new Map(fw.descriptors.map(d => [d.kind, d]));\n const client = file.output?.client;\n if (!client) issues.push({ severity: \"error\", screen: \"\", code: \"output.missing\", message: `Set \"output\": { \"dir\", \"client\" } in the bindings file.` });\n\n const files: GeneratedFile[] = [{ path: \"screen-helpers.ts\", content: HEADER + HELPERS }];\n const exports: string[] = [];\n\n for (const screen of valid.registry.screens) {\n const name = pascal(screen.id);\n const keys = new Map<string, string>();\n const taken = new Map<string, string>();\n for (const c of screen.components) {\n const k = camel(c.bindId.slice(screen.id.length + 1));\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}\".` });\n taken.set(k, c.bindId); keys.set(c.bindId, k);\n }\n const cx: Ctx = {\n screen, keys, use: new Set(),\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))])),\n issue: (code, message, at) => issues.push({ severity: \"error\", screen: screen.id, code, message, ...at }),\n warn: (code, message, at) => issues.push({ severity: \"warning\", screen: screen.id, code, message, ...at }),\n };\n const bindings = new Map<string, SlotBinding>();\n for (const b of index[screen.id] ?? []) {\n if (!keys.has(b.component)) { cx.issue(\"binding.unknown-component\", `A binding names \"${b.component}\", which is not registered.`, b); continue; }\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; }\n bindings.set(`${b.component}|${b.slot}`, b);\n }\n\n const imports = new Set<string>();\n const types = new Set<string>();\n const body: string[] = [];\n const ret: string[] = [];\n const apiType: string[] = [];\n const stateType: string[] = [];\n\n for (const c of screen.components) {\n const d = DESC.get(c.kind)!;\n const k = keys.get(c.bindId)!;\n const produce = d.slots.filter(s => s.role === \"produce\");\n if (produce.length) stateType.push(` ${prop(k)}?: { ${produce.map(s => `${prop(s.id)}?: ${tsType(s.schema, s.many)}`).join(\"; \")} };`);\n const out: string[] = [];\n const outT: string[] = [];\n const unbound = (slot: string, v: string) => { cx.use.add(v); out.push(`${prop(slot)}: ${v}`); };\n for (const s of d.slots.filter(x => x.role !== \"produce\")) {\n const b = bindings.get(`${c.bindId}|${s.id}`);\n const at = { component: c.bindId, slot: s.id };\n const v = `${k}${pascal(s.id)}`;\n if (s.role === \"trigger\") {\n types.add(\"Action\"); outT.push(`${prop(s.id)}: Action`);\n if (b?.type !== \"steps\") { unbound(s.id, \"UNBOUND_ACTION\"); continue; }\n cx.use.add(\"useAction\");\n body.push(` const ${v} = useAction(${compileSteps(b.steps, cx, at, ops, imports)});`);\n out.push(`${prop(s.id)}: ${v}`);\n continue;\n }\n const T = tsType(s.schema, s.many);\n if (s.scope) {\n types.add(\"Cell\"); outT.push(`${prop(s.id)}: Cell<${T}>`);\n if (b?.type !== \"expression\") { unbound(s.id, \"UNBOUND_CELL\"); continue; }\n out.push(`${prop(s.id)}: { bound: true, read: (item: any) => ${compileExpr(b.value, cx, { item: true }, at)} }`);\n continue;\n }\n types.add(\"Data\"); outT.push(`${prop(s.id)}: Data<${T}>`);\n if (b?.type === \"expression\") {\n out.push(`${prop(s.id)}: { bound: true, data: ${compileExpr(b.value, cx, { item: false }, at)}, loading: false, error: undefined }`);\n continue;\n }\n const op = b?.type === \"operation\" ? ops.get(b.operation) : undefined;\n if (b?.type === \"operation\" && !op) cx.issue(\"catalog.operation-missing\", `${b.operation} is not in the API docs.`, at);\n if (b?.type !== \"operation\" || !op) { unbound(s.id, \"UNBOUND_DATA\"); continue; }\n const call = compileCall(op, b.request, cx, { item: false }, at);\n imports.add(call.fn);\n [\"useData\", \"ok\"].forEach(h => cx.use.add(h));\n if (call.required) cx.use.add(\"has\");\n const sel = selectPath(b.select).map(str);\n if (sel.length) cx.use.add(\"at\");\n const picked = sel.length ? `at(data, [${sel.join(\", \")}])` : \"data\";\n const map = Object.entries(b.map ?? {});\n if (map.length) cx.use.add(\"mapItems\");\n const select = map.length ? `mapItems(${picked}, (item: any) => ({ ${map.map(([f, x]) => `${prop(f)}: ${compileExpr(x, cx, { item: true }, at)}`).join(\", \")} }))` : picked;\n const every = typeof b.load === \"object\" ? `, everySeconds: ${b.load.everySeconds}` : \"\";\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} });`);\n out.push(`${prop(s.id)}: ${v}`);\n }\n if (out.length) { ret.push(` ${prop(k)}: { ${out.join(\", \")} },`); apiType.push(` ${prop(k)}: { ${outT.join(\"; \")} };`); }\n }\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(\"; \")} };`);\n\n const usesState = [...body, ...ret].some(l => /\\bstate\\b/.test(l));\n const lines = [\n HEADER.trimEnd(),\n imports.size ? `import { ${[...imports].sort().join(\", \")} } from ${str(client ?? \"\")};` : null,\n cx.use.size ? `import { ${[...cx.use].sort().join(\", \")} } from \"./screen-helpers\";` : null,\n types.size ? `import type { ${[...types].sort().join(\", \")} } from \"./screen-helpers\";` : null,\n \"\",\n `/** ${screen.label}: values its components produce, and what it was opened with. */`,\n stateType.length ? `export interface ${name}State {\\n${stateType.join(\"\\n\")}\\n}` : `export type ${name}State = Record<string, never>;`,\n \"\",\n `export interface ${name}Api {\\n${apiType.join(\"\\n\")}\\n}`,\n \"\",\n `/** API data and actions for ${screen.label} (${screen.id}). */`,\n `export function use${name}Api(${usesState ? \"state\" : \"_state\"}: ${name}State = {}): ${name}Api {`,\n ...body,\n ` return {`,\n ...ret,\n ` };`,\n `}`,\n \"\",\n ].filter((l): l is string => l !== null);\n files.push({ path: `${screen.id}.ts`, content: lines.join(\"\\n\") });\n exports.push(`export * from \"./${screen.id}\";`);\n }\n files.push({ path: \"index.ts\", content: HEADER + exports.join(\"\\n\") + \"\\n\" });\n return { files, issues };\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"
|
|
8
8
|
],
|
|
9
|
-
"mappings": "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",
|
|
10
|
-
"debugId": "
|
|
9
|
+
"mappings": "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",
|
|
10
|
+
"debugId": "71CC284B82A9C3E764756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
package/dist/overlay.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function
|
|
1
|
+
function g(o,e){let n;for(let t of e)if(o.startsWith(t+".")&&(!n||t.length>n.length))n=t;return n}function m(o,e){let n=new Map;for(let s of o){let r=g(s,e);if(r)n.set(r,(n.get(r)??0)+1)}let t;for(let[s,r]of n){let c=t?n.get(t):-1;if(r>c||r===c&&s.length>t.length)t=s}return t}var b=new URL(".",import.meta.url).pathname,p="data-component-id",l=null;async function y(){if(l)return l;try{l=((await(await fetch(b+"api/bindings",{cache:"no-store"})).json()).screens??[]).map((e)=>e.id)}catch{l=[]}return l}function w(o){let e=o.getBoundingClientRect();if(!e.width||!e.height)return!1;let n=document.elementFromPoint(e.left+e.width/2,e.top+e.height/2);return!!n&&o.contains(n)}var x=()=>[...document.querySelectorAll(`[${p}]`)].filter(w).map((o)=>o.getAttribute(p)),v=`
|
|
2
2
|
:host { all: initial; }
|
|
3
3
|
.fab { position: fixed; z-index: 2147483000; right: max(20px, env(safe-area-inset-right, 0px)); bottom: max(20px, env(safe-area-inset-bottom, 0px));
|
|
4
4
|
display: grid; grid-template-columns: auto 0fr; align-items: center; height: 44px; padding: 0 13px; border-radius: 10px; cursor: pointer;
|
|
@@ -19,6 +19,6 @@ iframe { width: 100%; height: 100%; border: 0; display: block; }
|
|
|
19
19
|
.hl { position: fixed; z-index: 2147482999; pointer-events: none; border: 2px solid #3b82f6; border-radius: 6px; background: rgba(59,130,246,.08); display: none; }
|
|
20
20
|
@keyframes in { from { opacity: 0; transform: translateY(8px) scale(.985); } }
|
|
21
21
|
@media (prefers-reduced-motion: reduce) { * { animation-duration: 1ms !important; transition-duration: 1ms !important; } }
|
|
22
|
-
`,k='<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 7 4 12l5 5M15 7l5 5-5 5"/></svg>';function h(){if(document.getElementById("api-binding-overlay"))return;let o=document.createElement("div");o.id="api-binding-overlay";let
|
|
22
|
+
`,k='<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 7 4 12l5 5M15 7l5 5-5 5"/></svg>';function h(){if(document.getElementById("api-binding-overlay"))return;let o=document.createElement("div");o.id="api-binding-overlay";let e=o.attachShadow({mode:"open"});e.innerHTML=`<style>${v}</style>
|
|
23
23
|
<button class="fab" type="button" aria-label="Bind API" title="Bind API (Alt+click a component to open it)">${k}<span><span>Bind API</span></span></button>
|
|
24
|
-
<dialog aria-label="Bind API"></dialog><div class="hl"></div>`,document.body.appendChild(o);let n=
|
|
24
|
+
<dialog aria-label="Bind API"></dialog><div class="hl"></div>`,document.body.appendChild(o);let n=e.querySelector(".fab"),t=e.querySelector("dialog"),s=e.querySelector(".hl"),r=async(i)=>{let a=await y(),d=i?void 0:m(x(),a),f=new URLSearchParams({embed:"1"});if(d)f.set("screen",d);if(i)f.set("component",i);t.innerHTML=`<iframe title="Bind API studio" src="${b}?${f}"></iframe>`,n.hidden=!0,t.showModal()},c=()=>{if(!t.open)return;t.close(),t.innerHTML="",n.hidden=!1,n.focus()};n.addEventListener("click",()=>void r()),t.addEventListener("close",c),window.addEventListener("message",(i)=>{if(i.origin===location.origin&&i.data==="api-binding:close")c()});let u=(i)=>i.altKey&&!t.open?i.target?.closest?.(`[${p}]`)??null:null;document.addEventListener("click",(i)=>{let a=u(i);if(!a)return;i.preventDefault(),i.stopPropagation(),r(a.getAttribute(p))},!0),document.addEventListener("mousemove",(i)=>{let a=u(i);if(!a){s.style.display="none";return}let d=a.getBoundingClientRect();Object.assign(s.style,{display:"block",left:`${d.left-2}px`,top:`${d.top-2}px`,width:`${d.width+4}px`,height:`${d.height+4}px`})},{passive:!0}),document.addEventListener("keyup",(i)=>{if(i.key==="Alt")s.style.display="none"})}if(document.body)h();else document.addEventListener("DOMContentLoaded",h);
|
package/dist/server/handler.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Studio HTTP handling shared by the CLI server and the Vite plugin: the studio page, the bindings file, the docs. */
|
|
2
2
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
3
|
+
import type { BindingsFile } from "../framework/contract";
|
|
3
4
|
export interface StudioHandlerOptions {
|
|
4
5
|
/** Absolute path of bindings.json. */
|
|
5
6
|
file: string;
|
|
@@ -7,12 +8,18 @@ export interface StudioHandlerOptions {
|
|
|
7
8
|
prefix: string;
|
|
8
9
|
/** True when the request may read and write the file (host and origin checks live with the caller). */
|
|
9
10
|
allowed: (req: IncomingMessage) => boolean;
|
|
11
|
+
/** Called after the file is saved. */
|
|
12
|
+
onSave?: () => void;
|
|
10
13
|
}
|
|
11
14
|
export declare const APP_DIR: string;
|
|
12
15
|
export declare const OVERLAY_FILE: string;
|
|
13
16
|
/** The OpenAPI text: fetched for a URL, read for a .yaml/.yml/.json path relative to `base`. */
|
|
14
17
|
export declare function readDocs(src: string, base: string): Promise<string>;
|
|
18
|
+
/** The bindings file with its registry merged in; a file without `registry` keeps everything inline. */
|
|
19
|
+
export declare function readBindings(file: string): Promise<BindingsFile>;
|
|
20
|
+
/** Saves the studio's merged file. With a registry, only the bindings part is written; registry.json is never touched. */
|
|
21
|
+
export declare function saveBindings(file: string, merged: BindingsFile): Promise<void>;
|
|
15
22
|
/** Writes atomically, so an interrupted save never leaves half a file. */
|
|
16
23
|
export declare function writeFileAtomic(file: string, text: string): Promise<void>;
|
|
17
24
|
/** Handles a request under `prefix`. Returns false when the path is not the studio's, so the caller can pass it on. */
|
|
18
|
-
export declare function createStudioHandler({ file, prefix, allowed }: StudioHandlerOptions): (req: IncomingMessage, res: ServerResponse) => Promise<boolean>;
|
|
25
|
+
export declare function createStudioHandler({ file, prefix, allowed, onSave }: StudioHandlerOptions): (req: IncomingMessage, res: ServerResponse) => Promise<boolean>;
|
package/dist/studio/index.js
CHANGED
package/dist/vite/plugin.d.ts
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* plugins: [bindingStudio()]
|
|
7
7
|
*
|
|
8
8
|
* Serves the studio under /__binding/ and injects a floating button into the app's HTML pages
|
|
9
|
-
* (SPA and server-rendered alike).
|
|
9
|
+
* (SPA and server-rendered alike). Every save regenerates the screen hooks, so Vite reloads the
|
|
10
|
+
* screen with the new binding. `vite build` never runs it (apply: "serve").
|
|
10
11
|
*/
|
|
11
12
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
12
13
|
export interface BindingStudioOptions {
|
|
@@ -24,13 +25,25 @@ export interface VitePluginLike {
|
|
|
24
25
|
root: string;
|
|
25
26
|
}) => void;
|
|
26
27
|
transformIndexHtml: (html: string) => string;
|
|
28
|
+
config: () => {
|
|
29
|
+
server: {
|
|
30
|
+
watch: {
|
|
31
|
+
ignored: Array<(p: string) => boolean>;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
};
|
|
27
35
|
configureServer: (server: {
|
|
28
36
|
middlewares: {
|
|
29
37
|
use: (fn: (req: IncomingMessage, res: ServerResponse, next: Next) => void) => void;
|
|
30
38
|
};
|
|
39
|
+
watcher?: {
|
|
40
|
+
on: (event: "change", fn: (p: string) => void) => void;
|
|
41
|
+
};
|
|
31
42
|
}) => void;
|
|
32
43
|
}
|
|
33
44
|
/** Adds the overlay script before the last </body> of HTML chunks; leaves everything else as it is. */
|
|
34
45
|
export declare function injectOverlay(res: ServerResponse, tag: string): void;
|
|
46
|
+
/** Regenerates the hooks after a save; logs the outcome, since the file is already saved either way. */
|
|
47
|
+
export declare function regenerate(file: string, log?: (line: string) => void): Promise<void>;
|
|
35
48
|
export declare function bindingStudio(options?: BindingStudioOptions): VitePluginLike;
|
|
36
49
|
export {};
|