@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShapeFormat.d.ts","sourceRoot":"","sources":["../../../src/axis/shape/ShapeFormat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAUrD;;;;;GAKG;AACH,eAAO,MAAM,YAAY,eAmBX,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { Format } from '../../lib/Format.js';
2
+ import { SHAPE_TYPES } from './Shape.js';
3
+ const SHAPE = 'field/shape';
4
+ /** A word, or that word beside `null` — the second place is what makes a shape nullable. */
5
+ const TYPE = Format.either(Format.tokens(SHAPE_TYPES), Format.tuple(Format.tokens(SHAPE_TYPES), Format.tokens(['null'])));
6
+ /**
7
+ * What a shape may state — JSON Schema's own keywords, less the ones this package has no word
8
+ * for. `shape` used to be the one key of a field declaration nothing judged, so `minLenght: 1`
9
+ * passed and was dropped where `lifecycle: { craete: 'now' }` had been refused since `Format`.
10
+ * `properties` stays open because a projection folds `meta.description` into it.
11
+ */
12
+ export const SHAPE_FORMAT = Format.of(SHAPE)
13
+ .key('type', TYPE)
14
+ .key('description', Format.text)
15
+ .key('minLength', Format.count)
16
+ .key('maxLength', Format.count)
17
+ .key('pattern', Format.text)
18
+ .key('format', Format.text)
19
+ .key('enum', Format.listOf(Format.anything))
20
+ .key('minimum', Format.number)
21
+ .key('maximum', Format.number)
22
+ .key('items', Format.ref(SHAPE))
23
+ .key('minItems', Format.count)
24
+ .key('maxItems', Format.count)
25
+ .key('properties', Format.anything)
26
+ .key('required', Format.listOf(Format.text))
27
+ .key('additionalProperties', Format.anything)
28
+ .key('propertyNames', Format.ref(SHAPE))
29
+ .needs('type')
30
+ .closed()
31
+ .as();
32
+ //# sourceMappingURL=ShapeFormat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShapeFormat.js","sourceRoot":"","sources":["../../../src/axis/shape/ShapeFormat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAc,MAAM,YAAY,CAAC;AAErD,MAAM,KAAK,GAAG,aAAa,CAAC;AAE5B,4FAA4F;AAC5F,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CACxB,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAC1B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAClE,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;KACzC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;KACjB,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC;KAC/B,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC;KAC9B,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC;KAC9B,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC;KAC3B,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC;KAC1B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC3C,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;KAC7B,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;KAC7B,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC/B,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC;KAC7B,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC;KAC7B,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC;KAClC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC3C,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,QAAQ,CAAC;KAC5C,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACvC,KAAK,CAAC,MAAM,CAAC;KACb,MAAM,EAAE;KACR,EAAE,EAAS,CAAC"}
@@ -4,7 +4,7 @@ import type { FormatPredicate } from './FormatPredicate.js';
4
4
  * String formats the JSON Schema engine does not know. `find` answers `undefined` for
5
5
  * `email` or `uuid`, which it validates on its own.
6
6
  * FR : les formats de chaîne que le moteur ignore ; `find` rend `undefined` pour les siens.
7
- * `Formats.register('siret', (v) => /^\d{14}$/.test(v))`
7
+ * `StringFormats.register('siret', (v) => /^\d{14}$/.test(v))`
8
8
  */
9
- export declare const Formats: Registry<FormatPredicate>;
10
- //# sourceMappingURL=Formats.d.ts.map
9
+ export declare const StringFormats: Registry<FormatPredicate>;
10
+ //# sourceMappingURL=StringFormats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StringFormats.d.ts","sourceRoot":"","sources":["../../../src/axis/shape/StringFormats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,aAAa,2BAA0C,CAAC"}
@@ -3,7 +3,7 @@ import { Registry } from '../../lib/Registry.js';
3
3
  * String formats the JSON Schema engine does not know. `find` answers `undefined` for
4
4
  * `email` or `uuid`, which it validates on its own.
5
5
  * FR : les formats de chaîne que le moteur ignore ; `find` rend `undefined` pour les siens.
6
- * `Formats.register('siret', (v) => /^\d{14}$/.test(v))`
6
+ * `StringFormats.register('siret', (v) => /^\d{14}$/.test(v))`
7
7
  */
8
- export const Formats = new Registry('format');
9
- //# sourceMappingURL=Formats.js.map
8
+ export const StringFormats = new Registry('format');
9
+ //# sourceMappingURL=StringFormats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StringFormats.js","sourceRoot":"","sources":["../../../src/axis/shape/StringFormats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAkB,QAAQ,CAAC,CAAC"}
@@ -1,10 +1,11 @@
1
1
  import type { Fields } from '../field/Fields.js';
2
2
  import type { EntityAdapters } from './EntityAdapters.js';
3
- import type { CompositeUnique } from './CompositeUnique.js';
3
+ import type { FieldGroups } from './FieldGroups.js';
4
4
  import type { PreviousNames } from './PreviousNames.js';
5
5
  export interface EntityDeclarations<TFields extends Fields> {
6
6
  adapters?: EntityAdapters<TFields>;
7
7
  previous?: PreviousNames<TFields>;
8
- unique?: CompositeUnique<TFields>;
8
+ unique?: FieldGroups<TFields>;
9
+ index?: FieldGroups<TFields>;
9
10
  }
10
11
  //# sourceMappingURL=EntityDeclarations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityDeclarations.d.ts","sourceRoot":"","sources":["../../src/entity/EntityDeclarations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,kBAAkB,CAAC,OAAO,SAAS,MAAM;IACxD,QAAQ,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;CACnC"}
1
+ {"version":3,"file":"EntityDeclarations.d.ts","sourceRoot":"","sources":["../../src/entity/EntityDeclarations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,kBAAkB,CAAC,OAAO,SAAS,MAAM;IACxD,QAAQ,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CAC9B"}
@@ -0,0 +1,9 @@
1
+ import type { FieldName } from '../field/FieldName.js';
2
+ import type { Fields } from '../field/Fields.js';
3
+ /**
4
+ * Field names grouped, as `unique` and `index` both are — `[['listId', 'docId'], ['slug']]`.
5
+ * The ORDER inside a group counts for both: a unique constraint on `(a, b)` is not the one on
6
+ * `(b, a)`, and an index on `(a, b)` serves a filter on `a` alone and never on `b` alone.
7
+ */
8
+ export type FieldGroups<TFields extends Fields> = readonly (readonly FieldName<TFields>[])[];
9
+ //# sourceMappingURL=FieldGroups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldGroups.d.ts","sourceRoot":"","sources":["../../src/entity/FieldGroups.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,OAAO,SAAS,MAAM,IAAI,SAAS,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=FieldGroups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldGroups.js","sourceRoot":"","sources":["../../src/entity/FieldGroups.ts"],"names":[],"mappings":""}
@@ -1,20 +1,45 @@
1
1
  import type { Shape } from '../axis/shape/Shape.js';
2
- import type { RoleRules } from '../axis/role/RoleRules.js';
3
- import type { LifecycleRules } from '../axis/lifecycle/LifecycleRules.js';
4
- import type { BoundaryRef } from '../axis/boundary/BoundaryRef.js';
5
- import type { Meta } from './Meta.js';
6
- import type { Axis } from '../axis/Axis.js';
7
- type FieldDeclaration = Pick<Field, 'shape' | Axis['slot'] | 'meta'>;
2
+ import type { FougereFieldAxes } from '../FougereFieldAxes.js';
3
+ /** The sentence any word admits, whatever it shapes — a relation and a date carry one too. */
4
+ export interface Described {
5
+ description?: string;
6
+ }
7
+ /** And a value it is born with, for the words that shape one. `many()` has none to hold. */
8
+ export interface Shared<T> extends Described {
9
+ default?: T;
10
+ }
11
+ export interface FieldDeclaration extends FougereFieldAxes {
12
+ shape: Shape;
13
+ }
14
+ /**
15
+ * The axes it carries are `FougereFieldAxes`, which each axis writes its own line in — so the
16
+ * three of the core are typed the way a fourth declared outside is, and the class names what
17
+ * the registry decides only once, in the constructor.
18
+ */
19
+ export interface Field<T = unknown> extends FougereFieldAxes {
20
+ readonly _type?: T;
21
+ }
8
22
  export declare class Field<T = unknown> {
9
23
  readonly shape: Shape;
10
- readonly role?: RoleRules;
11
- readonly lifecycle?: LifecycleRules;
12
- readonly boundary?: BoundaryRef;
13
- readonly meta?: Meta;
14
- readonly _type?: T;
15
24
  constructor(init: FieldDeclaration, key?: string);
16
25
  static is(value: unknown): value is Field;
26
+ /**
27
+ * What this field declares on ONE axis, a fourth one registered outside included. An axis is
28
+ * a member, so it is read by NAME, and three callers reached for it through a cast of their
29
+ * own before this existed.
30
+ */
31
+ axis(name: keyof FieldDeclaration): unknown;
32
+ /** Every axis it declares, and nothing for the ones it says nothing on. */
33
+ get axes(): Record<string, unknown>;
34
+ /** Whether it states anything at all beside its shape. */
35
+ hasAxes(): boolean;
17
36
  with<U = T>(overrides: Partial<FieldDeclaration>): Field<U>;
37
+ /**
38
+ * What a word admits whatever its shape, and where it lands: `description` IS a JSON Schema
39
+ * keyword, `default` IS a lifecycle rule. Stated here alone, so no word writes the conversion.
40
+ * FR : ce que tout mot admet quelle que soit sa forme, et où ça atterrit.
41
+ * `text({ max: 200 }).setShared({ description: 'The title' })` → `shape.description`
42
+ */
43
+ setShared(opts?: Shared<T>): Field<T>;
18
44
  }
19
- export {};
20
45
  //# sourceMappingURL=Field.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/field/Field.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAM5C,KAAK,gBAAgB,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAErE,qBAAa,KAAK,CAAC,CAAC,GAAG,OAAO;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAErB,SAAiB,KAAK,CAAC,EAAE,CAAC,CAAC;IAE3B,YAAY,IAAI,EAAE,gBAAgB,EAAE,GAAG,CAAC,EAAE,MAAM,EAyB/C;IAED,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAExC;IAED,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAE1D;CACF"}
1
+ {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/field/Field.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAO/D,8FAA8F;AAC9F,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,4FAA4F;AAC5F,MAAM,WAAW,MAAM,CAAC,CAAC,CAAE,SAAQ,SAAS;IAC1C,OAAO,CAAC,EAAE,CAAC,CAAC;CACb;AAED,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,KAAK,EAAE,KAAK,CAAC;CACd;AAcD;;;;GAIG;AACH,MAAM,WAAW,KAAK,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,gBAAgB;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;CACpB;AAED,qBAAa,KAAK,CAAC,CAAC,GAAG,OAAO;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAEtB,YAAY,IAAI,EAAE,gBAAgB,EAAE,GAAG,CAAC,EAAE,MAAM,EA2B/C;IAED,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAExC;IAED;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,gBAAgB,GAAG,OAAO,CAE1C;IAED,2EAA2E;IAC3E,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMlC;IAED,0DAA0D;IAC1D,OAAO,IAAI,OAAO,CAEjB;IAED,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAE1D;IAED;;;;;OAKG;IACH,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAepC;CACF"}
@@ -1,13 +1,21 @@
1
+ import { Axes } from '../axis/Axes.js';
1
2
  import { FieldDeclarationValidator } from '../validator/FieldDeclarationValidator.js';
2
3
  import { FieldValueValidator } from '../validator/FieldValueValidator.js';
4
+ import { isObject } from '../lib/utils.js';
3
5
  import { dotted } from '../lib/ValidationResult.js';
4
6
  import { SchemaError } from '../SchemaError.js';
7
+ /**
8
+ * Every word ends on `setShared`, so the options are read in ONE place and refused there.
9
+ * `text(42)` used to pass for a bare `text()`, and nine of the twelve words took it.
10
+ */
11
+ const refuseLooseOptions = (opts) => {
12
+ if (!isObject(opts))
13
+ throw new SchemaError('Options must go in an object, like { max: 200 }', { received: opts });
14
+ };
15
+ /** The registry answers strings, and a member of a declaration is what they name. */
16
+ const registered = () => Axes.names;
5
17
  export class Field {
6
18
  shape;
7
- role;
8
- lifecycle;
9
- boundary;
10
- meta;
11
19
  constructor(init, key) {
12
20
  const verdict = FieldDeclarationValidator.of(init).verdict;
13
21
  if (!verdict.success) {
@@ -15,10 +23,11 @@ export class Field {
15
23
  verdict.errors.map((e) => `${dotted(e.path)}: ${e.message}`).join('; '));
16
24
  }
17
25
  this.shape = init.shape;
18
- this.role = init.role;
19
- this.lifecycle = init.lifecycle;
20
- this.boundary = init.boundary;
21
- this.meta = init.meta;
26
+ for (const name of registered()) {
27
+ Object.defineProperty(this, name, {
28
+ value: init[name], writable: true, enumerable: true, configurable: true,
29
+ });
30
+ }
22
31
  const create = this.lifecycle?.create;
23
32
  if (typeof create === 'object' && create !== null && 'value' in create) {
24
33
  const checked = FieldValueValidator.of(this).validate(create.value);
@@ -30,8 +39,46 @@ export class Field {
30
39
  static is(value) {
31
40
  return FieldDeclarationValidator.of(value).verdict.success;
32
41
  }
42
+ /**
43
+ * What this field declares on ONE axis, a fourth one registered outside included. An axis is
44
+ * a member, so it is read by NAME, and three callers reached for it through a cast of their
45
+ * own before this existed.
46
+ */
47
+ axis(name) {
48
+ return this[name];
49
+ }
50
+ /** Every axis it declares, and nothing for the ones it says nothing on. */
51
+ get axes() {
52
+ return Object.fromEntries(registered()
53
+ .map((name) => [name, this.axis(name)])
54
+ .filter(([, declared]) => declared !== undefined));
55
+ }
56
+ /** Whether it states anything at all beside its shape. */
57
+ hasAxes() {
58
+ return registered().some((name) => this.axis(name) !== undefined);
59
+ }
33
60
  with(overrides) {
34
61
  return new Field({ ...this, ...overrides });
35
62
  }
63
+ /**
64
+ * What a word admits whatever its shape, and where it lands: `description` IS a JSON Schema
65
+ * keyword, `default` IS a lifecycle rule. Stated here alone, so no word writes the conversion.
66
+ * FR : ce que tout mot admet quelle que soit sa forme, et où ça atterrit.
67
+ * `text({ max: 200 }).setShared({ description: 'The title' })` → `shape.description`
68
+ */
69
+ setShared(opts) {
70
+ if (opts === undefined)
71
+ return this;
72
+ refuseLooseOptions(opts);
73
+ const overrides = {
74
+ ...(opts.description !== undefined
75
+ ? { shape: { ...this.shape, description: opts.description } }
76
+ : {}),
77
+ ...(opts.default !== undefined
78
+ ? { lifecycle: { ...this.lifecycle, create: { value: opts.default } } }
79
+ : {}),
80
+ };
81
+ return Object.keys(overrides).length ? this.with(overrides) : this;
82
+ }
36
83
  }
37
84
  //# sourceMappingURL=Field.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Field.js","sourceRoot":"","sources":["../../src/field/Field.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,MAAM,OAAO,KAAK;IACP,KAAK,CAAQ;IACb,IAAI,CAAa;IACjB,SAAS,CAAkB;IAC3B,QAAQ,CAAe;IACvB,IAAI,CAAQ;IAIrB,YAAY,IAAsB,EAAE,GAAY;QAC9C,MAAM,OAAO,GAAG,yBAAyB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;QAE3D,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,WAAW,CACnB,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBAChC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC1E,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEtB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;QACtC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACvE,MAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpE,IAAI,SAAS,IAAI,OAAO;gBACtB,MAAM,IAAI,WAAW,CACnB,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,wBAAwB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG;oBACrF,iCAAiC,OAAO,CAAC,OAAO,GAAG,CACtD,CAAC;QACN,CAAC;IACH,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,KAAc;QACtB,OAAO,yBAAyB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAC7D,CAAC;IAED,IAAI,CAAQ,SAAoC;QAC9C,OAAO,IAAI,KAAK,CAAI,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;IACjD,CAAC;CACF"}
1
+ {"version":3,"file":"Field.js","sourceRoot":"","sources":["../../src/field/Field.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Axis } from '../axis/Axis.js';
2
+ import type { JsonSchema } from '../lib/JsonSchema.js';
3
+ /**
4
+ * What a field may state, composed from the keys that state a format: each is carried whole and
5
+ * cited by its `$id`, so the document travels alone and a key keeps its own identity. `shape` is
6
+ * cited like the rest — it is JSON Schema, and JSON Schema is what states its keywords.
7
+ */
8
+ export declare function fieldFormat(axes: readonly [string, Axis][]): JsonSchema;
9
+ //# sourceMappingURL=FieldFormat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldFormat.d.ts","sourceRoot":"","sources":["../../src/field/FieldFormat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,UAAU,CAOvE"}
@@ -0,0 +1,12 @@
1
+ import { Format } from '../lib/Format.js';
2
+ import { SHAPE_FORMAT } from '../axis/shape/ShapeFormat.js';
3
+ /**
4
+ * What a field may state, composed from the keys that state a format: each is carried whole and
5
+ * cited by its `$id`, so the document travels alone and a key keeps its own identity. `shape` is
6
+ * cited like the rest — it is JSON Schema, and JSON Schema is what states its keywords.
7
+ */
8
+ export function fieldFormat(axes) {
9
+ const document = axes.reduce((held, [name, axis]) => held.cites(name, axis.format), Format.of('field').cites('shape', SHAPE_FORMAT));
10
+ return document.closed().schema;
11
+ }
12
+ //# sourceMappingURL=FieldFormat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldFormat.js","sourceRoot":"","sources":["../../src/field/FieldFormat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAA+B;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAC1B,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EACrD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAChD,CAAC;IAEF,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAoB,CAAC;AAChD,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { CompositeUnique } from '../entity/CompositeUnique.js';
1
+ import type { FieldGroups } from '../entity/FieldGroups.js';
2
2
  import { type FieldName } from './FieldName.js';
3
3
  import { type Fields } from './Fields.js';
4
4
  export declare class FieldSet<TFields extends Fields = Fields> {
@@ -10,9 +10,18 @@ export declare class FieldSet<TFields extends Fields = Fields> {
10
10
  * FR : partage un `unique` déclaré : un groupe d'un va au champ, plusieurs restent au schéma.
11
11
  * `declaring(fields, [['email'], ['listId', 'docId']])` → `email` carries it, the pair is a group
12
12
  */
13
- static declaring<TFields extends Fields>(declared: TFields, unique?: CompositeUnique<TFields>): {
13
+ /**
14
+ * A group of ONE is the word on the field — `unique: [['slug']]` is `unique(text())` — so it
15
+ * is written there and never kept as a group, which is what lets a derivation drop it with
16
+ * its field. A group of several is what no single field can state, and it is kept whole.
17
+ */
18
+ static declaring<TFields extends Fields>(declared: TFields, groups?: {
19
+ unique?: FieldGroups<TFields>;
20
+ index?: FieldGroups<TFields>;
21
+ }): {
14
22
  fields: TFields;
15
- groups: CompositeUnique<TFields>;
23
+ unique: FieldGroups<TFields>;
24
+ index: FieldGroups<TFields>;
16
25
  };
17
26
  /** A second `primary` is refused, naming both, rather than the first winning silently. */
18
27
  get primary(): FieldName<TFields> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"FieldSet.d.ts","sourceRoot":"","sources":["../../src/field/FieldSet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,qBAAa,QAAQ,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAA3C,OAAO,eAAiD;IAExD,MAAM,CAAC,EAAE,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAEpE;IAED;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,OAAO,SAAS,MAAM,EACrC,QAAQ,EAAE,OAAO,EACjB,MAAM,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,GAChC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;KAAE,CAwBvD;IAED,0FAA0F;IAC1F,IAAI,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,CAa5C;CAEF"}
1
+ {"version":3,"file":"FieldSet.d.ts","sourceRoot":"","sources":["../../src/field/FieldSet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,qBAAa,QAAQ,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAA3C,OAAO,eAAiD;IAExD,MAAM,CAAC,EAAE,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAEpE;IAED;;;;OAIG;IACH;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,OAAO,SAAS,MAAM,EACrC,QAAQ,EAAE,OAAO,EACjB,MAAM,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;KAAO,GAC3E;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;KAAE,CA2BhF;IAED,0FAA0F;IAC1F,IAAI,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,CAa5C;CAEF"}
@@ -14,30 +14,37 @@ export class FieldSet {
14
14
  * FR : partage un `unique` déclaré : un groupe d'un va au champ, plusieurs restent au schéma.
15
15
  * `declaring(fields, [['email'], ['listId', 'docId']])` → `email` carries it, the pair is a group
16
16
  */
17
- static declaring(declared, unique) {
17
+ /**
18
+ * A group of ONE is the word on the field — `unique: [['slug']]` is `unique(text())` — so it
19
+ * is written there and never kept as a group, which is what lets a derivation drop it with
20
+ * its field. A group of several is what no single field can state, and it is kept whole.
21
+ */
22
+ static declaring(declared, groups = {}) {
18
23
  const fields = {};
19
24
  for (const [key, field] of Object.entries(declared))
20
25
  fields[key] = new Field(field, key);
21
- const composite = [];
22
- for (const group of unique ?? []) {
23
- const missing = group.filter((key) => !Object.hasOwn(fields, key));
24
- if (missing.length)
25
- throw new SchemaError(`unique: [${group.join(', ')}] names ` +
26
- `${missing.map((key) => `'${key}'`).join(', ')}, which the entity does not declare.`);
27
- if (group.length === 1) {
28
- const key = group[0];
29
- const alone = fields[key];
30
- fields[key] = alone.with({ role: { ...alone.role, unique: true } });
31
- continue;
26
+ const composite = { unique: [], index: [] };
27
+ for (const kind of ['unique', 'index']) {
28
+ for (const group of groups[kind] ?? []) {
29
+ const missing = group.filter((key) => !Object.hasOwn(fields, key));
30
+ if (missing.length)
31
+ throw new SchemaError(`${kind}: [${group.join(', ')}] names ` +
32
+ `${missing.map((key) => `'${key}'`).join(', ')}, which the entity does not declare.`);
33
+ if (group.length === 1) {
34
+ const key = group[0];
35
+ const alone = fields[key];
36
+ fields[key] = alone.with({ role: { ...alone.role, [kind]: true } });
37
+ continue;
38
+ }
39
+ composite[kind].push([...group]);
32
40
  }
33
- composite.push([...group]);
34
41
  }
35
- return { fields: fields, groups: composite };
42
+ return { fields: fields, unique: composite.unique, index: composite.index };
36
43
  }
37
44
  /** A second `primary` is refused, naming both, rather than the first winning silently. */
38
45
  get primary() {
39
46
  const primaries = Object.entries(this.fields)
40
- .filter(([, field]) => Role.of(field).isPrimary)
47
+ .filter(([, field]) => Role.of(field).isPrimary())
41
48
  .map(([name]) => name);
42
49
  if (primaries.length > 1) {
43
50
  throw new SchemaError(`FieldSet.primary: ${primaries.map((name) => JSON.stringify(name)).join(', ')} all declare ` +
@@ -1 +1 @@
1
- {"version":3,"file":"FieldSet.js","sourceRoot":"","sources":["../../src/field/FieldSet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,QAAQ;IACkB,MAAM;IAA3C,YAAqC,MAAe;sBAAf,MAAM;IAAY,CAAC;IAExD,MAAM,CAAC,EAAE,CAAyB,MAAe;QAC/C,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,SAAS,CACd,QAAiB,EACjB,MAAiC;QAEjC,MAAM,MAAM,GAAW,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;YACjD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEtC,MAAM,SAAS,GAA2B,EAAE,CAAC;QAC7C,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;YACnE,IAAI,OAAO,CAAC,MAAM;gBAChB,MAAM,IAAI,WAAW,CACnB,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU;oBACpC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC,CACvF,CAAC;YAEJ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;gBACpE,SAAS;YACX,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,MAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC1D,CAAC;IAED,0FAA0F;IAC1F,IAAI,OAAO;QACT,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;aAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;aAC/C,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAEzB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,WAAW,CACnB,qBAAqB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe;gBAC1F,yDAAyD,CAC5D,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC,CAAC,CAAmC,CAAC;IACxD,CAAC;CAEF"}
1
+ {"version":3,"file":"FieldSet.js","sourceRoot":"","sources":["../../src/field/FieldSet.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -33,12 +33,16 @@ export type { Diff } from './projection/card/Diff.js';
33
33
  export type { SetDiff } from './projection/card/SetDiff.js';
34
34
  export type { SetDiffOptions } from './projection/card/SetDiffOptions.js';
35
35
  export * from './lib/index.js';
36
- export { Formats } from './axis/shape/Formats.js';
36
+ export { StringFormats } from './axis/shape/StringFormats.js';
37
37
  export { Generators } from './axis/lifecycle/Generators.js';
38
38
  export { Boundaries } from './axis/boundary/Decoder.js';
39
- export { Clock } from './axis/lifecycle/Clock.js';
40
39
  export { type FougereEntityAdapters } from './entity/FougereEntityAdapters.js';
40
+ export { type FougereFieldAxes } from './FougereFieldAxes.js';
41
41
  export { InputValidator } from './validator/InputValidator.js';
42
42
  export { FieldValueValidator } from './validator/FieldValueValidator.js';
43
- export { AdapterFieldValidator } from './validator/AdapterFieldValidator.js';
43
+ export { JsonSchemaValidator } from './validator/JsonSchemaValidator.js';
44
+ export type { JsonSchema } from './lib/JsonSchema.js';
45
+ export { Axes } from './axis/Axes.js';
46
+ export { Format } from './lib/Format.js';
47
+ export type { Axis } from './axis/Axis.js';
44
48
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,YAAY,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,YAAY,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,YAAY,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC1D,YAAY,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACtD,YAAY,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAE1E,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -17,11 +17,12 @@ export { Bundle } from './projection/card/Bundle.js';
17
17
  export { Visibility } from './projection/Visibility.js';
18
18
  export { Cases } from './projection/Cases.js';
19
19
  export * from './lib/index.js';
20
- export { Formats } from './axis/shape/Formats.js';
20
+ export { StringFormats } from './axis/shape/StringFormats.js';
21
21
  export { Generators } from './axis/lifecycle/Generators.js';
22
22
  export { Boundaries } from './axis/boundary/Decoder.js';
23
- export { Clock } from './axis/lifecycle/Clock.js';
24
23
  export { InputValidator } from './validator/InputValidator.js';
25
24
  export { FieldValueValidator } from './validator/FieldValueValidator.js';
26
- export { AdapterFieldValidator } from './validator/AdapterFieldValidator.js';
25
+ export { JsonSchemaValidator } from './validator/JsonSchemaValidator.js';
26
+ export { Axes } from './axis/Axes.js';
27
+ export { Format } from './lib/Format.js';
27
28
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG5D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAiB,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,MAAM,EAAyB,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAU9C,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG5D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAiB,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,MAAM,EAAyB,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAU9C,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,75 @@
1
+ import type { JsonSchema } from './JsonSchema.js';
2
+ type Stated = JsonSchema | boolean;
3
+ /** The values a format lets in, as a type — `Accepted<typeof Lifecycle.format>`. */
4
+ export type Accepted<F> = F extends Format<infer T> ? T : never;
5
+ /**
6
+ * How a format is written here: its keys, never its JSON Schema. `$id`, `$ref`, `$defs` and the
7
+ * closing are produced, and what it accepts is carried as a TYPE, so a declaration is stated once.
8
+ * FR : on écrit les clés d'un format ; le document et le type sont produits.
9
+ * `Format.of('axis/tenancy').key('scope', Format.tokens(SCOPES)).closed()`
10
+ */
11
+ export declare class Format<T = unknown> {
12
+ private readonly stated;
13
+ readonly id?: string | undefined;
14
+ static readonly anything: Format<unknown>;
15
+ static readonly text: Format<string>;
16
+ static readonly flag: Format<boolean>;
17
+ static readonly number: Format<number>;
18
+ static readonly count: Format<number>;
19
+ readonly _admits?: T;
20
+ protected constructor(stated: Stated, id?: string | undefined);
21
+ /** `Format.tokens(['now', 'optional'])` → `Instance does not match any of ["now","optional"].` */
22
+ static tokens<const Words extends readonly string[]>(words: Words): Format<Words[number]>;
23
+ /** `enum`, `required` — a list of one format, so `enum: 'draft'` is refused as the scalar it is. */
24
+ static listOf<Value>(format: Format<Value>): Format<Value[]>;
25
+ /**
26
+ * A list of a FIXED length, each place stating its own format — `['string', 'null']` and
27
+ * never `['string', 'number']`, which a list of one format cannot tell apart.
28
+ */
29
+ static tuple<const Places extends readonly Format<unknown>[]>(...places: Places): Format<{
30
+ -readonly [K in keyof Places]: Accepted<Places[K]>;
31
+ }>;
32
+ /**
33
+ * A format naming ITSELF, which no value can do while it is being built: `items` holds a shape,
34
+ * and the shape is what declares `items`. The `$id` `of()` already posts is what it points at.
35
+ */
36
+ static ref(id: string): Format<unknown>;
37
+ /**
38
+ * A word or anything else, told apart by TYPE, so a refusal names the half the value belongs
39
+ * to — `create: 'nawak'` reads against the words, `type: ['string', 'null']` against the list.
40
+ */
41
+ static either<Word, Other>(word: Format<Word>, otherwise: Format<Other>): Format<Word | Other>;
42
+ /** One of these keys and no other — `{ value }` or `{ generate }`, never both and never neither. */
43
+ static exactlyOne<Keys extends Record<string, Format<unknown>>>(keys: Keys): Format<{
44
+ [K in keyof Keys]: {
45
+ [P in K]: Accepted<Keys[K]>;
46
+ };
47
+ }[keyof Keys]>;
48
+ /** A name resolves under this project's own space; another one states its whole `$id`. */
49
+ static of(id?: string): ObjectFormat<object>;
50
+ /** What `of` does for an object, for a format that is not one — `either`, a list of words. */
51
+ static named<Value>(id: string, format: Format<Value>): Format<Value>;
52
+ /** The type JSON Schema cannot carry: a generator's name, a thunk to an entity. */
53
+ as<Value>(): Format<Value>;
54
+ get schema(): Stated;
55
+ }
56
+ export declare class ObjectFormat<T extends object> extends Format<T> {
57
+ private readonly keys;
58
+ private readonly cited;
59
+ private readonly needed;
60
+ constructor(id?: string);
61
+ key<Name extends string, Value>(name: Name, format: Format<Value>): ObjectFormat<T & {
62
+ [K in Name]?: Value;
63
+ }>;
64
+ /** A key carried whole and pointed at by its `$id`, so it keeps an identity of its own. */
65
+ cites<Name extends string, Value>(name: Name, format: Format<Value>): ObjectFormat<T & {
66
+ [K in Name]?: Value;
67
+ }>;
68
+ needs<Name extends keyof T & string>(...names: Name[]): ObjectFormat<Omit<T, Name> & Required<Pick<T, Name>>>;
69
+ /** These keys and no other: a name nothing states is refused UNDER that name. */
70
+ closed(): Format<{
71
+ [K in keyof T]: T[K];
72
+ }>;
73
+ }
74
+ export {};
75
+ //# sourceMappingURL=Format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Format.d.ts","sourceRoot":"","sources":["../../src/lib/Format.ts"],"names":[],"mappings":"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"}