@fougere/schema 0.12.0-alpha.0 → 0.12.2-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 (348) hide show
  1. package/dist/FougereFieldAxes.d.ts +3 -0
  2. package/dist/FougereFieldAxes.d.ts.map +1 -0
  3. package/dist/FougereFieldAxes.js +2 -0
  4. package/dist/FougereFieldAxes.js.map +1 -0
  5. package/dist/Schema.d.ts +4 -3
  6. package/dist/Schema.d.ts.map +1 -1
  7. package/dist/Schema.js +3 -0
  8. package/dist/Schema.js.map +1 -1
  9. package/dist/SchemaConstraints.d.ts +13 -10
  10. package/dist/SchemaConstraints.d.ts.map +1 -1
  11. package/dist/SchemaConstraints.js +32 -20
  12. package/dist/SchemaConstraints.js.map +1 -1
  13. package/dist/SchemaDefinition.d.ts.map +1 -1
  14. package/dist/SchemaDefinition.js +6 -5
  15. package/dist/SchemaDefinition.js.map +1 -1
  16. package/dist/SchemaError.d.ts +4 -1
  17. package/dist/SchemaError.d.ts.map +1 -1
  18. package/dist/SchemaError.js +6 -3
  19. package/dist/SchemaError.js.map +1 -1
  20. package/dist/SchemaView.d.ts +3 -2
  21. package/dist/SchemaView.d.ts.map +1 -1
  22. package/dist/axis/Axes.d.ts +16 -0
  23. package/dist/axis/Axes.d.ts.map +1 -0
  24. package/dist/axis/Axes.js +27 -0
  25. package/dist/axis/Axes.js.map +1 -0
  26. package/dist/axis/Axis.d.ts +15 -9
  27. package/dist/axis/Axis.d.ts.map +1 -1
  28. package/dist/axis/Axis.js +1 -10
  29. package/dist/axis/Axis.js.map +1 -1
  30. package/dist/axis/boundary/Boundary.d.ts +38 -5
  31. package/dist/axis/boundary/Boundary.d.ts.map +1 -1
  32. package/dist/axis/boundary/Boundary.js +18 -11
  33. package/dist/axis/boundary/Boundary.js.map +1 -1
  34. package/dist/axis/boundary/Decoder.d.ts +8 -2
  35. package/dist/axis/boundary/Decoder.d.ts.map +1 -1
  36. package/dist/axis/boundary/Decoder.js.map +1 -1
  37. package/dist/axis/lifecycle/Lifecycle.d.ts +29 -8
  38. package/dist/axis/lifecycle/Lifecycle.d.ts.map +1 -1
  39. package/dist/axis/lifecycle/Lifecycle.js +26 -11
  40. package/dist/axis/lifecycle/Lifecycle.js.map +1 -1
  41. package/dist/axis/lifecycle/apply.d.ts.map +1 -1
  42. package/dist/axis/lifecycle/apply.js +3 -4
  43. package/dist/axis/lifecycle/apply.js.map +1 -1
  44. package/dist/axis/role/Role.d.ts +31 -12
  45. package/dist/axis/role/Role.d.ts.map +1 -1
  46. package/dist/axis/role/Role.js +56 -22
  47. package/dist/axis/role/Role.js.map +1 -1
  48. package/dist/axis/shape/Shape.d.ts +32 -9
  49. package/dist/axis/shape/Shape.d.ts.map +1 -1
  50. package/dist/axis/shape/Shape.js +43 -12
  51. package/dist/axis/shape/Shape.js.map +1 -1
  52. package/dist/axis/shape/ShapeFormat.d.ts +10 -0
  53. package/dist/axis/shape/ShapeFormat.d.ts.map +1 -0
  54. package/dist/axis/shape/ShapeFormat.js +32 -0
  55. package/dist/axis/shape/ShapeFormat.js.map +1 -0
  56. package/dist/axis/shape/{Formats.d.ts → StringFormats.d.ts} +3 -3
  57. package/dist/axis/shape/StringFormats.d.ts.map +1 -0
  58. package/dist/axis/shape/{Formats.js → StringFormats.js} +3 -3
  59. package/dist/axis/shape/StringFormats.js.map +1 -0
  60. package/dist/entity/EntityDeclarations.d.ts +3 -2
  61. package/dist/entity/EntityDeclarations.d.ts.map +1 -1
  62. package/dist/entity/FieldGroups.d.ts +9 -0
  63. package/dist/entity/FieldGroups.d.ts.map +1 -0
  64. package/dist/entity/FieldGroups.js +2 -0
  65. package/dist/entity/FieldGroups.js.map +1 -0
  66. package/dist/field/Field.d.ts +37 -12
  67. package/dist/field/Field.d.ts.map +1 -1
  68. package/dist/field/Field.js +55 -8
  69. package/dist/field/Field.js.map +1 -1
  70. package/dist/field/FieldFormat.d.ts +9 -0
  71. package/dist/field/FieldFormat.d.ts.map +1 -0
  72. package/dist/field/FieldFormat.js +12 -0
  73. package/dist/field/FieldFormat.js.map +1 -0
  74. package/dist/field/FieldSet.d.ts +12 -3
  75. package/dist/field/FieldSet.d.ts.map +1 -1
  76. package/dist/field/FieldSet.js +22 -15
  77. package/dist/field/FieldSet.js.map +1 -1
  78. package/dist/index.d.ts +7 -3
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +4 -3
  81. package/dist/index.js.map +1 -1
  82. package/dist/lib/Format.d.ts +75 -0
  83. package/dist/lib/Format.d.ts.map +1 -0
  84. package/dist/lib/Format.js +123 -0
  85. package/dist/lib/Format.js.map +1 -0
  86. package/dist/lib/JsonSchema.d.ts +2 -0
  87. package/dist/lib/JsonSchema.d.ts.map +1 -0
  88. package/dist/lib/JsonSchema.js +2 -0
  89. package/dist/lib/JsonSchema.js.map +1 -0
  90. package/dist/lib/Registry.d.ts +4 -2
  91. package/dist/lib/Registry.d.ts.map +1 -1
  92. package/dist/lib/Registry.js +11 -5
  93. package/dist/lib/Registry.js.map +1 -1
  94. package/dist/lib/UnionToIntersection.d.ts +7 -0
  95. package/dist/lib/UnionToIntersection.d.ts.map +1 -0
  96. package/dist/lib/UnionToIntersection.js +2 -0
  97. package/dist/lib/UnionToIntersection.js.map +1 -0
  98. package/dist/lib/ValidationResult.d.ts +2 -0
  99. package/dist/lib/ValidationResult.d.ts.map +1 -1
  100. package/dist/lib/ValidationResult.js +6 -0
  101. package/dist/lib/ValidationResult.js.map +1 -1
  102. package/dist/lib/utils.d.ts +1 -1
  103. package/dist/lib/utils.d.ts.map +1 -1
  104. package/dist/lib/utils.js +1 -1
  105. package/dist/lib/utils.js.map +1 -1
  106. package/dist/projection/Cases.d.ts +1 -1
  107. package/dist/projection/Cases.d.ts.map +1 -1
  108. package/dist/projection/Cases.js +20 -8
  109. package/dist/projection/Cases.js.map +1 -1
  110. package/dist/projection/Visibility.d.ts +11 -0
  111. package/dist/projection/Visibility.d.ts.map +1 -1
  112. package/dist/projection/Visibility.js +28 -6
  113. package/dist/projection/Visibility.js.map +1 -1
  114. package/dist/projection/card/Bundle.d.ts.map +1 -1
  115. package/dist/projection/card/Bundle.js.map +1 -1
  116. package/dist/projection/card/Card.d.ts.map +1 -1
  117. package/dist/projection/card/Card.js +24 -30
  118. package/dist/projection/card/Card.js.map +1 -1
  119. package/dist/projection/card/CardForm.d.ts +7 -0
  120. package/dist/projection/card/CardForm.d.ts.map +1 -0
  121. package/dist/projection/card/CardForm.js +2 -0
  122. package/dist/projection/card/CardForm.js.map +1 -0
  123. package/dist/projection/card/CardForms.d.ts +10 -0
  124. package/dist/projection/card/CardForms.d.ts.map +1 -0
  125. package/dist/projection/card/CardForms.js +12 -0
  126. package/dist/projection/card/CardForms.js.map +1 -0
  127. package/dist/projection/card/Change.d.ts +2 -2
  128. package/dist/projection/card/Change.d.ts.map +1 -1
  129. package/dist/projection/card/Diff.js +2 -2
  130. package/dist/projection/card/Diff.js.map +1 -1
  131. package/dist/projection/card/FieldExtension.d.ts +4 -2
  132. package/dist/projection/card/FieldExtension.d.ts.map +1 -1
  133. package/dist/projection/card/RoleDescriptor.d.ts +15 -3
  134. package/dist/projection/card/RoleDescriptor.d.ts.map +1 -1
  135. package/dist/projection/card/RoleDescriptor.js +40 -1
  136. package/dist/projection/card/RoleDescriptor.js.map +1 -1
  137. package/dist/projection/card/ShapeKeywords.d.ts +1 -1
  138. package/dist/projection/card/ShapeKeywords.d.ts.map +1 -1
  139. package/dist/projection/card/admission.d.ts +0 -14
  140. package/dist/projection/card/admission.d.ts.map +1 -1
  141. package/dist/projection/card/admission.js +0 -20
  142. package/dist/projection/card/admission.js.map +1 -1
  143. package/dist/validator/FieldDeclarationValidator.d.ts.map +1 -1
  144. package/dist/validator/FieldDeclarationValidator.js +10 -25
  145. package/dist/validator/FieldDeclarationValidator.js.map +1 -1
  146. package/dist/validator/FieldValueValidator.d.ts.map +1 -1
  147. package/dist/validator/FieldValueValidator.js +9 -29
  148. package/dist/validator/FieldValueValidator.js.map +1 -1
  149. package/dist/validator/InputValidator.d.ts +7 -1
  150. package/dist/validator/InputValidator.d.ts.map +1 -1
  151. package/dist/validator/InputValidator.js +15 -14
  152. package/dist/validator/InputValidator.js.map +1 -1
  153. package/dist/validator/JsonSchemaValidator.d.ts +23 -0
  154. package/dist/validator/JsonSchemaValidator.d.ts.map +1 -0
  155. package/dist/validator/JsonSchemaValidator.js +113 -0
  156. package/dist/validator/JsonSchemaValidator.js.map +1 -0
  157. package/dist/vocabulary/preset/created.d.ts +2 -2
  158. package/dist/vocabulary/preset/created.d.ts.map +1 -1
  159. package/dist/vocabulary/preset/created.js +2 -2
  160. package/dist/vocabulary/preset/created.js.map +1 -1
  161. package/dist/vocabulary/preset/updated.d.ts +2 -2
  162. package/dist/vocabulary/preset/updated.d.ts.map +1 -1
  163. package/dist/vocabulary/preset/updated.js +2 -2
  164. package/dist/vocabulary/preset/updated.js.map +1 -1
  165. package/dist/vocabulary/primitive/bool.d.ts +2 -5
  166. package/dist/vocabulary/primitive/bool.d.ts.map +1 -1
  167. package/dist/vocabulary/primitive/bool.js +1 -5
  168. package/dist/vocabulary/primitive/bool.js.map +1 -1
  169. package/dist/vocabulary/primitive/date.d.ts +2 -3
  170. package/dist/vocabulary/primitive/date.d.ts.map +1 -1
  171. package/dist/vocabulary/primitive/date.js +2 -3
  172. package/dist/vocabulary/primitive/date.js.map +1 -1
  173. package/dist/vocabulary/primitive/json.d.ts +3 -3
  174. package/dist/vocabulary/primitive/json.d.ts.map +1 -1
  175. package/dist/vocabulary/primitive/json.js +11 -11
  176. package/dist/vocabulary/primitive/json.js.map +1 -1
  177. package/dist/vocabulary/primitive/list.d.ts +6 -5
  178. package/dist/vocabulary/primitive/list.d.ts.map +1 -1
  179. package/dist/vocabulary/primitive/list.js +13 -7
  180. package/dist/vocabulary/primitive/list.js.map +1 -1
  181. package/dist/vocabulary/primitive/many.d.ts +2 -4
  182. package/dist/vocabulary/primitive/many.d.ts.map +1 -1
  183. package/dist/vocabulary/primitive/many.js +2 -4
  184. package/dist/vocabulary/primitive/many.js.map +1 -1
  185. package/dist/vocabulary/primitive/number.d.ts +2 -4
  186. package/dist/vocabulary/primitive/number.d.ts.map +1 -1
  187. package/dist/vocabulary/primitive/number.js +1 -3
  188. package/dist/vocabulary/primitive/number.js.map +1 -1
  189. package/dist/vocabulary/primitive/oneOf.d.ts +4 -7
  190. package/dist/vocabulary/primitive/oneOf.d.ts.map +1 -1
  191. package/dist/vocabulary/primitive/oneOf.js +19 -11
  192. package/dist/vocabulary/primitive/oneOf.js.map +1 -1
  193. package/dist/vocabulary/primitive/primary.d.ts +2 -2
  194. package/dist/vocabulary/primitive/primary.d.ts.map +1 -1
  195. package/dist/vocabulary/primitive/primary.js +2 -3
  196. package/dist/vocabulary/primitive/primary.js.map +1 -1
  197. package/dist/vocabulary/primitive/ref.d.ts +2 -6
  198. package/dist/vocabulary/primitive/ref.d.ts.map +1 -1
  199. package/dist/vocabulary/primitive/ref.js +1 -1
  200. package/dist/vocabulary/primitive/ref.js.map +1 -1
  201. package/dist/vocabulary/primitive/text.d.ts +2 -4
  202. package/dist/vocabulary/primitive/text.d.ts.map +1 -1
  203. package/dist/vocabulary/primitive/text.js +1 -3
  204. package/dist/vocabulary/primitive/text.js.map +1 -1
  205. package/dist/vocabulary/rule/nullable.d.ts +0 -1
  206. package/dist/vocabulary/rule/nullable.d.ts.map +1 -1
  207. package/dist/vocabulary/rule/nullable.js +0 -1
  208. package/dist/vocabulary/rule/nullable.js.map +1 -1
  209. package/dist/vocabulary/rule/optional.d.ts +0 -1
  210. package/dist/vocabulary/rule/optional.d.ts.map +1 -1
  211. package/dist/vocabulary/rule/optional.js +0 -1
  212. package/dist/vocabulary/rule/optional.js.map +1 -1
  213. package/dist/vocabulary/rule/readOnly.d.ts +0 -2
  214. package/dist/vocabulary/rule/readOnly.d.ts.map +1 -1
  215. package/dist/vocabulary/rule/readOnly.js +0 -2
  216. package/dist/vocabulary/rule/readOnly.js.map +1 -1
  217. package/dist/vocabulary/rule/writeOnly.d.ts +0 -2
  218. package/dist/vocabulary/rule/writeOnly.d.ts.map +1 -1
  219. package/dist/vocabulary/rule/writeOnly.js +0 -2
  220. package/dist/vocabulary/rule/writeOnly.js.map +1 -1
  221. package/dist/vocabulary/vocabulary.d.ts +2 -3
  222. package/dist/vocabulary/vocabulary.d.ts.map +1 -1
  223. package/dist/vocabulary/vocabulary.js +18 -20
  224. package/dist/vocabulary/vocabulary.js.map +1 -1
  225. package/package.json +1 -1
  226. package/src/FougereFieldAxes.ts +2 -0
  227. package/src/Schema.ts +11 -8
  228. package/src/SchemaConstraints.ts +40 -22
  229. package/src/SchemaDefinition.ts +7 -5
  230. package/src/SchemaError.ts +9 -3
  231. package/src/SchemaView.ts +3 -2
  232. package/src/axis/Axes.ts +34 -0
  233. package/src/axis/Axis.ts +15 -19
  234. package/src/axis/boundary/Boundary.ts +39 -13
  235. package/src/axis/boundary/Decoder.ts +3 -1
  236. package/src/axis/lifecycle/Lifecycle.ts +42 -14
  237. package/src/axis/lifecycle/apply.ts +12 -6
  238. package/src/axis/role/Role.ts +73 -25
  239. package/src/axis/shape/Shape.ts +89 -23
  240. package/src/axis/shape/ShapeFormat.ts +37 -0
  241. package/src/axis/shape/{Formats.ts → StringFormats.ts} +2 -2
  242. package/src/entity/EntityDeclarations.ts +3 -2
  243. package/src/entity/FieldGroups.ts +9 -0
  244. package/src/field/Field.ts +89 -16
  245. package/src/field/FieldFormat.ts +18 -0
  246. package/src/field/FieldSet.ts +27 -19
  247. package/src/index.ts +7 -3
  248. package/src/lib/Format.ts +172 -0
  249. package/src/lib/JsonSchema.ts +1 -0
  250. package/src/lib/Registry.ts +14 -6
  251. package/src/lib/UnionToIntersection.ts +10 -0
  252. package/src/lib/ValidationResult.ts +8 -0
  253. package/src/lib/utils.ts +5 -1
  254. package/src/projection/Cases.ts +25 -8
  255. package/src/projection/Visibility.ts +31 -6
  256. package/src/projection/card/Bundle.ts +2 -0
  257. package/src/projection/card/Card.ts +29 -27
  258. package/src/projection/card/CardForm.ts +8 -0
  259. package/src/projection/card/CardForms.ts +13 -0
  260. package/src/projection/card/Change.ts +2 -2
  261. package/src/projection/card/Diff.ts +6 -2
  262. package/src/projection/card/FieldExtension.ts +5 -2
  263. package/src/projection/card/RoleDescriptor.ts +54 -3
  264. package/src/projection/card/ShapeKeywords.ts +1 -1
  265. package/src/projection/card/admission.ts +0 -33
  266. package/src/validator/FieldDeclarationValidator.ts +10 -25
  267. package/src/validator/FieldValueValidator.ts +13 -36
  268. package/src/validator/InputValidator.ts +17 -12
  269. package/src/validator/JsonSchemaValidator.ts +142 -0
  270. package/src/vocabulary/preset/created.ts +3 -3
  271. package/src/vocabulary/preset/updated.ts +4 -3
  272. package/src/vocabulary/primitive/bool.ts +3 -8
  273. package/src/vocabulary/primitive/date.ts +5 -4
  274. package/src/vocabulary/primitive/json.ts +27 -12
  275. package/src/vocabulary/primitive/list.ts +16 -9
  276. package/src/vocabulary/primitive/many.ts +3 -4
  277. package/src/vocabulary/primitive/number.ts +3 -8
  278. package/src/vocabulary/primitive/oneOf.ts +40 -24
  279. package/src/vocabulary/primitive/primary.ts +9 -5
  280. package/src/vocabulary/primitive/ref.ts +3 -7
  281. package/src/vocabulary/primitive/text.ts +3 -8
  282. package/src/vocabulary/rule/nullable.ts +0 -1
  283. package/src/vocabulary/rule/optional.ts +0 -1
  284. package/src/vocabulary/rule/readOnly.ts +0 -2
  285. package/src/vocabulary/rule/writeOnly.ts +0 -2
  286. package/src/vocabulary/vocabulary.ts +19 -21
  287. package/dist/axis/boundary/BoundaryAxis.d.ts +0 -4
  288. package/dist/axis/boundary/BoundaryAxis.d.ts.map +0 -1
  289. package/dist/axis/boundary/BoundaryAxis.js +0 -30
  290. package/dist/axis/boundary/BoundaryAxis.js.map +0 -1
  291. package/dist/axis/boundary/BoundaryRef.d.ts +0 -3
  292. package/dist/axis/boundary/BoundaryRef.d.ts.map +0 -1
  293. package/dist/axis/boundary/BoundaryRef.js +0 -2
  294. package/dist/axis/boundary/BoundaryRef.js.map +0 -1
  295. package/dist/axis/boundary/BoundaryRules.d.ts +0 -9
  296. package/dist/axis/boundary/BoundaryRules.d.ts.map +0 -1
  297. package/dist/axis/boundary/BoundaryRules.js +0 -2
  298. package/dist/axis/boundary/BoundaryRules.js.map +0 -1
  299. package/dist/axis/lifecycle/Clock.d.ts +0 -10
  300. package/dist/axis/lifecycle/Clock.d.ts.map +0 -1
  301. package/dist/axis/lifecycle/Clock.js +0 -19
  302. package/dist/axis/lifecycle/Clock.js.map +0 -1
  303. package/dist/axis/lifecycle/LifecycleAxis.d.ts +0 -4
  304. package/dist/axis/lifecycle/LifecycleAxis.d.ts.map +0 -1
  305. package/dist/axis/lifecycle/LifecycleAxis.js +0 -52
  306. package/dist/axis/lifecycle/LifecycleAxis.js.map +0 -1
  307. package/dist/axis/lifecycle/LifecycleRules.d.ts +0 -12
  308. package/dist/axis/lifecycle/LifecycleRules.d.ts.map +0 -1
  309. package/dist/axis/lifecycle/LifecycleRules.js +0 -3
  310. package/dist/axis/lifecycle/LifecycleRules.js.map +0 -1
  311. package/dist/axis/role/RoleAxis.d.ts +0 -5
  312. package/dist/axis/role/RoleAxis.d.ts.map +0 -1
  313. package/dist/axis/role/RoleAxis.js +0 -93
  314. package/dist/axis/role/RoleAxis.js.map +0 -1
  315. package/dist/axis/role/RoleRules.d.ts +0 -8
  316. package/dist/axis/role/RoleRules.d.ts.map +0 -1
  317. package/dist/axis/role/RoleRules.js +0 -2
  318. package/dist/axis/role/RoleRules.js.map +0 -1
  319. package/dist/axis/shape/Formats.d.ts.map +0 -1
  320. package/dist/axis/shape/Formats.js.map +0 -1
  321. package/dist/entity/CompositeUnique.d.ts +0 -4
  322. package/dist/entity/CompositeUnique.d.ts.map +0 -1
  323. package/dist/entity/CompositeUnique.js +0 -2
  324. package/dist/entity/CompositeUnique.js.map +0 -1
  325. package/dist/field/Meta.d.ts +0 -4
  326. package/dist/field/Meta.d.ts.map +0 -1
  327. package/dist/field/Meta.js +0 -2
  328. package/dist/field/Meta.js.map +0 -1
  329. package/dist/projection/card/RelationDescriptor.d.ts +0 -5
  330. package/dist/projection/card/RelationDescriptor.d.ts.map +0 -1
  331. package/dist/projection/card/RelationDescriptor.js +0 -2
  332. package/dist/projection/card/RelationDescriptor.js.map +0 -1
  333. package/dist/validator/AdapterFieldValidator.d.ts +0 -14
  334. package/dist/validator/AdapterFieldValidator.d.ts.map +0 -1
  335. package/dist/validator/AdapterFieldValidator.js +0 -37
  336. package/dist/validator/AdapterFieldValidator.js.map +0 -1
  337. package/src/axis/boundary/BoundaryAxis.ts +0 -32
  338. package/src/axis/boundary/BoundaryRef.ts +0 -3
  339. package/src/axis/boundary/BoundaryRules.ts +0 -4
  340. package/src/axis/lifecycle/Clock.ts +0 -22
  341. package/src/axis/lifecycle/LifecycleAxis.ts +0 -55
  342. package/src/axis/lifecycle/LifecycleRules.ts +0 -9
  343. package/src/axis/role/RoleAxis.ts +0 -104
  344. package/src/axis/role/RoleRules.ts +0 -8
  345. package/src/entity/CompositeUnique.ts +0 -6
  346. package/src/field/Meta.ts +0 -3
  347. package/src/projection/card/RelationDescriptor.ts +0 -3
  348. package/src/validator/AdapterFieldValidator.ts +0 -41
@@ -1 +1 @@
1
- {"version":3,"file":"number.js","sourceRoot":"","sources":["../../../src/vocabulary/primitive/number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAU7C,MAAM,UAAU,MAAM,CAAC,IAAoB;IACzC,OAAO,IAAI,KAAK,CAAS;QACvB,KAAK,EAAE;YACL,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAC1C,OAAO,EAAE,IAAI,EAAE,GAAG;YAClB,OAAO,EAAE,IAAI,EAAE,GAAG;SACnB;QACD,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
+ {"version":3,"file":"number.js","sourceRoot":"","sources":["../../../src/vocabulary/primitive/number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAe,MAAM,sBAAsB,CAAC;AAQ1D,MAAM,UAAU,MAAM,CAAC,IAAoB;IACzC,OAAO,IAAI,KAAK,CAAS;QACvB,KAAK,EAAE;YACL,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAC1C,OAAO,EAAE,IAAI,EAAE,GAAG;YAClB,OAAO,EAAE,IAAI,EAAE,GAAG;SACnB;KACF,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC"}
@@ -1,9 +1,6 @@
1
- import { Field } from '../../field/Field.js';
2
- interface OneOfOptions<V extends string = string> {
3
- description?: string;
4
- default?: V;
5
- }
6
- export declare function oneOf<const T extends readonly string[]>(...values: [...T]): Field<T[number]>;
7
- export declare function oneOf<const T extends readonly string[]>(...args: [...T, OneOfOptions<T[number]>]): Field<T[number]>;
1
+ import { Field, type Shared } from '../../field/Field.js';
2
+ type Values = readonly [string, ...string[]] | readonly [number, ...number[]];
3
+ export declare function oneOf<const T extends Values>(...values: [...T]): Field<T[number]>;
4
+ export declare function oneOf<const T extends Values>(...args: [...T, Shared<T[number]>]): Field<T[number]>;
8
5
  export {};
9
6
  //# sourceMappingURL=oneOf.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oneOf.d.ts","sourceRoot":"","sources":["../../../src/vocabulary/primitive/oneOf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7C,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,EACrD,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAChB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACpB,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/primitive/oneOf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAK1D,KAAK,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AAE9E,wBAAgB,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEnF,wBAAgB,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,EAC1C,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GACjC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC"}
@@ -1,18 +1,26 @@
1
1
  import { Field } from '../../field/Field.js';
2
+ import { isArrayOf, isObject } from '../../lib/utils.js';
3
+ import { SchemaError } from '../../SchemaError.js';
2
4
  /**
3
- * The set travels: GraphQL enum, form `select` and DDL `CHECK`, from this one declaration.
4
- * FR : l'ensemble voyage : enum GraphQL, `select` du formulaire, `CHECK` du DDL.
5
5
  * `oneOf('draft', 'published', { default: 'draft' })` → `{ type: 'string', enum: [...] }`
6
6
  */
7
7
  export function oneOf(...args) {
8
- const last = args[args.length - 1];
9
- const hasOpts = typeof last === 'object' && last !== null && !Array.isArray(last);
10
- const values = (hasOpts ? args.slice(0, -1) : args);
11
- const opts = hasOpts ? last : {};
12
- return new Field({
13
- shape: { type: 'string', enum: values },
14
- lifecycle: opts.default !== undefined ? { create: { value: opts.default } } : undefined,
15
- meta: opts.description !== undefined ? { description: opts.description } : undefined,
16
- });
8
+ const given = args;
9
+ const last = given.at(-1);
10
+ const opts = isObject(last) ? last : undefined;
11
+ const values = opts ? given.slice(0, -1) : given;
12
+ let shape = undefined;
13
+ if (values.length === 0)
14
+ throw new SchemaError('oneOf() takes strings or numbers, then an optional object of options', { received: given });
15
+ if (isArrayOf(values, (value) => typeof value === 'string'))
16
+ shape = { type: 'string', enum: values };
17
+ if (isArrayOf(values, (value) => typeof value === 'number'))
18
+ shape = {
19
+ type: values.every(Number.isInteger) ? 'integer' : 'number',
20
+ enum: values,
21
+ };
22
+ if (shape === undefined)
23
+ throw new SchemaError('oneOf() takes strings or numbers, then an optional object of options', { received: given });
24
+ return new Field({ shape }).setShared(opts);
17
25
  }
18
26
  //# sourceMappingURL=oneOf.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oneOf.js","sourceRoot":"","sources":["../../../src/vocabulary/primitive/oneOf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAa7C;;;;GAIG;AACH,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,EACP,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;QAC9E,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/primitive/oneOf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAe,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAUnD;;GAEG;AACH,MAAM,UAAU,KAAK,CACnB,GAAG,IAAwC;IAE3C,MAAM,KAAK,GAAuB,IAAI,CAAC;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAEjD,IAAI,KAAK,GAAsB,SAAS,CAAC;IAEzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QACrB,MAAM,IAAI,WAAW,CACnB,sEAAsE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAC5F,CAAC;IAEJ,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;QACzD,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAE3C,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;QACzD,KAAK,GAAG;YACN,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAC3D,IAAI,EAAE,MAAM;SACb,CAAC;IAEJ,IAAI,KAAK,KAAK,SAAS;QACrB,MAAM,IAAI,WAAW,CACnB,sEAAsE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAC5F,CAAC;IAEJ,OAAO,IAAI,KAAK,CAAY,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC"}
@@ -1,6 +1,6 @@
1
- import { Field } from '../../field/Field.js';
1
+ import { Field, type Described } from '../../field/Field.js';
2
2
  import { type GeneratorRef } from '../../axis/lifecycle/Generators.js';
3
- interface PrimaryOptions {
3
+ interface PrimaryOptions extends Described {
4
4
  generate?: GeneratorRef | [name: string, fn: () => string];
5
5
  }
6
6
  export declare function primary(opts?: PrimaryOptions): Field<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"primary.d.ts","sourceRoot":"","sources":["../../../src/vocabulary/primitive/primary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEnF,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC,CAAC;CAC5D;AAED,wBAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9D,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"primary.d.ts","sourceRoot":"","sources":["../../../src/vocabulary/primitive/primary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEnF,UAAU,cAAe,SAAQ,SAAS;IACxC,QAAQ,CAAC,EAAE,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC,CAAC;CAC5D;AAED,wBAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9D,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC"}
@@ -2,7 +2,6 @@ import { Field } from '../../field/Field.js';
2
2
  import { Generators } from '../../axis/lifecycle/Generators.js';
3
3
  /**
4
4
  * `primary()` for a generated id; `primary(number())` to make a declared field the key.
5
- * FR : `primary()` pour un identifiant généré ; `primary(number())` pour promouvoir un champ.
6
5
  * `primary()` → `create: { generate: 'cuid2' }`, `update: 'forbidden'`
7
6
  */
8
7
  export function primary(fieldOrOptions) {
@@ -13,7 +12,7 @@ export function primary(fieldOrOptions) {
13
12
  lifecycle: { ...field.lifecycle, update: 'forbidden' },
14
13
  });
15
14
  }
16
- const opts = (fieldOrOptions ?? {});
15
+ const opts = fieldOrOptions ?? {};
17
16
  let generate;
18
17
  if (Array.isArray(opts.generate)) {
19
18
  const [name, fn] = opts.generate;
@@ -27,6 +26,6 @@ export function primary(fieldOrOptions) {
27
26
  shape: { type: 'string' },
28
27
  role: { primary: true },
29
28
  lifecycle: { create: { generate }, update: 'forbidden' },
30
- });
29
+ }).setShared(opts);
31
30
  }
32
31
  //# sourceMappingURL=primary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"primary.js","sourceRoot":"","sources":["../../../src/vocabulary/primitive/primary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAqB,MAAM,oCAAoC,CAAC;AAQnF;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,cAAuC;IAC7D,IAAI,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,cAAc,CAAC;QAC7B,OAAO,KAAK,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YACtC,SAAS,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE;SACvD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,cAAc,IAAI,EAAE,CAAmB,CAAC;IACtD,IAAI,QAAsB,CAAC;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9B,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,KAAK,CAAS;QACvB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACvB,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;KACzD,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"primary.js","sourceRoot":"","sources":["../../../src/vocabulary/primitive/primary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAqB,MAAM,oCAAoC,CAAC;AAQnF;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,cAAuC;IAC7D,IAAI,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,cAAc,CAAC;QAE7B,OAAO,KAAK,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YACtC,SAAS,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE;SACvD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAmB,cAAc,IAAI,EAAE,CAAC;IAElD,IAAI,QAAsB,CAAC;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEjC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAE9B,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC;IACtC,CAAC;IAED,OAAO,IAAI,KAAK,CAAS;QACvB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACvB,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;KACzD,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC"}
@@ -1,11 +1,7 @@
1
1
  import { type EntityConstructor } from '../../axis/role/EntityConstructor.js';
2
2
  import { type OnDelete } from '../../axis/role/Relation.js';
3
- import { Field } from '../../field/Field.js';
4
- export interface RefOptions {
5
- /**
6
- * What becomes of this row when the target's is deleted. `restrict` is the default because
7
- * it is what a foreign key already does when nothing is stated.
8
- */
3
+ import { Field, type Shared } from '../../field/Field.js';
4
+ export interface RefOptions extends Shared<string> {
9
5
  onDelete?: OnDelete;
10
6
  }
11
7
  export declare function ref<E extends EntityConstructor>(target: E | (() => E), opts?: RefOptions): Field<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../../../src/vocabulary/primitive/ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7C,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,wBAAgB,GAAG,CAAC,CAAC,SAAS,iBAAiB,EAC7C,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EACrB,IAAI,CAAC,EAAE,UAAU,GAChB,KAAK,CAAC,MAAM,CAAC,CAKf"}
1
+ {"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../../../src/vocabulary/primitive/ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,UAAW,SAAQ,MAAM,CAAC,MAAM,CAAC;IAChD,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,wBAAgB,GAAG,CAAC,CAAC,SAAS,iBAAiB,EAC7C,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EACrB,IAAI,CAAC,EAAE,UAAU,GAChB,KAAK,CAAC,MAAM,CAAC,CAKf"}
@@ -4,6 +4,6 @@ export function ref(target, opts) {
4
4
  return new Field({
5
5
  shape: { type: 'string' },
6
6
  role: { relation: Relation.one(target, opts?.onDelete) },
7
- });
7
+ }).setShared(opts);
8
8
  }
9
9
  //# sourceMappingURL=ref.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ref.js","sourceRoot":"","sources":["../../../src/vocabulary/primitive/ref.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAiB,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAU7C,MAAM,UAAU,GAAG,CACjB,MAAqB,EACrB,IAAiB;IAEjB,OAAO,IAAI,KAAK,CAAS;QACvB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;KACzD,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"ref.js","sourceRoot":"","sources":["../../../src/vocabulary/primitive/ref.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAiB,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,KAAK,EAAe,MAAM,sBAAsB,CAAC;AAM1D,MAAM,UAAU,GAAG,CACjB,MAAqB,EACrB,IAAiB;IAEjB,OAAO,IAAI,KAAK,CAAS;QACvB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;KACzD,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC"}
@@ -1,12 +1,10 @@
1
- import { Field } from '../../field/Field.js';
1
+ import { Field, type Shared } from '../../field/Field.js';
2
2
  import { type StringFormat } from '../../axis/shape/StringFormat.js';
3
- export interface TextOptions {
3
+ export interface TextOptions extends Shared<string> {
4
4
  min?: number;
5
5
  max?: number;
6
6
  pattern?: string;
7
7
  format?: StringFormat;
8
- default?: string;
9
- description?: string;
10
8
  }
11
9
  export declare function text(opts?: TextOptions): Field<string>;
12
10
  //# sourceMappingURL=text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/vocabulary/primitive/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAatD"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/vocabulary/primitive/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,WAAW,WAAY,SAAQ,MAAM,CAAC,MAAM,CAAC;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAUtD"}
@@ -8,8 +8,6 @@ export function text(opts) {
8
8
  pattern: opts?.pattern,
9
9
  format: opts?.format,
10
10
  },
11
- lifecycle: opts?.default !== undefined ? { create: { value: opts.default } } : undefined,
12
- meta: opts?.description !== undefined ? { description: opts.description } : undefined,
13
- });
11
+ }).setShared(opts);
14
12
  }
15
13
  //# sourceMappingURL=text.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/vocabulary/primitive/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAY7C,MAAM,UAAU,IAAI,CAAC,IAAkB;IACrC,OAAO,IAAI,KAAK,CAAS;QACvB,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,IAAI,EAAE,GAAG;YACpB,SAAS,EAAE,IAAI,EAAE,GAAG;YACpB,OAAO,EAAE,IAAI,EAAE,OAAO;YACtB,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB;QACD,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
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/vocabulary/primitive/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAe,MAAM,sBAAsB,CAAC;AAU1D,MAAM,UAAU,IAAI,CAAC,IAAkB;IACrC,OAAO,IAAI,KAAK,CAAS;QACvB,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,IAAI,EAAE,GAAG;YACpB,SAAS,EAAE,IAAI,EAAE,GAAG;YACpB,OAAO,EAAE,IAAI,EAAE,OAAO;YACtB,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB;KACF,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC"}
@@ -1,7 +1,6 @@
1
1
  import { type Field } from '../../field/Field.js';
2
2
  /**
3
3
  * Adds `null` and leaves the field REQUIRED — `optional()` is the one permitting absence.
4
- * FR : ajoute `null` en laissant le champ OBLIGATOIRE — `optional()` permet l'absence.
5
4
  * `nullable(text())` → `{ type: ['string', 'null'] }`, and `validate({})` still refuses
6
5
  */
7
6
  export declare const nullable: <T>(field: Field<T>) => Field<T | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"nullable.d.ts","sourceRoot":"","sources":["../../../src/vocabulary/rule/nullable.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,IAAI,CAK5D,CAAC"}
1
+ {"version":3,"file":"nullable.d.ts","sourceRoot":"","sources":["../../../src/vocabulary/rule/nullable.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,IAAI,CAK5D,CAAC"}
@@ -2,7 +2,6 @@ import { vocabulary } from '../vocabulary.js';
2
2
  import { Shapes } from '../../axis/shape/Shape.js';
3
3
  /**
4
4
  * Adds `null` and leaves the field REQUIRED — `optional()` is the one permitting absence.
5
- * FR : ajoute `null` en laissant le champ OBLIGATOIRE — `optional()` permet l'absence.
6
5
  * `nullable(text())` → `{ type: ['string', 'null'] }`, and `validate({})` still refuses
7
6
  */
8
7
  export const nullable = vocabulary('nullable', (field) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"nullable.js","sourceRoot":"","sources":["../../../src/vocabulary/rule/nullable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAGnD;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAA4C,UAAU,CACzE,UAAU,EACV,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACV,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;CACpC,CAAC,CACH,CAAC"}
1
+ {"version":3,"file":"nullable.js","sourceRoot":"","sources":["../../../src/vocabulary/rule/nullable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAGnD;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAA4C,UAAU,CACzE,UAAU,EACV,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACV,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;CACpC,CAAC,CACH,CAAC"}
@@ -1,7 +1,6 @@
1
1
  import { type Field } from '../../field/Field.js';
2
2
  /**
3
3
  * Adds `null` AND permits absence. A field that already states a `create` rule keeps it.
4
- * FR : ajoute `null` ET permet l'absence. Un champ qui énonce déjà un `create` le garde.
5
4
  * `optional(text())` → `{ type: ['string', 'null'] }` and `create: 'optional'`
6
5
  */
7
6
  export declare const optional: <T>(field: Field<T>) => Field<T | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"optional.d.ts","sourceRoot":"","sources":["../../../src/vocabulary/rule/optional.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,IAAI,CAQ5D,CAAC"}
1
+ {"version":3,"file":"optional.d.ts","sourceRoot":"","sources":["../../../src/vocabulary/rule/optional.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,IAAI,CAQ5D,CAAC"}
@@ -2,7 +2,6 @@ import { vocabulary } from '../vocabulary.js';
2
2
  import { Shapes } from '../../axis/shape/Shape.js';
3
3
  /**
4
4
  * Adds `null` AND permits absence. A field that already states a `create` rule keeps it.
5
- * FR : ajoute `null` ET permet l'absence. Un champ qui énonce déjà un `create` le garde.
6
5
  * `optional(text())` → `{ type: ['string', 'null'] }` and `create: 'optional'`
7
6
  */
8
7
  export const optional = vocabulary('optional', (field) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"optional.js","sourceRoot":"","sources":["../../../src/vocabulary/rule/optional.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAGnD;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAA4C,UAAU,CACzE,UAAU,EACV,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACV,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;IACnC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,KAAK,SAAS;QACvC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,UAAmB,EAAE,EAAE;QAChD,CAAC,CAAC,EAAE,CAAC;CACR,CAAC,CACH,CAAC"}
1
+ {"version":3,"file":"optional.js","sourceRoot":"","sources":["../../../src/vocabulary/rule/optional.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAGnD;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAA4C,UAAU,CACzE,UAAU,EACV,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACV,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;IACnC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,KAAK,SAAS;QACvC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,UAAmB,EAAE,EAAE;QAChD,CAAC,CAAC,EAAE,CAAC;CACR,CAAC,CACH,CAAC"}
@@ -1,7 +1,5 @@
1
1
  import { Field } from '../../field/Field.js';
2
2
  /**
3
- * Closes the way in, so the field leaves `Visibility.input` and every form derived from it.
4
- * FR : ferme l'entrée : le champ quitte `Visibility.input` et tout formulaire qui en dérive.
5
3
  * `readOnly(text())` → `boundary.in` is `'closed'`
6
4
  */
7
5
  export declare const readOnly: <T>(field: Field<T>) => Field<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"readOnly.d.ts","sourceRoot":"","sources":["../../../src/vocabulary/rule/readOnly.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7C;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAKrD,CAAC"}
1
+ {"version":3,"file":"readOnly.d.ts","sourceRoot":"","sources":["../../../src/vocabulary/rule/readOnly.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAKrD,CAAC"}
@@ -1,8 +1,6 @@
1
1
  import { vocabulary } from '../vocabulary.js';
2
2
  import { Boundary } from '../../axis/boundary/Boundary.js';
3
3
  /**
4
- * Closes the way in, so the field leaves `Visibility.input` and every form derived from it.
5
- * FR : ferme l'entrée : le champ quitte `Visibility.input` et tout formulaire qui en dérive.
6
4
  * `readOnly(text())` → `boundary.in` is `'closed'`
7
5
  */
8
6
  export const readOnly = vocabulary('readOnly', (field) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"readOnly.js","sourceRoot":"","sources":["../../../src/vocabulary/rule/readOnly.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAqC,UAAU,CAClE,UAAU,EACV,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;CAC/D,CAAC,CACH,CAAC"}
1
+ {"version":3,"file":"readOnly.js","sourceRoot":"","sources":["../../../src/vocabulary/rule/readOnly.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG3D;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAqC,UAAU,CAClE,UAAU,EACV,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;CAC/D,CAAC,CACH,CAAC"}
@@ -1,7 +1,5 @@
1
1
  import { Field } from '../../field/Field.js';
2
2
  /**
3
- * Closes the way out, the dual of `readOnly`: the value is written and never sent back.
4
- * FR : ferme la sortie, dual de `readOnly` : la valeur s'écrit et ne repart jamais.
5
3
  * `writeOnly(text())` → `boundary.out` is `'closed'`
6
4
  */
7
5
  export declare const writeOnly: <T>(field: Field<T>) => Field<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"writeOnly.d.ts","sourceRoot":"","sources":["../../../src/vocabulary/rule/writeOnly.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7C;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAKtD,CAAC"}
1
+ {"version":3,"file":"writeOnly.d.ts","sourceRoot":"","sources":["../../../src/vocabulary/rule/writeOnly.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAKtD,CAAC"}
@@ -1,8 +1,6 @@
1
1
  import { vocabulary } from '../vocabulary.js';
2
2
  import { Boundary } from '../../axis/boundary/Boundary.js';
3
3
  /**
4
- * Closes the way out, the dual of `readOnly`: the value is written and never sent back.
5
- * FR : ferme la sortie, dual de `readOnly` : la valeur s'écrit et ne repart jamais.
6
4
  * `writeOnly(text())` → `boundary.out` is `'closed'`
7
5
  */
8
6
  export const writeOnly = vocabulary('writeOnly', (field) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"writeOnly.js","sourceRoot":"","sources":["../../../src/vocabulary/rule/writeOnly.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAqC,UAAU,CACnE,WAAW,EACX,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;CAChE,CAAC,CACH,CAAC"}
1
+ {"version":3,"file":"writeOnly.js","sourceRoot":"","sources":["../../../src/vocabulary/rule/writeOnly.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG3D;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAqC,UAAU,CACnE,WAAW,EACX,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;CAChE,CAAC,CACH,CAAC"}
@@ -1,9 +1,8 @@
1
1
  import { Field } from '../field/Field.js';
2
2
  /**
3
- * Builds a `rule/` word, which states members on the field it receives.
4
- * FR : fabrique un mot de `rule/`, qui énonce des membres sur le champ reçu.
3
+ * Builds a `rule/` word
5
4
  * `vocabulary('indexed', () => ({ role: { index: true } }))`
6
5
  */
7
- export declare function vocabulary(name: string, states: (field: Field) => Partial<Field>): FieldWord;
6
+ export declare function vocabulary(word: string, states: (field: Field) => Partial<Field>): FieldWord;
8
7
  export type FieldWord = (field: Field<any>) => Field<any>;
9
8
  //# sourceMappingURL=vocabulary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vocabulary.d.ts","sourceRoot":"","sources":["../../src/vocabulary/vocabulary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAO1C;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,GACvC,SAAS,CAEX;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"vocabulary.d.ts","sourceRoot":"","sources":["../../src/vocabulary/vocabulary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAyB,MAAM,mBAAmB,CAAC;AAKjE;;;GAGG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,GACvC,SAAS,CAEX;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC"}
@@ -1,41 +1,39 @@
1
- import { EXTENSION_SLOTS } from '../axis/Axis.js';
1
+ import { Axes } from '../axis/Axes.js';
2
2
  import { dequal } from 'dequal';
3
3
  import { SchemaError } from '../SchemaError.js';
4
- const MEMBER_SLOTS = [...EXTENSION_SLOTS, 'meta'];
5
4
  /**
6
- * Builds a `rule/` word, which states members on the field it receives.
7
- * FR : fabrique un mot de `rule/`, qui énonce des membres sur le champ reçu.
5
+ * Builds a `rule/` word
8
6
  * `vocabulary('indexed', () => ({ role: { index: true } }))`
9
7
  */
10
- export function vocabulary(name, states) {
11
- return (field) => field.with(merge(name, field, states(field)));
8
+ export function vocabulary(word, states) {
9
+ return (field) => field.with(merge(word, field, states(field)));
12
10
  }
13
11
  /**
14
- * Refuses two words stating one member differently, rather than letting the outer win.
15
- * FR : refuse deux mots qui énoncent un même membre différemment.
16
- * `readOnly(writeOnly(text()))` → both apply; `immutable(created())` → throws
12
+ * Refuses two words stating one member DIFFERENTLY, rather than letting the outer win.
13
+ * `readOnly(writeOnly(text()))` → both apply, they write two members; `immutable(created())`
14
+ * too, since both say `update: 'forbidden'`; `immutable(updated())` → throws.
17
15
  */
18
- function merge(name, field, given) {
16
+ function merge(word, field, changes) {
19
17
  const merged = {};
20
- if ('shape' in given)
21
- merged.shape = given.shape;
22
- for (const slot of MEMBER_SLOTS) {
23
- const members = given[slot];
18
+ if ('shape' in changes)
19
+ merged.shape = changes.shape;
20
+ for (const name of Axes.names) {
21
+ const members = changes[name];
24
22
  if (members === undefined)
25
23
  continue;
26
- const already = field[slot];
27
- if (typeof members !== 'object' || members === null || typeof already !== 'object') {
28
- merged[slot] = members;
24
+ const already = field.axis(name);
25
+ if (typeof members !== 'object' || members === null || typeof already !== 'object' || already === null) {
26
+ merged[name] = members;
29
27
  continue;
30
28
  }
31
29
  for (const [member, value] of Object.entries(members)) {
32
- const previous = already?.[member];
30
+ const previous = already[member];
33
31
  if (previous === undefined || dequal(previous, value))
34
32
  continue;
35
- throw new SchemaError(`vocabulary: \`${name}\` states ${slot}.${member} = ${JSON.stringify(value)}, but the ` +
33
+ throw new SchemaError(`vocabulary: \`${word}\` states ${name}.${member} = ${JSON.stringify(value)}, but the ` +
36
34
  `field already states ${JSON.stringify(previous)}. Apply one or the other, not both.`);
37
35
  }
38
- merged[slot] = { ...already, ...members };
36
+ merged[name] = { ...already, ...members };
39
37
  }
40
38
  return merged;
41
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vocabulary.js","sourceRoot":"","sources":["../../src/vocabulary/vocabulary.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,YAAY,GAAG,CAAC,GAAG,eAAe,EAAE,MAAM,CAAU,CAAC;AAE3D;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,MAAwC;IAExC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAID;;;;GAIG;AACH,SAAS,KAAK,CAAC,IAAY,EAAE,KAAY,EAAE,KAAqB;IAC9D,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,IAAI,OAAO,IAAI,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAEjD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,OAAO,KAAK,SAAS;YAAE,SAAS;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAwC,CAAC;QACnE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACnF,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;YACvB,SAAS;QACX,CAAC;QACD,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACtD,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC;gBAAE,SAAS;YAChE,MAAM,IAAI,WAAW,CACnB,iBAAiB,IAAI,aAAa,IAAI,IAAI,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY;gBACrF,wBAAwB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,qCAAqC,CACxF,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,MAAwB,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"vocabulary.js","sourceRoot":"","sources":["../../src/vocabulary/vocabulary.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,MAAwC;IAExC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAID;;;;GAIG;AACH,SAAS,KAAK,CAAC,IAAY,EAAE,KAAY,EAAE,OAAkC;IAC3E,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,IAAI,OAAO,IAAI,OAAO;QAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAErD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAmC,EAAE,CAAC;QAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,OAAO,KAAK,SAAS;YAAE,SAAS;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACvG,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;YACvB,SAAS;QACX,CAAC;QACD,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACtD,MAAM,QAAQ,GAAI,OAAmC,CAAC,MAAM,CAAC,CAAC;YAC9D,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC;gBAAE,SAAS;YAChE,MAAM,IAAI,WAAW,CACnB,iBAAiB,IAAI,aAAa,IAAI,IAAI,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY;gBACrF,wBAAwB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,qCAAqC,CACxF,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IAC5C,CAAC;IAED,OAAO,MAAwB,CAAC;AAClC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fougere/schema",
3
- "version": "0.12.0-alpha.0",
3
+ "version": "0.12.2-alpha.0",
4
4
  "description": "The entity and its 4 axes — shape, role, lifecycle, boundary. Subject-owned judgments, edge-safe.",
5
5
  "keywords": [
6
6
  "fougere",
@@ -0,0 +1,2 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
2
+ export interface FougereFieldAxes {}
package/src/Schema.ts CHANGED
@@ -2,7 +2,7 @@ import type { StandardSchemaV1 } from '@standard-schema/spec';
2
2
 
3
3
  import { Boundary } from './axis/boundary/Boundary.js';
4
4
  import { type Fields } from './field/Fields.js';
5
- import { type CompositeUnique } from './entity/CompositeUnique.js';
5
+ import { type FieldGroups } from './entity/FieldGroups.js';
6
6
  import { type EntityDeclarations } from './entity/EntityDeclarations.js';
7
7
  import { type PreviousNames } from './entity/PreviousNames.js';
8
8
  import { type EntityAdapters } from './entity/EntityAdapters.js';
@@ -16,6 +16,7 @@ import type { SchemaView } from './SchemaView.js';
16
16
 
17
17
  import type { SchemaConstructor } from './SchemaConstructor.js';
18
18
  import { SchemaError } from './SchemaError.js';
19
+ import type { UnionToIntersection } from './lib/UnionToIntersection.js';
19
20
 
20
21
  export const ANONYMOUS_SCHEMA_NAME = 'Schema';
21
22
 
@@ -53,9 +54,13 @@ export class Schema {
53
54
  static getAdapters(): EntityAdapters<Fields> {
54
55
  return this.definition.adapterSet.adapters;
55
56
  }
56
- static getUnique(): CompositeUnique<Fields> | undefined {
57
+ static getUnique(): FieldGroups<Fields> | undefined {
57
58
  return this.definition.constraints.unique;
58
59
  }
60
+
61
+ static getIndex(): FieldGroups<Fields> | undefined {
62
+ return this.definition.constraints.index;
63
+ }
59
64
  static getOpts(): ValidateOptions {
60
65
  return this.definition.opts;
61
66
  }
@@ -78,6 +83,7 @@ export class Schema {
78
83
  const decoded = Boundary.of(field).decode(value);
79
84
  row[key] = 'message' in decoded ? value : decoded.value;
80
85
  }
86
+
81
87
  return row;
82
88
  }
83
89
 
@@ -90,6 +96,7 @@ export class Schema {
90
96
  validate(value: unknown) {
91
97
  const verdict = InputValidator.of(fields, opts).validate(value);
92
98
  if (verdict.success) return { value: verdict.data };
99
+
93
100
  return {
94
101
  issues: verdict.errors.map((e) => ({
95
102
  message: e.message,
@@ -138,6 +145,7 @@ export class Schema {
138
145
  );
139
146
  }
140
147
  Object.defineProperty(this, 'name', { value: name, configurable: true });
148
+
141
149
  return this;
142
150
  }
143
151
 
@@ -168,16 +176,11 @@ export class Schema {
168
176
  value: ANONYMOUS_SCHEMA_NAME,
169
177
  configurable: true,
170
178
  });
179
+
171
180
  return Derived as unknown as SchemaConstructor<Fields>;
172
181
  }
173
182
  }
174
183
 
175
- type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (
176
- k: infer I,
177
- ) => void
178
- ? I
179
- : never;
180
-
181
184
  type Merged<T extends SchemaView[]> = UnionToIntersection<
182
185
  T[number] extends { getFields(): infer F } ? F : Fields
183
186
  > &
@@ -1,19 +1,21 @@
1
1
  import { type FieldName } from './field/FieldName.js';
2
2
  import { type Fields } from './field/Fields.js';
3
- import { type CompositeUnique } from './entity/CompositeUnique.js';
3
+ import { type FieldGroups } from './entity/FieldGroups.js';
4
4
 
5
5
  /**
6
- * What a schema constrains beyond any single field.
7
- *
8
- * `unique` is the one member today. It sits under an owner rather than beside `fields`
9
- * and `opts` because the next rule spanning two fields — a check, an exclusion — is a
10
- * member here, not an eighth positional argument in a list that has already lost one.
6
+ * What a schema states beyond any single field: groups of names. `unique` constrains the
7
+ * rows, `index` says how they are reached — two decisions, and neither implies the other.
8
+ * They sit under an owner rather than beside `fields` and `opts` because the next rule
9
+ * spanning two fields — a check, an exclusion — is a member here, not an eighth positional
10
+ * argument in a list that has already lost one.
11
11
  */
12
12
  export class SchemaConstraints<TFields extends Fields = Fields> {
13
- readonly unique?: CompositeUnique<TFields>;
13
+ readonly unique?: FieldGroups<TFields>;
14
+ readonly index?: FieldGroups<TFields>;
14
15
 
15
- private constructor(unique?: CompositeUnique<TFields>) {
16
+ private constructor(unique?: FieldGroups<TFields>, index?: FieldGroups<TFields>) {
16
17
  if (unique) this.unique = unique;
18
+ if (index) this.index = index;
17
19
  }
18
20
 
19
21
  static readonly none = new SchemaConstraints();
@@ -24,23 +26,39 @@ export class SchemaConstraints<TFields extends Fields = Fields> {
24
26
  * `SchemaConstraints.of([['a','b'], ['a','b']])` → `unique` holds one group
25
27
  */
26
28
  static of<TFields extends Fields>(
27
- groups: readonly (readonly FieldName<TFields>[])[],
29
+ groups: { unique?: FieldGroups<TFields>; index?: FieldGroups<TFields> },
28
30
  ): SchemaConstraints<TFields> {
29
- const seen = new Map<string, readonly FieldName<TFields>[]>();
30
- for (const group of groups) seen.set(JSON.stringify(group), group);
31
-
32
- return new SchemaConstraints(seen.size ? [...seen.values()] : undefined);
31
+ return new SchemaConstraints(deduped(groups.unique), deduped(groups.index));
33
32
  }
34
33
 
35
- /** One member gone and the group is gone: it constrained a pair that no longer exists. */
34
+ /** One member gone and the group is gone: it named a pair that no longer exists. */
36
35
  renamed(transform: (key: string) => string | undefined): SchemaConstraints {
37
- if (!this.unique) return SchemaConstraints.none;
38
- const kept: string[][] = [];
39
- for (const group of this.unique) {
40
- const renamed = group.map(transform);
41
- if (renamed.every((key): key is string => key !== undefined)) kept.push(renamed);
42
- }
43
-
44
- return SchemaConstraints.of(kept);
36
+ return SchemaConstraints.of({
37
+ unique: survivors(this.unique, transform),
38
+ index: survivors(this.index, transform),
39
+ });
45
40
  }
46
41
  }
42
+
43
+ const deduped = <TFields extends Fields>(
44
+ groups?: FieldGroups<TFields>,
45
+ ): FieldGroups<TFields> | undefined => {
46
+ if (!groups) return undefined;
47
+ const seen = new Map<string, readonly FieldName<TFields>[]>();
48
+ for (const group of groups) seen.set(JSON.stringify(group), group);
49
+
50
+ return seen.size ? [...seen.values()] : undefined;
51
+ };
52
+
53
+ const survivors = (
54
+ groups: FieldGroups<Fields> | undefined,
55
+ transform: (key: string) => string | undefined,
56
+ ): string[][] => {
57
+ const kept: string[][] = [];
58
+ for (const group of groups ?? []) {
59
+ const renamed = group.map(transform);
60
+ if (renamed.every((key): key is string => key !== undefined)) kept.push(renamed);
61
+ }
62
+
63
+ return kept;
64
+ };