@graview/core 0.1.10 → 0.1.14

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 (225) hide show
  1. package/README.md +41 -9
  2. package/dist/address.d.ts +31 -0
  3. package/dist/address.d.ts.map +1 -0
  4. package/dist/address.js +53 -0
  5. package/dist/address.js.map +1 -0
  6. package/dist/app.d.ts +1 -1
  7. package/dist/app.d.ts.map +1 -1
  8. package/dist/arrange.d.ts +13 -183
  9. package/dist/arrange.d.ts.map +1 -1
  10. package/dist/arrange.js +12 -470
  11. package/dist/arrange.js.map +1 -1
  12. package/dist/arrangement.d.ts +169 -0
  13. package/dist/arrangement.d.ts.map +1 -0
  14. package/dist/arrangement.js +220 -0
  15. package/dist/arrangement.js.map +1 -0
  16. package/dist/arranging.d.ts +28 -0
  17. package/dist/arranging.d.ts.map +1 -0
  18. package/dist/arranging.js +264 -0
  19. package/dist/arranging.js.map +1 -0
  20. package/dist/blocks.d.ts +5 -0
  21. package/dist/blocks.d.ts.map +1 -0
  22. package/dist/blocks.js +14 -0
  23. package/dist/blocks.js.map +1 -0
  24. package/dist/capabilities.js +1 -1
  25. package/dist/capabilities.js.map +1 -1
  26. package/dist/check.d.ts +8 -0
  27. package/dist/check.d.ts.map +1 -0
  28. package/dist/check.js +19 -0
  29. package/dist/check.js.map +1 -0
  30. package/dist/cli/check/brand.d.ts.map +1 -1
  31. package/dist/cli/check/brand.js +21 -0
  32. package/dist/cli/check/brand.js.map +1 -1
  33. package/dist/cli/check/hidden-reads.d.ts +4 -0
  34. package/dist/cli/check/hidden-reads.d.ts.map +1 -0
  35. package/dist/cli/check/hidden-reads.js +183 -0
  36. package/dist/cli/check/hidden-reads.js.map +1 -0
  37. package/dist/cli/check/index.d.ts +1 -0
  38. package/dist/cli/check/index.d.ts.map +1 -1
  39. package/dist/cli/check/index.js +1 -0
  40. package/dist/cli/check/index.js.map +1 -1
  41. package/dist/cli/check/lenses.d.ts.map +1 -1
  42. package/dist/cli/check/lenses.js +29 -1
  43. package/dist/cli/check/lenses.js.map +1 -1
  44. package/dist/cli/check/views.d.ts.map +1 -1
  45. package/dist/cli/check/views.js +5 -1
  46. package/dist/cli/check/views.js.map +1 -1
  47. package/dist/cli/check.d.ts.map +1 -1
  48. package/dist/cli/check.js +2 -1
  49. package/dist/cli/check.js.map +1 -1
  50. package/dist/cli/create.d.ts.map +1 -1
  51. package/dist/cli/create.js +1 -1
  52. package/dist/cli/create.js.map +1 -1
  53. package/dist/cli/describe.d.ts.map +1 -1
  54. package/dist/cli/describe.js +23 -1
  55. package/dist/cli/describe.js.map +1 -1
  56. package/dist/cli/docs.js +1 -1
  57. package/dist/cli/docs.js.map +1 -1
  58. package/dist/cli/index.d.ts +1 -1
  59. package/dist/cli/index.d.ts.map +1 -1
  60. package/dist/cli/index.js +2 -1
  61. package/dist/cli/index.js.map +1 -1
  62. package/dist/columns.d.ts +105 -0
  63. package/dist/columns.d.ts.map +1 -0
  64. package/dist/columns.js +143 -0
  65. package/dist/columns.js.map +1 -0
  66. package/dist/conformance/fixtures.d.ts.map +1 -1
  67. package/dist/conformance/fixtures.js +19 -1
  68. package/dist/conformance/fixtures.js.map +1 -1
  69. package/dist/conformance/index.js +1 -1
  70. package/dist/conformance/index.js.map +1 -1
  71. package/dist/describe.d.ts +2 -0
  72. package/dist/describe.d.ts.map +1 -1
  73. package/dist/describe.js +7 -0
  74. package/dist/describe.js.map +1 -1
  75. package/dist/document/act-findings.d.ts +5 -0
  76. package/dist/document/act-findings.d.ts.map +1 -0
  77. package/dist/document/act-findings.js +84 -0
  78. package/dist/document/act-findings.js.map +1 -0
  79. package/dist/document/blocks.d.ts +11 -6
  80. package/dist/document/blocks.d.ts.map +1 -1
  81. package/dist/document/blocks.js +21 -31
  82. package/dist/document/blocks.js.map +1 -1
  83. package/dist/document/compile-checked.d.ts +8 -0
  84. package/dist/document/compile-checked.d.ts.map +1 -0
  85. package/dist/document/compile-checked.js +43 -0
  86. package/dist/document/compile-checked.js.map +1 -0
  87. package/dist/document/compile.d.ts +22 -9
  88. package/dist/document/compile.d.ts.map +1 -1
  89. package/dist/document/compile.js +116 -52
  90. package/dist/document/compile.js.map +1 -1
  91. package/dist/document/describe-coverage.d.ts +37 -0
  92. package/dist/document/describe-coverage.d.ts.map +1 -0
  93. package/dist/document/describe-coverage.js +162 -0
  94. package/dist/document/describe-coverage.js.map +1 -0
  95. package/dist/document/describe-place.d.ts.map +1 -1
  96. package/dist/document/describe-place.js +43 -1
  97. package/dist/document/describe-place.js.map +1 -1
  98. package/dist/document/diff.d.ts +5 -0
  99. package/dist/document/diff.d.ts.map +1 -1
  100. package/dist/document/diff.js +18 -4
  101. package/dist/document/diff.js.map +1 -1
  102. package/dist/document/edit.d.ts +1 -1
  103. package/dist/document/edit.d.ts.map +1 -1
  104. package/dist/document/edit.js +155 -10
  105. package/dist/document/edit.js.map +1 -1
  106. package/dist/document/expr/analyze.d.ts.map +1 -1
  107. package/dist/document/expr/analyze.js +2 -1
  108. package/dist/document/expr/analyze.js.map +1 -1
  109. package/dist/document/expr/evaluate.d.ts.map +1 -1
  110. package/dist/document/expr/evaluate.js +26 -2
  111. package/dist/document/expr/evaluate.js.map +1 -1
  112. package/dist/document/expr/parse.d.ts +2 -1
  113. package/dist/document/expr/parse.d.ts.map +1 -1
  114. package/dist/document/expr/parse.js +6 -3
  115. package/dist/document/expr/parse.js.map +1 -1
  116. package/dist/document/expr/print.d.ts.map +1 -1
  117. package/dist/document/expr/print.js +4 -2
  118. package/dist/document/expr/print.js.map +1 -1
  119. package/dist/document/far-end.d.ts +15 -0
  120. package/dist/document/far-end.d.ts.map +1 -0
  121. package/dist/document/far-end.js +26 -0
  122. package/dist/document/far-end.js.map +1 -0
  123. package/dist/document/graview-template.d.ts +20 -12
  124. package/dist/document/graview-template.d.ts.map +1 -1
  125. package/dist/document/graview-template.js +5 -44
  126. package/dist/document/graview-template.js.map +1 -1
  127. package/dist/document/index.d.ts +5 -11
  128. package/dist/document/index.d.ts.map +1 -1
  129. package/dist/document/index.js +3 -6
  130. package/dist/document/index.js.map +1 -1
  131. package/dist/document/instantiate-template.d.ts +14 -0
  132. package/dist/document/instantiate-template.d.ts.map +1 -0
  133. package/dist/document/instantiate-template.js +46 -0
  134. package/dist/document/instantiate-template.js.map +1 -0
  135. package/dist/document/migrate.d.ts.map +1 -1
  136. package/dist/document/migrate.js +7 -5
  137. package/dist/document/migrate.js.map +1 -1
  138. package/dist/document/range.d.ts +17 -0
  139. package/dist/document/range.d.ts.map +1 -0
  140. package/dist/document/range.js +46 -0
  141. package/dist/document/range.js.map +1 -0
  142. package/dist/document/schema.d.ts +34 -2
  143. package/dist/document/schema.d.ts.map +1 -1
  144. package/dist/document/schema.js +25 -1
  145. package/dist/document/schema.js.map +1 -1
  146. package/dist/document/template.d.ts +18 -2
  147. package/dist/document/template.d.ts.map +1 -1
  148. package/dist/document/template.js +27 -9
  149. package/dist/document/template.js.map +1 -1
  150. package/dist/document/thumbnail.d.ts +26 -4
  151. package/dist/document/thumbnail.d.ts.map +1 -1
  152. package/dist/document/thumbnail.js +165 -50
  153. package/dist/document/thumbnail.js.map +1 -1
  154. package/dist/document/to-document.d.ts.map +1 -1
  155. package/dist/document/to-document.js +18 -2
  156. package/dist/document/to-document.js.map +1 -1
  157. package/dist/document/views.d.ts +11 -0
  158. package/dist/document/views.d.ts.map +1 -1
  159. package/dist/document/views.js +76 -12
  160. package/dist/document/views.js.map +1 -1
  161. package/dist/figures.d.ts +3 -0
  162. package/dist/figures.d.ts.map +1 -0
  163. package/dist/figures.js +14 -0
  164. package/dist/figures.js.map +1 -0
  165. package/dist/index.d.ts +3 -13
  166. package/dist/index.d.ts.map +1 -1
  167. package/dist/index.js +3 -9
  168. package/dist/index.js.map +1 -1
  169. package/dist/mutations/define-mutation.d.ts.map +1 -1
  170. package/dist/mutations/define-mutation.js +9 -1
  171. package/dist/mutations/define-mutation.js.map +1 -1
  172. package/dist/mutations/derive-edits.d.ts +8 -0
  173. package/dist/mutations/derive-edits.d.ts.map +1 -1
  174. package/dist/mutations/derive-edits.js +30 -7
  175. package/dist/mutations/derive-edits.js.map +1 -1
  176. package/dist/mutations/form.d.ts +2 -0
  177. package/dist/mutations/form.d.ts.map +1 -1
  178. package/dist/mutations/form.js +1 -0
  179. package/dist/mutations/form.js.map +1 -1
  180. package/dist/mutations/node-ref.d.ts +4 -1
  181. package/dist/mutations/node-ref.d.ts.map +1 -1
  182. package/dist/mutations/node-ref.js +6 -0
  183. package/dist/mutations/node-ref.js.map +1 -1
  184. package/dist/mutations/types.d.ts +28 -0
  185. package/dist/mutations/types.d.ts.map +1 -1
  186. package/dist/places.d.ts +11 -0
  187. package/dist/places.d.ts.map +1 -1
  188. package/dist/places.js +19 -1
  189. package/dist/places.js.map +1 -1
  190. package/dist/refusal.d.ts.map +1 -1
  191. package/dist/refusal.js +4 -0
  192. package/dist/refusal.js.map +1 -1
  193. package/dist/refused.d.ts +20 -0
  194. package/dist/refused.d.ts.map +1 -0
  195. package/dist/refused.js +24 -0
  196. package/dist/refused.js.map +1 -0
  197. package/dist/scaffold/domain.js +1 -1
  198. package/dist/scaffold/from-template.d.ts.map +1 -1
  199. package/dist/scaffold/from-template.js +3 -3
  200. package/dist/scaffold/from-template.js.map +1 -1
  201. package/dist/scaffold/project.d.ts.map +1 -1
  202. package/dist/scaffold/project.js +7 -0
  203. package/dist/scaffold/project.js.map +1 -1
  204. package/dist/scene-districts.d.ts +5 -1
  205. package/dist/scene-districts.d.ts.map +1 -1
  206. package/dist/scene-districts.js +11 -4
  207. package/dist/scene-districts.js.map +1 -1
  208. package/dist/scene.d.ts +7 -0
  209. package/dist/scene.d.ts.map +1 -0
  210. package/dist/scene.js +16 -0
  211. package/dist/scene.js.map +1 -0
  212. package/dist/search.d.ts +1 -1
  213. package/dist/search.d.ts.map +1 -1
  214. package/dist/search.js +1 -1
  215. package/dist/search.js.map +1 -1
  216. package/dist/theme/derive.d.ts.map +1 -1
  217. package/dist/theme/derive.js +5 -4
  218. package/dist/theme/derive.js.map +1 -1
  219. package/dist/theme/types.d.ts +9 -0
  220. package/dist/theme/types.d.ts.map +1 -1
  221. package/dist/theme/types.js +5 -0
  222. package/dist/theme/types.js.map +1 -1
  223. package/dist/version.d.ts +1 -1
  224. package/dist/version.js +1 -1
  225. package/package.json +21 -1
package/dist/arrange.js CHANGED
@@ -1,473 +1,15 @@
1
- import { describeArg } from "./mutations/node-ref.js";
2
- import { matchNode, parseQuery } from "./search.js";
3
- import { humaniseField, isCurrent, labelOf, tellApart } from "./schema/define-node.js";
4
- export const NO_ARRANGEMENT = {};
5
- /** Whether a lens offers a part, given what it declared. Everything is on unless declined. */
6
- export function arrangeAllows(option, part) {
7
- if (option === undefined || option === true)
8
- return true;
9
- if (option === false)
10
- return false;
11
- return option[part] !== false;
12
- }
13
- /** The words for a field, after the declaration's own `display.labels`. */
14
- function readingOf(definition, field) {
15
- return definition.display?.labels?.[field] ?? humaniseField(field);
16
- }
17
- function fieldType(schema) {
18
- const shape = describeArg(schema);
19
- switch (shape.type) {
20
- case "text":
21
- case "date":
22
- case "number":
23
- case "boolean":
24
- case "choice":
25
- return shape.type;
26
- default:
27
- return undefined;
28
- }
29
- }
30
- /** The edges this kind takes part in, from either end, with how each reads from here. */
31
- export function edgesOf(schema, kind) {
32
- const offers = new Map();
33
- const definition = schema.tryDefinition(kind);
34
- for (const [edgeKind, declared] of Object.entries(definition?.edges ?? {})) {
35
- offers.set(edgeKind, {
36
- key: edgeKind,
37
- label: declared.description ? capitalise(declared.description) : humaniseField(edgeKind),
38
- about: "edge",
39
- far: declared.to === "*" ? [...schema.kinds] : [...declared.to],
40
- });
41
- }
42
- for (const other of schema.definitions) {
43
- if (other.kind === kind)
44
- continue;
45
- for (const [edgeKind, declared] of Object.entries(other.edges ?? {})) {
46
- if (offers.has(edgeKind))
47
- continue;
48
- if (declared.to !== "*" && !declared.to.includes(kind))
49
- continue;
50
- offers.set(edgeKind, {
51
- key: edgeKind,
52
- label: declared.inverse ? capitalise(declared.inverse) : humaniseField(edgeKind),
53
- about: "edge",
54
- far: [other.kind],
55
- });
56
- }
57
- }
58
- return [...offers.values()];
59
- }
60
- const capitalise = (text) => text.charAt(0).toUpperCase() + text.slice(1);
61
- const IS_WORDS = ["current", "past", "any", "flagged", "clear"];
62
1
  /**
63
- * Whether a condition names one of a kind's RETIRED states — `status:demo`
64
- * where demos are behind the horizon — which is asking for the past by
65
- * name. The search box and the list page both left the past out for it and
66
- * found nothing.
67
- */
68
- export function asksForThePast(definition, conditions) {
69
- const lifecycle = definition?.lifecycle;
70
- if (!lifecycle || lifecycle.retired === "date")
71
- return false;
72
- const retired = lifecycle.retired.map(String);
73
- return conditions.some((condition) => condition.key === lifecycle.field && retired.includes(condition.value));
74
- }
75
- /**
76
- * What a kind can be arranged by, derived from its declaration alone.
2
+ * `@graview/core/arrange` — WHAT A KIND CAN BE ARRANGED BY, AND ARRANGING IT.
77
3
  *
78
- * Sorts: the label, every field with a scalar type, every edge (by the far
79
- * end's label). Filters: boolean and choice fields by value, date fields by
80
- * before/after/on, every edge by a node or by having one at all, and `is`
81
- * for the lifecycle and the standing. Groups: boolean and choice fields,
82
- * date fields by day, week or month, and every edge by its far end. A field
83
- * the declaration hides is not offered — an ordering key is not a thing a
84
- * person groups by.
85
- */
86
- export function arrangeable(schema, kind) {
87
- const definition = schema.tryDefinition(kind);
88
- if (!definition)
89
- return { kind, sorts: [], filters: [], groups: [] };
90
- const hidden = new Set(definition.display?.hide ?? []);
91
- const shape = (definition.fields.shape ?? {});
92
- const sorts = [{ key: "label", label: "Name", about: "label", type: "text" }];
93
- const filters = [];
94
- const groups = [];
95
- for (const [field, fieldSchema] of Object.entries(shape)) {
96
- if (field === "id" || field === "kind" || field === "label" || hidden.has(field))
97
- continue;
98
- const type = fieldType(fieldSchema);
99
- if (!type)
100
- continue;
101
- const label = readingOf(definition, field);
102
- const options = type === "choice" ? describeArgOptions(fieldSchema) : type === "boolean" ? ["true", "false"] : undefined;
103
- const offer = { key: field, label, about: "field", type, ...(options ? { options } : {}) };
104
- sorts.push(offer);
105
- /*
106
- * A NUMBER AND A WORD ARE FILTERS TOO. "SUVs under £25,000 with fewer
107
- * than 30,000 miles, a Kia or a Hyundai" is the whole of a car
108
- * shopper's first minute, and the list offered none of it: only a
109
- * choice, a yes or no and a date could be picked. A number is kept at
110
- * most or at least a value; a word field is picked by the values it
111
- * holds (which the graph says, so a surface lists them).
112
- */
113
- filters.push(offer);
114
- if (type === "boolean" || type === "choice")
115
- groups.push(offer);
116
- if (type === "date")
117
- groups.push({ ...offer, buckets: ["day", "week", "month", "year", "decade"] });
118
- }
119
- for (const edge of edgesOf(schema, kind)) {
120
- sorts.push(edge);
121
- filters.push(edge);
122
- groups.push(edge);
123
- }
124
- const is = {
125
- key: "is",
126
- label: definition.lifecycle ? "Standing and currency" : "Standing",
127
- about: "is",
128
- type: "choice",
129
- options: definition.lifecycle ? [...IS_WORDS] : ["flagged", "clear"],
130
- };
131
- filters.push(is);
132
- const order = definition.fieldRoles?.["order"];
133
- const natural = order && (order in shape || order === "label") ? { by: order, direction: "asc" } : undefined;
134
- return { kind, sorts, filters, groups, ...(natural ? { natural } : {}) };
135
- }
136
- function describeArgOptions(schema) {
137
- const shape = describeArg(schema);
138
- return shape.type === "choice" ? shape.options : [];
139
- }
140
- const BUCKETS = ["day", "week", "month", "year", "decade"];
141
- export function parseArrangement(words) {
142
- const out = {};
143
- if (words.q && words.q.trim().length > 0)
144
- out.query = words.q;
145
- if (words.sort) {
146
- const [by, direction] = words.sort.split(":");
147
- if (by)
148
- out.sort = { by, direction: direction === "desc" ? "desc" : "asc" };
149
- }
150
- if (words.filter) {
151
- const conditions = [];
152
- for (const part of words.filter.split(",")) {
153
- const colon = part.indexOf(":");
154
- if (colon <= 0)
155
- continue;
156
- conditions.push({ key: part.slice(0, colon), value: part.slice(colon + 1) });
157
- }
158
- if (conditions.length > 0)
159
- out.filter = conditions;
160
- }
161
- if (words.group) {
162
- const [by, bucket] = words.group.split(":");
163
- if (by)
164
- out.group = { by, ...(BUCKETS.includes(bucket) ? { bucket: bucket } : {}) };
165
- }
166
- return out;
167
- }
168
- export function formatArrangement(arrangement) {
169
- const out = {};
170
- if (arrangement.query && arrangement.query.trim().length > 0)
171
- out.q = arrangement.query;
172
- if (arrangement.sort) {
173
- out.sort = arrangement.sort.direction === "desc" ? `${arrangement.sort.by}:desc` : arrangement.sort.by;
174
- }
175
- if (arrangement.filter?.length) {
176
- out.filter = arrangement.filter.map((condition) => `${condition.key}:${condition.value}`).join(",");
177
- }
178
- if (arrangement.group) {
179
- out.group = arrangement.group.bucket ? `${arrangement.group.by}:${arrangement.group.bucket}` : arrangement.group.by;
180
- }
181
- return out;
182
- }
183
- /**
184
- * Keeps only the parts a kind can actually be arranged by, and says which
185
- * were dropped — a stale link names a field that was renamed, and the
186
- * honest thing is to show the rest arranged and say what was ignored.
187
- */
188
- export function admitArrangement(arrangement, offers) {
189
- const dropped = [];
190
- const out = {};
191
- if (arrangement.query)
192
- out.query = arrangement.query;
193
- if (arrangement.sort) {
194
- if (offers.sorts.some((offer) => offer.key === arrangement.sort.by))
195
- out.sort = arrangement.sort;
196
- else
197
- dropped.push(`sort ${arrangement.sort.by}`);
198
- }
199
- if (arrangement.filter) {
200
- const kept = arrangement.filter.filter((condition) => {
201
- const offer = offers.filters.find((candidate) => candidate.key === condition.key);
202
- if (!offer) {
203
- dropped.push(`filter ${condition.key}`);
204
- return false;
205
- }
206
- return true;
207
- });
208
- if (kept.length > 0)
209
- out.filter = kept;
210
- }
211
- if (arrangement.group) {
212
- if (offers.groups.some((offer) => offer.key === arrangement.group.by))
213
- out.group = arrangement.group;
214
- else
215
- dropped.push(`group ${arrangement.group.by}`);
216
- }
217
- return { arrangement: out, dropped };
218
- }
219
- const fields = (node) => node;
220
- const asRecord = (node) => node;
221
- /** The far ends of `edgeKind` from `id`, either way round, as nodes. */
222
- function farEnds(graph, id, edgeKind) {
223
- const seen = new Map();
224
- for (const node of [...graph.out(id, edgeKind), ...graph.in(id, edgeKind)])
225
- seen.set(node.id, node);
226
- return [...seen.values()];
227
- }
228
- function labelFor(ctx, node) {
229
- return labelOf(ctx.schema.tryDefinition(node.kind), asRecord(node));
230
- }
231
- const compare = (a, b) => {
232
- if (a === undefined || a === null)
233
- return b === undefined || b === null ? 0 : 1;
234
- if (b === undefined || b === null)
235
- return -1;
236
- if (typeof a === "number" && typeof b === "number")
237
- return a - b;
238
- if (typeof a === "boolean" && typeof b === "boolean")
239
- return a === b ? 0 : a ? 1 : -1;
240
- return String(a).localeCompare(String(b), undefined, { numeric: true, sensitivity: "base" });
241
- };
242
- /** What a node sorts by, for a key: its label, a field, or its first far end's label. */
243
- function sortValue(ctx, node, by) {
244
- if (by === "label")
245
- return labelFor(ctx, node);
246
- const definition = ctx.schema.tryDefinition(node.kind);
247
- if (definition && by in (definition.fields.shape ?? {}))
248
- return fields(node)[by];
249
- const ends = farEnds(ctx.graph, node.id, by).map((end) => labelFor(ctx, end)).sort();
250
- return ends[0];
251
- }
252
- const DAY = /^(\d{4})-(\d{2})-(\d{2})/;
253
- /** The first day of the bucket a date falls in, as YYYY-MM-DD; weeks start on Monday, in UTC. */
254
- export function bucketStart(date, bucket) {
255
- const match = DAY.exec(date);
256
- if (!match)
257
- return undefined;
258
- const [, y, m, d] = match;
259
- if (bucket === "day")
260
- return `${y}-${m}-${d}`;
261
- if (bucket === "month")
262
- return `${y}-${m}-01`;
263
- if (bucket === "year")
264
- return `${y}-01-01`;
265
- if (bucket === "decade")
266
- return `${String(Number(y) - (Number(y) % 10)).padStart(4, "0")}-01-01`;
267
- const at = new Date(Date.UTC(Number(y), Number(m) - 1, Number(d)));
268
- const back = (at.getUTCDay() + 6) % 7;
269
- at.setUTCDate(at.getUTCDate() - back);
270
- return at.toISOString().slice(0, 10);
271
- }
272
- const MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
273
- function bucketLabel(start, bucket) {
274
- if (bucket === "month")
275
- return `${MONTHS[Number(start.slice(5, 7)) - 1]} ${start.slice(0, 4)}`;
276
- if (bucket === "week")
277
- return `Week of ${start}`;
278
- if (bucket === "year")
279
- return start.slice(0, 4);
280
- if (bucket === "decade")
281
- return `The ${start.slice(0, 4)}s`;
282
- return start;
283
- }
284
- /** Whether a node meets one condition of a filter. Search judges its `key:value` tokens with this too. */
285
- export function conditionHolds(ctx, node, condition) {
286
- const definition = ctx.schema.tryDefinition(node.kind);
287
- if (condition.key === "is") {
288
- switch (condition.value) {
289
- case "current":
290
- return isCurrent(definition, asRecord(node), ctx.today);
291
- case "past":
292
- return !isCurrent(definition, asRecord(node), ctx.today);
293
- case "any":
294
- return true;
295
- case "flagged":
296
- return ctx.flagged?.has(node.id) ?? false;
297
- case "clear":
298
- return !(ctx.flagged?.has(node.id) ?? false);
299
- default:
300
- return true;
301
- }
302
- }
303
- const shape = (definition?.fields.shape ?? {});
304
- if (condition.key in shape) {
305
- const value = fields(node)[condition.key];
306
- const type = fieldType(shape[condition.key]);
307
- if (type === "date") {
308
- const [op, date] = condition.value.split(":");
309
- if (typeof value !== "string" || !date)
310
- return false;
311
- const day = value.slice(0, 10);
312
- return op === "before" ? day < date : op === "after" ? day > date : day === date;
313
- }
314
- if (type === "boolean")
315
- return String(value) === condition.value;
316
- if (type === "number") {
317
- const at = condition.value.lastIndexOf(":");
318
- const op = at > 0 ? condition.value.slice(0, at) : "";
319
- const bound = Number(condition.value.slice(at + 1));
320
- if (op === "at-most" || op === "at-least") {
321
- if (typeof value !== "number" || !Number.isFinite(bound))
322
- return false;
323
- return op === "at-most" ? value <= bound : value >= bound;
324
- }
325
- }
326
- return String(value) === condition.value;
327
- }
328
- // An edge: tied to this node, to anything, or to nothing.
329
- const ends = farEnds(ctx.graph, node.id, condition.key);
330
- if (condition.value === "*")
331
- return ends.length > 0;
332
- if (condition.value === "none")
333
- return ends.length === 0;
334
- return ends.some((end) => end.id === condition.value);
335
- }
336
- /**
337
- * Whether the words find the node — search's own matcher, so a list's `q`
338
- * and the Find box never disagree: every word the start of a word in the
339
- * label or a readable field, case, diacritics and punctuation aside.
340
- */
341
- export function matches(ctx, node, query) {
342
- return matcherFor(ctx, query)(node);
343
- }
344
- /**
345
- * The words, read once for a whole list. `key:value` tokens are conditions,
346
- * as in the Find box: judged where the kind offers them, ignored where it
347
- * does not — and words made ONLY of tokens nothing here offers (a pasted
348
- * `https://…`, a `foo:bar`) find nothing, as `search()` says, rather than
349
- * everything. `is:any` alone is a horizon, not a search: it keeps all.
350
- */
351
- function matcherFor(ctx, query) {
352
- const { words, conditions } = parseQuery(query);
353
- if (words.length === 0 && conditions.length === 0)
354
- return () => true;
355
- const offers = new Map();
356
- const offered = (kind) => {
357
- let held = offers.get(kind);
358
- if (!held) {
359
- held = new Set(arrangeable(ctx.schema, kind).filters.map((offer) => offer.key));
360
- offers.set(kind, held);
361
- }
362
- return held;
363
- };
364
- return (node) => {
365
- const keys = offered(node.kind);
366
- const applied = conditions.filter((condition) => keys.has(condition.key));
367
- if (!applied.every((condition) => conditionHolds(ctx, node, condition)))
368
- return false;
369
- if (words.length > 0)
370
- return matchNode(ctx.schema.tryDefinition(node.kind), asRecord(node), words) !== undefined;
371
- return applied.length > 0;
372
- };
373
- }
374
- /**
375
- * Filters, sorts and groups. The filter is a conjunction; the sort is
376
- * stable; a grouping puts the group with nothing to say last. Nodes whose
377
- * kind the context cannot describe are kept and sort by what they carry.
378
- */
379
- export function arrange(nodes, arrangement, ctx) {
380
- const query = arrangement.query?.trim();
381
- const found = query ? nodes.filter(matcherFor(ctx, query)) : nodes;
382
- const kept = arrangement.filter?.length
383
- ? found.filter((node) => arrangement.filter.every((condition) => conditionHolds(ctx, node, condition)))
384
- : [...found];
385
- const sort = arrangement.sort;
386
- const ordered = sort
387
- ? kept
388
- .map((node, index) => ({ node, index, value: sortValue(ctx, node, sort.by) }))
389
- .sort((a, b) => {
390
- const byValue = compare(a.value, b.value);
391
- const signed = sort.direction === "desc" && byValue !== 0 && a.value !== undefined && b.value !== undefined ? -byValue : byValue;
392
- return signed !== 0 ? signed : a.index - b.index;
393
- })
394
- .map((entry) => entry.node)
395
- : kept;
396
- const grouping = arrangement.group;
397
- if (!grouping)
398
- return { nodes: ordered, groups: [{ key: "", label: "", nodes: ordered }], grouped: false };
399
- const groups = new Map();
400
- const put = (key, label, node) => {
401
- const group = groups.get(key) ?? { label, nodes: [] };
402
- group.nodes.push(node);
403
- groups.set(key, group);
404
- };
405
- const first = ordered[0];
406
- const definition = first ? ctx.schema.tryDefinition(first.kind) : undefined;
407
- const shape = (definition?.fields.shape ?? {});
408
- const reading = definition ? readingOf(definition, grouping.by) : humaniseField(grouping.by);
409
- const isField = grouping.by in shape;
410
- const type = isField ? fieldType(shape[grouping.by]) : undefined;
411
- const edgeReading = edgesOf(ctx.schema, first?.kind ?? "").find((offer) => offer.key === grouping.by)?.label;
412
- // "No due date" for a field; an edge reads as a sentence, so "Without the list it is on".
413
- const none = isField
414
- ? `No ${reading.toLowerCase()}`
415
- : `Without ${(edgeReading ?? humaniseField(grouping.by)).toLowerCase()}`;
416
- /*
417
- * Two far ends of one name — a single and its album, both "Blue Hour" —
418
- * are told apart in the heading, as they are in a picker (see `tellApart`):
419
- * "Blue Hour · single, Blue Hour · album" rather than "Blue Hour, Blue Hour".
420
- */
421
- const apart = isField
422
- ? new Map()
423
- : tellApart([...new Map(ordered.flatMap((node) => farEnds(ctx.graph, node.id, grouping.by)).map((end) => [end.id, end])).values()].map(asRecord), (kind) => ctx.schema.tryDefinition(kind));
424
- for (const node of ordered) {
425
- if (isField) {
426
- const value = fields(node)[grouping.by];
427
- if (value === undefined || value === null || value === "") {
428
- put("", none, node);
429
- }
430
- else if (type === "date") {
431
- const bucket = grouping.bucket ?? "day";
432
- const start = bucketStart(String(value), bucket);
433
- if (start)
434
- put(start, bucketLabel(start, bucket), node);
435
- else
436
- put("", none, node);
437
- }
438
- else if (type === "boolean") {
439
- put(value ? "1" : "0", value ? "Yes" : "No", node);
440
- }
441
- else {
442
- const format = definition?.display?.format?.[grouping.by];
443
- put(String(value), format ? format(value) : String(value), node);
444
- }
445
- continue;
446
- }
447
- const ends = farEnds(ctx.graph, node.id, grouping.by)
448
- .map((end) => ({ id: end.id, label: apart.has(end.id) ? `${labelFor(ctx, end)} · ${apart.get(end.id)}` : labelFor(ctx, end) }))
449
- .sort((a, b) => a.label.localeCompare(b.label));
450
- if (ends.length === 0)
451
- put("", none, node);
452
- else
453
- put(ends.map((end) => end.id).join(","), ends.map((end) => end.label).join(", "), node);
454
- }
455
- const optionOrder = type === "choice" ? describeArgOptions(shape[grouping.by]) : undefined;
456
- const orderedGroups = [...groups.entries()]
457
- .sort(([a, ga], [b, gb]) => {
458
- if (a === "")
459
- return 1;
460
- if (b === "")
461
- return -1;
462
- if (optionOrder)
463
- return optionOrder.indexOf(a) - optionOrder.indexOf(b);
464
- if (type === "boolean")
465
- return b.localeCompare(a); // Yes before No
466
- if (type === "date")
467
- return a.localeCompare(b);
468
- return ga.label.localeCompare(gb.label);
469
- })
470
- .map(([key, group]) => ({ key, label: group.label, nodes: group.nodes }));
471
- return { nodes: ordered, groups: orderedGroups, grouped: true };
472
- }
4
+ * The offers a kind's declaration makes (`arrangeable`), the grammar that
5
+ * carries a chosen arrangement in an address (`parseArrangement`,
6
+ * `formatArrangement`), and the filtering, sorting and grouping itself
7
+ * (`arrange`). Apart from `@graview/core` because a bundler places a whole
8
+ * file in a page's first chunk when the first chunk can reach it and any
9
+ * chunk uses it: a page that has drawn no list yet carries none of the
10
+ * arranging. The types stay on `@graview/core`, where a declaration names
11
+ * them.
12
+ */
13
+ export { arrangeable, asksForThePast, conditionHolds, edgesOf, NO_ARRANGEMENT, parseArrangement } from "./arrangement.js";
14
+ export { admitArrangement, arrange, arrangeAllows, bucketStart, formatArrangement, matches } from "./arranging.js";
473
15
  //# sourceMappingURL=arrange.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"arrange.js","sourceRoot":"","sources":["../src/arrange.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arrange.js","sourceRoot":"","sources":["../src/arrange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1H,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC"}