@graview/studio 0.0.0-stage → 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 (67) hide show
  1. package/LICENSE +96 -0
  2. package/README.md +31 -2
  3. package/dist/agent-panel.d.ts +11 -0
  4. package/dist/agent-panel.d.ts.map +1 -0
  5. package/dist/agent-panel.js +334 -0
  6. package/dist/agent-panel.js.map +1 -0
  7. package/dist/agent.d.ts +24 -0
  8. package/dist/agent.d.ts.map +1 -0
  9. package/dist/agent.js +371 -0
  10. package/dist/agent.js.map +1 -0
  11. package/dist/changes.d.ts +49 -0
  12. package/dist/changes.d.ts.map +1 -0
  13. package/dist/changes.js +217 -0
  14. package/dist/changes.js.map +1 -0
  15. package/dist/from-declaration.d.ts +13 -0
  16. package/dist/from-declaration.d.ts.map +1 -0
  17. package/dist/from-declaration.js +204 -0
  18. package/dist/from-declaration.js.map +1 -0
  19. package/dist/in-place.d.ts +27 -0
  20. package/dist/in-place.d.ts.map +1 -0
  21. package/dist/in-place.js +151 -0
  22. package/dist/in-place.js.map +1 -0
  23. package/dist/index.d.ts +24 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +15 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/lens.d.ts +9 -0
  28. package/dist/lens.d.ts.map +1 -0
  29. package/dist/lens.js +40 -0
  30. package/dist/lens.js.map +1 -0
  31. package/dist/meta.d.ts +2648 -0
  32. package/dist/meta.d.ts.map +1 -0
  33. package/dist/meta.js +553 -0
  34. package/dist/meta.js.map +1 -0
  35. package/dist/migration.d.ts +15 -0
  36. package/dist/migration.d.ts.map +1 -0
  37. package/dist/migration.js +82 -0
  38. package/dist/migration.js.map +1 -0
  39. package/dist/place.d.ts +61 -0
  40. package/dist/place.d.ts.map +1 -0
  41. package/dist/place.js +328 -0
  42. package/dist/place.js.map +1 -0
  43. package/dist/rewrite.d.ts +28 -0
  44. package/dist/rewrite.d.ts.map +1 -0
  45. package/dist/rewrite.js +52 -0
  46. package/dist/rewrite.js.map +1 -0
  47. package/dist/source.d.ts +69 -0
  48. package/dist/source.d.ts.map +1 -0
  49. package/dist/source.js +465 -0
  50. package/dist/source.js.map +1 -0
  51. package/dist/studio.d.ts +64 -0
  52. package/dist/studio.d.ts.map +1 -0
  53. package/dist/studio.js +96 -0
  54. package/dist/studio.js.map +1 -0
  55. package/dist/to-declaration.d.ts +24 -0
  56. package/dist/to-declaration.d.ts.map +1 -0
  57. package/dist/to-declaration.js +439 -0
  58. package/dist/to-declaration.js.map +1 -0
  59. package/dist/write-in-place.d.ts +27 -0
  60. package/dist/write-in-place.d.ts.map +1 -0
  61. package/dist/write-in-place.js +61 -0
  62. package/dist/write-in-place.js.map +1 -0
  63. package/dist/zod-source.d.ts +7 -0
  64. package/dist/zod-source.d.ts.map +1 -0
  65. package/dist/zod-source.js +124 -0
  66. package/dist/zod-source.js.map +1 -0
  67. package/package.json +58 -3
@@ -0,0 +1,217 @@
1
+ import { migrationSteps } from "./migration.js";
2
+ import { actLines, camel, edgeParts, fieldsOf, kindLines, label, q, Read, ruleLines, zodSource } from "./source.js";
3
+ const KIND_PROPERTIES = ["description", "plural", "noun", "figure"];
4
+ export function sourceChanges(before, after, base) {
5
+ const was = new Read(before);
6
+ const now = new Read(after);
7
+ const changes = [];
8
+ const rewrite = [];
9
+ const unwritten = [];
10
+ const kindsBefore = new Map(was.ofKind("kind").map((kind) => [kind.id, kind]));
11
+ const kindsAfter = new Map(now.ofKind("kind").map((kind) => [kind.id, kind]));
12
+ for (const [id, kind] of kindsBefore) {
13
+ const still = kindsAfter.get(id);
14
+ if (!still)
15
+ changes.push({ what: "remove-kind", kind: label(kind) });
16
+ else if (label(still) !== label(kind))
17
+ unwritten.push(`"${label(kind)}" is renamed "${label(still)}" — rename it in the checkout, where everything that says its name is.`);
18
+ }
19
+ for (const [id, kind] of kindsAfter) {
20
+ if (kindsBefore.has(id))
21
+ continue;
22
+ const text = kindLines(now, kind, base, []).join("\n");
23
+ changes.push({ what: "add-kind", kind: label(kind), binding: camel(label(kind)), text });
24
+ }
25
+ // A kind's own settings, for the kinds on both sides.
26
+ for (const [id, kind] of kindsAfter) {
27
+ const old = kindsBefore.get(id);
28
+ if (!old || label(old) !== label(kind))
29
+ continue;
30
+ for (const property of KIND_PROPERTIES) {
31
+ if (old[property] === kind[property])
32
+ continue;
33
+ const value = kind[property];
34
+ changes.push({ what: "set-kind-property", kind: label(kind), property, text: typeof value === "string" ? q(value) : null });
35
+ }
36
+ if (old["lifecycleField"] !== kind["lifecycleField"] || JSON.stringify(old["retired"]) !== JSON.stringify(kind["retired"])) {
37
+ unwritten.push(`"${label(kind)}"'s lifecycle changed — the studio cannot yet write that into the checkout.`);
38
+ }
39
+ }
40
+ // Fields: a kind's name and the field's name.
41
+ for (const [id, kind] of kindsAfter) {
42
+ const old = kindsBefore.get(id);
43
+ if (!old)
44
+ continue; // a new kind brings its fields with it
45
+ const had = new Map(fieldsOf(was, old).map((field) => [field.name, field]));
46
+ const has = new Map(fieldsOf(now, kind).map((field) => [field.name, field]));
47
+ for (const [name, field] of has) {
48
+ const zod = zodSource(field.type, field.required, field.options);
49
+ const prior = had.get(name);
50
+ if (!prior)
51
+ changes.push({ what: "add-field", kind: label(kind), field: name, zod });
52
+ else if (zodSource(prior.type, prior.required, prior.options) !== zod)
53
+ changes.push({ what: "change-field", kind: label(kind), field: name, zod });
54
+ }
55
+ for (const name of had.keys())
56
+ if (!has.has(name))
57
+ changes.push({ what: "remove-field", kind: label(kind), field: name });
58
+ }
59
+ // Edges: by name. The same name on another kind is a move.
60
+ const edgesOf = (read, kinds) => new Map(read.ofKind("edge").flatMap((edge) => {
61
+ const on = read.out(edge.id, "from-kind")[0];
62
+ return on && kinds.has(on.id) ? [[label(edge), { on: label(on), parts: edgeParts(read, edge) }]] : [];
63
+ }));
64
+ const text = (parts) => `{ ${parts.join(", ")} }`;
65
+ const edgesBefore = edgesOf(was, kindsBefore);
66
+ const edgesAfter = edgesOf(now, kindsAfter);
67
+ const kindNamesAfter = new Set([...kindsAfter.values()].map(label));
68
+ const kindNamesBefore = new Set([...kindsBefore.values()].map(label));
69
+ for (const [name, then] of edgesBefore) {
70
+ const later = edgesAfter.get(name);
71
+ if (!later) {
72
+ // A kind that went took its edges with it.
73
+ if (kindNamesAfter.has(then.on))
74
+ changes.push({ what: "remove-edge", kind: then.on, edge: name });
75
+ continue;
76
+ }
77
+ if (later.on !== then.on) {
78
+ const [targets, ...rest] = later.parts;
79
+ changes.push({ what: "move-edge", edge: name, from: then.on, to: later.on, targets: targets.replace(/^to: /, "") });
80
+ // Anything else about it that changed is changed where it now is.
81
+ if (rest.join() !== then.parts.slice(1).join())
82
+ changes.push({ what: "change-edge", kind: later.on, edge: name, text: text(later.parts) });
83
+ }
84
+ else if (later.parts.join() !== then.parts.join()) {
85
+ changes.push({ what: "change-edge", kind: later.on, edge: name, text: text(later.parts) });
86
+ }
87
+ }
88
+ for (const [name, later] of edgesAfter) {
89
+ // A new kind declares its edges in its own statement.
90
+ if (!edgesBefore.has(name) && kindNamesBefore.has(later.on))
91
+ changes.push({ what: "add-edge", kind: later.on, edge: name, text: text(later.parts) });
92
+ }
93
+ /*
94
+ * ACTS AND RULES. A new one is written as the studio declares it — and a
95
+ * new rule judges nothing until somebody says what it judges. One whose
96
+ * declaration changed keeps a body that was written for the old one, so
97
+ * it is named for rewriting rather than half-updated.
98
+ */
99
+ const signature = (read, node) => JSON.stringify([
100
+ Object.entries(node)
101
+ .filter(([key]) => key !== "id")
102
+ .sort(([a], [b]) => a.localeCompare(b)),
103
+ read.reading.edges
104
+ .filter((edge) => edge.from === node.id)
105
+ .map((edge) => `${edge.kind}->${label(read.node(edge.to) ?? { id: edge.to, kind: "" })}`)
106
+ .sort(),
107
+ ]);
108
+ for (const sort of ["act", "rule"]) {
109
+ const then = new Map(was.ofKind(sort).map((node) => [label(node), signature(was, node)]));
110
+ for (const node of now.ofKind(sort)) {
111
+ const name = label(node);
112
+ if (sort === "act" && node["derived"] === true)
113
+ continue;
114
+ if (!then.has(name)) {
115
+ const text = (sort === "act" ? actLines(now, node, false) : ruleLines(now, node, false)).join("\n");
116
+ changes.push(sort === "act" ? { what: "add-act", act: name, binding: camel(name), text } : { what: "add-rule", rule: name, binding: camel(name), text });
117
+ if (sort === "rule")
118
+ rewrite.push({ sort, name, why: "It is new, and judges nothing until its evaluate says what breaks it." });
119
+ }
120
+ else if (then.get(name) !== signature(now, node)) {
121
+ rewrite.push({ sort, name, why: `Its declaration changed in the studio, and its ${sort === "act" ? "body" : "judgement"} was written for the old one.` });
122
+ }
123
+ }
124
+ const later = new Set(now.ofKind(sort).map(label));
125
+ for (const name of then.keys()) {
126
+ if (!later.has(name))
127
+ changes.push(sort === "act" ? { what: "remove-act", act: name } : { what: "remove-rule", rule: name });
128
+ }
129
+ }
130
+ // Policy and presentation are declared elsewhere, in ways the studio cannot yet edit in place: said, not written.
131
+ for (const kind of ["role", "grant", "lens", "brand"]) {
132
+ const then = new Map(was.ofKind(kind).map((node) => [label(node), signature(was, node)]));
133
+ const later = new Map(now.ofKind(kind).map((node) => [label(node), signature(now, node)]));
134
+ for (const [name, sig] of later) {
135
+ if (!then.has(name))
136
+ unwritten.push(`The ${kind} "${name}" is new — the studio cannot yet write that into the checkout.`);
137
+ else if (then.get(name) !== sig)
138
+ unwritten.push(`The ${kind} "${name}" changed — the studio cannot yet write that into the checkout.`);
139
+ }
140
+ for (const name of then.keys())
141
+ if (!later.has(name))
142
+ unwritten.push(`The ${kind} "${name}" is gone — remove it in the checkout.`);
143
+ }
144
+ /*
145
+ * THE GRAPH SOMEBODY ALREADY HAS. What it needs to reach this declaration
146
+ * is written into the app beside the change — its version moved on, the
147
+ * steps as data — so the stored graph opens by running them.
148
+ */
149
+ const steps = migrationSteps(before, after);
150
+ if (steps.length > 0) {
151
+ const from = base?.version ?? 1;
152
+ changes.push({
153
+ what: "add-migration",
154
+ version: from + 1,
155
+ text: `stepsMigration(${literal({ from, to: from + 1, steps })})`,
156
+ import: { name: "stepsMigration", from: "@graview/ship/browser" },
157
+ });
158
+ }
159
+ return { changes, rewrite, unwritten };
160
+ }
161
+ /** A value as TypeScript: keys bare where they can be, on one line. */
162
+ function literal(value) {
163
+ if (Array.isArray(value))
164
+ return `[${value.map(literal).join(", ")}]`;
165
+ if (value !== null && typeof value === "object") {
166
+ const entries = Object.entries(value).map(([key, inner]) => `${/^[A-Za-z_$][\w$]*$/.test(key) ? key : JSON.stringify(key)}: ${literal(inner)}`);
167
+ return `{ ${entries.join(", ")} }`;
168
+ }
169
+ return JSON.stringify(value);
170
+ }
171
+ /**
172
+ * THE CODE A CHANGE LEAVES SAYING SOMETHING UNTRUE.
173
+ *
174
+ * The declaration moved `tended-by` from the plot to the planting; the act
175
+ * that ties a gardener to a plot still adds a `tended-by` edge FROM a plot,
176
+ * and the rule that every plot has a caretaker still reads one. Both
177
+ * compile. Both pass the checker, which judges declarations, not bodies.
178
+ * Both are wrong the moment the app runs.
179
+ *
180
+ * So every act and rule the checkout wrote is read for the names the change
181
+ * moved or took away, and each one that mentions them is named for
182
+ * rewriting — by a person, a seat, or a person saying it still holds.
183
+ */
184
+ export function codeTouched(changes, code) {
185
+ const literal = (name) => name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
186
+ // A name said as a string — `"tended-by"` — or a field read as a property or a key.
187
+ const said = (name) => new RegExp(`["'\`]${literal(name)}["'\`]`);
188
+ const field = (name) => new RegExp(`(\\.|\\b)${literal(name)}\\b`);
189
+ const marks = changes.flatMap((change) => {
190
+ switch (change.what) {
191
+ case "move-edge":
192
+ return [{ test: said(change.edge), why: `"${change.edge}" moved from ${change.from} to ${change.to}.` }];
193
+ case "remove-edge":
194
+ return [{ test: said(change.edge), why: `"${change.edge}" is no longer declared on ${change.kind}.` }];
195
+ case "change-edge":
196
+ return [{ test: said(change.edge), why: `"${change.edge}" on ${change.kind} changed.` }];
197
+ case "remove-field":
198
+ return [{ test: field(change.field), why: `${change.kind} no longer has "${change.field}".` }];
199
+ case "change-field":
200
+ return [{ test: field(change.field), why: `${change.kind}'s "${change.field}" changed type.` }];
201
+ case "remove-kind":
202
+ return [{ test: said(change.kind), why: `The kind "${change.kind}" is gone.` }];
203
+ default:
204
+ return [];
205
+ }
206
+ });
207
+ const touched = [];
208
+ for (const [sort, declared] of [["act", code.acts], ["rule", code.rules]]) {
209
+ for (const [name, { text }] of Object.entries(declared)) {
210
+ const reasons = marks.filter((mark) => mark.test.test(text)).map((mark) => mark.why);
211
+ if (reasons.length > 0)
212
+ touched.push({ sort, name, why: `It mentions what changed: ${reasons.join(" ")}` });
213
+ }
214
+ }
215
+ return touched;
216
+ }
217
+ //# sourceMappingURL=changes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changes.js","sourceRoot":"","sources":["../src/changes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAa,MAAM,aAAa,CAAC;AAoC/H,MAAM,eAAe,GAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AAE7E,MAAM,UAAU,aAAa,CAAC,MAAe,EAAE,KAAc,EAAE,IAA4B;IACzF,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,MAAM,OAAO,GAAc,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAE9E,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAChE,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC9K,CAAC;IACD,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;QACpC,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QAClC,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,sDAAsD;IACtD,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QACjD,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;YACvC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9H,CAAC;QACD,IAAI,GAAG,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YAC3H,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG;YAAE,SAAS,CAAC,uCAAuC;QAC3D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7E,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACjE,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;iBAChF,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACrJ,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5H,CAAC;IAED,2DAA2D;IAC3D,MAAM,OAAO,GAAG,CAAC,IAAU,EAAE,KAAgC,EAAE,EAAE,CAC/D,IAAI,GAAG,CACL,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjH,CAAC,CAAC,CACH,CAAC;IACJ,MAAM,IAAI,GAAG,CAAC,KAAwB,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACrE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,2CAA2C;YAC3C,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAClG,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;YACzB,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,OAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YACrH,kEAAkE;YAClE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7I,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;QACvC,sDAAsD;QACtD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvJ,CAAC;IAED;;;;;OAKG;IACH,MAAM,SAAS,GAAG,CAAC,IAAU,EAAE,IAAU,EAAE,EAAE,CAC3C,IAAI,CAAC,SAAS,CAAC;QACb,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;aACjB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC;aAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,KAAK;aACf,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;aACvC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;aACxF,IAAI,EAAE;KACV,CAAC,CAAC;IACL,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,CAAU,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1F,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI;gBAAE,SAAS;YACzD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpG,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzJ,IAAI,IAAI,KAAK,MAAM;oBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,uEAAuE,EAAE,CAAC,CAAC;YAClI,CAAC;iBAAM,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,kDAAkD,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,+BAA+B,EAAE,CAAC,CAAC;YAC5J,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/H,CAAC;IACH,CAAC;IAED,kHAAkH;IAClH,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAU,EAAE,CAAC;QAC/D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1F,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,gEAAgE,CAAC,CAAC;iBACrH,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG;gBAAE,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,iEAAiE,CAAC,CAAC;QACzI,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,wCAAwC,CAAC,CAAC;IACrI,CAAC;IAED;;;;OAIG;IACH,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,IAAI,GAAG,CAAC;YACjB,IAAI,EAAE,kBAAkB,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG;YACjE,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,uBAAuB,EAAE;SAClE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACzC,CAAC;AAED,uEAAuE;AACvE,SAAS,OAAO,CAAC,KAAc;IAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACtE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChJ,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAC,OAAqC,EAAE,IAAsB;IACvF,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC9E,oFAAoF;IACpF,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,YAAY,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAoC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACxE,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,WAAW;gBACd,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,gBAAgB,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3G,KAAK,aAAa;gBAChB,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,8BAA8B,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;YACzG,KAAK,aAAa;gBAChB,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,QAAQ,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;YAC3F,KAAK,cAAc;gBACjB,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,mBAAmB,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACjG,KAAK,cAAc;gBACjB,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,KAAK,iBAAiB,EAAE,CAAC,CAAC;YAClG,KAAK,aAAa;gBAChB,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,aAAa,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;YAClF;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAc,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAU,EAAE,CAAC;QACnF,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,6BAA6B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9G,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { AnySchema, GraphSnapshot, GraviewApp } from "@graview/core";
2
+ import type { z } from "zod";
3
+ import { type FieldType } from "./meta.js";
4
+ /** A zod field's type, as the studio names types. */
5
+ export declare function fieldTypeOf(type: unknown): {
6
+ readonly type: FieldType;
7
+ readonly required: boolean;
8
+ readonly options?: readonly string[];
9
+ };
10
+ /** The app's declaration as the studio's graph. */
11
+ export declare function declarationToGraph<S extends AnySchema>(app: GraviewApp<S>): GraphSnapshot;
12
+ export type { z };
13
+ //# sourceMappingURL=from-declaration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-declaration.d.ts","sourceRoot":"","sources":["../src/from-declaration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAyB,SAAS,EAAa,aAAa,EAAE,UAAU,EAAuB,MAAM,eAAe,CAAC;AACjI,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AA8B1D,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAwBzI;AAKD,mDAAmD;AACnD,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CA8JzF;AAED,YAAY,EAAE,CAAC,EAAE,CAAC"}
@@ -0,0 +1,204 @@
1
+ import { nodeRefArgs } from "@graview/core";
2
+ import { DECLARED_KIND } from "./meta.js";
3
+ const defOf = (type) => (type.def ?? type._def ?? {});
4
+ /** A zod field's type, as the studio names types. */
5
+ export function fieldTypeOf(type) {
6
+ let def = defOf(type);
7
+ let required = true;
8
+ while (def.type === "optional" || def.type === "nullable" || def.type === "default") {
9
+ required = false;
10
+ def = defOf(def.innerType);
11
+ }
12
+ switch (def.type) {
13
+ case "number":
14
+ case "int":
15
+ return { type: "number", required };
16
+ case "boolean":
17
+ return { type: "boolean", required };
18
+ case "date":
19
+ return { type: "date", required };
20
+ case "enum": {
21
+ const options = Object.values(def.entries ?? {}).map(String);
22
+ return { type: "enum", required, options };
23
+ }
24
+ case "array":
25
+ return { type: "list", required };
26
+ default:
27
+ return { type: "string", required };
28
+ }
29
+ }
30
+ const shapeOf = (fields) => (fields.shape ?? {});
31
+ /** The app's declaration as the studio's graph. */
32
+ export function declarationToGraph(app) {
33
+ const nodes = [];
34
+ const edges = [];
35
+ const kinds = app.schema.definitions;
36
+ const kindId = (kind) => `${DECLARED_KIND}${kind}`;
37
+ const edgeIds = new Map();
38
+ for (const def of kinds) {
39
+ nodes.push({
40
+ id: kindId(def.kind),
41
+ kind: "kind",
42
+ label: def.kind,
43
+ ...(def.plural ? { plural: def.plural } : {}),
44
+ ...(def.noun ? { noun: def.noun } : {}),
45
+ ...(def.description ? { description: def.description } : {}),
46
+ ...(def.lifecycle ? { lifecycleField: def.lifecycle.field, retired: def.lifecycle.retired === "date" ? ["date"] : def.lifecycle.retired.map(String) } : {}),
47
+ ...(def.figure ? { figure: def.figure } : {}),
48
+ });
49
+ for (const [name, type] of Object.entries(shapeOf(def.fields))) {
50
+ const id = `field:${def.kind}.${name}`;
51
+ const typed = fieldTypeOf(type);
52
+ nodes.push({
53
+ id,
54
+ kind: "field",
55
+ label: name,
56
+ type: typed.type,
57
+ required: typed.required,
58
+ ...(typed.options ? { options: [...typed.options] } : {}),
59
+ ...(def.display?.labels?.[name] ? { description: def.display.labels[name] } : {}),
60
+ });
61
+ edges.push({ kind: "of", from: id, to: kindId(def.kind) });
62
+ }
63
+ for (const [name, edge] of Object.entries(def.edges)) {
64
+ const id = `edge:${def.kind}.${name}`;
65
+ edgeIds.set(name, id);
66
+ nodes.push({
67
+ id,
68
+ kind: "edge",
69
+ label: name,
70
+ cardinality: edge.cardinality ?? "many",
71
+ appendOnly: edge.appendOnly ?? false,
72
+ toAny: edge.to === "*",
73
+ ...(edge.description ? { description: edge.description } : {}),
74
+ ...(edge.inverse ? { inverse: edge.inverse } : {}),
75
+ });
76
+ edges.push({ kind: "from-kind", from: id, to: kindId(def.kind) });
77
+ if (edge.to !== "*")
78
+ for (const target of edge.to)
79
+ edges.push({ kind: "to-kind", from: id, to: kindId(target) });
80
+ }
81
+ }
82
+ const actId = (name) => `act:${name}`;
83
+ /** The checkout's own name for the far end of a tie: the node argument that is not the subject. */
84
+ const targetArgOf = (mutation) => {
85
+ if (!(mutation.connects?.length || mutation.severs?.length))
86
+ return undefined;
87
+ const refs = nodeRefArgs(mutation.input);
88
+ return refs.find((ref) => ref.name !== mutation.subject?.arg)?.name;
89
+ };
90
+ for (const mutation of (app.mutations ?? [])) {
91
+ const id = actId(mutation.name);
92
+ nodes.push({
93
+ id,
94
+ kind: "act",
95
+ label: mutation.name,
96
+ destructive: mutation.destructive ?? false,
97
+ onAny: mutation.subject?.kinds === "*",
98
+ derived: mutation.derived !== undefined,
99
+ ...(mutation.title ? { title: mutation.title } : {}),
100
+ ...(mutation.fromTheOtherEnd ? { fromTheOtherEnd: mutation.fromTheOtherEnd } : {}),
101
+ ...(mutation.description ? { description: mutation.description } : {}),
102
+ ...(mutation.writes ? { writes: [...mutation.writes] } : {}),
103
+ ...(mutation.subject ? { subjectArg: mutation.subject.arg } : {}),
104
+ ...(targetArgOf(mutation) ? { targetArg: targetArgOf(mutation) } : {}),
105
+ });
106
+ if (mutation.subject && mutation.subject.kinds !== "*")
107
+ for (const kind of mutation.subject.kinds)
108
+ edges.push({ kind: "on", from: id, to: kindId(kind) });
109
+ for (const kind of mutation.creates ?? [])
110
+ edges.push({ kind: "creates", from: id, to: kindId(kind) });
111
+ for (const name of mutation.connects ?? []) {
112
+ const target = edgeIds.get(name);
113
+ if (target)
114
+ edges.push({ kind: "connects", from: id, to: target });
115
+ }
116
+ for (const name of mutation.severs ?? []) {
117
+ const target = edgeIds.get(name);
118
+ if (target)
119
+ edges.push({ kind: "severs", from: id, to: target });
120
+ }
121
+ }
122
+ const declaredActs = new Set((app.mutations ?? []).map((mutation) => mutation.name));
123
+ for (const rule of (app.invariants ?? [])) {
124
+ const id = `rule:${rule.name}`;
125
+ const derivedRepairs = (rule.repairs ?? []).filter((name) => !declaredActs.has(name));
126
+ nodes.push({
127
+ id,
128
+ kind: "rule",
129
+ label: rule.name,
130
+ judgesPast: rule.judgesPast ?? false,
131
+ wholeGraph: rule.scope === "graph",
132
+ ...(rule.label ? { title: rule.label } : {}),
133
+ ...(rule.description ?? rule.label ? { description: rule.description ?? rule.label } : {}),
134
+ ...(derivedRepairs.length > 0 ? { derivedRepairs } : {}),
135
+ });
136
+ if (rule.scope !== "graph")
137
+ edges.push({ kind: "over", from: id, to: kindId(rule.scope.kind) });
138
+ for (const name of rule.repairs ?? [])
139
+ if (declaredActs.has(name))
140
+ edges.push({ kind: "repairs", from: id, to: actId(name) });
141
+ }
142
+ const roleId = (role) => `role:${role}`;
143
+ /*
144
+ * SEATS ONLY. A lens's `requiredRoles` are binding SLOTS it asks the app
145
+ * to answer — `start`, `rows`, `link` — and reading them in here put them
146
+ * in the ROLES district beside "coordinator" and wrote them back into the
147
+ * policy as roles a person could be granted. They belong to the lens.
148
+ */
149
+ const roles = new Set(app.policy?.roles ?? []);
150
+ for (const g of app.policy?.grants ?? [])
151
+ if (g.roles !== "*")
152
+ for (const role of g.roles)
153
+ roles.add(role);
154
+ for (const role of roles)
155
+ nodes.push({ id: roleId(role), kind: "role", label: role });
156
+ (app.policy?.grants ?? []).forEach((g, index) => {
157
+ const id = `grant:${index + 1}`;
158
+ const who = g.roles === "*" ? "everyone" : g.roles.join(", ");
159
+ const what = g.mutations === "*" ? "do anything" : g.mutations.join(", ");
160
+ nodes.push({
161
+ id,
162
+ kind: "grant",
163
+ label: g.describe ?? `${who} may ${what}`,
164
+ self: g.self ?? false,
165
+ everyone: g.roles === "*",
166
+ allActs: g.mutations === "*",
167
+ allKinds: g.kinds === undefined || g.kinds === "*",
168
+ ...(g.describe ? { describe: g.describe } : {}),
169
+ });
170
+ if (g.roles !== "*")
171
+ for (const role of g.roles)
172
+ edges.push({ kind: "lets", from: id, to: roleId(role) });
173
+ if (g.mutations !== "*")
174
+ for (const name of g.mutations)
175
+ edges.push({ kind: "may", from: id, to: actId(name) });
176
+ if (g.kinds && g.kinds !== "*")
177
+ for (const kind of g.kinds)
178
+ edges.push({ kind: "allows-on", from: id, to: kindId(kind) });
179
+ });
180
+ for (const lens of app.lenses ?? []) {
181
+ const id = `lens:${lens.name}`;
182
+ nodes.push({
183
+ id,
184
+ kind: "lens",
185
+ label: lens.name,
186
+ ...(lens.binds ? { binds: lens.binds } : {}),
187
+ ...(lens.requiredRoles.length > 0 ? { requires: [...lens.requiredRoles] } : {}),
188
+ });
189
+ }
190
+ if (app.brand) {
191
+ nodes.push({
192
+ id: "brand",
193
+ kind: "brand",
194
+ label: app.brand.name,
195
+ ...(app.brand.typography?.body ? { body: app.brand.typography.body } : {}),
196
+ ...(app.brand.typography?.display ? { display: app.brand.typography.display } : {}),
197
+ });
198
+ }
199
+ // Only edges whose both ends exist: an act that connects an edge the schema
200
+ // does not declare is the checker's to report, not a dangling line here.
201
+ const ids = new Set(nodes.map((node) => node.id));
202
+ return { nodes, edges: edges.filter((edge) => ids.has(edge.from) && ids.has(edge.to)) };
203
+ }
204
+ //# sourceMappingURL=from-declaration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-declaration.js","sourceRoot":"","sources":["../src/from-declaration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { AnySchema } from "@graview/core";
2
+ import { type ReactNode } from "react";
3
+ import type { WrittenFile } from "./source.js";
4
+ import type { Studio } from "./studio.js";
5
+ /**
6
+ * THE CHANGE, WRITTEN INTO THE CHECKOUT — and the code it leaves wrong,
7
+ * rewritten first.
8
+ *
9
+ * A change to the declaration is only half of a change to the app: the act
10
+ * that ties a gardener to a plot is code, and moving the tie to plantings
11
+ * leaves that code tying gardeners to plots. The checker cannot see it and
12
+ * the compiler will not mind. So before anything is written, every act and
13
+ * rule the change touches is put in front of the person — as it is written,
14
+ * editable here, with the seat one press away for a first draft — and the
15
+ * change is written only once each has been rewritten or said to still
16
+ * hold. Then the door compiles the result before a byte lands.
17
+ */
18
+ export declare function InPlaceWriter({ studio, migration, files, }: {
19
+ readonly studio: Studio<AnySchema>;
20
+ readonly migration: string | null;
21
+ readonly files: readonly WrittenFile[];
22
+ }): ReactNode;
23
+ /** The files, as downloads: what the studio hands over when it cannot write in place. */
24
+ export declare function Downloads({ files }: {
25
+ readonly files: readonly WrittenFile[];
26
+ }): ReactNode;
27
+ //# sourceMappingURL=in-place.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-place.d.ts","sourceRoot":"","sources":["../src/in-place.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAuC,MAAM,eAAe,CAAC;AAGpF,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,SAAS,EACT,KAAK,GACN,EAAE;IACD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;CACxC,GAAG,SAAS,CA+MZ;AAED,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAA;CAAE,GAAG,SAAS,CA0B1F"}