@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.
- package/README.md +8 -2
- package/dist/app.d.ts +41 -2
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js.map +1 -1
- package/dist/capabilities.js +1 -1
- package/dist/capabilities.js.map +1 -1
- package/dist/city.d.ts +29 -0
- package/dist/city.d.ts.map +1 -1
- package/dist/city.js +66 -0
- package/dist/city.js.map +1 -1
- package/dist/cli/check/arrangement.d.ts.map +1 -1
- package/dist/cli/check/arrangement.js +3 -2
- package/dist/cli/check/arrangement.js.map +1 -1
- package/dist/cli/check/computed.d.ts +14 -0
- package/dist/cli/check/computed.d.ts.map +1 -0
- package/dist/cli/check/computed.js +34 -0
- package/dist/cli/check/computed.js.map +1 -0
- package/dist/cli/check/index.d.ts +1 -0
- package/dist/cli/check/index.d.ts.map +1 -1
- package/dist/cli/check/index.js +1 -0
- package/dist/cli/check/index.js.map +1 -1
- package/dist/cli/check/lenses.d.ts +10 -0
- package/dist/cli/check/lenses.d.ts.map +1 -1
- package/dist/cli/check/lenses.js +37 -19
- package/dist/cli/check/lenses.js.map +1 -1
- package/dist/cli/check/relations.d.ts.map +1 -1
- package/dist/cli/check/relations.js +2 -1
- package/dist/cli/check/relations.js.map +1 -1
- package/dist/cli/check/views.d.ts.map +1 -1
- package/dist/cli/check/views.js +8 -2
- package/dist/cli/check/views.js.map +1 -1
- package/dist/cli/check.d.ts.map +1 -1
- package/dist/cli/check.js +4 -1
- package/dist/cli/check.js.map +1 -1
- package/dist/cli/describe.d.ts.map +1 -1
- package/dist/cli/describe.js +54 -1
- package/dist/cli/describe.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +21 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/describe.d.ts +3 -0
- package/dist/describe.d.ts.map +1 -0
- package/dist/describe.js +12 -0
- package/dist/describe.js.map +1 -0
- package/dist/document/blocks.d.ts +182 -0
- package/dist/document/blocks.d.ts.map +1 -0
- package/dist/document/blocks.js +382 -0
- package/dist/document/blocks.js.map +1 -0
- package/dist/document/compile.d.ts.map +1 -1
- package/dist/document/compile.js +57 -15
- package/dist/document/compile.js.map +1 -1
- package/dist/document/computed-values.d.ts +33 -0
- package/dist/document/computed-values.d.ts.map +1 -0
- package/dist/document/computed-values.js +60 -0
- package/dist/document/computed-values.js.map +1 -0
- package/dist/document/computed.d.ts +42 -0
- package/dist/document/computed.d.ts.map +1 -0
- package/dist/document/computed.js +173 -0
- package/dist/document/computed.js.map +1 -0
- package/dist/document/describe-place.d.ts +95 -0
- package/dist/document/describe-place.d.ts.map +1 -0
- package/dist/document/describe-place.js +257 -0
- package/dist/document/describe-place.js.map +1 -0
- package/dist/document/diff.d.ts.map +1 -1
- package/dist/document/diff.js +72 -3
- package/dist/document/diff.js.map +1 -1
- package/dist/document/edit.d.ts +1 -1
- package/dist/document/edit.d.ts.map +1 -1
- package/dist/document/edit.js +816 -103
- package/dist/document/edit.js.map +1 -1
- package/dist/document/expr/analyze.d.ts +22 -0
- package/dist/document/expr/analyze.d.ts.map +1 -1
- package/dist/document/expr/analyze.js +49 -3
- package/dist/document/expr/analyze.js.map +1 -1
- package/dist/document/expr/evaluate.d.ts +7 -1
- package/dist/document/expr/evaluate.d.ts.map +1 -1
- package/dist/document/expr/evaluate.js +95 -6
- package/dist/document/expr/evaluate.js.map +1 -1
- package/dist/document/expr/index.d.ts +1 -1
- package/dist/document/expr/index.d.ts.map +1 -1
- package/dist/document/expr/index.js +1 -1
- package/dist/document/expr/index.js.map +1 -1
- package/dist/document/index.d.ts +10 -2
- package/dist/document/index.d.ts.map +1 -1
- package/dist/document/index.js +5 -1
- package/dist/document/index.js.map +1 -1
- package/dist/document/rules.d.ts +2 -1
- package/dist/document/rules.d.ts.map +1 -1
- package/dist/document/rules.js +5 -1
- package/dist/document/rules.js.map +1 -1
- package/dist/document/schema.d.ts +35 -3
- package/dist/document/schema.d.ts.map +1 -1
- package/dist/document/schema.js +22 -2
- package/dist/document/schema.js.map +1 -1
- package/dist/document/template.d.ts +17 -2
- package/dist/document/template.d.ts.map +1 -1
- package/dist/document/template.js +136 -16
- package/dist/document/template.js.map +1 -1
- package/dist/document/thumbnail.d.ts +34 -0
- package/dist/document/thumbnail.d.ts.map +1 -0
- package/dist/document/thumbnail.js +165 -0
- package/dist/document/thumbnail.js.map +1 -0
- package/dist/document/to-document.d.ts.map +1 -1
- package/dist/document/to-document.js +4 -1
- package/dist/document/to-document.js.map +1 -1
- package/dist/document/views.d.ts +47 -3
- package/dist/document/views.d.ts.map +1 -1
- package/dist/document/views.js +289 -21
- package/dist/document/views.js.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/places.d.ts +186 -0
- package/dist/places.d.ts.map +1 -0
- package/dist/places.js +358 -0
- package/dist/places.js.map +1 -0
- package/dist/scaffold/project.d.ts.map +1 -1
- package/dist/scaffold/project.js +9 -0
- package/dist/scaffold/project.js.map +1 -1
- package/dist/scaffold/ui.d.ts.map +1 -1
- package/dist/scaffold/ui.js +13 -10
- package/dist/scaffold/ui.js.map +1 -1
- package/dist/scene-districts.d.ts +24 -0
- package/dist/scene-districts.d.ts.map +1 -0
- package/dist/scene-districts.js +27 -0
- package/dist/scene-districts.js.map +1 -0
- package/dist/schema/define-node.d.ts +3 -0
- package/dist/schema/define-node.d.ts.map +1 -1
- package/dist/schema/define-node.js +3 -1
- package/dist/schema/define-node.js.map +1 -1
- package/dist/schema/types.d.ts +17 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/theme/layers.d.ts +82 -0
- package/dist/theme/layers.d.ts.map +1 -0
- package/dist/theme/layers.js +79 -0
- package/dist/theme/layers.js.map +1 -0
- package/dist/theme/look.d.ts +96 -0
- package/dist/theme/look.d.ts.map +1 -0
- package/dist/theme/look.js +110 -0
- package/dist/theme/look.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/views/types.d.ts +19 -0
- package/dist/views/types.d.ts.map +1 -1
- package/dist/views/types.js +14 -0
- package/dist/views/types.js.map +1 -1
- 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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"}
|
package/dist/document/views.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
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":"AAEA,OAAO,EAAS,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../../src/document/views.ts"],"names":[],"mappings":"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"}
|
package/dist/document/views.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
/**
|
|
199
|
-
function
|
|
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
|
|
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
|
-
|
|
236
|
-
const spec = document.kinds[kind];
|
|
237
|
-
|
|
238
|
-
|
|
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
|
-
|
|
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" &&
|
|
259
|
-
relation: (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
|
-
}
|
|
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
|