@ouispec/cli 0.1.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.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +112 -0
  3. package/dist/analyze.d.ts +282 -0
  4. package/dist/analyze.d.ts.map +1 -0
  5. package/dist/analyze.js +1421 -0
  6. package/dist/analyze.js.map +1 -0
  7. package/dist/assemble.d.ts +50 -0
  8. package/dist/assemble.d.ts.map +1 -0
  9. package/dist/assemble.js +555 -0
  10. package/dist/assemble.js.map +1 -0
  11. package/dist/cli.d.ts +12 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +54 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config.d.ts +54 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +126 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/contract.d.ts +10 -0
  20. package/dist/contract.d.ts.map +1 -0
  21. package/dist/contract.js +15 -0
  22. package/dist/contract.js.map +1 -0
  23. package/dist/generate.d.ts +49 -0
  24. package/dist/generate.d.ts.map +1 -0
  25. package/dist/generate.js +178 -0
  26. package/dist/generate.js.map +1 -0
  27. package/dist/index.d.ts +9 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +8 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/inputs.d.ts +134 -0
  32. package/dist/inputs.d.ts.map +1 -0
  33. package/dist/inputs.js +705 -0
  34. package/dist/inputs.js.map +1 -0
  35. package/dist/knowledge.d.ts +19 -0
  36. package/dist/knowledge.d.ts.map +1 -0
  37. package/dist/knowledge.js +366 -0
  38. package/dist/knowledge.js.map +1 -0
  39. package/dist/program.d.ts +60 -0
  40. package/dist/program.d.ts.map +1 -0
  41. package/dist/program.js +302 -0
  42. package/dist/program.js.map +1 -0
  43. package/dist/recipes.d.ts +17 -0
  44. package/dist/recipes.d.ts.map +1 -0
  45. package/dist/recipes.js +48 -0
  46. package/dist/recipes.js.map +1 -0
  47. package/dist/tier2.d.ts +74 -0
  48. package/dist/tier2.d.ts.map +1 -0
  49. package/dist/tier2.js +303 -0
  50. package/dist/tier2.js.map +1 -0
  51. package/package.json +62 -0
package/dist/tier2.js ADDED
@@ -0,0 +1,303 @@
1
+ /**
2
+ * Tier 2 (ADR-0226 §2.3): each mapping of a third-party design system the app
3
+ * does not own becomes a bound module in `<out>/bound/`, and the generator
4
+ * reads every use of a bound control as it reads a tier 1 control.
5
+ *
6
+ * - `loadMappings` reads and checks each mapping the config names.
7
+ * - `boundModuleSource` is the module emitted for one: a wrapper per mapped
8
+ * control, built from `@ouispec/bindings/react`, under the
9
+ * package's own export names, with every other member of a namespace kept.
10
+ * - `checkMappingTypes` holds each mapping to the package's types: every
11
+ * export it names exists, and every prop it names is one the component takes.
12
+ */
13
+ import { existsSync, readFileSync } from 'node:fs';
14
+ import { join, relative } from 'node:path';
15
+ import ts from 'typescript';
16
+ import { CONTROL_KINDS, isRegisteredKind, registeredControlKind, stableStringify, tier2ControlTable, tier2Descriptor, tier2Parts, } from '@ouispec/bindings';
17
+ import { CONFIG_FILE } from './config.js';
18
+ import { contractFindings } from './contract.js';
19
+ /** Where the bound wrappers' runtime is imported from, in every emitted module. */
20
+ export const BINDINGS_REACT_MODULE = '@ouispec/bindings/react';
21
+ /** What adds `agent` to JSX for an app with bound modules, imported by every emitted module. */
22
+ export const BINDINGS_JSX_MODULE = '@ouispec/bindings/jsx';
23
+ /** The directory under `out` the bound modules go in. */
24
+ export const BOUND_DIR = 'bound';
25
+ /** `@mantine/core` → `mantine-core`: the bound module's name. */
26
+ export function boundModuleSlug(pkg) {
27
+ return pkg
28
+ .replace(/^@/, '')
29
+ .replace(/[^A-Za-z0-9]+/g, '-')
30
+ .replace(/^-+|-+$/g, '')
31
+ .toLowerCase();
32
+ }
33
+ function finding(file, message) {
34
+ return { file, line: 0, message };
35
+ }
36
+ /**
37
+ * Every mapping `oui.config.json` names, read and checked against the
38
+ * contract and against each other: one mapping per package, never a package
39
+ * also listed as a tier 1 design system, and every kind a built-in one or
40
+ * one a design system registers.
41
+ */
42
+ export function loadMappings(config) {
43
+ const mappings = [];
44
+ const errors = [];
45
+ const bySlug = new Map();
46
+ for (const path of config.mappings) {
47
+ const file = relative(config.root, path);
48
+ if (!existsSync(path)) {
49
+ errors.push(finding(CONFIG_FILE, `"mappings" lists ${file}, which does not exist`));
50
+ continue;
51
+ }
52
+ let raw;
53
+ try {
54
+ raw = JSON.parse(readFileSync(path, 'utf8'));
55
+ }
56
+ catch (err) {
57
+ errors.push(finding(file, `is not JSON: ${err.message}`));
58
+ continue;
59
+ }
60
+ const contract = contractFindings('tier2-mapping.json', raw, file, 'the mapping');
61
+ if (contract.length) {
62
+ errors.push(...contract);
63
+ continue;
64
+ }
65
+ const mapping = raw;
66
+ const before = errors.length;
67
+ if (config.designSystem.includes(mapping.package)) {
68
+ errors.push(finding(file, `maps ${mapping.package}, which "designSystem" also lists: a package is a tier 1 design system or mapped, never both`));
69
+ }
70
+ const slug = boundModuleSlug(mapping.package);
71
+ const twin = bySlug.get(slug);
72
+ if (twin) {
73
+ errors.push(finding(file, twin.package === mapping.package
74
+ ? `maps ${mapping.package}, which ${twin.file} maps too: one mapping per package`
75
+ : `maps ${mapping.package}, whose bound module would be ${slug}.ts, as ${twin.file}'s for ${twin.package} is`));
76
+ }
77
+ const descriptors = new Map();
78
+ const parts = new Map();
79
+ const exports = new Set();
80
+ for (const [name, control] of Object.entries(mapping.controls)) {
81
+ const kind = control.kind;
82
+ if (isRegisteredKind(kind) ? !registeredControlKind(kind) : !CONTROL_KINDS.includes(kind)) {
83
+ errors.push(finding(file, isRegisteredKind(kind)
84
+ ? `${name} has the kind ${kind}, which no design system in "designSystem" registers`
85
+ : `${name} has the kind ${kind}, which is not a control kind: ${CONTROL_KINDS.join(', ')}`));
86
+ continue;
87
+ }
88
+ const where = tier2Parts(name, control);
89
+ const own = [[where.root, 'root'], ...(where.item ? [[where.item, 'item']] : [])];
90
+ for (const [path, part] of own) {
91
+ const other = parts.get(path);
92
+ if (other) {
93
+ errors.push(finding(file, `${name}'s ${part} is ${path}, which ${other.control}'s ${other.part} is too`));
94
+ continue;
95
+ }
96
+ parts.set(path, { control: name, part, mapping: control });
97
+ // An item reports its option; only the root is a control.
98
+ descriptors.set(path, part === 'root' ? tier2Descriptor(control) : { callbacks: [], titleProps: [] });
99
+ exports.add(path.split('.')[0]);
100
+ }
101
+ }
102
+ if (errors.length > before)
103
+ continue;
104
+ const module = join(config.out, BOUND_DIR, `${slug}.ts`);
105
+ const loaded = {
106
+ file,
107
+ package: mapping.package,
108
+ key: `bound:${mapping.package}`,
109
+ slug,
110
+ module,
111
+ table: join(config.out, BOUND_DIR, `${slug}.agent-controls.json`),
112
+ mapping,
113
+ descriptors,
114
+ parts,
115
+ exports,
116
+ };
117
+ bySlug.set(slug, loaded);
118
+ mappings.push(loaded);
119
+ }
120
+ return { mappings, errors };
121
+ }
122
+ /** A string as a TypeScript single-quoted literal. */
123
+ function quote(text) {
124
+ return `'${text.replace(/\\/g, '\\\\').replace(/'/g, "\\'")}'`;
125
+ }
126
+ const lowerFirst = (name) => name.charAt(0).toLowerCase() + name.slice(1);
127
+ /** The bound module emitted for one mapping: deterministic, the same mapping always gives the same bytes. */
128
+ export function boundModuleSource(loaded) {
129
+ const pkg = loaded.package;
130
+ const unbound = (segment) => `Unbound${segment}`;
131
+ /** A part's path as an expression on the package's imports. */
132
+ const ref = (path) => {
133
+ const [head, member] = path.split('.');
134
+ return member ? `${unbound(head)}.${member}` : unbound(head);
135
+ };
136
+ const lines = [];
137
+ /** First segment → what each of its paths is bound to: the segment itself (`''`) or one member. */
138
+ const members = new Map();
139
+ const put = (path, expr) => {
140
+ const [head, member = ''] = path.split('.');
141
+ const map = members.get(head) ?? new Map();
142
+ map.set(member, expr);
143
+ members.set(head, map);
144
+ };
145
+ for (const [name, control] of Object.entries(loaded.mapping.controls).sort(([a], [b]) => a.localeCompare(b))) {
146
+ const where = tier2Parts(name, control);
147
+ const literal = stableStringify(control, 0);
148
+ if (where.item) {
149
+ const local = `${lowerFirst(name)}Parts`;
150
+ lines.push(`const ${local} = boundCompound(${ref(where.root)}, ${ref(where.item)}, ${quote(name)}, ${literal});`);
151
+ put(where.root, `${local}.root`);
152
+ put(where.item, `${local}.item`);
153
+ }
154
+ else {
155
+ put(where.root, `boundControl(${ref(where.root)}, ${quote(name)}, ${literal})`);
156
+ }
157
+ }
158
+ const exported = [];
159
+ for (const head of [...members.keys()].sort()) {
160
+ const map = members.get(head);
161
+ const base = map.get('') ?? unbound(head);
162
+ const rest = [...map.entries()].filter(([member]) => member !== '').sort(([a], [b]) => a.localeCompare(b));
163
+ exported.push(rest.length
164
+ ? `export const ${head} = withMembers(${base}, { ${rest.map(([member, expr]) => `${member}: ${expr}`).join(', ')} });`
165
+ : `export const ${head} = ${base};`);
166
+ }
167
+ const heads = [...members.keys()].sort();
168
+ const helpers = ['boundCompound', 'boundControl', 'withMembers'].filter(h => [...lines, ...exported].some(l => l.includes(`${h}(`)));
169
+ return [
170
+ '/**',
171
+ ` * Generated by \`oui generate\` from ${loaded.file} (ADR-0226 §2.3). Do not edit: change the`,
172
+ ' * mapping and run `oui generate`.',
173
+ ' *',
174
+ ` * Every control the mapping names, bound: import them from here, never from ${pkg}. Each`,
175
+ ' * accepts `agent`, registers its binding with the app’s own callback, returns that callback’s',
176
+ ` * result, and renders the ${pkg} component unchanged. Every other member of a namespace is`,
177
+ ` * ${pkg}'s own.`,
178
+ ' */',
179
+ `import { ${heads.map(h => `${h} as ${unbound(h)}`).join(', ')} } from ${quote(pkg)};`,
180
+ `import { ${helpers.join(', ')} } from ${quote(BINDINGS_REACT_MODULE)};`,
181
+ // `agent` on JSX: a bound export keeps the component's own type, so the attribute is added once, for the app.
182
+ `import ${quote(BINDINGS_JSX_MODULE)};`,
183
+ '',
184
+ ...lines,
185
+ ...(lines.length ? [''] : []),
186
+ ...exported,
187
+ '',
188
+ ].join('\n');
189
+ }
190
+ /** The control table emitted beside the bound module: it ships as a tier 1 package's does. */
191
+ export function boundTableSource(loaded) {
192
+ return `${stableStringify(tier2ControlTable(loaded.mapping))}\n`;
193
+ }
194
+ /** Whether `name` is a prop of `type`: `null` when the type cannot say (generic, polymorphic, indexed). */
195
+ function hasProp(checker, type, name, depth = 0) {
196
+ if (depth > 8 || type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown))
197
+ return null;
198
+ if (checker.getPropertyOfType(type, name))
199
+ return true;
200
+ if (type.isUnionOrIntersection()) {
201
+ const each = type.types.map(t => hasProp(checker, t, name, depth + 1));
202
+ if (each.includes(true))
203
+ return true;
204
+ return each.includes(null) ? null : false;
205
+ }
206
+ if (checker.getIndexInfosOfType(type).length)
207
+ return null;
208
+ const undecided = ts.TypeFlags.TypeParameter | ts.TypeFlags.Conditional | ts.TypeFlags.Substitution | ts.TypeFlags.Index | ts.TypeFlags.IndexedAccess;
209
+ return type.flags & undecided ? null : false;
210
+ }
211
+ /** Whether a component of `type` takes the prop `name`, over every way it can be called. */
212
+ function takesProp(checker, type, name) {
213
+ const signatures = [...type.getCallSignatures(), ...type.getConstructSignatures()];
214
+ if (!signatures.length)
215
+ return null;
216
+ let answer = false;
217
+ for (const signature of signatures) {
218
+ const param = signature.getParameters()[0];
219
+ if (!param)
220
+ continue;
221
+ const declaration = param.valueDeclaration ?? param.declarations?.[0];
222
+ const props = declaration ? checker.getTypeOfSymbolAtLocation(param, declaration) : checker.getDeclaredTypeOfSymbol(param);
223
+ const has = hasProp(checker, props, name);
224
+ if (has)
225
+ return true;
226
+ if (has === null)
227
+ answer = null;
228
+ }
229
+ return answer;
230
+ }
231
+ /**
232
+ * Each mapping held to its package's types, through its bound module as the
233
+ * app compiles it: every diagnostic in the module (an export the package does
234
+ * not have, a package the app cannot resolve), and every prop the mapping
235
+ * names that its component does not take. A prop the types cannot decide (a
236
+ * polymorphic component's) is left to the conformance kit.
237
+ */
238
+ export function checkMappingTypes(source, mappings) {
239
+ const out = [];
240
+ const { checker } = source;
241
+ for (const loaded of mappings) {
242
+ const sf = source.program.getSourceFile(loaded.module);
243
+ if (!sf) {
244
+ out.push(finding(loaded.file, `its bound module ${source.rel(loaded.module)} is not in the program`));
245
+ continue;
246
+ }
247
+ const diagnostics = source.program.getSemanticDiagnostics(sf);
248
+ for (const d of diagnostics) {
249
+ out.push(finding(loaded.file, `does not fit ${loaded.package}: ${ts.flattenDiagnosticMessageText(d.messageText, ' ')} (in the bound module ${source.rel(loaded.module)})`));
250
+ }
251
+ if (diagnostics.length)
252
+ continue;
253
+ // The package's exports, through the module's own imports.
254
+ const imported = new Map();
255
+ for (const statement of sf.statements) {
256
+ if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier))
257
+ continue;
258
+ if (statement.moduleSpecifier.text !== loaded.package)
259
+ continue;
260
+ const bindings = statement.importClause?.namedBindings;
261
+ if (!bindings || !ts.isNamedImports(bindings))
262
+ continue;
263
+ for (const element of bindings.elements) {
264
+ imported.set((element.propertyName ?? element.name).text, checker.getTypeAtLocation(element.name));
265
+ }
266
+ }
267
+ const partType = (path) => {
268
+ const [head, member] = path.split('.');
269
+ const base = imported.get(head);
270
+ if (!base || !member)
271
+ return base ?? null;
272
+ const symbol = checker.getPropertyOfType(base, member);
273
+ return symbol ? checker.getTypeOfSymbolAtLocation(symbol, sf) : null;
274
+ };
275
+ for (const [path, info] of loaded.parts) {
276
+ const type = partType(path);
277
+ if (!type) {
278
+ out.push(finding(loaded.file, `${info.control}'s ${info.part} is ${path}, which ${loaded.package} does not export`));
279
+ continue;
280
+ }
281
+ const control = info.mapping;
282
+ const named = info.part === 'root'
283
+ ? [
284
+ ...control.callbacks.map(cb => [cb, 'a callback']),
285
+ ...(control.controlled ? [[control.controlled, 'its controlled prop']] : []),
286
+ ...(control.options ? [[control.options.prop, 'its options']] : []),
287
+ ...Object.values(control.schemaProps ?? {}).map(p => [p, 'a schema prop']),
288
+ ...(control.titleProps ?? []).filter(p => p !== 'children').map(p => [p, 'a title prop']),
289
+ ]
290
+ : [
291
+ ...(control.parts?.item?.valueProp ? [[control.parts.item.valueProp, 'its items’ value']] : []),
292
+ ...(control.parts?.item?.titleProps ?? []).filter(p => p !== 'children').map(p => [p, 'its items’ title']),
293
+ ];
294
+ for (const [prop, role] of named) {
295
+ if (takesProp(checker, type, prop) === false) {
296
+ out.push(finding(loaded.file, `${info.control} names ${prop} as ${role}, but ${loaded.package}'s ${path} takes no ${prop} prop`));
297
+ }
298
+ }
299
+ }
300
+ }
301
+ return out;
302
+ }
303
+ //# sourceMappingURL=tier2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier2.js","sourceRoot":"","sources":["../src/tier2.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@ouispec/cli",
3
+ "version": "0.1.0",
4
+ "description": "The assistant's surfaces and knowledge, generated from a UI's code (ADR-0220): a deterministic TypeScript-AST pass over routes, page component trees, design-system bindings, room catalogs and the API's OpenAPI operations — `oui generate [--check]` (also `closure-oui`)",
5
+ "homepage": "https://github.com/wesreid/oui/tree/main/packages/cli#readme",
6
+ "bugs": {
7
+ "url": "https://github.com/wesreid/oui/issues"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/wesreid/oui.git",
12
+ "directory": "packages/cli"
13
+ },
14
+ "license": "MIT",
15
+ "type": "module",
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "bin": {
19
+ "closure-oui": "./dist/cli.js",
20
+ "oui": "./dist/cli.js"
21
+ },
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/index.d.ts",
25
+ "import": "./dist/index.js"
26
+ }
27
+ },
28
+ "files": [
29
+ "README.md",
30
+ "dist"
31
+ ],
32
+ "peerDependencies": {
33
+ "vite": ">=6.0.0"
34
+ },
35
+ "peerDependenciesMeta": {
36
+ "vite": {
37
+ "optional": true
38
+ }
39
+ },
40
+ "dependencies": {
41
+ "typescript": "^5.8.0",
42
+ "@ouispec/bindings": "^0.1.0",
43
+ "@ouispec/contract": "^0.1.0"
44
+ },
45
+ "devDependencies": {
46
+ "@types/node": "^22.0.0",
47
+ "@types/react": "^19.0.0",
48
+ "vite": "^7.3.2",
49
+ "vitest": "^3.2.0",
50
+ "@ouispec/agent-react": "0.1.0"
51
+ },
52
+ "publishConfig": {
53
+ "access": "public",
54
+ "provenance": true
55
+ },
56
+ "scripts": {
57
+ "build": "tsc -p tsconfig.build.json",
58
+ "typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.test.json",
59
+ "test": "vitest run",
60
+ "clean": "rm -rf dist"
61
+ }
62
+ }