@fougere/schema 0.6.0-alpha.0 → 0.8.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/README.md +5 -4
  2. package/dist/{schema/Schema.d.ts → Schema.d.ts} +17 -27
  3. package/dist/Schema.d.ts.map +1 -0
  4. package/dist/{schema/Schema.js → Schema.js} +22 -62
  5. package/dist/Schema.js.map +1 -0
  6. package/dist/SchemaDefinition.d.ts +73 -0
  7. package/dist/SchemaDefinition.d.ts.map +1 -0
  8. package/dist/SchemaDefinition.js +184 -0
  9. package/dist/SchemaDefinition.js.map +1 -0
  10. package/dist/SchemaDerivation.d.ts +16 -0
  11. package/dist/SchemaDerivation.d.ts.map +1 -0
  12. package/dist/SchemaDerivation.js +31 -0
  13. package/dist/SchemaDerivation.js.map +1 -0
  14. package/dist/{schema/SchemaView.d.ts → SchemaView.d.ts} +9 -9
  15. package/dist/SchemaView.d.ts.map +1 -0
  16. package/dist/{schema/SchemaView.js.map → SchemaView.js.map} +1 -1
  17. package/dist/{schema/axis → axis}/Axis.d.ts +2 -2
  18. package/dist/axis/Axis.d.ts.map +1 -0
  19. package/dist/axis/Axis.js.map +1 -0
  20. package/dist/axis/Meta.d.ts.map +1 -0
  21. package/dist/{schema/axis → axis}/Meta.js.map +1 -1
  22. package/dist/axis/boundary/Boundaries.d.ts +21 -0
  23. package/dist/axis/boundary/Boundaries.d.ts.map +1 -0
  24. package/dist/axis/boundary/Boundaries.js +25 -0
  25. package/dist/axis/boundary/Boundaries.js.map +1 -0
  26. package/dist/{schema/axis → axis}/boundary/Boundary.d.ts +3 -1
  27. package/dist/axis/boundary/Boundary.d.ts.map +1 -0
  28. package/dist/{schema/axis → axis}/boundary/Boundary.js +8 -6
  29. package/dist/axis/boundary/Boundary.js.map +1 -0
  30. package/dist/axis/boundary/BoundaryAxis.d.ts.map +1 -0
  31. package/dist/{schema/axis → axis}/boundary/BoundaryAxis.js +4 -4
  32. package/dist/axis/boundary/BoundaryAxis.js.map +1 -0
  33. package/dist/{schema/axis → axis}/lifecycle/Clock.d.ts +1 -1
  34. package/dist/axis/lifecycle/Clock.d.ts.map +1 -0
  35. package/dist/{schema/axis → axis}/lifecycle/Clock.js +1 -1
  36. package/dist/axis/lifecycle/Clock.js.map +1 -0
  37. package/dist/axis/lifecycle/Generators.d.ts +10 -0
  38. package/dist/axis/lifecycle/Generators.d.ts.map +1 -0
  39. package/dist/axis/lifecycle/Generators.js +20 -0
  40. package/dist/axis/lifecycle/Generators.js.map +1 -0
  41. package/dist/axis/lifecycle/Lifecycle.d.ts.map +1 -0
  42. package/dist/axis/lifecycle/Lifecycle.js.map +1 -0
  43. package/dist/axis/lifecycle/LifecycleAxis.d.ts.map +1 -0
  44. package/dist/{schema/axis → axis}/lifecycle/LifecycleAxis.js +11 -6
  45. package/dist/axis/lifecycle/LifecycleAxis.js.map +1 -0
  46. package/dist/axis/lifecycle/apply.d.ts +15 -0
  47. package/dist/axis/lifecycle/apply.d.ts.map +1 -0
  48. package/dist/axis/lifecycle/apply.js +50 -0
  49. package/dist/axis/lifecycle/apply.js.map +1 -0
  50. package/dist/{schema/axis → axis}/role/Relation.d.ts +3 -2
  51. package/dist/axis/role/Relation.d.ts.map +1 -0
  52. package/dist/{schema/axis → axis}/role/Relation.js +6 -5
  53. package/dist/axis/role/Relation.js.map +1 -0
  54. package/dist/{schema/axis → axis}/role/Role.d.ts +6 -6
  55. package/dist/axis/role/Role.d.ts.map +1 -0
  56. package/dist/axis/role/Role.js +36 -0
  57. package/dist/axis/role/Role.js.map +1 -0
  58. package/dist/{schema/axis → axis}/role/RoleAxis.d.ts +1 -1
  59. package/dist/axis/role/RoleAxis.d.ts.map +1 -0
  60. package/dist/{schema/axis → axis}/role/RoleAxis.js +28 -36
  61. package/dist/axis/role/RoleAxis.js.map +1 -0
  62. package/dist/axis/shape/Formats.d.ts +11 -0
  63. package/dist/axis/shape/Formats.d.ts.map +1 -0
  64. package/dist/axis/shape/Formats.js +9 -0
  65. package/dist/axis/shape/Formats.js.map +1 -0
  66. package/dist/{schema/axis → axis}/shape/Shape.d.ts +12 -3
  67. package/dist/axis/shape/Shape.d.ts.map +1 -0
  68. package/dist/axis/shape/Shape.js +77 -0
  69. package/dist/axis/shape/Shape.js.map +1 -0
  70. package/dist/entity/EntityAdapterSet.d.ts +22 -0
  71. package/dist/entity/EntityAdapterSet.d.ts.map +1 -0
  72. package/dist/entity/EntityAdapterSet.js +63 -0
  73. package/dist/entity/EntityAdapterSet.js.map +1 -0
  74. package/dist/entity/EntityAdapters.d.ts +1 -24
  75. package/dist/entity/EntityAdapters.d.ts.map +1 -1
  76. package/dist/entity/EntityAdapters.js +1 -74
  77. package/dist/entity/EntityAdapters.js.map +1 -1
  78. package/dist/entity/EntityDeclarations.d.ts +1 -1
  79. package/dist/entity/EntityDeclarations.d.ts.map +1 -1
  80. package/dist/entity.d.ts +7 -2
  81. package/dist/entity.d.ts.map +1 -1
  82. package/dist/entity.js +6 -1
  83. package/dist/entity.js.map +1 -1
  84. package/dist/{schema/fields → field}/Field.d.ts +3 -5
  85. package/dist/field/Field.d.ts.map +1 -0
  86. package/dist/field/Field.js +35 -0
  87. package/dist/field/Field.js.map +1 -0
  88. package/dist/field/FieldSet.d.ts +22 -0
  89. package/dist/field/FieldSet.d.ts.map +1 -0
  90. package/dist/field/FieldSet.js +58 -0
  91. package/dist/field/FieldSet.js.map +1 -0
  92. package/dist/index.d.ts +26 -56
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +21 -47
  95. package/dist/index.js.map +1 -1
  96. package/dist/lib/Registry.d.ts +12 -0
  97. package/dist/lib/Registry.d.ts.map +1 -0
  98. package/dist/lib/Registry.js +29 -0
  99. package/dist/lib/Registry.js.map +1 -0
  100. package/dist/lib/index.d.ts +3 -0
  101. package/dist/lib/index.d.ts.map +1 -0
  102. package/dist/lib/index.js +3 -0
  103. package/dist/lib/index.js.map +1 -0
  104. package/dist/lib/utils.d.ts.map +1 -0
  105. package/dist/lib/utils.js.map +1 -0
  106. package/dist/projection/Cases.d.ts +9 -20
  107. package/dist/projection/Cases.d.ts.map +1 -1
  108. package/dist/projection/Cases.js +44 -39
  109. package/dist/projection/Cases.js.map +1 -1
  110. package/dist/projection/Visibility.d.ts +2 -1
  111. package/dist/projection/Visibility.d.ts.map +1 -1
  112. package/dist/projection/Visibility.js +4 -3
  113. package/dist/projection/Visibility.js.map +1 -1
  114. package/dist/projection/card/Bundle.d.ts +1 -1
  115. package/dist/projection/card/Bundle.d.ts.map +1 -1
  116. package/dist/projection/card/Bundle.js +7 -7
  117. package/dist/projection/card/Bundle.js.map +1 -1
  118. package/dist/projection/card/Card.d.ts +7 -13
  119. package/dist/projection/card/Card.d.ts.map +1 -1
  120. package/dist/projection/card/Card.js +101 -70
  121. package/dist/projection/card/Card.js.map +1 -1
  122. package/dist/projection/card/Descriptor.d.ts +7 -7
  123. package/dist/projection/card/Descriptor.d.ts.map +1 -1
  124. package/dist/projection/card/admission.d.ts +21 -5
  125. package/dist/projection/card/admission.d.ts.map +1 -1
  126. package/dist/projection/card/admission.js +33 -5
  127. package/dist/projection/card/admission.js.map +1 -1
  128. package/dist/projection/card/diff.d.ts +2 -2
  129. package/dist/projection/card/diff.d.ts.map +1 -1
  130. package/dist/{judge/result.d.ts → validation.d.ts} +1 -1
  131. package/dist/validation.d.ts.map +1 -0
  132. package/dist/validation.js +2 -0
  133. package/dist/validation.js.map +1 -0
  134. package/dist/validator/AdapterFieldValidator.d.ts +14 -0
  135. package/dist/validator/AdapterFieldValidator.d.ts.map +1 -0
  136. package/dist/validator/AdapterFieldValidator.js +36 -0
  137. package/dist/validator/AdapterFieldValidator.js.map +1 -0
  138. package/dist/validator/FieldDeclarationValidator.d.ts +9 -0
  139. package/dist/validator/FieldDeclarationValidator.d.ts.map +1 -0
  140. package/dist/{judge/FieldJudge.js → validator/FieldDeclarationValidator.js} +8 -8
  141. package/dist/validator/FieldDeclarationValidator.js.map +1 -0
  142. package/dist/validator/FieldValueValidator.d.ts +13 -0
  143. package/dist/validator/FieldValueValidator.d.ts.map +1 -0
  144. package/dist/{judge/ValueJudge.js → validator/FieldValueValidator.js} +12 -11
  145. package/dist/validator/FieldValueValidator.js.map +1 -0
  146. package/dist/validator/InputRefusal.d.ts +8 -0
  147. package/dist/validator/InputRefusal.d.ts.map +1 -0
  148. package/dist/validator/InputRefusal.js +8 -0
  149. package/dist/validator/InputRefusal.js.map +1 -0
  150. package/dist/validator/InputValidator.d.ts +15 -0
  151. package/dist/validator/InputValidator.d.ts.map +1 -0
  152. package/dist/{judge/RowJudge.js → validator/InputValidator.js} +25 -21
  153. package/dist/validator/InputValidator.js.map +1 -0
  154. package/dist/vocabulary/bool.d.ts +6 -1
  155. package/dist/vocabulary/bool.d.ts.map +1 -1
  156. package/dist/vocabulary/bool.js +6 -1
  157. package/dist/vocabulary/bool.js.map +1 -1
  158. package/dist/vocabulary/created.d.ts +6 -1
  159. package/dist/vocabulary/created.d.ts.map +1 -1
  160. package/dist/vocabulary/created.js +5 -0
  161. package/dist/vocabulary/created.js.map +1 -1
  162. package/dist/vocabulary/date.d.ts +6 -1
  163. package/dist/vocabulary/date.d.ts.map +1 -1
  164. package/dist/vocabulary/date.js +6 -1
  165. package/dist/vocabulary/date.js.map +1 -1
  166. package/dist/vocabulary/email.d.ts +6 -1
  167. package/dist/vocabulary/email.d.ts.map +1 -1
  168. package/dist/vocabulary/email.js +5 -0
  169. package/dist/vocabulary/email.js.map +1 -1
  170. package/dist/vocabulary/immutable.d.ts +6 -1
  171. package/dist/vocabulary/immutable.d.ts.map +1 -1
  172. package/dist/vocabulary/immutable.js +5 -0
  173. package/dist/vocabulary/immutable.js.map +1 -1
  174. package/dist/vocabulary/index.d.ts +23 -0
  175. package/dist/vocabulary/index.d.ts.map +1 -0
  176. package/dist/vocabulary/index.js +23 -0
  177. package/dist/vocabulary/index.js.map +1 -0
  178. package/dist/vocabulary/indexed.d.ts +6 -1
  179. package/dist/vocabulary/indexed.d.ts.map +1 -1
  180. package/dist/vocabulary/indexed.js +5 -0
  181. package/dist/vocabulary/indexed.js.map +1 -1
  182. package/dist/vocabulary/json.d.ts +2 -2
  183. package/dist/vocabulary/json.d.ts.map +1 -1
  184. package/dist/vocabulary/json.js +9 -4
  185. package/dist/vocabulary/json.js.map +1 -1
  186. package/dist/vocabulary/list.d.ts +6 -1
  187. package/dist/vocabulary/list.d.ts.map +1 -1
  188. package/dist/vocabulary/list.js +6 -1
  189. package/dist/vocabulary/list.js.map +1 -1
  190. package/dist/vocabulary/many.d.ts +7 -2
  191. package/dist/vocabulary/many.d.ts.map +1 -1
  192. package/dist/vocabulary/many.js +7 -2
  193. package/dist/vocabulary/many.js.map +1 -1
  194. package/dist/vocabulary/nullable.d.ts +6 -1
  195. package/dist/vocabulary/nullable.d.ts.map +1 -1
  196. package/dist/vocabulary/nullable.js +7 -2
  197. package/dist/vocabulary/nullable.js.map +1 -1
  198. package/dist/vocabulary/number.d.ts +6 -1
  199. package/dist/vocabulary/number.d.ts.map +1 -1
  200. package/dist/vocabulary/number.js +6 -1
  201. package/dist/vocabulary/number.js.map +1 -1
  202. package/dist/vocabulary/oneOf.d.ts +1 -1
  203. package/dist/vocabulary/oneOf.d.ts.map +1 -1
  204. package/dist/vocabulary/oneOf.js +6 -1
  205. package/dist/vocabulary/oneOf.js.map +1 -1
  206. package/dist/vocabulary/optional.d.ts +6 -1
  207. package/dist/vocabulary/optional.d.ts.map +1 -1
  208. package/dist/vocabulary/optional.js +7 -2
  209. package/dist/vocabulary/optional.js.map +1 -1
  210. package/dist/vocabulary/primary.d.ts +2 -2
  211. package/dist/vocabulary/primary.d.ts.map +1 -1
  212. package/dist/vocabulary/primary.js +7 -2
  213. package/dist/vocabulary/primary.js.map +1 -1
  214. package/dist/vocabulary/readOnly.d.ts +6 -1
  215. package/dist/vocabulary/readOnly.d.ts.map +1 -1
  216. package/dist/vocabulary/readOnly.js +6 -1
  217. package/dist/vocabulary/readOnly.js.map +1 -1
  218. package/dist/vocabulary/ref.d.ts +7 -2
  219. package/dist/vocabulary/ref.d.ts.map +1 -1
  220. package/dist/vocabulary/ref.js +7 -2
  221. package/dist/vocabulary/ref.js.map +1 -1
  222. package/dist/vocabulary/text.d.ts +7 -2
  223. package/dist/vocabulary/text.d.ts.map +1 -1
  224. package/dist/vocabulary/text.js +6 -1
  225. package/dist/vocabulary/text.js.map +1 -1
  226. package/dist/vocabulary/unique.d.ts +6 -1
  227. package/dist/vocabulary/unique.d.ts.map +1 -1
  228. package/dist/vocabulary/unique.js +7 -3
  229. package/dist/vocabulary/unique.js.map +1 -1
  230. package/dist/vocabulary/updated.d.ts +6 -1
  231. package/dist/vocabulary/updated.d.ts.map +1 -1
  232. package/dist/vocabulary/updated.js +5 -0
  233. package/dist/vocabulary/updated.js.map +1 -1
  234. package/dist/vocabulary/url.d.ts +6 -1
  235. package/dist/vocabulary/url.d.ts.map +1 -1
  236. package/dist/vocabulary/url.js +5 -0
  237. package/dist/vocabulary/url.js.map +1 -1
  238. package/dist/vocabulary/vocabulary.d.ts +6 -1
  239. package/dist/vocabulary/vocabulary.d.ts.map +1 -1
  240. package/dist/vocabulary/vocabulary.js +22 -12
  241. package/dist/vocabulary/vocabulary.js.map +1 -1
  242. package/dist/vocabulary/writeOnly.d.ts +6 -1
  243. package/dist/vocabulary/writeOnly.d.ts.map +1 -1
  244. package/dist/vocabulary/writeOnly.js +6 -1
  245. package/dist/vocabulary/writeOnly.js.map +1 -1
  246. package/package.json +1 -1
  247. package/src/{schema/Schema.ts → Schema.ts} +32 -75
  248. package/src/SchemaDefinition.ts +257 -0
  249. package/src/SchemaDerivation.ts +44 -0
  250. package/src/{schema/SchemaView.ts → SchemaView.ts} +9 -9
  251. package/src/{schema/axis → axis}/Axis.ts +2 -2
  252. package/src/axis/boundary/Boundaries.ts +37 -0
  253. package/src/{schema/axis → axis}/boundary/Boundary.ts +9 -7
  254. package/src/{schema/axis → axis}/boundary/BoundaryAxis.ts +4 -4
  255. package/src/{schema/axis → axis}/lifecycle/Clock.ts +1 -1
  256. package/src/axis/lifecycle/Generators.ts +29 -0
  257. package/src/{schema/axis → axis}/lifecycle/LifecycleAxis.ts +12 -7
  258. package/src/axis/lifecycle/apply.ts +53 -0
  259. package/src/{schema/axis → axis}/role/Relation.ts +6 -5
  260. package/src/axis/role/Role.ts +52 -0
  261. package/src/{schema/axis → axis}/role/RoleAxis.ts +28 -40
  262. package/src/axis/shape/Formats.ts +20 -0
  263. package/src/{schema/axis → axis}/shape/Shape.ts +45 -18
  264. package/src/entity/EntityAdapterSet.ts +81 -0
  265. package/src/entity/EntityAdapters.ts +4 -96
  266. package/src/entity/EntityDeclarations.ts +1 -1
  267. package/src/entity.ts +7 -2
  268. package/src/{schema/fields → field}/Field.ts +8 -28
  269. package/src/field/FieldSet.ts +75 -0
  270. package/src/index.ts +34 -91
  271. package/src/lib/Registry.ts +37 -0
  272. package/src/lib/index.ts +2 -0
  273. package/src/projection/Cases.ts +56 -55
  274. package/src/projection/Visibility.ts +5 -4
  275. package/src/projection/card/Bundle.ts +9 -9
  276. package/src/projection/card/Card.ts +109 -75
  277. package/src/projection/card/Descriptor.ts +7 -7
  278. package/src/projection/card/admission.ts +37 -6
  279. package/src/projection/card/diff.ts +2 -2
  280. package/src/validator/AdapterFieldValidator.ts +40 -0
  281. package/src/{judge/FieldJudge.ts → validator/FieldDeclarationValidator.ts} +10 -10
  282. package/src/{judge/ValueJudge.ts → validator/FieldValueValidator.ts} +14 -13
  283. package/src/validator/InputRefusal.ts +7 -0
  284. package/src/{judge/RowJudge.ts → validator/InputValidator.ts} +31 -24
  285. package/src/vocabulary/bool.ts +6 -1
  286. package/src/vocabulary/created.ts +6 -1
  287. package/src/vocabulary/date.ts +6 -1
  288. package/src/vocabulary/email.ts +6 -1
  289. package/src/vocabulary/immutable.ts +6 -1
  290. package/src/vocabulary/index.ts +22 -0
  291. package/src/vocabulary/indexed.ts +6 -1
  292. package/src/vocabulary/json.ts +10 -5
  293. package/src/vocabulary/list.ts +6 -1
  294. package/src/vocabulary/many.ts +7 -2
  295. package/src/vocabulary/nullable.ts +8 -3
  296. package/src/vocabulary/number.ts +6 -1
  297. package/src/vocabulary/oneOf.ts +6 -1
  298. package/src/vocabulary/optional.ts +8 -3
  299. package/src/vocabulary/primary.ts +7 -2
  300. package/src/vocabulary/readOnly.ts +7 -2
  301. package/src/vocabulary/ref.ts +7 -2
  302. package/src/vocabulary/text.ts +7 -2
  303. package/src/vocabulary/unique.ts +8 -4
  304. package/src/vocabulary/updated.ts +6 -1
  305. package/src/vocabulary/url.ts +6 -1
  306. package/src/vocabulary/vocabulary.ts +22 -12
  307. package/src/vocabulary/writeOnly.ts +7 -2
  308. package/dist/judge/FieldJudge.d.ts +0 -9
  309. package/dist/judge/FieldJudge.d.ts.map +0 -1
  310. package/dist/judge/FieldJudge.js.map +0 -1
  311. package/dist/judge/RowJudge.d.ts +0 -12
  312. package/dist/judge/RowJudge.d.ts.map +0 -1
  313. package/dist/judge/RowJudge.js.map +0 -1
  314. package/dist/judge/RowRefusal.d.ts +0 -17
  315. package/dist/judge/RowRefusal.d.ts.map +0 -1
  316. package/dist/judge/RowRefusal.js +0 -16
  317. package/dist/judge/RowRefusal.js.map +0 -1
  318. package/dist/judge/ValueJudge.d.ts +0 -12
  319. package/dist/judge/ValueJudge.d.ts.map +0 -1
  320. package/dist/judge/ValueJudge.js.map +0 -1
  321. package/dist/judge/options.d.ts +0 -4
  322. package/dist/judge/options.d.ts.map +0 -1
  323. package/dist/judge/options.js +0 -2
  324. package/dist/judge/options.js.map +0 -1
  325. package/dist/judge/result.d.ts.map +0 -1
  326. package/dist/judge/result.js +0 -2
  327. package/dist/judge/result.js.map +0 -1
  328. package/dist/projection/SchemaOrCard.d.ts +0 -7
  329. package/dist/projection/SchemaOrCard.d.ts.map +0 -1
  330. package/dist/projection/SchemaOrCard.js +0 -11
  331. package/dist/projection/SchemaOrCard.js.map +0 -1
  332. package/dist/projection/card/EntityTypeSource.d.ts +0 -12
  333. package/dist/projection/card/EntityTypeSource.d.ts.map +0 -1
  334. package/dist/projection/card/EntityTypeSource.js +0 -78
  335. package/dist/projection/card/EntityTypeSource.js.map +0 -1
  336. package/dist/projection/card/FacadeTypeSource.d.ts +0 -19
  337. package/dist/projection/card/FacadeTypeSource.d.ts.map +0 -1
  338. package/dist/projection/card/FacadeTypeSource.js +0 -40
  339. package/dist/projection/card/FacadeTypeSource.js.map +0 -1
  340. package/dist/schema/Schema.d.ts.map +0 -1
  341. package/dist/schema/Schema.js.map +0 -1
  342. package/dist/schema/SchemaDefinition.d.ts +0 -60
  343. package/dist/schema/SchemaDefinition.d.ts.map +0 -1
  344. package/dist/schema/SchemaDefinition.js +0 -85
  345. package/dist/schema/SchemaDefinition.js.map +0 -1
  346. package/dist/schema/SchemaDerivation.d.ts +0 -34
  347. package/dist/schema/SchemaDerivation.d.ts.map +0 -1
  348. package/dist/schema/SchemaDerivation.js +0 -51
  349. package/dist/schema/SchemaDerivation.js.map +0 -1
  350. package/dist/schema/SchemaView.d.ts.map +0 -1
  351. package/dist/schema/axis/Axis.d.ts.map +0 -1
  352. package/dist/schema/axis/Axis.js.map +0 -1
  353. package/dist/schema/axis/Meta.d.ts.map +0 -1
  354. package/dist/schema/axis/boundary/Boundaries.d.ts +0 -20
  355. package/dist/schema/axis/boundary/Boundaries.d.ts.map +0 -1
  356. package/dist/schema/axis/boundary/Boundaries.js +0 -31
  357. package/dist/schema/axis/boundary/Boundaries.js.map +0 -1
  358. package/dist/schema/axis/boundary/Boundary.d.ts.map +0 -1
  359. package/dist/schema/axis/boundary/Boundary.js.map +0 -1
  360. package/dist/schema/axis/boundary/BoundaryAxis.d.ts.map +0 -1
  361. package/dist/schema/axis/boundary/BoundaryAxis.js.map +0 -1
  362. package/dist/schema/axis/lifecycle/Clock.d.ts.map +0 -1
  363. package/dist/schema/axis/lifecycle/Clock.js.map +0 -1
  364. package/dist/schema/axis/lifecycle/Generators.d.ts +0 -18
  365. package/dist/schema/axis/lifecycle/Generators.d.ts.map +0 -1
  366. package/dist/schema/axis/lifecycle/Generators.js +0 -38
  367. package/dist/schema/axis/lifecycle/Generators.js.map +0 -1
  368. package/dist/schema/axis/lifecycle/Lifecycle.d.ts.map +0 -1
  369. package/dist/schema/axis/lifecycle/Lifecycle.js.map +0 -1
  370. package/dist/schema/axis/lifecycle/LifecycleAxis.d.ts.map +0 -1
  371. package/dist/schema/axis/lifecycle/LifecycleAxis.js.map +0 -1
  372. package/dist/schema/axis/lifecycle/apply.d.ts +0 -6
  373. package/dist/schema/axis/lifecycle/apply.d.ts.map +0 -1
  374. package/dist/schema/axis/lifecycle/apply.js +0 -34
  375. package/dist/schema/axis/lifecycle/apply.js.map +0 -1
  376. package/dist/schema/axis/role/Relation.d.ts.map +0 -1
  377. package/dist/schema/axis/role/Relation.js.map +0 -1
  378. package/dist/schema/axis/role/Role.d.ts.map +0 -1
  379. package/dist/schema/axis/role/Role.js +0 -40
  380. package/dist/schema/axis/role/Role.js.map +0 -1
  381. package/dist/schema/axis/role/RoleAxis.d.ts.map +0 -1
  382. package/dist/schema/axis/role/RoleAxis.js.map +0 -1
  383. package/dist/schema/axis/shape/Formats.d.ts +0 -8
  384. package/dist/schema/axis/shape/Formats.d.ts.map +0 -1
  385. package/dist/schema/axis/shape/Formats.js +0 -10
  386. package/dist/schema/axis/shape/Formats.js.map +0 -1
  387. package/dist/schema/axis/shape/Shape.d.ts.map +0 -1
  388. package/dist/schema/axis/shape/Shape.js +0 -52
  389. package/dist/schema/axis/shape/Shape.js.map +0 -1
  390. package/dist/schema/fields/Field.d.ts.map +0 -1
  391. package/dist/schema/fields/Field.js +0 -52
  392. package/dist/schema/fields/Field.js.map +0 -1
  393. package/dist/schema/fields/FieldSet.d.ts +0 -28
  394. package/dist/schema/fields/FieldSet.d.ts.map +0 -1
  395. package/dist/schema/fields/FieldSet.js +0 -55
  396. package/dist/schema/fields/FieldSet.js.map +0 -1
  397. package/dist/schema/fields/constraint/FieldGroup.d.ts +0 -21
  398. package/dist/schema/fields/constraint/FieldGroup.d.ts.map +0 -1
  399. package/dist/schema/fields/constraint/FieldGroup.js +0 -65
  400. package/dist/schema/fields/constraint/FieldGroup.js.map +0 -1
  401. package/dist/schema/fields/constraint/Unique.d.ts +0 -4
  402. package/dist/schema/fields/constraint/Unique.d.ts.map +0 -1
  403. package/dist/schema/fields/constraint/Unique.js +0 -4
  404. package/dist/schema/fields/constraint/Unique.js.map +0 -1
  405. package/dist/utils.d.ts.map +0 -1
  406. package/dist/utils.js.map +0 -1
  407. package/src/judge/RowRefusal.ts +0 -17
  408. package/src/judge/options.ts +0 -3
  409. package/src/projection/SchemaOrCard.ts +0 -18
  410. package/src/projection/card/EntityTypeSource.ts +0 -90
  411. package/src/projection/card/FacadeTypeSource.ts +0 -55
  412. package/src/schema/SchemaDefinition.ts +0 -150
  413. package/src/schema/SchemaDerivation.ts +0 -65
  414. package/src/schema/axis/boundary/Boundaries.ts +0 -44
  415. package/src/schema/axis/lifecycle/Generators.ts +0 -46
  416. package/src/schema/axis/lifecycle/apply.ts +0 -39
  417. package/src/schema/axis/role/Role.ts +0 -56
  418. package/src/schema/axis/shape/Formats.ts +0 -22
  419. package/src/schema/fields/FieldSet.ts +0 -63
  420. package/src/schema/fields/constraint/FieldGroup.ts +0 -84
  421. package/src/schema/fields/constraint/Unique.ts +0 -3
  422. /package/dist/{schema/SchemaView.js → SchemaView.js} +0 -0
  423. /package/dist/{schema/axis → axis}/Axis.js +0 -0
  424. /package/dist/{schema/axis → axis}/Meta.d.ts +0 -0
  425. /package/dist/{schema/axis → axis}/Meta.js +0 -0
  426. /package/dist/{schema/axis → axis}/boundary/BoundaryAxis.d.ts +0 -0
  427. /package/dist/{schema/axis → axis}/lifecycle/Lifecycle.d.ts +0 -0
  428. /package/dist/{schema/axis → axis}/lifecycle/Lifecycle.js +0 -0
  429. /package/dist/{schema/axis → axis}/lifecycle/LifecycleAxis.d.ts +0 -0
  430. /package/dist/{utils.d.ts → lib/utils.d.ts} +0 -0
  431. /package/dist/{utils.js → lib/utils.js} +0 -0
  432. /package/src/{schema/axis → axis}/Meta.ts +0 -0
  433. /package/src/{schema/axis → axis}/lifecycle/Lifecycle.ts +0 -0
  434. /package/src/{utils.ts → lib/utils.ts} +0 -0
  435. /package/src/{judge/result.ts → validation.ts} +0 -0
@@ -1,16 +1,14 @@
1
- import { refuse, oneOfTokens } from '../../../projection/card/admission.js';
2
- import { isObject, lowerFirst } from '../../../utils.js';
1
+ import { refuse, oneOfTokens } from '../../projection/card/admission.js';
2
+ import { isObject, lowerFirst } from '../../lib/utils.js';
3
3
  import { ON_DELETE, RELATION_KINDS } from './Relation.js';
4
- import { FieldGroup } from '../../fields/constraint/FieldGroup.js';
5
- import { Unique } from '../../fields/constraint/Unique.js';
6
4
  export const roleAxis = {
7
5
  slot: 'role',
8
- judge(value, errors) {
6
+ validator(value, errors) {
9
7
  if (!isObject(value)) {
10
8
  errors.push({ path: 'role', message: `Expected an object — got ${JSON.stringify(value)}` });
11
9
  return;
12
10
  }
13
- for (const flag of ['primary', 'index']) {
11
+ for (const flag of ['primary', 'index', 'unique']) {
14
12
  if (value[flag] !== undefined && typeof value[flag] !== 'boolean') {
15
13
  errors.push({
16
14
  path: `role.${flag}`,
@@ -18,49 +16,38 @@ export const roleAxis = {
18
16
  });
19
17
  }
20
18
  }
21
- if (value.rules !== undefined) {
22
- const legal = Array.isArray(value.rules) &&
23
- value.rules.every((rule) => rule instanceof FieldGroup ||
24
- (Array.isArray(rule) && rule.every((member) => typeof member === 'string')));
25
- if (!legal) {
26
- errors.push({
27
- path: 'role.rules',
28
- message: 'Expected field groups, or the member lists they denote — string[][]',
29
- });
30
- }
31
- }
32
19
  if (value.relation !== undefined)
33
- judgeRelation(value.relation, errors);
20
+ validateRelation(value.relation, errors);
34
21
  },
22
+ /** A card carries the target's NAME: a class cannot cross a process boundary. */
35
23
  describe(role, key) {
36
- const out = {};
24
+ const descriptor = {};
37
25
  if (role.primary)
38
- out.primary = true;
39
- const unique = (role.rules ?? []).filter((rule) => rule instanceof Unique);
40
- if (unique.length)
41
- out.unique = unique.map((rule) => [...rule.resolvedOn(key).members]);
26
+ descriptor.primary = true;
27
+ if (role.unique)
28
+ descriptor.unique = [[key]];
42
29
  if (role.index)
43
- out.index = true;
30
+ descriptor.index = true;
44
31
  if (role.relation) {
45
32
  const target = role.relation.to();
46
- out.relation = {
33
+ descriptor.relation = {
47
34
  to: lowerFirst(target.name ?? ''),
48
35
  kind: role.relation.kind,
49
36
  ...(role.relation.onDelete ? { onDelete: role.relation.onDelete } : {}),
50
37
  };
51
38
  }
52
- return Object.keys(out).length ? out : undefined;
39
+ return Object.keys(descriptor).length ? descriptor : undefined;
53
40
  },
54
41
  reconstruct(wire, resolve) {
55
- const out = {};
42
+ const rules = {};
56
43
  if (wire.primary)
57
- out.primary = true;
58
- if (wire.unique?.length)
59
- out.rules = wire.unique.map((group) => new Unique(group));
44
+ rules.primary = true;
45
+ if (wire.unique?.some((group) => group.length === 1))
46
+ rules.unique = true;
60
47
  if (wire.index)
61
- out.index = true;
48
+ rules.index = true;
62
49
  if (wire.relation) {
63
- // `judge` cannot serve here: it demands a thunk where a card carries a name.
50
+ // `validator` cannot serve here: it demands `() => Post` where a card carries a name.
64
51
  if (!oneOfTokens(wire.relation.kind, RELATION_KINDS)) {
65
52
  refuse(`role.relation.kind is ${JSON.stringify(wire.relation.kind)}`, `Expected one of ${RELATION_KINDS.join(', ')}.`);
66
53
  }
@@ -68,16 +55,21 @@ export const roleAxis = {
68
55
  refuse(`role.relation.onDelete is ${JSON.stringify(wire.relation.onDelete)}`, `Expected one of ${ON_DELETE.join(', ')}.`);
69
56
  }
70
57
  const name = wire.relation.to;
71
- out.relation = {
58
+ rules.relation = {
72
59
  to: () => (resolve?.(name) ?? { name }),
73
60
  kind: wire.relation.kind,
74
61
  ...(wire.relation.onDelete ? { onDelete: wire.relation.onDelete } : {}),
75
62
  };
76
63
  }
77
- return out;
64
+ return rules;
78
65
  },
79
66
  };
80
- function judgeRelation(relation, errors) {
67
+ /**
68
+ * So a relation is validated where `() => Post` is required — a card carries a name.
69
+ * FR : pour qu'une relation soit jugée là où `() => Post` est exigé, contrairement à une carte.
70
+ * `{ to: User, kind: 'one' }` → error `Expected a function returning the target entity, such as () => Post`
71
+ */
72
+ function validateRelation(relation, errors) {
81
73
  if (!isObject(relation)) {
82
74
  errors.push({ path: 'role.relation', message: `Expected an object — got ${JSON.stringify(relation)}` });
83
75
  return;
@@ -89,7 +81,7 @@ function judgeRelation(relation, errors) {
89
81
  });
90
82
  }
91
83
  if (typeof relation.to !== 'function') {
92
- errors.push({ path: 'role.relation.to', message: 'Expected a thunk returning the target entity' });
84
+ errors.push({ path: 'role.relation.to', message: 'Expected a function returning the target entity, such as () => Post' });
93
85
  }
94
86
  if (relation.onDelete !== undefined && !oneOfTokens(relation.onDelete, ON_DELETE)) {
95
87
  errors.push({
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoleAxis.js","sourceRoot":"","sources":["../../../src/axis/role/RoleAxis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Registry } from '../../lib/Registry.js';
2
+ export type StringFormat = 'date-time' | 'date' | 'time' | 'email' | 'uuid' | 'uri' | (string & {});
3
+ export type FormatPredicate = (value: string) => boolean;
4
+ /**
5
+ * String formats the JSON Schema engine does not know. `find` answers `undefined` for
6
+ * `email` or `uuid`, which it validates on its own.
7
+ * FR : les formats de chaîne que le moteur ignore ; `find` rend `undefined` pour les siens.
8
+ * `Formats.register('siret', (v) => /^\d{14}$/.test(v))`
9
+ */
10
+ export declare const Formats: Registry<FormatPredicate>;
11
+ //# sourceMappingURL=Formats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Formats.d.ts","sourceRoot":"","sources":["../../../src/axis/shape/Formats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,KAAK,GACL,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,OAAO,2BAA0C,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Registry } from '../../lib/Registry.js';
2
+ /**
3
+ * String formats the JSON Schema engine does not know. `find` answers `undefined` for
4
+ * `email` or `uuid`, which it validates on its own.
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))`
7
+ */
8
+ export const Formats = new Registry('format');
9
+ //# sourceMappingURL=Formats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Formats.js","sourceRoot":"","sources":["../../../src/axis/shape/Formats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAajD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAkB,QAAQ,CAAC,CAAC"}
@@ -19,6 +19,8 @@ interface ArrayConstraints {
19
19
  interface ObjectConstraints {
20
20
  properties?: Record<string, unknown>;
21
21
  required?: readonly string[];
22
+ additionalProperties?: boolean | Shape;
23
+ propertyNames?: Shape;
22
24
  }
23
25
  export type Shape = ({
24
26
  type: Nullably<'string'>;
@@ -42,16 +44,23 @@ type BaseShape = ({
42
44
  } & ArrayConstraints) | ({
43
45
  type: 'object';
44
46
  } & ObjectConstraints);
45
- interface ShapeAnatomy {
47
+ interface ShapeParts {
46
48
  base?: BaseShape;
47
49
  nullable: boolean;
48
50
  }
49
- export declare class Anatomy {
51
+ export declare class Shapes {
50
52
  static is(value: unknown): value is Shape;
53
+ /**
54
+ * Every `pattern` a shape states, the nested ones included — `items`, `properties`.
55
+ *
56
+ * Two readers ask two questions of the same list: the card door asks whether each one
57
+ * compiles, `fougere check` whether each one backtracks. Neither owns the walk.
58
+ */
59
+ static patterns(shape: unknown): string[];
51
60
  static nullable(shape: Shape): Shape;
52
61
  private static readonly cache;
53
62
  private static readonly none;
54
- static of(shape?: Shape): ShapeAnatomy;
63
+ static of(shape?: Shape): ShapeParts;
55
64
  static isNullable(shape?: Shape): boolean;
56
65
  }
57
66
  export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Shape.d.ts","sourceRoot":"","sources":["../../../src/axis/shape/Shape.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,QAAQ,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAE3D,UAAU,iBAAiB;IAAG,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAAE;AAClJ,UAAU,kBAAkB;IAAG,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;AACnE,UAAU,gBAAgB;IAAG,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;AAClF,UAAU,iBAAiB;IAAG,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,oBAAoB,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAAC,aAAa,CAAC,EAAE,KAAK,CAAA;CAAE;AAEjK,MAAM,MAAM,KAAK,GACb,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;CAAE,GAAG,iBAAiB,CAAC,GAClD,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;CAAE,GAAG,kBAAkB,CAAC,GACzE;IAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;CAAE,GAC7B,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;CAAE,GAAG,gBAAgB,CAAC,GAChD,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;CAAE,GAAG,iBAAiB,CAAC,CAAC;AAcvD,KAAK,SAAS,GACV,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG,iBAAiB,CAAC,GACxC,CAAC;IAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,GAAG,kBAAkB,CAAC,GACrD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB,CAAC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,gBAAgB,CAAC,GACtC,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG,iBAAiB,CAAC,CAAC;AAW7C,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAgBD,qBAAa,MAAM;IACjB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAExC;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAKxC;IAED,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAEnC;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAClE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAoD;IAEhF,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,UAAU,CAiBnC;IAED,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAExC;CACF"}
@@ -0,0 +1,77 @@
1
+ const SHAPE_TYPES = ['string', 'number', 'integer', 'boolean', 'array', 'object'];
2
+ function isShapeImpl(value) {
3
+ if (typeof value !== 'object' || value === null)
4
+ return false;
5
+ const type = value.type;
6
+ const names = Array.isArray(type) ? type : [type];
7
+ return (names.some((name) => SHAPE_TYPES.includes(name)) &&
8
+ names.every((name) => name === 'null' || SHAPE_TYPES.includes(name)));
9
+ }
10
+ function nullableShapeImpl(shape) {
11
+ if (Array.isArray(shape.type))
12
+ return shape;
13
+ const nullable = { ...shape, type: [shape.type, 'null'] };
14
+ if ('enum' in nullable && nullable.enum && !nullable.enum.includes(null)) {
15
+ nullable.enum = [...nullable.enum, null];
16
+ }
17
+ return nullable;
18
+ }
19
+ function collectPatterns(value, found) {
20
+ if (Array.isArray(value)) {
21
+ for (const member of value)
22
+ collectPatterns(member, found);
23
+ return;
24
+ }
25
+ if (typeof value !== 'object' || value === null)
26
+ return;
27
+ const { pattern } = value;
28
+ if (typeof pattern === 'string')
29
+ found.push(pattern);
30
+ for (const member of Object.values(value))
31
+ collectPatterns(member, found);
32
+ }
33
+ export class Shapes {
34
+ static is(value) {
35
+ return isShapeImpl(value);
36
+ }
37
+ /**
38
+ * Every `pattern` a shape states, the nested ones included — `items`, `properties`.
39
+ *
40
+ * Two readers ask two questions of the same list: the card door asks whether each one
41
+ * compiles, `fougere check` whether each one backtracks. Neither owns the walk.
42
+ */
43
+ static patterns(shape) {
44
+ const found = [];
45
+ collectPatterns(shape, found);
46
+ return found;
47
+ }
48
+ static nullable(shape) {
49
+ return nullableShapeImpl(shape);
50
+ }
51
+ static cache = new WeakMap();
52
+ static none = { base: undefined, nullable: false };
53
+ static of(shape) {
54
+ if (!shape)
55
+ return this.none;
56
+ let parts = this.cache.get(shape);
57
+ if (!parts) {
58
+ if (Array.isArray(shape.type)) {
59
+ const baseType = shape.type.find((t) => t !== 'null');
60
+ const base = { ...shape, type: baseType };
61
+ if ('enum' in base && base.enum) {
62
+ base.enum = base.enum.filter((v) => v !== null);
63
+ }
64
+ parts = { base, nullable: true };
65
+ }
66
+ else {
67
+ parts = { base: shape, nullable: false };
68
+ }
69
+ this.cache.set(shape, parts);
70
+ }
71
+ return parts;
72
+ }
73
+ static isNullable(shape) {
74
+ return this.of(shape).nullable;
75
+ }
76
+ }
77
+ //# sourceMappingURL=Shape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Shape.js","sourceRoot":"","sources":["../../../src/axis/shape/Shape.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { Fields } from '../field/Field.js';
2
+ import type { EntityAdapters } from './EntityAdapters.js';
3
+ export declare class EntityAdapterSet {
4
+ readonly adapters: EntityAdapters<Fields>;
5
+ /**
6
+ * `{ sql: { body: { columnType: { pg: 'tsvector' } } } }`
7
+ */
8
+ private constructor();
9
+ /**
10
+ * Stops a malformed declaration from propagating, by checking its two levels.
11
+ * `of({ sql: { body: 3 } })` → passes; `of({ sql: 'oops' })` → throws, naming `adapters.sql`
12
+ */
13
+ static of(adapters?: EntityAdapters<Fields>): EntityAdapterSet;
14
+ /** Folds several into one, a later field entry replacing the earlier. Takes sets only, so */
15
+ static merged(adapterSets: readonly EntityAdapterSet[]): EntityAdapterSet;
16
+ private get entries();
17
+ /** Collects every field addressed, so a declaration aimed at a missing field is caught. */
18
+ get fieldNames(): string[];
19
+ /** Follows a derivation — `pick`, `omit` and `rename` are one gesture: what remains, and */
20
+ rename(transform: (key: string) => string | undefined): EntityAdapterSet;
21
+ }
22
+ //# sourceMappingURL=EntityAdapterSet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityAdapterSet.d.ts","sourceRoot":"","sources":["../../src/entity/EntityAdapterSet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK1D,qBAAa,gBAAgB;IAIP,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC;IAH7D;;OAEG;IACH,OAAO,eAA0D;IAEjE;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAmB7D;IAED,6FAA6F;IAC7F,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,GAAG,gBAAgB,CAQxE;IAED,OAAO,KAAK,OAAO,GAElB;IAED,2FAA2F;IAC3F,IAAI,UAAU,IAAI,MAAM,EAAE,CAIzB;IAED,4FAA4F;IAC5F,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAkBvE;CACF"}
@@ -0,0 +1,63 @@
1
+ import { isObject } from '../lib/utils.js';
2
+ export class EntityAdapterSet {
3
+ adapters;
4
+ /**
5
+ * `{ sql: { body: { columnType: { pg: 'tsvector' } } } }`
6
+ */
7
+ constructor(adapters) {
8
+ this.adapters = adapters;
9
+ }
10
+ /**
11
+ * Stops a malformed declaration from propagating, by checking its two levels.
12
+ * `of({ sql: { body: 3 } })` → passes; `of({ sql: 'oops' })` → throws, naming `adapters.sql`
13
+ */
14
+ static of(adapters) {
15
+ if (!adapters)
16
+ return new EntityAdapterSet({});
17
+ if (!isObject(adapters)) {
18
+ throw new Error(`adapters: expected an object keyed by adapter name, got ${typeof adapters}.`);
19
+ }
20
+ for (const [adapter, fields] of Object.entries(adapters)) {
21
+ if (!isObject(fields)) {
22
+ throw new Error(`adapters.${adapter}: expected an object keyed by field name, got ${typeof fields}. ` +
23
+ `What an adapter is handed is addressed by the field it applies to.`);
24
+ }
25
+ }
26
+ return new EntityAdapterSet(adapters);
27
+ }
28
+ /** Folds several into one, a later field entry replacing the earlier. Takes sets only, so */
29
+ static merged(adapterSets) {
30
+ const configurations = {};
31
+ for (const adapterSet of adapterSets)
32
+ for (const [adapter, configuration] of adapterSet.entries)
33
+ configurations[adapter] = { ...configurations[adapter], ...configuration };
34
+ return new EntityAdapterSet(configurations);
35
+ }
36
+ get entries() {
37
+ return Object.entries(this.adapters);
38
+ }
39
+ /** Collects every field addressed, so a declaration aimed at a missing field is caught. */
40
+ get fieldNames() {
41
+ return [
42
+ ...new Set(this.entries.flatMap(([, configuration]) => Object.keys(configuration))),
43
+ ];
44
+ }
45
+ /** Follows a derivation — `pick`, `omit` and `rename` are one gesture: what remains, and */
46
+ rename(transform) {
47
+ const renamed = {};
48
+ for (const [adapter, configuration] of this.entries) {
49
+ const mapped = {};
50
+ for (const [key, entry] of Object.entries(configuration)) {
51
+ const newName = transform(key);
52
+ if (newName !== undefined)
53
+ mapped[newName] = entry;
54
+ }
55
+ // Drop an adapter left with no field. `Post.pick('id')` would otherwise answer
56
+ // `{ sql: {} }` — a line the entity never wrote.
57
+ if (Object.keys(mapped).length)
58
+ renamed[adapter] = mapped;
59
+ }
60
+ return new EntityAdapterSet(renamed);
61
+ }
62
+ }
63
+ //# sourceMappingURL=EntityAdapterSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityAdapterSet.js","sourceRoot":"","sources":["../../src/entity/EntityAdapterSet.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAM3C,MAAM,OAAO,gBAAgB;IAIE,QAAQ;IAHrC;;OAEG;IACH,YAA6B,QAAgC;wBAAhC,QAAQ;IAA2B,CAAC;IAEjE;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,QAAiC;QACzC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAE/C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,2DAA2D,OAAO,QAAQ,GAAG,CAC9E,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CACb,YAAY,OAAO,iDAAiD,OAAO,MAAM,IAAI;oBACnF,oEAAoE,CACvE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,6FAA6F;IAC7F,MAAM,CAAC,MAAM,CAAC,WAAwC;QACpD,MAAM,cAAc,GAA0B,EAAE,CAAC;QAEjD,KAAK,MAAM,UAAU,IAAI,WAAW;YAClC,KAAK,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO;gBACvD,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,EAAE,GAAG,aAAa,EAAE,CAAC;QAE/E,OAAO,IAAI,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC9C,CAAC;IAED,IAAY,OAAO;QACjB,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,2FAA2F;IAC3F,IAAI,UAAU;QACZ,OAAO;YACL,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;SACpF,CAAC;IACJ,CAAC;IAED,4FAA4F;IAC5F,MAAM,CAAC,SAA8C;QACnD,MAAM,OAAO,GAA0B,EAAE,CAAC;QAE1C,KAAK,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACpD,MAAM,MAAM,GAAyB,EAAE,CAAC;YAExC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;gBACzD,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;gBAE/B,IAAI,OAAO,KAAK,SAAS;oBAAE,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;YACrD,CAAC;YAED,+EAA+E;YAC/E,iDAAiD;YACjD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM;gBAAE,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;CACF"}
@@ -1,28 +1,5 @@
1
- import type { FieldName, Fields } from '../schema/fields/Field.js';
1
+ import type { FieldName, Fields } from '../field/Field.js';
2
2
  export interface FougereEntityAdapters<K extends string> {
3
3
  }
4
4
  export type EntityAdapters<TFields extends Fields> = Readonly<Partial<FougereEntityAdapters<FieldName<TFields>>>>;
5
- /**
6
- * What one schema states per adapter: an adapter name, a field name, then that adapter's own value.
7
- */
8
- export declare class EntityAdapterSet {
9
- private readonly byAdapter;
10
- private constructor();
11
- static of(declared: EntityAdapters<Fields> | undefined): EntityAdapterSet | undefined;
12
- /** Several schemas folded into one set; a later source wins, per adapter and per field. */
13
- static merged(sources: readonly (EntityAdapters<Fields> | undefined)[]): EntityAdapterSet | undefined;
14
- /** Every field name these entries address — what a caller checks against its own shape. */
15
- get fieldNames(): string[];
16
- /** The plain object, which is what a reader outside this package receives. */
17
- get stated(): EntityAdapters<Fields>;
18
- /**
19
- * The entries whose field survives a cut, re-addressed by that field's new name.
20
- *
21
- * The adapter name is not a field and does not move; only the level below it does. An
22
- * entry left on the old name is not an error anywhere downstream — `adapter/sql` looks
23
- * it up by the field it is iterating and simply finds nothing.
24
- */
25
- cut(survives: (key: string) => string | undefined): EntityAdapterSet | undefined;
26
- private static made;
27
- }
28
5
  //# sourceMappingURL=EntityAdapters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityAdapters.d.ts","sourceRoot":"","sources":["../../src/entity/EntityAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAInE,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,MAAM;CAAI;AAE3D,MAAM,MAAM,cAAc,CAAC,OAAO,SAAS,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAOlH;;GAEG;AACH,qBAAa,gBAAgB;IACP,OAAO,CAAC,QAAQ,CAAC,SAAS;IAA9C,OAAO,eAA2D;IAElE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAyBpF;IAED,2FAA2F;IAC3F,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,gBAAgB,GAAG,SAAS,CAapG;IAED,2FAA2F;IAC3F,IAAI,UAAU,IAAI,MAAM,EAAE,CAEzB;IAED,8EAA8E;IAC9E,IAAI,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,CAEnC;IAED;;;;;;OAMG;IACH,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAe/E;IAED,OAAO,CAAC,MAAM,CAAC,IAAI;CAGpB"}
1
+ {"version":3,"file":"EntityAdapters.d.ts","sourceRoot":"","sources":["../../src/entity/EntityAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3D,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,MAAM;CAAI;AAE3D,MAAM,MAAM,cAAc,CAAC,OAAO,SAAS,MAAM,IAAI,QAAQ,CAC3D,OAAO,CAAC,qBAAqB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CACnD,CAAC"}
@@ -1,75 +1,2 @@
1
- import { isObject } from '../utils.js';
2
- /**
3
- * What one schema states per adapter: an adapter name, a field name, then that adapter's own value.
4
- */
5
- export class EntityAdapterSet {
6
- byAdapter;
7
- constructor(byAdapter) {
8
- this.byAdapter = byAdapter;
9
- }
10
- static of(declared) {
11
- if (declared === undefined)
12
- return undefined;
13
- if (!isObject(declared)) {
14
- throw new Error(`adapters: expected an object keyed by adapter name, got ${typeof declared}.`);
15
- }
16
- const byAdapter = {};
17
- for (const [adapter, perField] of Object.entries(declared)) {
18
- if (perField === undefined)
19
- continue;
20
- if (!isObject(perField)) {
21
- throw new Error(`adapters.${adapter}: expected an object keyed by field name, got ${typeof perField}. ` +
22
- `What an adapter is handed is addressed by the field it applies to.`);
23
- }
24
- if (Object.keys(perField).length)
25
- byAdapter[adapter] = perField;
26
- }
27
- return EntityAdapterSet.made(byAdapter);
28
- }
29
- /** Several schemas folded into one set; a later source wins, per adapter and per field. */
30
- static merged(sources) {
31
- const out = {};
32
- for (const source of sources) {
33
- const set = EntityAdapterSet.of(source);
34
- if (!set)
35
- continue;
36
- for (const [adapter, perField] of Object.entries(set.byAdapter)) {
37
- out[adapter] = { ...out[adapter], ...perField };
38
- }
39
- }
40
- return EntityAdapterSet.made(out);
41
- }
42
- /** Every field name these entries address — what a caller checks against its own shape. */
43
- get fieldNames() {
44
- return [...new Set(Object.values(this.byAdapter).flatMap((perField) => Object.keys(perField)))];
45
- }
46
- /** The plain object, which is what a reader outside this package receives. */
47
- get stated() {
48
- return this.byAdapter;
49
- }
50
- /**
51
- * The entries whose field survives a cut, re-addressed by that field's new name.
52
- *
53
- * The adapter name is not a field and does not move; only the level below it does. An
54
- * entry left on the old name is not an error anywhere downstream — `adapter/sql` looks
55
- * it up by the field it is iterating and simply finds nothing.
56
- */
57
- cut(survives) {
58
- const out = {};
59
- for (const [adapter, perField] of Object.entries(this.byAdapter)) {
60
- const mapped = {};
61
- for (const [key, entry] of Object.entries(perField)) {
62
- const next = survives(key);
63
- if (next !== undefined)
64
- mapped[next] = entry;
65
- }
66
- if (Object.keys(mapped).length)
67
- out[adapter] = mapped;
68
- }
69
- return EntityAdapterSet.made(out);
70
- }
71
- static made(byAdapter) {
72
- return Object.keys(byAdapter).length ? new EntityAdapterSet(byAdapter) : undefined;
73
- }
74
- }
1
+ export {};
75
2
  //# sourceMappingURL=EntityAdapters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityAdapters.js","sourceRoot":"","sources":["../../src/entity/EntityAdapters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EntityAdapters.js","sourceRoot":"","sources":["../../src/entity/EntityAdapters.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import type { FieldName, Fields } from '../schema/fields/Field.js';
1
+ import type { FieldName, Fields } from '../field/Field.js';
2
2
  import type { EntityAdapters } from './EntityAdapters.js';
3
3
  export type CompositeUnique<TFields extends Fields> = readonly (readonly FieldName<TFields>[])[];
4
4
  export type PreviousNames<TFields extends Fields> = Readonly<Partial<Record<FieldName<TFields>, string>>>;
@@ -1 +1 @@
1
- {"version":3,"file":"EntityDeclarations.d.ts","sourceRoot":"","sources":["../../src/entity/EntityDeclarations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,MAAM,IAChD,SAAS,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;AAE7C,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,MAAM,IAAI,QAAQ,CAC1D,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAC5C,CAAC;AAEF,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,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,MAAM,IAChD,SAAS,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;AAE7C,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,MAAM,IAAI,QAAQ,CAC1D,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAC5C,CAAC;AAEF,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"}
package/dist/entity.d.ts CHANGED
@@ -1,5 +1,10 @@
1
- import { type Fields } from './schema/fields/Field.js';
1
+ import { type Fields } from './field/Field.js';
2
2
  import { type EntityDeclarations } from './entity/EntityDeclarations.js';
3
- import { type SchemaConstructor } from './schema/Schema.js';
3
+ import { type SchemaConstructor } from './Schema.js';
4
+ /**
5
+ * So the whole framework starts from one call: fields, and what they say about themselves.
6
+ * FR : pour que tout parte d'un appel : les champs, et ce qu'ils disent d'eux-mêmes.
7
+ * `class Post extends entity({ id: primary(), title: text() }, { unique: [['title']] }) {}`
8
+ */
4
9
  export declare function entity<TFields extends Fields>(fields: TFields, declarations?: EntityDeclarations<TFields>): SchemaConstructor<TFields>;
5
10
  //# sourceMappingURL=entity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEpE,wBAAgB,MAAM,CAAC,OAAO,SAAS,MAAM,EAC3C,MAAM,EAAE,OAAO,EACf,YAAY,GAAE,kBAAkB,CAAC,OAAO,CAAM,GAC7C,iBAAiB,CAAC,OAAO,CAAC,CAE5B"}
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE7D;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,OAAO,SAAS,MAAM,EAC3C,MAAM,EAAE,OAAO,EACf,YAAY,GAAE,kBAAkB,CAAC,OAAO,CAAM,GAC7C,iBAAiB,CAAC,OAAO,CAAC,CAE5B"}
package/dist/entity.js CHANGED
@@ -1,4 +1,9 @@
1
- import { Schema } from './schema/Schema.js';
1
+ import { Schema } from './Schema.js';
2
+ /**
3
+ * So the whole framework starts from one call: fields, and what they say about themselves.
4
+ * FR : pour que tout parte d'un appel : les champs, et ce qu'ils disent d'eux-mêmes.
5
+ * `class Post extends entity({ id: primary(), title: text() }, { unique: [['title']] }) {}`
6
+ */
2
7
  export function entity(fields, declarations = {}) {
3
8
  return Schema.of({ fields }).declares(declarations);
4
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAA0B,MAAM,oBAAoB,CAAC;AAEpE,MAAM,UAAU,MAAM,CACpB,MAAe,EACf,YAAY,GAAgC,EAAE;IAE9C,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAA0B,MAAM,aAAa,CAAC;AAE7D;;;;GAIG;AACH,MAAM,UAAU,MAAM,CACpB,MAAe,EACf,YAAY,GAAgC,EAAE;IAE9C,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACtD,CAAC"}
@@ -1,14 +1,12 @@
1
1
  import type { Shape } from '../axis/shape/Shape.js';
2
- import { type RoleRules } from '../axis/role/Role.js';
2
+ import type { RoleRules } from '../axis/role/Role.js';
3
3
  import type { LifecycleRules } from '../axis/lifecycle/Lifecycle.js';
4
4
  import type { BoundaryRef } from '../axis/boundary/Boundary.js';
5
5
  import type { Meta } from '../axis/Meta.js';
6
6
  import type { Axis } from '../axis/Axis.js';
7
7
  export type Fields = Record<string, Field>;
8
- /** A key of a field set — the name a declaration addresses a field by. */
9
8
  export type FieldName<TFields extends Fields> = Extract<keyof TFields, string>;
10
- /** The carrier, the three extension axes, the annotation the five the judge reads. */
11
- export type FieldDeclaration = Pick<Field, 'shape' | Axis['slot'] | 'meta'>;
9
+ type FieldDeclaration = Pick<Field, 'shape' | Axis['slot'] | 'meta'>;
12
10
  export declare class Field<T = unknown> {
13
11
  readonly shape: Shape;
14
12
  readonly role?: RoleRules;
@@ -19,6 +17,6 @@ export declare class Field<T = unknown> {
19
17
  constructor(init: FieldDeclaration, key?: string);
20
18
  static is(value: unknown): value is Field;
21
19
  with<U = T>(overrides: Partial<FieldDeclaration>): Field<U>;
22
- rename(map: (key: string) => string | undefined): Field<T>;
23
20
  }
21
+ export {};
24
22
  //# sourceMappingURL=Field.d.ts.map
@@ -0,0 +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,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE3C,MAAM,MAAM,SAAS,CAAC,OAAO,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,CAAC;AAE/E,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"}
@@ -0,0 +1,35 @@
1
+ import { FieldDeclarationValidator } from '../validator/FieldDeclarationValidator.js';
2
+ import { FieldValueValidator } from '../validator/FieldValueValidator.js';
3
+ export class Field {
4
+ shape;
5
+ role;
6
+ lifecycle;
7
+ boundary;
8
+ meta;
9
+ constructor(init, key) {
10
+ const verdict = FieldDeclarationValidator.of(init).verdict;
11
+ if (!verdict.success) {
12
+ throw new Error(`${key ? `Field '${key}': ` : ''}` +
13
+ verdict.errors.map((e) => `${e.path}: ${e.message}`).join('; '));
14
+ }
15
+ this.shape = init.shape;
16
+ this.role = init.role;
17
+ this.lifecycle = init.lifecycle;
18
+ this.boundary = init.boundary;
19
+ this.meta = init.meta;
20
+ const create = this.lifecycle?.create;
21
+ if (typeof create === 'object' && create !== null && 'value' in create) {
22
+ const checked = FieldValueValidator.of(this).validate(create.value);
23
+ if ('error' in checked)
24
+ throw new Error(`${key ? `Field '${key}': ` : ''}the declared default ${JSON.stringify(create.value)} ` +
25
+ `is not a legal value for it — ${checked.error}.`);
26
+ }
27
+ }
28
+ static is(value) {
29
+ return FieldDeclarationValidator.of(value).verdict.success;
30
+ }
31
+ with(overrides) {
32
+ return new Field({ ...this, ...overrides });
33
+ }
34
+ }
35
+ //# sourceMappingURL=Field.js.map
@@ -0,0 +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;AAQ1E,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,KAAK,CACb,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,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAClE,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,OAAO,IAAI,OAAO;gBACpB,MAAM,IAAI,KAAK,CACb,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,KAAK,GAAG,CACpD,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"}