@fougere/schema 0.5.0-alpha.1 → 0.7.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 (403) hide show
  1. package/README.md +5 -4
  2. package/dist/{schema/Schema.d.ts → Schema.d.ts} +18 -28
  3. package/dist/Schema.d.ts.map +1 -0
  4. package/dist/Schema.js +136 -0
  5. package/dist/Schema.js.map +1 -0
  6. package/dist/SchemaDefinition.d.ts +73 -0
  7. package/dist/SchemaDefinition.d.ts.map +1 -0
  8. package/dist/SchemaDefinition.js +184 -0
  9. package/dist/SchemaDefinition.js.map +1 -0
  10. package/dist/SchemaDerivation.d.ts +16 -0
  11. package/dist/SchemaDerivation.d.ts.map +1 -0
  12. package/dist/SchemaDerivation.js +31 -0
  13. package/dist/SchemaDerivation.js.map +1 -0
  14. package/dist/{schema/SchemaView.d.ts → SchemaView.d.ts} +9 -9
  15. package/dist/SchemaView.d.ts.map +1 -0
  16. package/dist/{schema/SchemaView.js.map → SchemaView.js.map} +1 -1
  17. package/dist/axis/Axis.d.ts +2 -2
  18. package/dist/axis/Axis.d.ts.map +1 -1
  19. package/dist/axis/boundary/Boundaries.d.ts +13 -12
  20. package/dist/axis/boundary/Boundaries.d.ts.map +1 -1
  21. package/dist/axis/boundary/Boundaries.js +18 -24
  22. package/dist/axis/boundary/Boundaries.js.map +1 -1
  23. package/dist/axis/boundary/Boundary.d.ts +3 -1
  24. package/dist/axis/boundary/Boundary.d.ts.map +1 -1
  25. package/dist/axis/boundary/Boundary.js +16 -7
  26. package/dist/axis/boundary/Boundary.js.map +1 -1
  27. package/dist/axis/boundary/BoundaryAxis.js +4 -4
  28. package/dist/axis/boundary/BoundaryAxis.js.map +1 -1
  29. package/dist/axis/lifecycle/Clock.d.ts +1 -1
  30. package/dist/axis/lifecycle/Clock.d.ts.map +1 -1
  31. package/dist/axis/lifecycle/Clock.js +1 -1
  32. package/dist/axis/lifecycle/Clock.js.map +1 -1
  33. package/dist/axis/lifecycle/Generators.d.ts +6 -14
  34. package/dist/axis/lifecycle/Generators.d.ts.map +1 -1
  35. package/dist/axis/lifecycle/Generators.js +10 -28
  36. package/dist/axis/lifecycle/Generators.js.map +1 -1
  37. package/dist/axis/lifecycle/LifecycleAxis.js +11 -6
  38. package/dist/axis/lifecycle/LifecycleAxis.js.map +1 -1
  39. package/dist/axis/lifecycle/apply.d.ts +14 -5
  40. package/dist/axis/lifecycle/apply.d.ts.map +1 -1
  41. package/dist/axis/lifecycle/apply.js +26 -10
  42. package/dist/axis/lifecycle/apply.js.map +1 -1
  43. package/dist/axis/role/Relation.d.ts +3 -2
  44. package/dist/axis/role/Relation.d.ts.map +1 -1
  45. package/dist/axis/role/Relation.js +6 -5
  46. package/dist/axis/role/Relation.js.map +1 -1
  47. package/dist/axis/role/Role.d.ts +6 -6
  48. package/dist/axis/role/Role.d.ts.map +1 -1
  49. package/dist/axis/role/Role.js +13 -17
  50. package/dist/axis/role/Role.js.map +1 -1
  51. package/dist/axis/role/RoleAxis.d.ts +1 -1
  52. package/dist/axis/role/RoleAxis.d.ts.map +1 -1
  53. package/dist/axis/role/RoleAxis.js +28 -37
  54. package/dist/axis/role/RoleAxis.js.map +1 -1
  55. package/dist/axis/shape/Formats.d.ts +8 -5
  56. package/dist/axis/shape/Formats.d.ts.map +1 -1
  57. package/dist/axis/shape/Formats.js +8 -9
  58. package/dist/axis/shape/Formats.js.map +1 -1
  59. package/dist/axis/shape/Shape.d.ts +5 -3
  60. package/dist/axis/shape/Shape.d.ts.map +1 -1
  61. package/dist/axis/shape/Shape.js +13 -13
  62. package/dist/axis/shape/Shape.js.map +1 -1
  63. package/dist/entity/EntityAdapterSet.d.ts +22 -0
  64. package/dist/entity/EntityAdapterSet.d.ts.map +1 -0
  65. package/dist/entity/EntityAdapterSet.js +63 -0
  66. package/dist/entity/EntityAdapterSet.js.map +1 -0
  67. package/dist/entity/EntityAdapters.d.ts +5 -0
  68. package/dist/entity/EntityAdapters.d.ts.map +1 -0
  69. package/dist/entity/EntityAdapters.js +2 -0
  70. package/dist/entity/EntityAdapters.js.map +1 -0
  71. package/dist/{EntityDeclarations.d.ts → entity/EntityDeclarations.d.ts} +2 -7
  72. package/dist/entity/EntityDeclarations.d.ts.map +1 -0
  73. package/dist/entity/EntityDeclarations.js.map +1 -0
  74. package/dist/entity.d.ts +8 -3
  75. package/dist/entity.d.ts.map +1 -1
  76. package/dist/entity.js +6 -1
  77. package/dist/entity.js.map +1 -1
  78. package/dist/{fields → field}/Field.d.ts +8 -9
  79. package/dist/field/Field.d.ts.map +1 -0
  80. package/dist/field/Field.js +35 -0
  81. package/dist/field/Field.js.map +1 -0
  82. package/dist/field/FieldSet.d.ts +22 -0
  83. package/dist/field/FieldSet.d.ts.map +1 -0
  84. package/dist/field/FieldSet.js +58 -0
  85. package/dist/field/FieldSet.js.map +1 -0
  86. package/dist/index.d.ts +24 -28
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +17 -21
  89. package/dist/index.js.map +1 -1
  90. package/dist/lib/Registry.d.ts +12 -0
  91. package/dist/lib/Registry.d.ts.map +1 -0
  92. package/dist/lib/Registry.js +29 -0
  93. package/dist/lib/Registry.js.map +1 -0
  94. package/dist/{utils.d.ts → lib/utils.d.ts} +1 -0
  95. package/dist/lib/utils.d.ts.map +1 -0
  96. package/dist/{utils.js → lib/utils.js} +1 -0
  97. package/dist/lib/utils.js.map +1 -0
  98. package/dist/projection/Cases.d.ts +39 -0
  99. package/dist/projection/Cases.d.ts.map +1 -0
  100. package/dist/projection/Cases.js +146 -0
  101. package/dist/projection/Cases.js.map +1 -0
  102. package/dist/projection/Visibility.d.ts +2 -1
  103. package/dist/projection/Visibility.d.ts.map +1 -1
  104. package/dist/projection/Visibility.js +1 -0
  105. package/dist/projection/Visibility.js.map +1 -1
  106. package/dist/{card → projection/card}/Bundle.d.ts +1 -1
  107. package/dist/projection/card/Bundle.d.ts.map +1 -0
  108. package/dist/{card → projection/card}/Bundle.js +7 -7
  109. package/dist/projection/card/Bundle.js.map +1 -0
  110. package/dist/projection/card/Card.d.ts +21 -0
  111. package/dist/projection/card/Card.d.ts.map +1 -0
  112. package/dist/{card → projection/card}/Card.js +119 -58
  113. package/dist/projection/card/Card.js.map +1 -0
  114. package/dist/{card → projection/card}/Descriptor.d.ts +7 -7
  115. package/dist/projection/card/Descriptor.d.ts.map +1 -0
  116. package/dist/projection/card/Descriptor.js.map +1 -0
  117. package/dist/projection/card/admission.d.ts +20 -0
  118. package/dist/projection/card/admission.d.ts.map +1 -0
  119. package/dist/projection/card/admission.js +27 -0
  120. package/dist/projection/card/admission.js.map +1 -0
  121. package/dist/{card → projection/card}/diff.d.ts +3 -3
  122. package/dist/projection/card/diff.d.ts.map +1 -0
  123. package/dist/{card → projection/card}/diff.js.map +1 -1
  124. package/dist/{judge/result.d.ts → validation.d.ts} +1 -1
  125. package/dist/validation.d.ts.map +1 -0
  126. package/dist/validation.js +2 -0
  127. package/dist/validation.js.map +1 -0
  128. package/dist/validator/AdapterFieldValidator.d.ts +14 -0
  129. package/dist/validator/AdapterFieldValidator.d.ts.map +1 -0
  130. package/dist/validator/AdapterFieldValidator.js +36 -0
  131. package/dist/validator/AdapterFieldValidator.js.map +1 -0
  132. package/dist/validator/FieldDeclarationValidator.d.ts +9 -0
  133. package/dist/validator/FieldDeclarationValidator.d.ts.map +1 -0
  134. package/dist/{judge/FieldJudge.js → validator/FieldDeclarationValidator.js} +13 -13
  135. package/dist/validator/FieldDeclarationValidator.js.map +1 -0
  136. package/dist/validator/FieldValueValidator.d.ts +13 -0
  137. package/dist/validator/FieldValueValidator.d.ts.map +1 -0
  138. package/dist/{judge/ValueJudge.js → validator/FieldValueValidator.js} +14 -11
  139. package/dist/validator/FieldValueValidator.js.map +1 -0
  140. package/dist/{judge/RowRefusal.d.ts → validator/InputRefusal.d.ts} +3 -4
  141. package/dist/validator/InputRefusal.d.ts.map +1 -0
  142. package/dist/{judge/RowRefusal.js → validator/InputRefusal.js} +3 -3
  143. package/dist/validator/InputRefusal.js.map +1 -0
  144. package/dist/validator/InputValidator.d.ts +15 -0
  145. package/dist/validator/InputValidator.d.ts.map +1 -0
  146. package/dist/{judge/RowJudge.js → validator/InputValidator.js} +21 -17
  147. package/dist/validator/InputValidator.js.map +1 -0
  148. package/dist/vocabulary/bool.d.ts +6 -1
  149. package/dist/vocabulary/bool.d.ts.map +1 -1
  150. package/dist/vocabulary/bool.js +6 -1
  151. package/dist/vocabulary/bool.js.map +1 -1
  152. package/dist/vocabulary/created.d.ts +6 -1
  153. package/dist/vocabulary/created.d.ts.map +1 -1
  154. package/dist/vocabulary/created.js +6 -1
  155. package/dist/vocabulary/created.js.map +1 -1
  156. package/dist/vocabulary/date.d.ts +6 -1
  157. package/dist/vocabulary/date.d.ts.map +1 -1
  158. package/dist/vocabulary/date.js +6 -1
  159. package/dist/vocabulary/date.js.map +1 -1
  160. package/dist/vocabulary/email.d.ts +6 -1
  161. package/dist/vocabulary/email.d.ts.map +1 -1
  162. package/dist/vocabulary/email.js +5 -0
  163. package/dist/vocabulary/email.js.map +1 -1
  164. package/dist/vocabulary/immutable.d.ts +6 -1
  165. package/dist/vocabulary/immutable.d.ts.map +1 -1
  166. package/dist/vocabulary/immutable.js +5 -0
  167. package/dist/vocabulary/immutable.js.map +1 -1
  168. package/dist/vocabulary/indexed.d.ts +6 -1
  169. package/dist/vocabulary/indexed.d.ts.map +1 -1
  170. package/dist/vocabulary/indexed.js +8 -1
  171. package/dist/vocabulary/indexed.js.map +1 -1
  172. package/dist/vocabulary/json.d.ts +2 -2
  173. package/dist/vocabulary/json.d.ts.map +1 -1
  174. package/dist/vocabulary/json.js +9 -4
  175. package/dist/vocabulary/json.js.map +1 -1
  176. package/dist/vocabulary/list.d.ts +6 -1
  177. package/dist/vocabulary/list.d.ts.map +1 -1
  178. package/dist/vocabulary/list.js +6 -1
  179. package/dist/vocabulary/list.js.map +1 -1
  180. package/dist/vocabulary/many.d.ts +6 -1
  181. package/dist/vocabulary/many.d.ts.map +1 -1
  182. package/dist/vocabulary/many.js +6 -1
  183. package/dist/vocabulary/many.js.map +1 -1
  184. package/dist/vocabulary/nullable.d.ts +6 -1
  185. package/dist/vocabulary/nullable.d.ts.map +1 -1
  186. package/dist/vocabulary/nullable.js +7 -2
  187. package/dist/vocabulary/nullable.js.map +1 -1
  188. package/dist/vocabulary/number.d.ts +6 -1
  189. package/dist/vocabulary/number.d.ts.map +1 -1
  190. package/dist/vocabulary/number.js +11 -2
  191. package/dist/vocabulary/number.js.map +1 -1
  192. package/dist/vocabulary/oneOf.d.ts +1 -1
  193. package/dist/vocabulary/oneOf.d.ts.map +1 -1
  194. package/dist/vocabulary/oneOf.js +6 -1
  195. package/dist/vocabulary/oneOf.js.map +1 -1
  196. package/dist/vocabulary/optional.d.ts +6 -1
  197. package/dist/vocabulary/optional.d.ts.map +1 -1
  198. package/dist/vocabulary/optional.js +10 -3
  199. package/dist/vocabulary/optional.js.map +1 -1
  200. package/dist/vocabulary/primary.d.ts +1 -1
  201. package/dist/vocabulary/primary.d.ts.map +1 -1
  202. package/dist/vocabulary/primary.js +10 -5
  203. package/dist/vocabulary/primary.js.map +1 -1
  204. package/dist/vocabulary/readOnly.d.ts +6 -1
  205. package/dist/vocabulary/readOnly.d.ts.map +1 -1
  206. package/dist/vocabulary/readOnly.js +5 -0
  207. package/dist/vocabulary/readOnly.js.map +1 -1
  208. package/dist/vocabulary/ref.d.ts +6 -1
  209. package/dist/vocabulary/ref.d.ts.map +1 -1
  210. package/dist/vocabulary/ref.js +6 -1
  211. package/dist/vocabulary/ref.js.map +1 -1
  212. package/dist/vocabulary/text.d.ts +6 -1
  213. package/dist/vocabulary/text.d.ts.map +1 -1
  214. package/dist/vocabulary/text.js +13 -2
  215. package/dist/vocabulary/text.js.map +1 -1
  216. package/dist/vocabulary/unique.d.ts +6 -1
  217. package/dist/vocabulary/unique.d.ts.map +1 -1
  218. package/dist/vocabulary/unique.js +8 -4
  219. package/dist/vocabulary/unique.js.map +1 -1
  220. package/dist/vocabulary/updated.d.ts +6 -1
  221. package/dist/vocabulary/updated.d.ts.map +1 -1
  222. package/dist/vocabulary/updated.js +5 -0
  223. package/dist/vocabulary/updated.js.map +1 -1
  224. package/dist/vocabulary/url.d.ts +6 -1
  225. package/dist/vocabulary/url.d.ts.map +1 -1
  226. package/dist/vocabulary/url.js +5 -0
  227. package/dist/vocabulary/url.js.map +1 -1
  228. package/dist/vocabulary/vocabulary.d.ts +6 -1
  229. package/dist/vocabulary/vocabulary.d.ts.map +1 -1
  230. package/dist/vocabulary/vocabulary.js +21 -11
  231. package/dist/vocabulary/vocabulary.js.map +1 -1
  232. package/dist/vocabulary/writeOnly.d.ts +6 -1
  233. package/dist/vocabulary/writeOnly.d.ts.map +1 -1
  234. package/dist/vocabulary/writeOnly.js +5 -0
  235. package/dist/vocabulary/writeOnly.js.map +1 -1
  236. package/package.json +1 -1
  237. package/src/Schema.ts +208 -0
  238. package/src/SchemaDefinition.ts +257 -0
  239. package/src/SchemaDerivation.ts +44 -0
  240. package/src/{schema/SchemaView.ts → SchemaView.ts} +9 -9
  241. package/src/axis/Axis.ts +2 -2
  242. package/src/axis/boundary/Boundaries.ts +25 -32
  243. package/src/axis/boundary/Boundary.ts +23 -10
  244. package/src/axis/boundary/BoundaryAxis.ts +4 -4
  245. package/src/axis/lifecycle/Clock.ts +1 -1
  246. package/src/axis/lifecycle/Generators.ts +12 -29
  247. package/src/axis/lifecycle/LifecycleAxis.ts +12 -7
  248. package/src/axis/lifecycle/apply.ts +30 -15
  249. package/src/axis/role/Relation.ts +6 -5
  250. package/src/axis/role/Role.ts +16 -20
  251. package/src/axis/role/RoleAxis.ts +28 -41
  252. package/src/axis/shape/Formats.ts +9 -11
  253. package/src/axis/shape/Shape.ts +18 -18
  254. package/src/entity/EntityAdapterSet.ts +81 -0
  255. package/src/entity/EntityAdapters.ts +8 -0
  256. package/src/entity/EntityDeclarations.ts +16 -0
  257. package/src/entity.ts +8 -3
  258. package/src/field/Field.ts +61 -0
  259. package/src/field/FieldSet.ts +75 -0
  260. package/src/index.ts +50 -28
  261. package/src/lib/Registry.ts +37 -0
  262. package/src/{utils.ts → lib/utils.ts} +3 -0
  263. package/src/projection/Cases.ts +176 -0
  264. package/src/projection/Visibility.ts +6 -2
  265. package/src/{card → projection/card}/Bundle.ts +9 -9
  266. package/src/projection/card/Card.ts +342 -0
  267. package/src/{card → projection/card}/Descriptor.ts +7 -7
  268. package/src/projection/card/admission.ts +40 -0
  269. package/src/{card → projection/card}/diff.ts +3 -3
  270. package/src/validator/AdapterFieldValidator.ts +40 -0
  271. package/src/{judge/FieldJudge.ts → validator/FieldDeclarationValidator.ts} +15 -15
  272. package/src/{judge/ValueJudge.ts → validator/FieldValueValidator.ts} +18 -13
  273. package/src/{judge/RowRefusal.ts → validator/InputRefusal.ts} +2 -4
  274. package/src/{judge/RowJudge.ts → validator/InputValidator.ts} +27 -20
  275. package/src/vocabulary/bool.ts +8 -2
  276. package/src/vocabulary/created.ts +7 -2
  277. package/src/vocabulary/date.ts +6 -1
  278. package/src/vocabulary/email.ts +6 -1
  279. package/src/vocabulary/immutable.ts +12 -4
  280. package/src/vocabulary/indexed.ts +9 -2
  281. package/src/vocabulary/json.ts +13 -6
  282. package/src/vocabulary/list.ts +10 -2
  283. package/src/vocabulary/many.ts +9 -2
  284. package/src/vocabulary/nullable.ts +13 -5
  285. package/src/vocabulary/number.ts +13 -3
  286. package/src/vocabulary/oneOf.ts +11 -3
  287. package/src/vocabulary/optional.ts +16 -6
  288. package/src/vocabulary/primary.ts +10 -5
  289. package/src/vocabulary/readOnly.ts +12 -4
  290. package/src/vocabulary/ref.ts +10 -2
  291. package/src/vocabulary/text.ts +15 -3
  292. package/src/vocabulary/unique.ts +10 -9
  293. package/src/vocabulary/updated.ts +6 -1
  294. package/src/vocabulary/url.ts +6 -1
  295. package/src/vocabulary/vocabulary.ts +21 -12
  296. package/src/vocabulary/writeOnly.ts +12 -4
  297. package/dist/EntityAdapters.d.ts +0 -28
  298. package/dist/EntityAdapters.d.ts.map +0 -1
  299. package/dist/EntityAdapters.js +0 -75
  300. package/dist/EntityAdapters.js.map +0 -1
  301. package/dist/EntityDeclarations.d.ts.map +0 -1
  302. package/dist/EntityDeclarations.js.map +0 -1
  303. package/dist/card/Bundle.d.ts.map +0 -1
  304. package/dist/card/Bundle.js.map +0 -1
  305. package/dist/card/Card.d.ts +0 -27
  306. package/dist/card/Card.d.ts.map +0 -1
  307. package/dist/card/Card.js.map +0 -1
  308. package/dist/card/Descriptor.d.ts.map +0 -1
  309. package/dist/card/Descriptor.js.map +0 -1
  310. package/dist/card/EntityTypeSource.d.ts +0 -12
  311. package/dist/card/EntityTypeSource.d.ts.map +0 -1
  312. package/dist/card/EntityTypeSource.js +0 -78
  313. package/dist/card/EntityTypeSource.js.map +0 -1
  314. package/dist/card/FacadeTypeSource.d.ts +0 -19
  315. package/dist/card/FacadeTypeSource.d.ts.map +0 -1
  316. package/dist/card/FacadeTypeSource.js +0 -40
  317. package/dist/card/FacadeTypeSource.js.map +0 -1
  318. package/dist/card/admission.d.ts +0 -9
  319. package/dist/card/admission.d.ts.map +0 -1
  320. package/dist/card/admission.js +0 -16
  321. package/dist/card/admission.js.map +0 -1
  322. package/dist/card/diff.d.ts.map +0 -1
  323. package/dist/constraint/FieldGroup.d.ts +0 -21
  324. package/dist/constraint/FieldGroup.d.ts.map +0 -1
  325. package/dist/constraint/FieldGroup.js +0 -65
  326. package/dist/constraint/FieldGroup.js.map +0 -1
  327. package/dist/constraint/Unique.d.ts +0 -4
  328. package/dist/constraint/Unique.d.ts.map +0 -1
  329. package/dist/constraint/Unique.js +0 -4
  330. package/dist/constraint/Unique.js.map +0 -1
  331. package/dist/fields/Field.d.ts.map +0 -1
  332. package/dist/fields/Field.js +0 -52
  333. package/dist/fields/Field.js.map +0 -1
  334. package/dist/fields/FieldSet.d.ts +0 -28
  335. package/dist/fields/FieldSet.d.ts.map +0 -1
  336. package/dist/fields/FieldSet.js +0 -55
  337. package/dist/fields/FieldSet.js.map +0 -1
  338. package/dist/judge/Cases.d.ts +0 -50
  339. package/dist/judge/Cases.d.ts.map +0 -1
  340. package/dist/judge/Cases.js +0 -108
  341. package/dist/judge/Cases.js.map +0 -1
  342. package/dist/judge/FieldJudge.d.ts +0 -9
  343. package/dist/judge/FieldJudge.d.ts.map +0 -1
  344. package/dist/judge/FieldJudge.js.map +0 -1
  345. package/dist/judge/RowJudge.d.ts +0 -12
  346. package/dist/judge/RowJudge.d.ts.map +0 -1
  347. package/dist/judge/RowJudge.js.map +0 -1
  348. package/dist/judge/RowRefusal.d.ts.map +0 -1
  349. package/dist/judge/RowRefusal.js.map +0 -1
  350. package/dist/judge/ValueForm.d.ts +0 -3
  351. package/dist/judge/ValueForm.d.ts.map +0 -1
  352. package/dist/judge/ValueForm.js +0 -3
  353. package/dist/judge/ValueForm.js.map +0 -1
  354. package/dist/judge/ValueJudge.d.ts +0 -12
  355. package/dist/judge/ValueJudge.d.ts.map +0 -1
  356. package/dist/judge/ValueJudge.js.map +0 -1
  357. package/dist/judge/options.d.ts +0 -4
  358. package/dist/judge/options.d.ts.map +0 -1
  359. package/dist/judge/options.js +0 -2
  360. package/dist/judge/options.js.map +0 -1
  361. package/dist/judge/result.d.ts.map +0 -1
  362. package/dist/judge/result.js +0 -2
  363. package/dist/judge/result.js.map +0 -1
  364. package/dist/projection/SchemaOrCard.d.ts +0 -7
  365. package/dist/projection/SchemaOrCard.d.ts.map +0 -1
  366. package/dist/projection/SchemaOrCard.js +0 -11
  367. package/dist/projection/SchemaOrCard.js.map +0 -1
  368. package/dist/schema/Schema.d.ts.map +0 -1
  369. package/dist/schema/Schema.js +0 -150
  370. package/dist/schema/Schema.js.map +0 -1
  371. package/dist/schema/SchemaDefinition.d.ts +0 -60
  372. package/dist/schema/SchemaDefinition.d.ts.map +0 -1
  373. package/dist/schema/SchemaDefinition.js +0 -85
  374. package/dist/schema/SchemaDefinition.js.map +0 -1
  375. package/dist/schema/SchemaDerivation.d.ts +0 -34
  376. package/dist/schema/SchemaDerivation.d.ts.map +0 -1
  377. package/dist/schema/SchemaDerivation.js +0 -46
  378. package/dist/schema/SchemaDerivation.js.map +0 -1
  379. package/dist/schema/SchemaView.d.ts.map +0 -1
  380. package/dist/utils.d.ts.map +0 -1
  381. package/dist/utils.js.map +0 -1
  382. package/src/EntityAdapters.ts +0 -100
  383. package/src/EntityDeclarations.ts +0 -19
  384. package/src/card/Card.ts +0 -256
  385. package/src/card/EntityTypeSource.ts +0 -90
  386. package/src/card/FacadeTypeSource.ts +0 -55
  387. package/src/card/admission.ts +0 -25
  388. package/src/constraint/FieldGroup.ts +0 -91
  389. package/src/constraint/Unique.ts +0 -3
  390. package/src/fields/Field.ts +0 -80
  391. package/src/fields/FieldSet.ts +0 -62
  392. package/src/judge/Cases.ts +0 -139
  393. package/src/judge/ValueForm.ts +0 -7
  394. package/src/judge/options.ts +0 -3
  395. package/src/projection/SchemaOrCard.ts +0 -18
  396. package/src/schema/Schema.ts +0 -197
  397. package/src/schema/SchemaDefinition.ts +0 -120
  398. package/src/schema/SchemaDerivation.ts +0 -57
  399. /package/dist/{schema/SchemaView.js → SchemaView.js} +0 -0
  400. /package/dist/{EntityDeclarations.js → entity/EntityDeclarations.js} +0 -0
  401. /package/dist/{card → projection/card}/Descriptor.js +0 -0
  402. /package/dist/{card → projection/card}/diff.js +0 -0
  403. /package/src/{judge/result.ts → validation.ts} +0 -0
@@ -0,0 +1,36 @@
1
+ import { Validator } from '@cfworker/json-schema';
2
+ import { isObject } from '../lib/utils.js';
3
+ /**
4
+ * The format is DATA, not a TypeScript interface: an interface is erased before a JS
5
+ * caller, a config or a card from another language could be measured against it.
6
+ */
7
+ export class AdapterFieldValidator {
8
+ validator;
9
+ constructor(validator) {
10
+ this.validator = validator;
11
+ }
12
+ /** Compiled once, at the adapter's own module load. */
13
+ static of(format) {
14
+ return new AdapterFieldValidator(new Validator(format, '2020-12', true));
15
+ }
16
+ /** `Post.adapters.sql.body.columnType: Property "postgre" does not match …` */
17
+ assert(entries, path) {
18
+ if (entries === undefined)
19
+ return;
20
+ if (!isObject(entries)) {
21
+ throw new Error(`${path}: expected an object keyed by field name, got ${typeof entries}.`);
22
+ }
23
+ for (const [field, entry] of Object.entries(entries)) {
24
+ const verdict = this.validator.validate(entry);
25
+ if (verdict.valid)
26
+ continue;
27
+ // The engine reports outermost first and ends on `False boolean schema`, which names
28
+ // nothing. The last unit above that one is the one carrying the offending key.
29
+ const units = verdict.errors.filter((unit) => unit.keyword !== 'false');
30
+ const failure = units[units.length - 1] ?? verdict.errors[0];
31
+ const nested = (failure?.instanceLocation ?? '#').slice(1).replaceAll('/', '.');
32
+ throw new Error(`${path}.${field}${nested}: ${failure?.error ?? 'does not match the format'}`);
33
+ }
34
+ }
35
+ }
36
+ //# sourceMappingURL=AdapterFieldValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdapterFieldValidator.js","sourceRoot":"","sources":["../../src/validator/AdapterFieldValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IACK,SAAS;IAA9C,YAAqC,SAAoB;yBAApB,SAAS;IAAc,CAAC;IAE7D,uDAAuD;IACvD,MAAM,CAAC,EAAE,CAAC,MAAa;QACrB,OAAO,IAAI,qBAAqB,CAAC,IAAI,SAAS,CAAC,MAAgB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,+EAA+E;IAC/E,MAAM,CAAC,OAAgB,EAAE,IAAY;QACnC,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QAElC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,iDAAiD,OAAO,OAAO,GAAG,CAC1E,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,OAAO,CAAC,KAAK;gBAAE,SAAS;YAE5B,qFAAqF;YACrF,+EAA+E;YAC/E,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;YACxE,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,gBAAgB,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAEhF,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,KAAK,GAAG,MAAM,KAAK,OAAO,EAAE,KAAK,IAAI,2BAA2B,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { Field } from '../field/Field.js';
2
+ import type { ValidationResult } from '../validation.js';
3
+ export declare class FieldDeclarationValidator {
4
+ private readonly declaration;
5
+ private constructor();
6
+ static of(declaration: unknown): FieldDeclarationValidator;
7
+ get verdict(): ValidationResult<Field>;
8
+ }
9
+ //# sourceMappingURL=FieldDeclarationValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldDeclarationValidator.d.ts","sourceRoot":"","sources":["../../src/validator/FieldDeclarationValidator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE1E,qBAAa,yBAAyB;IAChB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAAhD,OAAO,eAAsD;IAE7D,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,GAAG,yBAAyB,CAEzD;IAED,IAAI,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,CA8CrC;CACF"}
@@ -1,13 +1,13 @@
1
- import { EXTENSION_AXES } from "../axis/Axis.js";
2
- import { Anatomy } from "../axis/shape/Shape.js";
3
- import { isObject } from "./ValueForm.js";
4
- export class FieldJudge {
1
+ import { EXTENSION_AXES } from '../axis/Axis.js';
2
+ import { Shapes } from '../axis/shape/Shape.js';
3
+ import { isObject } from '../lib/utils.js';
4
+ export class FieldDeclarationValidator {
5
5
  declaration;
6
6
  constructor(declaration) {
7
7
  this.declaration = declaration;
8
8
  }
9
9
  static of(declaration) {
10
- return new FieldJudge(declaration);
10
+ return new FieldDeclarationValidator(declaration);
11
11
  }
12
12
  get verdict() {
13
13
  const declaration = this.declaration;
@@ -16,34 +16,34 @@ export class FieldJudge {
16
16
  success: false,
17
17
  errors: [
18
18
  {
19
- path: ".",
19
+ path: '.',
20
20
  message: `Expected an object — got ${JSON.stringify(declaration)}`,
21
21
  },
22
22
  ],
23
23
  };
24
24
  }
25
25
  const errors = [];
26
- if (!Anatomy.is(declaration.shape)) {
26
+ if (!Shapes.is(declaration.shape)) {
27
27
  errors.push({
28
- path: "shape",
28
+ path: 'shape',
29
29
  message: `Every field states a shape — got ${JSON.stringify(declaration.shape)}`,
30
30
  });
31
31
  }
32
32
  for (const axis of EXTENSION_AXES) {
33
33
  const declared = declaration[axis.slot];
34
34
  if (declared !== undefined)
35
- axis.judge(declared, errors);
35
+ axis.validator(declared, errors);
36
36
  }
37
37
  if (declaration.meta !== undefined) {
38
38
  if (!isObject(declaration.meta)) {
39
39
  errors.push({
40
- path: "meta",
40
+ path: 'meta',
41
41
  message: `Expected an object — got ${JSON.stringify(declaration.meta)}`,
42
42
  });
43
43
  }
44
44
  else if (declaration.meta.description !== undefined &&
45
- typeof declaration.meta.description !== "string") {
46
- errors.push({ path: "meta.description", message: "Expected a string" });
45
+ typeof declaration.meta.description !== 'string') {
46
+ errors.push({ path: 'meta.description', message: 'Expected a string' });
47
47
  }
48
48
  }
49
49
  return errors.length
@@ -51,4 +51,4 @@ export class FieldJudge {
51
51
  : { success: true, data: declaration };
52
52
  }
53
53
  }
54
- //# sourceMappingURL=FieldJudge.js.map
54
+ //# sourceMappingURL=FieldDeclarationValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldDeclarationValidator.js","sourceRoot":"","sources":["../../src/validator/FieldDeclarationValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,MAAM,OAAO,yBAAyB;IACC,WAAW;IAAhD,YAAqC,WAAoB;2BAApB,WAAW;IAAY,CAAC;IAE7D,MAAM,CAAC,EAAE,CAAC,WAAoB;QAC5B,OAAO,IAAI,yBAAyB,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,OAAO;QACT,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAErC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,GAAG;wBACT,OAAO,EAAE,4BAA4B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;qBACnE;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAsB,EAAE,CAAC;QAErC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,oCAAoC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;aACjF,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,QAAQ,KAAK,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,4BAA4B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;iBACxE,CAAC,CAAC;YACL,CAAC;iBAAM,IACL,WAAW,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS;gBAC1C,OAAO,WAAW,CAAC,IAAI,CAAC,WAAW,KAAK,QAAQ,EAChD,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC,MAAM;YAClB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;YAC5B,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAA+B,EAAE,CAAC;IAC/D,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { Field } from '../field/Field.js';
2
+ import type { Checked } from '../validation.js';
3
+ export declare class FieldValueValidator {
4
+ private readonly field;
5
+ private static readonly plans;
6
+ private constructor();
7
+ /** The shape is compiled once and reused, not rebuilt per value. */
8
+ static of(field: Field): FieldValueValidator;
9
+ validate(value: unknown): Checked;
10
+ private static planFor;
11
+ private static customFormatOf;
12
+ }
13
+ //# sourceMappingURL=FieldValueValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldValueValidator.d.ts","sourceRoot":"","sources":["../../src/validator/FieldValueValidator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAQhD,qBAAa,mBAAmB;IAGV,OAAO,CAAC,QAAQ,CAAC,KAAK;IAF1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAoC;IAEjE,OAAO,eAA8C;IAErD,oEAAoE;IACpE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,mBAAmB,CAE3C;IAED,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA2BhC;IAED,OAAO,CAAC,MAAM,CAAC,OAAO;IAetB,OAAO,CAAC,MAAM,CAAC,cAAc;CAU9B"}
@@ -1,22 +1,25 @@
1
1
  import { Validator, format as engineFormats } from '@cfworker/json-schema';
2
2
  import { Formats } from '../axis/shape/Formats.js';
3
- import { Anatomy } from '../axis/shape/Shape.js';
4
- export class ValueJudge {
3
+ import { Shapes } from '../axis/shape/Shape.js';
4
+ export class FieldValueValidator {
5
5
  field;
6
6
  static plans = new WeakMap();
7
7
  constructor(field) {
8
8
  this.field = field;
9
9
  }
10
+ /** The shape is compiled once and reused, not rebuilt per value. */
10
11
  static of(field) {
11
- return new ValueJudge(field);
12
+ return new FieldValueValidator(field);
12
13
  }
13
- check(value) {
14
+ validate(value) {
14
15
  const shape = this.field.shape;
15
- const base = Anatomy.of(shape).base;
16
+ const base = Shapes.of(shape).base;
16
17
  if (value !== null) {
17
18
  if (base?.type === 'object' && !base.properties)
18
19
  return { value };
19
- if (base?.type === 'string' && base.format === 'date-time' && value instanceof Date) {
20
+ if (base?.type === 'string' &&
21
+ base.format === 'date-time' &&
22
+ value instanceof Date) {
20
23
  return Number.isNaN(value.getTime()) ? { error: 'Invalid date' } : { value };
21
24
  }
22
25
  if ((base?.type === 'number' || base?.type === 'integer') &&
@@ -25,7 +28,7 @@ export class ValueJudge {
25
28
  return { error: 'Expected a number' };
26
29
  }
27
30
  }
28
- const plan = ValueJudge.planFor(shape);
31
+ const plan = FieldValueValidator.planFor(shape);
29
32
  const result = plan.validator.validate(value);
30
33
  if (!result.valid)
31
34
  return { error: result.errors[0]?.error ?? 'Invalid value' };
@@ -37,7 +40,7 @@ export class ValueJudge {
37
40
  static planFor(shape) {
38
41
  let plan = this.plans.get(shape);
39
42
  if (!plan) {
40
- const base = Anatomy.of(shape).base;
43
+ const base = Shapes.of(shape).base;
41
44
  const formatName = base?.type === 'string' ? base.format : undefined;
42
45
  plan = {
43
46
  validator: new Validator(shape, '2020-12', true),
@@ -49,12 +52,12 @@ export class ValueJudge {
49
52
  return plan;
50
53
  }
51
54
  static customFormatOf(name) {
52
- const custom = Formats.resolve(name);
55
+ const custom = Formats.find(name);
53
56
  if (!custom && !(name in engineFormats)) {
54
57
  throw new Error(`Unknown format: '${name}'. Register it with Formats.register('${name}', …) — ` +
55
- `the engine judges ${Object.keys(engineFormats).length} formats natively and this is not one of them.`);
58
+ `the engine validates ${Object.keys(engineFormats).length} formats natively and this is not one of them.`);
56
59
  }
57
60
  return custom;
58
61
  }
59
62
  }
60
- //# sourceMappingURL=ValueJudge.js.map
63
+ //# sourceMappingURL=FieldValueValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldValueValidator.js","sourceRoot":"","sources":["../../src/validator/FieldValueValidator.ts"],"names":[],"mappings":"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"}
@@ -3,15 +3,14 @@
3
3
  *
4
4
  * A value refused by its own shape carries the engine's message and a decoder refused by
5
5
  * user code carries that code's; neither is structural and neither belongs here. These
6
- * five are `RowJudge`'s own, and a table of cases enumerates them instead of reading the
6
+ * five are `InputValidator`'s own, and a table of cases enumerates them instead of reading the
7
7
  * text of a function — which a minifier rewrites without a word.
8
8
  */
9
- export declare const RowRefusal: {
9
+ export declare const InputRefusal: {
10
10
  readonly notAnObject: 'Expected an object';
11
11
  readonly unknownField: 'Unknown field';
12
12
  readonly required: 'Required';
13
13
  readonly readOnly: 'Read-only';
14
14
  readonly immutable: 'Immutable';
15
15
  };
16
- export type RowRefusal = (typeof RowRefusal)[keyof typeof RowRefusal];
17
- //# sourceMappingURL=RowRefusal.d.ts.map
16
+ //# sourceMappingURL=InputRefusal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputRefusal.d.ts","sourceRoot":"","sources":["../../src/validator/InputRefusal.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY;aACvB,WAAW,EAAE,oBAAoB;aACjC,YAAY,EAAE,eAAe;aAC7B,QAAQ,EAAE,UAAU;aACpB,QAAQ,EAAE,WAAW;aACrB,SAAS,EAAE,WAAW;CACd,CAAC"}
@@ -3,14 +3,14 @@
3
3
  *
4
4
  * A value refused by its own shape carries the engine's message and a decoder refused by
5
5
  * user code carries that code's; neither is structural and neither belongs here. These
6
- * five are `RowJudge`'s own, and a table of cases enumerates them instead of reading the
6
+ * five are `InputValidator`'s own, and a table of cases enumerates them instead of reading the
7
7
  * text of a function — which a minifier rewrites without a word.
8
8
  */
9
- export const RowRefusal = {
9
+ export const InputRefusal = {
10
10
  notAnObject: 'Expected an object',
11
11
  unknownField: 'Unknown field',
12
12
  required: 'Required',
13
13
  readOnly: 'Read-only',
14
14
  immutable: 'Immutable',
15
15
  };
16
- //# sourceMappingURL=RowRefusal.js.map
16
+ //# sourceMappingURL=InputRefusal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputRefusal.js","sourceRoot":"","sources":["../../src/validator/InputRefusal.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,WAAW,EAAE,oBAAoB;IACjC,YAAY,EAAE,eAAe;IAC7B,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,WAAW;IACrB,SAAS,EAAE,WAAW;CACd,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { Field, Fields } from '../field/Field.js';
2
+ import type { ValidationResult } from '../validation.js';
3
+ export interface ValidateOptions {
4
+ patch?: boolean;
5
+ }
6
+ export declare class InputValidator {
7
+ private readonly fields;
8
+ private readonly options;
9
+ private constructor();
10
+ static of(fields: Fields, options?: ValidateOptions): InputValidator;
11
+ onAbsent(field: Field): 'skip' | 'empty-list' | null;
12
+ /** Hands on the value it PARSED, so a handler never re-checks a row. */
13
+ validate(input: unknown): ValidationResult<Record<string, unknown>>;
14
+ }
15
+ //# sourceMappingURL=InputValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputValidator.d.ts","sourceRoot":"","sources":["../../src/validator/InputValidator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAI1E,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAF1B,OAAO,eAGH;IAEJ,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,cAAc,CAEvE;IAED,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,YAAY,GAAG,IAAI,CAKnD;IAED,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA2DlE;CACF"}
@@ -1,9 +1,9 @@
1
1
  import { Boundary } from '../axis/boundary/Boundary.js';
2
2
  import { Lifecycle } from '../axis/lifecycle/Lifecycle.js';
3
3
  import { Role } from '../axis/role/Role.js';
4
- import { ValueJudge } from './ValueJudge.js';
5
- import { RowRefusal } from './RowRefusal.js';
6
- export class RowJudge {
4
+ import { FieldValueValidator } from './FieldValueValidator.js';
5
+ import { InputRefusal } from './InputRefusal.js';
6
+ export class InputValidator {
7
7
  fields;
8
8
  options;
9
9
  constructor(fields, options) {
@@ -11,7 +11,7 @@ export class RowJudge {
11
11
  this.options = options;
12
12
  }
13
13
  static of(fields, options = {}) {
14
- return new RowJudge(fields, options);
14
+ return new InputValidator(fields, options);
15
15
  }
16
16
  onAbsent(field) {
17
17
  if (Boundary.of(field).readOnly)
@@ -22,16 +22,20 @@ export class RowJudge {
22
22
  return 'empty-list';
23
23
  return null;
24
24
  }
25
- check(input) {
25
+ /** Hands on the value it PARSED, so a handler never re-checks a row. */
26
+ validate(input) {
26
27
  if (typeof input !== 'object' || input === null) {
27
- return { success: false, errors: [{ path: '.', message: RowRefusal.notAnObject }] };
28
+ return {
29
+ success: false,
30
+ errors: [{ path: '.', message: InputRefusal.notAnObject }],
31
+ };
28
32
  }
29
33
  const data = input;
30
34
  const errors = [];
31
- const out = {};
35
+ const row = {};
32
36
  for (const key of Object.keys(data)) {
33
37
  if (!(key in this.fields)) {
34
- errors.push({ path: key, message: RowRefusal.unknownField });
38
+ errors.push({ path: key, message: InputRefusal.unknownField });
35
39
  }
36
40
  }
37
41
  for (const [key, field] of Object.entries(this.fields)) {
@@ -42,40 +46,40 @@ export class RowJudge {
42
46
  continue;
43
47
  const absence = this.onAbsent(field);
44
48
  if (absence === null) {
45
- errors.push({ path, message: RowRefusal.required });
49
+ errors.push({ path, message: InputRefusal.required });
46
50
  continue;
47
51
  }
48
52
  if (absence === 'empty-list')
49
- out[key] = [];
53
+ row[key] = [];
50
54
  continue;
51
55
  }
52
56
  const boundary = Boundary.of(field);
53
57
  if (boundary.readOnly) {
54
- errors.push({ path, message: RowRefusal.readOnly });
58
+ errors.push({ path, message: InputRefusal.readOnly });
55
59
  continue;
56
60
  }
57
61
  if (this.options.patch && Lifecycle.of(field).immutable) {
58
- errors.push({ path, message: RowRefusal.immutable });
62
+ errors.push({ path, message: InputRefusal.immutable });
59
63
  continue;
60
64
  }
61
- const checked = ValueJudge.of(field).check(value);
65
+ const checked = FieldValueValidator.of(field).validate(value);
62
66
  if ('error' in checked) {
63
67
  errors.push({ path, message: checked.error });
64
68
  continue;
65
69
  }
66
70
  if (checked.value === null) {
67
- out[key] = null;
71
+ row[key] = null;
68
72
  continue;
69
73
  }
70
74
  const decoded = boundary.decode(checked.value);
71
75
  if ('error' in decoded)
72
76
  errors.push({ path, message: decoded.error });
73
77
  else
74
- out[key] = decoded.value;
78
+ row[key] = decoded.value;
75
79
  }
76
80
  if (errors.length > 0)
77
81
  return { success: false, errors };
78
- return { success: true, data: out };
82
+ return { success: true, data: row };
79
83
  }
80
84
  }
81
- //# sourceMappingURL=RowJudge.js.map
85
+ //# sourceMappingURL=InputValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputValidator.js","sourceRoot":"","sources":["../../src/validator/InputValidator.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,9 @@
1
- import { Field } from '../fields/Field.js';
1
+ import { Field } from '../field/Field.js';
2
+ /**
3
+ * So a default is a lifecycle rule, not a value the handler remembers to set.
4
+ * FR : pour qu'un défaut soit une règle de cycle de vie, pas un oubli possible du handler.
5
+ * `bool({ default: false })`
6
+ */
2
7
  export declare function bool(opts?: {
3
8
  default?: boolean;
4
9
  description?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"bool.d.ts","sourceRoot":"","sources":["../../src/vocabulary/bool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,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,mBAAmB,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAOvF"}
@@ -1,4 +1,9 @@
1
- import { Field } from '../fields/Field.js';
1
+ import { Field } from '../field/Field.js';
2
+ /**
3
+ * So a default is a lifecycle rule, not a value the handler remembers to set.
4
+ * FR : pour qu'un défaut soit une règle de cycle de vie, pas un oubli possible du handler.
5
+ * `bool({ default: false })`
6
+ */
2
7
  export function bool(opts) {
3
8
  return new Field({
4
9
  shape: { type: 'boolean' },
@@ -1 +1 @@
1
- {"version":3,"file":"bool.js","sourceRoot":"","sources":["../../src/vocabulary/bool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,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
+ {"version":3,"file":"bool.js","sourceRoot":"","sources":["../../src/vocabulary/bool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,IAAI,CAAC,IAAkD;IACrE,OAAO,IAAI,KAAK,CAAU;QACxB,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC1B,SAAS,EACP,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;QAC/E,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,3 +1,8 @@
1
- import { Field } from '../fields/Field.js';
1
+ import { Field } from '../field/Field.js';
2
+ /**
3
+ * So a creation stamp is written by the storage and refused from a client.
4
+ * FR : pour qu'un horodatage de création soit écrit par le storage et refusé au client.
5
+ * `created()` → `create: 'now'`, `update: 'forbidden'`
6
+ */
2
7
  export declare function created(): Field<Date>;
3
8
  //# 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,EAAE,MAAM,oBAAoB,CAAC;AAG3C,wBAAgB,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAIrC"}
1
+ {"version":3,"file":"created.d.ts","sourceRoot":"","sources":["../../src/vocabulary/created.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C;;;;GAIG;AACH,wBAAgB,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAIrC"}
@@ -1,7 +1,12 @@
1
1
  import { date } from './date.js';
2
+ /**
3
+ * So a creation stamp is written by the storage and refused from a client.
4
+ * FR : pour qu'un horodatage de création soit écrit par le storage et refusé au client.
5
+ * `created()` → `create: 'now'`, `update: 'forbidden'`
6
+ */
2
7
  export function created() {
3
8
  return date().with({
4
- lifecycle: { create: "now", update: "forbidden" },
9
+ lifecycle: { create: 'now', update: 'forbidden' },
5
10
  });
6
11
  }
7
12
  //# sourceMappingURL=created.js.map
@@ -1 +1 @@
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
+ {"version":3,"file":"created.js","sourceRoot":"","sources":["../../src/vocabulary/created.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;GAIG;AACH,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,8 @@
1
- import { Field } from '../fields/Field.js';
1
+ import { Field } from '../field/Field.js';
2
+ /**
3
+ * So a date is a string on the wire and a `Date` in a handler, with no word said.
4
+ * FR : pour qu'une date soit une chaîne sur le fil et une `Date` dans un handler.
5
+ * `date()` → `{ type: 'string', format: 'date-time' }`, decoded by the `isoDate` boundary
6
+ */
2
7
  export declare function date(): Field<Date>;
3
8
  //# 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,EAAE,MAAM,oBAAoB,CAAC;AAE3C,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,mBAAmB,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAElC"}
@@ -1,4 +1,9 @@
1
- import { Field } from '../fields/Field.js';
1
+ import { Field } from '../field/Field.js';
2
+ /**
3
+ * So a date is a string on the wire and a `Date` in a handler, with no word said.
4
+ * FR : pour qu'une date soit une chaîne sur le fil et une `Date` dans un handler.
5
+ * `date()` → `{ type: 'string', format: 'date-time' }`, decoded by the `isoDate` boundary
6
+ */
2
7
  export function date() {
3
8
  return new Field({ shape: { type: 'string', format: 'date-time' } });
4
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/vocabulary/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,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
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/vocabulary/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;;;GAIG;AACH,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,4 +1,9 @@
1
1
  import { type TextOptions } from './text.js';
2
- import type { Field } from '../fields/Field.js';
2
+ import type { Field } from '../field/Field.js';
3
+ /**
4
+ * So the format is stated once, where everyone would otherwise write the same regex.
5
+ * FR : pour que le format soit énoncé une fois, là où chacun réécrirait la même regex.
6
+ * `email({ max: 254 })`
7
+ */
3
8
  export declare function email(opts?: Omit<TextOptions, 'format'>): Field<string>;
4
9
  //# 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,oBAAoB,CAAC;AAEhD,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,mBAAmB,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAEvE"}
@@ -1,4 +1,9 @@
1
1
  import { text } from './text.js';
2
+ /**
3
+ * So the format is stated once, where everyone would otherwise write the same regex.
4
+ * FR : pour que le format soit énoncé une fois, là où chacun réécrirait la même regex.
5
+ * `email({ max: 254 })`
6
+ */
2
7
  export function email(opts) {
3
8
  return text({ ...opts, format: 'email' });
4
9
  }
@@ -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,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;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,IAAkC;IACtD,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5C,CAAC"}
@@ -1,3 +1,8 @@
1
- import { Field } from '../fields/Field.js';
1
+ import { Field } from '../field/Field.js';
2
+ /**
3
+ * So a write-once field is refused on a patch by the validator, not by the table.
4
+ * FR : pour qu'un champ écrit une fois soit refusé par le juge sur une modification.
5
+ * `immutable(text())` → `update: 'forbidden'`
6
+ */
2
7
  export declare const immutable: <T>(field: Field<T>) => Field<T>;
3
8
  //# sourceMappingURL=immutable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"immutable.d.ts","sourceRoot":"","sources":["../../src/vocabulary/immutable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAEpD,CAAC"}
1
+ {"version":3,"file":"immutable.d.ts","sourceRoot":"","sources":["../../src/vocabulary/immutable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAKtD,CAAC"}
@@ -1,4 +1,9 @@
1
1
  import { vocabulary } from './vocabulary.js';
2
+ /**
3
+ * So a write-once field is refused on a patch by the validator, not by the table.
4
+ * FR : pour qu'un champ écrit une fois soit refusé par le juge sur une modification.
5
+ * `immutable(text())` → `update: 'forbidden'`
6
+ */
2
7
  export const immutable = vocabulary('immutable', () => ({
3
8
  lifecycle: { update: 'forbidden' },
4
9
  }));
@@ -1 +1 @@
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
+ {"version":3,"file":"immutable.js","sourceRoot":"","sources":["../../src/vocabulary/immutable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAqC,UAAU,CACnE,WAAW,EACX,GAAG,EAAE,CAAC,CAAC;IACL,SAAS,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;CACnC,CAAC,CACH,CAAC"}
@@ -1,3 +1,8 @@
1
- import { Field } from '../fields/Field.js';
1
+ import { Field } from '../field/Field.js';
2
+ /**
3
+ * So the entity states the index, and the DDL is the one that emits it.
4
+ * FR : pour que l'entité énonce l'index, le DDL étant celui qui l'émet.
5
+ * `indexed(text())` → `role.index` is `true`
6
+ */
2
7
  export declare const indexed: <T>(field: Field<T>) => Field<T>;
3
8
  //# sourceMappingURL=indexed.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"indexed.d.ts","sourceRoot":"","sources":["../../src/vocabulary/indexed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,eAAO,MAAM,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAA4D,CAAC"}
1
+ {"version":3,"file":"indexed.d.ts","sourceRoot":"","sources":["../../src/vocabulary/indexed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;;;GAIG;AACH,eAAO,MAAM,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAElD,CAAC"}
@@ -1,3 +1,10 @@
1
1
  import { vocabulary } from './vocabulary.js';
2
- export const indexed = vocabulary('indexed', () => ({ role: { index: true } }));
2
+ /**
3
+ * So the entity states the index, and the DDL is the one that emits it.
4
+ * FR : pour que l'entité énonce l'index, le DDL étant celui qui l'émet.
5
+ * `indexed(text())` → `role.index` is `true`
6
+ */
7
+ export const indexed = vocabulary('indexed', () => ({
8
+ role: { index: true },
9
+ }));
3
10
  //# sourceMappingURL=indexed.js.map
@@ -1 +1 @@
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
+ {"version":3,"file":"indexed.js","sourceRoot":"","sources":["../../src/vocabulary/indexed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAqC,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACpF,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;CACtB,CAAC,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
- import { Field } from '../fields/Field.js';
2
- import type { SchemaView } from '../schema/SchemaView.js';
1
+ import { Field } from '../field/Field.js';
2
+ import type { SchemaView } from '../SchemaView.js';
3
3
  export declare function json<T = unknown>(): Field<T>;
4
4
  export declare function json<E extends SchemaView & (new (...args: any[]) => any)>(of: E): Field<InstanceType<E>>;
5
5
  //# sourceMappingURL=json.d.ts.map