@graview/core 0.1.9 → 0.1.10

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 (130) hide show
  1. package/dist/app.d.ts +41 -2
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js.map +1 -1
  4. package/dist/capabilities.js +1 -1
  5. package/dist/capabilities.js.map +1 -1
  6. package/dist/cli/check/arrangement.d.ts.map +1 -1
  7. package/dist/cli/check/arrangement.js +3 -2
  8. package/dist/cli/check/arrangement.js.map +1 -1
  9. package/dist/cli/check/computed.d.ts +14 -0
  10. package/dist/cli/check/computed.d.ts.map +1 -0
  11. package/dist/cli/check/computed.js +34 -0
  12. package/dist/cli/check/computed.js.map +1 -0
  13. package/dist/cli/check/index.d.ts +1 -0
  14. package/dist/cli/check/index.d.ts.map +1 -1
  15. package/dist/cli/check/index.js +1 -0
  16. package/dist/cli/check/index.js.map +1 -1
  17. package/dist/cli/check/lenses.d.ts +10 -0
  18. package/dist/cli/check/lenses.d.ts.map +1 -1
  19. package/dist/cli/check/lenses.js +37 -19
  20. package/dist/cli/check/lenses.js.map +1 -1
  21. package/dist/cli/check/relations.d.ts.map +1 -1
  22. package/dist/cli/check/relations.js +2 -1
  23. package/dist/cli/check/relations.js.map +1 -1
  24. package/dist/cli/check/views.d.ts.map +1 -1
  25. package/dist/cli/check/views.js +8 -2
  26. package/dist/cli/check/views.js.map +1 -1
  27. package/dist/cli/check.d.ts.map +1 -1
  28. package/dist/cli/check.js +4 -1
  29. package/dist/cli/check.js.map +1 -1
  30. package/dist/cli/describe.d.ts.map +1 -1
  31. package/dist/cli/describe.js +54 -1
  32. package/dist/cli/describe.js.map +1 -1
  33. package/dist/cli/index.d.ts +1 -1
  34. package/dist/cli/index.d.ts.map +1 -1
  35. package/dist/cli/index.js +21 -1
  36. package/dist/cli/index.js.map +1 -1
  37. package/dist/describe.d.ts +3 -0
  38. package/dist/describe.d.ts.map +1 -0
  39. package/dist/describe.js +12 -0
  40. package/dist/describe.js.map +1 -0
  41. package/dist/document/blocks.d.ts +182 -0
  42. package/dist/document/blocks.d.ts.map +1 -0
  43. package/dist/document/blocks.js +382 -0
  44. package/dist/document/blocks.js.map +1 -0
  45. package/dist/document/compile.d.ts.map +1 -1
  46. package/dist/document/compile.js +57 -15
  47. package/dist/document/compile.js.map +1 -1
  48. package/dist/document/computed-values.d.ts +33 -0
  49. package/dist/document/computed-values.d.ts.map +1 -0
  50. package/dist/document/computed-values.js +60 -0
  51. package/dist/document/computed-values.js.map +1 -0
  52. package/dist/document/computed.d.ts +42 -0
  53. package/dist/document/computed.d.ts.map +1 -0
  54. package/dist/document/computed.js +173 -0
  55. package/dist/document/computed.js.map +1 -0
  56. package/dist/document/describe-place.d.ts +95 -0
  57. package/dist/document/describe-place.d.ts.map +1 -0
  58. package/dist/document/describe-place.js +257 -0
  59. package/dist/document/describe-place.js.map +1 -0
  60. package/dist/document/diff.d.ts.map +1 -1
  61. package/dist/document/diff.js +72 -3
  62. package/dist/document/diff.js.map +1 -1
  63. package/dist/document/edit.d.ts +1 -1
  64. package/dist/document/edit.d.ts.map +1 -1
  65. package/dist/document/edit.js +816 -103
  66. package/dist/document/edit.js.map +1 -1
  67. package/dist/document/expr/analyze.d.ts +22 -0
  68. package/dist/document/expr/analyze.d.ts.map +1 -1
  69. package/dist/document/expr/analyze.js +49 -3
  70. package/dist/document/expr/analyze.js.map +1 -1
  71. package/dist/document/expr/evaluate.d.ts +7 -1
  72. package/dist/document/expr/evaluate.d.ts.map +1 -1
  73. package/dist/document/expr/evaluate.js +95 -6
  74. package/dist/document/expr/evaluate.js.map +1 -1
  75. package/dist/document/expr/index.d.ts +1 -1
  76. package/dist/document/expr/index.d.ts.map +1 -1
  77. package/dist/document/expr/index.js +1 -1
  78. package/dist/document/expr/index.js.map +1 -1
  79. package/dist/document/index.d.ts +8 -2
  80. package/dist/document/index.d.ts.map +1 -1
  81. package/dist/document/index.js +4 -1
  82. package/dist/document/index.js.map +1 -1
  83. package/dist/document/rules.d.ts +2 -1
  84. package/dist/document/rules.d.ts.map +1 -1
  85. package/dist/document/rules.js +5 -1
  86. package/dist/document/rules.js.map +1 -1
  87. package/dist/document/schema.d.ts +35 -3
  88. package/dist/document/schema.d.ts.map +1 -1
  89. package/dist/document/schema.js +22 -2
  90. package/dist/document/schema.js.map +1 -1
  91. package/dist/document/template.d.ts +17 -2
  92. package/dist/document/template.d.ts.map +1 -1
  93. package/dist/document/template.js +136 -16
  94. package/dist/document/template.js.map +1 -1
  95. package/dist/document/to-document.d.ts.map +1 -1
  96. package/dist/document/to-document.js +4 -1
  97. package/dist/document/to-document.js.map +1 -1
  98. package/dist/document/views.d.ts +47 -3
  99. package/dist/document/views.d.ts.map +1 -1
  100. package/dist/document/views.js +289 -21
  101. package/dist/document/views.js.map +1 -1
  102. package/dist/index.d.ts +3 -1
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +2 -0
  105. package/dist/index.js.map +1 -1
  106. package/dist/places.d.ts +186 -0
  107. package/dist/places.d.ts.map +1 -0
  108. package/dist/places.js +358 -0
  109. package/dist/places.js.map +1 -0
  110. package/dist/scaffold/project.d.ts.map +1 -1
  111. package/dist/scaffold/project.js +9 -0
  112. package/dist/scaffold/project.js.map +1 -1
  113. package/dist/scaffold/ui.d.ts.map +1 -1
  114. package/dist/scaffold/ui.js +13 -10
  115. package/dist/scaffold/ui.js.map +1 -1
  116. package/dist/schema/define-node.d.ts +3 -0
  117. package/dist/schema/define-node.d.ts.map +1 -1
  118. package/dist/schema/define-node.js +3 -1
  119. package/dist/schema/define-node.js.map +1 -1
  120. package/dist/schema/types.d.ts +17 -0
  121. package/dist/schema/types.d.ts.map +1 -1
  122. package/dist/version.d.ts +1 -1
  123. package/dist/version.d.ts.map +1 -1
  124. package/dist/version.js +1 -1
  125. package/dist/version.js.map +1 -1
  126. package/dist/views/types.d.ts +19 -0
  127. package/dist/views/types.d.ts.map +1 -1
  128. package/dist/views/types.js +14 -0
  129. package/dist/views/types.js.map +1 -1
  130. package/package.json +5 -1
@@ -0,0 +1,186 @@
1
+ import type { GraviewApp, LensDeclaration } from "./app.js";
2
+ import type { AnySchema } from "./schema/schema.js";
3
+ import { type Place } from "./views/types.js";
4
+ /**
5
+ * THE LENSES THIS FRAMEWORK SHIPS, AND WHAT EACH ONE TAKES AS DATA (FR-79).
6
+ *
7
+ * One table, read by everything that has to agree about a declared lens:
8
+ * `graview check` (what it holds a declaration to), `graview describe`
9
+ * (what it says is drawn), `placesOf` (what a host lists) and the
10
+ * primitives that draw it (which factory, with which options). A lens is a
11
+ * place because this says it can be one, and the four of them cannot
12
+ * disagree because none of them has a list of its own.
13
+ *
14
+ * `options` is what a declaration may hand the factory beyond its roles —
15
+ * data only. What a factory needs that cannot be data (a timeline's
16
+ * `format`, a calendar's `today`) is derived where it is drawn.
17
+ */
18
+ export declare const SHIPPED_LENSES: {
19
+ readonly timeline: {
20
+ readonly binds: "fields";
21
+ readonly requiredRoles: readonly ["start", "end"];
22
+ readonly options: readonly ["columns", "extent", "tick", "minWindow", "arranging"];
23
+ };
24
+ readonly calendar: {
25
+ readonly binds: "fields";
26
+ readonly requiredRoles: readonly ["start"];
27
+ readonly options: readonly ["today", "range", "weekStartsOn", "perCell", "horizon", "arranging"];
28
+ };
29
+ readonly coverage: {
30
+ readonly binds: "entities";
31
+ readonly requiredRoles: readonly ["rows", "columns", "link"];
32
+ readonly options: readonly ["rowRef", "rowGroup", "groupOrder", "requiredGroups", "requiredVia", "badge", "columnGroup"];
33
+ };
34
+ readonly board: {
35
+ readonly binds: "entities";
36
+ readonly requiredRoles: readonly ["slots", "x", "y", "fill"];
37
+ readonly options: readonly ["fillFrom", "slotCode", "zones", "aspect", "emptyLabel", "pickTarget", "arranging", "arrange"];
38
+ };
39
+ readonly plan: {
40
+ readonly binds: "entities";
41
+ readonly requiredRoles: readonly ["regions", "outline"];
42
+ readonly options: readonly ["hues", "aspect", "undrawnLabel", "strayLabel", "draw", "place", "help"];
43
+ };
44
+ readonly reach: {
45
+ readonly binds: "nothing";
46
+ readonly requiredRoles: readonly [];
47
+ readonly options: readonly [];
48
+ };
49
+ /**
50
+ * A PLACE DRAWN FROM BLOCKS (FR-81): `options.blocks` is a list from the
51
+ * closed set the home and every card are written in — headlines, figures,
52
+ * lists of records drawn by their own cards and rows — about no one
53
+ * record, standing on the kind its `on` names. The data-only way to a
54
+ * picture no shipped lens draws.
55
+ */
56
+ readonly blocks: {
57
+ readonly binds: "nothing";
58
+ readonly requiredRoles: readonly [];
59
+ readonly options: readonly ["blocks"];
60
+ };
61
+ };
62
+ export type ShippedLensName = keyof typeof SHIPPED_LENSES;
63
+ /** The shipped lenses' names, in the order the table gives them. */
64
+ export declare const SHIPPED_LENS_NAMES: readonly ShippedLensName[];
65
+ export declare const isShippedLens: (name: string) => name is ShippedLensName;
66
+ /** The roles a lens requires: its own declaration's, or the shipped lens's when it names none. */
67
+ export declare function requiredRolesOf(lens: LensDeclaration): readonly string[];
68
+ /** Which shape its bindings take: its own word, or the shipped lens's when it says none. */
69
+ export declare function bindsOf(lens: LensDeclaration): "fields" | "entities";
70
+ /**
71
+ * A DECLARED LENS THAT DRAWS: which factory, the place it is, the kinds it
72
+ * stands on, and the factory's data options, resolved from the declaration's
73
+ * bindings. Everything here is data; `@graview/primitives` turns it into a
74
+ * view (`registerDeclaredLenses`).
75
+ */
76
+ export interface DrawnLens {
77
+ /** Its index in `app.lenses`. */
78
+ readonly index: number;
79
+ readonly lens: ShippedLensName;
80
+ readonly title: string;
81
+ /** The place's address word: its title, lower-cased and hyphenated. */
82
+ readonly as: string;
83
+ /** The kinds it is a place over: its `on`, or derived from its bindings. */
84
+ readonly kinds: readonly string[];
85
+ /** The other kind of a picture over two (a coverage's columns). */
86
+ readonly across?: string;
87
+ /** What the factory is handed, as data. */
88
+ readonly options: Readonly<Record<string, unknown>>;
89
+ }
90
+ /** A declared lens that does not draw, and why — what `describe` says and `check` explains. */
91
+ export interface UndrawnLens {
92
+ readonly index: number;
93
+ readonly name: string;
94
+ readonly title?: string;
95
+ readonly why: string;
96
+ }
97
+ /** A finding about a declared lens or the arrangement, at its path in the declaration. */
98
+ export interface PlaceFinding {
99
+ readonly severity: "warning" | "note";
100
+ readonly code: string;
101
+ readonly path: string;
102
+ readonly message: string;
103
+ readonly fix: string;
104
+ }
105
+ export interface DeclaredLenses {
106
+ readonly drawn: readonly DrawnLens[];
107
+ readonly undrawn: readonly UndrawnLens[];
108
+ readonly findings: readonly PlaceFinding[];
109
+ }
110
+ /**
111
+ * EVERY DECLARED LENS, SORTED INTO WHAT DRAWS AND WHAT DOES NOT.
112
+ *
113
+ * A lens draws when it names a lens this framework ships and gives itself a
114
+ * `title` — the title is what makes it a place: a pill on the bar, a
115
+ * drive-in from altitude, a page at `/places/<as>`. A lens without one is
116
+ * bindings the checker holds, as every declared lens was before FR-79. A
117
+ * titled lens whose options or bindings cannot make a picture does not draw,
118
+ * and says why here, so the checker and the describer give the same reason
119
+ * the picture is missing.
120
+ */
121
+ export declare function declaredLenses<S extends AnySchema>(app: GraviewApp<S>): DeclaredLenses;
122
+ /**
123
+ * WHERE THE HOME PUTS THINGS AND WHERE THE APP OPENS (FR-80).
124
+ *
125
+ * pages: { order: ["offer", "package", "signal"], hide: ["party"], first: "The offers" }
126
+ *
127
+ * `order` is the kinds in the order the home, the routed face's nav and the
128
+ * city at altitude walk them; kinds it does not name follow in the order
129
+ * they were declared. `hide` takes kinds off the home — their cards and
130
+ * counts — and nowhere else: a hidden kind keeps its list, its records,
131
+ * its links and its search results. `first` is where the app opens: a
132
+ * place by its title or address word, a kind by its name or plural, or
133
+ * `"home"`.
134
+ */
135
+ export interface PagesArrangement {
136
+ readonly order?: readonly string[];
137
+ readonly hide?: readonly string[];
138
+ readonly first?: string;
139
+ }
140
+ /** Kinds in the arrangement's order: those `order` names first, the rest as given. */
141
+ export declare function orderKinds(kinds: readonly string[], order: readonly string[] | undefined): readonly string[];
142
+ /** Where `first` opens, resolved against the places and kinds a face has. */
143
+ export type Opening = {
144
+ readonly to: "home";
145
+ } | {
146
+ readonly to: "place";
147
+ readonly place: Place;
148
+ } | {
149
+ readonly to: "kind";
150
+ readonly kind: string;
151
+ };
152
+ export declare function openingOf(first: string | undefined, schema: AnySchema, places: readonly Place[]): Opening | undefined;
153
+ /** What the arrangement asks that the declaration cannot honour: kinds and places that do not exist. */
154
+ export declare function arrangementFindings<S extends AnySchema>(app: GraviewApp<S>, places?: readonly Place[]): readonly PlaceFinding[];
155
+ /**
156
+ * ONE OF AN APP'S NAMED PLACES, as a host lists them (FR-79, FR-80): what it
157
+ * is called, what it is over, and its address on each face — `address` on
158
+ * the routed face, `stop` in the scene's fragment.
159
+ */
160
+ export interface AppPlace {
161
+ /** The address word: a place's `as`, a kind's plural, or `home`. */
162
+ readonly slug: string;
163
+ readonly title: string;
164
+ /** The kind it is over; null for the home. */
165
+ readonly kind: string | null;
166
+ readonly cardinality: "many";
167
+ /** Its path on the routed face: `/`, `/<plural>`, `/places/<as>`. */
168
+ readonly address: string;
169
+ /** Its stop in the scene: `#view=<as>`, `#focus=aggregate:<kind>`, or `#`. */
170
+ readonly stop: string;
171
+ /** Which shipped lens draws it, when a declared lens does. */
172
+ readonly lens?: ShippedLensName;
173
+ /** Left off the home by `pages.hide`; still reachable at its address. */
174
+ readonly hidden?: boolean;
175
+ /** Where the app opens (`pages.first`). */
176
+ readonly first?: boolean;
177
+ }
178
+ /**
179
+ * EVERY PLACE AN APP HAS, by name: the home, each declared lens that draws
180
+ * (and each place its registered views name, when the app carries them),
181
+ * and each kind — in the arrangement's order. What Graview Cloud's
182
+ * connector lists when an app is opened, and what a chat can send somebody
183
+ * to.
184
+ */
185
+ export declare function placesOf<S extends AnySchema>(app: GraviewApp<S>): readonly AppPlace[];
186
+ //# sourceMappingURL=places.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"places.d.ts","sourceRoot":"","sources":["../src/places.ts"],"names":[],"mappings":"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"}
package/dist/places.js ADDED
@@ -0,0 +1,358 @@
1
+ import { parseArrangement } from "./arrange.js";
2
+ import { defOf } from "./schema/zod.js";
3
+ import { placeSlug } from "./views/types.js";
4
+ /**
5
+ * THE LENSES THIS FRAMEWORK SHIPS, AND WHAT EACH ONE TAKES AS DATA (FR-79).
6
+ *
7
+ * One table, read by everything that has to agree about a declared lens:
8
+ * `graview check` (what it holds a declaration to), `graview describe`
9
+ * (what it says is drawn), `placesOf` (what a host lists) and the
10
+ * primitives that draw it (which factory, with which options). A lens is a
11
+ * place because this says it can be one, and the four of them cannot
12
+ * disagree because none of them has a list of its own.
13
+ *
14
+ * `options` is what a declaration may hand the factory beyond its roles —
15
+ * data only. What a factory needs that cannot be data (a timeline's
16
+ * `format`, a calendar's `today`) is derived where it is drawn.
17
+ */
18
+ export const SHIPPED_LENSES = {
19
+ timeline: { binds: "fields", requiredRoles: ["start", "end"], options: ["columns", "extent", "tick", "minWindow", "arranging"] },
20
+ calendar: { binds: "fields", requiredRoles: ["start"], options: ["today", "range", "weekStartsOn", "perCell", "horizon", "arranging"] },
21
+ coverage: { binds: "entities", requiredRoles: ["rows", "columns", "link"], options: ["rowRef", "rowGroup", "groupOrder", "requiredGroups", "requiredVia", "badge", "columnGroup"] },
22
+ board: { binds: "entities", requiredRoles: ["slots", "x", "y", "fill"], options: ["fillFrom", "slotCode", "zones", "aspect", "emptyLabel", "pickTarget", "arranging", "arrange"] },
23
+ plan: { binds: "entities", requiredRoles: ["regions", "outline"], options: ["hues", "aspect", "undrawnLabel", "strayLabel", "draw", "place", "help"] },
24
+ reach: { binds: "nothing", requiredRoles: [], options: [] },
25
+ /**
26
+ * A PLACE DRAWN FROM BLOCKS (FR-81): `options.blocks` is a list from the
27
+ * closed set the home and every card are written in — headlines, figures,
28
+ * lists of records drawn by their own cards and rows — about no one
29
+ * record, standing on the kind its `on` names. The data-only way to a
30
+ * picture no shipped lens draws.
31
+ */
32
+ blocks: { binds: "nothing", requiredRoles: [], options: ["blocks"] },
33
+ };
34
+ /** The shipped lenses' names, in the order the table gives them. */
35
+ export const SHIPPED_LENS_NAMES = Object.keys(SHIPPED_LENSES);
36
+ export const isShippedLens = (name) => Object.prototype.hasOwnProperty.call(SHIPPED_LENSES, name);
37
+ /** The roles a lens requires: its own declaration's, or the shipped lens's when it names none. */
38
+ export function requiredRolesOf(lens) {
39
+ return lens.requiredRoles ?? (isShippedLens(lens.name) ? SHIPPED_LENSES[lens.name].requiredRoles : []);
40
+ }
41
+ /** Which shape its bindings take: its own word, or the shipped lens's when it says none. */
42
+ export function bindsOf(lens) {
43
+ if (lens.binds)
44
+ return lens.binds;
45
+ return isShippedLens(lens.name) && SHIPPED_LENSES[lens.name].binds === "entities" ? "entities" : "fields";
46
+ }
47
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
48
+ /** The values an enum field takes, read from its schema; empty when it is not one. */
49
+ function enumValues(schema, kind, field) {
50
+ const shape = schema.tryDefinition(kind)?.fields.shape;
51
+ // Read from zod's own definition, through optional and default, rather than through the JSON-schema writer a page need not carry.
52
+ let def = defOf(shape?.[field]);
53
+ while (def && (def.type === "optional" || def.type === "default" || def.type === "nullable" || def.type === "prefault"))
54
+ def = defOf(def.innerType);
55
+ if (def?.type !== "enum")
56
+ return [];
57
+ const values = def.entries ? Object.values(def.entries) : (def.values ?? []);
58
+ return values.filter((value) => typeof value === "string");
59
+ }
60
+ /**
61
+ * EVERY DECLARED LENS, SORTED INTO WHAT DRAWS AND WHAT DOES NOT.
62
+ *
63
+ * A lens draws when it names a lens this framework ships and gives itself a
64
+ * `title` — the title is what makes it a place: a pill on the bar, a
65
+ * drive-in from altitude, a page at `/places/<as>`. A lens without one is
66
+ * bindings the checker holds, as every declared lens was before FR-79. A
67
+ * titled lens whose options or bindings cannot make a picture does not draw,
68
+ * and says why here, so the checker and the describer give the same reason
69
+ * the picture is missing.
70
+ */
71
+ export function declaredLenses(app) {
72
+ const drawn = [];
73
+ const undrawn = [];
74
+ const findings = [];
75
+ const kinds = new Set(app.schema.kinds);
76
+ const edges = new Set();
77
+ for (const kind of kinds)
78
+ for (const edge of Object.keys(app.schema.tryDefinition(kind)?.edges ?? {}))
79
+ edges.add(edge);
80
+ const fieldsOf = (kind) => Object.keys(app.schema.tryDefinition(kind)?.fields.shape ?? {});
81
+ /** Titles already taken, per kind, so two places on one kind cannot share an address. */
82
+ const taken = new Map();
83
+ (app.lenses ?? []).forEach((lens, index) => {
84
+ const at = `lenses.${index}`;
85
+ const title = typeof lens.title === "string" && lens.title.trim().length > 0 ? lens.title.trim() : undefined;
86
+ const skip = (why, finding) => {
87
+ undrawn.push({ index, name: lens.name, ...(title ? { title } : {}), why });
88
+ if (finding)
89
+ findings.push({ severity: "warning", ...finding });
90
+ };
91
+ if (!isShippedLens(lens.name)) {
92
+ if (title)
93
+ skip(`"${lens.name}" is not a lens this framework draws`, { code: "lens-not-shipped", path: `${at}.name`, message: `"${title}" names the lens "${lens.name}", which the framework does not ship, so nothing draws it.`, fix: `Name one of ${SHIPPED_LENS_NAMES.join(", ")} — or register the view yourself and drop the title.` });
94
+ else
95
+ skip("it is a lens this app wrote, drawn by the app's own views");
96
+ return;
97
+ }
98
+ if (!title)
99
+ return skip("it has no title, so it is bindings the checker holds and no place");
100
+ const shipped = SHIPPED_LENSES[lens.name];
101
+ const given = isRecord(lens.options) ? lens.options : {};
102
+ if (lens.options !== undefined && !isRecord(lens.options)) {
103
+ return skip("its options are not an object", { code: "lens-options-not-an-object", path: `${at}.options`, message: `"${title}" has options that are not an object.`, fix: `Write them as { "<option>": <value> }, or drop them.` });
104
+ }
105
+ for (const key of Object.keys(given)) {
106
+ if (!shipped.options.includes(key)) {
107
+ findings.push({ severity: "warning", code: "lens-option-unknown", path: `${at}.options.${key}`, message: `The ${lens.name} lens takes no option "${key}", so "${title}" ignores it.`, fix: shipped.options.length === 0 ? `The ${lens.name} lens takes no options; drop it.` : `Use one of: ${shipped.options.join(", ")}.` });
108
+ }
109
+ }
110
+ const options = {};
111
+ for (const key of shipped.options)
112
+ if (given[key] !== undefined)
113
+ options[key] = given[key];
114
+ if (lens.arrangedBy)
115
+ options["arrangedBy"] = parseArrangement(lens.arrangedBy);
116
+ const bindings = isRecord(lens.bindings) ? lens.bindings : {};
117
+ let stands = [];
118
+ let across;
119
+ const bad = (path, message, fix) => skip(message, { code: "lens-cannot-draw", path, message: `"${title}" cannot draw: ${message}.`, fix });
120
+ if (shipped.binds === "fields") {
121
+ const bound = Object.keys(bindings).filter((kind) => isRecord(bindings[kind]));
122
+ const unknown = bound.filter((kind) => !kinds.has(kind));
123
+ if (bound.length === 0)
124
+ return bad(`${at}.bindings`, "it binds no kind", `Bind a kind's fields: "bindings": { "<kind>": { ${shipped.requiredRoles.map((role) => `"${role}": "<field>"`).join(", ")} } }.`);
125
+ if (unknown.length > 0)
126
+ return; // the binding check says so, as an error
127
+ options["bindings"] = bindings;
128
+ stands = bound;
129
+ if (lens.name === "timeline") {
130
+ /*
131
+ * A TIMELINE'S COLUMNS. Named in the options, or read from the field
132
+ * its `column` role is bound to when that field is a set of values —
133
+ * a weekday, a lane. A timeline with neither has nowhere to put a
134
+ * span, so it says so rather than drawing an empty week.
135
+ */
136
+ const columns = given["columns"];
137
+ if (Array.isArray(columns)) {
138
+ options["columns"] = columns.map((column) => (typeof column === "string" ? { id: column, label: column } : column));
139
+ }
140
+ else {
141
+ const derived = bound.flatMap((kind) => {
142
+ const roles = bindings[kind];
143
+ const field = typeof roles["column"] === "string" ? roles["column"] : typeof roles["columns"] === "string" ? roles["columns"] : undefined;
144
+ return field ? enumValues(app.schema, kind, field) : [];
145
+ });
146
+ const values = [...new Set(derived)];
147
+ if (values.length === 0)
148
+ return bad(`${at}.options.columns`, "it has no columns — no option names them and no `column` role is bound to a field of set values", `Bind "column" to a field whose values are the columns, or say "columns": ["mon", "tue", …].`);
149
+ options["columns"] = values.map((value) => ({ id: value, label: value.toUpperCase() }));
150
+ }
151
+ if (options["extent"] === undefined)
152
+ options["extent"] = 1440;
153
+ }
154
+ if (lens.name === "calendar" && options["today"] !== undefined && !(typeof options["today"] === "string" && /^\d{4}-\d{2}-\d{2}$/.test(options["today"]))) {
155
+ return bad(`${at}.options.today`, "its today is not a date", `Write it as "YYYY-MM-DD", or leave it out and the calendar opens on the day it is drawn.`);
156
+ }
157
+ if (lens.name === "calendar" && options["range"] !== undefined && !["day", "week", "month", "quarter", "year", "years", "agenda"].includes(options["range"])) {
158
+ return bad(`${at}.options.range`, `its range "${String(options["range"])}" is not one a calendar opens at`, `Use one of: day, week, month, quarter, year, agenda.`);
159
+ }
160
+ }
161
+ else if (shipped.binds === "entities") {
162
+ /** A role's binding as the factory reads it: a kind, an edge, a path or a field name. */
163
+ const role = (name) => {
164
+ const binding = bindings[name];
165
+ if (!isRecord(binding))
166
+ return undefined;
167
+ if (typeof binding["kind"] === "string")
168
+ return binding["kind"];
169
+ if (typeof binding["edge"] === "string")
170
+ return binding["edge"];
171
+ if (Array.isArray(binding["path"]))
172
+ return { path: binding["path"] };
173
+ if (typeof binding["field"] === "string")
174
+ return binding["field"];
175
+ return undefined;
176
+ };
177
+ for (const name of shipped.requiredRoles)
178
+ if (role(name) === undefined)
179
+ return; // the binding check says so, as an error
180
+ const kindRole = lens.name === "coverage" ? "rows" : lens.name === "board" ? "slots" : "regions";
181
+ const main = role(kindRole);
182
+ if (!kinds.has(main))
183
+ return;
184
+ if (lens.name === "coverage") {
185
+ const columns = role("columns");
186
+ if (!kinds.has(columns))
187
+ return;
188
+ const link = role("link");
189
+ if (typeof link === "string" && !edges.has(link))
190
+ return;
191
+ Object.assign(options, { rows: main, columns, link });
192
+ if (columns !== main)
193
+ across = columns;
194
+ }
195
+ else if (lens.name === "board") {
196
+ Object.assign(options, { slots: main, x: role("x"), y: role("y"), fill: role("fill") });
197
+ for (const field of ["x", "y"])
198
+ if (!fieldsOf(main).includes(options[field]))
199
+ return;
200
+ }
201
+ else {
202
+ Object.assign(options, { regions: main, outline: role("outline") });
203
+ for (const optional of ["markers", "at", "within", "nests", "regionKind", "markerKind"]) {
204
+ const value = role(optional);
205
+ if (typeof value === "string")
206
+ options[optional] = value;
207
+ }
208
+ }
209
+ stands = [main];
210
+ }
211
+ else if (lens.name === "blocks") {
212
+ // A place drawn from blocks stands where it is told, and draws what its blocks say (their words are checked with the views).
213
+ if (!lens.on)
214
+ return bad(`${at}.on`, "it does not say which kind it stands on", `Say "on": "<the kind it is a place of>".`);
215
+ if (!Array.isArray(options["blocks"]) || options["blocks"].length === 0)
216
+ return bad(`${at}.options.blocks`, "it has no blocks to draw", `Say "options": { "blocks": [{ "headline": "…" }, { "list": "all('<kind>')", "as": "card" }] }.`);
217
+ }
218
+ else {
219
+ // The reach lens draws the policy, over the people: it stands where it is told, or on the people.
220
+ const people = ["user", "person", "member"].find((kind) => kinds.has(kind));
221
+ if (!lens.on && !people)
222
+ return bad(`${at}.on`, "it does not say which kind it stands on", `Say "on": "<the kind whose records are the people>".`);
223
+ stands = people ? [people] : [];
224
+ }
225
+ if (lens.on !== undefined) {
226
+ if (typeof lens.on !== "string" || !kinds.has(lens.on)) {
227
+ return bad(`${at}.on`, `it stands on "${String(lens.on)}", which is not a kind`, `Use one of: ${[...kinds].join(", ")}.`);
228
+ }
229
+ stands = [lens.on];
230
+ // A coverage stood on its columns is across its rows: the other kind is whichever it does not stand on.
231
+ if (lens.name === "coverage") {
232
+ const other = [options["rows"], options["columns"]].find((kind) => kind !== lens.on);
233
+ across = typeof other === "string" ? other : undefined;
234
+ }
235
+ }
236
+ const as = placeSlug(title);
237
+ if (as.length === 0)
238
+ return bad(`${at}.title`, "its title has no letters or digits to make an address of", "Give it a title a person would say.");
239
+ for (const kind of stands) {
240
+ const key = `${kind}|${as}`;
241
+ if (taken.has(key)) {
242
+ return skip(`another lens on ${kind} is already called "${title}"`, { code: "lens-title-taken", path: `${at}.title`, message: `"${title}" is the title of lenses.${taken.get(key)} too, on the same kind, so one address would name two pictures.`, fix: "Give each its own title." });
243
+ }
244
+ }
245
+ for (const kind of stands)
246
+ taken.set(`${kind}|${as}`, index);
247
+ drawn.push({ index, lens: lens.name, title, as, kinds: stands, ...(across ? { across } : {}), options });
248
+ });
249
+ return { drawn, undrawn, findings };
250
+ }
251
+ /** Kinds in the arrangement's order: those `order` names first, the rest as given. */
252
+ export function orderKinds(kinds, order) {
253
+ if (!order || order.length === 0)
254
+ return kinds;
255
+ const named = order.filter((kind) => kinds.includes(kind));
256
+ return [...new Set(named), ...kinds.filter((kind) => !named.includes(kind))];
257
+ }
258
+ const pluralWord = (schema, kind) => schema.tryDefinition(kind)?.plural ?? `${kind}s`;
259
+ export function openingOf(first, schema, places) {
260
+ if (first === undefined)
261
+ return undefined;
262
+ const word = first.trim();
263
+ if (word === "")
264
+ return undefined;
265
+ if (word.toLowerCase() === "home" || word === "/")
266
+ return { to: "home" };
267
+ const slug = placeSlug(word);
268
+ const place = places.find((one) => one.title === word) ?? places.find((one) => one.as === slug);
269
+ if (place)
270
+ return { to: "place", place };
271
+ const kinds = schema.kinds;
272
+ const kind = kinds.find((one) => one === word) ?? kinds.find((one) => placeSlug(pluralWord(schema, one)) === slug);
273
+ return kind ? { to: "kind", kind } : undefined;
274
+ }
275
+ /** What the arrangement asks that the declaration cannot honour: kinds and places that do not exist. */
276
+ export function arrangementFindings(app, places = placesOfLenses(app)) {
277
+ const pages = app.pages;
278
+ if (!pages)
279
+ return [];
280
+ const findings = [];
281
+ const kinds = app.schema.kinds;
282
+ for (const part of ["order", "hide"]) {
283
+ (pages[part] ?? []).forEach((kind, index) => {
284
+ if (!kinds.includes(kind)) {
285
+ findings.push({ severity: "warning", code: "pages-kind-unknown", path: `pages.${part}.${index}`, message: `pages.${part} names "${kind}", which is not a kind, so it is passed over.`, fix: `Use one of: ${kinds.join(", ")}.` });
286
+ }
287
+ });
288
+ }
289
+ if (pages.first !== undefined && openingOf(pages.first, app.schema, places) === undefined) {
290
+ findings.push({
291
+ severity: "warning",
292
+ code: "pages-first-unknown",
293
+ path: "pages.first",
294
+ message: `pages.first is "${pages.first}", which is not a place, a kind or "home", so the app opens at its home.`,
295
+ fix: `Name a place (${places.map((place) => `"${place.title}"`).join(", ") || "none is declared"}), a kind, or "home".`,
296
+ });
297
+ }
298
+ return findings;
299
+ }
300
+ /** The places a declaration's lenses make, with any its registered views name. */
301
+ function placesOfLenses(app) {
302
+ const out = [];
303
+ for (const lens of declaredLenses(app).drawn) {
304
+ for (const kind of lens.kinds)
305
+ out.push({ kind, title: lens.title, as: lens.as, ...(lens.across ? { across: lens.across } : {}) });
306
+ }
307
+ for (const place of app.views?.places?.() ?? []) {
308
+ if (!out.some((held) => held.kind === place.kind && held.as === place.as))
309
+ out.push(place);
310
+ }
311
+ return out;
312
+ }
313
+ /**
314
+ * EVERY PLACE AN APP HAS, by name: the home, each declared lens that draws
315
+ * (and each place its registered views name, when the app carries them),
316
+ * and each kind — in the arrangement's order. What Graview Cloud's
317
+ * connector lists when an app is opened, and what a chat can send somebody
318
+ * to.
319
+ */
320
+ export function placesOf(app) {
321
+ const lensPlaces = placesOfLenses(app);
322
+ const drawn = declaredLenses(app).drawn;
323
+ const opening = openingOf(app.pages?.first, app.schema, lensPlaces);
324
+ const hidden = new Set(app.pages?.hide ?? []);
325
+ const kinds = orderKinds(app.schema.kinds, app.pages?.order);
326
+ const shared = (place) => lensPlaces.some((other) => other.as === place.as && other.kind !== place.kind);
327
+ const out = [{ slug: "home", title: "Home", kind: null, cardinality: "many", address: "/", stop: "#", ...(opening?.to === "home" ? { first: true } : {}) }];
328
+ const byKind = [...lensPlaces].sort((a, b) => kinds.indexOf(a.kind) - kinds.indexOf(b.kind));
329
+ for (const place of byKind) {
330
+ const lens = drawn.find((one) => one.as === place.as && one.kinds.includes(place.kind));
331
+ const of = shared(place) ? placeSlug(pluralWord(app.schema, place.kind)) : undefined;
332
+ out.push({
333
+ slug: place.as,
334
+ title: place.title,
335
+ kind: place.kind,
336
+ cardinality: "many",
337
+ address: `/places/${encodeURIComponent(place.as)}${of ? `?of=${encodeURIComponent(of)}` : ""}`,
338
+ stop: of ? `#focus=aggregate:${place.kind}&in.view=${encodeURIComponent(place.as)}` : `#view=${encodeURIComponent(place.as)}`,
339
+ ...(lens ? { lens: lens.lens } : {}),
340
+ ...(opening?.to === "place" && opening.place.kind === place.kind && opening.place.as === place.as ? { first: true } : {}),
341
+ });
342
+ }
343
+ for (const kind of kinds) {
344
+ const plural = pluralWord(app.schema, kind);
345
+ out.push({
346
+ slug: placeSlug(plural),
347
+ title: plural,
348
+ kind,
349
+ cardinality: "many",
350
+ address: `/${placeSlug(plural)}`,
351
+ stop: `#focus=aggregate:${kind}`,
352
+ ...(hidden.has(kind) ? { hidden: true } : {}),
353
+ ...(opening?.to === "kind" && opening.kind === kind ? { first: true } : {}),
354
+ });
355
+ }
356
+ return out;
357
+ }
358
+ //# sourceMappingURL=places.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"places.js","sourceRoot":"","sources":["../src/places.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/scaffold/project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAGtC,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,oHAyBnB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAA+C,CAAC;AAO7F,eAAO,MAAM,WAAW,UAIvB,CAAC;AAEF,eAAO,MAAM,UAAU,UAMtB,CAAC;AAEF,eAAO,MAAM,SAAS,UAIrB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,CAqB/E;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAgCxE;AAED,sEAAsE;AACtE,wBAAgB,YAAY,IAAI,MAAM,CAsBrC;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,IAAI,MAAM,CAOnC;AAID,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAqEhE;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,CAyCnD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAoBtC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CA4M3C;AAOD,wBAAgB,SAAS,IAAI,MAAM,CAWlC;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CA2EvC;AAID,wBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CA2BtC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAwC3D"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/scaffold/project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAGtC,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,oHAyBnB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAA+C,CAAC;AAO7F,eAAO,MAAM,WAAW,UAIvB,CAAC;AAEF,eAAO,MAAM,UAAU,UAMtB,CAAC;AAEF,eAAO,MAAM,SAAS,UAIrB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,CAqB/E;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAgCxE;AAED,sEAAsE;AACtE,wBAAgB,YAAY,IAAI,MAAM,CAsBrC;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,IAAI,MAAM,CAOnC;AAID,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAqEhE;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,CAyCnD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAoBtC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAqN3C;AAOD,wBAAgB,SAAS,IAAI,MAAM,CAWlC;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CA2EvC;AAID,wBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CA2BtC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAwC3D"}
@@ -420,6 +420,7 @@ export default defineConfig({
420
420
  */
421
421
  alias: {
422
422
  "@graview/core/testing": framework("core/src/testing.ts"),
423
+ "@graview/core/describe": framework("core/src/describe.ts"),
423
424
  "@graview/core/document": framework("core/src/document/index.ts"),
424
425
  "@graview/core/conformance": framework("core/src/conformance/index.ts"),
425
426
  "@graview/core/cli": framework("core/src/cli/index.ts"),
@@ -437,6 +438,7 @@ export default defineConfig({
437
438
  "@graview/react": framework("react/src/index.ts"),
438
439
  "@graview/primitives/frame": framework("primitives/src/frame.ts"),
439
440
  "@graview/primitives/pages": framework("primitives/src/pages.ts"),
441
+ "@graview/primitives/scene": framework("primitives/src/scene.ts"),
440
442
  "@graview/primitives": framework("primitives/src/index.ts"),
441
443
  "@graview/pages": framework("pages/src/index.ts"),
442
444
  // The browser entry, so the file adapter's node:fs never meets the bundler.
@@ -448,8 +450,15 @@ export default defineConfig({
448
450
  "@graview/embed/pages": framework("embed/src/pages.tsx"),
449
451
  "@graview/embed": framework("embed/src/index.ts"),
450
452
  "@graview/guest/host/worker": framework("guest/src/host/worker.ts"),
453
+ "@graview/guest/host/views": framework("guest/src/host/views.ts"),
454
+ "@graview/guest/headless/node": framework("guest/src/headless/node.ts"),
455
+ "@graview/guest/headless": framework("guest/src/headless/index.ts"),
456
+ "@graview/guest/cli": framework("guest/src/cli.ts"),
457
+ "@graview/guest/client.js": framework("guest/client.js"),
458
+ "@graview/guest/client": framework("guest/src/client.ts"),
451
459
  "@graview/guest/host": framework("guest/src/host/index.ts"),
452
460
  "@graview/guest/react": framework("guest/src/react.ts"),
461
+ "@graview/guest/worker/view": framework("guest/src/worker/view.ts"),
453
462
  "@graview/guest/worker": framework("guest/src/worker/index.ts"),
454
463
  "@graview/guest/build": framework("guest/src/build.ts"),
455
464
  "@graview/guest": framework("guest/src/index.ts"),