@graview/core 0.1.0 → 0.1.2

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 (292) 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 +787 -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 +143 -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 +1420 -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 +459 -0
  114. package/dist/document/schema.d.ts.map +1 -0
  115. package/dist/document/schema.js +197 -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 +182 -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 +52 -3
  138. package/dist/graph/graph.d.ts.map +1 -1
  139. package/dist/graph/graph.js +169 -16
  140. package/dist/graph/graph.js.map +1 -1
  141. package/dist/index.d.ts +40 -17
  142. package/dist/index.d.ts.map +1 -1
  143. package/dist/index.js +29 -10
  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 +2 -3
  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 +145 -4
  180. package/dist/ops/log.d.ts.map +1 -1
  181. package/dist/ops/log.js +220 -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 +23 -2
  190. package/dist/ops/undo.d.ts.map +1 -1
  191. package/dist/ops/undo.js +107 -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 +50 -0
  202. package/dist/permissions/sight.d.ts.map +1 -0
  203. package/dist/permissions/sight.js +76 -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 +31 -0
  222. package/dist/presence.d.ts.map +1 -1
  223. package/dist/presence.js +36 -0
  224. package/dist/presence.js.map +1 -1
  225. package/dist/scaffold/from-template.d.ts +16 -0
  226. package/dist/scaffold/from-template.d.ts.map +1 -0
  227. package/dist/scaffold/from-template.js +157 -0
  228. package/dist/scaffold/from-template.js.map +1 -0
  229. package/dist/scaffold/index.d.ts +10 -1
  230. package/dist/scaffold/index.d.ts.map +1 -1
  231. package/dist/scaffold/index.js +35 -7
  232. package/dist/scaffold/index.js.map +1 -1
  233. package/dist/scaffold/names.d.ts +4 -0
  234. package/dist/scaffold/names.d.ts.map +1 -1
  235. package/dist/scaffold/names.js.map +1 -1
  236. package/dist/scaffold/project.d.ts +1 -1
  237. package/dist/scaffold/project.d.ts.map +1 -1
  238. package/dist/scaffold/project.js +44 -13
  239. package/dist/scaffold/project.js.map +1 -1
  240. package/dist/scaffold/ui.d.ts.map +1 -1
  241. package/dist/scaffold/ui.js +19 -10
  242. package/dist/scaffold/ui.js.map +1 -1
  243. package/dist/schema/define-node.d.ts +20 -0
  244. package/dist/schema/define-node.d.ts.map +1 -1
  245. package/dist/schema/define-node.js +27 -2
  246. package/dist/schema/define-node.js.map +1 -1
  247. package/dist/schema/path.d.ts +19 -0
  248. package/dist/schema/path.d.ts.map +1 -0
  249. package/dist/schema/path.js +34 -0
  250. package/dist/schema/path.js.map +1 -0
  251. package/dist/schema/types.d.ts +6 -0
  252. package/dist/schema/types.d.ts.map +1 -1
  253. package/dist/seen.d.ts +58 -0
  254. package/dist/seen.d.ts.map +1 -0
  255. package/dist/seen.js +194 -0
  256. package/dist/seen.js.map +1 -0
  257. package/dist/store.d.ts +317 -8
  258. package/dist/store.d.ts.map +1 -1
  259. package/dist/store.js +720 -37
  260. package/dist/store.js.map +1 -1
  261. package/dist/testing.d.ts +6 -0
  262. package/dist/testing.d.ts.map +1 -1
  263. package/dist/testing.js +3 -1
  264. package/dist/testing.js.map +1 -1
  265. package/dist/theme/palettes.d.ts.map +1 -1
  266. package/dist/theme/palettes.js +4 -0
  267. package/dist/theme/palettes.js.map +1 -1
  268. package/dist/theme/types.d.ts +9 -0
  269. package/dist/theme/types.d.ts.map +1 -1
  270. package/dist/theme/types.js +4 -0
  271. package/dist/theme/types.js.map +1 -1
  272. package/dist/validate-graph.d.ts +83 -0
  273. package/dist/validate-graph.d.ts.map +1 -0
  274. package/dist/validate-graph.js +288 -0
  275. package/dist/validate-graph.js.map +1 -0
  276. package/dist/version.d.ts +3 -0
  277. package/dist/version.d.ts.map +1 -0
  278. package/dist/version.js +3 -0
  279. package/dist/version.js.map +1 -0
  280. package/dist/views/types.d.ts +8 -0
  281. package/dist/views/types.d.ts.map +1 -1
  282. package/dist/views/types.js +5 -0
  283. package/dist/views/types.js.map +1 -1
  284. package/dist/watched.d.ts +39 -0
  285. package/dist/watched.d.ts.map +1 -1
  286. package/dist/watched.js +94 -1
  287. package/dist/watched.js.map +1 -1
  288. package/dist/who.d.ts +24 -1
  289. package/dist/who.d.ts.map +1 -1
  290. package/dist/who.js +49 -2
  291. package/dist/who.js.map +1 -1
  292. package/package.json +9 -1
@@ -0,0 +1,459 @@
1
+ import { z } from "zod";
2
+ export declare const FORMAT = "graview-document";
3
+ export declare const FORMAT_VERSION = 1;
4
+ export declare const MAX_DOCUMENT_BYTES: number;
5
+ /** kebab-case: kinds, acts, rules, edges, roles, modules. */
6
+ export declare const NAME: RegExp;
7
+ /** Field names are identifiers so a rule can say them bare: `quote != null`. */
8
+ export declare const FIELD_NAME: RegExp;
9
+ /**
10
+ * A RELATION'S NAME may be kebab-case or one camelCase word. camelCase is
11
+ * recommended: a rule can then walk it bare (`tendedBy.name`), where
12
+ * `tended-by.name` would read as a subtraction.
13
+ */
14
+ export declare const EDGE_NAME: RegExp;
15
+ export declare const FIELD_TYPES: readonly ["string", "text", "number", "integer", "boolean", "date", "datetime", "enum", "list", "url", "email"];
16
+ export type FieldType = (typeof FIELD_TYPES)[number];
17
+ export declare const FieldSpec: z.ZodObject<{
18
+ type: z.ZodEnum<{
19
+ string: "string";
20
+ number: "number";
21
+ boolean: "boolean";
22
+ text: "text";
23
+ date: "date";
24
+ enum: "enum";
25
+ list: "list";
26
+ email: "email";
27
+ integer: "integer";
28
+ datetime: "datetime";
29
+ url: "url";
30
+ }>;
31
+ required: z.ZodOptional<z.ZodBoolean>;
32
+ description: z.ZodOptional<z.ZodString>;
33
+ label: z.ZodOptional<z.ZodString>;
34
+ options: z.ZodOptional<z.ZodArray<z.ZodString>>;
35
+ of: z.ZodOptional<z.ZodEnum<{
36
+ string: "string";
37
+ number: "number";
38
+ date: "date";
39
+ }>>;
40
+ default: z.ZodOptional<z.ZodUnknown>;
41
+ unit: z.ZodOptional<z.ZodString>;
42
+ format: z.ZodOptional<z.ZodEnum<{
43
+ money: "money";
44
+ percent: "percent";
45
+ duration: "duration";
46
+ }>>;
47
+ renamedFrom: z.ZodOptional<z.ZodString>;
48
+ }, z.core.$strict>;
49
+ export type FieldSpec = z.infer<typeof FieldSpec>;
50
+ export declare const EdgeSpec: z.ZodObject<{
51
+ to: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<"*">]>;
52
+ cardinality: z.ZodOptional<z.ZodEnum<{
53
+ one: "one";
54
+ many: "many";
55
+ }>>;
56
+ description: z.ZodOptional<z.ZodString>;
57
+ inverse: z.ZodOptional<z.ZodString>;
58
+ appendOnly: z.ZodOptional<z.ZodBoolean>;
59
+ renamedFrom: z.ZodOptional<z.ZodString>;
60
+ }, z.core.$strict>;
61
+ export type EdgeSpec = z.infer<typeof EdgeSpec>;
62
+ export declare const KindSpec: z.ZodObject<{
63
+ noun: z.ZodOptional<z.ZodString>;
64
+ plural: z.ZodOptional<z.ZodString>;
65
+ description: z.ZodOptional<z.ZodString>;
66
+ fields: z.ZodRecord<z.ZodString, z.ZodObject<{
67
+ type: z.ZodEnum<{
68
+ string: "string";
69
+ number: "number";
70
+ boolean: "boolean";
71
+ text: "text";
72
+ date: "date";
73
+ enum: "enum";
74
+ list: "list";
75
+ email: "email";
76
+ integer: "integer";
77
+ datetime: "datetime";
78
+ url: "url";
79
+ }>;
80
+ required: z.ZodOptional<z.ZodBoolean>;
81
+ description: z.ZodOptional<z.ZodString>;
82
+ label: z.ZodOptional<z.ZodString>;
83
+ options: z.ZodOptional<z.ZodArray<z.ZodString>>;
84
+ of: z.ZodOptional<z.ZodEnum<{
85
+ string: "string";
86
+ number: "number";
87
+ date: "date";
88
+ }>>;
89
+ default: z.ZodOptional<z.ZodUnknown>;
90
+ unit: z.ZodOptional<z.ZodString>;
91
+ format: z.ZodOptional<z.ZodEnum<{
92
+ money: "money";
93
+ percent: "percent";
94
+ duration: "duration";
95
+ }>>;
96
+ renamedFrom: z.ZodOptional<z.ZodString>;
97
+ }, z.core.$strict>>;
98
+ label: z.ZodOptional<z.ZodString>;
99
+ describe: z.ZodOptional<z.ZodString>;
100
+ lifecycle: z.ZodOptional<z.ZodObject<{
101
+ field: z.ZodString;
102
+ retired: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
103
+ }, z.core.$strict>>;
104
+ figure: z.ZodOptional<z.ZodString>;
105
+ edges: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
106
+ to: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<"*">]>;
107
+ cardinality: z.ZodOptional<z.ZodEnum<{
108
+ one: "one";
109
+ many: "many";
110
+ }>>;
111
+ description: z.ZodOptional<z.ZodString>;
112
+ inverse: z.ZodOptional<z.ZodString>;
113
+ appendOnly: z.ZodOptional<z.ZodBoolean>;
114
+ renamedFrom: z.ZodOptional<z.ZodString>;
115
+ }, z.core.$strict>>>;
116
+ renamedFrom: z.ZodOptional<z.ZodString>;
117
+ }, z.core.$strict>;
118
+ export type KindSpec = z.infer<typeof KindSpec>;
119
+ /** A value an effect writes: a literal, `$arg`, `$subject`, `$new`, `$now`, `$today`, or `{ expr }`. */
120
+ export declare const ValueSpec: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodUnknown>, z.ZodObject<{
121
+ expr: z.ZodString;
122
+ }, z.core.$strict>]>;
123
+ export type ValueSpec = z.infer<typeof ValueSpec>;
124
+ export declare const EffectSpec: z.ZodUnion<readonly [z.ZodObject<{
125
+ create: z.ZodString;
126
+ as: z.ZodOptional<z.ZodString>;
127
+ set: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodUnknown>, z.ZodObject<{
128
+ expr: z.ZodString;
129
+ }, z.core.$strict>]>>>;
130
+ }, z.core.$strict>, z.ZodObject<{
131
+ set: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodUnknown>, z.ZodObject<{
132
+ expr: z.ZodString;
133
+ }, z.core.$strict>]>>;
134
+ target: z.ZodOptional<z.ZodString>;
135
+ }, z.core.$strict>, z.ZodObject<{
136
+ connect: z.ZodString;
137
+ from: z.ZodString;
138
+ to: z.ZodString;
139
+ }, z.core.$strict>, z.ZodObject<{
140
+ sever: z.ZodString;
141
+ from: z.ZodString;
142
+ to: z.ZodString;
143
+ }, z.core.$strict>, z.ZodObject<{
144
+ remove: z.ZodString;
145
+ }, z.core.$strict>]>;
146
+ export type EffectSpec = z.infer<typeof EffectSpec>;
147
+ export declare const ActSpec: z.ZodObject<{
148
+ title: z.ZodOptional<z.ZodString>;
149
+ description: z.ZodOptional<z.ZodString>;
150
+ fromTheOtherEnd: z.ZodOptional<z.ZodString>;
151
+ on: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
152
+ creates: z.ZodOptional<z.ZodString>;
153
+ sets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodUnknown>, z.ZodObject<{
154
+ expr: z.ZodString;
155
+ }, z.core.$strict>]>>>;
156
+ writes: z.ZodOptional<z.ZodArray<z.ZodString>>;
157
+ connects: z.ZodOptional<z.ZodString>;
158
+ severs: z.ZodOptional<z.ZodString>;
159
+ removes: z.ZodOptional<z.ZodLiteral<true>>;
160
+ args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
161
+ type: z.ZodEnum<{
162
+ string: "string";
163
+ number: "number";
164
+ boolean: "boolean";
165
+ text: "text";
166
+ date: "date";
167
+ enum: "enum";
168
+ list: "list";
169
+ email: "email";
170
+ integer: "integer";
171
+ datetime: "datetime";
172
+ url: "url";
173
+ }>;
174
+ required: z.ZodOptional<z.ZodBoolean>;
175
+ description: z.ZodOptional<z.ZodString>;
176
+ label: z.ZodOptional<z.ZodString>;
177
+ options: z.ZodOptional<z.ZodArray<z.ZodString>>;
178
+ of: z.ZodOptional<z.ZodEnum<{
179
+ string: "string";
180
+ number: "number";
181
+ date: "date";
182
+ }>>;
183
+ default: z.ZodOptional<z.ZodUnknown>;
184
+ unit: z.ZodOptional<z.ZodString>;
185
+ format: z.ZodOptional<z.ZodEnum<{
186
+ money: "money";
187
+ percent: "percent";
188
+ duration: "duration";
189
+ }>>;
190
+ renamedFrom: z.ZodOptional<z.ZodString>;
191
+ }, z.core.$strict>>>;
192
+ effects: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
193
+ create: z.ZodString;
194
+ as: z.ZodOptional<z.ZodString>;
195
+ set: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodUnknown>, z.ZodObject<{
196
+ expr: z.ZodString;
197
+ }, z.core.$strict>]>>>;
198
+ }, z.core.$strict>, z.ZodObject<{
199
+ set: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodUnknown>, z.ZodObject<{
200
+ expr: z.ZodString;
201
+ }, z.core.$strict>]>>;
202
+ target: z.ZodOptional<z.ZodString>;
203
+ }, z.core.$strict>, z.ZodObject<{
204
+ connect: z.ZodString;
205
+ from: z.ZodString;
206
+ to: z.ZodString;
207
+ }, z.core.$strict>, z.ZodObject<{
208
+ sever: z.ZodString;
209
+ from: z.ZodString;
210
+ to: z.ZodString;
211
+ }, z.core.$strict>, z.ZodObject<{
212
+ remove: z.ZodString;
213
+ }, z.core.$strict>]>>>;
214
+ allowedWhen: z.ZodOptional<z.ZodString>;
215
+ refusal: z.ZodOptional<z.ZodString>;
216
+ destructive: z.ZodOptional<z.ZodBoolean>;
217
+ }, z.core.$strict>;
218
+ export type ActSpec = z.infer<typeof ActSpec>;
219
+ export declare const RepairSpec: z.ZodObject<{
220
+ act: z.ZodString;
221
+ label: z.ZodOptional<z.ZodString>;
222
+ args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodUnknown>, z.ZodObject<{
223
+ expr: z.ZodString;
224
+ }, z.core.$strict>]>>>;
225
+ }, z.core.$strict>;
226
+ export declare const RuleSpec: z.ZodObject<{
227
+ title: z.ZodOptional<z.ZodString>;
228
+ description: z.ZodOptional<z.ZodString>;
229
+ over: z.ZodUnion<readonly [z.ZodLiteral<"graph">, z.ZodString]>;
230
+ when: z.ZodOptional<z.ZodString>;
231
+ require: z.ZodString;
232
+ says: z.ZodOptional<z.ZodString>;
233
+ repairs: z.ZodOptional<z.ZodArray<z.ZodObject<{
234
+ act: z.ZodString;
235
+ label: z.ZodOptional<z.ZodString>;
236
+ args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodUnknown>, z.ZodObject<{
237
+ expr: z.ZodString;
238
+ }, z.core.$strict>]>>>;
239
+ }, z.core.$strict>>>;
240
+ }, z.core.$strict>;
241
+ export type RuleSpec = z.infer<typeof RuleSpec>;
242
+ export declare const GrantSpec: z.ZodObject<{
243
+ roles: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<"*">]>;
244
+ mutations: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<"*">]>;
245
+ kinds: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<"*">]>>;
246
+ describe: z.ZodOptional<z.ZodString>;
247
+ self: z.ZodOptional<z.ZodBoolean>;
248
+ }, z.core.$strict>;
249
+ /**
250
+ * Who sees which kinds — the framework's `Sight`, one meaning (FR-02).
251
+ * Absent: everyone sees everything. Present: a kind no sight names is seen
252
+ * by nobody but the system (a host that gives its owners everything serves
253
+ * them as the system, or names them in a sight).
254
+ */
255
+ export declare const SightSpec: z.ZodObject<{
256
+ roles: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<"*">]>;
257
+ kinds: z.ZodArray<z.ZodString>;
258
+ own: z.ZodOptional<z.ZodBoolean>;
259
+ }, z.core.$strict>;
260
+ export type SightSpec = z.infer<typeof SightSpec>;
261
+ export declare const PolicySpec: z.ZodObject<{
262
+ grants: z.ZodArray<z.ZodObject<{
263
+ roles: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<"*">]>;
264
+ mutations: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<"*">]>;
265
+ kinds: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<"*">]>>;
266
+ describe: z.ZodOptional<z.ZodString>;
267
+ self: z.ZodOptional<z.ZodBoolean>;
268
+ }, z.core.$strict>>;
269
+ sees: z.ZodOptional<z.ZodArray<z.ZodObject<{
270
+ roles: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<"*">]>;
271
+ kinds: z.ZodArray<z.ZodString>;
272
+ own: z.ZodOptional<z.ZodBoolean>;
273
+ }, z.core.$strict>>>;
274
+ }, z.core.$strict>;
275
+ export type PolicySpec = z.infer<typeof PolicySpec>;
276
+ export declare const BrandSpec: z.ZodObject<{
277
+ accent: z.ZodString;
278
+ name: z.ZodOptional<z.ZodString>;
279
+ }, z.core.$strict>;
280
+ export declare const DocumentSpec: z.ZodObject<{
281
+ format: z.ZodLiteral<"graview-document">;
282
+ formatVersion: z.ZodLiteral<1>;
283
+ name: z.ZodString;
284
+ description: z.ZodOptional<z.ZodString>;
285
+ version: z.ZodOptional<z.ZodNumber>;
286
+ kinds: z.ZodRecord<z.ZodString, z.ZodObject<{
287
+ noun: z.ZodOptional<z.ZodString>;
288
+ plural: z.ZodOptional<z.ZodString>;
289
+ description: z.ZodOptional<z.ZodString>;
290
+ fields: z.ZodRecord<z.ZodString, z.ZodObject<{
291
+ type: z.ZodEnum<{
292
+ string: "string";
293
+ number: "number";
294
+ boolean: "boolean";
295
+ text: "text";
296
+ date: "date";
297
+ enum: "enum";
298
+ list: "list";
299
+ email: "email";
300
+ integer: "integer";
301
+ datetime: "datetime";
302
+ url: "url";
303
+ }>;
304
+ required: z.ZodOptional<z.ZodBoolean>;
305
+ description: z.ZodOptional<z.ZodString>;
306
+ label: z.ZodOptional<z.ZodString>;
307
+ options: z.ZodOptional<z.ZodArray<z.ZodString>>;
308
+ of: z.ZodOptional<z.ZodEnum<{
309
+ string: "string";
310
+ number: "number";
311
+ date: "date";
312
+ }>>;
313
+ default: z.ZodOptional<z.ZodUnknown>;
314
+ unit: z.ZodOptional<z.ZodString>;
315
+ format: z.ZodOptional<z.ZodEnum<{
316
+ money: "money";
317
+ percent: "percent";
318
+ duration: "duration";
319
+ }>>;
320
+ renamedFrom: z.ZodOptional<z.ZodString>;
321
+ }, z.core.$strict>>;
322
+ label: z.ZodOptional<z.ZodString>;
323
+ describe: z.ZodOptional<z.ZodString>;
324
+ lifecycle: z.ZodOptional<z.ZodObject<{
325
+ field: z.ZodString;
326
+ retired: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
327
+ }, z.core.$strict>>;
328
+ figure: z.ZodOptional<z.ZodString>;
329
+ edges: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
330
+ to: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<"*">]>;
331
+ cardinality: z.ZodOptional<z.ZodEnum<{
332
+ one: "one";
333
+ many: "many";
334
+ }>>;
335
+ description: z.ZodOptional<z.ZodString>;
336
+ inverse: z.ZodOptional<z.ZodString>;
337
+ appendOnly: z.ZodOptional<z.ZodBoolean>;
338
+ renamedFrom: z.ZodOptional<z.ZodString>;
339
+ }, z.core.$strict>>>;
340
+ renamedFrom: z.ZodOptional<z.ZodString>;
341
+ }, z.core.$strict>>;
342
+ acts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
343
+ title: z.ZodOptional<z.ZodString>;
344
+ description: z.ZodOptional<z.ZodString>;
345
+ fromTheOtherEnd: z.ZodOptional<z.ZodString>;
346
+ on: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
347
+ creates: z.ZodOptional<z.ZodString>;
348
+ sets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodUnknown>, z.ZodObject<{
349
+ expr: z.ZodString;
350
+ }, z.core.$strict>]>>>;
351
+ writes: z.ZodOptional<z.ZodArray<z.ZodString>>;
352
+ connects: z.ZodOptional<z.ZodString>;
353
+ severs: z.ZodOptional<z.ZodString>;
354
+ removes: z.ZodOptional<z.ZodLiteral<true>>;
355
+ args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
356
+ type: z.ZodEnum<{
357
+ string: "string";
358
+ number: "number";
359
+ boolean: "boolean";
360
+ text: "text";
361
+ date: "date";
362
+ enum: "enum";
363
+ list: "list";
364
+ email: "email";
365
+ integer: "integer";
366
+ datetime: "datetime";
367
+ url: "url";
368
+ }>;
369
+ required: z.ZodOptional<z.ZodBoolean>;
370
+ description: z.ZodOptional<z.ZodString>;
371
+ label: z.ZodOptional<z.ZodString>;
372
+ options: z.ZodOptional<z.ZodArray<z.ZodString>>;
373
+ of: z.ZodOptional<z.ZodEnum<{
374
+ string: "string";
375
+ number: "number";
376
+ date: "date";
377
+ }>>;
378
+ default: z.ZodOptional<z.ZodUnknown>;
379
+ unit: z.ZodOptional<z.ZodString>;
380
+ format: z.ZodOptional<z.ZodEnum<{
381
+ money: "money";
382
+ percent: "percent";
383
+ duration: "duration";
384
+ }>>;
385
+ renamedFrom: z.ZodOptional<z.ZodString>;
386
+ }, z.core.$strict>>>;
387
+ effects: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
388
+ create: z.ZodString;
389
+ as: z.ZodOptional<z.ZodString>;
390
+ set: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodUnknown>, z.ZodObject<{
391
+ expr: z.ZodString;
392
+ }, z.core.$strict>]>>>;
393
+ }, z.core.$strict>, z.ZodObject<{
394
+ set: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodUnknown>, z.ZodObject<{
395
+ expr: z.ZodString;
396
+ }, z.core.$strict>]>>;
397
+ target: z.ZodOptional<z.ZodString>;
398
+ }, z.core.$strict>, z.ZodObject<{
399
+ connect: z.ZodString;
400
+ from: z.ZodString;
401
+ to: z.ZodString;
402
+ }, z.core.$strict>, z.ZodObject<{
403
+ sever: z.ZodString;
404
+ from: z.ZodString;
405
+ to: z.ZodString;
406
+ }, z.core.$strict>, z.ZodObject<{
407
+ remove: z.ZodString;
408
+ }, z.core.$strict>]>>>;
409
+ allowedWhen: z.ZodOptional<z.ZodString>;
410
+ refusal: z.ZodOptional<z.ZodString>;
411
+ destructive: z.ZodOptional<z.ZodBoolean>;
412
+ }, z.core.$strict>>>;
413
+ rules: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
414
+ title: z.ZodOptional<z.ZodString>;
415
+ description: z.ZodOptional<z.ZodString>;
416
+ over: z.ZodUnion<readonly [z.ZodLiteral<"graph">, z.ZodString]>;
417
+ when: z.ZodOptional<z.ZodString>;
418
+ require: z.ZodString;
419
+ says: z.ZodOptional<z.ZodString>;
420
+ repairs: z.ZodOptional<z.ZodArray<z.ZodObject<{
421
+ act: z.ZodString;
422
+ label: z.ZodOptional<z.ZodString>;
423
+ args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodUnknown>, z.ZodObject<{
424
+ expr: z.ZodString;
425
+ }, z.core.$strict>]>>>;
426
+ }, z.core.$strict>>>;
427
+ }, z.core.$strict>>>;
428
+ roles: z.ZodOptional<z.ZodArray<z.ZodString>>;
429
+ policy: z.ZodOptional<z.ZodObject<{
430
+ grants: z.ZodArray<z.ZodObject<{
431
+ roles: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<"*">]>;
432
+ mutations: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<"*">]>;
433
+ kinds: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<"*">]>>;
434
+ describe: z.ZodOptional<z.ZodString>;
435
+ self: z.ZodOptional<z.ZodBoolean>;
436
+ }, z.core.$strict>>;
437
+ sees: z.ZodOptional<z.ZodArray<z.ZodObject<{
438
+ roles: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodLiteral<"*">]>;
439
+ kinds: z.ZodArray<z.ZodString>;
440
+ own: z.ZodOptional<z.ZodBoolean>;
441
+ }, z.core.$strict>>>;
442
+ }, z.core.$strict>>;
443
+ modules: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
444
+ lenses: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
445
+ pages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
446
+ views: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
447
+ card: z.ZodOptional<z.ZodArray<z.ZodUnknown>>;
448
+ row: z.ZodOptional<z.ZodArray<z.ZodUnknown>>;
449
+ page: z.ZodOptional<z.ZodArray<z.ZodUnknown>>;
450
+ }, z.core.$strict>>>;
451
+ brand: z.ZodOptional<z.ZodObject<{
452
+ accent: z.ZodString;
453
+ name: z.ZodOptional<z.ZodString>;
454
+ }, z.core.$strict>>;
455
+ settings: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
456
+ migrations: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
457
+ }, z.core.$strict>;
458
+ export type GraviewDocument = z.infer<typeof DocumentSpec>;
459
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/document/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,kBAAkB,QAAa,CAAC;AAE7C,6DAA6D;AAC7D,eAAO,MAAM,IAAI,QAAoC,CAAC;AACtD,gFAAgF;AAChF,eAAO,MAAM,UAAU,QAAwB,CAAC;AAIhD;;;;GAIG;AACH,eAAO,MAAM,SAAS,QAA0D,CAAC;AAUjF,eAAO,MAAM,WAAW,iHAAkH,CAAC;AAC3I,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAoBlB,CAAC;AACL,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAElD,eAAO,MAAM,QAAQ;;;;;;;;;;kBAUV,CAAC;AACZ,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAcV,CAAC;AACZ,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD,wGAAwG;AACxG,eAAO,MAAM,SAAS;;oBAA0H,CAAC;AACjJ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAIlD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;oBAMrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAmBT,CAAC;AACZ,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAE9C,eAAO,MAAM,UAAU;;;;;;kBAMZ,CAAC;AAEZ,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;kBAUV,CAAC;AACZ,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD,eAAO,MAAM,SAAS;;;;;;kBAQX,CAAC;AAEZ;;;;;GAKG;AACH,eAAO,MAAM,SAAS;;;;kBAOX,CAAC;AACZ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAElD,eAAO,MAAM,UAAU;;;;;;;;;;;;;kBAKZ,CAAC;AACZ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,eAAO,MAAM,SAAS;;;kBAKX,CAAC;AAaZ,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAoBd,CAAC;AACZ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC"}
@@ -0,0 +1,197 @@
1
+ import { z } from "zod";
2
+ /*
3
+ * THE GRAVIEW DECLARATION DOCUMENT, v1 — as data a stranger can hand us.
4
+ *
5
+ * docs/declaration-document.md is the prose; this is the shape. Every key is
6
+ * closed (`strict`): an unknown key is a finding, not something quietly
7
+ * ignored, because a model that misspells `requires` for `require` should be
8
+ * told, not given an app whose rule holds nothing.
9
+ */
10
+ export const FORMAT = "graview-document";
11
+ export const FORMAT_VERSION = 1;
12
+ export const MAX_DOCUMENT_BYTES = 256 * 1024;
13
+ /** kebab-case: kinds, acts, rules, edges, roles, modules. */
14
+ export const NAME = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
15
+ /** Field names are identifiers so a rule can say them bare: `quote != null`. */
16
+ export const FIELD_NAME = /^[a-z][A-Za-z0-9]*$/;
17
+ const RESERVED_FIELDS = new Set(["id", "kind"]);
18
+ const name = (what) => z.string().regex(NAME, `${what} names are lower-case words joined by hyphens, like "booked-vendor"`);
19
+ /**
20
+ * A RELATION'S NAME may be kebab-case or one camelCase word. camelCase is
21
+ * recommended: a rule can then walk it bare (`tendedBy.name`), where
22
+ * `tended-by.name` would read as a subtraction.
23
+ */
24
+ export const EDGE_NAME = /^(?:[a-z][a-z0-9]*(?:-[a-z0-9]+)*|[a-z][A-Za-z0-9]*)$/;
25
+ const edgeName = z.string().regex(EDGE_NAME, 'relation names are one camelCase word, like "tendedBy"');
26
+ const fieldName = z
27
+ .string()
28
+ .regex(FIELD_NAME, 'field names are one word or camelCase, like "dueDate" — rules say them bare')
29
+ .refine((n) => !RESERVED_FIELDS.has(n), 'a field cannot be called "id" or "kind" — the framework keeps those; try "type" or "category"');
30
+ const sentence = z.string().min(1).max(500);
31
+ const expression = z.string().min(1).max(2000);
32
+ const template = z.string().min(1).max(300);
33
+ export const FIELD_TYPES = ["string", "text", "number", "integer", "boolean", "date", "datetime", "enum", "list", "url", "email"];
34
+ export const FieldSpec = z
35
+ .object({
36
+ type: z.enum(FIELD_TYPES),
37
+ required: z.boolean().optional(),
38
+ description: sentence.optional(),
39
+ /** What the field is called on screen, where its name does not say it. */
40
+ label: z.string().min(1).max(60).optional(),
41
+ options: z.array(z.string().min(1).max(80)).min(1).max(100).optional(),
42
+ of: z.enum(["string", "number", "date"]).optional(),
43
+ default: z.unknown().optional(),
44
+ unit: z.string().max(12).optional(),
45
+ format: z.enum(["money", "percent", "duration"]).optional(),
46
+ /** The name this field had in the previous version: its values move instead of being dropped. */
47
+ renamedFrom: z.string().regex(FIELD_NAME).optional(),
48
+ })
49
+ .strict()
50
+ .superRefine((f, ctx) => {
51
+ if (f.type === "enum" && !f.options)
52
+ ctx.addIssue({ code: "custom", message: 'an enum field lists its "options"', path: ["options"] });
53
+ if (f.type !== "enum" && f.options)
54
+ ctx.addIssue({ code: "custom", message: '"options" belongs only on an enum field', path: ["options"] });
55
+ if (f.type !== "list" && f.of)
56
+ ctx.addIssue({ code: "custom", message: '"of" belongs only on a list field', path: ["of"] });
57
+ });
58
+ export const EdgeSpec = z
59
+ .object({
60
+ to: z.union([z.array(name("kind")).min(1), z.literal("*")]),
61
+ cardinality: z.enum(["one", "many"]).optional(),
62
+ description: sentence.optional(),
63
+ inverse: z.string().min(1).max(80).optional(),
64
+ appendOnly: z.boolean().optional(),
65
+ /** The name this relation had in the previous version: its links move. */
66
+ renamedFrom: z.string().optional(),
67
+ })
68
+ .strict();
69
+ export const KindSpec = z
70
+ .object({
71
+ noun: z.string().min(1).max(40).optional(),
72
+ plural: z.string().min(1).max(40).optional(),
73
+ description: sentence.optional(),
74
+ fields: z.record(fieldName, FieldSpec).refine((f) => Object.keys(f).length > 0, "a kind has at least one field"),
75
+ label: template.optional(),
76
+ describe: template.optional(),
77
+ lifecycle: z.object({ field: fieldName, retired: z.array(z.union([z.string(), z.number(), z.boolean()])).min(1) }).strict().optional(),
78
+ figure: z.string().max(20_000).optional(),
79
+ edges: z.record(edgeName, EdgeSpec).optional(),
80
+ /** The name this kind had in the previous version: its records move. */
81
+ renamedFrom: z.string().regex(NAME).optional(),
82
+ })
83
+ .strict();
84
+ /** A value an effect writes: a literal, `$arg`, `$subject`, `$new`, `$now`, `$today`, or `{ expr }`. */
85
+ export const ValueSpec = z.union([z.string(), z.number(), z.boolean(), z.null(), z.array(z.unknown()), z.object({ expr: expression }).strict()]);
86
+ const ref = z.string().regex(/^\$[A-Za-z][A-Za-z0-9]*$/, 'a reference is "$" and a name, like "$subject" or "$new"');
87
+ export const EffectSpec = z.union([
88
+ z.object({ create: name("kind"), as: z.string().regex(FIELD_NAME).optional(), set: z.record(fieldName, ValueSpec).optional() }).strict(),
89
+ z.object({ set: z.record(fieldName, ValueSpec), target: ref.optional() }).strict(),
90
+ z.object({ connect: edgeName, from: ref, to: ref }).strict(),
91
+ z.object({ sever: edgeName, from: ref, to: ref }).strict(),
92
+ z.object({ remove: ref }).strict(),
93
+ ]);
94
+ export const ActSpec = z
95
+ .object({
96
+ title: z.string().min(1).max(80).optional(),
97
+ description: sentence.optional(),
98
+ /** How the act reads standing on the far end of the relation it makes or breaks. */
99
+ fromTheOtherEnd: z.string().min(1).max(80).optional(),
100
+ on: z.union([name("kind"), z.array(name("kind")).min(1)]).optional(),
101
+ creates: name("kind").optional(),
102
+ sets: z.record(fieldName, ValueSpec).optional(),
103
+ writes: z.array(fieldName).min(1).optional(),
104
+ connects: edgeName.optional(),
105
+ severs: edgeName.optional(),
106
+ removes: z.literal(true).optional(),
107
+ args: z.record(fieldName, FieldSpec).optional(),
108
+ effects: z.array(EffectSpec).min(1).max(20).optional(),
109
+ allowedWhen: expression.optional(),
110
+ refusal: template.optional(),
111
+ destructive: z.boolean().optional(),
112
+ })
113
+ .strict();
114
+ export const RepairSpec = z
115
+ .object({
116
+ act: name("act"),
117
+ label: z.string().min(1).max(80).optional(),
118
+ args: z.record(z.string(), ValueSpec).optional(),
119
+ })
120
+ .strict();
121
+ export const RuleSpec = z
122
+ .object({
123
+ title: z.string().min(1).max(120).optional(),
124
+ description: sentence.optional(),
125
+ over: z.union([z.literal("graph"), name("kind")]),
126
+ when: expression.optional(),
127
+ require: expression,
128
+ says: template.optional(),
129
+ repairs: z.array(RepairSpec).max(10).optional(),
130
+ })
131
+ .strict();
132
+ export const GrantSpec = z
133
+ .object({
134
+ roles: z.union([z.array(name("role")).min(1), z.literal("*")]),
135
+ mutations: z.union([z.array(name("act")).min(1), z.literal("*")]),
136
+ kinds: z.union([z.array(name("kind")), z.literal("*")]).optional(),
137
+ describe: sentence.optional(),
138
+ self: z.boolean().optional(),
139
+ })
140
+ .strict();
141
+ /**
142
+ * Who sees which kinds — the framework's `Sight`, one meaning (FR-02).
143
+ * Absent: everyone sees everything. Present: a kind no sight names is seen
144
+ * by nobody but the system (a host that gives its owners everything serves
145
+ * them as the system, or names them in a sight).
146
+ */
147
+ export const SightSpec = z
148
+ .object({
149
+ roles: z.union([z.array(name("role")).min(1), z.literal("*")]),
150
+ kinds: z.array(name("kind")).min(1),
151
+ /** Only the principal's own records: the ones they made, their own record, and what an edge joins to it. */
152
+ own: z.boolean().optional(),
153
+ })
154
+ .strict();
155
+ export const PolicySpec = z
156
+ .object({
157
+ grants: z.array(GrantSpec),
158
+ sees: z.array(SightSpec).optional(),
159
+ })
160
+ .strict();
161
+ export const BrandSpec = z
162
+ .object({
163
+ accent: z.string().regex(/^#[0-9a-fA-F]{6}$/, 'an accent is a colour like "#c2577a"'),
164
+ name: z.string().min(1).max(60).optional(),
165
+ })
166
+ .strict();
167
+ const loose = z.record(z.string(), z.unknown());
168
+ /** A kind's view specs: which slots it fills. The blocks are checked in views.ts, sentence by sentence. */
169
+ const ViewSpecsSpec = z
170
+ .object({
171
+ card: z.array(z.unknown()).optional(),
172
+ row: z.array(z.unknown()).optional(),
173
+ page: z.array(z.unknown()).optional(),
174
+ })
175
+ .strict();
176
+ export const DocumentSpec = z
177
+ .object({
178
+ format: z.literal(FORMAT),
179
+ formatVersion: z.literal(FORMAT_VERSION),
180
+ name: z.string().min(1).max(80),
181
+ description: sentence.optional(),
182
+ version: z.number().int().min(1).optional(),
183
+ kinds: z.record(name("kind"), KindSpec).refine((k) => Object.keys(k).length > 0, "a document declares at least one kind").refine((k) => Object.keys(k).length <= 40, "a document declares at most 40 kinds"),
184
+ acts: z.record(name("act"), ActSpec).optional(),
185
+ rules: z.record(name("rule"), RuleSpec).optional(),
186
+ roles: z.array(name("role")).optional(),
187
+ policy: PolicySpec.optional(),
188
+ modules: loose.optional(),
189
+ lenses: z.array(loose).optional(),
190
+ pages: loose.optional(),
191
+ views: z.record(z.string(), ViewSpecsSpec).optional(),
192
+ brand: BrandSpec.optional(),
193
+ settings: z.array(loose).optional(),
194
+ migrations: z.array(loose).optional(),
195
+ })
196
+ .strict();
197
+ //# sourceMappingURL=schema.js.map