@fougere/schema 0.2.0-alpha.2 → 0.4.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 (448) hide show
  1. package/README.md +1 -1
  2. package/dist/EntityAdapters.d.ts +26 -0
  3. package/dist/EntityAdapters.d.ts.map +1 -0
  4. package/dist/EntityAdapters.js +71 -0
  5. package/dist/EntityAdapters.js.map +1 -0
  6. package/dist/EntityDeclarations.d.ts +15 -0
  7. package/dist/EntityDeclarations.d.ts.map +1 -0
  8. package/dist/EntityDeclarations.js +2 -0
  9. package/dist/EntityDeclarations.js.map +1 -0
  10. package/dist/axis/Axis.d.ts +12 -0
  11. package/dist/axis/Axis.d.ts.map +1 -0
  12. package/dist/axis/Axis.js +11 -0
  13. package/dist/axis/Axis.js.map +1 -0
  14. package/dist/axis/Meta.d.ts +4 -0
  15. package/dist/axis/Meta.d.ts.map +1 -0
  16. package/dist/axis/Meta.js +2 -0
  17. package/dist/axis/Meta.js.map +1 -0
  18. package/dist/axis/boundary/Boundaries.d.ts +20 -0
  19. package/dist/axis/boundary/Boundaries.d.ts.map +1 -0
  20. package/dist/axis/boundary/Boundaries.js +31 -0
  21. package/dist/axis/boundary/Boundaries.js.map +1 -0
  22. package/dist/axis/boundary/Boundary.d.ts +26 -0
  23. package/dist/axis/boundary/Boundary.d.ts.map +1 -0
  24. package/dist/axis/boundary/Boundary.js +53 -0
  25. package/dist/axis/boundary/Boundary.js.map +1 -0
  26. package/dist/axis/boundary/BoundaryAxis.d.ts +4 -0
  27. package/dist/axis/boundary/BoundaryAxis.d.ts.map +1 -0
  28. package/dist/axis/boundary/BoundaryAxis.js +30 -0
  29. package/dist/axis/boundary/BoundaryAxis.js.map +1 -0
  30. package/dist/axis/lifecycle/Clock.d.ts +18 -0
  31. package/dist/axis/lifecycle/Clock.d.ts.map +1 -0
  32. package/dist/axis/lifecycle/Clock.js +25 -0
  33. package/dist/axis/lifecycle/Clock.js.map +1 -0
  34. package/dist/axis/lifecycle/Generators.d.ts +18 -0
  35. package/dist/axis/lifecycle/Generators.d.ts.map +1 -0
  36. package/dist/axis/lifecycle/Generators.js +38 -0
  37. package/dist/axis/lifecycle/Generators.js.map +1 -0
  38. package/dist/axis/lifecycle/Lifecycle.d.ts +28 -0
  39. package/dist/axis/lifecycle/Lifecycle.d.ts.map +1 -0
  40. package/dist/axis/lifecycle/Lifecycle.js +38 -0
  41. package/dist/axis/lifecycle/Lifecycle.js.map +1 -0
  42. package/dist/axis/lifecycle/LifecycleAxis.d.ts +4 -0
  43. package/dist/axis/lifecycle/LifecycleAxis.d.ts.map +1 -0
  44. package/dist/axis/lifecycle/LifecycleAxis.js +47 -0
  45. package/dist/axis/lifecycle/LifecycleAxis.js.map +1 -0
  46. package/dist/axis/lifecycle/apply.d.ts +6 -0
  47. package/dist/axis/lifecycle/apply.d.ts.map +1 -0
  48. package/dist/axis/lifecycle/apply.js +34 -0
  49. package/dist/axis/lifecycle/apply.js.map +1 -0
  50. package/dist/axis/role/Relation.d.ts +20 -0
  51. package/dist/axis/role/Relation.d.ts.map +1 -0
  52. package/dist/axis/role/Relation.js +21 -0
  53. package/dist/axis/role/Relation.js.map +1 -0
  54. package/dist/axis/role/Role.d.ts +26 -0
  55. package/dist/axis/role/Role.d.ts.map +1 -0
  56. package/dist/axis/role/Role.js +40 -0
  57. package/dist/axis/role/Role.js.map +1 -0
  58. package/dist/axis/role/RoleAxis.d.ts +5 -0
  59. package/dist/axis/role/RoleAxis.d.ts.map +1 -0
  60. package/dist/axis/role/RoleAxis.js +102 -0
  61. package/dist/axis/role/RoleAxis.js.map +1 -0
  62. package/dist/axis/shape/Formats.d.ts +8 -0
  63. package/dist/axis/shape/Formats.d.ts.map +1 -0
  64. package/dist/axis/shape/Formats.js +10 -0
  65. package/dist/axis/shape/Formats.js.map +1 -0
  66. package/dist/axis/shape/Shape.d.ts +58 -0
  67. package/dist/axis/shape/Shape.d.ts.map +1 -0
  68. package/dist/{field/shape.js → axis/shape/Shape.js} +10 -25
  69. package/dist/axis/shape/Shape.js.map +1 -0
  70. package/dist/card/Bundle.d.ts +15 -0
  71. package/dist/card/Bundle.d.ts.map +1 -0
  72. package/dist/card/Bundle.js +67 -0
  73. package/dist/card/Bundle.js.map +1 -0
  74. package/dist/card/Card.d.ts +27 -0
  75. package/dist/card/Card.d.ts.map +1 -0
  76. package/dist/card/Card.js +230 -0
  77. package/dist/card/Card.js.map +1 -0
  78. package/dist/card/Descriptor.d.ts +55 -0
  79. package/dist/card/Descriptor.d.ts.map +1 -0
  80. package/dist/card/Descriptor.js +2 -0
  81. package/dist/card/Descriptor.js.map +1 -0
  82. package/dist/card/EntityTypeSource.d.ts +12 -0
  83. package/dist/card/EntityTypeSource.d.ts.map +1 -0
  84. package/dist/card/EntityTypeSource.js +78 -0
  85. package/dist/card/EntityTypeSource.js.map +1 -0
  86. package/dist/card/FacadeTypeSource.d.ts +19 -0
  87. package/dist/card/FacadeTypeSource.d.ts.map +1 -0
  88. package/dist/card/FacadeTypeSource.js +40 -0
  89. package/dist/card/FacadeTypeSource.js.map +1 -0
  90. package/dist/card/admission.d.ts +9 -0
  91. package/dist/card/admission.d.ts.map +1 -0
  92. package/dist/card/admission.js +16 -0
  93. package/dist/card/admission.js.map +1 -0
  94. package/dist/card/diff.d.ts +96 -0
  95. package/dist/card/diff.d.ts.map +1 -0
  96. package/dist/card/diff.js +2 -0
  97. package/dist/card/diff.js.map +1 -0
  98. package/dist/constraint/FieldGroup.d.ts +21 -0
  99. package/dist/constraint/FieldGroup.d.ts.map +1 -0
  100. package/dist/constraint/FieldGroup.js +65 -0
  101. package/dist/constraint/FieldGroup.js.map +1 -0
  102. package/dist/constraint/Unique.d.ts +4 -0
  103. package/dist/constraint/Unique.d.ts.map +1 -0
  104. package/dist/constraint/Unique.js +4 -0
  105. package/dist/constraint/Unique.js.map +1 -0
  106. package/dist/entity.d.ts +4 -19
  107. package/dist/entity.d.ts.map +1 -1
  108. package/dist/entity.js +8 -39
  109. package/dist/entity.js.map +1 -1
  110. package/dist/fields/Field.d.ts +24 -0
  111. package/dist/fields/Field.d.ts.map +1 -0
  112. package/dist/fields/Field.js +52 -0
  113. package/dist/fields/Field.js.map +1 -0
  114. package/dist/fields/FieldSet.d.ts +28 -0
  115. package/dist/fields/FieldSet.d.ts.map +1 -0
  116. package/dist/fields/FieldSet.js +55 -0
  117. package/dist/fields/FieldSet.js.map +1 -0
  118. package/dist/index.d.ts +59 -37
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.js +50 -48
  121. package/dist/index.js.map +1 -1
  122. package/dist/judge/Cases.d.ts +50 -0
  123. package/dist/judge/Cases.d.ts.map +1 -0
  124. package/dist/judge/Cases.js +108 -0
  125. package/dist/judge/Cases.js.map +1 -0
  126. package/dist/judge/FieldJudge.d.ts +9 -0
  127. package/dist/judge/FieldJudge.d.ts.map +1 -0
  128. package/dist/judge/FieldJudge.js +54 -0
  129. package/dist/judge/FieldJudge.js.map +1 -0
  130. package/dist/judge/RowJudge.d.ts +12 -0
  131. package/dist/judge/RowJudge.d.ts.map +1 -0
  132. package/dist/judge/RowJudge.js +81 -0
  133. package/dist/judge/RowJudge.js.map +1 -0
  134. package/dist/judge/RowRefusal.d.ts +17 -0
  135. package/dist/judge/RowRefusal.d.ts.map +1 -0
  136. package/dist/judge/RowRefusal.js +16 -0
  137. package/dist/judge/RowRefusal.js.map +1 -0
  138. package/dist/judge/ValueForm.d.ts +3 -0
  139. package/dist/judge/ValueForm.d.ts.map +1 -0
  140. package/dist/judge/ValueForm.js +3 -0
  141. package/dist/judge/ValueForm.js.map +1 -0
  142. package/dist/judge/ValueJudge.d.ts +12 -0
  143. package/dist/judge/ValueJudge.d.ts.map +1 -0
  144. package/dist/judge/ValueJudge.js +60 -0
  145. package/dist/judge/ValueJudge.js.map +1 -0
  146. package/dist/judge/options.d.ts +4 -0
  147. package/dist/judge/options.d.ts.map +1 -0
  148. package/dist/judge/options.js +2 -0
  149. package/dist/judge/options.js.map +1 -0
  150. package/dist/judge/result.d.ts +17 -0
  151. package/dist/judge/result.d.ts.map +1 -0
  152. package/dist/judge/result.js +2 -0
  153. package/dist/judge/result.js.map +1 -0
  154. package/dist/projection/SchemaOrCard.d.ts +7 -0
  155. package/dist/projection/SchemaOrCard.d.ts.map +1 -0
  156. package/dist/projection/SchemaOrCard.js +11 -0
  157. package/dist/projection/SchemaOrCard.js.map +1 -0
  158. package/dist/projection/Visibility.d.ts +10 -0
  159. package/dist/projection/Visibility.d.ts.map +1 -0
  160. package/dist/projection/Visibility.js +55 -0
  161. package/dist/projection/Visibility.js.map +1 -0
  162. package/dist/{projections → projection}/standard.d.ts +2 -10
  163. package/dist/projection/standard.d.ts.map +1 -0
  164. package/dist/projection/standard.js +2 -0
  165. package/dist/projection/standard.js.map +1 -0
  166. package/dist/schema/Schema.d.ts +63 -0
  167. package/dist/schema/Schema.d.ts.map +1 -0
  168. package/dist/schema/Schema.js +129 -0
  169. package/dist/schema/Schema.js.map +1 -0
  170. package/dist/schema/SchemaDefinition.d.ts +46 -0
  171. package/dist/schema/SchemaDefinition.d.ts.map +1 -0
  172. package/dist/schema/SchemaDefinition.js +64 -0
  173. package/dist/schema/SchemaDefinition.js.map +1 -0
  174. package/dist/schema/SchemaDerivation.d.ts +28 -0
  175. package/dist/schema/SchemaDerivation.d.ts.map +1 -0
  176. package/dist/schema/SchemaDerivation.js +37 -0
  177. package/dist/schema/SchemaDerivation.js.map +1 -0
  178. package/dist/schema/SchemaView.d.ts +23 -0
  179. package/dist/schema/SchemaView.d.ts.map +1 -0
  180. package/dist/schema/SchemaView.js +2 -0
  181. package/dist/schema/SchemaView.js.map +1 -0
  182. package/dist/utils.d.ts +4 -0
  183. package/dist/utils.d.ts.map +1 -0
  184. package/dist/utils.js +13 -0
  185. package/dist/utils.js.map +1 -0
  186. package/dist/vocabulary/bool.d.ts +1 -1
  187. package/dist/vocabulary/bool.d.ts.map +1 -1
  188. package/dist/vocabulary/bool.js +1 -1
  189. package/dist/vocabulary/bool.js.map +1 -1
  190. package/dist/vocabulary/created.d.ts +1 -5
  191. package/dist/vocabulary/created.d.ts.map +1 -1
  192. package/dist/vocabulary/created.js +1 -5
  193. package/dist/vocabulary/created.js.map +1 -1
  194. package/dist/vocabulary/date.d.ts +1 -1
  195. package/dist/vocabulary/date.d.ts.map +1 -1
  196. package/dist/vocabulary/date.js +1 -1
  197. package/dist/vocabulary/date.js.map +1 -1
  198. package/dist/vocabulary/email.d.ts +1 -2
  199. package/dist/vocabulary/email.d.ts.map +1 -1
  200. package/dist/vocabulary/email.js +0 -1
  201. package/dist/vocabulary/email.js.map +1 -1
  202. package/dist/vocabulary/immutable.d.ts +2 -6
  203. package/dist/vocabulary/immutable.d.ts.map +1 -1
  204. package/dist/vocabulary/immutable.js +4 -7
  205. package/dist/vocabulary/immutable.js.map +1 -1
  206. package/dist/vocabulary/indexed.d.ts +2 -7
  207. package/dist/vocabulary/indexed.d.ts.map +1 -1
  208. package/dist/vocabulary/indexed.js +2 -8
  209. package/dist/vocabulary/indexed.js.map +1 -1
  210. package/dist/vocabulary/json.d.ts +2 -10
  211. package/dist/vocabulary/json.d.ts.map +1 -1
  212. package/dist/vocabulary/json.js +12 -7
  213. package/dist/vocabulary/json.js.map +1 -1
  214. package/dist/vocabulary/list.d.ts +1 -12
  215. package/dist/vocabulary/list.d.ts.map +1 -1
  216. package/dist/vocabulary/list.js +1 -14
  217. package/dist/vocabulary/list.js.map +1 -1
  218. package/dist/vocabulary/many.d.ts +2 -5
  219. package/dist/vocabulary/many.d.ts.map +1 -1
  220. package/dist/vocabulary/many.js +3 -6
  221. package/dist/vocabulary/many.js.map +1 -1
  222. package/dist/vocabulary/nullable.d.ts +2 -6
  223. package/dist/vocabulary/nullable.d.ts.map +1 -1
  224. package/dist/vocabulary/nullable.js +5 -8
  225. package/dist/vocabulary/nullable.js.map +1 -1
  226. package/dist/vocabulary/number.d.ts +1 -1
  227. package/dist/vocabulary/number.d.ts.map +1 -1
  228. package/dist/vocabulary/number.js +1 -1
  229. package/dist/vocabulary/number.js.map +1 -1
  230. package/dist/vocabulary/oneOf.d.ts +1 -8
  231. package/dist/vocabulary/oneOf.d.ts.map +1 -1
  232. package/dist/vocabulary/oneOf.js +1 -1
  233. package/dist/vocabulary/oneOf.js.map +1 -1
  234. package/dist/vocabulary/optional.d.ts +2 -9
  235. package/dist/vocabulary/optional.d.ts.map +1 -1
  236. package/dist/vocabulary/optional.js +6 -14
  237. package/dist/vocabulary/optional.js.map +1 -1
  238. package/dist/vocabulary/primary.d.ts +2 -15
  239. package/dist/vocabulary/primary.d.ts.map +1 -1
  240. package/dist/vocabulary/primary.js +4 -11
  241. package/dist/vocabulary/primary.js.map +1 -1
  242. package/dist/vocabulary/readOnly.d.ts +2 -6
  243. package/dist/vocabulary/readOnly.d.ts.map +1 -1
  244. package/dist/vocabulary/readOnly.js +5 -8
  245. package/dist/vocabulary/readOnly.js.map +1 -1
  246. package/dist/vocabulary/ref.d.ts +2 -7
  247. package/dist/vocabulary/ref.d.ts.map +1 -1
  248. package/dist/vocabulary/ref.js +3 -14
  249. package/dist/vocabulary/ref.js.map +1 -1
  250. package/dist/vocabulary/text.d.ts +2 -2
  251. package/dist/vocabulary/text.d.ts.map +1 -1
  252. package/dist/vocabulary/text.js +1 -1
  253. package/dist/vocabulary/text.js.map +1 -1
  254. package/dist/vocabulary/unique.d.ts +2 -12
  255. package/dist/vocabulary/unique.d.ts.map +1 -1
  256. package/dist/vocabulary/unique.js +5 -13
  257. package/dist/vocabulary/unique.js.map +1 -1
  258. package/dist/vocabulary/updated.d.ts +1 -6
  259. package/dist/vocabulary/updated.d.ts.map +1 -1
  260. package/dist/vocabulary/updated.js +0 -5
  261. package/dist/vocabulary/updated.js.map +1 -1
  262. package/dist/vocabulary/url.d.ts +1 -2
  263. package/dist/vocabulary/url.d.ts.map +1 -1
  264. package/dist/vocabulary/url.js +0 -1
  265. package/dist/vocabulary/url.js.map +1 -1
  266. package/dist/vocabulary/vocabulary.d.ts +4 -0
  267. package/dist/vocabulary/vocabulary.d.ts.map +1 -0
  268. package/dist/vocabulary/vocabulary.js +31 -0
  269. package/dist/vocabulary/vocabulary.js.map +1 -0
  270. package/dist/vocabulary/writeOnly.d.ts +2 -6
  271. package/dist/vocabulary/writeOnly.d.ts.map +1 -1
  272. package/dist/vocabulary/writeOnly.js +5 -8
  273. package/dist/vocabulary/writeOnly.js.map +1 -1
  274. package/package.json +8 -4
  275. package/src/EntityAdapters.ts +95 -0
  276. package/src/EntityDeclarations.ts +19 -0
  277. package/src/axis/Axis.ts +25 -0
  278. package/src/axis/Meta.ts +3 -0
  279. package/src/axis/boundary/Boundaries.ts +44 -0
  280. package/src/axis/boundary/Boundary.ts +69 -0
  281. package/src/axis/boundary/BoundaryAxis.ts +32 -0
  282. package/src/axis/lifecycle/Clock.ts +26 -0
  283. package/src/axis/lifecycle/Generators.ts +46 -0
  284. package/src/axis/lifecycle/Lifecycle.ts +53 -0
  285. package/src/axis/lifecycle/LifecycleAxis.ts +49 -0
  286. package/src/axis/lifecycle/apply.ts +38 -0
  287. package/src/axis/role/Relation.ts +31 -0
  288. package/src/axis/role/Role.ts +56 -0
  289. package/src/axis/role/RoleAxis.ts +115 -0
  290. package/src/axis/shape/Formats.ts +22 -0
  291. package/src/axis/shape/Shape.ts +91 -0
  292. package/src/card/Bundle.ts +80 -0
  293. package/src/card/Card.ts +256 -0
  294. package/src/card/Descriptor.ts +68 -0
  295. package/src/card/EntityTypeSource.ts +90 -0
  296. package/src/card/FacadeTypeSource.ts +55 -0
  297. package/src/card/admission.ts +25 -0
  298. package/src/card/diff.ts +56 -0
  299. package/src/constraint/FieldGroup.ts +91 -0
  300. package/src/constraint/Unique.ts +3 -0
  301. package/src/entity.ts +15 -0
  302. package/src/fields/Field.ts +80 -0
  303. package/src/fields/FieldSet.ts +62 -0
  304. package/src/index.ts +64 -0
  305. package/src/judge/Cases.ts +139 -0
  306. package/src/judge/FieldJudge.ts +61 -0
  307. package/src/judge/RowJudge.ts +84 -0
  308. package/src/judge/RowRefusal.ts +17 -0
  309. package/src/judge/ValueForm.ts +7 -0
  310. package/src/judge/ValueJudge.ts +72 -0
  311. package/src/judge/options.ts +3 -0
  312. package/src/judge/result.ts +10 -0
  313. package/src/projection/SchemaOrCard.ts +18 -0
  314. package/src/projection/Visibility.ts +47 -0
  315. package/src/projection/standard.ts +47 -0
  316. package/src/schema/Schema.ts +167 -0
  317. package/src/schema/SchemaDefinition.ts +87 -0
  318. package/src/schema/SchemaDerivation.ts +46 -0
  319. package/src/schema/SchemaView.ts +25 -0
  320. package/src/utils.ts +13 -0
  321. package/src/vocabulary/bool.ts +9 -0
  322. package/src/vocabulary/created.ts +8 -0
  323. package/src/vocabulary/date.ts +5 -0
  324. package/src/vocabulary/email.ts +6 -0
  325. package/src/vocabulary/immutable.ts +6 -0
  326. package/src/vocabulary/indexed.ts +4 -0
  327. package/src/vocabulary/json.ts +22 -0
  328. package/src/vocabulary/list.ts +13 -0
  329. package/src/vocabulary/many.ts +9 -0
  330. package/src/vocabulary/nullable.ts +7 -0
  331. package/src/vocabulary/number.ts +17 -0
  332. package/src/vocabulary/oneOf.ts +24 -0
  333. package/src/vocabulary/optional.ts +8 -0
  334. package/src/vocabulary/primary.ts +33 -0
  335. package/src/vocabulary/readOnly.ts +7 -0
  336. package/src/vocabulary/ref.ts +13 -0
  337. package/src/vocabulary/text.ts +19 -0
  338. package/src/vocabulary/unique.ts +10 -0
  339. package/src/vocabulary/updated.ts +7 -0
  340. package/src/vocabulary/url.ts +6 -0
  341. package/src/vocabulary/vocabulary.ts +40 -0
  342. package/src/vocabulary/writeOnly.ts +7 -0
  343. package/dist/field/boundary.d.ts +0 -69
  344. package/dist/field/boundary.d.ts.map +0 -1
  345. package/dist/field/boundary.js +0 -82
  346. package/dist/field/boundary.js.map +0 -1
  347. package/dist/field/field.d.ts +0 -21
  348. package/dist/field/field.d.ts.map +0 -1
  349. package/dist/field/field.js +0 -24
  350. package/dist/field/field.js.map +0 -1
  351. package/dist/field/format.d.ts +0 -29
  352. package/dist/field/format.d.ts.map +0 -1
  353. package/dist/field/format.js +0 -24
  354. package/dist/field/format.js.map +0 -1
  355. package/dist/field/index.d.ts +0 -8
  356. package/dist/field/index.d.ts.map +0 -1
  357. package/dist/field/index.js +0 -10
  358. package/dist/field/index.js.map +0 -1
  359. package/dist/field/lifecycle.d.ts +0 -31
  360. package/dist/field/lifecycle.d.ts.map +0 -1
  361. package/dist/field/lifecycle.js +0 -20
  362. package/dist/field/lifecycle.js.map +0 -1
  363. package/dist/field/meta.d.ts +0 -5
  364. package/dist/field/meta.d.ts.map +0 -1
  365. package/dist/field/meta.js +0 -5
  366. package/dist/field/meta.js.map +0 -1
  367. package/dist/field/role.d.ts +0 -47
  368. package/dist/field/role.d.ts.map +0 -1
  369. package/dist/field/role.js +0 -35
  370. package/dist/field/role.js.map +0 -1
  371. package/dist/field/shape.d.ts +0 -89
  372. package/dist/field/shape.d.ts.map +0 -1
  373. package/dist/field/shape.js.map +0 -1
  374. package/dist/hints.d.ts +0 -28
  375. package/dist/hints.d.ts.map +0 -1
  376. package/dist/hints.js +0 -23
  377. package/dist/hints.js.map +0 -1
  378. package/dist/name.d.ts +0 -8
  379. package/dist/name.d.ts.map +0 -1
  380. package/dist/name.js +0 -10
  381. package/dist/name.js.map +0 -1
  382. package/dist/projections/card.d.ts +0 -98
  383. package/dist/projections/card.d.ts.map +0 -1
  384. package/dist/projections/card.js +0 -8
  385. package/dist/projections/card.js.map +0 -1
  386. package/dist/projections/describe.d.ts +0 -25
  387. package/dist/projections/describe.d.ts.map +0 -1
  388. package/dist/projections/describe.js +0 -131
  389. package/dist/projections/describe.js.map +0 -1
  390. package/dist/projections/encode.d.ts +0 -11
  391. package/dist/projections/encode.d.ts.map +0 -1
  392. package/dist/projections/encode.js +0 -26
  393. package/dist/projections/encode.js.map +0 -1
  394. package/dist/projections/io.d.ts +0 -24
  395. package/dist/projections/io.d.ts.map +0 -1
  396. package/dist/projections/io.js +0 -46
  397. package/dist/projections/io.js.map +0 -1
  398. package/dist/projections/lifecycle.d.ts +0 -29
  399. package/dist/projections/lifecycle.d.ts.map +0 -1
  400. package/dist/projections/lifecycle.js +0 -93
  401. package/dist/projections/lifecycle.js.map +0 -1
  402. package/dist/projections/reconstruct.d.ts +0 -31
  403. package/dist/projections/reconstruct.d.ts.map +0 -1
  404. package/dist/projections/reconstruct.js +0 -146
  405. package/dist/projections/reconstruct.js.map +0 -1
  406. package/dist/projections/source.d.ts +0 -18
  407. package/dist/projections/source.d.ts.map +0 -1
  408. package/dist/projections/source.js +0 -18
  409. package/dist/projections/source.js.map +0 -1
  410. package/dist/projections/standard.d.ts.map +0 -1
  411. package/dist/projections/standard.js +0 -10
  412. package/dist/projections/standard.js.map +0 -1
  413. package/dist/projections/typescript.d.ts +0 -37
  414. package/dist/projections/typescript.d.ts.map +0 -1
  415. package/dist/projections/typescript.js +0 -157
  416. package/dist/projections/typescript.js.map +0 -1
  417. package/dist/schema/index.d.ts +0 -3
  418. package/dist/schema/index.d.ts.map +0 -1
  419. package/dist/schema/index.js +0 -2
  420. package/dist/schema/index.js.map +0 -1
  421. package/dist/schema/schema.d.ts +0 -74
  422. package/dist/schema/schema.d.ts.map +0 -1
  423. package/dist/schema/schema.js +0 -162
  424. package/dist/schema/schema.js.map +0 -1
  425. package/dist/schema/view.d.ts +0 -26
  426. package/dist/schema/view.d.ts.map +0 -1
  427. package/dist/schema/view.js +0 -2
  428. package/dist/schema/view.js.map +0 -1
  429. package/dist/unique.d.ts +0 -40
  430. package/dist/unique.d.ts.map +0 -1
  431. package/dist/unique.js +0 -57
  432. package/dist/unique.js.map +0 -1
  433. package/dist/validation/index.d.ts +0 -4
  434. package/dist/validation/index.d.ts.map +0 -1
  435. package/dist/validation/index.js +0 -2
  436. package/dist/validation/index.js.map +0 -1
  437. package/dist/validation/judge.d.ts +0 -55
  438. package/dist/validation/judge.d.ts.map +0 -1
  439. package/dist/validation/judge.js +0 -351
  440. package/dist/validation/judge.js.map +0 -1
  441. package/dist/validation/options.d.ts +0 -6
  442. package/dist/validation/options.d.ts.map +0 -1
  443. package/dist/validation/options.js +0 -3
  444. package/dist/validation/options.js.map +0 -1
  445. package/dist/validation/result.d.ts +0 -20
  446. package/dist/validation/result.d.ts.map +0 -1
  447. package/dist/validation/result.js +0 -3
  448. package/dist/validation/result.js.map +0 -1
@@ -0,0 +1,24 @@
1
+ import { Field } from '../fields/Field.js';
2
+
3
+ interface OneOfOptions<V extends string = string> {
4
+ description?: string;
5
+ default?: V;
6
+ }
7
+
8
+ export function oneOf<const T extends readonly string[]>(...values: [...T]): Field<T[number]>;
9
+ export function oneOf<const T extends readonly string[]>(
10
+ ...args: [...T, OneOfOptions<T[number]>]
11
+ ): Field<T[number]>;
12
+ export function oneOf<const T extends readonly string[]>(
13
+ ...args: [...T] | [...T, OneOfOptions<T[number]>]
14
+ ): Field<T[number]> {
15
+ const last = args[args.length - 1];
16
+ const hasOpts = typeof last === 'object' && last !== null && !Array.isArray(last);
17
+ const values = (hasOpts ? args.slice(0, -1) : args) as unknown as readonly string[];
18
+ const opts = hasOpts ? (last as OneOfOptions) : {};
19
+ return new Field<T[number]>({
20
+ shape: { type: 'string', enum: values },
21
+ lifecycle: opts.default !== undefined ? { create: { value: opts.default } } : undefined,
22
+ meta: opts.description !== undefined ? { description: opts.description } : undefined,
23
+ });
24
+ }
@@ -0,0 +1,8 @@
1
+ import { vocabulary } from './vocabulary.js';
2
+ import { Anatomy } from '../axis/shape/Shape.js';
3
+ import { type Field } from '../fields/Field.js';
4
+
5
+ export const optional: <T>(field: Field<T>) => Field<T | null> = vocabulary('optional', (field) => ({
6
+ shape: Anatomy.nullable(field.shape),
7
+ ...(field.lifecycle?.create === undefined ? { lifecycle: { create: 'optional' as const } } : {}),
8
+ }));
@@ -0,0 +1,33 @@
1
+ import { Field } from '../fields/Field.js';
2
+ import { Generators, type GeneratorRef } from '../axis/lifecycle/Generators.js';
3
+
4
+ interface PrimaryOptions {
5
+ generate?: GeneratorRef | [name: string, fn: () => string];
6
+ }
7
+
8
+ export function primary(opts?: PrimaryOptions): Field<string>;
9
+ export function primary<T>(field: Field<T>): Field<T>;
10
+ export function primary(fieldOrOptions?: Field | PrimaryOptions): Field {
11
+ if (Field.is(fieldOrOptions)) {
12
+ const field = fieldOrOptions;
13
+ return field.with({
14
+ role: { ...field.role, primary: true },
15
+ lifecycle: { ...field.lifecycle, update: "forbidden" },
16
+ });
17
+ }
18
+
19
+ const opts = (fieldOrOptions ?? {}) as PrimaryOptions;
20
+ let generate: GeneratorRef;
21
+ if (Array.isArray(opts.generate)) {
22
+ const [name, fn] = opts.generate;
23
+ Generators.register(name, fn);
24
+ generate = name;
25
+ } else {
26
+ generate = opts.generate ?? "cuid2";
27
+ }
28
+ return new Field<string>({
29
+ shape: { type: "string" },
30
+ role: { primary: true },
31
+ lifecycle: { create: { generate }, update: "forbidden" },
32
+ });
33
+ }
@@ -0,0 +1,7 @@
1
+ import { vocabulary } from './vocabulary.js';
2
+ import { Boundary } from '../axis/boundary/Boundary.js';
3
+ import { Field } from '../fields/Field.js';
4
+
5
+ export const readOnly: <T>(field: Field<T>) => Field<T> = vocabulary('readOnly', (field) => ({
6
+ boundary: Boundary.declared(field).with({ in: 'closed' }),
7
+ }));
@@ -0,0 +1,13 @@
1
+ import { Relation, type EntityConstructor } from '../axis/role/Relation.js';
2
+ import { Field } from '../fields/Field.js';
3
+
4
+ export interface RefOptions {
5
+ cascade?: boolean;
6
+ }
7
+
8
+ export function ref<E extends EntityConstructor>(target: E | (() => E), opts?: RefOptions): Field<string> {
9
+ return new Field<string>({
10
+ shape: { type: 'string' },
11
+ role: { relation: Relation.one(target, opts?.cascade) },
12
+ });
13
+ }
@@ -0,0 +1,19 @@
1
+ import { Field } from '../fields/Field.js';
2
+ import { type StringFormat } from '../axis/shape/Formats.js';
3
+
4
+ export interface TextOptions {
5
+ min?: number;
6
+ max?: number;
7
+ pattern?: string;
8
+ format?: StringFormat;
9
+ default?: string;
10
+ description?: string;
11
+ }
12
+
13
+ export function text(opts?: TextOptions): Field<string> {
14
+ return new Field<string>({
15
+ shape: { type: 'string', minLength: opts?.min, maxLength: opts?.max, pattern: opts?.pattern, format: opts?.format },
16
+ lifecycle: opts?.default !== undefined ? { create: { value: opts.default } } : undefined,
17
+ meta: opts?.description !== undefined ? { description: opts.description } : undefined,
18
+ });
19
+ }
@@ -0,0 +1,10 @@
1
+ import { vocabulary } from "./vocabulary.js";
2
+ import { Field } from "../fields/Field.js";
3
+ import { Unique } from "../constraint/Unique.js";
4
+
5
+ export const unique: <T>(field: Field<T>) => Field<T> = vocabulary(
6
+ "unique",
7
+ (field) => ({
8
+ role: { rules: [...(field.role?.rules ?? []), new Unique([])] },
9
+ }),
10
+ );
@@ -0,0 +1,7 @@
1
+ import { created } from './created.js';
2
+ import { Field } from '../fields/Field.js';
3
+
4
+ export function updated(): Field<Date> {
5
+ const base = created();
6
+ return base.with({ lifecycle: { ...base.lifecycle, update: 'now' } });
7
+ }
@@ -0,0 +1,6 @@
1
+ import { text, type TextOptions } from './text.js';
2
+ import type { Field } from '../fields/Field.js';
3
+
4
+ export function url(opts?: Omit<TextOptions, 'format'>): Field<string> {
5
+ return text({ ...opts, format: 'uri' });
6
+ }
@@ -0,0 +1,40 @@
1
+ import { Field } from '../fields/Field.js';
2
+ import { EXTENSION_SLOTS } from '../axis/Axis.js';
3
+ import { dequal } from 'dequal';
4
+
5
+ const MEMBER_SLOTS = [...EXTENSION_SLOTS, 'meta'] as const;
6
+
7
+ export function vocabulary(
8
+ name: string,
9
+ states: (field: Field) => Partial<Field>,
10
+ ): FieldWord {
11
+ return (field) => field.with(merge(name, field, states(field)));
12
+ }
13
+
14
+ export type FieldWord = (field: Field<any>) => Field<any>;
15
+
16
+ function merge(name: string, field: Field, stated: Partial<Field>): Partial<Field> {
17
+ const out: Record<string, unknown> = {};
18
+ if ('shape' in stated) out.shape = stated.shape;
19
+
20
+ for (const slot of MEMBER_SLOTS) {
21
+ const members = stated[slot];
22
+ if (members === undefined) continue;
23
+ const held = field[slot] as Record<string, unknown> | undefined;
24
+ if (typeof members !== 'object' || members === null || typeof held !== 'object') {
25
+ out[slot] = members;
26
+ continue;
27
+ }
28
+ for (const [member, value] of Object.entries(members)) {
29
+ const previous = held?.[member];
30
+ if (previous === undefined || dequal(previous, value)) continue;
31
+ throw new Error(
32
+ `vocabulary: \`${name}\` states ${slot}.${member} = ${JSON.stringify(value)}, but the ` +
33
+ `field already states ${JSON.stringify(previous)}. Apply one or the other, not both.`,
34
+ );
35
+ }
36
+ out[slot] = { ...held, ...members };
37
+ }
38
+ return out as Partial<Field>;
39
+ }
40
+
@@ -0,0 +1,7 @@
1
+ import { vocabulary } from './vocabulary.js';
2
+ import { Boundary } from '../axis/boundary/Boundary.js';
3
+ import { Field } from '../fields/Field.js';
4
+
5
+ export const writeOnly: <T>(field: Field<T>) => Field<T> = vocabulary('writeOnly', (field) => ({
6
+ boundary: Boundary.declared(field).with({ out: 'closed' }),
7
+ }));
@@ -1,69 +0,0 @@
1
- import type { Field } from './field.js';
2
- /**
3
- * Axis 4 · boundary — HOW and IN WHICH DIRECTION a value crosses the CLIENT frontier.
4
- *
5
- * ⚠️ The client frontier ONLY: `in` parses a request, `out` renders a response. No storage
6
- * adapter reads it, so the domain↔column conversion is a second frontier, unnamed today.
7
- *
8
- * Each direction carries one of two facets: a NAMED conversion (`{ decode }`/`{ encode }`)
9
- * or the permission token `'closed'`. Absent → open, identity. Named and never a closure,
10
- * so an adapter can read what a field does. The default is derived from `shape`; a
11
- * declared boundary overrides it per direction.
12
- */
13
- /** Inbound: a supplied wire value → domain value. May fail (transformOrFail-style). */
14
- export type Decoder = (value: unknown) => {
15
- value: unknown;
16
- } | {
17
- error: string;
18
- };
19
- /** Outbound: a domain value → wire value. Total — a valid domain value always encodes. */
20
- export type Encoder = (value: unknown) => unknown;
21
- /** The normal form, indexed by direction. Either direction absent → open, identity. */
22
- export interface Boundary {
23
- in?: 'closed' | {
24
- decode: string;
25
- };
26
- out?: 'closed' | {
27
- encode: string;
28
- };
29
- }
30
- /**
31
- * What a field may carry on its `boundary` slot:
32
- * - a string — an ALIAS, resolved to a {@link Boundary} in the alias registry
33
- * - a {@link Boundary} — directional rules directly (allows asymmetry)
34
- *
35
- * The bare string literals are the built-in aliases; `(string & {})` keeps
36
- * autocomplete on them while leaving the set open to `registerBoundaryAlias`.
37
- */
38
- export type BoundaryRef = 'isoDate' | (string & {}) | Boundary;
39
- export declare class Boundaries {
40
- private static readonly decoders;
41
- private static readonly encoders;
42
- private static readonly aliases;
43
- static registerDecoder(name: string, fn: Decoder): void;
44
- static registerEncoder(name: string, fn: Encoder): void;
45
- /** Name a pair of directional rules, so a field declares `boundary: 'moneyCents'`. */
46
- static registerAlias(name: string, boundary: Boundary): void;
47
- static alias(name: string): Boundary | undefined;
48
- static decoder(name: string): Decoder;
49
- static encoder(name: string): Encoder;
50
- private static named;
51
- }
52
- /** The field's DECLARED boundary in normal form (alias resolved) — no derived default. */
53
- export declare function declaredBoundary(field: Field): Boundary;
54
- /**
55
- * The field's EFFECTIVE boundary: declared rules win per direction, the
56
- * shape-derived default fills the rest. This is the reader every consumer of
57
- * the axis goes through — `boundaryOf(f).in === 'closed'` is the read-only
58
- * test, `.out === 'closed'` the write-only one.
59
- */
60
- export declare function boundaryOf(field: Field): Boundary;
61
- /**
62
- * A field's effective conversion functions. A closed direction converts as identity — the
63
- * permission facet is judged by the façade, not here.
64
- */
65
- export declare function resolveBoundary(field: Field): {
66
- decode: Decoder;
67
- encode: Encoder;
68
- };
69
- //# sourceMappingURL=boundary.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../src/field/boundary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGxC;;;;;;;;;;GAUG;AAEH,uFAAuF;AACvF,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACjF,0FAA0F;AAC1F,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;AAElD,uFAAuF;AACvF,MAAM,WAAW,QAAQ;IACvB,EAAE,CAAC,EAAE,QAAQ,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,GAAG,CAAC,EAAE,QAAQ,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC;AAI/D,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAA+B;IAE9D,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,CAAiC;IACxF,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,CAAiC;IAExF,sFAAsF;IACtF,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAsC;IAElG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAmC;IAEnF,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAuD;IAC5F,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAuD;IAE5F,OAAO,CAAC,MAAM,CAAC,KAAK;CAUrB;AA8BD,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,CASvD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,CAIjD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAMlF"}
@@ -1,82 +0,0 @@
1
- import { Anatomy } from './shape.js';
2
- // ─── Registries (open, extensible — same spirit as FougereHints) ──
3
- export class Boundaries {
4
- static decoders = new Map();
5
- static encoders = new Map();
6
- static aliases = new Map();
7
- static registerDecoder(name, fn) { this.decoders.set(name, fn); }
8
- static registerEncoder(name, fn) { this.encoders.set(name, fn); }
9
- /** Name a pair of directional rules, so a field declares `boundary: 'moneyCents'`. */
10
- static registerAlias(name, boundary) { this.aliases.set(name, boundary); }
11
- static alias(name) { return this.aliases.get(name); }
12
- static decoder(name) { return this.named(this.decoders, name, 'decoder'); }
13
- static encoder(name) { return this.named(this.encoders, name, 'encoder'); }
14
- static named(registry, name, kind) {
15
- const fn = registry.get(name);
16
- if (!fn) {
17
- throw new Error(`Unknown boundary ${kind}: '${name}'. Register it with ` +
18
- `Boundaries.register${kind[0].toUpperCase()}${kind.slice(1)}('${name}', …).`);
19
- }
20
- return fn;
21
- }
22
- }
23
- const identityDecoder = (value) => ({ value });
24
- const identityEncoder = (value) => value;
25
- // `isoDate`: the only non-identity built-in. Inbound accepts a Date or an ISO-ish
26
- // string and yields a Date; outbound yields an ISO string. Validity is already
27
- // guaranteed by `shape` (the date predicate) before decode runs.
28
- Boundaries.registerDecoder('isoDate', (value) => {
29
- if (value instanceof Date)
30
- return { value };
31
- if (typeof value === 'string') {
32
- const d = new Date(value);
33
- return Number.isNaN(d.getTime()) ? { error: 'Invalid date' } : { value: d };
34
- }
35
- return { error: 'Expected a date' };
36
- });
37
- Boundaries.registerEncoder('isoDate', (value) => value instanceof Date ? value.toISOString() : value);
38
- Boundaries.registerAlias('isoDate', { in: { decode: 'isoDate' }, out: { encode: 'isoDate' } });
39
- /** Default boundary derived from a field's shape. A date-time string → isoDate, else identity. */
40
- function defaultBoundaryForShape(shape) {
41
- const base = Anatomy.of(shape).base;
42
- if (base && base.type === 'string' && base.format === 'date-time')
43
- return Boundaries.alias('isoDate');
44
- return {};
45
- }
46
- // ─── Resolution ──────────────────────────────────────
47
- /** The field's DECLARED boundary in normal form (alias resolved) — no derived default. */
48
- export function declaredBoundary(field) {
49
- const ref = field.boundary;
50
- if (ref === undefined)
51
- return {};
52
- if (typeof ref === 'string') {
53
- const alias = Boundaries.alias(ref);
54
- if (!alias)
55
- throw new Error(`Unknown boundary alias: '${ref}'`);
56
- return alias;
57
- }
58
- return ref;
59
- }
60
- /**
61
- * The field's EFFECTIVE boundary: declared rules win per direction, the
62
- * shape-derived default fills the rest. This is the reader every consumer of
63
- * the axis goes through — `boundaryOf(f).in === 'closed'` is the read-only
64
- * test, `.out === 'closed'` the write-only one.
65
- */
66
- export function boundaryOf(field) {
67
- const declared = declaredBoundary(field);
68
- const derived = defaultBoundaryForShape(field.shape);
69
- return { in: declared.in ?? derived.in, out: declared.out ?? derived.out };
70
- }
71
- /**
72
- * A field's effective conversion functions. A closed direction converts as identity — the
73
- * permission facet is judged by the façade, not here.
74
- */
75
- export function resolveBoundary(field) {
76
- const boundary = boundaryOf(field);
77
- return {
78
- decode: typeof boundary.in === 'object' ? Boundaries.decoder(boundary.in.decode) : identityDecoder,
79
- encode: typeof boundary.out === 'object' ? Boundaries.encoder(boundary.out.encode) : identityEncoder,
80
- };
81
- }
82
- //# sourceMappingURL=boundary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"boundary.js","sourceRoot":"","sources":["../../src/field/boundary.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import type { Shape } from "./shape.js";
2
- import type { Role } from "./role.js";
3
- import type { Lifecycle } from "./lifecycle.js";
4
- import type { BoundaryRef } from "./boundary.js";
5
- import type { Meta } from "./meta.js";
6
- export declare class Field<T = unknown> {
7
- readonly shape: Shape;
8
- readonly role?: Role;
9
- readonly lifecycle?: Lifecycle;
10
- readonly boundary?: BoundaryRef;
11
- readonly meta?: Meta;
12
- readonly _type?: T;
13
- constructor(init: FieldData, key?: string);
14
- with<U = T>(overrides: Partial<FieldData>): Field<U>;
15
- }
16
- /** A record of fields — the input to `entity()` and every derivation. */
17
- export type Fields = Record<string, Field>;
18
- export type FieldData = {
19
- [K in keyof Field as Field[K] extends (...args: never[]) => unknown ? never : K]: Field[K];
20
- };
21
- //# sourceMappingURL=field.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../src/field/field.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,qBAAa,KAAK,CAAC,CAAC,GAAG,OAAO;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACrB,SAAiB,KAAK,CAAC,EAAE,CAAC,CAAC;IAE3B,YAAY,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,EAexC;IAED,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAEnD;CACF;AAED,yEAAyE;AACzE,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE3C,MAAM,MAAM,SAAS,GAAG;KACrB,CAAC,IAAI,MAAM,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,GAC/D,KAAK,GACL,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;CACjB,CAAC"}
@@ -1,24 +0,0 @@
1
- import { Judge } from "../validation/index.js";
2
- export class Field {
3
- shape;
4
- role;
5
- lifecycle;
6
- boundary;
7
- meta;
8
- constructor(init, key) {
9
- const verdict = Judge.field(init);
10
- if (!verdict.success) {
11
- throw new Error(`${key ? `Field '${key}': ` : ""}` +
12
- verdict.errors.map((e) => `${e.path}: ${e.message}`).join("; "));
13
- }
14
- this.shape = init.shape;
15
- this.role = init.role;
16
- this.lifecycle = init.lifecycle;
17
- this.boundary = init.boundary;
18
- this.meta = init.meta;
19
- }
20
- with(overrides) {
21
- return new Field({ ...this, ...overrides });
22
- }
23
- }
24
- //# sourceMappingURL=field.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field.js","sourceRoot":"","sources":["../../src/field/field.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAM/C,MAAM,OAAO,KAAK;IACP,KAAK,CAAQ;IACb,IAAI,CAAQ;IACZ,SAAS,CAAa;IACtB,QAAQ,CAAe;IACvB,IAAI,CAAQ;IAGrB,YAAY,IAAe,EAAE,GAAY;QACvC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,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;IACxB,CAAC;IAED,IAAI,CAAQ,SAA6B;QACvC,OAAO,IAAI,KAAK,CAAI,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;IACjD,CAAC;CACF"}
@@ -1,29 +0,0 @@
1
- /**
2
- * The `format` keyword — JSON Schema's one openly extensible vocabulary, which is why a
3
- * custom predicate rides here and not in a keyword of our own.
4
- */
5
- export type StringFormat = 'date-time' | 'date' | 'time' | 'email' | 'uuid' | 'uri' | (string & {});
6
- /**
7
- * A custom format's predicate: one value, one verdict.
8
- *
9
- * No message, deliberately — a custom format fails exactly like `email` does,
10
- * because the NAME is the contract and a consumer reading the card cannot tell
11
- * ours from the standard's.
12
- */
13
- export type FormatPredicate = (value: string) => boolean;
14
- /**
15
- * Register a format the engine does not ship — `Formats.register('siret', luhn)` makes
16
- * `text({ format: 'siret' })` judged. The field declares a NAME and a module supplies the
17
- * realization, so the rule crosses a process or a language: the card carries
18
- * `"format": "siret"`, legal JSON Schema, and each runtime resolves it locally.
19
- *
20
- * Registering a name the engine already judges is cumulative — both predicates must pass.
21
- */
22
- export declare class Formats {
23
- private static readonly registry;
24
- /** Register a format the engine does not ship — `text({ format: 'siret' })` becomes judged. */
25
- static register(name: string, predicate: FormatPredicate): void;
26
- /** A registered custom predicate, or undefined — the reader the judge goes through. */
27
- static resolve(name: string): FormatPredicate | undefined;
28
- }
29
- //# sourceMappingURL=format.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/field/format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,KAAK,GACL,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAIlB;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAEzD;;;;;;;GAOG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAEtE,+FAA+F;IAC/F,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,IAAI,CAE9D;IAED,uFAAuF;IACvF,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAExD;CACF"}
@@ -1,24 +0,0 @@
1
- /**
2
- * The `format` keyword — JSON Schema's one openly extensible vocabulary, which is why a
3
- * custom predicate rides here and not in a keyword of our own.
4
- */
5
- /**
6
- * Register a format the engine does not ship — `Formats.register('siret', luhn)` makes
7
- * `text({ format: 'siret' })` judged. The field declares a NAME and a module supplies the
8
- * realization, so the rule crosses a process or a language: the card carries
9
- * `"format": "siret"`, legal JSON Schema, and each runtime resolves it locally.
10
- *
11
- * Registering a name the engine already judges is cumulative — both predicates must pass.
12
- */
13
- export class Formats {
14
- static registry = new Map();
15
- /** Register a format the engine does not ship — `text({ format: 'siret' })` becomes judged. */
16
- static register(name, predicate) {
17
- this.registry.set(name, predicate);
18
- }
19
- /** A registered custom predicate, or undefined — the reader the judge goes through. */
20
- static resolve(name) {
21
- return this.registry.get(name);
22
- }
23
- }
24
- //# sourceMappingURL=format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/field/format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsBH;;;;;;;GAOG;AACH,MAAM,OAAO,OAAO;IACV,MAAM,CAAU,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEtE,+FAA+F;IAC/F,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,SAA0B;QACtD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,uFAAuF;IACvF,MAAM,CAAC,OAAO,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;CACF"}
@@ -1,8 +0,0 @@
1
- export { type Shape, SHAPE_TYPES, isShape, type ShapeType, type BaseShape, type ShapeAnatomy, nullableShape, Anatomy, } from "./shape.js";
2
- export { Formats, type FormatPredicate, type StringFormat } from "./format.js";
3
- export { type Role, type Relation, type EntityConstructor, toTargetThunk, uniqueMembers, } from "./role.js";
4
- export { type Lifecycle, type GeneratorRef, registerGenerator, resolveCustomGenerator, } from "./lifecycle.js";
5
- export { type Boundary, type BoundaryRef, type Decoder, type Encoder, resolveBoundary, declaredBoundary, boundaryOf, Boundaries, } from "./boundary.js";
6
- export { type Meta } from "./meta.js";
7
- export { Field, type Fields, type FieldData, } from "./field.js";
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/field/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,KAAK,EACV,WAAW,EACX,OAAO,EACP,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,aAAa,EACb,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EACL,KAAK,IAAI,EACT,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACtB,aAAa,EACb,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,UAAU,GACX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,KAAK,EACL,KAAK,MAAM,EACX,KAAK,SAAS,GACf,MAAM,YAAY,CAAC"}
@@ -1,10 +0,0 @@
1
- // The primitive — a Field decomposed on four orthogonal axes plus the meta
2
- // compartment. Each axis lives in its own file; this barrel is the
3
- // package-internal (and index-level) view.
4
- export { SHAPE_TYPES, isShape, nullableShape, Anatomy, } from "./shape.js";
5
- export { Formats } from "./format.js";
6
- export { toTargetThunk, uniqueMembers, } from "./role.js";
7
- export { registerGenerator, resolveCustomGenerator, } from "./lifecycle.js";
8
- export { resolveBoundary, declaredBoundary, boundaryOf, Boundaries, } from "./boundary.js";
9
- export { Field, } from "./field.js";
10
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/field/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,mEAAmE;AACnE,2CAA2C;AAC3C,OAAO,EAEL,WAAW,EACX,OAAO,EAIP,aAAa,EACb,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAA2C,MAAM,aAAa,CAAC;AAC/E,OAAO,EAIL,aAAa,EACb,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EAGL,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAKL,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,UAAU,GACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,GAGN,MAAM,YAAY,CAAC"}
@@ -1,31 +0,0 @@
1
- /**
2
- * Generator TOKEN — a preset, or a name registered via {@link registerGenerator}. Never a
3
- * closure: a function vanishes through describe/reconstruct without an error, and the
4
- * remote frond pays. A name fails loudly and locally instead.
5
- */
6
- export type GeneratorRef = 'cuid2' | 'uuid' | 'nanoid' | (string & {});
7
- /** The moments a value can be written at — the runtime list, from which the types derive. */
8
- export declare const CREATE_TOKENS: readonly ['now', 'optional'];
9
- export declare const UPDATE_TOKENS: readonly ['now', 'forbidden'];
10
- export interface Lifecycle {
11
- /**
12
- * What happens when the input omits the value. Absent → required. `{ value }` fills a
13
- * literal, `'now'` stamps, `{ generate }` has the storage stamp an id, `'optional'`
14
- * permits absence and produces nothing. A supplied value is always accepted.
15
- */
16
- create?: {
17
- value: unknown;
18
- } | {
19
- generate: GeneratorRef;
20
- } | (typeof CREATE_TOKENS)[number];
21
- /**
22
- * What happens on a patch. Absent → written only if supplied. `'now'` stamps at every
23
- * update (the canonical `updatedAt`). `'forbidden'` makes supplying it an error.
24
- * The judge only JUDGES; stamping is the storage's, at the point of persistence.
25
- */
26
- update?: (typeof UPDATE_TOKENS)[number];
27
- }
28
- export declare function registerGenerator(name: string, fn: () => string): void;
29
- /** A registered custom generator, or undefined (built-in presets live storage-side). */
30
- export declare function resolveCustomGenerator(ref: GeneratorRef): (() => string) | undefined;
31
- //# sourceMappingURL=lifecycle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/field/lifecycle.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEvE,6FAA6F;AAC7F,eAAO,MAAM,aAAa,YAAI,KAAK,EAAE,UAAU,CAAU,CAAC;AAC1D,eAAO,MAAM,aAAa,YAAI,KAAK,EAAE,WAAW,CAAU,CAAC;AAE3D,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG;QAAE,QAAQ,EAAE,YAAY,CAAA;KAAE,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1F;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;CACzC;AASD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,MAAM,GAAG,IAAI,CAEtE;AAED,wFAAwF;AACxF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,YAAY,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAEpF"}
@@ -1,20 +0,0 @@
1
- // ─── Axis 3 · lifecycle — WHO WRITES THE VALUE, AT WHICH MOMENT ────
2
- // Indexed by the write moment; reading is a key access and a switch on a named token,
3
- // never an interpreter. Declarative and named — never a closure, which would be a value
4
- // mutation invisible to adapters. Coercion is the `boundary` axis, not this one.
5
- /** The moments a value can be written at — the runtime list, from which the types derive. */
6
- export const CREATE_TOKENS = ['now', 'optional'];
7
- export const UPDATE_TOKENS = ['now', 'forbidden'];
8
- // ─── Generator registry ──────────────────────────────────
9
- // `registerGenerator('monId', fn)` → `primary({ generate: 'monId' })`. The built-in
10
- // presets live with the realization (`projections/lifecycle.ts`), which consults this
11
- // first — resolving them per adapter is what made two adapters honour `cuid2` differently.
12
- const generators = new Map();
13
- export function registerGenerator(name, fn) {
14
- generators.set(name, fn);
15
- }
16
- /** A registered custom generator, or undefined (built-in presets live storage-side). */
17
- export function resolveCustomGenerator(ref) {
18
- return generators.get(ref);
19
- }
20
- //# sourceMappingURL=lifecycle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/field/lifecycle.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,sFAAsF;AACtF,wFAAwF;AACxF,iFAAiF;AASjF,6FAA6F;AAC7F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,UAAU,CAAU,CAAC;AAC1D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,WAAW,CAAU,CAAC;AAiB3D,4DAA4D;AAC5D,oFAAoF;AACpF,sFAAsF;AACtF,2FAA2F;AAE3F,MAAM,UAAU,GAAG,IAAI,GAAG,EAAwB,CAAC;AAEnD,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,EAAgB;IAC9D,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,sBAAsB,CAAC,GAAiB;IACtD,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC"}
@@ -1,5 +0,0 @@
1
- export interface Meta {
2
- /** Read by CLI help and carried by the card — that is the whole reach today. */
3
- description?: string;
4
- }
5
- //# sourceMappingURL=meta.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/field/meta.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,IAAI;IACnB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -1,5 +0,0 @@
1
- // ─── meta — the documentary compartment (NOT an axis) ────────────
2
- // Human-facing only. NO consumer ever DECIDES by reading meta — the axes govern
3
- // behaviour. Per-consumer specifics belong to `hints`.
4
- export {};
5
- //# sourceMappingURL=meta.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/field/meta.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,gFAAgF;AAChF,uDAAuD"}