@sdboyer/thema-ui 0.0.0-bootstrap.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +24 -1
  3. package/dist/Diagnostics.d.ts +8 -0
  4. package/dist/Diagnostics.js +14 -0
  5. package/dist/Editor.d.ts +12 -0
  6. package/dist/Editor.js +95 -0
  7. package/dist/OpBar.d.ts +14 -0
  8. package/dist/OpBar.js +15 -0
  9. package/dist/Output.d.ts +20 -0
  10. package/dist/Output.js +56 -0
  11. package/dist/Tabs.d.ts +15 -0
  12. package/dist/Tabs.js +23 -0
  13. package/dist/cue-lang.d.ts +8 -0
  14. package/dist/cue-lang.js +82 -0
  15. package/dist/docs.d.ts +64 -0
  16. package/dist/docs.js +42 -0
  17. package/dist/index.d.ts +12 -0
  18. package/dist/index.js +18 -0
  19. package/dist/markers.d.ts +11 -0
  20. package/dist/markers.js +45 -0
  21. package/dist/ops.d.ts +13 -0
  22. package/dist/ops.js +22 -0
  23. package/dist/positions.d.ts +7 -0
  24. package/dist/positions.js +40 -0
  25. package/dist/theme.d.ts +16 -0
  26. package/dist/theme.js +55 -0
  27. package/dist/types.d.ts +580 -0
  28. package/dist/types.js +85 -0
  29. package/errors/E0101.md +43 -0
  30. package/errors/E0102.md +34 -0
  31. package/errors/E0103.md +41 -0
  32. package/errors/E0104.md +5 -0
  33. package/errors/E0105.md +62 -0
  34. package/errors/E0106.md +46 -0
  35. package/errors/E0107.md +48 -0
  36. package/errors/E0108.md +45 -0
  37. package/errors/E0109.md +37 -0
  38. package/errors/E0110.md +17 -0
  39. package/errors/E0111.md +55 -0
  40. package/errors/E0112.md +40 -0
  41. package/errors/E0120.md +34 -0
  42. package/errors/E0121.md +34 -0
  43. package/errors/E0122.md +26 -0
  44. package/errors/E0123.md +37 -0
  45. package/errors/E0124.md +36 -0
  46. package/errors/E0125.md +43 -0
  47. package/errors/E0126.md +38 -0
  48. package/errors/E0128.md +34 -0
  49. package/errors/E0129.md +42 -0
  50. package/errors/E0130.md +43 -0
  51. package/errors/E0131.md +42 -0
  52. package/errors/E0132.md +40 -0
  53. package/errors/E0133.md +46 -0
  54. package/errors/E0134.md +36 -0
  55. package/errors/E0135.md +109 -0
  56. package/errors/E0137.md +37 -0
  57. package/errors/E0140.md +46 -0
  58. package/errors/E0141.md +35 -0
  59. package/errors/E0142.md +38 -0
  60. package/errors/E0143.md +62 -0
  61. package/errors/E0144.md +49 -0
  62. package/errors/E0145.md +48 -0
  63. package/errors/E0146.md +38 -0
  64. package/errors/E0147.md +57 -0
  65. package/errors/E0148.md +42 -0
  66. package/errors/E0149.md +27 -0
  67. package/errors/E0150.md +77 -0
  68. package/errors/E0151.md +47 -0
  69. package/errors/E0152.md +35 -0
  70. package/errors/E0201.md +35 -0
  71. package/errors/E0202.md +42 -0
  72. package/errors/E0203.md +37 -0
  73. package/errors/E0204.md +46 -0
  74. package/errors/E0205.md +47 -0
  75. package/errors/E0206.md +47 -0
  76. package/errors/E0208.md +59 -0
  77. package/errors/E0210.md +44 -0
  78. package/errors/E0211.md +43 -0
  79. package/errors/E0212.md +41 -0
  80. package/errors/E0213.md +42 -0
  81. package/errors/E0214.md +42 -0
  82. package/errors/E0215.md +44 -0
  83. package/errors/E0216.md +41 -0
  84. package/errors/E0217.md +43 -0
  85. package/errors/E0218.md +44 -0
  86. package/errors/E0230.md +46 -0
  87. package/errors/E0232.md +42 -0
  88. package/errors/E0233.md +42 -0
  89. package/errors/E0234.md +43 -0
  90. package/errors/E0240.md +31 -0
  91. package/errors/E0242.md +5 -0
  92. package/errors/E0243.md +5 -0
  93. package/errors/E0250.md +39 -0
  94. package/errors/E0251.md +83 -0
  95. package/errors/E0252.md +42 -0
  96. package/errors/E0253.md +142 -0
  97. package/errors/E0254.md +38 -0
  98. package/errors/E0301.md +43 -0
  99. package/errors/E0302.md +58 -0
  100. package/errors/E0303.md +57 -0
  101. package/errors/E0304.md +9 -0
  102. package/errors/E0305.md +55 -0
  103. package/errors/E0307.md +9 -0
  104. package/errors/E0308.md +9 -0
  105. package/errors/E0310.md +46 -0
  106. package/errors/E0311.md +46 -0
  107. package/errors/E0330.md +67 -0
  108. package/errors/E0331.md +64 -0
  109. package/errors/E0332.md +52 -0
  110. package/errors/E0333.md +61 -0
  111. package/errors/E0334.md +61 -0
  112. package/errors/E0335.md +57 -0
  113. package/errors/E0336.md +50 -0
  114. package/errors/E0337.md +54 -0
  115. package/errors/E0338.md +62 -0
  116. package/errors/E0340.md +57 -0
  117. package/errors/E0341.md +51 -0
  118. package/errors/E0342.md +53 -0
  119. package/errors/E0343.md +56 -0
  120. package/errors/E0344.md +58 -0
  121. package/errors/E0345.md +51 -0
  122. package/errors/E0346.md +45 -0
  123. package/errors/E0347.md +53 -0
  124. package/errors/E0348.md +50 -0
  125. package/errors/E0349.md +52 -0
  126. package/errors/E0350.md +54 -0
  127. package/errors/E0351.md +54 -0
  128. package/errors/E0352.md +60 -0
  129. package/errors/E0353.md +53 -0
  130. package/errors/E0354.md +43 -0
  131. package/errors/E0355.md +55 -0
  132. package/errors/E0356.md +65 -0
  133. package/errors/E0357.md +68 -0
  134. package/errors/E0358.md +50 -0
  135. package/errors/E0359.md +53 -0
  136. package/errors/E0360.md +59 -0
  137. package/errors/E0361.md +59 -0
  138. package/errors/E0362.md +56 -0
  139. package/errors/E0364.md +58 -0
  140. package/errors/E0365.md +58 -0
  141. package/errors/E0366.md +56 -0
  142. package/errors/E0367.md +57 -0
  143. package/errors/E0368.md +58 -0
  144. package/errors/E0369.md +60 -0
  145. package/errors/E0370.md +59 -0
  146. package/errors/E0371.md +59 -0
  147. package/errors/E0372.md +57 -0
  148. package/errors/E0380.md +71 -0
  149. package/errors/E0381.md +61 -0
  150. package/errors/E0382.md +64 -0
  151. package/errors/E0383.md +61 -0
  152. package/errors/E0384.md +63 -0
  153. package/errors/E0385.md +61 -0
  154. package/errors/E0386.md +59 -0
  155. package/errors/E0387.md +59 -0
  156. package/errors/E0388.md +60 -0
  157. package/errors/E0389.md +59 -0
  158. package/errors/E0390.md +59 -0
  159. package/errors/E0401.md +56 -0
  160. package/errors/E0402.md +51 -0
  161. package/errors/E0403.md +51 -0
  162. package/errors/E0404.md +57 -0
  163. package/errors/E0405.md +56 -0
  164. package/errors/E0406.md +53 -0
  165. package/errors/E0407.md +54 -0
  166. package/errors/E0410.md +56 -0
  167. package/errors/E0411.md +59 -0
  168. package/errors/E0412.md +59 -0
  169. package/errors/E0413.md +74 -0
  170. package/errors/E0414.md +53 -0
  171. package/errors/E0415.md +72 -0
  172. package/errors/E0416.md +67 -0
  173. package/errors/E0418.md +59 -0
  174. package/errors/E0420.md +71 -0
  175. package/errors/E0421.md +82 -0
  176. package/errors/E0422.md +82 -0
  177. package/errors/E0423.md +83 -0
  178. package/errors/E0501.md +51 -0
  179. package/errors/E0502.md +50 -0
  180. package/errors/E0503.md +52 -0
  181. package/errors/E0504.md +64 -0
  182. package/errors/E0505.md +51 -0
  183. package/errors/E0506.md +48 -0
  184. package/errors/E0507.md +41 -0
  185. package/errors/E0508.md +39 -0
  186. package/errors/E0601.md +22 -0
  187. package/errors/E0602.md +28 -0
  188. package/errors/E0603.md +65 -0
  189. package/errors/E0604.md +37 -0
  190. package/errors/E0605.md +36 -0
  191. package/errors/E0606.md +44 -0
  192. package/errors/E0607.md +57 -0
  193. package/errors/E0608.md +37 -0
  194. package/errors/E0609.md +33 -0
  195. package/errors/E0611.md +37 -0
  196. package/errors/E0612.md +34 -0
  197. package/errors/E0613.md +30 -0
  198. package/errors/E0614.md +36 -0
  199. package/errors/E0616.md +33 -0
  200. package/errors/E0617.md +15 -0
  201. package/errors/E0618.md +16 -0
  202. package/errors/E0620.md +37 -0
  203. package/errors/E0621.md +45 -0
  204. package/errors/E0622.md +34 -0
  205. package/errors/E0623.md +33 -0
  206. package/errors/E0624.md +34 -0
  207. package/errors/E0625.md +28 -0
  208. package/errors/E0626.md +54 -0
  209. package/errors/E0627.md +27 -0
  210. package/errors/E0628.md +63 -0
  211. package/errors/E0701.md +25 -0
  212. package/errors/E0801.md +23 -0
  213. package/errors/E0802.md +22 -0
  214. package/errors/E0803.md +22 -0
  215. package/errors/E0804.md +25 -0
  216. package/errors/E0805.md +26 -0
  217. package/errors/E0901.md +27 -0
  218. package/errors/E0902.md +40 -0
  219. package/errors/E0903.md +23 -0
  220. package/errors/E1001.md +53 -0
  221. package/errors/E1002.md +43 -0
  222. package/errors/E1003.md +40 -0
  223. package/errors/E1004.md +44 -0
  224. package/errors/README.md +215 -0
  225. package/package.json +29 -3
@@ -0,0 +1,83 @@
1
+ <!-- Generated by go test ./diag; do not edit. -->
2
+
3
+ # E0251: a published version's lens was changed
4
+
5
+ A version's lenses are part of it: an instance translated through the
6
+ published lens would translate differently through a changed one. Here the
7
+ candidate's 1.0 keeps its schema, but its ForwardLens writes a different
8
+ placeholder. The schema's identity is unchanged and its lenses' is not.
9
+
10
+ ## Example
11
+
12
+ `candidate/ship/history/0.0.thema`:
13
+
14
+ ```cue
15
+ Schema: {
16
+ name: string
17
+ }
18
+ ```
19
+
20
+ `candidate/ship/history/1.0.thema`:
21
+
22
+ ```cue
23
+ Schema: {
24
+ name: string
25
+ size: int
26
+ }
27
+
28
+ ForwardLens: {
29
+ v0_0: _
30
+ v1_0: {
31
+ size: 0
32
+ }
33
+ lacunas: {
34
+ size: [{
35
+ type: Placeholder
36
+ message: "0 is a placeholder"
37
+ }]
38
+ }
39
+ }
40
+ ```
41
+
42
+ `published/ship/history/0.0.thema`:
43
+
44
+ ```cue
45
+ Schema: {
46
+ name: string
47
+ }
48
+ ```
49
+
50
+ `published/ship/history/1.0.thema`:
51
+
52
+ ```cue
53
+ Schema: {
54
+ name: string
55
+ size: int
56
+ }
57
+
58
+ ForwardLens: {
59
+ v0_0: _
60
+ v1_0: {
61
+ size: -1
62
+ }
63
+ lacunas: {
64
+ size: [{
65
+ type: Placeholder
66
+ message: "-1 is a placeholder"
67
+ }]
68
+ }
69
+ }
70
+ ```
71
+
72
+ thema reports:
73
+
74
+ ```
75
+ error[E0251]: the ForwardLens in history/1.0.thema is not as published
76
+ --> candidate/ship/history/1.0.thema:6:1
77
+ |
78
+ 6 | ForwardLens: {
79
+ | ^^^^^^^^^^^
80
+ |
81
+ = note: a version's lenses are part of it: instances already translated through the published lens would translate differently
82
+ = help: restore the ForwardLens in history/1.0.thema as it was published
83
+ ```
@@ -0,0 +1,42 @@
1
+ <!-- Generated by go test ./diag; do not edit. -->
2
+
3
+ # E0252: a published version was removed
4
+
5
+ A published version may have instances, so it is never removed. Here the
6
+ candidate's history/ stops at 0.0, and 0.1, which was published, is gone.
7
+
8
+ ## Example
9
+
10
+ `candidate/ship/history/0.0.thema`:
11
+
12
+ ```cue
13
+ Schema: {
14
+ name: string
15
+ }
16
+ ```
17
+
18
+ `published/ship/history/0.0.thema`:
19
+
20
+ ```cue
21
+ Schema: {
22
+ name: string
23
+ }
24
+ ```
25
+
26
+ `published/ship/history/0.1.thema`:
27
+
28
+ ```cue
29
+ Schema: {
30
+ name: string
31
+ size?: int
32
+ }
33
+ ```
34
+
35
+ thema reports:
36
+
37
+ ```
38
+ error[E0252]: the lineage removes published version 0.1
39
+ |
40
+ = note: the schema in history/0.1.thema was published, so instances of it may exist
41
+ = help: restore the schema in history/0.1.thema as it was published; a published version is never removed
42
+ ```
@@ -0,0 +1,142 @@
1
+ <!-- Generated by go test ./diag; do not edit. -->
2
+
3
+ # E0253: a new version comes before the newest published version
4
+
5
+ Versions are only appended: a new version comes after the newest published
6
+ one. Here 0.0 and 1.0 were published, and the candidate adds 0.1 between them,
7
+ so the published 1.0 would no longer follow the version it was published
8
+ after. 1.0 itself is as published: its lenses map the same from 0.1 as from
9
+ 0.0, and its backward lens derives the same drop of crew, though the drop's
10
+ message now names 0.1.
11
+
12
+ ## Example
13
+
14
+ `candidate/ship/history/0.0.thema`:
15
+
16
+ ```cue
17
+ Schema: {
18
+ size: int & <10
19
+ }
20
+ ```
21
+
22
+ `candidate/ship/history/0.1.thema`:
23
+
24
+ ```cue
25
+ Schema: {
26
+ size: int & <20
27
+ }
28
+
29
+ BackwardLens: {
30
+ v0_1: _
31
+ v0_0: {
32
+ size: 0
33
+ }
34
+ lacunas: {
35
+ size: [{
36
+ type: Placeholder
37
+ message: "0 is a placeholder"
38
+ }]
39
+ }
40
+ }
41
+ ```
42
+
43
+ `candidate/ship/history/1.0.thema`:
44
+
45
+ ```cue
46
+ Schema: {
47
+ size: string
48
+ crew: int
49
+ }
50
+
51
+ ForwardLens: {
52
+ v0_1: _
53
+ v1_0: {
54
+ size: "unknown"
55
+ crew: 0
56
+ }
57
+ lacunas: {
58
+ size: [{
59
+ type: Placeholder
60
+ message: "unknown is a placeholder"
61
+ }]
62
+ crew: [{
63
+ type: Placeholder
64
+ message: "0 is a placeholder"
65
+ }]
66
+ }
67
+ }
68
+
69
+ BackwardLens: {
70
+ v1_0: _
71
+ v0_1: {
72
+ size: 0
73
+ }
74
+ lacunas: {
75
+ size: [{
76
+ type: Placeholder
77
+ message: "0 is a placeholder"
78
+ }]
79
+ }
80
+ }
81
+ ```
82
+
83
+ `published/ship/history/0.0.thema`:
84
+
85
+ ```cue
86
+ Schema: {
87
+ size: int & <10
88
+ }
89
+ ```
90
+
91
+ `published/ship/history/1.0.thema`:
92
+
93
+ ```cue
94
+ Schema: {
95
+ size: string
96
+ crew: int
97
+ }
98
+
99
+ ForwardLens: {
100
+ v0_0: _
101
+ v1_0: {
102
+ size: "unknown"
103
+ crew: 0
104
+ }
105
+ lacunas: {
106
+ size: [{
107
+ type: Placeholder
108
+ message: "unknown is a placeholder"
109
+ }]
110
+ crew: [{
111
+ type: Placeholder
112
+ message: "0 is a placeholder"
113
+ }]
114
+ }
115
+ }
116
+
117
+ BackwardLens: {
118
+ v1_0: _
119
+ v0_0: {
120
+ size: 0
121
+ }
122
+ lacunas: {
123
+ size: [{
124
+ type: Placeholder
125
+ message: "0 is a placeholder"
126
+ }]
127
+ }
128
+ }
129
+ ```
130
+
131
+ thema reports:
132
+
133
+ ```
134
+ error[E0253]: new version 0.1 comes before published version 1.0
135
+ --> candidate/ship/history/0.1.thema:1:1
136
+ |
137
+ 1 | Schema: {
138
+ | ^^^^^^
139
+ |
140
+ = note: versions are only appended: a new version comes after the newest published one, 1.0, so that every published version keeps its predecessor
141
+ = help: remove the schema in history/0.1.thema, and make the change in a version after 1.0
142
+ ```
@@ -0,0 +1,38 @@
1
+ <!-- Generated by go test ./diag; do not edit. -->
2
+
3
+ # E0254: the lineage's name differs from the name it was published with
4
+
5
+ A lineage is named for its directory, and its name is part of what was
6
+ published: what refers to the lineage names it. Here ship's history is
7
+ published again as boat. A lineage with a new name is a new lineage.
8
+
9
+ ## Example
10
+
11
+ `candidate/boat/history/0.0.thema`:
12
+
13
+ ```cue
14
+ Schema: {
15
+ name: string
16
+ }
17
+ ```
18
+
19
+ `published/ship/history/0.0.thema`:
20
+
21
+ ```cue
22
+ Schema: {
23
+ name: string
24
+ }
25
+ ```
26
+
27
+ thema reports:
28
+
29
+ ```
30
+ error[E0254]: the lineage is named boat, but was published as ship
31
+ --> candidate/boat/history/0.0.thema:1:1
32
+ |
33
+ 1 | Schema: {
34
+ | ^^^^^^
35
+ |
36
+ = note: a lineage's name is part of what was published: what refers to it names it
37
+ = help: name it ship, or publish it as a new lineage
38
+ ```
@@ -0,0 +1,43 @@
1
+ <!-- Generated by go test ./diag; do not edit. -->
2
+
3
+ # E0301: the lineage lacks a lens its versions require
4
+
5
+ A lineage declares a lens from every schema back to its predecessor, and one
6
+ forward across every major version, so that an instance of any version can be
7
+ translated to any other. This lineage adds version 0.1 without the lens back to
8
+ 0.0.
9
+
10
+ ## Example
11
+
12
+ `lineage.cue`:
13
+
14
+ ```cue
15
+ name: "ship"
16
+ schemas: {
17
+ "0": {
18
+ "0": {
19
+ schema: {
20
+ a: string
21
+ }
22
+ }
23
+ "1": {
24
+ schema: {
25
+ a: string
26
+ b?: int
27
+ }
28
+ }
29
+ }
30
+ }
31
+ ```
32
+
33
+ thema reports:
34
+
35
+ ```
36
+ error[E0301]: the lineage has no lens 0.1->0.0
37
+ --> lineage.cue:1:1
38
+ |
39
+ 1 | name: "ship"
40
+ | ^^^^
41
+ |
42
+ = note: every schema needs a lens back to its predecessor, so that instances of 0.1 can be translated to 0.0
43
+ ```
@@ -0,0 +1,58 @@
1
+ <!-- Generated by go test ./diag; do not edit. -->
2
+
3
+ # E0302: the lineage declares a lens its versions do not require
4
+
5
+ A lineage declares exactly the lenses its versions call for. A forward lens
6
+ across a minor version is one they do not: a minor version is backward
7
+ compatible, so translating forward is implicit. The note says why the lens is
8
+ not called for.
9
+
10
+ ## Example
11
+
12
+ `lineage.cue`:
13
+
14
+ ```cue
15
+ name: "ship"
16
+ schemas: {
17
+ "0": {
18
+ "0": {
19
+ schema: {
20
+ a: string
21
+ }
22
+ }
23
+ "1": {
24
+ schema: {
25
+ a: string
26
+ b?: int
27
+ }
28
+ }
29
+ }
30
+ }
31
+ lenses: {
32
+ "0.1->0.0": {
33
+ v0_1: _
34
+ v0_0: {
35
+ a: v0_1.a
36
+ }
37
+ }
38
+ "0.0->0.1": {
39
+ v0_0: _
40
+ v0_1: {
41
+ a: v0_0.a
42
+ }
43
+ }
44
+ }
45
+ ```
46
+
47
+ thema reports:
48
+
49
+ ```
50
+ error[E0302]: the lineage's versions do not call for lens 0.0->0.1
51
+ --> lineage.cue:24:2
52
+ |
53
+ 24 | "0.0->0.1": {
54
+ | ^^^^^^^^^^
55
+ |
56
+ = note: 0.1 is backward compatible with 0.0, so translating forward is implicit
57
+ = help: a lineage declares a lens from each schema back to its predecessor, and one forward across each major version
58
+ ```
@@ -0,0 +1,57 @@
1
+ <!-- Generated by go test ./diag; do not edit. -->
2
+
3
+ # E0303: a lens does not accept every instance of its source schema
4
+
5
+ A lens takes any instance of its source schema, in the field named after the
6
+ source version (v0_1 for a lens from 0.1), so it must accept every one of
7
+ them. A lens that constrains that field rejects some instances. Leave it as
8
+ `_`.
9
+
10
+ ## Example
11
+
12
+ `lineage.cue`:
13
+
14
+ ```cue
15
+ name: "ship"
16
+ schemas: {
17
+ "0": {
18
+ "0": {
19
+ schema: {
20
+ a: int
21
+ }
22
+ }
23
+ "1": {
24
+ schema: {
25
+ a: int
26
+ b?: int
27
+ }
28
+ }
29
+ }
30
+ }
31
+ lenses: {
32
+ "0.1->0.0": {
33
+ v0_1: {
34
+ a: string
35
+ }
36
+ v0_0: {
37
+ a: v0_1.a
38
+ }
39
+ }
40
+ }
41
+ ```
42
+
43
+ thema reports:
44
+
45
+ ```
46
+ error[E0303]: the input of lens 0.1->0.0 does not accept every instance of schema 0.1
47
+ --> lineage.cue:19:3
48
+ |
49
+ 19 | v0_1: {
50
+ | ^^^^
51
+ |
52
+ = note: in thema's own CUE
53
+ --> thema/lineage.cue:183:11
54
+ = detail: field a not present in {a:int,b?:int}
55
+ missing field "a"
56
+ = help: v0_1 stands for any instance of its source schema; leave it as _
57
+ ```
@@ -0,0 +1,9 @@
1
+ <!-- Generated by go test ./diag; do not edit. -->
2
+
3
+ # E0304: what a lens produces is not an instance of its target schema
4
+
5
+ This condition cannot arise when thema's checker is sound: every lens is proven total at bind, and the proof names the mapping at fault (E0360 to E0372) before this check runs.
6
+
7
+ If thema reports it, the bug is in thema, not in the lineage or the data.
8
+ Please report it at https://github.com/sdboyer/thema/issues with the lineage
9
+ and, for a translation, the instance.
@@ -0,0 +1,55 @@
1
+ <!-- Generated by go test ./diag; do not edit. -->
2
+
3
+ # E0305: a lens writes a field its target schema does not declare
4
+
5
+ A lens writes only fields its target schema declares, however open the author
6
+ wrote the schema: a lens is bound to the schema as declared. A field written
7
+ under a condition counts; it exists once data makes the condition true. Hidden
8
+ fields the target does not declare are the lens's own scratch space and are
9
+ not checked.
10
+
11
+ ## Example
12
+
13
+ `lineage.cue`:
14
+
15
+ ```cue
16
+ name: "ship"
17
+ schemas: {
18
+ "0": {
19
+ "0": {
20
+ schema: {
21
+ a: string
22
+ }
23
+ }
24
+ "1": {
25
+ schema: {
26
+ a: string
27
+ b?: int
28
+ }
29
+ }
30
+ }
31
+ }
32
+ lenses: {
33
+ "0.1->0.0": {
34
+ v0_1: _
35
+ v0_0: {
36
+ a: v0_1.a
37
+ if v0_1.a == "boom" {
38
+ extra: 1
39
+ }
40
+ }
41
+ }
42
+ }
43
+ ```
44
+
45
+ thema reports:
46
+
47
+ ```
48
+ error[E0305]: the result of lens 0.1->0.0 writes extra, which schema 0.0 does not declare
49
+ --> lineage.cue:20:3
50
+ |
51
+ 20 | v0_0: {
52
+ | ^^^^
53
+ |
54
+ = help: a lens writes only fields its target schema declares, however open the schema is written
55
+ ```
@@ -0,0 +1,9 @@
1
+ <!-- Generated by go test ./diag; do not edit. -->
2
+
3
+ # E0307: translating an instance, a lens produced something that is not concrete
4
+
5
+ This condition cannot arise when thema's checker is sound: every lens is proven total at bind, which rules out a result field left as a constraint for any instance (E0365).
6
+
7
+ If thema reports it, the bug is in thema, not in the lineage or the data.
8
+ Please report it at https://github.com/sdboyer/thema/issues with the lineage
9
+ and, for a translation, the instance.
@@ -0,0 +1,9 @@
1
+ <!-- Generated by go test ./diag; do not edit. -->
2
+
3
+ # E0308: translating an instance, a lens failed
4
+
5
+ This condition cannot arise when thema's checker is sound: every lens is proven total at bind, which rules out a result the target schema rejects for any instance (E0360, E0366, E0367).
6
+
7
+ If thema reports it, the bug is in thema, not in the lineage or the data.
8
+ Please report it at https://github.com/sdboyer/thema/issues with the lineage
9
+ and, for a translation, the instance.
@@ -0,0 +1,46 @@
1
+ <!-- Generated by go test ./diag; do not edit. -->
2
+
3
+ # E0310: a lens does not declare the instance it takes
4
+
5
+ A lens binds the instance it takes to a field named after the version it
6
+ maps from: v1_0 for a lens from 1.0. This lens does not declare it, so it has
7
+ nothing to map from.
8
+
9
+ ## Example
10
+
11
+ `lineage.cue`:
12
+
13
+ ```cue
14
+ lin: {
15
+ name: "ship"
16
+ schemas: {
17
+ "0": "0": {
18
+ schema: {a: string}
19
+ }
20
+ "1": "0": {
21
+ schema: {b: string}
22
+ }
23
+ }
24
+ lenses: {
25
+ "1.0->0.0": {
26
+ v0_0: {a: "x"}
27
+ }
28
+ "0.0->1.0": {
29
+ v0_0: _
30
+ v1_0: {b: v0_0.a}
31
+ }
32
+ }
33
+ }
34
+ ```
35
+
36
+ thema reports:
37
+
38
+ ```
39
+ error[E0310]: lens 1.0->0.0 does not declare v1_0, the instance of 1.0 it takes
40
+ --> lineage.cue:12:3
41
+ |
42
+ 12 | "1.0->0.0": {
43
+ | ^^^^^^^^^^
44
+ |
45
+ = help: write v1_0: _
46
+ ```
@@ -0,0 +1,46 @@
1
+ <!-- Generated by go test ./diag; do not edit. -->
2
+
3
+ # E0311: a lens does not declare the instance it returns
4
+
5
+ A lens returns the instance it builds in a field named after the version it
6
+ maps to: v0_0 for a lens to 0.0. This lens does not declare it, so it returns
7
+ nothing.
8
+
9
+ ## Example
10
+
11
+ `lineage.cue`:
12
+
13
+ ```cue
14
+ lin: {
15
+ name: "ship"
16
+ schemas: {
17
+ "0": "0": {
18
+ schema: {a: string}
19
+ }
20
+ "1": "0": {
21
+ schema: {b: string}
22
+ }
23
+ }
24
+ lenses: {
25
+ "1.0->0.0": {
26
+ v1_0: _
27
+ }
28
+ "0.0->1.0": {
29
+ v0_0: _
30
+ v1_0: {b: v0_0.a}
31
+ }
32
+ }
33
+ }
34
+ ```
35
+
36
+ thema reports:
37
+
38
+ ```
39
+ error[E0311]: lens 1.0->0.0 does not declare v0_0, the instance of 0.0 it returns
40
+ --> lineage.cue:12:3
41
+ |
42
+ 12 | "1.0->0.0": {
43
+ | ^^^^^^^^^^
44
+ |
45
+ = help: write v0_0: {...}, mapping each field of 0.0
46
+ ```
@@ -0,0 +1,67 @@
1
+ <!-- Generated by go test ./diag; do not edit. -->
2
+
3
+ # E0330: a lens body holds something that is not a mapping
4
+
5
+ A lens body holds only mappings: a target field and where it comes from.
6
+ Embeddings, comprehensions and let declarations are not mappings. A reference
7
+ to an optional field is guarded for you, and coalesce decides what to use when it
8
+ is absent.
9
+
10
+ ## Example
11
+
12
+ `ship/history/0.0.thema`:
13
+
14
+ ```cue
15
+ Schema: {
16
+ a: string
17
+ }
18
+ ```
19
+
20
+ `ship/history/1.0.thema`:
21
+
22
+ ```cue
23
+ Schema: {
24
+ b: string
25
+ }
26
+
27
+ ForwardLens: {
28
+ v0_0: _
29
+ v1_0: {
30
+ let x = v0_0.a
31
+ b: x
32
+ }
33
+ }
34
+ ```
35
+
36
+ `ship/tip.thema`:
37
+
38
+ ```cue
39
+ Schema: {
40
+ b: string
41
+ }
42
+ ```
43
+
44
+ thema reports:
45
+
46
+ ```
47
+ error[E0330]: let is not allowed in a lens body
48
+ --> history/1.0.thema:8:3
49
+ |
50
+ 8 | let x = v0_0.a
51
+ | ^^^
52
+ |
53
+
54
+ error[E0418]: x is not defined in a lens; an expression refers to v0_0, to len, quo, rem, div, mod and to the strings functions
55
+ --> history/1.0.thema:9:6
56
+ |
57
+ 9 | b: x
58
+ | ^
59
+ |
60
+
61
+ error[E0347]: 0.0 declares a and 1.0 does not, and nothing maps it: write <field>: v0_0.a to move it, or a: _drop
62
+ --> history/1.0.thema:5:1
63
+ |
64
+ 5 | ForwardLens: {
65
+ | ^^^^^^^^^^^
66
+ |
67
+ ```