@graview/core 0.1.9 → 0.1.12

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 (200) hide show
  1. package/README.md +19 -8
  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/blocks.d.ts +5 -0
  6. package/dist/blocks.d.ts.map +1 -0
  7. package/dist/blocks.js +14 -0
  8. package/dist/blocks.js.map +1 -0
  9. package/dist/capabilities.js +1 -1
  10. package/dist/capabilities.js.map +1 -1
  11. package/dist/check.d.ts +8 -0
  12. package/dist/check.d.ts.map +1 -0
  13. package/dist/check.js +19 -0
  14. package/dist/check.js.map +1 -0
  15. package/dist/cli/check/arrangement.d.ts.map +1 -1
  16. package/dist/cli/check/arrangement.js +3 -2
  17. package/dist/cli/check/arrangement.js.map +1 -1
  18. package/dist/cli/check/brand.d.ts.map +1 -1
  19. package/dist/cli/check/brand.js +21 -0
  20. package/dist/cli/check/brand.js.map +1 -1
  21. package/dist/cli/check/computed.d.ts +14 -0
  22. package/dist/cli/check/computed.d.ts.map +1 -0
  23. package/dist/cli/check/computed.js +34 -0
  24. package/dist/cli/check/computed.js.map +1 -0
  25. package/dist/cli/check/hidden-reads.d.ts +4 -0
  26. package/dist/cli/check/hidden-reads.d.ts.map +1 -0
  27. package/dist/cli/check/hidden-reads.js +152 -0
  28. package/dist/cli/check/hidden-reads.js.map +1 -0
  29. package/dist/cli/check/index.d.ts +2 -0
  30. package/dist/cli/check/index.d.ts.map +1 -1
  31. package/dist/cli/check/index.js +2 -0
  32. package/dist/cli/check/index.js.map +1 -1
  33. package/dist/cli/check/lenses.d.ts +10 -0
  34. package/dist/cli/check/lenses.d.ts.map +1 -1
  35. package/dist/cli/check/lenses.js +37 -19
  36. package/dist/cli/check/lenses.js.map +1 -1
  37. package/dist/cli/check/relations.d.ts.map +1 -1
  38. package/dist/cli/check/relations.js +2 -1
  39. package/dist/cli/check/relations.js.map +1 -1
  40. package/dist/cli/check/views.d.ts.map +1 -1
  41. package/dist/cli/check/views.js +13 -3
  42. package/dist/cli/check/views.js.map +1 -1
  43. package/dist/cli/check.d.ts.map +1 -1
  44. package/dist/cli/check.js +5 -1
  45. package/dist/cli/check.js.map +1 -1
  46. package/dist/cli/create.d.ts.map +1 -1
  47. package/dist/cli/create.js +1 -1
  48. package/dist/cli/create.js.map +1 -1
  49. package/dist/cli/describe.d.ts.map +1 -1
  50. package/dist/cli/describe.js +66 -1
  51. package/dist/cli/describe.js.map +1 -1
  52. package/dist/cli/index.d.ts +2 -2
  53. package/dist/cli/index.d.ts.map +1 -1
  54. package/dist/cli/index.js +23 -2
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/columns.d.ts +73 -0
  57. package/dist/columns.d.ts.map +1 -0
  58. package/dist/columns.js +100 -0
  59. package/dist/columns.js.map +1 -0
  60. package/dist/conformance/index.js +1 -1
  61. package/dist/conformance/index.js.map +1 -1
  62. package/dist/describe.d.ts +5 -0
  63. package/dist/describe.d.ts.map +1 -0
  64. package/dist/describe.js +19 -0
  65. package/dist/describe.js.map +1 -0
  66. package/dist/document/blocks.d.ts +187 -0
  67. package/dist/document/blocks.d.ts.map +1 -0
  68. package/dist/document/blocks.js +372 -0
  69. package/dist/document/blocks.js.map +1 -0
  70. package/dist/document/compile-checked.d.ts +8 -0
  71. package/dist/document/compile-checked.d.ts.map +1 -0
  72. package/dist/document/compile-checked.js +36 -0
  73. package/dist/document/compile-checked.js.map +1 -0
  74. package/dist/document/compile.d.ts +8 -6
  75. package/dist/document/compile.d.ts.map +1 -1
  76. package/dist/document/compile.js +68 -46
  77. package/dist/document/compile.js.map +1 -1
  78. package/dist/document/computed-values.d.ts +33 -0
  79. package/dist/document/computed-values.d.ts.map +1 -0
  80. package/dist/document/computed-values.js +60 -0
  81. package/dist/document/computed-values.js.map +1 -0
  82. package/dist/document/computed.d.ts +42 -0
  83. package/dist/document/computed.d.ts.map +1 -0
  84. package/dist/document/computed.js +173 -0
  85. package/dist/document/computed.js.map +1 -0
  86. package/dist/document/describe-place.d.ts +95 -0
  87. package/dist/document/describe-place.d.ts.map +1 -0
  88. package/dist/document/describe-place.js +286 -0
  89. package/dist/document/describe-place.js.map +1 -0
  90. package/dist/document/diff.d.ts.map +1 -1
  91. package/dist/document/diff.js +78 -4
  92. package/dist/document/diff.js.map +1 -1
  93. package/dist/document/edit.d.ts +1 -1
  94. package/dist/document/edit.d.ts.map +1 -1
  95. package/dist/document/edit.js +908 -107
  96. package/dist/document/edit.js.map +1 -1
  97. package/dist/document/expr/analyze.d.ts +22 -0
  98. package/dist/document/expr/analyze.d.ts.map +1 -1
  99. package/dist/document/expr/analyze.js +51 -4
  100. package/dist/document/expr/analyze.js.map +1 -1
  101. package/dist/document/expr/evaluate.d.ts +7 -1
  102. package/dist/document/expr/evaluate.d.ts.map +1 -1
  103. package/dist/document/expr/evaluate.js +121 -8
  104. package/dist/document/expr/evaluate.js.map +1 -1
  105. package/dist/document/expr/index.d.ts +1 -1
  106. package/dist/document/expr/index.d.ts.map +1 -1
  107. package/dist/document/expr/index.js +1 -1
  108. package/dist/document/expr/index.js.map +1 -1
  109. package/dist/document/expr/parse.d.ts +2 -1
  110. package/dist/document/expr/parse.d.ts.map +1 -1
  111. package/dist/document/expr/parse.js +6 -3
  112. package/dist/document/expr/parse.js.map +1 -1
  113. package/dist/document/expr/print.d.ts.map +1 -1
  114. package/dist/document/expr/print.js +4 -2
  115. package/dist/document/expr/print.js.map +1 -1
  116. package/dist/document/graview-template.d.ts +20 -12
  117. package/dist/document/graview-template.d.ts.map +1 -1
  118. package/dist/document/graview-template.js +5 -44
  119. package/dist/document/graview-template.js.map +1 -1
  120. package/dist/document/index.d.ts +8 -8
  121. package/dist/document/index.d.ts.map +1 -1
  122. package/dist/document/index.js +5 -5
  123. package/dist/document/index.js.map +1 -1
  124. package/dist/document/instantiate-template.d.ts +14 -0
  125. package/dist/document/instantiate-template.d.ts.map +1 -0
  126. package/dist/document/instantiate-template.js +46 -0
  127. package/dist/document/instantiate-template.js.map +1 -0
  128. package/dist/document/rules.d.ts +2 -1
  129. package/dist/document/rules.d.ts.map +1 -1
  130. package/dist/document/rules.js +5 -1
  131. package/dist/document/rules.js.map +1 -1
  132. package/dist/document/schema.d.ts +46 -5
  133. package/dist/document/schema.d.ts.map +1 -1
  134. package/dist/document/schema.js +31 -3
  135. package/dist/document/schema.js.map +1 -1
  136. package/dist/document/template.d.ts +33 -2
  137. package/dist/document/template.d.ts.map +1 -1
  138. package/dist/document/template.js +156 -18
  139. package/dist/document/template.js.map +1 -1
  140. package/dist/document/thumbnail.d.ts +5 -4
  141. package/dist/document/thumbnail.d.ts.map +1 -1
  142. package/dist/document/thumbnail.js +29 -21
  143. package/dist/document/thumbnail.js.map +1 -1
  144. package/dist/document/to-document.d.ts.map +1 -1
  145. package/dist/document/to-document.js +6 -1
  146. package/dist/document/to-document.js.map +1 -1
  147. package/dist/document/views.d.ts +58 -3
  148. package/dist/document/views.d.ts.map +1 -1
  149. package/dist/document/views.js +356 -24
  150. package/dist/document/views.js.map +1 -1
  151. package/dist/figures.d.ts +3 -0
  152. package/dist/figures.d.ts.map +1 -0
  153. package/dist/figures.js +14 -0
  154. package/dist/figures.js.map +1 -0
  155. package/dist/index.d.ts +3 -12
  156. package/dist/index.d.ts.map +1 -1
  157. package/dist/index.js +2 -7
  158. package/dist/index.js.map +1 -1
  159. package/dist/mutations/types.d.ts +12 -0
  160. package/dist/mutations/types.d.ts.map +1 -1
  161. package/dist/places.d.ts +197 -0
  162. package/dist/places.d.ts.map +1 -0
  163. package/dist/places.js +376 -0
  164. package/dist/places.js.map +1 -0
  165. package/dist/scaffold/domain.js +1 -1
  166. package/dist/scaffold/from-template.d.ts.map +1 -1
  167. package/dist/scaffold/from-template.js +3 -3
  168. package/dist/scaffold/from-template.js.map +1 -1
  169. package/dist/scaffold/project.d.ts.map +1 -1
  170. package/dist/scaffold/project.js +13 -0
  171. package/dist/scaffold/project.js.map +1 -1
  172. package/dist/scaffold/ui.d.ts.map +1 -1
  173. package/dist/scaffold/ui.js +13 -10
  174. package/dist/scaffold/ui.js.map +1 -1
  175. package/dist/scene-districts.d.ts +5 -1
  176. package/dist/scene-districts.d.ts.map +1 -1
  177. package/dist/scene-districts.js +11 -4
  178. package/dist/scene-districts.js.map +1 -1
  179. package/dist/scene.d.ts +7 -0
  180. package/dist/scene.d.ts.map +1 -0
  181. package/dist/scene.js +16 -0
  182. package/dist/scene.js.map +1 -0
  183. package/dist/schema/define-node.d.ts +3 -0
  184. package/dist/schema/define-node.d.ts.map +1 -1
  185. package/dist/schema/define-node.js +3 -1
  186. package/dist/schema/define-node.js.map +1 -1
  187. package/dist/schema/types.d.ts +17 -0
  188. package/dist/schema/types.d.ts.map +1 -1
  189. package/dist/theme/types.d.ts +9 -0
  190. package/dist/theme/types.d.ts.map +1 -1
  191. package/dist/theme/types.js.map +1 -1
  192. package/dist/version.d.ts +1 -1
  193. package/dist/version.d.ts.map +1 -1
  194. package/dist/version.js +1 -1
  195. package/dist/version.js.map +1 -1
  196. package/dist/views/types.d.ts +19 -0
  197. package/dist/views/types.d.ts.map +1 -1
  198. package/dist/views/types.js +14 -0
  199. package/dist/views/types.js.map +1 -1
  200. package/package.json +21 -1
@@ -0,0 +1,187 @@
1
+ import type { AnyGraphNode, GraphReader } from "../index.js";
2
+ import type { AnySchema } from "../schema/schema.js";
3
+ import { valueWords } from "../schema/define-node.js";
4
+ import { type KindShape } from "./expr/evaluate.js";
5
+ import { type Expr } from "./expr/parse.js";
6
+ import type { FieldSpec } from "./schema.js";
7
+ import { type Money, type TemplatePart } from "./template.js";
8
+ import { LIST_AS, VIEW_FIELD_FORMATS, type FigureFormat, type ViewBlock, type ViewTone } from "./views.js";
9
+ type Parsed<T> = T | null;
10
+ type Tone = ViewTone | {
11
+ readonly expr: Parsed<Expr>;
12
+ };
13
+ /** A block, parsed: templates and expressions are read once, when the blocks are registered. */
14
+ export type SpecBlock = {
15
+ readonly t: "title";
16
+ readonly parts: Parsed<readonly TemplatePart[]>;
17
+ } | {
18
+ readonly t: "text" | "badge";
19
+ readonly parts: Parsed<readonly TemplatePart[]>;
20
+ readonly tone?: Tone;
21
+ } | {
22
+ readonly t: "field";
23
+ readonly field: string;
24
+ readonly as?: (typeof VIEW_FIELD_FORMATS)[number];
25
+ readonly currency?: string;
26
+ readonly label?: string;
27
+ }
28
+ /** A figure's and a meter's label is a template, read like a headline (FR-99). */
29
+ | {
30
+ readonly t: "progress";
31
+ readonly value: Parsed<Expr>;
32
+ readonly max: Parsed<Expr>;
33
+ readonly label?: Parsed<readonly TemplatePart[]>;
34
+ } | {
35
+ readonly t: "group";
36
+ readonly blocks: readonly SpecBlock[];
37
+ readonly direction: "row" | "column";
38
+ } | {
39
+ readonly t: "when";
40
+ readonly when: Parsed<Expr>;
41
+ readonly show: readonly SpecBlock[];
42
+ } | {
43
+ readonly t: "divider";
44
+ } | {
45
+ readonly t: "figure";
46
+ } | {
47
+ readonly t: "headline";
48
+ readonly parts: Parsed<readonly TemplatePart[]>;
49
+ } | {
50
+ readonly t: "number";
51
+ readonly value: Parsed<Expr>;
52
+ readonly as?: FigureFormat;
53
+ readonly currency?: string;
54
+ readonly label?: Parsed<readonly TemplatePart[]>;
55
+ } | {
56
+ readonly t: "list";
57
+ /** The records, in their order: a `sort` by a key is part of the expression, `sort(<list>, <key>, <direction>)`. */
58
+ readonly source: Parsed<Expr>;
59
+ /** A sort by a choice field's declared order, done after the expression. */
60
+ readonly choiceOrder?: string;
61
+ readonly limit?: number;
62
+ readonly group?: {
63
+ readonly by: string;
64
+ readonly headings: Readonly<Record<string, string>>;
65
+ };
66
+ readonly empty?: string;
67
+ readonly as: (typeof LIST_AS)[number];
68
+ };
69
+ /**
70
+ * Parse a spec's blocks. A spec `graview check` passed parses cleanly; a
71
+ * part that does not is said as "—", and a block outside the vocabulary is
72
+ * not drawn at all.
73
+ */
74
+ export declare function compileBlocks(blocks: readonly ViewBlock[] | readonly unknown[], depth?: number): readonly SpecBlock[];
75
+ /** Everything blocks read to say what they say about one record — or none. */
76
+ export interface BlockContext {
77
+ /** The record the blocks are about; null for blocks about no one record — the home, a blocks lens (FR-81). */
78
+ readonly node: AnyGraphNode | null;
79
+ /** The level a headline is said at here, and the first top-level one where it is the page's own heading (the home's h1). */
80
+ readonly heading?: number;
81
+ readonly firstHeading?: number;
82
+ /** The steps each expression may take; more for blocks that sweep whole kinds. */
83
+ readonly budget?: number;
84
+ /** The graph the blocks read: for a seat, what that seat may see. Without it, a hop says "—". */
85
+ readonly graph?: GraphReader;
86
+ /** The declaration, for the order a choice field's choices are declared in. */
87
+ readonly schema?: AnySchema;
88
+ readonly kinds: ReadonlyMap<string, KindShape>;
89
+ /** The kind's declared fields, in the document's words: which may be a link, which is a date. */
90
+ readonly fields: Readonly<Record<string, FieldSpec>>;
91
+ /** How the declaration says a field and its values (`display.labels`, `display.format`). */
92
+ readonly definition?: Parameters<typeof valueWords>[0];
93
+ readonly today: string;
94
+ /** The app's currency and locale (`brand.currency`, `brand.locale`): what money is said in where a block names no currency (FR-100). */
95
+ readonly money?: Money;
96
+ }
97
+ /** A block worked out: what a face draws and a describer says. `problem` is what could not be worked out, in words. */
98
+ export type ResolvedBlock = {
99
+ readonly t: "title";
100
+ readonly text: string;
101
+ readonly problem?: string;
102
+ } | {
103
+ readonly t: "text";
104
+ readonly text: string;
105
+ readonly tone?: ViewTone;
106
+ readonly problem?: string;
107
+ } | {
108
+ readonly t: "badge";
109
+ readonly text: string;
110
+ readonly tone: ViewTone;
111
+ readonly problem?: string;
112
+ } | {
113
+ readonly t: "field";
114
+ readonly field: string;
115
+ readonly label: string;
116
+ readonly text: string;
117
+ readonly href?: string;
118
+ readonly problem?: string;
119
+ } | {
120
+ readonly t: "progress";
121
+ readonly label: string;
122
+ readonly value?: number;
123
+ readonly max?: number;
124
+ readonly text: string;
125
+ readonly problem?: string;
126
+ } | {
127
+ readonly t: "group";
128
+ readonly direction: "row" | "column";
129
+ readonly blocks: readonly ResolvedBlock[];
130
+ }
131
+ /** A condition: what it shows, when it holds; nothing when it does not or cannot be judged. */
132
+ | {
133
+ readonly t: "when";
134
+ readonly shown: boolean;
135
+ readonly blocks: readonly ResolvedBlock[];
136
+ readonly problem?: string;
137
+ } | {
138
+ readonly t: "divider";
139
+ }
140
+ /** The kind's picture: drawn by a face, said by nothing. */
141
+ | {
142
+ readonly t: "figure";
143
+ } | {
144
+ readonly t: "headline";
145
+ readonly level: number;
146
+ readonly text: string;
147
+ readonly problem?: string;
148
+ } | {
149
+ readonly t: "number";
150
+ readonly text: string;
151
+ readonly label?: string;
152
+ readonly problem?: string;
153
+ } | ResolvedList;
154
+ /** A list worked out: its records in order, a few, under a heading per choice — read from the graph the context was handed. */
155
+ export interface ResolvedList {
156
+ readonly t: "list";
157
+ readonly as: "card" | "row";
158
+ /** True when its source could not be judged: drawn as "—". */
159
+ readonly failed: boolean;
160
+ /** Every record listed, in order, after the limit. */
161
+ readonly members: readonly AnyGraphNode[];
162
+ /** The groups, in their declared order, when the list is grouped. A choice no record here takes has no heading at all. */
163
+ readonly groups?: readonly {
164
+ readonly value: string | null;
165
+ readonly heading?: string;
166
+ readonly members: readonly AnyGraphNode[];
167
+ }[];
168
+ /** The level a group's heading is drawn at. */
169
+ readonly headingLevel: number;
170
+ /** What it says when it lists nothing, when it says anything. */
171
+ readonly empty?: string;
172
+ /** How many more there were, said "and N more" when no limit was asked for. */
173
+ readonly more: number;
174
+ readonly problem?: string;
175
+ }
176
+ /** Only http(s) is ever a link; anything else — `javascript:`, `data:`, a typo — is shown as words. */
177
+ export declare function safeHref(value: unknown): string | undefined;
178
+ /** A figure's words: a number in figures, money (in the currency it names, else the app's — FR-100) or a fraction as a percent. */
179
+ export declare function sayNumber(value: string | number | boolean, as: FigureFormat | undefined, currency: string | undefined, today: string, money?: Money): string;
180
+ /** Blocks worked out for one record — or for none. Pure: everything they read is in `ctx`. */
181
+ export declare function resolveBlocks(blocks: readonly SpecBlock[], ctx: BlockContext): readonly ResolvedBlock[];
182
+ /** Whether a block takes more than one line: a list, a headline or a figure, or a group or condition holding one. */
183
+ export declare function isTallBlock(block: SpecBlock): boolean;
184
+ /** A kind's declared fields in the document's words, read from its schema. */
185
+ export declare function fieldSpecsOf(schema: AnySchema, kind: string): Readonly<Record<string, FieldSpec>>;
186
+ export {};
187
+ //# sourceMappingURL=blocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/document/blocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,372 @@
1
+ import { fieldWords, valueWords } from "../schema/define-node.js";
2
+ import { evaluateExpr, NodeSet } from "./expr/evaluate.js";
3
+ import { parseExpr } from "./expr/parse.js";
4
+ import { EMPTY_GRAPH, formatMoney, formatValue, parseTemplate } from "./template.js";
5
+ import { fieldSpecOf } from "./to-document.js";
6
+ import { FIGURE_FORMATS, LIST_AS, MAX_LIST_LIMIT, VIEW_FIELD_FORMATS, VIEW_TONES } from "./views.js";
7
+ const safely = (f) => {
8
+ try {
9
+ return f();
10
+ }
11
+ catch {
12
+ return null;
13
+ }
14
+ };
15
+ const isTone = (value) => typeof value === "string" && VIEW_TONES.includes(value);
16
+ function toneOf(tone) {
17
+ if (tone === undefined)
18
+ return undefined;
19
+ if (isTone(tone))
20
+ return tone;
21
+ if (tone && typeof tone === "object" && typeof tone.expr === "string")
22
+ return { expr: safely(() => parseExpr(tone.expr)) };
23
+ // A tone outside the kit is the check's to refuse; drawn, it is quiet.
24
+ return "neutral";
25
+ }
26
+ const MAX_DEPTH = 4;
27
+ /**
28
+ * A LIST, PARSED (FR-81, FR-82). Its order by a key is the language's own
29
+ * `sort(…)` around its source, so it is judged under the same budget as
30
+ * every other expression; an order by a choice field's declared choices is
31
+ * done after, from the declaration.
32
+ */
33
+ function listOf(block) {
34
+ const source = typeof block["list"] === "string" ? safely(() => parseExpr(block["list"])) : null;
35
+ const sort = block["sort"];
36
+ const by = typeof sort === "string" ? sort : sort && typeof sort === "object" && typeof sort.by === "string" ? sort.by : undefined;
37
+ const direction = sort && typeof sort === "object" ? sort.direction : undefined;
38
+ let ordered = source;
39
+ let choiceOrder;
40
+ if (source && by !== undefined) {
41
+ if (direction === "choices")
42
+ choiceOrder = by;
43
+ else {
44
+ const key = safely(() => parseExpr(by));
45
+ ordered = key ? { t: "call", fn: "sort", args: [source, key, { t: "lit", value: direction === "desc" ? "desc" : "asc", at: 0 }], at: 0 } : null;
46
+ }
47
+ }
48
+ const limit = typeof block["limit"] === "number" && Number.isInteger(block["limit"]) && block["limit"] >= 1 ? Math.min(block["limit"], MAX_LIST_LIMIT) : undefined;
49
+ const group = block["group"];
50
+ const groupBy = typeof group === "string" ? group : group && typeof group === "object" && typeof group.by === "string" ? group.by : undefined;
51
+ const headings = group && typeof group === "object" && group.headings && typeof group.headings === "object" ? group.headings : {};
52
+ return {
53
+ t: "list",
54
+ source: ordered,
55
+ ...(choiceOrder ? { choiceOrder } : {}),
56
+ ...(limit ? { limit } : {}),
57
+ ...(groupBy ? { group: { by: groupBy, headings: Object.fromEntries(Object.entries(headings).filter((entry) => typeof entry[1] === "string")) } } : {}),
58
+ ...(typeof block["empty"] === "string" ? { empty: block["empty"] } : {}),
59
+ as: block["as"] === "card" ? "card" : "row",
60
+ };
61
+ }
62
+ /**
63
+ * Parse a spec's blocks. A spec `graview check` passed parses cleanly; a
64
+ * part that does not is said as "—", and a block outside the vocabulary is
65
+ * not drawn at all.
66
+ */
67
+ export function compileBlocks(blocks, depth = 1) {
68
+ if (!Array.isArray(blocks) || depth > MAX_DEPTH)
69
+ return [];
70
+ return blocks.flatMap((raw) => {
71
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
72
+ return [];
73
+ const block = raw;
74
+ const template = (source) => (typeof source === "string" ? safely(() => parseTemplate(source)) : null);
75
+ const expr = (source) => (typeof source === "string" ? safely(() => parseExpr(source)) : null);
76
+ const tone = toneOf(block["tone"]);
77
+ const label = typeof block["label"] === "string" ? block["label"] : undefined;
78
+ const has = (key) => Object.prototype.hasOwnProperty.call(block, key);
79
+ const currency = typeof block["currency"] === "string" && /^[A-Z]{3}$/.test(block["currency"]) ? block["currency"] : undefined;
80
+ // A list first: its `group` is how it is grouped, not a group block.
81
+ if (has("list"))
82
+ return [listOf(block)];
83
+ if (has("headline"))
84
+ return [{ t: "headline", parts: template(block["headline"]) }];
85
+ if (has("figure") && typeof block["figure"] === "string") {
86
+ const as = FIGURE_FORMATS.includes(block["as"]) ? block["as"] : undefined;
87
+ return [{ t: "number", value: expr(block["figure"]), ...(as ? { as } : {}), ...(currency ? { currency } : {}), ...(label ? { label: template(label) } : {}) }];
88
+ }
89
+ if (has("title"))
90
+ return [{ t: "title", parts: template(block["title"]) }];
91
+ if (has("text"))
92
+ return [{ t: "text", parts: template(block["text"]), ...(tone ? { tone } : {}) }];
93
+ if (has("badge"))
94
+ return [{ t: "badge", parts: template(block["badge"]), ...(tone ? { tone } : {}) }];
95
+ if (has("field")) {
96
+ const as = VIEW_FIELD_FORMATS.includes(block["as"]) ? block["as"] : undefined;
97
+ return [{ t: "field", field: String(block["field"]), ...(as ? { as } : {}), ...(currency ? { currency } : {}), ...(label ? { label } : {}) }];
98
+ }
99
+ if (has("progress")) {
100
+ const p = (block["progress"] ?? {});
101
+ return [{ t: "progress", value: expr(p.value), max: expr(p.max), ...(label ? { label: template(label) } : {}) }];
102
+ }
103
+ if (has("group"))
104
+ return [{ t: "group", blocks: compileBlocks(block["group"], depth + 1), direction: block["direction"] === "row" ? "row" : "column" }];
105
+ if (has("when"))
106
+ return [{ t: "when", when: expr(block["when"]), show: compileBlocks(block["show"], depth + 1) }];
107
+ if (has("divider"))
108
+ return [{ t: "divider" }];
109
+ if (has("figure"))
110
+ return [{ t: "figure" }];
111
+ return [];
112
+ });
113
+ }
114
+ const NOTHING = "—";
115
+ /** The allowance a card's template gets: a card is drawn many times a frame. */
116
+ const BUDGET = 500;
117
+ function judge(expr, ctx) {
118
+ if (!expr)
119
+ return { ok: false, problem: "an expression that does not parse" };
120
+ try {
121
+ return { ok: true, value: evaluateExpr(expr, { graph: ctx.graph ?? EMPTY_GRAPH, subject: ctx.node, kinds: ctx.kinds, today: ctx.today, budget: ctx.budget ?? BUDGET }) };
122
+ }
123
+ catch (e) {
124
+ return { ok: false, problem: e instanceof Error ? e.message : String(e) };
125
+ }
126
+ }
127
+ /** A template's words, each part judged as `renderTemplate` judges it — and what could not be, said. */
128
+ function say(parts, ctx) {
129
+ if (!parts)
130
+ return { text: NOTHING, problem: "a template that does not parse" };
131
+ let problem;
132
+ const text = parts
133
+ .map((part) => {
134
+ if (part.text !== undefined)
135
+ return part.text;
136
+ const judged = judge(part.expr ?? null, ctx);
137
+ if (!judged.ok) {
138
+ problem ??= `{${part.source ?? ""}}: ${judged.problem}`;
139
+ return NOTHING;
140
+ }
141
+ return formatValue(judged.value, part.format, ctx.today, part.formatArgs, ctx.money);
142
+ })
143
+ .join("");
144
+ return problem ? { text, problem } : { text };
145
+ }
146
+ function toneWord(tone, ctx) {
147
+ if (tone === undefined)
148
+ return undefined;
149
+ if (typeof tone === "string")
150
+ return tone;
151
+ const judged = judge(tone.expr, ctx);
152
+ return judged.ok && isTone(judged.value) ? judged.value : "neutral";
153
+ }
154
+ /** Only http(s) is ever a link; anything else — `javascript:`, `data:`, a typo — is shown as words. */
155
+ export function safeHref(value) {
156
+ if (typeof value !== "string")
157
+ return undefined;
158
+ try {
159
+ const url = new URL(value);
160
+ return url.protocol === "http:" || url.protocol === "https:" ? url.href : undefined;
161
+ }
162
+ catch {
163
+ return undefined;
164
+ }
165
+ }
166
+ function fieldText(key, value, ctx, as, currency) {
167
+ if (value === null || value === undefined || value === "")
168
+ return NOTHING;
169
+ if (typeof value === "boolean")
170
+ return value ? "yes" : "no";
171
+ if (as)
172
+ return formatValue(value, as, ctx.today, [], currency ? { ...ctx.money, currency } : ctx.money);
173
+ const spec = ctx.fields[key];
174
+ if (ctx.definition?.display?.format?.[key])
175
+ return valueWords(ctx.definition, key, value);
176
+ if (spec?.type === "date")
177
+ return formatValue(value, "date", ctx.today);
178
+ if (spec?.type === "enum" && typeof value === "string")
179
+ return valueWords(ctx.definition, key, value);
180
+ if (typeof value === "number")
181
+ return value.toLocaleString("en-US");
182
+ if (Array.isArray(value))
183
+ return value.map((one) => String(one)).join(", ");
184
+ if (typeof value === "object")
185
+ return NOTHING;
186
+ return String(value);
187
+ }
188
+ /** A figure's words: a number in figures, money (in the currency it names, else the app's — FR-100) or a fraction as a percent. */
189
+ export function sayNumber(value, as, currency, today, money) {
190
+ if (typeof value !== "number")
191
+ return String(value);
192
+ if (as === "money")
193
+ return formatMoney(value, currency ? { ...money, currency } : money);
194
+ if (as === "percent")
195
+ return formatValue(value, as, today);
196
+ return value.toLocaleString("en-US", { maximumFractionDigits: 2 });
197
+ }
198
+ const withProblem = (block, problem) => (problem ? { ...block, problem } : block);
199
+ function resolveOne(block, ctx, first) {
200
+ switch (block.t) {
201
+ case "title": {
202
+ const said = say(block.parts, ctx);
203
+ return withProblem({ t: "title", text: said.text }, said.problem);
204
+ }
205
+ case "text": {
206
+ const said = say(block.parts, ctx);
207
+ const tone = toneWord(block.tone, ctx);
208
+ return withProblem({ t: "text", text: said.text, ...(tone ? { tone } : {}) }, said.problem);
209
+ }
210
+ case "badge": {
211
+ const said = say(block.parts, ctx);
212
+ return withProblem({ t: "badge", text: said.text, tone: toneWord(block.tone, ctx) ?? "neutral" }, said.problem);
213
+ }
214
+ case "field": {
215
+ const label = block.label ?? fieldWords(ctx.definition, block.field);
216
+ // About no one record, there is no field to show (the check says so).
217
+ if (!ctx.node)
218
+ return { t: "field", field: block.field, label, text: NOTHING, problem: `"${block.field}" names a field, and these blocks are about no one record` };
219
+ // A computed field is worked out like any expression, under the same budget (FR-83); else an OWN field only: a name on the prototype is not a field of the record.
220
+ const worked = ctx.kinds.get(ctx.node.kind)?.computed?.has(block.field);
221
+ let raw;
222
+ let problem;
223
+ if (worked) {
224
+ const judged = judge({ t: "ident", name: block.field, at: 0 }, ctx);
225
+ if (!judged.ok)
226
+ problem = judged.problem;
227
+ else
228
+ raw = judged.value !== null && typeof judged.value === "object" ? formatValue(judged.value, undefined, ctx.today) : judged.value;
229
+ }
230
+ else
231
+ raw = Object.prototype.hasOwnProperty.call(ctx.node, block.field) ? ctx.node[block.field] : undefined;
232
+ const href = ctx.fields[block.field]?.type === "url" && block.as === undefined ? safeHref(raw) : undefined;
233
+ const text = safely(() => fieldText(block.field, raw, ctx, block.as, block.currency)) ?? NOTHING;
234
+ return withProblem({ t: "field", field: block.field, label, text, ...(href ? { href } : {}) }, problem);
235
+ }
236
+ case "progress": {
237
+ const value = judge(block.value, ctx);
238
+ const max = judge(block.max, ctx);
239
+ const said = block.label ? say(block.label, ctx) : { text: "Progress" };
240
+ const label = said.text;
241
+ const problem = !value.ok ? value.problem : !max.ok ? max.problem : said.problem;
242
+ if (!(value.ok && max.ok && typeof value.value === "number" && typeof max.value === "number" && Number.isFinite(value.value) && Number.isFinite(max.value) && max.value > 0)) {
243
+ return withProblem({ t: "progress", label, text: NOTHING }, problem);
244
+ }
245
+ return withProblem({ t: "progress", label, value: value.value, max: max.value, text: `${formatValue(value.value, undefined, ctx.today)} of ${formatValue(max.value, undefined, ctx.today)}` }, problem);
246
+ }
247
+ case "group":
248
+ return { t: "group", direction: block.direction, blocks: resolveBlocks(block.blocks, ctx) };
249
+ case "when": {
250
+ // A condition that cannot be judged hides what it guards, like a rule's `when`.
251
+ const judged = judge(block.when, ctx);
252
+ const shown = judged.ok && judged.value === true;
253
+ return withProblem({ t: "when", shown, blocks: shown ? resolveBlocks(block.show, ctx) : [] }, judged.ok ? undefined : judged.problem);
254
+ }
255
+ case "divider":
256
+ return { t: "divider" };
257
+ case "figure":
258
+ return { t: "figure" };
259
+ case "headline": {
260
+ const said = say(block.parts, ctx);
261
+ const level = Math.min(6, Math.max(1, (first ? ctx.firstHeading : undefined) ?? ctx.heading ?? 3));
262
+ return withProblem({ t: "headline", level, text: said.text }, said.problem);
263
+ }
264
+ case "number": {
265
+ const judged = judge(block.value, ctx);
266
+ const text = !judged.ok || judged.value === null || typeof judged.value === "object" ? NOTHING : sayNumber(judged.value, block.as, block.currency, ctx.today, ctx.money);
267
+ const said = block.label ? say(block.label, ctx) : undefined;
268
+ return withProblem({ t: "number", text, ...(said ? { label: said.text } : {}) }, judged.ok ? said?.problem : judged.problem);
269
+ }
270
+ case "list":
271
+ return resolveList(block, ctx);
272
+ }
273
+ }
274
+ /** Blocks worked out for one record — or for none. Pure: everything they read is in `ctx`. */
275
+ export function resolveBlocks(blocks, ctx) {
276
+ const first = blocks.findIndex((block) => block.t === "headline");
277
+ return blocks.map((block, i) => resolveOne(block, ctx, i === first));
278
+ }
279
+ /**
280
+ * A LIST OF RECORDS: the records its expression names — the kinds swept,
281
+ * or a walk from the record (`out('includes')`, `in('answers')`) — in their
282
+ * order, a few, grouped by a choice in its declared order. Read from the
283
+ * graph the context is handed, which for a seat is what that seat may see
284
+ * (FR-55): a record it may not see is not listed, not counted, and opens no
285
+ * group of its own.
286
+ */
287
+ function resolveList(block, ctx) {
288
+ const headingLevel = Math.min(6, (ctx.heading ?? 3) + 1);
289
+ const judged = judge(block.source, ctx);
290
+ if (!judged.ok)
291
+ return { t: "list", as: block.as, failed: true, members: [], headingLevel, more: 0, problem: judged.problem };
292
+ const value = judged.value;
293
+ let nodes = value instanceof NodeSet ? value.nodes : value !== null && typeof value === "object" && !Array.isArray(value) ? [value] : [];
294
+ if (block.choiceOrder && ctx.schema)
295
+ nodes = inChoiceOrder(nodes, block.choiceOrder, ctx.schema);
296
+ const all = nodes.length;
297
+ nodes = nodes.slice(0, block.limit ?? MAX_LIST_LIMIT);
298
+ const more = block.limit === undefined ? all - nodes.length : 0;
299
+ return {
300
+ t: "list",
301
+ as: block.as,
302
+ failed: false,
303
+ members: nodes,
304
+ ...(block.group && ctx.schema && nodes.length > 0 ? { groups: groupsOf(nodes, block.group, ctx.schema) } : {}),
305
+ headingLevel,
306
+ ...(nodes.length === 0 && block.empty ? { empty: block.empty } : {}),
307
+ more,
308
+ };
309
+ }
310
+ /** A choice field's choices on a kind, in the order they are declared; empty when it is not one. */
311
+ function choicesOf(schema, kind, field) {
312
+ const shape = schema.tryDefinition(kind)?.fields?.shape;
313
+ const spec = shape && Object.prototype.hasOwnProperty.call(shape, field) ? fieldSpecOf(shape[field]) : undefined;
314
+ return spec?.type === "enum" ? (spec.options ?? []) : [];
315
+ }
316
+ const valueOf = (node, field) => (Object.prototype.hasOwnProperty.call(node, field) ? node[field] : undefined);
317
+ /** Records in the order a choice field's choices are declared; a value among none of them last, in the order given. */
318
+ function inChoiceOrder(nodes, field, schema) {
319
+ const rank = (node) => {
320
+ const at = choicesOf(schema, node.kind, field).indexOf(String(valueOf(node, field)));
321
+ return at < 0 ? Number.MAX_SAFE_INTEGER : at;
322
+ };
323
+ return nodes.map((node, i) => ({ node, i, rank: rank(node) })).sort((a, b) => a.rank - b.rank || a.i - b.i).map((one) => one.node);
324
+ }
325
+ const sentenceCase = (words) => words.charAt(0).toUpperCase() + words.slice(1);
326
+ /**
327
+ * The records under a heading per choice, in the declared order; a choice
328
+ * with no record here has no heading at all, so a heading never says that
329
+ * something the reader cannot see exists. A value among no choice goes
330
+ * last, unheaded.
331
+ */
332
+ function groupsOf(nodes, group, schema) {
333
+ const order = [];
334
+ for (const node of nodes)
335
+ for (const choice of choicesOf(schema, node.kind, group.by))
336
+ if (!order.includes(choice))
337
+ order.push(choice);
338
+ const out = [];
339
+ for (const choice of order) {
340
+ const members = nodes.filter((node) => valueOf(node, group.by) === choice);
341
+ if (members.length === 0)
342
+ continue;
343
+ const definition = schema.tryDefinition(members[0].kind);
344
+ out.push({ value: choice, heading: group.headings[choice] ?? sentenceCase(valueWords(definition, group.by, choice)), members });
345
+ }
346
+ const rest = nodes.filter((node) => !order.includes(String(valueOf(node, group.by))));
347
+ if (rest.length > 0)
348
+ out.push({ value: null, members: rest });
349
+ return out;
350
+ }
351
+ /** Whether a block takes more than one line: a list, a headline or a figure, or a group or condition holding one. */
352
+ export function isTallBlock(block) {
353
+ if (block.t === "list" || block.t === "headline" || block.t === "number")
354
+ return true;
355
+ if (block.t === "group")
356
+ return block.blocks.some(isTallBlock);
357
+ if (block.t === "when")
358
+ return block.show.some(isTallBlock);
359
+ return false;
360
+ }
361
+ /** A kind's declared fields in the document's words, read from its schema. */
362
+ export function fieldSpecsOf(schema, kind) {
363
+ const shape = schema.tryDefinition(kind)?.fields?.shape ?? {};
364
+ const read = {};
365
+ for (const [key, field] of Object.entries(shape)) {
366
+ const spec = fieldSpecOf(field);
367
+ if (spec)
368
+ read[key] = spec;
369
+ }
370
+ return read;
371
+ }
372
+ //# sourceMappingURL=blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/document/blocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type CompiledDocument, type CompileOptions, type RefusedDocument } from "./compile.js";
2
+ /**
3
+ * A document, compiled and judged: its own sentences, then the framework's
4
+ * `checkApp` over the app it compiles to — what a host does with a document
5
+ * it is handed, and what `graview check` says of one.
6
+ */
7
+ export declare function compileDocument(raw: unknown, options?: CompileOptions): CompiledDocument | RefusedDocument;
8
+ //# sourceMappingURL=compile-checked.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile-checked.d.ts","sourceRoot":"","sources":["../../src/document/compile-checked.ts"],"names":[],"mappings":"AACA,OAAO,EAA+D,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAW7J;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,cAAmB,GAAG,gBAAgB,GAAG,eAAe,CAe9G"}