@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 @@
1
+ {"version":3,"file":"studio.d.ts","sourceRoot":"","sources":["../src/studio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,EAAE,KAAK,SAAS,EAAE,KAAK,KAAK,EAAE,KAAK,WAAW,EAAsB,KAAK,UAAU,EAAE,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAGjM,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAoB,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAarF,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IACrD,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACpC,oCAAoC;IACpC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7B,gEAAgE;IAChE,WAAW,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;IACrC,wEAAwE;IACxE,KAAK,IAAI,WAAW,CAAC;IACrB,0FAA0F;IAC1F,OAAO,IAAI,SAAS,KAAK,EAAE,CAAC;IAC5B,gEAAgE;IAChE,SAAS,IAAI,SAAS,KAAK,EAAE,CAAC;IAC9B,uHAAuH;IACvH,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChK,4BAA4B;IAC5B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC;;;;;;;;;OASG;IACH,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG;QAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;KAAE,GAAG;QAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1J,oHAAoH;IACpH,KAAK,IAAI;QAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI,CAAA;KAAE,GAAG;QAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;KAAE,CAAC;IAC3K,4DAA4D;IAC5D,KAAK,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,WAAW,EAAE,CAAC;IACvD,mIAAmI;IACnI,aAAa,IAAI,aAAa,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAAC,CAAC,CAAC,CAqF7G"}
package/dist/studio.js ADDED
@@ -0,0 +1,96 @@
1
+ import { checkApp, Store } from "@graview/core";
2
+ import { resolveProposal } from "@graview/tools";
3
+ import { declarationToGraph } from "./from-declaration.js";
4
+ import { sourceChanges } from "./changes.js";
5
+ import { migrationBetween } from "./migration.js";
6
+ import { studioApp } from "./meta.js";
7
+ import { declarationFiles } from "./source.js";
8
+ import { graphToDeclaration } from "./to-declaration.js";
9
+ export function createStudio(base, options = {}) {
10
+ const app = studioApp(options.name ?? `${base.name} studio`);
11
+ const seed = declarationToGraph(base);
12
+ const store = new Store({
13
+ schema: app.schema,
14
+ mutations: app.mutations ?? [],
15
+ invariants: app.invariants ?? [],
16
+ snapshot: seed,
17
+ ...(options.principal ? { principal: options.principal } : {}),
18
+ });
19
+ const opened = store.batches().length;
20
+ const declaration = () => graphToDeclaration(store.snapshot(), { base: base, name: base.name });
21
+ const isAgent = (batch) => batch.author.kind === "agent";
22
+ let proposed = 0;
23
+ return {
24
+ store,
25
+ base,
26
+ declaration,
27
+ check: () => checkApp(declaration()),
28
+ changes: () => store.batches().slice(opened),
29
+ proposals: () => store.batches().slice(opened).filter((batch) => isAgent(batch) && !batch.undone),
30
+ propose(call, agent, intent) {
31
+ const batch = `proposal:${++proposed}`;
32
+ try {
33
+ store.apply(call, { author: agent, batch, intent: intent ?? `Proposed: ${call.name}` });
34
+ return { ok: true, batch };
35
+ }
36
+ catch (error) {
37
+ return { ok: false, reason: error instanceof Error ? error.message : String(error) };
38
+ }
39
+ },
40
+ decline(batch) {
41
+ if (!store.canUndo(batch).ok)
42
+ return false;
43
+ store.undo(batch);
44
+ return true;
45
+ },
46
+ would(call) {
47
+ const trial = new Store({
48
+ schema: app.schema,
49
+ mutations: app.mutations ?? [],
50
+ invariants: app.invariants ?? [],
51
+ snapshot: store.snapshot(),
52
+ ...(options.principal ? { principal: options.principal } : {}),
53
+ });
54
+ /*
55
+ * SEVERAL CALLS ARE JUDGED AS WHAT THEY MAKE TOGETHER. "Remove the
56
+ * edge from the plot, add it to the planting" breaks the build after
57
+ * its first half and is whole after its second — so a set is applied
58
+ * to the copy in order and only the end is checked.
59
+ */
60
+ try {
61
+ for (const one of Array.isArray(call) ? call : [call]) {
62
+ // A name that means a node made earlier in the set is read once that node exists.
63
+ const resolved = resolveProposal(trial, { mutation: one.name, args: one.args });
64
+ trial.apply({ name: one.name, args: { ...resolved.args } }, { intent: `Would: ${one.name}` });
65
+ }
66
+ }
67
+ catch (error) {
68
+ return { ok: false, reason: error instanceof Error ? error.message : String(error) };
69
+ }
70
+ return {
71
+ ok: true,
72
+ check: checkApp(graphToDeclaration(trial.snapshot(), { base: base, name: base.name })),
73
+ };
74
+ },
75
+ apply() {
76
+ const next = declaration();
77
+ const check = checkApp(next);
78
+ if (check.errors > 0)
79
+ return { ok: false, check };
80
+ const migration = migrationBetween(base, store.snapshot());
81
+ const version = migration ? migration.to : base.version;
82
+ return {
83
+ ok: true,
84
+ app: {
85
+ ...next,
86
+ ...(version !== undefined ? { version } : {}),
87
+ ...(migration ? { migrations: [...(base.migrations ?? []), migration] } : {}),
88
+ },
89
+ migration,
90
+ };
91
+ },
92
+ files: (sourceOptions) => declarationFiles(store.snapshot(), { name: base.name, base: base, ...sourceOptions }),
93
+ sourceChanges: () => sourceChanges(seed, store.snapshot(), base),
94
+ };
95
+ }
96
+ //# sourceMappingURL=studio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio.js","sourceRoot":"","sources":["../src/studio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type AnySchema, type GraphEdge, type GraphSnapshot, type GraviewApp } from "@graview/core";
2
+ import { z } from "zod";
3
+ import { type FieldType } from "./meta.js";
4
+ type Node = {
5
+ readonly id: string;
6
+ readonly kind: string;
7
+ } & Record<string, unknown>;
8
+ export interface Reading {
9
+ readonly nodes: readonly Node[];
10
+ readonly edges: readonly GraphEdge[];
11
+ }
12
+ /** The zod type a studio field declares. */
13
+ export declare function zodFor(type: FieldType, required: boolean, options?: readonly string[]): z.ZodType;
14
+ /** A value a required field can start with, when an act creates a record without asking. */
15
+ export declare function defaultFor(type: FieldType, options?: readonly string[]): unknown;
16
+ export interface DeclarationOptions<S extends AnySchema = AnySchema> {
17
+ /** The checkout's app: bodies for acts and rules the studio only names. */
18
+ readonly base?: GraviewApp<S>;
19
+ readonly name?: string;
20
+ }
21
+ /** The studio's graph as a checkable, runnable app. */
22
+ export declare function graphToDeclaration(snapshot: GraphSnapshot | Reading, options?: DeclarationOptions): GraviewApp<AnySchema>;
23
+ export {};
24
+ //# sourceMappingURL=to-declaration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-declaration.d.ts","sourceRoot":"","sources":["../src/to-declaration.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EAGd,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,UAAU,EAIhB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAc1D,KAAK,IAAI,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAErF,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;CACtC;AA4BD,4CAA4C;AAC5C,wBAAgB,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAcjG;AAED,4FAA4F;AAC5F,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAehF;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IACjE,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAsED,uDAAuD;AACvD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,EAAE,OAAO,GAAE,kBAAuB,GAAG,UAAU,CAAC,SAAS,CAAC,CAgO7H"}
@@ -0,0 +1,439 @@
1
+ import { createSchema, defineInvariant, defineNode, nodeRef, nodeRefArgs, } from "@graview/core";
2
+ import { z } from "zod";
3
+ import { DECLARED_KIND } from "./meta.js";
4
+ import { fieldTypeOf } from "./from-declaration.js";
5
+ class Read {
6
+ snapshot;
7
+ byId = new Map();
8
+ constructor(snapshot) {
9
+ this.snapshot = snapshot;
10
+ for (const node of snapshot.nodes)
11
+ this.byId.set(node.id, node);
12
+ }
13
+ ofKind(kind) {
14
+ return this.snapshot.nodes.filter((node) => node.kind === kind);
15
+ }
16
+ node(id) {
17
+ return this.byId.get(id);
18
+ }
19
+ /** Targets of `kind` edges leaving `from`. */
20
+ out(from, kind) {
21
+ return this.snapshot.edges.filter((edge) => edge.from === from && edge.kind === kind).map((edge) => this.byId.get(edge.to)).filter((node) => node !== undefined);
22
+ }
23
+ /** Sources of `kind` edges arriving at `to`. */
24
+ in(to, kind) {
25
+ return this.snapshot.edges.filter((edge) => edge.to === to && edge.kind === kind).map((edge) => this.byId.get(edge.from)).filter((node) => node !== undefined);
26
+ }
27
+ }
28
+ const str = (node, key) => (typeof node[key] === "string" ? node[key] : undefined);
29
+ const bool = (node, key) => node[key] === true;
30
+ const list = (node, key) => (Array.isArray(node[key]) ? node[key].map(String) : undefined);
31
+ const name = (node) => str(node, "label") ?? node.id;
32
+ /** The zod type a studio field declares. */
33
+ export function zodFor(type, required, options) {
34
+ const base = type === "number"
35
+ ? z.number()
36
+ : type === "boolean"
37
+ ? z.boolean()
38
+ : type === "enum" && options && options.length > 0
39
+ ? z.enum(options)
40
+ : type === "list"
41
+ ? z.array(z.string())
42
+ : type === "string"
43
+ ? z.string().min(1)
44
+ : z.string();
45
+ return required ? base : base.optional();
46
+ }
47
+ /** A value a required field can start with, when an act creates a record without asking. */
48
+ export function defaultFor(type, options) {
49
+ switch (type) {
50
+ case "number":
51
+ return 0;
52
+ case "boolean":
53
+ return false;
54
+ case "enum":
55
+ return options?.[0] ?? "";
56
+ case "list":
57
+ return [];
58
+ case "date":
59
+ return new Date().toISOString().slice(0, 10);
60
+ default:
61
+ return "";
62
+ }
63
+ }
64
+ /**
65
+ * WHAT THE STUDIO DOES NOT MODEL, IT MUST NOT SILENTLY DESTROY.
66
+ *
67
+ * A kind carries decisions the studio has no act for: how a field READS
68
+ * (`display.labels`, `display.format`, `display.hide`), which fields are
69
+ * `fixed` because nothing may rewrite them, and which of them answer a
70
+ * lens's roles (`fieldRoles`). Rebuilding a kind from the graph alone threw
71
+ * all of it away — so applying the studio to Things would have turned
72
+ * "Blocked 09:00" back into `plannedAt: 540` on every task card, and
73
+ * brought back the `field-without-writer` warning on a rationale that is
74
+ * fixed on purpose. Neither is a change anyone asked for, and neither is
75
+ * visible in the studio, which makes it the worst kind of loss.
76
+ *
77
+ * Carried from the checkout's own declaration, narrowed to the fields that
78
+ * still exist — a label for a field somebody deleted is not preserved, it
79
+ * is meaningless.
80
+ */
81
+ function kept(base, kind, shape) {
82
+ const was = base?.schema?.tryDefinition?.(kind);
83
+ if (!was)
84
+ return {};
85
+ const here = (name) => name in shape;
86
+ // A name built from fields ("2027 Subaru Forester Sport") is the checkout's function, carried
87
+ // while the kind has no `label` field of its own to fall back on.
88
+ const naming = typeof was.label === "function" && !here("label") ? { label: was.label } : undefined;
89
+ const narrow = (record) => {
90
+ if (!record)
91
+ return undefined;
92
+ const left = Object.fromEntries(Object.entries(record).filter(([field]) => here(field)));
93
+ return Object.keys(left).length > 0 ? left : undefined;
94
+ };
95
+ const labels = narrow(was.display?.labels);
96
+ const format = narrow(was.display?.format);
97
+ const hide = was.display?.hide?.filter(here);
98
+ const display = labels || format || (hide && hide.length > 0)
99
+ ? {
100
+ ...(labels ? { labels } : {}),
101
+ ...(format ? { format } : {}),
102
+ ...(hide && hide.length > 0 ? { hide } : {}),
103
+ }
104
+ : undefined;
105
+ const fixed = narrow(was.fixed);
106
+ // A role names a FIELD, so it survives only while its field does.
107
+ const roles = was.fieldRoles
108
+ ? Object.fromEntries(Object.entries(was.fieldRoles).filter(([, field]) => here(String(field))))
109
+ : undefined;
110
+ return {
111
+ ...(display ? { display } : {}),
112
+ ...(fixed ? { fixed } : {}),
113
+ ...(roles && Object.keys(roles).length > 0 ? { fieldRoles: roles } : {}),
114
+ ...(naming ?? {}),
115
+ };
116
+ }
117
+ /** The studio's graph as a checkable, runnable app. */
118
+ export function graphToDeclaration(snapshot, options = {}) {
119
+ const read = new Read(snapshot);
120
+ const base = options.base;
121
+ const kindName = new Map();
122
+ for (const kind of read.ofKind("kind"))
123
+ kindName.set(kind.id, name(kind));
124
+ // A kind called something else: `declared:plot` whose name is now "bed".
125
+ // The checkout's acts still ask for a plot by name, so their references
126
+ // follow.
127
+ const renamed = new Map();
128
+ for (const [id, now] of kindName) {
129
+ const was = id.slice(DECLARED_KIND.length);
130
+ if (was !== now)
131
+ renamed.set(was, now);
132
+ }
133
+ const follow = (kind) => renamed.get(kind) ?? kind;
134
+ const edgeName = new Map();
135
+ for (const edge of read.ofKind("edge"))
136
+ edgeName.set(edge.id, name(edge));
137
+ const fieldsOf = (kind) => read.in(kind.id, "of").map((field) => ({
138
+ name: name(field),
139
+ type: (str(field, "type") ?? "string"),
140
+ required: bool(field, "required"),
141
+ options: list(field, "options"),
142
+ }));
143
+ const definitions = read.ofKind("kind").map((kind) => {
144
+ const shape = {};
145
+ /*
146
+ * THE CHECKOUT'S OWN SCHEMA for a field the graph still reads the same
147
+ * way: its bounds are not in the graph, and rebuilding from the graph
148
+ * alone dropped every one — a label's `.max(60)`, a track number's
149
+ * `.int()` — so the app the studio applied validated less than the one
150
+ * it opened on, and the checker said `label-unbounded` of every kind.
151
+ */
152
+ const baseShape = (base?.schema.tryDefinition(name(kind))?.fields?.shape ?? {});
153
+ for (const field of fieldsOf(kind)) {
154
+ const own = baseShape[field.name];
155
+ const was = own ? fieldTypeOf(own) : undefined;
156
+ const same = was !== undefined &&
157
+ was.type === field.type &&
158
+ was.required === field.required &&
159
+ (was.options ?? []).join("|") === (field.options ?? []).join("|");
160
+ shape[field.name] = same ? own : zodFor(field.type, field.required, field.options);
161
+ }
162
+ const edges = {};
163
+ for (const edge of read.in(kind.id, "from-kind")) {
164
+ const targets = read.out(edge.id, "to-kind").map((target) => kindName.get(target.id) ?? name(target));
165
+ edges[name(edge)] = {
166
+ to: bool(edge, "toAny") ? "*" : targets,
167
+ ...(str(edge, "cardinality") === "one" ? { cardinality: "one" } : {}),
168
+ ...(str(edge, "description") ? { description: str(edge, "description") } : {}),
169
+ ...(str(edge, "inverse") ? { inverse: str(edge, "inverse") } : {}),
170
+ ...(bool(edge, "appendOnly") ? { appendOnly: true } : {}),
171
+ };
172
+ }
173
+ const lifecycleField = str(kind, "lifecycleField");
174
+ const retired = list(kind, "retired");
175
+ const hasLabel = "label" in shape;
176
+ return defineNode(name(kind), {
177
+ fields: z.object(shape),
178
+ edges,
179
+ ...(str(kind, "plural") ? { plural: str(kind, "plural") } : {}),
180
+ ...(str(kind, "noun") ? { noun: str(kind, "noun") } : {}),
181
+ ...(str(kind, "description") ? { description: str(kind, "description") } : {}),
182
+ ...(hasLabel ? { label: (node) => String(node["label"] ?? node.id) } : {}),
183
+ ...(lifecycleField && retired ? { lifecycle: { field: lifecycleField, retired: retired[0] === "date" ? "date" : retired } } : {}),
184
+ ...(str(kind, "figure") ? { figure: str(kind, "figure") } : {}),
185
+ // What the studio has no act for is CARRIED, not dropped.
186
+ ...kept(base, name(kind), shape),
187
+ });
188
+ });
189
+ const schema = createSchema(definitions);
190
+ const baseMutations = new Map((base?.mutations ?? []).map((mutation) => [mutation.name, mutation]));
191
+ const mutations = [];
192
+ for (const act of read.ofKind("act")) {
193
+ if (bool(act, "derived"))
194
+ continue;
195
+ const actName = name(act);
196
+ const on = read.out(act.id, "on").map((kind) => kindName.get(kind.id) ?? name(kind));
197
+ const creates = read.out(act.id, "creates").map((kind) => kindName.get(kind.id) ?? name(kind));
198
+ const connects = read.out(act.id, "connects");
199
+ const severs = read.out(act.id, "severs");
200
+ const writes = list(act, "writes");
201
+ const subjectArg = str(act, "subjectArg") ?? "id";
202
+ const subject = bool(act, "onAny") ? { kinds: "*", arg: subjectArg } : on.length > 0 ? { kinds: on, arg: subjectArg } : undefined;
203
+ const said = {
204
+ name: actName,
205
+ ...(str(act, "title") ? { title: str(act, "title") } : {}),
206
+ ...(str(act, "fromTheOtherEnd") ? { fromTheOtherEnd: str(act, "fromTheOtherEnd") } : {}),
207
+ ...(str(act, "description") ? { description: str(act, "description") } : {}),
208
+ ...(bool(act, "destructive") ? { destructive: true } : {}),
209
+ ...(subject ? { subject } : {}),
210
+ ...(creates.length > 0 ? { creates } : {}),
211
+ ...(connects.length > 0 ? { connects: connects.map(name) } : {}),
212
+ ...(severs.length > 0 ? { severs: severs.map(name) } : {}),
213
+ ...(writes ? { writes } : {}),
214
+ };
215
+ const kept = baseMutations.get(actName);
216
+ if (kept) {
217
+ // The checkout's body, under what the studio now says about it; its
218
+ // node references follow a renamed kind.
219
+ mutations.push({ ...kept, ...said, input: renamed.size > 0 ? followingRenames(kept.input, follow) : kept.input, apply: kept.apply });
220
+ continue;
221
+ }
222
+ mutations.push(writtenBody(said, { creates, connects, severs, writes: writes ?? [], on, read, kindName, fieldsOf }));
223
+ }
224
+ const baseInvariants = new Map((base?.invariants ?? []).map((rule) => [rule.name, rule]));
225
+ const invariants = read.ofKind("rule").map((rule) => {
226
+ const ruleName = name(rule);
227
+ const repairs = [...read.out(rule.id, "repairs").map(name), ...(list(rule, "derivedRepairs") ?? [])];
228
+ const over = read.out(rule.id, "over")[0];
229
+ const kept = baseInvariants.get(ruleName);
230
+ const scope = bool(rule, "wholeGraph") || !over ? "graph" : { kind: kindName.get(over.id) ?? name(over) };
231
+ const description = str(rule, "description");
232
+ if (kept)
233
+ return { ...kept, scope, ...(description ? { description } : {}), ...(repairs.length > 0 ? { repairs } : {}) };
234
+ return defineInvariant(ruleName, {
235
+ scope,
236
+ label: ruleName,
237
+ description: description ?? `${ruleName}: declared in the studio; the checkout gives it a judgement.`,
238
+ ...(repairs.length > 0 ? { repairs } : {}),
239
+ ...(bool(rule, "judgesPast") ? { judgesPast: true } : {}),
240
+ // Declared, not yet judged: a rule with no body holds nothing wrong.
241
+ evaluate: () => [],
242
+ });
243
+ });
244
+ const roles = read.ofKind("role").map(name);
245
+ const grants = read.ofKind("grant").map((g) => {
246
+ const lets = read.out(g.id, "lets").map(name);
247
+ const may = read.out(g.id, "may").map(name);
248
+ const over = read.out(g.id, "allows-on").map((kind) => kindName.get(kind.id) ?? name(kind));
249
+ return {
250
+ roles: bool(g, "everyone") ? "*" : lets,
251
+ mutations: bool(g, "allActs") ? "*" : may,
252
+ ...(bool(g, "allKinds") ? {} : { kinds: over }),
253
+ ...(str(g, "describe") ? { describe: str(g, "describe") } : {}),
254
+ ...(bool(g, "self") ? { self: true } : {}),
255
+ };
256
+ });
257
+ const policy = roles.length > 0 || grants.length > 0 ? { grants, ...(roles.length > 0 ? { roles } : {}) } : undefined;
258
+ /*
259
+ * A LENS'S BINDINGS FOLLOW THE KINDS THEY NAME — and let go of the ones
260
+ * that are gone.
261
+ *
262
+ * The bindings are carried from the checkout, because the studio has no
263
+ * act that writes one. Carried VERBATIM, renaming `plot` to `bed` left the
264
+ * coverage grid bound to a kind that no longer exists, and `graview check`
265
+ * refused to apply the rename with an error about a lens nobody had
266
+ * touched. Removing a kind left the same wreckage.
267
+ *
268
+ * So renames are followed, the same way an act's subject follows one; and
269
+ * a lens that named something now deleted is dropped whole rather than
270
+ * half-bound, on the principle this file already keeps for display labels
271
+ * — what refers to something that is gone is not preserved, it is
272
+ * meaningless.
273
+ */
274
+ const liveKinds = new Set(kindName.values());
275
+ const liveEdges = new Set(edgeName.values());
276
+ const followBindings = (bindings, binds) => {
277
+ if (!bindings)
278
+ return { ok: true };
279
+ if (binds === "entities") {
280
+ const out = {};
281
+ for (const [role, bound] of Object.entries(bindings)) {
282
+ const kind = typeof bound?.["kind"] === "string" ? follow(bound["kind"]) : undefined;
283
+ const edge = typeof bound?.["edge"] === "string" ? bound["edge"] : undefined;
284
+ if (kind !== undefined && !liveKinds.has(kind))
285
+ return { ok: false };
286
+ if (edge !== undefined && !liveEdges.has(edge))
287
+ return { ok: false };
288
+ out[role] = kind !== undefined ? { ...bound, kind } : bound;
289
+ }
290
+ return { ok: true, bindings: out };
291
+ }
292
+ // A `fields` lens is keyed BY KIND, so a rename rekeys it.
293
+ const out = {};
294
+ for (const [kind, roles] of Object.entries(bindings)) {
295
+ const now = follow(kind);
296
+ if (!liveKinds.has(now))
297
+ return { ok: false };
298
+ out[now] = roles;
299
+ }
300
+ return { ok: true, bindings: out };
301
+ };
302
+ const baseLenses = new Map((base?.lenses ?? []).map((lens) => [lens.name, lens]));
303
+ const lenses = read.ofKind("lens").flatMap((lens) => {
304
+ const kept = baseLenses.get(name(lens));
305
+ const requiredRoles = list(lens, "requires") ?? [];
306
+ const binds = str(lens, "binds") ?? kept?.binds ?? "fields";
307
+ const followed = followBindings(kept?.bindings, binds);
308
+ if (!followed.ok)
309
+ return [];
310
+ return [
311
+ {
312
+ ...(kept ?? {}),
313
+ name: name(lens),
314
+ requiredRoles,
315
+ ...(str(lens, "binds") ? { binds: str(lens, "binds") } : {}),
316
+ ...(followed.bindings ? { bindings: followed.bindings } : {}),
317
+ },
318
+ ];
319
+ });
320
+ const brandNode = read.ofKind("brand")[0];
321
+ const brand = base?.brand
322
+ ? { ...base.brand, ...(brandNode ? { name: name(brandNode) } : {}) }
323
+ : undefined;
324
+ return {
325
+ name: options.name ?? base?.name ?? "Declared in the studio",
326
+ schema,
327
+ mutations,
328
+ invariants,
329
+ ...(policy ? { policy } : {}),
330
+ ...(lenses.length > 0 ? { lenses } : {}),
331
+ ...(brand ? { brand } : {}),
332
+ ...(base?.modules ? { modules: base.modules } : {}),
333
+ ...(base?.intelligence ? { intelligence: base.intelligence } : {}),
334
+ ...(base?.version !== undefined ? { version: base.version } : {}),
335
+ ...(base?.migrations ? { migrations: base.migrations } : {}),
336
+ };
337
+ }
338
+ /** The same input, with every node reference to a renamed kind pointing at its new name. */
339
+ function followingRenames(input, follow) {
340
+ const shape = input.shape;
341
+ if (!shape)
342
+ return input;
343
+ const refs = new Map(nodeRefArgs(input).map((ref) => [ref.name, ref]));
344
+ const next = {};
345
+ for (const [key, type] of Object.entries(shape)) {
346
+ const ref = refs.get(key);
347
+ if (!ref || ref.kinds.length === 0) {
348
+ next[key] = type;
349
+ continue;
350
+ }
351
+ const kinds = ref.kinds.map(follow);
352
+ const ofKind = nodeRef(kinds);
353
+ next[key] = ref.optional ? ofKind.optional() : ofKind;
354
+ }
355
+ return z.object(next);
356
+ }
357
+ /**
358
+ * A body written from what the act says. Create: a record of the kind with
359
+ * its required fields started; connect or sever: the edge between the
360
+ * subject and a named far end; write: the named fields patched from the
361
+ * arguments. Nothing else is guessed — an act that says none of these is
362
+ * declared with a body that does nothing, and the interface withholds it
363
+ * as an act that would change nothing.
364
+ */
365
+ function writtenBody(said, ctx) {
366
+ const subjectKinds = ctx.on.length > 0 ? ctx.on : "*";
367
+ const arg = said.subject?.arg ?? "id";
368
+ if (ctx.creates.length > 0) {
369
+ const kind = ctx.creates[0];
370
+ const kindNode = ctx.read.ofKind("kind").find((node) => (ctx.kindName.get(node.id) ?? "") === kind);
371
+ const fields = kindNode ? ctx.fieldsOf(kindNode) : [];
372
+ const shape = { label: z.string().min(1) };
373
+ for (const field of fields)
374
+ if (field.name !== "label" && field.required && field.type !== "list")
375
+ shape[field.name] = zodFor(field.type, false, field.options);
376
+ return {
377
+ ...said,
378
+ input: z.object(shape),
379
+ describe: (args) => `${said.title ?? said.name}: ${String(args["label"] ?? "")}`,
380
+ apply(context, args) {
381
+ const started = {};
382
+ for (const field of fields) {
383
+ if (field.name === "label")
384
+ continue;
385
+ if (args[field.name] !== undefined)
386
+ started[field.name] = args[field.name];
387
+ else if (field.required)
388
+ started[field.name] = defaultFor(field.type, field.options);
389
+ }
390
+ context.addNode({ id: context.freshId(String(args["label"]), kind), kind, label: args["label"], ...started });
391
+ },
392
+ };
393
+ }
394
+ const edgeToTouch = ctx.connects[0] ?? ctx.severs[0];
395
+ if (edgeToTouch) {
396
+ const edgeKind = name(edgeToTouch);
397
+ const targets = ctx.read.out(edgeToTouch.id, "to-kind").map((kind) => ctx.kindName.get(kind.id) ?? name(kind));
398
+ const making = ctx.connects.length > 0;
399
+ return {
400
+ ...said,
401
+ input: z.object({ [arg]: nodeRef(subjectKinds === "*" ? "*" : subjectKinds), to: nodeRef(targets.length > 0 ? targets : "*") }),
402
+ describe: (args) => `${said.title ?? said.name}: ${String(args[arg])} ${making ? "→" : "⇸"} ${String(args["to"])}`,
403
+ apply(context, args) {
404
+ const edge = { kind: edgeKind, from: String(args[arg]), to: String(args["to"]) };
405
+ if (making)
406
+ context.addEdge(edge);
407
+ else
408
+ context.removeEdge(edge);
409
+ },
410
+ };
411
+ }
412
+ const shape = { [arg]: nodeRef(subjectKinds === "*" ? "*" : subjectKinds) };
413
+ // A written field is asked for in its own type: the kind's declaration says what a size is.
414
+ const declared = new Map();
415
+ for (const kindNode of ctx.read.ofKind("kind")) {
416
+ if (!ctx.on.includes(ctx.kindName.get(kindNode.id) ?? ""))
417
+ continue;
418
+ for (const field of ctx.fieldsOf(kindNode))
419
+ declared.set(field.name, { type: field.type, options: field.options });
420
+ }
421
+ for (const field of ctx.writes) {
422
+ const known = declared.get(field);
423
+ shape[field] = known ? zodFor(known.type, false, known.options) : z.string().optional();
424
+ }
425
+ return {
426
+ ...said,
427
+ input: z.object(shape),
428
+ describe: (args) => `${said.title ?? said.name}: ${String(args[arg])}`,
429
+ apply(context, args) {
430
+ const patch = {};
431
+ for (const field of ctx.writes)
432
+ if (args[field] !== undefined)
433
+ patch[field] = args[field];
434
+ if (Object.keys(patch).length > 0)
435
+ context.patchNode(String(args[arg]), patch);
436
+ },
437
+ };
438
+ }
439
+ //# sourceMappingURL=to-declaration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-declaration.js","sourceRoot":"","sources":["../src/to-declaration.ts"],"names":[],"mappings":"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"}