@fougere/schema 0.2.0-alpha.1 → 0.3.0-alpha.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 (319) hide show
  1. package/dist/EntityDeclarations.d.ts +22 -0
  2. package/dist/EntityDeclarations.d.ts.map +1 -0
  3. package/dist/EntityDeclarations.js +19 -0
  4. package/dist/EntityDeclarations.js.map +1 -0
  5. package/dist/Field.d.ts +21 -0
  6. package/dist/Field.d.ts.map +1 -0
  7. package/dist/Field.js +50 -0
  8. package/dist/Field.js.map +1 -0
  9. package/dist/Schema.d.ts +67 -0
  10. package/dist/Schema.d.ts.map +1 -0
  11. package/dist/Schema.js +152 -0
  12. package/dist/Schema.js.map +1 -0
  13. package/dist/SchemaView.d.ts +18 -0
  14. package/dist/SchemaView.d.ts.map +1 -0
  15. package/dist/SchemaView.js +2 -0
  16. package/dist/SchemaView.js.map +1 -0
  17. package/dist/axis/Axis.d.ts +10 -0
  18. package/dist/axis/Axis.d.ts.map +1 -0
  19. package/dist/axis/Axis.js +9 -0
  20. package/dist/axis/Axis.js.map +1 -0
  21. package/dist/axis/Meta.d.ts +4 -0
  22. package/dist/axis/Meta.d.ts.map +1 -0
  23. package/dist/axis/Meta.js +2 -0
  24. package/dist/axis/Meta.js.map +1 -0
  25. package/dist/axis/boundary/Boundaries.d.ts +20 -0
  26. package/dist/axis/boundary/Boundaries.d.ts.map +1 -0
  27. package/dist/axis/boundary/Boundaries.js +31 -0
  28. package/dist/axis/boundary/Boundaries.js.map +1 -0
  29. package/dist/axis/boundary/Boundary.d.ts +26 -0
  30. package/dist/axis/boundary/Boundary.d.ts.map +1 -0
  31. package/dist/axis/boundary/Boundary.js +53 -0
  32. package/dist/axis/boundary/Boundary.js.map +1 -0
  33. package/dist/axis/boundary/axis.d.ts +4 -0
  34. package/dist/axis/boundary/axis.d.ts.map +1 -0
  35. package/dist/axis/boundary/axis.js +29 -0
  36. package/dist/axis/boundary/axis.js.map +1 -0
  37. package/dist/axis/lifecycle/Generators.d.ts +4 -0
  38. package/dist/axis/lifecycle/Generators.d.ts.map +1 -0
  39. package/dist/axis/lifecycle/Generators.js +8 -0
  40. package/dist/axis/lifecycle/Generators.js.map +1 -0
  41. package/dist/axis/lifecycle/Lifecycle.d.ts +28 -0
  42. package/dist/axis/lifecycle/Lifecycle.d.ts.map +1 -0
  43. package/dist/axis/lifecycle/Lifecycle.js +38 -0
  44. package/dist/axis/lifecycle/Lifecycle.js.map +1 -0
  45. package/dist/axis/lifecycle/apply.d.ts +8 -0
  46. package/dist/axis/lifecycle/apply.d.ts.map +1 -0
  47. package/dist/axis/lifecycle/apply.js +72 -0
  48. package/dist/axis/lifecycle/apply.js.map +1 -0
  49. package/dist/axis/lifecycle/axis.d.ts +4 -0
  50. package/dist/axis/lifecycle/axis.d.ts.map +1 -0
  51. package/dist/axis/lifecycle/axis.js +46 -0
  52. package/dist/axis/lifecycle/axis.js.map +1 -0
  53. package/dist/axis/role/Relation.d.ts +10 -0
  54. package/dist/axis/role/Relation.d.ts.map +1 -0
  55. package/dist/axis/role/Relation.js +6 -0
  56. package/dist/axis/role/Relation.js.map +1 -0
  57. package/dist/axis/role/Role.d.ts +38 -0
  58. package/dist/axis/role/Role.d.ts.map +1 -0
  59. package/dist/axis/role/Role.js +50 -0
  60. package/dist/axis/role/Role.js.map +1 -0
  61. package/dist/axis/role/axis.d.ts +5 -0
  62. package/dist/axis/role/axis.d.ts.map +1 -0
  63. package/dist/axis/role/axis.js +101 -0
  64. package/dist/axis/role/axis.js.map +1 -0
  65. package/dist/axis/shape/Formats.d.ts +8 -0
  66. package/dist/axis/shape/Formats.d.ts.map +1 -0
  67. package/dist/axis/shape/Formats.js +10 -0
  68. package/dist/axis/shape/Formats.js.map +1 -0
  69. package/dist/axis/shape/Shape.d.ts +58 -0
  70. package/dist/axis/shape/Shape.d.ts.map +1 -0
  71. package/dist/axis/shape/Shape.js +52 -0
  72. package/dist/axis/shape/Shape.js.map +1 -0
  73. package/dist/card/Descriptor.d.ts +55 -0
  74. package/dist/card/Descriptor.d.ts.map +1 -0
  75. package/dist/card/Descriptor.js +2 -0
  76. package/dist/card/Descriptor.js.map +1 -0
  77. package/dist/card/describe.d.ts +12 -0
  78. package/dist/card/describe.d.ts.map +1 -0
  79. package/dist/card/describe.js +83 -0
  80. package/dist/card/describe.js.map +1 -0
  81. package/dist/card/diff.d.ts +140 -0
  82. package/dist/card/diff.d.ts.map +1 -0
  83. package/dist/card/diff.js +123 -0
  84. package/dist/card/diff.js.map +1 -0
  85. package/dist/card/reconstruct.d.ts +11 -0
  86. package/dist/card/reconstruct.d.ts.map +1 -0
  87. package/dist/card/reconstruct.js +83 -0
  88. package/dist/card/reconstruct.js.map +1 -0
  89. package/dist/card/typescript.d.ts +17 -0
  90. package/dist/card/typescript.d.ts.map +1 -0
  91. package/dist/card/typescript.js +93 -0
  92. package/dist/card/typescript.js.map +1 -0
  93. package/dist/clean.d.ts +2 -0
  94. package/dist/clean.d.ts.map +1 -0
  95. package/dist/{projections/card.js → clean.js} +1 -2
  96. package/dist/clean.js.map +1 -0
  97. package/dist/constraint/FieldGroup.d.ts +21 -0
  98. package/dist/constraint/FieldGroup.d.ts.map +1 -0
  99. package/dist/constraint/FieldGroup.js +65 -0
  100. package/dist/constraint/FieldGroup.js.map +1 -0
  101. package/dist/constraint/Unique.d.ts +4 -0
  102. package/dist/constraint/Unique.d.ts.map +1 -0
  103. package/dist/constraint/Unique.js +4 -0
  104. package/dist/constraint/Unique.js.map +1 -0
  105. package/dist/entity.d.ts +4 -116
  106. package/dist/entity.d.ts.map +1 -1
  107. package/dist/entity.js +13 -289
  108. package/dist/entity.js.map +1 -1
  109. package/dist/index.d.ts +35 -17
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +25 -26
  112. package/dist/index.js.map +1 -1
  113. package/dist/judge/Judge.d.ts +14 -0
  114. package/dist/judge/Judge.d.ts.map +1 -0
  115. package/dist/judge/Judge.js +161 -0
  116. package/dist/judge/Judge.js.map +1 -0
  117. package/dist/judge/cases.d.ts +50 -0
  118. package/dist/judge/cases.d.ts.map +1 -0
  119. package/dist/judge/cases.js +100 -0
  120. package/dist/judge/cases.js.map +1 -0
  121. package/dist/judge/form.d.ts +11 -0
  122. package/dist/judge/form.d.ts.map +1 -0
  123. package/dist/judge/form.js +18 -0
  124. package/dist/judge/form.js.map +1 -0
  125. package/dist/judge/options.d.ts +4 -0
  126. package/dist/judge/options.d.ts.map +1 -0
  127. package/dist/judge/options.js +2 -0
  128. package/dist/judge/options.js.map +1 -0
  129. package/dist/judge/result.d.ts +17 -0
  130. package/dist/judge/result.d.ts.map +1 -0
  131. package/dist/judge/result.js +2 -0
  132. package/dist/judge/result.js.map +1 -0
  133. package/dist/name.d.ts +1 -14
  134. package/dist/name.d.ts.map +1 -1
  135. package/dist/name.js +3 -14
  136. package/dist/name.js.map +1 -1
  137. package/dist/projection/encode.d.ts +3 -0
  138. package/dist/projection/encode.d.ts.map +1 -0
  139. package/dist/projection/encode.js +19 -0
  140. package/dist/projection/encode.js.map +1 -0
  141. package/dist/projection/io.d.ts +4 -0
  142. package/dist/projection/io.d.ts.map +1 -0
  143. package/dist/projection/io.js +29 -0
  144. package/dist/projection/io.js.map +1 -0
  145. package/dist/projection/source.d.ts +7 -0
  146. package/dist/projection/source.d.ts.map +1 -0
  147. package/dist/projection/source.js +11 -0
  148. package/dist/projection/source.js.map +1 -0
  149. package/dist/{projections → projection}/standard.d.ts +0 -8
  150. package/dist/projection/standard.d.ts.map +1 -0
  151. package/dist/projection/standard.js +2 -0
  152. package/dist/projection/standard.js.map +1 -0
  153. package/dist/same.d.ts +6 -0
  154. package/dist/same.d.ts.map +1 -0
  155. package/dist/same.js +35 -0
  156. package/dist/same.js.map +1 -0
  157. package/dist/vocabulary/bool.d.ts +1 -1
  158. package/dist/vocabulary/bool.d.ts.map +1 -1
  159. package/dist/vocabulary/bool.js +2 -2
  160. package/dist/vocabulary/bool.js.map +1 -1
  161. package/dist/vocabulary/created.d.ts +2 -12
  162. package/dist/vocabulary/created.d.ts.map +1 -1
  163. package/dist/vocabulary/created.js +3 -14
  164. package/dist/vocabulary/created.js.map +1 -1
  165. package/dist/vocabulary/date.d.ts +1 -1
  166. package/dist/vocabulary/date.d.ts.map +1 -1
  167. package/dist/vocabulary/date.js +2 -2
  168. package/dist/vocabulary/date.js.map +1 -1
  169. package/dist/vocabulary/email.d.ts +1 -2
  170. package/dist/vocabulary/email.d.ts.map +1 -1
  171. package/dist/vocabulary/email.js +0 -1
  172. package/dist/vocabulary/email.js.map +1 -1
  173. package/dist/vocabulary/immutable.d.ts +2 -8
  174. package/dist/vocabulary/immutable.d.ts.map +1 -1
  175. package/dist/vocabulary/immutable.js +4 -10
  176. package/dist/vocabulary/immutable.js.map +1 -1
  177. package/dist/vocabulary/indexed.d.ts +2 -18
  178. package/dist/vocabulary/indexed.d.ts.map +1 -1
  179. package/dist/vocabulary/indexed.js +2 -20
  180. package/dist/vocabulary/indexed.js.map +1 -1
  181. package/dist/vocabulary/json.d.ts +3 -16
  182. package/dist/vocabulary/json.d.ts.map +1 -1
  183. package/dist/vocabulary/json.js +12 -9
  184. package/dist/vocabulary/json.js.map +1 -1
  185. package/dist/vocabulary/list.d.ts +2 -16
  186. package/dist/vocabulary/list.d.ts.map +1 -1
  187. package/dist/vocabulary/list.js +3 -15
  188. package/dist/vocabulary/list.js.map +1 -1
  189. package/dist/vocabulary/many.d.ts +2 -6
  190. package/dist/vocabulary/many.d.ts.map +1 -1
  191. package/dist/vocabulary/many.js +4 -7
  192. package/dist/vocabulary/many.js.map +1 -1
  193. package/dist/vocabulary/nullable.d.ts +2 -8
  194. package/dist/vocabulary/nullable.d.ts.map +1 -1
  195. package/dist/vocabulary/nullable.js +5 -12
  196. package/dist/vocabulary/nullable.js.map +1 -1
  197. package/dist/vocabulary/number.d.ts +1 -1
  198. package/dist/vocabulary/number.d.ts.map +1 -1
  199. package/dist/vocabulary/number.js +2 -2
  200. package/dist/vocabulary/number.js.map +1 -1
  201. package/dist/vocabulary/oneOf.d.ts +1 -8
  202. package/dist/vocabulary/oneOf.d.ts.map +1 -1
  203. package/dist/vocabulary/oneOf.js +2 -2
  204. package/dist/vocabulary/oneOf.js.map +1 -1
  205. package/dist/vocabulary/optional.d.ts +2 -9
  206. package/dist/vocabulary/optional.d.ts.map +1 -1
  207. package/dist/vocabulary/optional.js +6 -14
  208. package/dist/vocabulary/optional.js.map +1 -1
  209. package/dist/vocabulary/primary.d.ts +4 -17
  210. package/dist/vocabulary/primary.d.ts.map +1 -1
  211. package/dist/vocabulary/primary.js +10 -13
  212. package/dist/vocabulary/primary.js.map +1 -1
  213. package/dist/vocabulary/readOnly.d.ts +2 -9
  214. package/dist/vocabulary/readOnly.d.ts.map +1 -1
  215. package/dist/vocabulary/readOnly.js +5 -11
  216. package/dist/vocabulary/readOnly.js.map +1 -1
  217. package/dist/vocabulary/ref.d.ts +2 -7
  218. package/dist/vocabulary/ref.d.ts.map +1 -1
  219. package/dist/vocabulary/ref.js +3 -8
  220. package/dist/vocabulary/ref.js.map +1 -1
  221. package/dist/vocabulary/text.d.ts +2 -2
  222. package/dist/vocabulary/text.d.ts.map +1 -1
  223. package/dist/vocabulary/text.js +2 -2
  224. package/dist/vocabulary/text.js.map +1 -1
  225. package/dist/vocabulary/unique.d.ts +2 -22
  226. package/dist/vocabulary/unique.d.ts.map +1 -1
  227. package/dist/vocabulary/unique.js +5 -24
  228. package/dist/vocabulary/unique.js.map +1 -1
  229. package/dist/vocabulary/updated.d.ts +2 -7
  230. package/dist/vocabulary/updated.d.ts.map +1 -1
  231. package/dist/vocabulary/updated.js +1 -7
  232. package/dist/vocabulary/updated.js.map +1 -1
  233. package/dist/vocabulary/url.d.ts +1 -2
  234. package/dist/vocabulary/url.d.ts.map +1 -1
  235. package/dist/vocabulary/url.js +0 -1
  236. package/dist/vocabulary/url.js.map +1 -1
  237. package/dist/vocabulary/vocabulary.d.ts +5 -0
  238. package/dist/vocabulary/vocabulary.d.ts.map +1 -0
  239. package/dist/vocabulary/vocabulary.js +31 -0
  240. package/dist/vocabulary/vocabulary.js.map +1 -0
  241. package/dist/vocabulary/writeOnly.d.ts +2 -8
  242. package/dist/vocabulary/writeOnly.d.ts.map +1 -1
  243. package/dist/vocabulary/writeOnly.js +5 -10
  244. package/dist/vocabulary/writeOnly.js.map +1 -1
  245. package/package.json +2 -2
  246. package/dist/field/boundary.d.ts +0 -86
  247. package/dist/field/boundary.d.ts.map +0 -1
  248. package/dist/field/boundary.js +0 -94
  249. package/dist/field/boundary.js.map +0 -1
  250. package/dist/field/field.d.ts +0 -64
  251. package/dist/field/field.d.ts.map +0 -1
  252. package/dist/field/field.js +0 -28
  253. package/dist/field/field.js.map +0 -1
  254. package/dist/field/index.d.ts +0 -7
  255. package/dist/field/index.d.ts.map +0 -1
  256. package/dist/field/index.js +0 -9
  257. package/dist/field/index.js.map +0 -1
  258. package/dist/field/lifecycle.d.ts +0 -40
  259. package/dist/field/lifecycle.d.ts.map +0 -1
  260. package/dist/field/lifecycle.js +0 -27
  261. package/dist/field/lifecycle.js.map +0 -1
  262. package/dist/field/meta.d.ts +0 -9
  263. package/dist/field/meta.d.ts.map +0 -1
  264. package/dist/field/meta.js +0 -7
  265. package/dist/field/meta.js.map +0 -1
  266. package/dist/field/role.d.ts +0 -54
  267. package/dist/field/role.d.ts.map +0 -1
  268. package/dist/field/role.js +0 -55
  269. package/dist/field/role.js.map +0 -1
  270. package/dist/field/shape.d.ts +0 -77
  271. package/dist/field/shape.d.ts.map +0 -1
  272. package/dist/field/shape.js +0 -49
  273. package/dist/field/shape.js.map +0 -1
  274. package/dist/hints.d.ts +0 -33
  275. package/dist/hints.d.ts.map +0 -1
  276. package/dist/hints.js +0 -2
  277. package/dist/hints.js.map +0 -1
  278. package/dist/projections/card.d.ts +0 -117
  279. package/dist/projections/card.d.ts.map +0 -1
  280. package/dist/projections/card.js.map +0 -1
  281. package/dist/projections/describe.d.ts +0 -25
  282. package/dist/projections/describe.d.ts.map +0 -1
  283. package/dist/projections/describe.js +0 -136
  284. package/dist/projections/describe.js.map +0 -1
  285. package/dist/projections/encode.d.ts +0 -11
  286. package/dist/projections/encode.d.ts.map +0 -1
  287. package/dist/projections/encode.js +0 -26
  288. package/dist/projections/encode.js.map +0 -1
  289. package/dist/projections/io.d.ts +0 -30
  290. package/dist/projections/io.d.ts.map +0 -1
  291. package/dist/projections/io.js +0 -52
  292. package/dist/projections/io.js.map +0 -1
  293. package/dist/projections/lifecycle.d.ts +0 -43
  294. package/dist/projections/lifecycle.d.ts.map +0 -1
  295. package/dist/projections/lifecycle.js +0 -115
  296. package/dist/projections/lifecycle.js.map +0 -1
  297. package/dist/projections/reconstruct.d.ts +0 -36
  298. package/dist/projections/reconstruct.d.ts.map +0 -1
  299. package/dist/projections/reconstruct.js +0 -149
  300. package/dist/projections/reconstruct.js.map +0 -1
  301. package/dist/projections/source.d.ts +0 -41
  302. package/dist/projections/source.d.ts.map +0 -1
  303. package/dist/projections/source.js +0 -37
  304. package/dist/projections/source.js.map +0 -1
  305. package/dist/projections/standard.d.ts.map +0 -1
  306. package/dist/projections/standard.js +0 -10
  307. package/dist/projections/standard.js.map +0 -1
  308. package/dist/projections/typescript.d.ts +0 -53
  309. package/dist/projections/typescript.d.ts.map +0 -1
  310. package/dist/projections/typescript.js +0 -184
  311. package/dist/projections/typescript.js.map +0 -1
  312. package/dist/projections/validation.d.ts +0 -57
  313. package/dist/projections/validation.d.ts.map +0 -1
  314. package/dist/projections/validation.js +0 -148
  315. package/dist/projections/validation.js.map +0 -1
  316. package/dist/unique.d.ts +0 -65
  317. package/dist/unique.d.ts.map +0 -1
  318. package/dist/unique.js +0 -80
  319. package/dist/unique.js.map +0 -1
package/dist/same.js ADDED
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Two declared values, compared member by member. Key ORDER does not count, and a Date
3
+ * equals its clone — the two things serializing both sides got wrong, for twice the cost.
4
+ */
5
+ export function same(a, b) {
6
+ if (Object.is(a, b))
7
+ return true;
8
+ if (a instanceof Date && b instanceof Date)
9
+ return a.getTime() === b.getTime();
10
+ if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object')
11
+ return false;
12
+ const arrayed = Array.isArray(a);
13
+ if (arrayed !== Array.isArray(b))
14
+ return false;
15
+ if (arrayed) {
16
+ const left = a;
17
+ const right = b;
18
+ if (left.length !== right.length)
19
+ return false;
20
+ for (let i = 0; i < left.length; i++)
21
+ if (!same(left[i], right[i]))
22
+ return false;
23
+ return true;
24
+ }
25
+ const left = a;
26
+ const right = b;
27
+ const keys = Object.keys(left);
28
+ if (keys.length !== Object.keys(right).length)
29
+ return false;
30
+ for (const key of keys)
31
+ if (!(key in right) || !same(left[key], right[key]))
32
+ return false;
33
+ return true;
34
+ }
35
+ //# sourceMappingURL=same.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"same.js","sourceRoot":"","sources":["../src/same.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,CAAU,EAAE,CAAU;IACzC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI;QAAE,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/E,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE7F,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,CAAc,CAAC;QAC5B,MAAM,KAAK,GAAG,CAAc,CAAC;QAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,CAA4B,CAAC;IAC1C,MAAM,KAAK,GAAG,CAA4B,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC5D,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAC1F,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type Field } from '../field/index.js';
1
+ import { Field } from '../Field.js';
2
2
  export declare function bool(opts?: {
3
3
  default?: boolean;
4
4
  description?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"bool.d.ts","sourceRoot":"","sources":["../../src/vocabulary/bool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE5D,wBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAMvF"}
1
+ {"version":3,"file":"bool.d.ts","sourceRoot":"","sources":["../../src/vocabulary/bool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,wBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAMvF"}
@@ -1,6 +1,6 @@
1
- import { createField } from '../field/index.js';
1
+ import { Field } from '../Field.js';
2
2
  export function bool(opts) {
3
- return createField({
3
+ return new Field({
4
4
  shape: { type: 'boolean' },
5
5
  lifecycle: opts?.default !== undefined ? { create: { value: opts.default } } : undefined,
6
6
  meta: opts?.description !== undefined ? { description: opts.description } : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"bool.js","sourceRoot":"","sources":["../../src/vocabulary/bool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAE5D,MAAM,UAAU,IAAI,CAAC,IAAkD;IACrE,OAAO,WAAW,CAAU;QAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC1B,SAAS,EAAE,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;QACxF,IAAI,EAAE,IAAI,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;KACtF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"bool.js","sourceRoot":"","sources":["../../src/vocabulary/bool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,UAAU,IAAI,CAAC,IAAkD;IACrE,OAAO,IAAI,KAAK,CAAU;QACxB,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC1B,SAAS,EAAE,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;QACxF,IAAI,EAAE,IAAI,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;KACtF,CAAC,CAAC;AACL,CAAC"}
@@ -1,13 +1,3 @@
1
- import { type Field } from '../field/index.js';
2
- /**
3
- * The canonical `createdAt` — stamped at creation, optional in `new X(input)`.
4
- * Immutable by default: a creation timestamp re-supplied in a patch is an
5
- * error (decided 2026-07-15).
6
- *
7
- * Named for what it is, and its dual {@link updated} is built on it. It used to be
8
- * called `auto()`, which said "the server fills this" without saying *when* — while
9
- * `updated()` next to it named its moment. Every template in the repo spelled it
10
- * `createdAt: auto()`: the field always had the name the constructor was missing.
11
- */
12
- export declare function created(): Field<Date, true>;
1
+ import { Field } from '../Field.js';
2
+ export declare function created(): Field<Date>;
13
3
  //# sourceMappingURL=created.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"created.d.ts","sourceRoot":"","sources":["../../src/vocabulary/created.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;;;;;;;GASG;AACH,wBAAgB,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAK3C"}
1
+ {"version":3,"file":"created.d.ts","sourceRoot":"","sources":["../../src/vocabulary/created.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,wBAAgB,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAIrC"}
@@ -1,18 +1,7 @@
1
- import { createField } from '../field/index.js';
2
- /**
3
- * The canonical `createdAt` — stamped at creation, optional in `new X(input)`.
4
- * Immutable by default: a creation timestamp re-supplied in a patch is an
5
- * error (decided 2026-07-15).
6
- *
7
- * Named for what it is, and its dual {@link updated} is built on it. It used to be
8
- * called `auto()`, which said "the server fills this" without saying *when* — while
9
- * `updated()` next to it named its moment. Every template in the repo spelled it
10
- * `createdAt: auto()`: the field always had the name the constructor was missing.
11
- */
1
+ import { date } from './date.js';
12
2
  export function created() {
13
- return createField({
14
- shape: { type: 'string', format: 'date-time' },
15
- lifecycle: { create: 'now', update: 'forbidden' },
3
+ return date().with({
4
+ lifecycle: { create: "now", update: "forbidden" },
16
5
  });
17
6
  }
18
7
  //# sourceMappingURL=created.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"created.js","sourceRoot":"","sources":["../../src/vocabulary/created.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO;IACrB,OAAO,WAAW,CAAa;QAC7B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE;QAC9C,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE;KAClD,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"created.js","sourceRoot":"","sources":["../../src/vocabulary/created.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,OAAO;IACrB,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC;QACjB,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE;KAClD,CAAC,CAAC;AACL,CAAC"}
@@ -1,3 +1,3 @@
1
- import { type Field } from '../field/index.js';
1
+ import { Field } from '../Field.js';
2
2
  export declare function date(): Field<Date>;
3
3
  //# sourceMappingURL=date.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/vocabulary/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE5D,wBAAgB,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAElC"}
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/vocabulary/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,wBAAgB,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAElC"}
@@ -1,5 +1,5 @@
1
- import { createField } from '../field/index.js';
1
+ import { Field } from '../Field.js';
2
2
  export function date() {
3
- return createField({ shape: { type: 'string', format: 'date-time' } });
3
+ return new Field({ shape: { type: 'string', format: 'date-time' } });
4
4
  }
5
5
  //# sourceMappingURL=date.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/vocabulary/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAE5D,MAAM,UAAU,IAAI;IAClB,OAAO,WAAW,CAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AAC/E,CAAC"}
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/vocabulary/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,UAAU,IAAI;IAClB,OAAO,IAAI,KAAK,CAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AAC7E,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import { type TextOptions } from './text.js';
2
- import type { Field } from '../field/index.js';
3
- /** A string holding an email address — `text({ format: 'email' })`, named. */
2
+ import type { Field } from '../Field.js';
4
3
  export declare function email(opts?: Omit<TextOptions, 'format'>): Field<string>;
5
4
  //# sourceMappingURL=email.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/vocabulary/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,8EAA8E;AAC9E,wBAAgB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAEvE"}
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/vocabulary/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,wBAAgB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAEvE"}
@@ -1,5 +1,4 @@
1
1
  import { text } from './text.js';
2
- /** A string holding an email address — `text({ format: 'email' })`, named. */
3
2
  export function email(opts) {
4
3
  return text({ ...opts, format: 'email' });
5
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/vocabulary/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAoB,MAAM,WAAW,CAAC;AAGnD,8EAA8E;AAC9E,MAAM,UAAU,KAAK,CAAC,IAAkC;IACtD,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/vocabulary/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAoB,MAAM,WAAW,CAAC;AAGnD,MAAM,UAAU,KAAK,CAAC,IAAkC;IACtD,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5C,CAAC"}
@@ -1,9 +1,3 @@
1
- import { type Field } from '../field/index.js';
2
- /**
3
- * Forbid re-writing after creation — `update: 'forbidden'` on the lifecycle
4
- * axis. Creation is untouched; supplying the field in a patch is a validation
5
- * error ("Immutable"). Derived views (`partial()`) keep the field for
6
- * introspection — the lifecycle rule, not the view, is what rejects it.
7
- */
8
- export declare function immutable<T, A extends boolean>(field: Field<T, A>): Field<T, A>;
1
+ import { Field } from '../Field.js';
2
+ export declare const immutable: <T>(field: Field<T>) => Field<T>;
9
3
  //# sourceMappingURL=immutable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"immutable.d.ts","sourceRoot":"","sources":["../../src/vocabulary/immutable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAE/E"}
1
+ {"version":3,"file":"immutable.d.ts","sourceRoot":"","sources":["../../src/vocabulary/immutable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAEpD,CAAC"}
@@ -1,11 +1,5 @@
1
- import { createField } from '../field/index.js';
2
- /**
3
- * Forbid re-writing after creation — `update: 'forbidden'` on the lifecycle
4
- * axis. Creation is untouched; supplying the field in a patch is a validation
5
- * error ("Immutable"). Derived views (`partial()`) keep the field for
6
- * introspection — the lifecycle rule, not the view, is what rejects it.
7
- */
8
- export function immutable(field) {
9
- return createField({ ...field, lifecycle: { ...field.lifecycle, update: 'forbidden' } });
10
- }
1
+ import { vocabulary } from './vocabulary.js';
2
+ export const immutable = vocabulary('immutable', () => ({
3
+ lifecycle: { update: 'forbidden' },
4
+ }));
11
5
  //# sourceMappingURL=immutable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"immutable.js","sourceRoot":"","sources":["../../src/vocabulary/immutable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAuB,KAAkB;IAChE,OAAO,WAAW,CAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AACjG,CAAC"}
1
+ {"version":3,"file":"immutable.js","sourceRoot":"","sources":["../../src/vocabulary/immutable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,MAAM,CAAC,MAAM,SAAS,GAAqC,UAAU,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IACxF,SAAS,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;CACnC,CAAC,CAAC,CAAC"}
@@ -1,19 +1,3 @@
1
- import { type Field } from '../field/index.js';
2
- /**
3
- * Reads filter on this field often — `index: true` on the role axis.
4
- *
5
- * Named `indexed` rather than `index`: `index` is taken everywhere in JavaScript (an
6
- * array position, a module's entry point), and a vocabulary word has to read as what it
7
- * says at the call site — `indexed(text())` states a property of the field, `index(...)`
8
- * would read as an action on it.
9
- *
10
- * It changes no answer, only the cost of getting one — which is why it is the one word
11
- * here that is a hint rather than a rule. The DDL emits `CREATE INDEX`; nothing else
12
- * reads it, and nothing should: a query that only works with the index is a query with
13
- * a bug.
14
- *
15
- * `unique()` already implies one — a uniqueness constraint is backed by an index on
16
- * every engine — so declaring both is redundant, not additive.
17
- */
18
- export declare function indexed<T, A extends boolean>(field: Field<T, A>): Field<T, A>;
1
+ import { Field } from '../Field.js';
2
+ export declare const indexed: <T>(field: Field<T>) => Field<T>;
19
3
  //# sourceMappingURL=indexed.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"indexed.d.ts","sourceRoot":"","sources":["../../src/vocabulary/indexed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAE7E"}
1
+ {"version":3,"file":"indexed.d.ts","sourceRoot":"","sources":["../../src/vocabulary/indexed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,eAAO,MAAM,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAA4D,CAAC"}
@@ -1,21 +1,3 @@
1
- import { createField } from '../field/index.js';
2
- /**
3
- * Reads filter on this field often — `index: true` on the role axis.
4
- *
5
- * Named `indexed` rather than `index`: `index` is taken everywhere in JavaScript (an
6
- * array position, a module's entry point), and a vocabulary word has to read as what it
7
- * says at the call site — `indexed(text())` states a property of the field, `index(...)`
8
- * would read as an action on it.
9
- *
10
- * It changes no answer, only the cost of getting one — which is why it is the one word
11
- * here that is a hint rather than a rule. The DDL emits `CREATE INDEX`; nothing else
12
- * reads it, and nothing should: a query that only works with the index is a query with
13
- * a bug.
14
- *
15
- * `unique()` already implies one — a uniqueness constraint is backed by an index on
16
- * every engine — so declaring both is redundant, not additive.
17
- */
18
- export function indexed(field) {
19
- return createField({ ...field, role: { ...field.role, index: true } });
20
- }
1
+ import { vocabulary } from './vocabulary.js';
2
+ export const indexed = vocabulary('indexed', () => ({ role: { index: true } }));
21
3
  //# sourceMappingURL=indexed.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"indexed.js","sourceRoot":"","sources":["../../src/vocabulary/indexed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAE5D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,OAAO,CAAuB,KAAkB;IAC9D,OAAO,WAAW,CAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC/E,CAAC"}
1
+ {"version":3,"file":"indexed.js","sourceRoot":"","sources":["../../src/vocabulary/indexed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,MAAM,CAAC,MAAM,OAAO,GAAqC,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC"}
@@ -1,18 +1,5 @@
1
- import { type Field, type SchemaLike } from '../field/index.js';
2
- /**
3
- * A JSON value field.
4
- *
5
- * - `json()` — an OPAQUE value: passes validation unchecked.
6
- * - `json(Entity)` — an embedded value object: the entity's SHAPE projection is
7
- * inlined as JSON Schema nesting (`properties`/`required`), so the engine
8
- * validates the nested structure and the portable descriptor carries it verbatim.
9
- *
10
- * Entity-only on purpose: an arbitrary live validator could not serialise, an
11
- * entity's shape can. Only the value axis travels — `role`/`lifecycle`/`boundary` of
12
- * the embedded fields are stripped (identity, write rules and wire conversion belong
13
- * to the entity standing alone, not to its embedded VALUE form). Shallow consequence:
14
- * nested boundaries don't run — a nested date stays its wire string.
15
- */
1
+ import { Field } from '../Field.js';
2
+ import type { SchemaView } from '../SchemaView.js';
16
3
  export declare function json<T = unknown>(): Field<T>;
17
- export declare function json<E extends SchemaLike & (new (...args: any[]) => any)>(of: E): Field<InstanceType<E>>;
4
+ export declare function json<E extends SchemaView & (new (...args: any[]) => any)>(of: E): Field<InstanceType<E>>;
18
5
  //# sourceMappingURL=json.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/vocabulary/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI7E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,IAAI,CAAC,CAAC,GAAG,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9C,wBAAgB,IAAI,CAAC,CAAC,SAAS,UAAU,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/vocabulary/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,wBAAgB,IAAI,CAAC,CAAC,GAAG,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9C,wBAAgB,IAAI,CAAC,CAAC,SAAS,UAAU,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -1,16 +1,19 @@
1
- import { createField } from '../field/index.js';
2
- import { describe } from '../projections/describe.js';
1
+ import { Field } from '../Field.js';
2
+ import { Judge } from '../judge/Judge.js';
3
3
  export function json(of) {
4
4
  if (!of)
5
- return createField({ shape: { type: 'object' } });
6
- const card = describe(of);
5
+ return new Field({ shape: { type: 'object' } });
7
6
  const properties = {};
8
- for (const [key, prop] of Object.entries(card.properties)) {
9
- const { 'x-fougere': _ext, ...shapeOnly } = prop;
10
- properties[key] = shapeOnly;
7
+ const required = [];
8
+ for (const [key, field] of Object.entries(of.getFields())) {
9
+ properties[key] = field.meta?.description
10
+ ? { ...field.shape, description: field.meta.description }
11
+ : field.shape;
12
+ if (Judge.onAbsent(field) === null)
13
+ required.push(key);
11
14
  }
12
- return createField({
13
- shape: { type: 'object', properties, ...(card.required ? { required: card.required } : {}) },
15
+ return new Field({
16
+ shape: { type: 'object', properties, ...(required.length ? { required } : {}) },
14
17
  });
15
18
  }
16
19
  //# sourceMappingURL=json.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/vocabulary/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA+B,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAmBtD,MAAM,UAAU,IAAI,CAAC,EAAe;IAClC,IAAI,CAAC,EAAE;QAAE,OAAO,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1D,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,SAAS,EAAE,GAAG,IAAuB,CAAC;QACpE,UAAU,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9B,CAAC;IACD,OAAO,WAAW,CAAC;QACjB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;KAC7F,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/vocabulary/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,MAAM,UAAU,IAAI,CAAC,EAAe;IAClC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC;QAC1D,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,WAAW;YACvC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE;YACzD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAChB,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,IAAI,KAAK,CAAC;QACf,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;KAChF,CAAC,CAAC;AACL,CAAC"}
@@ -1,21 +1,7 @@
1
- import { type Field } from '../field/index.js';
1
+ import { Field } from '../Field.js';
2
2
  export interface ListOptions {
3
- /** Minimum number of elements. */
4
3
  min?: number;
5
- /** Maximum number of elements. */
6
4
  max?: number;
7
5
  }
8
- /**
9
- * A list of VALUES — `tags: list(text())`, `scores: list(number())`. The element's
10
- * shape travels as JSON Schema `items`, so the engine validates every element natively.
11
- *
12
- * NOT a relation: `many(Post)` is a role (related rows, no value shape); `list(text())`
13
- * is a value (an array column/JSON, fully owned by the record).
14
- *
15
- * Only the element's `shape` embeds. Its other axes are meaningless per-element and are
16
- * DROPPED SILENTLY — `list(primary())` is accepted and loses the role. The guard below
17
- * only rejects a field with no shape at all (a relation). Tightening it to reject a
18
- * carried role/lifecycle/boundary is open.
19
- */
20
- export declare function list<T>(item: Field<T, boolean>, opts?: ListOptions): Field<T[]>;
6
+ export declare function list<T>(item: Field<T>, opts?: ListOptions): Field<T[]>;
21
7
  //# sourceMappingURL=list.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/vocabulary/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAK/E"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/vocabulary/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAKtE"}
@@ -1,20 +1,8 @@
1
- import { createField } from '../field/index.js';
2
- /**
3
- * A list of VALUES — `tags: list(text())`, `scores: list(number())`. The element's
4
- * shape travels as JSON Schema `items`, so the engine validates every element natively.
5
- *
6
- * NOT a relation: `many(Post)` is a role (related rows, no value shape); `list(text())`
7
- * is a value (an array column/JSON, fully owned by the record).
8
- *
9
- * Only the element's `shape` embeds. Its other axes are meaningless per-element and are
10
- * DROPPED SILENTLY — `list(primary())` is accepted and loses the role. The guard below
11
- * only rejects a field with no shape at all (a relation). Tightening it to reject a
12
- * carried role/lifecycle/boundary is open.
13
- */
1
+ import { Field } from '../Field.js';
14
2
  export function list(item, opts) {
15
- if (!item.shape)
3
+ if (item.role?.relation)
16
4
  throw new Error('list() takes a value field (text(), number()…) — a relation has no value shape');
17
- return createField({
5
+ return new Field({
18
6
  shape: { type: 'array', items: item.shape, minItems: opts?.min, maxItems: opts?.max },
19
7
  });
20
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/vocabulary/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAS5D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,IAAI,CAAI,IAAuB,EAAE,IAAkB;IACjE,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;IACnH,OAAO,WAAW,CAAM;QACtB,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE;KACtF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/vocabulary/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAOpC,MAAM,UAAU,IAAI,CAAI,IAAc,EAAE,IAAkB;IACxD,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;IAC3H,OAAO,IAAI,KAAK,CAAM;QACpB,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE;KACtF,CAAC,CAAC;AACL,CAAC"}
@@ -1,8 +1,4 @@
1
- import { type EntityConstructor, type Field } from '../field/index.js';
2
- /**
3
- * A collection of related entities — a many-relation role, no value shape of its own.
4
- * Pass the target class (`many(Post)`) or, for circular/forward references, a thunk
5
- * (`many(() => Post)`).
6
- */
1
+ import { type EntityConstructor } from '../axis/role/Relation.js';
2
+ import { Field } from '../Field.js';
7
3
  export declare function many<E extends EntityConstructor>(target: E | (() => E)): Field<InstanceType<E>[]>;
8
4
  //# sourceMappingURL=many.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"many.d.ts","sourceRoot":"","sources":["../../src/vocabulary/many.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,iBAAiB,EAAE,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAEnG;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,iBAAiB,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAIjG"}
1
+ {"version":3,"file":"many.d.ts","sourceRoot":"","sources":["../../src/vocabulary/many.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,wBAAgB,IAAI,CAAC,CAAC,SAAS,iBAAiB,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAKjG"}
@@ -1,11 +1,8 @@
1
- import { createField, toTargetThunk } from '../field/index.js';
2
- /**
3
- * A collection of related entities — a many-relation role, no value shape of its own.
4
- * Pass the target class (`many(Post)`) or, for circular/forward references, a thunk
5
- * (`many(() => Post)`).
6
- */
1
+ import { toTargetThunk } from '../axis/role/Relation.js';
2
+ import { Field } from '../Field.js';
7
3
  export function many(target) {
8
- return createField({
4
+ return new Field({
5
+ shape: { type: 'array' },
9
6
  role: { relation: { to: toTargetThunk(target), kind: 'many' } },
10
7
  });
11
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"many.js","sourceRoot":"","sources":["../../src/vocabulary/many.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAsC,MAAM,mBAAmB,CAAC;AAEnG;;;;GAIG;AACH,MAAM,UAAU,IAAI,CAA8B,MAAqB;IACrE,OAAO,WAAW,CAAoB;QACpC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;KAChE,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"many.js","sourceRoot":"","sources":["../../src/vocabulary/many.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA0B,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,UAAU,IAAI,CAA8B,MAAqB;IACrE,OAAO,IAAI,KAAK,CAAoB;QAClC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QACxB,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;KAChE,CAAC,CAAC;AACL,CAAC"}
@@ -1,9 +1,3 @@
1
- import { type Field } from '../field/index.js';
2
- /**
3
- * Make `null` a legal VALUE without touching presence — the field stays required
4
- * at creation (the missing quadrant: "nullable but required"). The caller must
5
- * say something, and "nothing to report" (`null`) is an acceptable answer.
6
- * For null-legal-and-omissible, use `optional()`.
7
- */
8
- export declare function nullable<T>(field: Field<T>): Field<T | null>;
1
+ import { type Field } from '../Field.js';
2
+ export declare const nullable: <T>(field: Field<T>) => Field<T | null>;
9
3
  //# sourceMappingURL=nullable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nullable.d.ts","sourceRoot":"","sources":["../../src/vocabulary/nullable.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1E;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAI5D"}
1
+ {"version":3,"file":"nullable.d.ts","sourceRoot":"","sources":["../../src/vocabulary/nullable.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,eAAO,MAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,IAAI,CAE1D,CAAC"}
@@ -1,13 +1,6 @@
1
- import { cloneField, nullableShape } from '../field/index.js';
2
- /**
3
- * Make `null` a legal VALUE without touching presence — the field stays required
4
- * at creation (the missing quadrant: "nullable but required"). The caller must
5
- * say something, and "nothing to report" (`null`) is an acceptable answer.
6
- * For null-legal-and-omissible, use `optional()`.
7
- */
8
- export function nullable(field) {
9
- return cloneField(field, {
10
- shape: field.shape && nullableShape(field.shape),
11
- });
12
- }
1
+ import { vocabulary } from './vocabulary.js';
2
+ import { Anatomy } from '../axis/shape/Shape.js';
3
+ export const nullable = vocabulary('nullable', (field) => ({
4
+ shape: Anatomy.nullable(field.shape),
5
+ }));
13
6
  //# sourceMappingURL=nullable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nullable.js","sourceRoot":"","sources":["../../src/vocabulary/nullable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAc,MAAM,mBAAmB,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAI,KAAe;IACzC,OAAO,UAAU,CAAC,KAAK,EAAE;QACvB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;KACjD,CAAoB,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"nullable.js","sourceRoot":"","sources":["../../src/vocabulary/nullable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGjD,MAAM,CAAC,MAAM,QAAQ,GAA4C,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAClG,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;CACrC,CAAC,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type Field } from '../field/index.js';
1
+ import { Field } from '../Field.js';
2
2
  export interface NumberOptions {
3
3
  min?: number;
4
4
  max?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/vocabulary/number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAM1D"}
1
+ {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/vocabulary/number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAM1D"}
@@ -1,6 +1,6 @@
1
- import { createField } from '../field/index.js';
1
+ import { Field } from '../Field.js';
2
2
  export function number(opts) {
3
- return createField({
3
+ return new Field({
4
4
  shape: { type: opts?.integer ? 'integer' : 'number', minimum: opts?.min, maximum: opts?.max },
5
5
  lifecycle: opts?.default !== undefined ? { create: { value: opts.default } } : undefined,
6
6
  meta: opts?.description !== undefined ? { description: opts.description } : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/vocabulary/number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAU5D,MAAM,UAAU,MAAM,CAAC,IAAoB;IACzC,OAAO,WAAW,CAAS;QACzB,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE;QAC7F,SAAS,EAAE,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;QACxF,IAAI,EAAE,IAAI,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;KACtF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/vocabulary/number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAUpC,MAAM,UAAU,MAAM,CAAC,IAAoB;IACzC,OAAO,IAAI,KAAK,CAAS;QACvB,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE;QAC7F,SAAS,EAAE,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;QACxF,IAAI,EAAE,IAAI,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;KACtF,CAAC,CAAC;AACL,CAAC"}
@@ -1,13 +1,6 @@
1
- import { type Field } from '../field/index.js';
1
+ import { Field } from '../Field.js';
2
2
  interface OneOfOptions<V extends string = string> {
3
3
  description?: string;
4
- /**
5
- * Value filled at create when the input omits the field (same as text/number/bool).
6
- *
7
- * Typed to the members, not to `string`: a default is written into every row without
8
- * passing the client judge, so `oneOf('draft', 'published', { default: 'typo' })` used
9
- * to compile and produce rows the entity's own `validate` refuses.
10
- */
11
4
  default?: V;
12
5
  }
13
6
  export declare function oneOf<const T extends readonly string[]>(...values: [...T]): Field<T[number]>;
@@ -1 +1 @@
1
- {"version":3,"file":"oneOf.d.ts","sourceRoot":"","sources":["../../src/vocabulary/oneOf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE5D,UAAU,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC;CACb;AAID,wBAAgB,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9F,wBAAgB,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,EACrD,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GACvC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"oneOf.d.ts","sourceRoot":"","sources":["../../src/vocabulary/oneOf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,UAAU,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,CAAC;CACb;AAED,wBAAgB,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9F,wBAAgB,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,EACrD,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GACvC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC"}
@@ -1,10 +1,10 @@
1
- import { createField } from '../field/index.js';
1
+ import { Field } from '../Field.js';
2
2
  export function oneOf(...args) {
3
3
  const last = args[args.length - 1];
4
4
  const hasOpts = typeof last === 'object' && last !== null && !Array.isArray(last);
5
5
  const values = (hasOpts ? args.slice(0, -1) : args);
6
6
  const opts = hasOpts ? last : {};
7
- return createField({
7
+ return new Field({
8
8
  shape: { type: 'string', enum: values },
9
9
  lifecycle: opts.default !== undefined ? { create: { value: opts.default } } : undefined,
10
10
  meta: opts.description !== undefined ? { description: opts.description } : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"oneOf.js","sourceRoot":"","sources":["../../src/vocabulary/oneOf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAoB5D,MAAM,UAAU,KAAK,CACnB,GAAG,IAA8C;IAEjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAiC,CAAC;IACpF,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAE,IAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,OAAO,WAAW,CAAY;QAC5B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;QACvC,SAAS,EAAE,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;QACvF,IAAI,EAAE,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;KACrF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"oneOf.js","sourceRoot":"","sources":["../../src/vocabulary/oneOf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAWpC,MAAM,UAAU,KAAK,CACnB,GAAG,IAA8C;IAEjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAiC,CAAC;IACpF,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAE,IAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,OAAO,IAAI,KAAK,CAAY;QAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;QACvC,SAAS,EAAE,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;QACvF,IAAI,EAAE,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;KACrF,CAAC,CAAC;AACL,CAAC"}
@@ -1,10 +1,3 @@
1
- import { type Field } from '../field/index.js';
2
- /**
3
- * Make a field nullable AND omissible at creation — `null` enters the shape's
4
- * grammar (the `[T,'null']` union) and the lifecycle permits absence. The two
5
- * moves are independent: for null-legal-but-still-required, use `nullable()`.
6
- * An existing create rule (a default) wins over `'optional'` — it already
7
- * answers absence, and with a value rather than an omission.
8
- */
9
- export declare function optional<T>(field: Field<T>): Field<T | null, true>;
1
+ import { type Field } from '../Field.js';
2
+ export declare const optional: <T>(field: Field<T>) => Field<T | null>;
10
3
  //# sourceMappingURL=optional.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"optional.d.ts","sourceRoot":"","sources":["../../src/vocabulary/optional.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1E;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAKlE"}
1
+ {"version":3,"file":"optional.d.ts","sourceRoot":"","sources":["../../src/vocabulary/optional.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,eAAO,MAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,IAAI,CAG1D,CAAC"}