@graview/core 0.1.8 → 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 (151) hide show
  1. package/README.md +8 -2
  2. package/dist/app.d.ts +41 -2
  3. package/dist/app.d.ts.map +1 -1
  4. package/dist/app.js.map +1 -1
  5. package/dist/capabilities.js +1 -1
  6. package/dist/capabilities.js.map +1 -1
  7. package/dist/city.d.ts +29 -0
  8. package/dist/city.d.ts.map +1 -1
  9. package/dist/city.js +66 -0
  10. package/dist/city.js.map +1 -1
  11. package/dist/cli/check/arrangement.d.ts.map +1 -1
  12. package/dist/cli/check/arrangement.js +3 -2
  13. package/dist/cli/check/arrangement.js.map +1 -1
  14. package/dist/cli/check/computed.d.ts +14 -0
  15. package/dist/cli/check/computed.d.ts.map +1 -0
  16. package/dist/cli/check/computed.js +34 -0
  17. package/dist/cli/check/computed.js.map +1 -0
  18. package/dist/cli/check/index.d.ts +1 -0
  19. package/dist/cli/check/index.d.ts.map +1 -1
  20. package/dist/cli/check/index.js +1 -0
  21. package/dist/cli/check/index.js.map +1 -1
  22. package/dist/cli/check/lenses.d.ts +10 -0
  23. package/dist/cli/check/lenses.d.ts.map +1 -1
  24. package/dist/cli/check/lenses.js +37 -19
  25. package/dist/cli/check/lenses.js.map +1 -1
  26. package/dist/cli/check/relations.d.ts.map +1 -1
  27. package/dist/cli/check/relations.js +2 -1
  28. package/dist/cli/check/relations.js.map +1 -1
  29. package/dist/cli/check/views.d.ts.map +1 -1
  30. package/dist/cli/check/views.js +8 -2
  31. package/dist/cli/check/views.js.map +1 -1
  32. package/dist/cli/check.d.ts.map +1 -1
  33. package/dist/cli/check.js +4 -1
  34. package/dist/cli/check.js.map +1 -1
  35. package/dist/cli/describe.d.ts.map +1 -1
  36. package/dist/cli/describe.js +54 -1
  37. package/dist/cli/describe.js.map +1 -1
  38. package/dist/cli/index.d.ts +1 -1
  39. package/dist/cli/index.d.ts.map +1 -1
  40. package/dist/cli/index.js +21 -1
  41. package/dist/cli/index.js.map +1 -1
  42. package/dist/describe.d.ts +3 -0
  43. package/dist/describe.d.ts.map +1 -0
  44. package/dist/describe.js +12 -0
  45. package/dist/describe.js.map +1 -0
  46. package/dist/document/blocks.d.ts +182 -0
  47. package/dist/document/blocks.d.ts.map +1 -0
  48. package/dist/document/blocks.js +382 -0
  49. package/dist/document/blocks.js.map +1 -0
  50. package/dist/document/compile.d.ts.map +1 -1
  51. package/dist/document/compile.js +57 -15
  52. package/dist/document/compile.js.map +1 -1
  53. package/dist/document/computed-values.d.ts +33 -0
  54. package/dist/document/computed-values.d.ts.map +1 -0
  55. package/dist/document/computed-values.js +60 -0
  56. package/dist/document/computed-values.js.map +1 -0
  57. package/dist/document/computed.d.ts +42 -0
  58. package/dist/document/computed.d.ts.map +1 -0
  59. package/dist/document/computed.js +173 -0
  60. package/dist/document/computed.js.map +1 -0
  61. package/dist/document/describe-place.d.ts +95 -0
  62. package/dist/document/describe-place.d.ts.map +1 -0
  63. package/dist/document/describe-place.js +257 -0
  64. package/dist/document/describe-place.js.map +1 -0
  65. package/dist/document/diff.d.ts.map +1 -1
  66. package/dist/document/diff.js +72 -3
  67. package/dist/document/diff.js.map +1 -1
  68. package/dist/document/edit.d.ts +1 -1
  69. package/dist/document/edit.d.ts.map +1 -1
  70. package/dist/document/edit.js +816 -103
  71. package/dist/document/edit.js.map +1 -1
  72. package/dist/document/expr/analyze.d.ts +22 -0
  73. package/dist/document/expr/analyze.d.ts.map +1 -1
  74. package/dist/document/expr/analyze.js +49 -3
  75. package/dist/document/expr/analyze.js.map +1 -1
  76. package/dist/document/expr/evaluate.d.ts +7 -1
  77. package/dist/document/expr/evaluate.d.ts.map +1 -1
  78. package/dist/document/expr/evaluate.js +95 -6
  79. package/dist/document/expr/evaluate.js.map +1 -1
  80. package/dist/document/expr/index.d.ts +1 -1
  81. package/dist/document/expr/index.d.ts.map +1 -1
  82. package/dist/document/expr/index.js +1 -1
  83. package/dist/document/expr/index.js.map +1 -1
  84. package/dist/document/index.d.ts +10 -2
  85. package/dist/document/index.d.ts.map +1 -1
  86. package/dist/document/index.js +5 -1
  87. package/dist/document/index.js.map +1 -1
  88. package/dist/document/rules.d.ts +2 -1
  89. package/dist/document/rules.d.ts.map +1 -1
  90. package/dist/document/rules.js +5 -1
  91. package/dist/document/rules.js.map +1 -1
  92. package/dist/document/schema.d.ts +35 -3
  93. package/dist/document/schema.d.ts.map +1 -1
  94. package/dist/document/schema.js +22 -2
  95. package/dist/document/schema.js.map +1 -1
  96. package/dist/document/template.d.ts +17 -2
  97. package/dist/document/template.d.ts.map +1 -1
  98. package/dist/document/template.js +136 -16
  99. package/dist/document/template.js.map +1 -1
  100. package/dist/document/thumbnail.d.ts +34 -0
  101. package/dist/document/thumbnail.d.ts.map +1 -0
  102. package/dist/document/thumbnail.js +165 -0
  103. package/dist/document/thumbnail.js.map +1 -0
  104. package/dist/document/to-document.d.ts.map +1 -1
  105. package/dist/document/to-document.js +4 -1
  106. package/dist/document/to-document.js.map +1 -1
  107. package/dist/document/views.d.ts +47 -3
  108. package/dist/document/views.d.ts.map +1 -1
  109. package/dist/document/views.js +289 -21
  110. package/dist/document/views.js.map +1 -1
  111. package/dist/index.d.ts +11 -3
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +6 -1
  114. package/dist/index.js.map +1 -1
  115. package/dist/places.d.ts +186 -0
  116. package/dist/places.d.ts.map +1 -0
  117. package/dist/places.js +358 -0
  118. package/dist/places.js.map +1 -0
  119. package/dist/scaffold/project.d.ts.map +1 -1
  120. package/dist/scaffold/project.js +9 -0
  121. package/dist/scaffold/project.js.map +1 -1
  122. package/dist/scaffold/ui.d.ts.map +1 -1
  123. package/dist/scaffold/ui.js +13 -10
  124. package/dist/scaffold/ui.js.map +1 -1
  125. package/dist/scene-districts.d.ts +24 -0
  126. package/dist/scene-districts.d.ts.map +1 -0
  127. package/dist/scene-districts.js +27 -0
  128. package/dist/scene-districts.js.map +1 -0
  129. package/dist/schema/define-node.d.ts +3 -0
  130. package/dist/schema/define-node.d.ts.map +1 -1
  131. package/dist/schema/define-node.js +3 -1
  132. package/dist/schema/define-node.js.map +1 -1
  133. package/dist/schema/types.d.ts +17 -0
  134. package/dist/schema/types.d.ts.map +1 -1
  135. package/dist/theme/layers.d.ts +82 -0
  136. package/dist/theme/layers.d.ts.map +1 -0
  137. package/dist/theme/layers.js +79 -0
  138. package/dist/theme/layers.js.map +1 -0
  139. package/dist/theme/look.d.ts +96 -0
  140. package/dist/theme/look.d.ts.map +1 -0
  141. package/dist/theme/look.js +110 -0
  142. package/dist/theme/look.js.map +1 -0
  143. package/dist/version.d.ts +1 -1
  144. package/dist/version.d.ts.map +1 -1
  145. package/dist/version.js +1 -1
  146. package/dist/version.js.map +1 -1
  147. package/dist/views/types.d.ts +19 -0
  148. package/dist/views/types.d.ts.map +1 -1
  149. package/dist/views/types.js +14 -0
  150. package/dist/views/types.js.map +1 -1
  151. package/package.json +5 -1
@@ -1 +1 @@
1
- {"version":3,"file":"to-document.js","sourceRoot":"","sources":["../../src/document/to-document.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"to-document.js","sourceRoot":"","sources":["../../src/document/to-document.ts"],"names":[],"mappings":"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"}
@@ -14,8 +14,39 @@ export declare const MAX_VIEW_BLOCKS = 40;
14
14
  export type ToneSpec = ViewTone | {
15
15
  readonly expr: string;
16
16
  };
17
+ /** How a `figure` block says its number (FR-81). */
18
+ export declare const FIGURE_FORMATS: readonly ["number", "money", "percent"];
19
+ export type FigureFormat = (typeof FIGURE_FORMATS)[number];
20
+ /** How a `list` block draws each record it lists: with the kind's own card, or its own row (FR-81, FR-82). */
21
+ export declare const LIST_AS: readonly ["card", "row"];
22
+ /** The most records one list draws; a `limit` says fewer. */
23
+ export declare const MAX_LIST_LIMIT = 100;
24
+ /** A list's order: a key read from each record, ascending — or `{ by, direction }`, where "choices" is the order a choice field's choices are declared in. */
25
+ export type ListSort = string | {
26
+ readonly by: string;
27
+ readonly direction?: "asc" | "desc" | "choices";
28
+ };
29
+ /** A list's grouping: a choice field, with a heading per choice where its value does not say it. */
30
+ export type ListGroup = string | {
31
+ readonly by: string;
32
+ readonly headings?: Readonly<Record<string, string>>;
33
+ };
17
34
  export type ViewBlock = {
18
35
  readonly title: string;
36
+ } | {
37
+ readonly headline: string;
38
+ } | {
39
+ readonly figure: string;
40
+ readonly as?: FigureFormat;
41
+ readonly currency?: string;
42
+ readonly label?: string;
43
+ } | {
44
+ readonly list: string;
45
+ readonly sort?: ListSort;
46
+ readonly limit?: number;
47
+ readonly group?: ListGroup;
48
+ readonly empty?: string;
49
+ readonly as?: (typeof LIST_AS)[number];
19
50
  } | {
20
51
  readonly text: string;
21
52
  readonly tone?: ToneSpec;
@@ -46,20 +77,33 @@ export type ViewBlock = {
46
77
  export type ViewSpecs = {
47
78
  readonly [slot in ViewSlot]?: readonly ViewBlock[];
48
79
  };
80
+ /**
81
+ * THE HOME VIEW (FR-81): blocks about no one record, drawn as the home's
82
+ * body on both faces. A document writes it as `views.home`, a list of
83
+ * blocks — a kind's views are an object of slots, so a kind that happens to
84
+ * be called `home` keeps its own — and a declaration as `home`.
85
+ */
86
+ export type HomeView = readonly ViewBlock[];
49
87
  /** Every kind's view specs, by kind: a document's `views`, and a declaration's `viewSpecs`. */
50
88
  export type ViewSpecsByKind = Readonly<Record<string, ViewSpecs>>;
51
- /** The view specs of a document that has been read; empty when it has none. */
89
+ /** The view specs of a document that has been read, by kind; empty when it has none. The home view is no kind's: see `homeOf`. */
52
90
  export declare function viewsOf(document: GraviewDocument): Readonly<Record<string, ViewSpecs>>;
53
- /** Findings about a document's `views`, each at its JSON path. */
91
+ /** A document's home view (`views.home`, a list of blocks), when it has one. */
92
+ export declare function homeOf(document: GraviewDocument): HomeView | undefined;
93
+ /** Findings about a document's `views` — every kind's, and the home's — and its blocks lenses, each at its JSON path. */
54
94
  export declare function validateViews(document: GraviewDocument): Finding[];
55
95
  /**
56
96
  * Findings about a declaration's view specs (FR-03), each at
57
97
  * `viewSpecs.<kind>.<slot>.<block>`: the vocabulary a document's `views`
58
98
  * is held to, read against the declared schema — its fields, its relations,
59
- * and its figures (the kind's own, or the brand's).
99
+ * and its figures (the kind's own, or the brand's). With `home`, the
100
+ * declaration's home view at `home.<block>`; with `lenses`, the blocks of
101
+ * each lens drawn from blocks at `lenses.<i>.options.blocks` (FR-81).
60
102
  */
61
103
  export declare function validateViewSpecs(schema: AnySchema, specs: unknown, options?: {
62
104
  readonly figures?: Readonly<Record<string, string>>;
63
105
  readonly at?: string;
106
+ readonly home?: unknown;
107
+ readonly lenses?: unknown;
64
108
  }): Finding[];
65
109
  //# sourceMappingURL=views.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../../src/document/views.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../../src/document/views.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { analyzeExpr } from "./expr/analyze.js";
2
2
  import { ExprSyntaxError, parseExpr } from "./expr/parse.js";
3
3
  import { error } from "./findings.js";
4
+ import { fieldSpecOf } from "./to-document.js";
4
5
  import { parseTemplate, TemplateError } from "./template.js";
5
6
  /*
6
7
  * VIEW SPECS — Tier 1 custom UI, as data (ADR 0004, docs/declaration-document.md).
@@ -26,9 +27,17 @@ export const VIEW_FIELD_FORMATS = ["money", "percent", "date", "relative", "coun
26
27
  export const MAX_VIEW_DEPTH = 4;
27
28
  /** Blocks in one view, counting nested ones. */
28
29
  export const MAX_VIEW_BLOCKS = 40;
30
+ /** How a `figure` block says its number (FR-81). */
31
+ export const FIGURE_FORMATS = ["number", "money", "percent"];
32
+ /** How a `list` block draws each record it lists: with the kind's own card, or its own row (FR-81, FR-82). */
33
+ export const LIST_AS = ["card", "row"];
34
+ /** The most records one list draws; a `limit` says fewer. */
35
+ export const MAX_LIST_LIMIT = 100;
29
36
  /** What each block may say besides the key that names it. */
30
37
  const BLOCK_KEYS = {
31
38
  title: [],
39
+ headline: [],
40
+ list: ["sort", "limit", "group", "empty", "as"],
32
41
  text: ["tone"],
33
42
  badge: ["tone"],
34
43
  field: ["as", "label"],
@@ -36,20 +45,33 @@ const BLOCK_KEYS = {
36
45
  group: ["direction"],
37
46
  when: ["show"],
38
47
  divider: [],
39
- figure: [],
48
+ // `{"figure": true}` is the kind's picture; `{"figure": expr, …}` a number worked out (FR-81).
49
+ figure: ["as", "currency", "label"],
40
50
  };
41
51
  const BLOCK_TYPES = Object.keys(BLOCK_KEYS);
42
- const SHAPES = '{"title": "{name}"}, {"text": "…", "tone"?}, {"badge": "{status}", "tone"?}, {"field": "quote", "as"?, "label"?}, {"progress": {"value": expr, "max": expr}, "label"?}, {"group": [blocks], "direction"?: "row"|"column"}, {"when": expr, "show": [blocks]}, {"divider": true}, {"figure": true}';
43
- /** The view specs of a document that has been read; empty when it has none. */
52
+ const SHAPES = '{"title": "{name}"}, {"headline": "{count(all(\'offer\'))} offers"}, {"figure": expr, "as"?: "number"|"money"|"percent", "currency"?, "label"?}, {"list": expr, "sort"?, "limit"?, "group"?, "empty"?, "as"?: "card"|"row"}, {"text": "…", "tone"?}, {"badge": "{status}", "tone"?}, {"field": "quote", "as"?, "label"?}, {"progress": {"value": expr, "max": expr}, "label"?}, {"group": [blocks], "direction"?: "row"|"column"}, {"when": expr, "show": [blocks]}, {"divider": true}, {"figure": true}';
53
+ /** The view specs of a document that has been read, by kind; empty when it has none. The home view is no kind's: see `homeOf`. */
44
54
  export function viewsOf(document) {
45
- return (document.views ?? {});
55
+ return Object.fromEntries(Object.entries(document.views ?? {}).filter(([, specs]) => !Array.isArray(specs)));
46
56
  }
57
+ /** A document's home view (`views.home`, a list of blocks), when it has one. */
58
+ export function homeOf(document) {
59
+ const home = document.views?.["home"];
60
+ return Array.isArray(home) ? home : undefined;
61
+ }
62
+ const NO_RECORD = { field: () => false, relation: () => false, figure: false };
63
+ const about = (scope) => scope.kind ?? "the home";
64
+ const own = (record, key) => record !== undefined && Object.prototype.hasOwnProperty.call(record, key);
47
65
  const isObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
48
66
  function names(expr, path, scope) {
49
67
  const shape = analyzeExpr(expr);
50
68
  for (const fn of shape.unknownFunctions)
51
69
  scope.findings.push(error("unknown-function", path, `"${fn}" is not a function the rule language knows`, "see docs/declaration-document.md#expression-language"));
52
70
  for (const n of shape.names) {
71
+ if (scope.kind === null) {
72
+ scope.findings.push(error("view-name", path, `"${n}" names nothing here: these blocks are about no one record`, "reach records with all('<kind>'), like count(all('offer')) or first(all('party') where role == 'client').name"));
73
+ continue;
74
+ }
53
75
  if (n === "id" || scope.spec.field(n) || scope.spec.relation(n))
54
76
  continue;
55
77
  scope.findings.push(error("view-name", path, `${scope.kind} has no field or relation called "${n}"`));
@@ -125,7 +147,8 @@ function oneBlock(raw, path, depth, scope) {
125
147
  return;
126
148
  }
127
149
  const keys = Object.keys(raw);
128
- const types = keys.filter((k) => BLOCK_TYPES.includes(k));
150
+ // A list's `group` is how it is grouped, not a group block of its own.
151
+ const types = keys.filter((k) => BLOCK_TYPES.includes(k) && !(k === "group" && keys.includes("list")));
129
152
  if (types.length === 0) {
130
153
  scope.findings.push(error("view-block", path, `${keys.length > 0 ? keys.map((k) => `"${k}"`).join(", ") : "an empty object"} is not a block Graview knows`, `one of ${SHAPES}`));
131
154
  return;
@@ -141,6 +164,7 @@ function oneBlock(raw, path, depth, scope) {
141
164
  const value = raw[type];
142
165
  switch (type) {
143
166
  case "title":
167
+ case "headline":
144
168
  case "text":
145
169
  case "badge":
146
170
  template(value, `${path}.${type}`, scope);
@@ -182,27 +206,242 @@ function oneBlock(raw, path, depth, scope) {
182
206
  else
183
207
  blocks(raw["show"], `${path}.show`, depth + 1, scope);
184
208
  return;
185
- case "divider":
186
209
  case "figure":
210
+ if (typeof value === "string")
211
+ return figureBlock(raw, path, scope);
212
+ for (const k of ["as", "currency", "label"])
213
+ if (k in raw)
214
+ scope.findings.push(error("unknown-key", `${path}.${k}`, `"${k}" belongs to a figure that works a number out; {"figure": true} is the kind's picture`, `write {"figure": "count(all('offer'))", "as": "number"}`));
215
+ if (value !== true)
216
+ scope.findings.push(error("view-block", `${path}.figure`, `a figure is a number worked out, {"figure": "sum(all('offer'), net)", "as": "money"}, or the kind's picture, {"figure": true}`));
217
+ else if (!scope.spec.figure)
218
+ scope.findings.push(error("view-figure", `${path}.figure`, `${about(scope)} has no figure to show`, scope.kind === null ? `work a number out: {"figure": "count(all('offer'))"}` : 'give the kind a "figure", or leave this block out'));
219
+ return;
220
+ case "list":
221
+ return listBlock(raw, path, scope);
222
+ case "divider":
187
223
  if (value !== true)
188
224
  scope.findings.push(error("view-block", `${path}.${type}`, `write {"${type}": true}`));
189
- if (type === "figure" && !scope.spec.figure)
190
- scope.findings.push(error("view-figure", `${path}.figure`, `${scope.kind} has no figure to show`, 'give the kind a "figure", or leave this block out'));
191
225
  return;
192
226
  }
193
227
  }
228
+ /** A figure that works a number out (FR-81): an expression, a formatter, a currency for money, a label. */
229
+ function figureBlock(raw, path, scope) {
230
+ expression(raw["figure"], `${path}.figure`, scope);
231
+ if ("as" in raw && !FIGURE_FORMATS.includes(raw["as"]))
232
+ scope.findings.push(error("view-format", `${path}.as`, `"${String(raw["as"])}" is not a way to say a figure`, `use one of ${FIGURE_FORMATS.join(", ")}`));
233
+ if ("currency" in raw) {
234
+ if (typeof raw["currency"] !== "string" || !/^[A-Z]{3}$/.test(raw["currency"]))
235
+ scope.findings.push(error("view-currency", `${path}.currency`, 'a currency is its three-letter code, like "USD" or "EUR"'));
236
+ else if (raw["as"] !== "money")
237
+ scope.findings.push(error("view-currency", `${path}.currency`, "a currency belongs on a figure shown as money", 'add "as": "money"'));
238
+ }
239
+ if ("label" in raw)
240
+ label(raw["label"], `${path}.label`, scope);
241
+ }
242
+ /**
243
+ * THE KINDS A LIST'S RECORDS ARE, read from its source without running it:
244
+ * `all('offer')` lists offers; `out('includes')` the targets of the
245
+ * relation from the kind the view is about; `in('answers')` the kinds that
246
+ * declare it; a relation by name its targets; `where`, `sort`, `first` and
247
+ * `either` the kinds of what they are handed. Undefined when the source
248
+ * does not say — then its names are not held to one kind.
249
+ */
250
+ function listedKinds(expr, scope) {
251
+ const every = [...scope.kinds];
252
+ const targetsFrom = (kinds, relation) => {
253
+ const found = new Set();
254
+ for (const kind of kinds) {
255
+ const to = scope.vocabulary.namesOf(kind)?.targets?.(relation);
256
+ if (to === "*")
257
+ return every;
258
+ for (const target of to ?? [])
259
+ found.add(target);
260
+ }
261
+ return found.size > 0 ? [...found] : undefined;
262
+ };
263
+ const visit = (e) => {
264
+ switch (e.t) {
265
+ case "ident":
266
+ return scope.kind !== null && scope.spec.relation(e.name) ? targetsFrom([scope.kind], e.name) : undefined;
267
+ case "member": {
268
+ const from = visit(e.object);
269
+ return from ? targetsFrom(from, e.name) : undefined;
270
+ }
271
+ case "where":
272
+ return visit(e.set);
273
+ case "call": {
274
+ const first = e.args[0];
275
+ const word = first?.t === "lit" && typeof first.value === "string" ? first.value : undefined;
276
+ if (e.fn === "all")
277
+ return word !== undefined && scope.kinds.has(word) ? [word] : undefined;
278
+ if (e.fn === "out")
279
+ return word !== undefined && scope.kind !== null ? targetsFrom([scope.kind], word) : undefined;
280
+ if (e.fn === "in") {
281
+ const sources = word !== undefined ? scope.vocabulary.sources(word) : [];
282
+ return sources.length > 0 ? sources : undefined;
283
+ }
284
+ if ((e.fn === "sort" || e.fn === "first") && first)
285
+ return visit(first);
286
+ if (e.fn === "either") {
287
+ const each = e.args.map(visit);
288
+ return each.every((one) => one !== undefined) ? [...new Set(each.flatMap((one) => one ?? []))] : undefined;
289
+ }
290
+ return undefined;
291
+ }
292
+ default:
293
+ return undefined;
294
+ }
295
+ };
296
+ return visit(expr);
297
+ }
298
+ /** A per-record expression of a list (its sort key), its names held to the kinds the list reaches. */
299
+ function memberExpression(source, path, kinds, scope) {
300
+ let parsed;
301
+ try {
302
+ parsed = parseExpr(source);
303
+ }
304
+ catch (e) {
305
+ if (!(e instanceof ExprSyntaxError))
306
+ throw e;
307
+ scope.findings.push(error("expression", path, `${e.sentence} (at character ${e.at + 1})`));
308
+ return;
309
+ }
310
+ const shape = analyzeExpr(parsed);
311
+ for (const fn of shape.unknownFunctions)
312
+ scope.findings.push(error("unknown-function", path, `"${fn}" is not a function the rule language knows`, "see docs/declaration-document.md#expression-language"));
313
+ for (const e of shape.edges)
314
+ if (!scope.edges.has(e))
315
+ scope.findings.push(error("view-edge", path, `"${e}" is not a relation any kind declares`));
316
+ if (!kinds)
317
+ return;
318
+ for (const n of shape.names) {
319
+ if (n === "id" || kinds.some((kind) => scope.vocabulary.namesOf(kind)?.field(n) || scope.vocabulary.namesOf(kind)?.relation(n)))
320
+ continue;
321
+ scope.findings.push(error("view-name", path, `${kinds.join(" and ")} ${kinds.length === 1 ? "has" : "have"} no field or relation called "${n}"`));
322
+ }
323
+ }
324
+ /** A list of records (FR-81) — chosen by an expression, or a walk from the record (FR-82) — in an order, a few, grouped, each drawn as its card or its row. */
325
+ function listBlock(raw, path, scope) {
326
+ const source = raw["list"];
327
+ expression(source, `${path}.list`, scope);
328
+ let kinds;
329
+ if (typeof source === "string") {
330
+ try {
331
+ kinds = listedKinds(parseExpr(source), scope);
332
+ }
333
+ catch {
334
+ kinds = undefined;
335
+ }
336
+ }
337
+ /** A choice field's choices across the kinds listed — or, when the source does not say, on any kind. */
338
+ const choicesOf = (field) => {
339
+ if (!kinds)
340
+ return [...scope.kinds].map((kind) => scope.vocabulary.namesOf(kind)?.choices?.(field)).find((choices) => choices !== undefined);
341
+ const each = kinds.map((kind) => scope.vocabulary.namesOf(kind)?.choices?.(field));
342
+ return each.every((choices) => choices !== undefined) ? [...new Set(each.flatMap((choices) => choices ?? []))] : undefined;
343
+ };
344
+ const named = kinds ? kinds.join(" and ") : "any kind";
345
+ if ("sort" in raw) {
346
+ const sort = raw["sort"];
347
+ if (typeof sort === "string")
348
+ memberExpression(sort, `${path}.sort`, kinds, scope);
349
+ else if (isObject(sort) && typeof sort["by"] === "string" && Object.keys(sort).every((k) => k === "by" || k === "direction")) {
350
+ const direction = sort["direction"];
351
+ if (direction !== undefined && direction !== "asc" && direction !== "desc" && direction !== "choices") {
352
+ scope.findings.push(error("list-sort", `${path}.sort.direction`, `a list is sorted "asc", "desc" or "choices", not "${String(direction)}"`, '"choices" puts a choice field in the order its choices are declared'));
353
+ }
354
+ else if (direction === "choices") {
355
+ if (choicesOf(sort["by"]) === undefined)
356
+ scope.findings.push(error("list-sort", `${path}.sort.by`, `"${sort["by"]}" is not a choice field of ${named}, so it has no declared order`, 'sort by a choice field, or say "asc" or "desc"'));
357
+ }
358
+ else
359
+ memberExpression(sort["by"], `${path}.sort.by`, kinds, scope);
360
+ }
361
+ else
362
+ scope.findings.push(error("list-sort", `${path}.sort`, 'a sort is a key, like "net", or {"by": key, "direction": "asc" | "desc" | "choices"}'));
363
+ }
364
+ if ("limit" in raw) {
365
+ const limit = raw["limit"];
366
+ if (typeof limit !== "number" || !Number.isInteger(limit) || limit < 1 || limit > MAX_LIST_LIMIT)
367
+ scope.findings.push(error("list-limit", `${path}.limit`, `a limit is a whole number from 1 to ${MAX_LIST_LIMIT}`));
368
+ }
369
+ if ("group" in raw) {
370
+ const group = raw["group"];
371
+ const by = typeof group === "string" ? group : isObject(group) && typeof group["by"] === "string" ? group["by"] : undefined;
372
+ const shaped = typeof group === "string" || (isObject(group) && Object.keys(group).every((k) => k === "by" || k === "headings"));
373
+ if (!shaped || by === undefined) {
374
+ scope.findings.push(error("list-group", `${path}.group`, 'a group is a choice field, like "type", or {"by": "type", "headings": {"pain": "What hurts"}}'));
375
+ }
376
+ else {
377
+ const choices = choicesOf(by);
378
+ if (choices === undefined)
379
+ scope.findings.push(error("list-group", `${path}.group`, `"${by}" is not a choice field of ${named}, so it has no choices to group by`, "group by a field whose type is enum"));
380
+ if (isObject(group) && "headings" in group) {
381
+ const headings = group["headings"];
382
+ if (!isObject(headings) || Object.values(headings).some((words) => typeof words !== "string" || words.length === 0 || words.length > 80)) {
383
+ scope.findings.push(error("list-group", `${path}.group.headings`, 'headings are words per choice, like {"pain": "What hurts"}, at most 80 characters each'));
384
+ }
385
+ else if (choices) {
386
+ for (const choice of Object.keys(headings))
387
+ if (!choices.includes(choice))
388
+ scope.findings.push(error("list-group", `${path}.group.headings.${choice}`, `"${choice}" is not one of ${by}'s choices`, `use ${choices.join(", ")}`));
389
+ }
390
+ }
391
+ }
392
+ }
393
+ if ("empty" in raw && (typeof raw["empty"] !== "string" || raw["empty"].length === 0 || raw["empty"].length > 200))
394
+ scope.findings.push(error("list-empty", `${path}.empty`, "what an empty list says is a sentence, at most 200 characters"));
395
+ if ("as" in raw && !LIST_AS.includes(raw["as"]))
396
+ scope.findings.push(error("list-as", `${path}.as`, `a list draws each record as its "card" or its "row", not "${String(raw["as"])}"`));
397
+ }
194
398
  function label(value, path, scope) {
195
399
  if (typeof value !== "string" || value.length === 0 || value.length > 60)
196
400
  scope.findings.push(error("view-label", path, "a label is a few words, at most 60 characters"));
197
401
  }
198
- /** Every kind's specs, checked against what each kind holds, at `<at>.<kind>.<slot>`. */
199
- function validateAll(specsByKind, at, namesOf, kinds, edges, declares) {
402
+ /** Blocks about no one record — the home, a blocks lens — checked at `at`. */
403
+ function subjectless(list, at, vocabulary, kinds, edges, findings, what) {
404
+ const scope = { kind: null, spec: NO_RECORD, kinds, edges, vocabulary, findings, count: 0 };
405
+ if (Array.isArray(list) && list.length === 0)
406
+ findings.push(error("view-shape", at, `${what} has no blocks`, 'give it one: {"headline": "…"}'));
407
+ blocks(list, at, 1, scope);
408
+ if (scope.count > MAX_VIEW_BLOCKS)
409
+ findings.push(error("view-size", at, `${what} has ${scope.count} blocks; a view has at most ${MAX_VIEW_BLOCKS}`, "show less"));
410
+ }
411
+ /** The lenses drawn from blocks, by their index in `lenses`: their blocks, checked where they are written. */
412
+ function blockLenses(lenses, vocabulary, kinds, edges, findings) {
413
+ if (!Array.isArray(lenses))
414
+ return;
415
+ lenses.forEach((lens, index) => {
416
+ if (!isObject(lens) || lens["name"] !== "blocks" || !isObject(lens["options"]) || !("blocks" in lens["options"]))
417
+ return;
418
+ /*
419
+ * WARNINGS, NOT ERRORS: before FR-81 a lens called "blocks" was a lens
420
+ * the framework did not ship — a warning — and a document carrying one
421
+ * compiled. It still does; a block the lens cannot draw is left out of
422
+ * the picture, and the check says which at its path.
423
+ */
424
+ const found = [];
425
+ subjectless(lens["options"]["blocks"], `lenses.${index}.options.blocks`, vocabulary, kinds, edges, found, `the lens "${String(lens["title"] ?? index)}"`);
426
+ for (const finding of found)
427
+ findings.push({ ...finding, severity: "warning" });
428
+ });
429
+ }
430
+ /** Every kind's specs, checked against what each kind holds, at `<at>.<kind>.<slot>`; and a list of blocks at `<at>.home`, the home view. */
431
+ function validateAll(specsByKind, at, namesOf, kinds, edges, declares, vocabulary) {
200
432
  const findings = [];
433
+ if (specsByKind === undefined)
434
+ return findings;
201
435
  if (!isObject(specsByKind)) {
202
436
  findings.push(error("view-shape", at, 'views are an object of kinds, each with a "card", a "row" or a "page"'));
203
437
  return findings;
204
438
  }
205
439
  for (const [kind, specs] of Object.entries(specsByKind)) {
440
+ // A list of blocks at `home` is the home view (FR-81); an object there is the slots of a kind called home.
441
+ if (kind === "home" && Array.isArray(specs)) {
442
+ subjectless(specs, `${at}.home`, vocabulary, kinds, edges, findings, "the home");
443
+ continue;
444
+ }
206
445
  const spec = namesOf(kind);
207
446
  if (!spec) {
208
447
  findings.push(error("view-kind", `${at}.${kind}`, `"${kind}" is not a kind this ${declares} declares`));
@@ -220,7 +459,7 @@ function validateAll(specsByKind, at, namesOf, kinds, edges, declares) {
220
459
  const list = specs[slot];
221
460
  if (list === undefined)
222
461
  continue;
223
- const scope = { kind, spec, kinds, edges, findings, count: 0 };
462
+ const scope = { kind, spec, kinds, edges, vocabulary, findings, count: 0 };
224
463
  blocks(list, `${at}.${kind}.${slot}`, 1, scope);
225
464
  if (scope.count > MAX_VIEW_BLOCKS)
226
465
  findings.push(error("view-size", `${at}.${kind}.${slot}`, `this ${slot} has ${scope.count} blocks; a view has at most ${MAX_VIEW_BLOCKS}`, "show less, or move detail to the page"));
@@ -228,37 +467,66 @@ function validateAll(specsByKind, at, namesOf, kinds, edges, declares) {
228
467
  }
229
468
  return findings;
230
469
  }
231
- /** Findings about a document's `views`, each at its JSON path. */
470
+ /** Findings about a document's `views` — every kind's, and the home's — and its blocks lenses, each at its JSON path. */
232
471
  export function validateViews(document) {
233
472
  const kinds = new Set(Object.keys(document.kinds));
234
473
  const edges = new Set(Object.values(document.kinds).flatMap((k) => Object.keys(k.edges ?? {})));
235
- return validateAll(viewsOf(document), "views", (kind) => {
236
- const spec = document.kinds[kind];
237
- return spec ? { field: (n) => spec.fields[n] !== undefined, relation: (n) => spec.edges?.[n] !== undefined, figure: spec.figure !== undefined } : undefined;
238
- }, kinds, edges, "document");
474
+ const namesOf = (kind) => {
475
+ const spec = own(document.kinds, kind) ? document.kinds[kind] : undefined;
476
+ // A computed field is shown like a stored one (FR-83).
477
+ return spec
478
+ ? {
479
+ field: (n) => own(spec.fields, n) || own(spec.computed, n),
480
+ relation: (n) => own(spec.edges, n),
481
+ figure: spec.figure !== undefined,
482
+ choices: (n) => (own(spec.fields, n) && spec.fields[n].type === "enum" ? spec.fields[n].options : undefined),
483
+ targets: (n) => (own(spec.edges, n) ? spec.edges[n].to : undefined),
484
+ }
485
+ : undefined;
486
+ };
487
+ const vocabulary = { namesOf, sources: (edge) => Object.keys(document.kinds).filter((kind) => own(document.kinds[kind].edges, edge)) };
488
+ const findings = validateAll(document.views, "views", namesOf, kinds, edges, "document", vocabulary);
489
+ blockLenses(document.lenses, vocabulary, kinds, edges, findings);
490
+ return findings;
239
491
  }
240
492
  /**
241
493
  * Findings about a declaration's view specs (FR-03), each at
242
494
  * `viewSpecs.<kind>.<slot>.<block>`: the vocabulary a document's `views`
243
495
  * is held to, read against the declared schema — its fields, its relations,
244
- * and its figures (the kind's own, or the brand's).
496
+ * and its figures (the kind's own, or the brand's). With `home`, the
497
+ * declaration's home view at `home.<block>`; with `lenses`, the blocks of
498
+ * each lens drawn from blocks at `lenses.<i>.options.blocks` (FR-81).
245
499
  */
246
500
  export function validateViewSpecs(schema, specs, options = {}) {
247
501
  const declared = schema.kinds;
248
502
  const kinds = new Set(declared);
249
503
  const definitionOf = (kind) => schema.tryDefinition(kind);
250
504
  const edges = new Set(declared.flatMap((kind) => Object.keys(definitionOf(kind)?.edges ?? {})));
251
- return validateAll(specs, options.at ?? "viewSpecs", (kind) => {
505
+ const namesOf = (kind) => {
252
506
  if (!kinds.has(kind))
253
507
  return undefined;
254
508
  const definition = definitionOf(kind);
255
509
  const fields = definition?.fields?.shape ?? {};
256
510
  const relations = definition?.edges ?? {};
511
+ const computed = definition?.computed ?? {};
257
512
  return {
258
- field: (n) => n !== "id" && n !== "kind" && Object.prototype.hasOwnProperty.call(fields, n),
259
- relation: (n) => Object.prototype.hasOwnProperty.call(relations, n),
513
+ field: (n) => n !== "id" && n !== "kind" && (own(fields, n) || own(computed, n)),
514
+ relation: (n) => own(relations, n),
260
515
  figure: definition?.figure !== undefined || options.figures?.[kind] !== undefined,
516
+ choices: (n) => {
517
+ if (!own(fields, n))
518
+ return undefined;
519
+ const spec = fieldSpecOf(fields[n]);
520
+ return spec?.type === "enum" ? spec.options : undefined;
521
+ },
522
+ targets: (n) => (own(relations, n) ? relations[n].to : undefined),
261
523
  };
262
- }, kinds, edges, "app");
524
+ };
525
+ const vocabulary = { namesOf, sources: (edge) => declared.filter((kind) => own(definitionOf(kind)?.edges, edge)) };
526
+ const findings = validateAll(specs, options.at ?? "viewSpecs", namesOf, kinds, edges, "app", vocabulary);
527
+ if (options.home !== undefined)
528
+ subjectless(options.home, "home", vocabulary, kinds, edges, findings, "the home");
529
+ blockLenses(options.lenses, vocabulary, kinds, edges, findings);
530
+ return findings;
263
531
  }
264
532
  //# sourceMappingURL=views.js.map