@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,60 @@
1
+ import { Validator, format as engineFormats } from '@cfworker/json-schema';
2
+ import { Formats } from '../axis/shape/Formats.js';
3
+ import { Anatomy } from '../axis/shape/Shape.js';
4
+ export class ValueJudge {
5
+ field;
6
+ static plans = new WeakMap();
7
+ constructor(field) {
8
+ this.field = field;
9
+ }
10
+ static of(field) {
11
+ return new ValueJudge(field);
12
+ }
13
+ check(value) {
14
+ const shape = this.field.shape;
15
+ const base = Anatomy.of(shape).base;
16
+ if (value !== null) {
17
+ if (base?.type === 'object' && !base.properties)
18
+ return { value };
19
+ if (base?.type === 'string' && base.format === 'date-time' && value instanceof Date) {
20
+ return Number.isNaN(value.getTime()) ? { error: 'Invalid date' } : { value };
21
+ }
22
+ if ((base?.type === 'number' || base?.type === 'integer') &&
23
+ typeof value === 'number' &&
24
+ Number.isNaN(value)) {
25
+ return { error: 'Expected a number' };
26
+ }
27
+ }
28
+ const plan = ValueJudge.planFor(shape);
29
+ const result = plan.validator.validate(value);
30
+ if (!result.valid)
31
+ return { error: result.errors[0]?.error ?? 'Invalid value' };
32
+ if (plan.custom && typeof value === 'string' && !plan.custom(value)) {
33
+ return { error: `String does not match format "${plan.formatName}".` };
34
+ }
35
+ return { value };
36
+ }
37
+ static planFor(shape) {
38
+ let plan = this.plans.get(shape);
39
+ if (!plan) {
40
+ const base = Anatomy.of(shape).base;
41
+ const formatName = base?.type === 'string' ? base.format : undefined;
42
+ plan = {
43
+ validator: new Validator(shape, '2020-12', true),
44
+ custom: formatName === undefined ? undefined : this.customFormatOf(formatName),
45
+ formatName,
46
+ };
47
+ this.plans.set(shape, plan);
48
+ }
49
+ return plan;
50
+ }
51
+ static customFormatOf(name) {
52
+ const custom = Formats.resolve(name);
53
+ if (!custom && !(name in engineFormats)) {
54
+ throw new Error(`Unknown format: '${name}'. Register it with Formats.register('${name}', …) — ` +
55
+ `the engine judges ${Object.keys(engineFormats).length} formats natively and this is not one of them.`);
56
+ }
57
+ return custom;
58
+ }
59
+ }
60
+ //# sourceMappingURL=ValueJudge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValueJudge.js","sourceRoot":"","sources":["../../src/judge/ValueJudge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export interface ValidateOptions {
2
+ patch?: boolean;
3
+ }
4
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/judge/options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/judge/options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ export interface ValidationError {
2
+ path: string;
3
+ message: string;
4
+ }
5
+ export type ValidationResult<T> = {
6
+ success: true;
7
+ data: T;
8
+ } | {
9
+ success: false;
10
+ errors: ValidationError[];
11
+ };
12
+ export type Checked = {
13
+ value: unknown;
14
+ } | {
15
+ error: string;
16
+ };
17
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/judge/result.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAC1B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAC1B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC;AAElD,MAAM,MAAM,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/judge/result.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { Fields } from '../fields/Field.js';
2
+ import type { SchemaView } from '../schema/SchemaView.js';
3
+ import type { SchemaDescriptor } from '../card/Descriptor.js';
4
+ export type SchemaOrCard = SchemaView | SchemaDescriptor;
5
+ export declare function schemaOf(source: SchemaOrCard): SchemaView;
6
+ export declare function fieldsOf(source: SchemaOrCard): Fields;
7
+ //# sourceMappingURL=SchemaOrCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaOrCard.d.ts","sourceRoot":"","sources":["../../src/projection/SchemaOrCard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAMzD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAEzD;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAErD"}
@@ -0,0 +1,11 @@
1
+ import { Card } from '../card/Card.js';
2
+ function isDescriptor(source) {
3
+ return typeof source.getFields !== 'function';
4
+ }
5
+ export function schemaOf(source) {
6
+ return isDescriptor(source) ? Card.fromDescriptor(source).toSchema() : source;
7
+ }
8
+ export function fieldsOf(source) {
9
+ return schemaOf(source).getFields();
10
+ }
11
+ //# sourceMappingURL=SchemaOrCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaOrCard.js","sourceRoot":"","sources":["../../src/projection/SchemaOrCard.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAIvC,SAAS,YAAY,CAAC,MAAoB;IACxC,OAAO,OAAQ,MAAqB,CAAC,SAAS,KAAK,UAAU,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAoB;IAC3C,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAoB;IAC3C,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Fields } from '../fields/Field.js';
2
+ export declare class Visibility {
3
+ private readonly fields;
4
+ private constructor();
5
+ static of(fields: Fields): Visibility;
6
+ get input(): Fields;
7
+ get output(): Fields;
8
+ encode(record: Record<string, unknown>): Record<string, unknown>;
9
+ }
10
+ //# sourceMappingURL=Visibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Visibility.d.ts","sourceRoot":"","sources":["../../src/projection/Visibility.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,qBAAa,UAAU;IACD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAA3C,OAAO,eAAgD;IAEvD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAEpC;IAED,IAAI,KAAK,IAAI,MAAM,CAWlB;IAED,IAAI,MAAM,IAAI,MAAM,CAOnB;IAED,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAW/D;CACF"}
@@ -0,0 +1,55 @@
1
+ import { Boundary } from '../axis/boundary/Boundary.js';
2
+ import { Lifecycle } from '../axis/lifecycle/Lifecycle.js';
3
+ import { Role } from '../axis/role/Role.js';
4
+ export class Visibility {
5
+ fields;
6
+ constructor(fields) {
7
+ this.fields = fields;
8
+ }
9
+ static of(fields) {
10
+ return new Visibility(fields);
11
+ }
12
+ get input() {
13
+ const result = {};
14
+ for (const [name, field] of Object.entries(this.fields)) {
15
+ const role = Role.of(field);
16
+ if (role.isPrimary)
17
+ continue;
18
+ if (Lifecycle.of(field).create === 'now')
19
+ continue;
20
+ if (role.isCollection)
21
+ continue;
22
+ if (Boundary.of(field).readOnly)
23
+ continue;
24
+ result[name] = field;
25
+ }
26
+ return result;
27
+ }
28
+ get output() {
29
+ const result = {};
30
+ for (const [name, field] of Object.entries(this.fields)) {
31
+ if (Boundary.of(field).writeOnly)
32
+ continue;
33
+ result[name] = field;
34
+ }
35
+ return result;
36
+ }
37
+ encode(record) {
38
+ const out = { ...record };
39
+ for (const [key, field] of Object.entries(this.fields)) {
40
+ if (!(key in record))
41
+ continue;
42
+ const boundary = Boundary.of(field);
43
+ if (boundary.writeOnly) {
44
+ delete out[key];
45
+ continue;
46
+ }
47
+ const value = record[key];
48
+ if (value === null || value === undefined)
49
+ continue;
50
+ out[key] = boundary.encode(value);
51
+ }
52
+ return out;
53
+ }
54
+ }
55
+ //# sourceMappingURL=Visibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Visibility.js","sourceRoot":"","sources":["../../src/projection/Visibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAG5C,MAAM,OAAO,UAAU;IACgB,MAAM;IAA3C,YAAqC,MAAc;sBAAd,MAAM;IAAW,CAAC;IAEvD,MAAM,CAAC,EAAE,CAAC,MAAc;QACtB,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,KAAK;QACP,MAAM,MAAM,GAAW,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,SAAS;gBAAE,SAAS;YAC7B,IAAI,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,KAAK;gBAAE,SAAS;YACnD,IAAI,IAAI,CAAC,YAAY;gBAAE,SAAS;YAChC,IAAI,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ;gBAAE,SAAS;YAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,MAAM;QACR,MAAM,MAAM,GAAW,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,IAAI,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS;gBAAE,SAAS;YAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,MAA+B;QACpC,MAAM,GAAG,GAA4B,EAAE,GAAG,MAAM,EAAE,CAAC;QACnD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC;gBAAE,SAAS;YAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YACtD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YACpD,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
@@ -1,11 +1,3 @@
1
- /**
2
- * Standard Schema v1 — types inlined from @standard-schema/spec.
3
- *
4
- * We inline instead of depending on the package to keep @fougere/schema zero-dep.
5
- * The spec is stable (v1) and unlikely to change.
6
- *
7
- * @see https://standardschema.dev/
8
- */
9
1
  export interface StandardSchemaV1<Input = unknown, Output = Input> {
10
2
  readonly '~standard': StandardSchemaV1.Props<Input, Output>;
11
3
  }
@@ -22,11 +14,11 @@ export declare namespace StandardSchemaV1 {
22
14
  readonly issues?: undefined;
23
15
  }
24
16
  interface FailureResult {
25
- readonly issues: ReadonlyArray<Issue>;
17
+ readonly issues: readonly Issue[];
26
18
  }
27
19
  interface Issue {
28
20
  readonly message: string;
29
- readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;
21
+ readonly path?: readonly (PropertyKey | PathSegment)[] | undefined;
30
22
  }
31
23
  interface PathSegment {
32
24
  readonly key: PropertyKey;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard.d.ts","sourceRoot":"","sources":["../../src/projection/standard.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB,CAAC,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK;IAC/D,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;CAC7D;AAED,MAAM,CAAC,OAAO,WAAW,gBAAgB,CAAC;IACxC,UAAU,KAAK,CAAC,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK;QAC7C,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,QAAQ,EAAE,CACjB,KAAK,EAAE,OAAO,KACX,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9C,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;KACnD;IAED,KAAK,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC;IAE5D,UAAU,aAAa,CAAC,MAAM;QAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;KAC7B;IAED,UAAU,aAAa;QACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;KACnC;IAED,UAAU,KAAK;QACb,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC,EAAE,GAAG,SAAS,CAAC;KACpE;IAED,UAAU,WAAW;QACnB,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;KAC3B;IAED,UAAU,KAAK,CAAC,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK;QAC7C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB;IAED,KAAK,UAAU,CAAC,MAAM,SAAS,gBAAgB,IAAI,WAAW,CAC5D,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAC7B,CAAC,OAAO,CAAC,CAAC;IAEX,KAAK,WAAW,CAAC,MAAM,SAAS,gBAAgB,IAAI,WAAW,CAC7D,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAC7B,CAAC,QAAQ,CAAC,CAAC;CACb"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=standard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard.js","sourceRoot":"","sources":["../../src/projection/standard.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ import { type Fields } from '../fields/Field.js';
2
+ import { type PreviousNames } from '../EntityDeclarations.js';
3
+ import { type EntityAdapters } from '../EntityAdapters.js';
4
+ import { type CompositeUnique } from '../EntityDeclarations.js';
5
+ import { SchemaDerivation } from './SchemaDerivation.js';
6
+ import { SchemaDefinition } from './SchemaDefinition.js';
7
+ import { type ValidateOptions } from '../judge/options.js';
8
+ import type { StandardSchemaV1 } from '../projection/standard.js';
9
+ import type { PartialRow, Row, SchemaView } from './SchemaView.js';
10
+ export declare const ANONYMOUS_SCHEMA_NAME = "Schema";
11
+ export interface SchemaConstructor<TFields extends Fields> extends SchemaView<TFields> {
12
+ new (data: PartialRow<TFields>): Row<TFields>;
13
+ readonly "~standard": StandardSchemaV1.Props<Record<string, unknown>, Row<TFields>>;
14
+ readonly derivation?: SchemaDerivation;
15
+ readonly previous?: PreviousNames<TFields>;
16
+ from(data: Record<string, unknown>): Row<TFields>;
17
+ pick<K extends string & keyof TFields>(...keys: K[]): SchemaConstructor<Pick<TFields, K>>;
18
+ omit<K extends string & keyof TFields>(...keys: K[]): SchemaConstructor<Omit<TFields, K>>;
19
+ partial(): SchemaConstructor<TFields>;
20
+ extend<E extends Fields>(extra: E): SchemaConstructor<TFields & E>;
21
+ named(name: string): SchemaConstructor<TFields>;
22
+ rename(mapping: Partial<Record<string & keyof TFields, string>>): SchemaConstructor<Fields>;
23
+ }
24
+ export declare class Schema {
25
+ /** The one place a schema holds what it is. The five readings below are its projections. */
26
+ static definition: SchemaDefinition;
27
+ static get fields(): Fields;
28
+ static get adapters(): EntityAdapters<Fields> | undefined;
29
+ static get opts(): ValidateOptions;
30
+ static get derivation(): SchemaDerivation | undefined;
31
+ static get previous(): PreviousNames<Fields> | undefined;
32
+ constructor(data?: Record<string, unknown>);
33
+ static getFields(): Fields;
34
+ static getAdapters(): Partial<import("../EntityAdapters.js").FougereEntityAdapters<string>> | undefined;
35
+ static getUnique(): CompositeUnique<Fields> | undefined;
36
+ static getOpts(): ValidateOptions;
37
+ static validate(input: unknown): import("../index.js").ValidationResult<Record<string, unknown>>;
38
+ static from(data: Record<string, unknown>): Record<string, unknown>;
39
+ static get ["~standard"](): StandardSchemaV1.Props<Record<string, unknown>>;
40
+ static pick(...keys: string[]): SchemaConstructor<Fields>;
41
+ static omit(...keys: string[]): SchemaConstructor<Fields>;
42
+ static rename(mapping: Record<string, string>): SchemaConstructor<Fields>;
43
+ static partial(): SchemaConstructor<Fields>;
44
+ static extend(extra: Fields): SchemaConstructor<Fields>;
45
+ static named(name: string): typeof Schema;
46
+ static compose<T extends SchemaView[]>(...sources: T): SchemaConstructor<Merged<T>>;
47
+ static of<TFields extends Fields>(stated: {
48
+ fields: TFields;
49
+ derivation?: SchemaDerivation;
50
+ adapters?: EntityAdapters<TFields>;
51
+ opts?: ValidateOptions;
52
+ previous?: PreviousNames<TFields>;
53
+ }): SchemaConstructor<TFields>;
54
+ /** The class a definition becomes. The one place a Schema subclass is born. */
55
+ private static subclass;
56
+ private static derive;
57
+ }
58
+ type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
59
+ type Merged<T extends SchemaView[]> = UnionToIntersection<T[number] extends {
60
+ getFields(): infer F;
61
+ } ? F : Fields> & Fields;
62
+ export {};
63
+ //# sourceMappingURL=Schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../src/schema/Schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ import { Boundary } from '../axis/boundary/Boundary.js';
2
+ import { FieldGroup } from '../constraint/FieldGroup.js';
3
+ import { Unique } from '../constraint/Unique.js';
4
+ import { RowJudge } from '../judge/RowJudge.js';
5
+ import { SchemaDefinition } from './SchemaDefinition.js';
6
+ export const ANONYMOUS_SCHEMA_NAME = "Schema";
7
+ export class Schema {
8
+ /** The one place a schema holds what it is. The five readings below are its projections. */
9
+ static definition = SchemaDefinition.stated({ fields: {} });
10
+ static get fields() { return this.definition.fields; }
11
+ static get adapters() { return this.definition.adapters; }
12
+ static get opts() { return this.definition.opts; }
13
+ static get derivation() { return this.definition.derivation; }
14
+ static get previous() { return this.definition.previous; }
15
+ constructor(data) {
16
+ if (!data)
17
+ return;
18
+ for (const [key, value] of Object.entries(data)) {
19
+ Object.defineProperty(this, key, { value, writable: true, enumerable: true, configurable: true });
20
+ }
21
+ }
22
+ static getFields() { return this.fields; }
23
+ static getAdapters() { return this.adapters; }
24
+ static getUnique() {
25
+ const groups = FieldGroup.groupsOf(this.fields, Unique);
26
+ return groups.length ? groups.map((group) => [...group.members]) : undefined;
27
+ }
28
+ static getOpts() { return this.opts; }
29
+ static validate(input) {
30
+ return RowJudge.of(this.fields, this.opts).check(input);
31
+ }
32
+ static from(data) {
33
+ const out = {};
34
+ for (const [key, field] of Object.entries(this.fields)) {
35
+ if (!(key in data))
36
+ continue;
37
+ const value = data[key];
38
+ if (value === null || value === undefined) {
39
+ out[key] = value;
40
+ continue;
41
+ }
42
+ const decoded = Boundary.of(field).decode(value);
43
+ out[key] = "error" in decoded ? value : decoded.value;
44
+ }
45
+ return out;
46
+ }
47
+ static get ["~standard"]() {
48
+ const { fields, opts } = this;
49
+ return {
50
+ version: 1,
51
+ vendor: "fougere",
52
+ validate(value) {
53
+ const result = RowJudge.of(fields, opts).check(value);
54
+ if (result.success)
55
+ return { value: result.data };
56
+ return {
57
+ issues: result.errors.map((e) => ({
58
+ message: e.message,
59
+ path: e.path && e.path !== "." ? [{ key: e.path }] : undefined,
60
+ })),
61
+ };
62
+ },
63
+ };
64
+ }
65
+ static pick(...keys) {
66
+ assertKnownKeys("pick", keys, this.fields);
67
+ const picked = {};
68
+ for (const key of keys)
69
+ if (this.fields[key])
70
+ picked[key] = this.fields[key];
71
+ return this.derive(picked, (k) => (keys.includes(k) ? k : undefined));
72
+ }
73
+ static omit(...keys) {
74
+ assertKnownKeys("omit", keys, this.fields);
75
+ const kept = {};
76
+ for (const [key, field] of Object.entries(this.fields))
77
+ if (!keys.includes(key))
78
+ kept[key] = field;
79
+ return this.derive(kept, (k) => (keys.includes(k) ? undefined : k));
80
+ }
81
+ static rename(mapping) {
82
+ assertKnownKeys("rename", Object.keys(mapping), this.fields);
83
+ const renamed = {};
84
+ for (const [key, field] of Object.entries(this.fields))
85
+ renamed[mapping[key] ?? key] = field;
86
+ return this.derive(renamed, (k) => mapping[k] ?? k);
87
+ }
88
+ static partial() {
89
+ return Schema.subclass(this.definition.patched(this));
90
+ }
91
+ static extend(extra) {
92
+ return Schema.subclass(this.definition.extended(extra, this));
93
+ }
94
+ static named(name) {
95
+ if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name)) {
96
+ throw new Error(`named(): \`${name}\` is not a valid class name.`);
97
+ }
98
+ if (this.name !== ANONYMOUS_SCHEMA_NAME) {
99
+ throw new Error(`named(): \`${this.name}\` is already named by its class declaration.`);
100
+ }
101
+ Object.defineProperty(this, "name", { value: name, configurable: true });
102
+ return this;
103
+ }
104
+ static compose(...sources) {
105
+ return Schema.subclass(SchemaDefinition.merged(sources));
106
+ }
107
+ static of(stated) {
108
+ return Schema.subclass(SchemaDefinition.stated(stated));
109
+ }
110
+ /** The class a definition becomes. The one place a Schema subclass is born. */
111
+ static subclass(definition) {
112
+ class Derived extends Schema {
113
+ }
114
+ Derived.definition = definition;
115
+ Object.defineProperty(Derived, "name", { value: ANONYMOUS_SCHEMA_NAME, configurable: true });
116
+ return Derived;
117
+ }
118
+ static derive(fields, survives) {
119
+ return Schema.subclass(this.definition.cut(fields, survives, this));
120
+ }
121
+ }
122
+ function assertKnownKeys(operation, keys, fields) {
123
+ const strangers = keys.filter((key) => !(key in fields));
124
+ if (strangers.length === 0)
125
+ return;
126
+ throw new Error(`${operation}(): unknown field ${strangers.map((s) => `\`${s}\``).join(", ")}. ` +
127
+ `This schema carries ${Object.keys(fields).join(", ")}.`);
128
+ }
129
+ //# sourceMappingURL=Schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.js","sourceRoot":"","sources":["../../src/schema/Schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { type Fields } from '../fields/Field.js';
2
+ import { type PreviousNames } from '../EntityDeclarations.js';
3
+ import { type EntityAdapters } from '../EntityAdapters.js';
4
+ import { SchemaDerivation } from './SchemaDerivation.js';
5
+ import { type ValidateOptions } from '../judge/options.js';
6
+ import type { SchemaView } from './SchemaView.js';
7
+ /**
8
+ * Everything a schema IS, apart from being a class whose instances are rows.
9
+ *
10
+ * The five members used to be five statics assigned side by side, and every derivation
11
+ * re-threaded them by hand — which is how one of them came to be dropped from a list
12
+ * without anyone noticing. A transformation here returns a COMPLETE definition or it does
13
+ * not compile, so no gesture can mix the fields of one with the options of another.
14
+ *
15
+ * Internal: it is not exported from the package and never appears on `SchemaConstructor`.
16
+ * A user derives with `Order.pick(…)`, never `Order.definition.pick(…)`.
17
+ */
18
+ export declare class SchemaDefinition {
19
+ readonly fields: Fields;
20
+ readonly adapters: EntityAdapters<Fields> | undefined;
21
+ readonly opts: ValidateOptions;
22
+ readonly previous: PreviousNames<Fields> | undefined;
23
+ readonly derivation: SchemaDerivation | undefined;
24
+ private constructor();
25
+ static stated(said: {
26
+ fields: Fields;
27
+ adapters?: EntityAdapters<Fields>;
28
+ opts?: ValidateOptions;
29
+ previous?: PreviousNames<Fields>;
30
+ derivation?: SchemaDerivation;
31
+ }): SchemaDefinition;
32
+ /**
33
+ * `pick`, `omit` and `rename` are one gesture: the fields that remain, and what became
34
+ * of each name. What each adapter was handed follows the same correspondence, and so does the origin.
35
+ */
36
+ cut(fields: Fields, survives: (key: string) => string | undefined, root: SchemaView): SchemaDefinition;
37
+ /** The same fields, judged as an update. */
38
+ patched(root: SchemaView): SchemaDefinition;
39
+ /** The added fields have no origin, so the derivation is unchanged: it speaks of the root. */
40
+ extended(extra: Fields, root: SchemaView): SchemaDefinition;
41
+ /** Several views folded into one definition, which therefore has no single origin. */
42
+ static merged(views: readonly SchemaView[]): SchemaDefinition;
43
+ /** The origin this definition already carries, or the one `root` becomes. */
44
+ private origin;
45
+ }
46
+ //# sourceMappingURL=SchemaDefinition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaDefinition.d.ts","sourceRoot":"","sources":["../../src/schema/SchemaDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB;IAEzB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,SAAS;IACrD,QAAQ,CAAC,IAAI,EAAE,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS;IACpD,QAAQ,CAAC,UAAU,EAAE,gBAAgB,GAAG,SAAS;IALnD,OAAO,eAMH;IAEJ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,eAAe,CAAC;QACvB,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QACjC,UAAU,CAAC,EAAE,gBAAgB,CAAC;KAC/B,GAAG,gBAAgB,CAInB;IAED;;;OAGG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAUrG;IAED,4CAA4C;IAC5C,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAI1C;IAED,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAI1D;IAED,sFAAsF;IACtF,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,gBAAgB,CAU5D;IAED,6EAA6E;IAC7E,OAAO,CAAC,MAAM;CAGf"}
@@ -0,0 +1,64 @@
1
+ import { EntityAdapterSet } from '../EntityAdapters.js';
2
+ import { SchemaDerivation } from './SchemaDerivation.js';
3
+ /**
4
+ * Everything a schema IS, apart from being a class whose instances are rows.
5
+ *
6
+ * The five members used to be five statics assigned side by side, and every derivation
7
+ * re-threaded them by hand — which is how one of them came to be dropped from a list
8
+ * without anyone noticing. A transformation here returns a COMPLETE definition or it does
9
+ * not compile, so no gesture can mix the fields of one with the options of another.
10
+ *
11
+ * Internal: it is not exported from the package and never appears on `SchemaConstructor`.
12
+ * A user derives with `Order.pick(…)`, never `Order.definition.pick(…)`.
13
+ */
14
+ export class SchemaDefinition {
15
+ fields;
16
+ adapters;
17
+ opts;
18
+ previous;
19
+ derivation;
20
+ constructor(fields, adapters, opts, previous, derivation) {
21
+ this.fields = fields;
22
+ this.adapters = adapters;
23
+ this.opts = opts;
24
+ this.previous = previous;
25
+ this.derivation = derivation;
26
+ }
27
+ static stated(said) {
28
+ return new SchemaDefinition(said.fields, EntityAdapterSet.of(said.adapters)?.stated, said.opts ?? {}, said.previous, said.derivation);
29
+ }
30
+ /**
31
+ * `pick`, `omit` and `rename` are one gesture: the fields that remain, and what became
32
+ * of each name. What each adapter was handed follows the same correspondence, and so does the origin.
33
+ */
34
+ cut(fields, survives, root) {
35
+ const renamed = {};
36
+ for (const [key, field] of Object.entries(fields))
37
+ renamed[key] = field.rename(survives);
38
+ return new SchemaDefinition(renamed, EntityAdapterSet.of(this.adapters)?.cut(survives)?.stated, this.opts, undefined, this.origin(root).compose(survives));
39
+ }
40
+ /** The same fields, judged as an update. */
41
+ patched(root) {
42
+ return new SchemaDefinition({ ...this.fields }, this.adapters, { ...this.opts, patch: true }, undefined, this.origin(root));
43
+ }
44
+ /** The added fields have no origin, so the derivation is unchanged: it speaks of the root. */
45
+ extended(extra, root) {
46
+ return new SchemaDefinition({ ...this.fields, ...extra }, this.adapters, this.opts, undefined, this.origin(root));
47
+ }
48
+ /** Several views folded into one definition, which therefore has no single origin. */
49
+ static merged(views) {
50
+ const fields = {};
51
+ let opts = {};
52
+ for (const view of views) {
53
+ Object.assign(fields, view.getFields());
54
+ opts = { ...opts, ...view.getOpts() };
55
+ }
56
+ const adapters = EntityAdapterSet.merged(views.map((view) => view.getAdapters()))?.stated;
57
+ return new SchemaDefinition(fields, adapters, opts, undefined, undefined);
58
+ }
59
+ /** The origin this definition already carries, or the one `root` becomes. */
60
+ origin(root) {
61
+ return this.derivation ?? SchemaDerivation.first(root, this.fields);
62
+ }
63
+ }
64
+ //# sourceMappingURL=SchemaDefinition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaDefinition.js","sourceRoot":"","sources":["../../src/schema/SchemaDefinition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type Fields } from '../fields/Field.js';
2
+ import type { SchemaView } from './SchemaView.js';
3
+ /**
4
+ * What a derived schema says about its ORIGIN: the class it was cut from, and what the cut
5
+ * left of each of that class's fields.
6
+ *
7
+ * The origin is the ROOT — `Post.pick(a, b).omit(b)` answers `Post` and never the
8
+ * intermediate — so a chain is flattened rather than journalled, and the two halves cannot
9
+ * disagree: a derivation always carries both, which `source` and `survived` as independent
10
+ * properties could not promise.
11
+ */
12
+ export declare class SchemaDerivation {
13
+ readonly source: SchemaView;
14
+ readonly survived: Readonly<Record<string, string | undefined>>;
15
+ private constructor();
16
+ /** The first cut: every field of the origin still answers to its own name. */
17
+ static first(source: SchemaView, fields: Fields): SchemaDerivation;
18
+ /** The same origin, seen through one more cut. */
19
+ compose(survives: (key: string) => string | undefined): SchemaDerivation;
20
+ get sourceName(): string;
21
+ /**
22
+ * What the ROOT calls `key`, translated to the name it carries here — `undefined` when a
23
+ * cut dropped it. A reader that needs something the root declared about a field asks the
24
+ * root and comes back through this; it does not keep a copy of the answer.
25
+ */
26
+ hereFor(key: string): string | undefined;
27
+ }
28
+ //# sourceMappingURL=SchemaDerivation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaDerivation.d.ts","sourceRoot":"","sources":["../../src/schema/SchemaDerivation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;;;;GAQG;AACH,qBAAa,gBAAgB;IAEzB,QAAQ,CAAC,MAAM,EAAE,UAAU;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAFjE,OAAO,eAGH;IAEJ,8EAA8E;IAC9E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAEjE;IAED,kDAAkD;IAClD,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAOvE;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;;;OAIG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEvC;CACF"}