@graview/core 0.1.0 → 0.1.3

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 (296) hide show
  1. package/README.md +7 -0
  2. package/dist/app.d.ts +17 -0
  3. package/dist/app.d.ts.map +1 -1
  4. package/dist/app.js.map +1 -1
  5. package/dist/arrange.d.ts +3 -2
  6. package/dist/arrange.d.ts.map +1 -1
  7. package/dist/arrange.js +19 -2
  8. package/dist/arrange.js.map +1 -1
  9. package/dist/beginning.d.ts +5 -2
  10. package/dist/beginning.d.ts.map +1 -1
  11. package/dist/beginning.js +28 -0
  12. package/dist/beginning.js.map +1 -1
  13. package/dist/capabilities.d.ts +32 -0
  14. package/dist/capabilities.d.ts.map +1 -0
  15. package/dist/capabilities.js +31 -0
  16. package/dist/capabilities.js.map +1 -0
  17. package/dist/cli/check/index.d.ts +1 -0
  18. package/dist/cli/check/index.d.ts.map +1 -1
  19. package/dist/cli/check/index.js +1 -0
  20. package/dist/cli/check/index.js.map +1 -1
  21. package/dist/cli/check/lenses.d.ts.map +1 -1
  22. package/dist/cli/check/lenses.js +25 -0
  23. package/dist/cli/check/lenses.js.map +1 -1
  24. package/dist/cli/check/policy.d.ts.map +1 -1
  25. package/dist/cli/check/policy.js +35 -0
  26. package/dist/cli/check/policy.js.map +1 -1
  27. package/dist/cli/check/relations.d.ts.map +1 -1
  28. package/dist/cli/check/relations.js +31 -0
  29. package/dist/cli/check/relations.js.map +1 -1
  30. package/dist/cli/check/views.d.ts +14 -0
  31. package/dist/cli/check/views.d.ts.map +1 -0
  32. package/dist/cli/check/views.js +27 -0
  33. package/dist/cli/check/views.js.map +1 -0
  34. package/dist/cli/check.d.ts.map +1 -1
  35. package/dist/cli/check.js +2 -1
  36. package/dist/cli/check.js.map +1 -1
  37. package/dist/cli/create.d.ts +1 -1
  38. package/dist/cli/create.d.ts.map +1 -1
  39. package/dist/cli/create.js +63 -1
  40. package/dist/cli/create.js.map +1 -1
  41. package/dist/cli/index.d.ts +18 -1
  42. package/dist/cli/index.d.ts.map +1 -1
  43. package/dist/cli/index.js +66 -1
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/conformance/fixtures.d.ts +41 -0
  46. package/dist/conformance/fixtures.d.ts.map +1 -0
  47. package/dist/conformance/fixtures.js +950 -0
  48. package/dist/conformance/fixtures.js.map +1 -0
  49. package/dist/conformance/index.d.ts +54 -0
  50. package/dist/conformance/index.d.ts.map +1 -0
  51. package/dist/conformance/index.js +81 -0
  52. package/dist/conformance/index.js.map +1 -0
  53. package/dist/document/canonical.d.ts +4 -0
  54. package/dist/document/canonical.d.ts.map +1 -0
  55. package/dist/document/canonical.js +29 -0
  56. package/dist/document/canonical.js.map +1 -0
  57. package/dist/document/compile.d.ts +43 -0
  58. package/dist/document/compile.d.ts.map +1 -0
  59. package/dist/document/compile.js +807 -0
  60. package/dist/document/compile.js.map +1 -0
  61. package/dist/document/diff.d.ts +32 -0
  62. package/dist/document/diff.d.ts.map +1 -0
  63. package/dist/document/diff.js +148 -0
  64. package/dist/document/diff.js.map +1 -0
  65. package/dist/document/edit.d.ts +63 -0
  66. package/dist/document/edit.d.ts.map +1 -0
  67. package/dist/document/edit.js +1432 -0
  68. package/dist/document/edit.js.map +1 -0
  69. package/dist/document/expr/analyze.d.ts +14 -0
  70. package/dist/document/expr/analyze.d.ts.map +1 -0
  71. package/dist/document/expr/analyze.js +52 -0
  72. package/dist/document/expr/analyze.js.map +1 -0
  73. package/dist/document/expr/evaluate.d.ts +36 -0
  74. package/dist/document/expr/evaluate.d.ts.map +1 -0
  75. package/dist/document/expr/evaluate.js +344 -0
  76. package/dist/document/expr/evaluate.js.map +1 -0
  77. package/dist/document/expr/index.d.ts +8 -0
  78. package/dist/document/expr/index.d.ts.map +1 -0
  79. package/dist/document/expr/index.js +5 -0
  80. package/dist/document/expr/index.js.map +1 -0
  81. package/dist/document/expr/parse.d.ts +50 -0
  82. package/dist/document/expr/parse.d.ts.map +1 -0
  83. package/dist/document/expr/parse.js +240 -0
  84. package/dist/document/expr/parse.js.map +1 -0
  85. package/dist/document/expr/print.d.ts +4 -0
  86. package/dist/document/expr/print.d.ts.map +1 -0
  87. package/dist/document/expr/print.js +81 -0
  88. package/dist/document/expr/print.js.map +1 -0
  89. package/dist/document/findings.d.ts +15 -0
  90. package/dist/document/findings.d.ts.map +1 -0
  91. package/dist/document/findings.js +30 -0
  92. package/dist/document/findings.js.map +1 -0
  93. package/dist/document/graview-template.d.ts +148 -0
  94. package/dist/document/graview-template.d.ts.map +1 -0
  95. package/dist/document/graview-template.js +450 -0
  96. package/dist/document/graview-template.js.map +1 -0
  97. package/dist/document/index.d.ts +27 -0
  98. package/dist/document/index.d.ts.map +1 -0
  99. package/dist/document/index.js +16 -0
  100. package/dist/document/index.js.map +1 -0
  101. package/dist/document/migrate.d.ts +41 -0
  102. package/dist/document/migrate.d.ts.map +1 -0
  103. package/dist/document/migrate.js +252 -0
  104. package/dist/document/migrate.js.map +1 -0
  105. package/dist/document/patch.d.ts +16 -0
  106. package/dist/document/patch.d.ts.map +1 -0
  107. package/dist/document/patch.js +79 -0
  108. package/dist/document/patch.js.map +1 -0
  109. package/dist/document/rules.d.ts +40 -0
  110. package/dist/document/rules.d.ts.map +1 -0
  111. package/dist/document/rules.js +88 -0
  112. package/dist/document/rules.js.map +1 -0
  113. package/dist/document/schema.d.ts +461 -0
  114. package/dist/document/schema.d.ts.map +1 -0
  115. package/dist/document/schema.js +199 -0
  116. package/dist/document/schema.js.map +1 -0
  117. package/dist/document/template.d.ts +28 -0
  118. package/dist/document/template.d.ts.map +1 -0
  119. package/dist/document/template.js +117 -0
  120. package/dist/document/template.js.map +1 -0
  121. package/dist/document/to-document.d.ts +34 -0
  122. package/dist/document/to-document.d.ts.map +1 -0
  123. package/dist/document/to-document.js +186 -0
  124. package/dist/document/to-document.js.map +1 -0
  125. package/dist/document/upgrade.d.ts +9 -0
  126. package/dist/document/upgrade.d.ts.map +1 -0
  127. package/dist/document/upgrade.js +19 -0
  128. package/dist/document/upgrade.js.map +1 -0
  129. package/dist/document/views.d.ts +65 -0
  130. package/dist/document/views.d.ts.map +1 -0
  131. package/dist/document/views.js +264 -0
  132. package/dist/document/views.js.map +1 -0
  133. package/dist/formats.d.ts +50 -0
  134. package/dist/formats.d.ts.map +1 -0
  135. package/dist/formats.js +75 -0
  136. package/dist/formats.js.map +1 -0
  137. package/dist/graph/graph.d.ts +61 -3
  138. package/dist/graph/graph.d.ts.map +1 -1
  139. package/dist/graph/graph.js +187 -20
  140. package/dist/graph/graph.js.map +1 -1
  141. package/dist/index.d.ts +43 -18
  142. package/dist/index.d.ts.map +1 -1
  143. package/dist/index.js +31 -11
  144. package/dist/index.js.map +1 -1
  145. package/dist/integrity.d.ts +46 -0
  146. package/dist/integrity.d.ts.map +1 -0
  147. package/dist/integrity.js +179 -0
  148. package/dist/integrity.js.map +1 -0
  149. package/dist/invariants/engine.d.ts +8 -0
  150. package/dist/invariants/engine.d.ts.map +1 -1
  151. package/dist/invariants/engine.js +40 -2
  152. package/dist/invariants/engine.js.map +1 -1
  153. package/dist/invariants/types.d.ts +19 -0
  154. package/dist/invariants/types.d.ts.map +1 -1
  155. package/dist/labels.d.ts +65 -0
  156. package/dist/labels.d.ts.map +1 -0
  157. package/dist/labels.js +123 -0
  158. package/dist/labels.js.map +1 -0
  159. package/dist/mutations/define-mutation.d.ts.map +1 -1
  160. package/dist/mutations/define-mutation.js +5 -6
  161. package/dist/mutations/define-mutation.js.map +1 -1
  162. package/dist/mutations/derive-edits.d.ts.map +1 -1
  163. package/dist/mutations/derive-edits.js +20 -1
  164. package/dist/mutations/derive-edits.js.map +1 -1
  165. package/dist/mutations/form.d.ts +9 -0
  166. package/dist/mutations/form.d.ts.map +1 -1
  167. package/dist/mutations/form.js +20 -0
  168. package/dist/mutations/form.js.map +1 -1
  169. package/dist/mutations/node-ref.d.ts +6 -0
  170. package/dist/mutations/node-ref.d.ts.map +1 -1
  171. package/dist/mutations/node-ref.js +22 -8
  172. package/dist/mutations/node-ref.js.map +1 -1
  173. package/dist/mutations/types.d.ts +8 -0
  174. package/dist/mutations/types.d.ts.map +1 -1
  175. package/dist/mutations/words.d.ts +49 -0
  176. package/dist/mutations/words.d.ts.map +1 -0
  177. package/dist/mutations/words.js +61 -0
  178. package/dist/mutations/words.js.map +1 -0
  179. package/dist/ops/log.d.ts +156 -4
  180. package/dist/ops/log.d.ts.map +1 -1
  181. package/dist/ops/log.js +234 -51
  182. package/dist/ops/log.js.map +1 -1
  183. package/dist/ops/revisions.d.ts +66 -0
  184. package/dist/ops/revisions.d.ts.map +1 -0
  185. package/dist/ops/revisions.js +97 -0
  186. package/dist/ops/revisions.js.map +1 -0
  187. package/dist/ops/types.d.ts +49 -1
  188. package/dist/ops/types.d.ts.map +1 -1
  189. package/dist/ops/undo.d.ts +29 -2
  190. package/dist/ops/undo.d.ts.map +1 -1
  191. package/dist/ops/undo.js +110 -1
  192. package/dist/ops/undo.js.map +1 -1
  193. package/dist/ops/withheld.d.ts +37 -0
  194. package/dist/ops/withheld.d.ts.map +1 -0
  195. package/dist/ops/withheld.js +84 -0
  196. package/dist/ops/withheld.js.map +1 -0
  197. package/dist/permissions/policy.d.ts +15 -0
  198. package/dist/permissions/policy.d.ts.map +1 -1
  199. package/dist/permissions/policy.js +28 -1
  200. package/dist/permissions/policy.js.map +1 -1
  201. package/dist/permissions/sight.d.ts +66 -0
  202. package/dist/permissions/sight.d.ts.map +1 -0
  203. package/dist/permissions/sight.js +131 -0
  204. package/dist/permissions/sight.js.map +1 -0
  205. package/dist/permissions/types.d.ts +26 -0
  206. package/dist/permissions/types.d.ts.map +1 -1
  207. package/dist/permissions/types.js.map +1 -1
  208. package/dist/persistence/memory.d.ts.map +1 -1
  209. package/dist/persistence/memory.js +25 -0
  210. package/dist/persistence/memory.js.map +1 -1
  211. package/dist/persistence/sql.d.ts +43 -0
  212. package/dist/persistence/sql.d.ts.map +1 -0
  213. package/dist/persistence/sql.js +154 -0
  214. package/dist/persistence/sql.js.map +1 -0
  215. package/dist/persistence/sqlite.d.ts +17 -3
  216. package/dist/persistence/sqlite.d.ts.map +1 -1
  217. package/dist/persistence/sqlite.js +32 -96
  218. package/dist/persistence/sqlite.js.map +1 -1
  219. package/dist/persistence/types.d.ts +19 -0
  220. package/dist/persistence/types.d.ts.map +1 -1
  221. package/dist/presence.d.ts +56 -0
  222. package/dist/presence.d.ts.map +1 -1
  223. package/dist/presence.js +62 -2
  224. package/dist/presence.js.map +1 -1
  225. package/dist/refusal.d.ts +34 -0
  226. package/dist/refusal.d.ts.map +1 -0
  227. package/dist/refusal.js +40 -0
  228. package/dist/refusal.js.map +1 -0
  229. package/dist/scaffold/from-template.d.ts +16 -0
  230. package/dist/scaffold/from-template.d.ts.map +1 -0
  231. package/dist/scaffold/from-template.js +157 -0
  232. package/dist/scaffold/from-template.js.map +1 -0
  233. package/dist/scaffold/index.d.ts +10 -1
  234. package/dist/scaffold/index.d.ts.map +1 -1
  235. package/dist/scaffold/index.js +35 -7
  236. package/dist/scaffold/index.js.map +1 -1
  237. package/dist/scaffold/names.d.ts +4 -0
  238. package/dist/scaffold/names.d.ts.map +1 -1
  239. package/dist/scaffold/names.js.map +1 -1
  240. package/dist/scaffold/project.d.ts +1 -1
  241. package/dist/scaffold/project.d.ts.map +1 -1
  242. package/dist/scaffold/project.js +44 -13
  243. package/dist/scaffold/project.js.map +1 -1
  244. package/dist/scaffold/ui.d.ts.map +1 -1
  245. package/dist/scaffold/ui.js +19 -10
  246. package/dist/scaffold/ui.js.map +1 -1
  247. package/dist/schema/define-node.d.ts +20 -0
  248. package/dist/schema/define-node.d.ts.map +1 -1
  249. package/dist/schema/define-node.js +27 -2
  250. package/dist/schema/define-node.js.map +1 -1
  251. package/dist/schema/path.d.ts +19 -0
  252. package/dist/schema/path.d.ts.map +1 -0
  253. package/dist/schema/path.js +34 -0
  254. package/dist/schema/path.js.map +1 -0
  255. package/dist/schema/types.d.ts +17 -0
  256. package/dist/schema/types.d.ts.map +1 -1
  257. package/dist/seen.d.ts +64 -0
  258. package/dist/seen.d.ts.map +1 -0
  259. package/dist/seen.js +200 -0
  260. package/dist/seen.js.map +1 -0
  261. package/dist/store.d.ts +378 -8
  262. package/dist/store.d.ts.map +1 -1
  263. package/dist/store.js +801 -41
  264. package/dist/store.js.map +1 -1
  265. package/dist/testing.d.ts +6 -0
  266. package/dist/testing.d.ts.map +1 -1
  267. package/dist/testing.js +3 -1
  268. package/dist/testing.js.map +1 -1
  269. package/dist/theme/palettes.d.ts.map +1 -1
  270. package/dist/theme/palettes.js +4 -0
  271. package/dist/theme/palettes.js.map +1 -1
  272. package/dist/theme/types.d.ts +9 -0
  273. package/dist/theme/types.d.ts.map +1 -1
  274. package/dist/theme/types.js +4 -0
  275. package/dist/theme/types.js.map +1 -1
  276. package/dist/validate-graph.d.ts +84 -0
  277. package/dist/validate-graph.d.ts.map +1 -0
  278. package/dist/validate-graph.js +295 -0
  279. package/dist/validate-graph.js.map +1 -0
  280. package/dist/version.d.ts +3 -0
  281. package/dist/version.d.ts.map +1 -0
  282. package/dist/version.js +3 -0
  283. package/dist/version.js.map +1 -0
  284. package/dist/views/types.d.ts +8 -0
  285. package/dist/views/types.d.ts.map +1 -1
  286. package/dist/views/types.js +5 -0
  287. package/dist/views/types.js.map +1 -1
  288. package/dist/watched.d.ts +39 -0
  289. package/dist/watched.d.ts.map +1 -1
  290. package/dist/watched.js +94 -1
  291. package/dist/watched.js.map +1 -1
  292. package/dist/who.d.ts +24 -1
  293. package/dist/who.d.ts.map +1 -1
  294. package/dist/who.js +49 -2
  295. package/dist/who.js.map +1 -1
  296. package/package.json +9 -1
@@ -0,0 +1,240 @@
1
+ /*
2
+ * THE RULE LANGUAGE, PARSED.
3
+ *
4
+ * A document's rules, act guards and computed values are written in a small
5
+ * expression language (docs/declaration-document.md#expression-language). It
6
+ * is deliberately closed: no loops, no user functions, no regular
7
+ * expressions, no way to name anything outside the graph it is judging. The
8
+ * parser turns text into a tree; `evaluate.ts` walks the tree under a budget.
9
+ */
10
+ export class ExprSyntaxError extends Error {
11
+ sentence;
12
+ at;
13
+ source;
14
+ constructor(sentence, at, source) {
15
+ super(`${sentence} (at character ${at + 1} of "${source}")`);
16
+ this.sentence = sentence;
17
+ this.at = at;
18
+ this.source = source;
19
+ }
20
+ }
21
+ const OPERATORS = ["||", "&&", "==", "!=", "<=", ">=", "<", ">", "!", "+", "-", "*", "/", "%", "(", ")", "[", "]", ",", "."];
22
+ const WORD_OPERATORS = { and: "&&", or: "||", not: "!" };
23
+ export const MAX_EXPRESSION_LENGTH = 2000;
24
+ function tokenize(source) {
25
+ const tokens = [];
26
+ let i = 0;
27
+ while (i < source.length) {
28
+ const c = source[i];
29
+ if (c === " " || c === "\t" || c === "\n" || c === "\r") {
30
+ i++;
31
+ continue;
32
+ }
33
+ if (c >= "0" && c <= "9") {
34
+ const start = i;
35
+ while (i < source.length && /[0-9.]/.test(source[i]))
36
+ i++;
37
+ const text = source.slice(start, i);
38
+ const v = Number(text);
39
+ if (!Number.isFinite(v) || text.split(".").length > 2)
40
+ throw new ExprSyntaxError(`"${text}" is not a number`, start, source);
41
+ tokens.push({ k: "num", v, at: start });
42
+ continue;
43
+ }
44
+ if (c === "'" || c === '"') {
45
+ const start = i++;
46
+ let v = "";
47
+ while (i < source.length && source[i] !== c) {
48
+ if (source[i] === "\\" && i + 1 < source.length)
49
+ i++;
50
+ v += source[i++];
51
+ }
52
+ if (i >= source.length)
53
+ throw new ExprSyntaxError("a quoted word is never closed", start, source);
54
+ i++;
55
+ tokens.push({ k: "str", v, at: start });
56
+ continue;
57
+ }
58
+ if (/[A-Za-z_]/.test(c)) {
59
+ const start = i;
60
+ while (i < source.length && /[A-Za-z0-9_]/.test(source[i]))
61
+ i++;
62
+ const word = source.slice(start, i);
63
+ // An OWN entry: "constructor" is a name, not an operator inherited from Object.
64
+ const op = Object.prototype.hasOwnProperty.call(WORD_OPERATORS, word) ? WORD_OPERATORS[word] : undefined;
65
+ tokens.push(op ? { k: "op", v: op, at: start } : { k: "id", v: word, at: start });
66
+ continue;
67
+ }
68
+ const op = OPERATORS.find((o) => source.startsWith(o, i));
69
+ if (!op)
70
+ throw new ExprSyntaxError(`"${c}" is not part of the rule language`, i, source);
71
+ tokens.push({ k: "op", v: op, at: i });
72
+ i += op.length;
73
+ }
74
+ tokens.push({ k: "end", at: source.length });
75
+ return tokens;
76
+ }
77
+ /** Parse an expression, or throw an `ExprSyntaxError` whose sentence a person can act on. */
78
+ export function parseExpr(source) {
79
+ if (source.length > MAX_EXPRESSION_LENGTH) {
80
+ throw new ExprSyntaxError(`an expression may be at most ${MAX_EXPRESSION_LENGTH} characters`, 0, source.slice(0, 40));
81
+ }
82
+ const tokens = tokenize(source);
83
+ let pos = 0;
84
+ const peek = () => tokens[pos];
85
+ const isOp = (v) => {
86
+ const t = peek();
87
+ return t.k === "op" && t.v === v;
88
+ };
89
+ const isWord = (v) => {
90
+ const t = peek();
91
+ return t.k === "id" && t.v === v;
92
+ };
93
+ const expect = (v, what) => {
94
+ if (!isOp(v))
95
+ throw new ExprSyntaxError(`expected ${what}`, peek().at, source);
96
+ pos++;
97
+ };
98
+ let depth = 0;
99
+ const deeper = (at, f) => {
100
+ if (++depth > 64)
101
+ throw new ExprSyntaxError("the expression nests too deeply", at, source);
102
+ try {
103
+ return f();
104
+ }
105
+ finally {
106
+ depth--;
107
+ }
108
+ };
109
+ const binaryLevel = (ops, next) => () => {
110
+ let left = next();
111
+ for (;;) {
112
+ const t = peek();
113
+ const op = t.k === "op" ? ops.find((o) => o === t.v) : t.k === "id" && t.v === "in" && ops.includes("in") ? "in" : undefined;
114
+ if (!op)
115
+ return left;
116
+ pos++;
117
+ left = { t: "binary", op, left, right: next(), at: t.at };
118
+ }
119
+ };
120
+ const primary = () => {
121
+ const t = peek();
122
+ if (t.k === "num") {
123
+ pos++;
124
+ return { t: "lit", value: t.v, at: t.at };
125
+ }
126
+ if (t.k === "str") {
127
+ pos++;
128
+ return { t: "lit", value: t.v, at: t.at };
129
+ }
130
+ if (t.k === "id") {
131
+ pos++;
132
+ if (t.v === "true" || t.v === "false")
133
+ return { t: "lit", value: t.v === "true", at: t.at };
134
+ if (t.v === "null")
135
+ return { t: "lit", value: null, at: t.at };
136
+ if (isOp("(")) {
137
+ pos++;
138
+ const args = [];
139
+ if (!isOp(")")) {
140
+ for (;;) {
141
+ args.push(expression());
142
+ if (isOp(",")) {
143
+ pos++;
144
+ continue;
145
+ }
146
+ break;
147
+ }
148
+ }
149
+ expect(")", `")" to close ${t.v}(…)`);
150
+ return { t: "call", fn: t.v, args, at: t.at };
151
+ }
152
+ return { t: "ident", name: t.v, at: t.at };
153
+ }
154
+ if (t.k === "op" && t.v === "(") {
155
+ pos++;
156
+ const inner = deeper(t.at, expression);
157
+ expect(")", 'a ")"');
158
+ return inner;
159
+ }
160
+ if (t.k === "op" && t.v === "[") {
161
+ pos++;
162
+ const items = [];
163
+ if (!isOp("]")) {
164
+ for (;;) {
165
+ items.push(expression());
166
+ if (isOp(",")) {
167
+ pos++;
168
+ continue;
169
+ }
170
+ break;
171
+ }
172
+ }
173
+ expect("]", 'a "]" to close the list');
174
+ return { t: "list", items, at: t.at };
175
+ }
176
+ if (t.k === "end")
177
+ throw new ExprSyntaxError("the expression ends too soon", t.at, source);
178
+ throw new ExprSyntaxError(`"${t.k === "op" ? t.v : ""}" cannot start a value here`, t.at, source);
179
+ };
180
+ const postfix = () => {
181
+ let e = primary();
182
+ for (;;) {
183
+ if (isOp(".")) {
184
+ const dot = peek();
185
+ pos++;
186
+ const name = peek();
187
+ if (name.k !== "id")
188
+ throw new ExprSyntaxError('expected a field name after "."', name.at, source);
189
+ pos++;
190
+ e = { t: "member", object: e, name: name.v, at: dot.at };
191
+ continue;
192
+ }
193
+ if (isWord("where")) {
194
+ const at = peek().at;
195
+ pos++;
196
+ // `where` binds loosest: everything to its right, up to a closing bracket or comma, is the condition.
197
+ e = { t: "where", set: e, filter: deeper(at, expression), at };
198
+ continue;
199
+ }
200
+ return e;
201
+ }
202
+ };
203
+ const unary = () => {
204
+ const t = peek();
205
+ if (t.k === "op" && (t.v === "!" || t.v === "-")) {
206
+ pos++;
207
+ return { t: "unary", op: t.v, operand: deeper(t.at, unary), at: t.at };
208
+ }
209
+ return postfix();
210
+ };
211
+ const product = binaryLevel(["*", "/", "%"], unary);
212
+ const sum = binaryLevel(["+", "-"], product);
213
+ const comparison = () => {
214
+ const left = sum();
215
+ const t = peek();
216
+ const op = t.k === "op" && ["==", "!=", "<", "<=", ">", ">="].includes(t.v) ? t.v : t.k === "id" && t.v === "in" ? "in" : undefined;
217
+ if (!op)
218
+ return left;
219
+ pos++;
220
+ return { t: "binary", op, left, right: sum(), at: t.at };
221
+ };
222
+ const negation = () => {
223
+ const t = peek();
224
+ if (t.k === "op" && t.v === "!") {
225
+ pos++;
226
+ return { t: "unary", op: "!", operand: deeper(t.at, negation), at: t.at };
227
+ }
228
+ return comparison();
229
+ };
230
+ const conjunction = binaryLevel(["&&"], negation);
231
+ const disjunction = binaryLevel(["||"], conjunction);
232
+ function expression() {
233
+ return disjunction();
234
+ }
235
+ const tree = expression();
236
+ if (peek().k !== "end")
237
+ throw new ExprSyntaxError("there is more after the end of the expression", peek().at, source);
238
+ return tree;
239
+ }
240
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/document/expr/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Expr } from "./parse.js";
2
+ /** An expression as rule-language text that parses back to the same tree. */
3
+ export declare function printExpr(e: Expr): string;
4
+ //# sourceMappingURL=print.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print.d.ts","sourceRoot":"","sources":["../../../src/document/expr/print.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,IAAI,EAAE,MAAM,YAAY,CAAC;AAkDjD,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAEzC"}
@@ -0,0 +1,81 @@
1
+ /*
2
+ * THE RULE LANGUAGE, PRINTED BACK.
3
+ *
4
+ * printExpr(parseExpr(s)) parses to the same tree as s. It is how a rename
5
+ * rewrites a rule precisely: parse, rename the names in the tree, print it —
6
+ * never a regular expression over the text, which cannot tell the field
7
+ * `quote` from the word 'quote' in a string or from a relation's `quote`.
8
+ *
9
+ * Parenthesises only where the grammar needs it. `and`, `or` and `not` are
10
+ * printed as words, the way the authoring guide writes them.
11
+ */
12
+ const LEVEL = {
13
+ "||": 1,
14
+ "&&": 2,
15
+ "==": 4,
16
+ "!=": 4,
17
+ "<": 4,
18
+ "<=": 4,
19
+ ">": 4,
20
+ ">=": 4,
21
+ in: 4,
22
+ "+": 5,
23
+ "-": 5,
24
+ "*": 6,
25
+ "/": 6,
26
+ "%": 6,
27
+ };
28
+ const WORD = { "||": "or", "&&": "and" };
29
+ /** How tightly an expression binds: 0 for `where` (it takes everything to its right), 9 for a value. */
30
+ function level(e) {
31
+ switch (e.t) {
32
+ case "where":
33
+ return 0;
34
+ case "binary":
35
+ return LEVEL[e.op];
36
+ case "unary":
37
+ return e.op === "!" ? 3 : 7;
38
+ case "member":
39
+ return 8;
40
+ default:
41
+ return 9;
42
+ }
43
+ }
44
+ const quote = (s) => `'${s.replace(/\\/g, "\\\\").replace(/'/g, "\\'")}'`;
45
+ /** An expression as rule-language text that parses back to the same tree. */
46
+ export function printExpr(e) {
47
+ return print(e, 0);
48
+ }
49
+ function print(e, atLeast) {
50
+ const text = bare(e);
51
+ return level(e) < atLeast ? `(${text})` : text;
52
+ }
53
+ function bare(e) {
54
+ switch (e.t) {
55
+ case "lit":
56
+ return e.value === null ? "null" : typeof e.value === "string" ? quote(e.value) : String(e.value);
57
+ case "ident":
58
+ return e.name;
59
+ case "list":
60
+ return `[${e.items.map((x) => print(x, 0)).join(", ")}]`;
61
+ case "member":
62
+ return `${print(e.object, 8)}.${e.name}`;
63
+ case "unary":
64
+ // `not` is a word; `-` must not run into a following `-` (`- -x`).
65
+ return e.op === "!" ? `not ${print(e.operand, 3)}` : `-${print(e.operand, 7).startsWith("-") ? ` ${print(e.operand, 7)}` : print(e.operand, 7)}`;
66
+ case "binary": {
67
+ const l = LEVEL[e.op];
68
+ const op = WORD[e.op] ?? e.op;
69
+ // Comparisons do not chain; the arithmetic and logic operators lean left.
70
+ const left = l === 4 ? print(e.left, 5) : print(e.left, l);
71
+ const right = l === 4 ? print(e.right, 5) : print(e.right, l + 1);
72
+ return `${left} ${op} ${right}`;
73
+ }
74
+ case "call":
75
+ return `${e.fn}(${e.args.map((x) => print(x, 0)).join(", ")})`;
76
+ case "where":
77
+ // The set is a postfix chain; the condition runs to the end, so it needs no brackets of its own.
78
+ return `${print(e.set, 8)} where ${print(e.filter, 0)}`;
79
+ }
80
+ }
81
+ //# sourceMappingURL=print.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print.js","sourceRoot":"","sources":["../../../src/document/expr/print.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export type Severity = "error" | "warning" | "note";
2
+ export interface Finding {
3
+ readonly severity: Severity;
4
+ readonly code: string;
5
+ readonly path: string;
6
+ readonly message: string;
7
+ /** What to do about it, when there is something to say. */
8
+ readonly fix?: string;
9
+ }
10
+ export declare const error: (code: string, path: string, message: string, fix?: string) => Finding;
11
+ export declare const warning: (code: string, path: string, message: string, fix?: string) => Finding;
12
+ export declare const hasErrors: (findings: readonly Finding[]) => boolean;
13
+ /** One line per finding, the way a person reads them in a chat. */
14
+ export declare function sayFindings(findings: readonly Finding[]): string;
15
+ //# sourceMappingURL=findings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../src/document/findings.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,SAAS,MAAM,EAAE,MAAM,MAAM,KAAG,OAMhF,CAAC;AAEH,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,SAAS,MAAM,EAAE,MAAM,MAAM,KAAG,OAMlF,CAAC;AAEH,eAAO,MAAM,SAAS,GAAI,UAAU,SAAS,OAAO,EAAE,YAAiD,CAAC;AAExG,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CAEhE"}
@@ -0,0 +1,30 @@
1
+ /*
2
+ * A FINDING is a sentence about a place in the document.
3
+ *
4
+ * Every refusal the document path produces — malformed JSON, an edge to a
5
+ * kind nobody declared, a rule that names a field the kind lacks, whatever
6
+ * `graview check` says about the compiled app — arrives in this one shape,
7
+ * so the web editor, the chat's `propose_change` and a CI annotation can all
8
+ * point at the line. `path` is dotted from the document root
9
+ * ("kinds.vendor.fields.status.options").
10
+ */
11
+ export const error = (code, path, message, fix) => ({
12
+ severity: "error",
13
+ code,
14
+ path,
15
+ message,
16
+ ...(fix ? { fix } : {}),
17
+ });
18
+ export const warning = (code, path, message, fix) => ({
19
+ severity: "warning",
20
+ code,
21
+ path,
22
+ message,
23
+ ...(fix ? { fix } : {}),
24
+ });
25
+ export const hasErrors = (findings) => findings.some((f) => f.severity === "error");
26
+ /** One line per finding, the way a person reads them in a chat. */
27
+ export function sayFindings(findings) {
28
+ return findings.map((f) => `${f.severity === "error" ? "✗" : f.severity === "warning" ? "!" : "·"} ${f.path || "(document)"}: ${f.message}${f.fix ? ` — ${f.fix}` : ""}`).join("\n");
29
+ }
30
+ //# sourceMappingURL=findings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/document/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAaH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,OAAe,EAAE,GAAY,EAAW,EAAE,CAAC,CAAC;IAC5F,QAAQ,EAAE,OAAO;IACjB,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,OAAe,EAAE,GAAY,EAAW,EAAE,CAAC,CAAC;IAC9F,QAAQ,EAAE,SAAS;IACnB,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAA4B,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;AAExG,mEAAmE;AACnE,MAAM,UAAU,WAAW,CAAC,QAA4B;IACtD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,YAAY,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvL,CAAC"}
@@ -0,0 +1,148 @@
1
+ import { z } from "zod";
2
+ import type { Primitive } from "../graph/primitives.js";
3
+ import { type CompileOptions, type CompiledDocument } from "./compile.js";
4
+ import { type Finding } from "./findings.js";
5
+ import type { GraviewDocument } from "./schema.js";
6
+ export declare const TEMPLATE_FORMAT = "graview-template";
7
+ export declare const TEMPLATE_FORMAT_VERSION = 1;
8
+ export declare const TEMPLATE_QUESTION_TYPES: readonly ["string", "text", "number", "date", "list", "choice"];
9
+ declare const QuestionSpec: z.ZodObject<{
10
+ id: z.ZodString;
11
+ ask: z.ZodString;
12
+ type: z.ZodEnum<{
13
+ string: "string";
14
+ number: "number";
15
+ text: "text";
16
+ date: "date";
17
+ choice: "choice";
18
+ list: "list";
19
+ }>;
20
+ options: z.ZodOptional<z.ZodArray<z.ZodString>>;
21
+ default: z.ZodOptional<z.ZodUnknown>;
22
+ optional: z.ZodOptional<z.ZodBoolean>;
23
+ }, z.core.$strict>;
24
+ export type TemplateQuestion = z.infer<typeof QuestionSpec>;
25
+ declare const SetupStepSpec: z.ZodObject<{
26
+ act: z.ZodString;
27
+ args: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
28
+ if: z.ZodOptional<z.ZodString>;
29
+ forEach: z.ZodOptional<z.ZodString>;
30
+ }, z.core.$strict>;
31
+ export type TemplateSetupStep = z.infer<typeof SetupStepSpec>;
32
+ declare const SeedNodeSpec: z.ZodObject<{
33
+ id: z.ZodString;
34
+ kind: z.ZodString;
35
+ }, z.core.$catchall<z.ZodUnknown>>;
36
+ export type TemplateSeedNode = z.infer<typeof SeedNodeSpec>;
37
+ declare const SeedSpec: z.ZodObject<{
38
+ nodes: z.ZodArray<z.ZodObject<{
39
+ id: z.ZodString;
40
+ kind: z.ZodString;
41
+ }, z.core.$catchall<z.ZodUnknown>>>;
42
+ edges: z.ZodDefault<z.ZodArray<z.ZodObject<{
43
+ kind: z.ZodString;
44
+ from: z.ZodString;
45
+ to: z.ZodString;
46
+ }, z.core.$strict>>>;
47
+ anchor: z.ZodOptional<z.ZodString>;
48
+ }, z.core.$strict>;
49
+ export type TemplateSeed = z.infer<typeof SeedSpec>;
50
+ export declare const TemplateSpec: z.ZodObject<{
51
+ format: z.ZodLiteral<"graview-template">;
52
+ formatVersion: z.ZodLiteral<1>;
53
+ id: z.ZodString;
54
+ version: z.ZodNumber;
55
+ title: z.ZodString;
56
+ pitch: z.ZodString;
57
+ useCases: z.ZodArray<z.ZodString>;
58
+ document: z.ZodRecord<z.ZodString, z.ZodUnknown>;
59
+ seed: z.ZodOptional<z.ZodObject<{
60
+ nodes: z.ZodArray<z.ZodObject<{
61
+ id: z.ZodString;
62
+ kind: z.ZodString;
63
+ }, z.core.$catchall<z.ZodUnknown>>>;
64
+ edges: z.ZodDefault<z.ZodArray<z.ZodObject<{
65
+ kind: z.ZodString;
66
+ from: z.ZodString;
67
+ to: z.ZodString;
68
+ }, z.core.$strict>>>;
69
+ anchor: z.ZodOptional<z.ZodString>;
70
+ }, z.core.$strict>>;
71
+ questions: z.ZodArray<z.ZodObject<{
72
+ id: z.ZodString;
73
+ ask: z.ZodString;
74
+ type: z.ZodEnum<{
75
+ string: "string";
76
+ number: "number";
77
+ text: "text";
78
+ date: "date";
79
+ choice: "choice";
80
+ list: "list";
81
+ }>;
82
+ options: z.ZodOptional<z.ZodArray<z.ZodString>>;
83
+ default: z.ZodOptional<z.ZodUnknown>;
84
+ optional: z.ZodOptional<z.ZodBoolean>;
85
+ }, z.core.$strict>>;
86
+ setup: z.ZodArray<z.ZodObject<{
87
+ act: z.ZodString;
88
+ args: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
89
+ if: z.ZodOptional<z.ZodString>;
90
+ forEach: z.ZodOptional<z.ZodString>;
91
+ }, z.core.$strict>>;
92
+ readme: z.ZodString;
93
+ screenshots: z.ZodArray<z.ZodString>;
94
+ author: z.ZodObject<{
95
+ workspace: z.ZodString;
96
+ name: z.ZodString;
97
+ }, z.core.$strict>;
98
+ remixedFrom: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
99
+ license: z.ZodString;
100
+ }, z.core.$strict>;
101
+ export type GraviewTemplate = z.infer<typeof TemplateSpec>;
102
+ /** Whether some JSON says it is a template (rather than a bare document). Says nothing about whether it is a good one. */
103
+ export declare function isGraviewTemplate(raw: unknown): boolean;
104
+ /** Parse a template, saying what is wrong with it in findings with a path. */
105
+ export declare function readGraviewTemplate(raw: unknown): {
106
+ readonly ok: true;
107
+ readonly template: GraviewTemplate;
108
+ } | {
109
+ readonly ok: false;
110
+ readonly findings: readonly Finding[];
111
+ };
112
+ /** One act call setup makes: an ordinary call, with the sentence the history says it was for. */
113
+ export interface TemplateCall {
114
+ readonly name: string;
115
+ readonly args: Record<string, unknown>;
116
+ readonly intent: string;
117
+ }
118
+ export interface InstantiatedTemplate {
119
+ readonly ok: true;
120
+ readonly template: GraviewTemplate;
121
+ readonly document: GraviewDocument;
122
+ readonly compiled: CompiledDocument;
123
+ /** The answers after defaults and coercion; an unanswered optional question is absent. */
124
+ readonly answers: Readonly<Record<string, unknown>>;
125
+ /** The setup, expanded into act calls in the order the template lists them. */
126
+ readonly setup: readonly TemplateCall[];
127
+ /** The example content with its kinds' defaults filled in and its dates moved to today. */
128
+ readonly seed?: TemplateSeed;
129
+ }
130
+ export interface RefusedTemplate {
131
+ readonly ok: false;
132
+ readonly findings: readonly Finding[];
133
+ }
134
+ /**
135
+ * A template, made ready to install: its shape read, its document compiled
136
+ * through the same compiler every document goes through, the answers held to
137
+ * the questions, the setup expanded, and the example content judged against
138
+ * the compiled schema. Everything is judged before anything happens; what
139
+ * comes back is data a store applies.
140
+ *
141
+ * Setup may only create things or act on nothing: an answer can name a
142
+ * category, never "the category made two steps ago".
143
+ */
144
+ export declare function instantiateTemplate(raw: unknown, answers?: Readonly<Record<string, unknown>>, options?: CompileOptions): InstantiatedTemplate | RefusedTemplate;
145
+ /** The example content as primitives, for a store to apply as one batch of its own. */
146
+ export declare function templateSeedPrimitives(seed: TemplateSeed, document: GraviewDocument): Primitive[];
147
+ export {};
148
+ //# sourceMappingURL=graview-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graview-template.d.ts","sourceRoot":"","sources":["../../src/document/graview-template.ts"],"names":[],"mappings":"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"}