@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,950 @@
1
+ export const ANNOUNCED = [];
2
+ export const FIXTURES = [
3
+ {
4
+ "id": "document:vendors",
5
+ "since": "0.1.1",
6
+ "kind": "document",
7
+ "document": {
8
+ "format": "graview-document",
9
+ "formatVersion": 1,
10
+ "name": "Wedding vendors",
11
+ "description": "Who we're hiring, what they quoted, and who's booked.",
12
+ "kinds": {
13
+ "category": {
14
+ "noun": "category",
15
+ "plural": "categories",
16
+ "description": "A kind of vendor we need one of.",
17
+ "fields": {
18
+ "name": {
19
+ "type": "string",
20
+ "required": true
21
+ },
22
+ "budget": {
23
+ "type": "number",
24
+ "format": "money"
25
+ }
26
+ }
27
+ },
28
+ "vendor": {
29
+ "noun": "vendor",
30
+ "plural": "vendors",
31
+ "description": "Someone we might hire.",
32
+ "fields": {
33
+ "name": {
34
+ "type": "string",
35
+ "required": true
36
+ },
37
+ "status": {
38
+ "type": "enum",
39
+ "options": [
40
+ "researching",
41
+ "contacted",
42
+ "booked",
43
+ "declined"
44
+ ],
45
+ "default": "researching",
46
+ "required": true
47
+ },
48
+ "quote": {
49
+ "type": "number",
50
+ "format": "money"
51
+ },
52
+ "due": {
53
+ "type": "date",
54
+ "description": "when they need an answer"
55
+ },
56
+ "notes": {
57
+ "type": "text"
58
+ }
59
+ },
60
+ "describe": "{status} · {quote|money}",
61
+ "lifecycle": {
62
+ "field": "status",
63
+ "retired": [
64
+ "declined"
65
+ ]
66
+ },
67
+ "edges": {
68
+ "fills": {
69
+ "to": [
70
+ "category"
71
+ ],
72
+ "cardinality": "one",
73
+ "description": "the category it fills",
74
+ "inverse": "vendors for it"
75
+ }
76
+ }
77
+ }
78
+ },
79
+ "acts": {
80
+ "add-category": {
81
+ "title": "Add a category",
82
+ "creates": "category",
83
+ "description": "Start tracking a kind of vendor you need, optionally with a budget for it."
84
+ },
85
+ "add-vendor": {
86
+ "title": "Add a vendor",
87
+ "creates": "vendor",
88
+ "description": "Add a vendor you are considering, before you know which category they fill."
89
+ },
90
+ "add-to-category": {
91
+ "title": "Add a vendor to this category",
92
+ "on": "category",
93
+ "args": {
94
+ "name": {
95
+ "type": "string",
96
+ "required": true
97
+ }
98
+ },
99
+ "effects": [
100
+ {
101
+ "create": "vendor",
102
+ "as": "new",
103
+ "set": {
104
+ "name": "$name"
105
+ }
106
+ },
107
+ {
108
+ "connect": "fills",
109
+ "from": "$new",
110
+ "to": "$subject"
111
+ }
112
+ ],
113
+ "description": "Add a vendor you are considering for this category."
114
+ },
115
+ "set-quote": {
116
+ "title": "Set the quote",
117
+ "on": "vendor",
118
+ "writes": [
119
+ "quote"
120
+ ],
121
+ "description": "Record what a vendor quoted, in the app's currency."
122
+ },
123
+ "book": {
124
+ "title": "Book",
125
+ "on": "vendor",
126
+ "sets": {
127
+ "status": "booked"
128
+ },
129
+ "allowedWhen": "status != 'declined'",
130
+ "refusal": "{name} was declined; reopen them first",
131
+ "description": "Mark a vendor as booked once you have committed to them."
132
+ },
133
+ "decline": {
134
+ "title": "Decline",
135
+ "on": "vendor",
136
+ "sets": {
137
+ "status": "declined"
138
+ },
139
+ "description": "Mark a vendor as declined; they drop behind the horizon but are not deleted."
140
+ },
141
+ "file-under": {
142
+ "title": "File under a category",
143
+ "on": "vendor",
144
+ "connects": "fills",
145
+ "description": "Say which category a vendor is for.",
146
+ "fromTheOtherEnd": "Add one of our vendors"
147
+ },
148
+ "unfile": {
149
+ "title": "Take out of its category",
150
+ "on": "vendor",
151
+ "severs": "fills",
152
+ "description": "Take a vendor out of the category they were filed under.",
153
+ "fromTheOtherEnd": "Take a vendor out of this category"
154
+ }
155
+ },
156
+ "rules": {
157
+ "booked-needs-quote": {
158
+ "title": "A booked vendor has a quote",
159
+ "over": "vendor",
160
+ "when": "status == 'booked'",
161
+ "require": "quote != null",
162
+ "says": "{name} is booked but has no quote",
163
+ "repairs": [
164
+ {
165
+ "act": "set-quote",
166
+ "label": "Add the quote"
167
+ }
168
+ ]
169
+ },
170
+ "one-booked-per-category": {
171
+ "title": "One vendor booked per category",
172
+ "over": "category",
173
+ "require": "count(in('fills') where status == 'booked') <= 1",
174
+ "says": "{name} has more than one vendor booked"
175
+ },
176
+ "within-budget": {
177
+ "title": "Booked vendors fit the category's budget",
178
+ "over": "category",
179
+ "when": "present(budget)",
180
+ "require": "sum(in('fills') where status == 'booked', 'quote') <= budget",
181
+ "says": "{name} is over its {budget|money} budget"
182
+ }
183
+ },
184
+ "roles": [
185
+ "owner",
186
+ "planner",
187
+ "viewer"
188
+ ],
189
+ "policy": {
190
+ "grants": [
191
+ {
192
+ "roles": [
193
+ "owner",
194
+ "planner"
195
+ ],
196
+ "mutations": "*"
197
+ }
198
+ ]
199
+ },
200
+ "brand": {
201
+ "accent": "#a8456a"
202
+ }
203
+ },
204
+ "expect": {
205
+ "compiles": true,
206
+ "findings": [
207
+ "warning:role-may-do-nothing"
208
+ ],
209
+ "tools": {
210
+ "add-category": {
211
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
212
+ "type": "object",
213
+ "properties": {
214
+ "name": {
215
+ "type": "string",
216
+ "maxLength": 500
217
+ },
218
+ "budget": {
219
+ "type": "number"
220
+ },
221
+ "id": {
222
+ "type": "string",
223
+ "minLength": 1,
224
+ "description": "Optional: the id for the category this makes. Refused if the graph already has it; left out, one is minted from the label."
225
+ }
226
+ },
227
+ "required": [
228
+ "name"
229
+ ]
230
+ },
231
+ "add-vendor": {
232
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
233
+ "type": "object",
234
+ "properties": {
235
+ "name": {
236
+ "type": "string",
237
+ "maxLength": 500
238
+ },
239
+ "status": {
240
+ "type": "string",
241
+ "enum": [
242
+ "researching",
243
+ "contacted",
244
+ "booked",
245
+ "declined"
246
+ ]
247
+ },
248
+ "quote": {
249
+ "type": "number"
250
+ },
251
+ "due": {
252
+ "type": "string",
253
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
254
+ "description": "when they need an answer"
255
+ },
256
+ "notes": {
257
+ "type": "string",
258
+ "maxLength": 20000
259
+ },
260
+ "id": {
261
+ "type": "string",
262
+ "minLength": 1,
263
+ "description": "Optional: the id for the vendor this makes. Refused if the graph already has it; left out, one is minted from the label."
264
+ }
265
+ },
266
+ "required": [
267
+ "name"
268
+ ]
269
+ },
270
+ "add-to-category": {
271
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
272
+ "type": "object",
273
+ "properties": {
274
+ "id": {
275
+ "type": "string",
276
+ "minLength": 1,
277
+ "description": "Id of a node (category)."
278
+ },
279
+ "name": {
280
+ "type": "string",
281
+ "maxLength": 500
282
+ }
283
+ },
284
+ "required": [
285
+ "id",
286
+ "name"
287
+ ]
288
+ },
289
+ "set-quote": {
290
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
291
+ "type": "object",
292
+ "properties": {
293
+ "id": {
294
+ "type": "string",
295
+ "minLength": 1,
296
+ "description": "Id of a node (vendor)."
297
+ },
298
+ "quote": {
299
+ "type": "number"
300
+ }
301
+ },
302
+ "required": [
303
+ "id",
304
+ "quote"
305
+ ]
306
+ },
307
+ "book": {
308
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
309
+ "type": "object",
310
+ "properties": {
311
+ "id": {
312
+ "type": "string",
313
+ "minLength": 1,
314
+ "description": "Id of a node (vendor)."
315
+ }
316
+ },
317
+ "required": [
318
+ "id"
319
+ ]
320
+ },
321
+ "decline": {
322
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
323
+ "type": "object",
324
+ "properties": {
325
+ "id": {
326
+ "type": "string",
327
+ "minLength": 1,
328
+ "description": "Id of a node (vendor)."
329
+ }
330
+ },
331
+ "required": [
332
+ "id"
333
+ ]
334
+ },
335
+ "file-under": {
336
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
337
+ "type": "object",
338
+ "properties": {
339
+ "id": {
340
+ "type": "string",
341
+ "minLength": 1,
342
+ "description": "Id of a node (vendor)."
343
+ },
344
+ "to": {
345
+ "type": "string",
346
+ "minLength": 1,
347
+ "description": "Id of a node (category)."
348
+ }
349
+ },
350
+ "required": [
351
+ "id",
352
+ "to"
353
+ ]
354
+ },
355
+ "unfile": {
356
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
357
+ "type": "object",
358
+ "properties": {
359
+ "id": {
360
+ "type": "string",
361
+ "minLength": 1,
362
+ "description": "Id of a node (vendor)."
363
+ },
364
+ "to": {
365
+ "type": "string",
366
+ "minLength": 1,
367
+ "description": "Id of a node (category)."
368
+ }
369
+ },
370
+ "required": [
371
+ "id",
372
+ "to"
373
+ ]
374
+ },
375
+ "edit-category": {
376
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
377
+ "type": "object",
378
+ "properties": {
379
+ "id": {
380
+ "type": "string",
381
+ "minLength": 1,
382
+ "description": "Id of a node (category)."
383
+ },
384
+ "budget": {
385
+ "type": "number"
386
+ }
387
+ },
388
+ "required": [
389
+ "id"
390
+ ]
391
+ },
392
+ "edit-vendor": {
393
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
394
+ "type": "object",
395
+ "properties": {
396
+ "id": {
397
+ "type": "string",
398
+ "minLength": 1,
399
+ "description": "Id of a node (vendor)."
400
+ },
401
+ "name": {
402
+ "type": "string",
403
+ "maxLength": 500
404
+ },
405
+ "due": {
406
+ "type": "string",
407
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
408
+ "description": "when they need an answer"
409
+ },
410
+ "notes": {
411
+ "type": "string",
412
+ "maxLength": 20000
413
+ }
414
+ },
415
+ "required": [
416
+ "id"
417
+ ]
418
+ },
419
+ "remove-category": {
420
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
421
+ "type": "object",
422
+ "properties": {
423
+ "id": {
424
+ "type": "string",
425
+ "minLength": 1,
426
+ "description": "Id of a node (category)."
427
+ }
428
+ },
429
+ "required": [
430
+ "id"
431
+ ]
432
+ },
433
+ "remove-vendor": {
434
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
435
+ "type": "object",
436
+ "properties": {
437
+ "id": {
438
+ "type": "string",
439
+ "minLength": 1,
440
+ "description": "Id of a node (vendor)."
441
+ }
442
+ },
443
+ "required": [
444
+ "id"
445
+ ]
446
+ }
447
+ }
448
+ }
449
+ },
450
+ {
451
+ "id": "document:two-lines",
452
+ "since": "0.1.1",
453
+ "kind": "document",
454
+ "document": {
455
+ "format": "graview-document",
456
+ "formatVersion": 1,
457
+ "name": "Chores",
458
+ "kinds": {
459
+ "chore": {
460
+ "fields": {
461
+ "title": {
462
+ "type": "string",
463
+ "required": true
464
+ },
465
+ "done": {
466
+ "type": "boolean"
467
+ }
468
+ }
469
+ }
470
+ },
471
+ "acts": {
472
+ "add-chore": {
473
+ "title": "Add a chore",
474
+ "creates": "chore"
475
+ }
476
+ }
477
+ },
478
+ "expect": {
479
+ "compiles": true,
480
+ "findings": [
481
+ "warning:mutation-undescribed"
482
+ ],
483
+ "tools": {
484
+ "add-chore": {
485
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
486
+ "type": "object",
487
+ "properties": {
488
+ "title": {
489
+ "type": "string",
490
+ "maxLength": 500
491
+ },
492
+ "done": {
493
+ "type": "boolean"
494
+ },
495
+ "id": {
496
+ "type": "string",
497
+ "minLength": 1,
498
+ "description": "Optional: the id for the chore this makes. Refused if the graph already has it; left out, one is minted from the label."
499
+ }
500
+ },
501
+ "required": [
502
+ "title"
503
+ ]
504
+ },
505
+ "edit-chore": {
506
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
507
+ "type": "object",
508
+ "properties": {
509
+ "id": {
510
+ "type": "string",
511
+ "minLength": 1,
512
+ "description": "Id of a node (chore)."
513
+ },
514
+ "title": {
515
+ "type": "string",
516
+ "maxLength": 500
517
+ },
518
+ "done": {
519
+ "type": "boolean"
520
+ }
521
+ },
522
+ "required": [
523
+ "id"
524
+ ]
525
+ },
526
+ "remove-chore": {
527
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
528
+ "type": "object",
529
+ "properties": {
530
+ "id": {
531
+ "type": "string",
532
+ "minLength": 1,
533
+ "description": "Id of a node (chore)."
534
+ }
535
+ },
536
+ "required": [
537
+ "id"
538
+ ]
539
+ }
540
+ }
541
+ }
542
+ },
543
+ {
544
+ "id": "log:vendors-booked-then-taken-back",
545
+ "since": "0.1.1",
546
+ "kind": "log",
547
+ "document": "document:vendors",
548
+ "ops": [
549
+ {
550
+ "id": "op1",
551
+ "seq": 0,
552
+ "batch": "batch:1",
553
+ "author": {
554
+ "kind": "human",
555
+ "id": "nick",
556
+ "roles": [
557
+ "owner"
558
+ ]
559
+ },
560
+ "intent": "Add a category: Florist",
561
+ "mutation": {
562
+ "name": "add-category",
563
+ "args": {
564
+ "name": "Florist",
565
+ "budget": 3000
566
+ }
567
+ },
568
+ "primitives": [
569
+ {
570
+ "op": "add-node",
571
+ "node": {
572
+ "id": "category:florist",
573
+ "kind": "category",
574
+ "name": "Florist",
575
+ "budget": 3000
576
+ }
577
+ }
578
+ ],
579
+ "inverse": [
580
+ {
581
+ "op": "remove-node",
582
+ "node": {
583
+ "id": "category:florist",
584
+ "kind": "category",
585
+ "name": "Florist",
586
+ "budget": 3000
587
+ }
588
+ }
589
+ ],
590
+ "reads": [
591
+ "category:florist"
592
+ ],
593
+ "writes": [
594
+ "category:florist"
595
+ ],
596
+ "at": "2026-10-02T09:00:00.000Z"
597
+ },
598
+ {
599
+ "id": "op2",
600
+ "seq": 1,
601
+ "batch": "batch:2",
602
+ "author": {
603
+ "kind": "human",
604
+ "id": "nick",
605
+ "roles": [
606
+ "owner"
607
+ ]
608
+ },
609
+ "intent": "Add a vendor: Bloom & Co",
610
+ "mutation": {
611
+ "name": "add-vendor",
612
+ "args": {
613
+ "name": "Bloom & Co"
614
+ }
615
+ },
616
+ "primitives": [
617
+ {
618
+ "op": "add-node",
619
+ "node": {
620
+ "id": "vendor:bloom-co",
621
+ "kind": "vendor",
622
+ "status": "researching",
623
+ "name": "Bloom & Co"
624
+ }
625
+ }
626
+ ],
627
+ "inverse": [
628
+ {
629
+ "op": "remove-node",
630
+ "node": {
631
+ "id": "vendor:bloom-co",
632
+ "kind": "vendor",
633
+ "status": "researching",
634
+ "name": "Bloom & Co"
635
+ }
636
+ }
637
+ ],
638
+ "reads": [
639
+ "vendor:bloom-co"
640
+ ],
641
+ "writes": [
642
+ "vendor:bloom-co"
643
+ ],
644
+ "at": "2026-10-02T09:00:01.000Z"
645
+ },
646
+ {
647
+ "id": "op3",
648
+ "seq": 2,
649
+ "batch": "batch:3",
650
+ "author": {
651
+ "kind": "human",
652
+ "id": "nick",
653
+ "roles": [
654
+ "owner"
655
+ ]
656
+ },
657
+ "intent": "File under a category: Bloom & Co",
658
+ "mutation": {
659
+ "name": "file-under",
660
+ "args": {
661
+ "id": "vendor:bloom-co",
662
+ "to": "category:florist"
663
+ }
664
+ },
665
+ "primitives": [
666
+ {
667
+ "op": "add-edge",
668
+ "edge": {
669
+ "kind": "fills",
670
+ "from": "vendor:bloom-co",
671
+ "to": "category:florist"
672
+ }
673
+ }
674
+ ],
675
+ "inverse": [
676
+ {
677
+ "op": "remove-edge",
678
+ "edge": {
679
+ "kind": "fills",
680
+ "from": "vendor:bloom-co",
681
+ "to": "category:florist"
682
+ }
683
+ }
684
+ ],
685
+ "reads": [
686
+ "vendor:bloom-co",
687
+ "category:florist"
688
+ ],
689
+ "writes": [
690
+ "vendor:bloom-co",
691
+ "category:florist"
692
+ ],
693
+ "at": "2026-10-02T09:00:02.000Z"
694
+ },
695
+ {
696
+ "id": "op4",
697
+ "seq": 3,
698
+ "batch": "batch:4",
699
+ "author": {
700
+ "kind": "human",
701
+ "id": "nick",
702
+ "roles": [
703
+ "owner"
704
+ ]
705
+ },
706
+ "intent": "Set the quote: Bloom & Co",
707
+ "mutation": {
708
+ "name": "set-quote",
709
+ "args": {
710
+ "id": "vendor:bloom-co",
711
+ "quote": 2400
712
+ }
713
+ },
714
+ "primitives": [
715
+ {
716
+ "op": "patch-node",
717
+ "id": "vendor:bloom-co",
718
+ "before": {
719
+ "quote": "\u0000graview:unset"
720
+ },
721
+ "after": {
722
+ "quote": 2400
723
+ }
724
+ }
725
+ ],
726
+ "inverse": [
727
+ {
728
+ "op": "patch-node",
729
+ "id": "vendor:bloom-co",
730
+ "before": {
731
+ "quote": 2400
732
+ },
733
+ "after": {
734
+ "quote": "\u0000graview:unset"
735
+ }
736
+ }
737
+ ],
738
+ "reads": [
739
+ "vendor:bloom-co"
740
+ ],
741
+ "writes": [
742
+ "vendor:bloom-co"
743
+ ],
744
+ "at": "2026-10-02T09:00:03.000Z"
745
+ },
746
+ {
747
+ "id": "op5",
748
+ "seq": 4,
749
+ "batch": "batch:5",
750
+ "author": {
751
+ "kind": "human",
752
+ "id": "nick",
753
+ "roles": [
754
+ "owner"
755
+ ]
756
+ },
757
+ "intent": "Book: Bloom & Co",
758
+ "mutation": {
759
+ "name": "book",
760
+ "args": {
761
+ "id": "vendor:bloom-co"
762
+ }
763
+ },
764
+ "primitives": [
765
+ {
766
+ "op": "patch-node",
767
+ "id": "vendor:bloom-co",
768
+ "before": {
769
+ "status": "researching"
770
+ },
771
+ "after": {
772
+ "status": "booked"
773
+ }
774
+ }
775
+ ],
776
+ "inverse": [
777
+ {
778
+ "op": "patch-node",
779
+ "id": "vendor:bloom-co",
780
+ "before": {
781
+ "status": "booked"
782
+ },
783
+ "after": {
784
+ "status": "researching"
785
+ }
786
+ }
787
+ ],
788
+ "reads": [
789
+ "vendor:bloom-co"
790
+ ],
791
+ "writes": [
792
+ "vendor:bloom-co"
793
+ ],
794
+ "at": "2026-10-02T09:00:04.000Z"
795
+ },
796
+ {
797
+ "id": "op6",
798
+ "seq": 5,
799
+ "batch": "undo:6",
800
+ "author": {
801
+ "kind": "human",
802
+ "id": "nick",
803
+ "roles": [
804
+ "owner"
805
+ ]
806
+ },
807
+ "intent": "Undo: Book: Bloom & Co",
808
+ "mutation": null,
809
+ "primitives": [
810
+ {
811
+ "op": "patch-node",
812
+ "id": "vendor:bloom-co",
813
+ "before": {
814
+ "status": "booked"
815
+ },
816
+ "after": {
817
+ "status": "researching"
818
+ }
819
+ }
820
+ ],
821
+ "inverse": [
822
+ {
823
+ "op": "patch-node",
824
+ "id": "vendor:bloom-co",
825
+ "before": {
826
+ "status": "researching"
827
+ },
828
+ "after": {
829
+ "status": "booked"
830
+ }
831
+ }
832
+ ],
833
+ "reads": [
834
+ "vendor:bloom-co"
835
+ ],
836
+ "writes": [
837
+ "vendor:bloom-co"
838
+ ],
839
+ "at": "2026-10-02T09:00:05.000Z",
840
+ "undoes": "op5"
841
+ }
842
+ ],
843
+ "expect": {
844
+ "hash": "sha256:db231bcf2f82d2a821f53ae69dba7c24f438c216f0e158d56ddf6d2dfb701a2f"
845
+ }
846
+ },
847
+ {
848
+ "id": "log:two-lines-made-and-done",
849
+ "since": "0.1.1",
850
+ "kind": "log",
851
+ "document": "document:two-lines",
852
+ "ops": [
853
+ {
854
+ "id": "op1",
855
+ "seq": 0,
856
+ "batch": "batch:1",
857
+ "author": {
858
+ "kind": "human",
859
+ "id": "kai"
860
+ },
861
+ "intent": "Add a chore: Water the beds",
862
+ "mutation": {
863
+ "name": "add-chore",
864
+ "args": {
865
+ "title": "Water the beds"
866
+ }
867
+ },
868
+ "primitives": [
869
+ {
870
+ "op": "add-node",
871
+ "node": {
872
+ "id": "chore:water-the-beds",
873
+ "kind": "chore",
874
+ "title": "Water the beds"
875
+ }
876
+ }
877
+ ],
878
+ "inverse": [
879
+ {
880
+ "op": "remove-node",
881
+ "node": {
882
+ "id": "chore:water-the-beds",
883
+ "kind": "chore",
884
+ "title": "Water the beds"
885
+ }
886
+ }
887
+ ],
888
+ "reads": [
889
+ "chore:water-the-beds"
890
+ ],
891
+ "writes": [
892
+ "chore:water-the-beds"
893
+ ],
894
+ "at": "2026-10-02T09:00:00.000Z"
895
+ },
896
+ {
897
+ "id": "op2",
898
+ "seq": 1,
899
+ "batch": "batch:2",
900
+ "author": {
901
+ "kind": "human",
902
+ "id": "kai"
903
+ },
904
+ "intent": "Change Water the beds: done → true",
905
+ "mutation": {
906
+ "name": "edit-chore",
907
+ "args": {
908
+ "id": "chore:water-the-beds",
909
+ "done": true
910
+ }
911
+ },
912
+ "primitives": [
913
+ {
914
+ "op": "patch-node",
915
+ "id": "chore:water-the-beds",
916
+ "before": {
917
+ "done": "\u0000graview:unset"
918
+ },
919
+ "after": {
920
+ "done": true
921
+ }
922
+ }
923
+ ],
924
+ "inverse": [
925
+ {
926
+ "op": "patch-node",
927
+ "id": "chore:water-the-beds",
928
+ "before": {
929
+ "done": true
930
+ },
931
+ "after": {
932
+ "done": "\u0000graview:unset"
933
+ }
934
+ }
935
+ ],
936
+ "reads": [
937
+ "chore:water-the-beds"
938
+ ],
939
+ "writes": [
940
+ "chore:water-the-beds"
941
+ ],
942
+ "at": "2026-10-02T09:00:01.000Z"
943
+ }
944
+ ],
945
+ "expect": {
946
+ "hash": "sha256:b29541a9aba631c123aaa684556f463846c22f3471b098e0147469e864874eb5"
947
+ }
948
+ }
949
+ ];
950
+ //# sourceMappingURL=fixtures.js.map