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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/README.md +5 -4
  2. package/dist/{schema/Schema.d.ts → Schema.d.ts} +17 -27
  3. package/dist/Schema.d.ts.map +1 -0
  4. package/dist/{schema/Schema.js → Schema.js} +22 -62
  5. package/dist/Schema.js.map +1 -0
  6. package/dist/SchemaDefinition.d.ts +73 -0
  7. package/dist/SchemaDefinition.d.ts.map +1 -0
  8. package/dist/SchemaDefinition.js +184 -0
  9. package/dist/SchemaDefinition.js.map +1 -0
  10. package/dist/SchemaDerivation.d.ts +16 -0
  11. package/dist/SchemaDerivation.d.ts.map +1 -0
  12. package/dist/SchemaDerivation.js +31 -0
  13. package/dist/SchemaDerivation.js.map +1 -0
  14. package/dist/{schema/SchemaView.d.ts → SchemaView.d.ts} +9 -9
  15. package/dist/SchemaView.d.ts.map +1 -0
  16. package/dist/{schema/SchemaView.js.map → SchemaView.js.map} +1 -1
  17. package/dist/{schema/axis → axis}/Axis.d.ts +2 -2
  18. package/dist/axis/Axis.d.ts.map +1 -0
  19. package/dist/axis/Axis.js.map +1 -0
  20. package/dist/axis/Meta.d.ts.map +1 -0
  21. package/dist/{schema/axis → axis}/Meta.js.map +1 -1
  22. package/dist/axis/boundary/Boundaries.d.ts +21 -0
  23. package/dist/axis/boundary/Boundaries.d.ts.map +1 -0
  24. package/dist/axis/boundary/Boundaries.js +25 -0
  25. package/dist/axis/boundary/Boundaries.js.map +1 -0
  26. package/dist/{schema/axis → axis}/boundary/Boundary.d.ts +3 -1
  27. package/dist/axis/boundary/Boundary.d.ts.map +1 -0
  28. package/dist/{schema/axis → axis}/boundary/Boundary.js +8 -6
  29. package/dist/axis/boundary/Boundary.js.map +1 -0
  30. package/dist/axis/boundary/BoundaryAxis.d.ts.map +1 -0
  31. package/dist/{schema/axis → axis}/boundary/BoundaryAxis.js +4 -4
  32. package/dist/axis/boundary/BoundaryAxis.js.map +1 -0
  33. package/dist/{schema/axis → axis}/lifecycle/Clock.d.ts +1 -1
  34. package/dist/axis/lifecycle/Clock.d.ts.map +1 -0
  35. package/dist/{schema/axis → axis}/lifecycle/Clock.js +1 -1
  36. package/dist/axis/lifecycle/Clock.js.map +1 -0
  37. package/dist/axis/lifecycle/Generators.d.ts +10 -0
  38. package/dist/axis/lifecycle/Generators.d.ts.map +1 -0
  39. package/dist/axis/lifecycle/Generators.js +20 -0
  40. package/dist/axis/lifecycle/Generators.js.map +1 -0
  41. package/dist/axis/lifecycle/Lifecycle.d.ts.map +1 -0
  42. package/dist/axis/lifecycle/Lifecycle.js.map +1 -0
  43. package/dist/axis/lifecycle/LifecycleAxis.d.ts.map +1 -0
  44. package/dist/{schema/axis → axis}/lifecycle/LifecycleAxis.js +11 -6
  45. package/dist/axis/lifecycle/LifecycleAxis.js.map +1 -0
  46. package/dist/axis/lifecycle/apply.d.ts +15 -0
  47. package/dist/axis/lifecycle/apply.d.ts.map +1 -0
  48. package/dist/axis/lifecycle/apply.js +50 -0
  49. package/dist/axis/lifecycle/apply.js.map +1 -0
  50. package/dist/{schema/axis → axis}/role/Relation.d.ts +3 -2
  51. package/dist/axis/role/Relation.d.ts.map +1 -0
  52. package/dist/{schema/axis → axis}/role/Relation.js +6 -5
  53. package/dist/axis/role/Relation.js.map +1 -0
  54. package/dist/{schema/axis → axis}/role/Role.d.ts +6 -6
  55. package/dist/axis/role/Role.d.ts.map +1 -0
  56. package/dist/axis/role/Role.js +36 -0
  57. package/dist/axis/role/Role.js.map +1 -0
  58. package/dist/{schema/axis → axis}/role/RoleAxis.d.ts +1 -1
  59. package/dist/axis/role/RoleAxis.d.ts.map +1 -0
  60. package/dist/{schema/axis → axis}/role/RoleAxis.js +28 -36
  61. package/dist/axis/role/RoleAxis.js.map +1 -0
  62. package/dist/axis/shape/Formats.d.ts +11 -0
  63. package/dist/axis/shape/Formats.d.ts.map +1 -0
  64. package/dist/axis/shape/Formats.js +9 -0
  65. package/dist/axis/shape/Formats.js.map +1 -0
  66. package/dist/{schema/axis → axis}/shape/Shape.d.ts +12 -3
  67. package/dist/axis/shape/Shape.d.ts.map +1 -0
  68. package/dist/axis/shape/Shape.js +77 -0
  69. package/dist/axis/shape/Shape.js.map +1 -0
  70. package/dist/entity/EntityAdapterSet.d.ts +22 -0
  71. package/dist/entity/EntityAdapterSet.d.ts.map +1 -0
  72. package/dist/entity/EntityAdapterSet.js +63 -0
  73. package/dist/entity/EntityAdapterSet.js.map +1 -0
  74. package/dist/entity/EntityAdapters.d.ts +1 -24
  75. package/dist/entity/EntityAdapters.d.ts.map +1 -1
  76. package/dist/entity/EntityAdapters.js +1 -74
  77. package/dist/entity/EntityAdapters.js.map +1 -1
  78. package/dist/entity/EntityDeclarations.d.ts +1 -1
  79. package/dist/entity/EntityDeclarations.d.ts.map +1 -1
  80. package/dist/entity.d.ts +7 -2
  81. package/dist/entity.d.ts.map +1 -1
  82. package/dist/entity.js +6 -1
  83. package/dist/entity.js.map +1 -1
  84. package/dist/{schema/fields → field}/Field.d.ts +3 -5
  85. package/dist/field/Field.d.ts.map +1 -0
  86. package/dist/field/Field.js +35 -0
  87. package/dist/field/Field.js.map +1 -0
  88. package/dist/field/FieldSet.d.ts +22 -0
  89. package/dist/field/FieldSet.d.ts.map +1 -0
  90. package/dist/field/FieldSet.js +58 -0
  91. package/dist/field/FieldSet.js.map +1 -0
  92. package/dist/index.d.ts +26 -56
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +21 -47
  95. package/dist/index.js.map +1 -1
  96. package/dist/lib/Registry.d.ts +12 -0
  97. package/dist/lib/Registry.d.ts.map +1 -0
  98. package/dist/lib/Registry.js +29 -0
  99. package/dist/lib/Registry.js.map +1 -0
  100. package/dist/lib/index.d.ts +3 -0
  101. package/dist/lib/index.d.ts.map +1 -0
  102. package/dist/lib/index.js +3 -0
  103. package/dist/lib/index.js.map +1 -0
  104. package/dist/lib/utils.d.ts.map +1 -0
  105. package/dist/lib/utils.js.map +1 -0
  106. package/dist/projection/Cases.d.ts +9 -20
  107. package/dist/projection/Cases.d.ts.map +1 -1
  108. package/dist/projection/Cases.js +44 -39
  109. package/dist/projection/Cases.js.map +1 -1
  110. package/dist/projection/Visibility.d.ts +2 -1
  111. package/dist/projection/Visibility.d.ts.map +1 -1
  112. package/dist/projection/Visibility.js +4 -3
  113. package/dist/projection/Visibility.js.map +1 -1
  114. package/dist/projection/card/Bundle.d.ts +1 -1
  115. package/dist/projection/card/Bundle.d.ts.map +1 -1
  116. package/dist/projection/card/Bundle.js +7 -7
  117. package/dist/projection/card/Bundle.js.map +1 -1
  118. package/dist/projection/card/Card.d.ts +7 -13
  119. package/dist/projection/card/Card.d.ts.map +1 -1
  120. package/dist/projection/card/Card.js +101 -70
  121. package/dist/projection/card/Card.js.map +1 -1
  122. package/dist/projection/card/Descriptor.d.ts +7 -7
  123. package/dist/projection/card/Descriptor.d.ts.map +1 -1
  124. package/dist/projection/card/admission.d.ts +21 -5
  125. package/dist/projection/card/admission.d.ts.map +1 -1
  126. package/dist/projection/card/admission.js +33 -5
  127. package/dist/projection/card/admission.js.map +1 -1
  128. package/dist/projection/card/diff.d.ts +2 -2
  129. package/dist/projection/card/diff.d.ts.map +1 -1
  130. package/dist/{judge/result.d.ts → validation.d.ts} +1 -1
  131. package/dist/validation.d.ts.map +1 -0
  132. package/dist/validation.js +2 -0
  133. package/dist/validation.js.map +1 -0
  134. package/dist/validator/AdapterFieldValidator.d.ts +14 -0
  135. package/dist/validator/AdapterFieldValidator.d.ts.map +1 -0
  136. package/dist/validator/AdapterFieldValidator.js +36 -0
  137. package/dist/validator/AdapterFieldValidator.js.map +1 -0
  138. package/dist/validator/FieldDeclarationValidator.d.ts +9 -0
  139. package/dist/validator/FieldDeclarationValidator.d.ts.map +1 -0
  140. package/dist/{judge/FieldJudge.js → validator/FieldDeclarationValidator.js} +8 -8
  141. package/dist/validator/FieldDeclarationValidator.js.map +1 -0
  142. package/dist/validator/FieldValueValidator.d.ts +13 -0
  143. package/dist/validator/FieldValueValidator.d.ts.map +1 -0
  144. package/dist/{judge/ValueJudge.js → validator/FieldValueValidator.js} +12 -11
  145. package/dist/validator/FieldValueValidator.js.map +1 -0
  146. package/dist/validator/InputRefusal.d.ts +8 -0
  147. package/dist/validator/InputRefusal.d.ts.map +1 -0
  148. package/dist/validator/InputRefusal.js +8 -0
  149. package/dist/validator/InputRefusal.js.map +1 -0
  150. package/dist/validator/InputValidator.d.ts +15 -0
  151. package/dist/validator/InputValidator.d.ts.map +1 -0
  152. package/dist/{judge/RowJudge.js → validator/InputValidator.js} +25 -21
  153. package/dist/validator/InputValidator.js.map +1 -0
  154. package/dist/vocabulary/bool.d.ts +6 -1
  155. package/dist/vocabulary/bool.d.ts.map +1 -1
  156. package/dist/vocabulary/bool.js +6 -1
  157. package/dist/vocabulary/bool.js.map +1 -1
  158. package/dist/vocabulary/created.d.ts +6 -1
  159. package/dist/vocabulary/created.d.ts.map +1 -1
  160. package/dist/vocabulary/created.js +5 -0
  161. package/dist/vocabulary/created.js.map +1 -1
  162. package/dist/vocabulary/date.d.ts +6 -1
  163. package/dist/vocabulary/date.d.ts.map +1 -1
  164. package/dist/vocabulary/date.js +6 -1
  165. package/dist/vocabulary/date.js.map +1 -1
  166. package/dist/vocabulary/email.d.ts +6 -1
  167. package/dist/vocabulary/email.d.ts.map +1 -1
  168. package/dist/vocabulary/email.js +5 -0
  169. package/dist/vocabulary/email.js.map +1 -1
  170. package/dist/vocabulary/immutable.d.ts +6 -1
  171. package/dist/vocabulary/immutable.d.ts.map +1 -1
  172. package/dist/vocabulary/immutable.js +5 -0
  173. package/dist/vocabulary/immutable.js.map +1 -1
  174. package/dist/vocabulary/index.d.ts +23 -0
  175. package/dist/vocabulary/index.d.ts.map +1 -0
  176. package/dist/vocabulary/index.js +23 -0
  177. package/dist/vocabulary/index.js.map +1 -0
  178. package/dist/vocabulary/indexed.d.ts +6 -1
  179. package/dist/vocabulary/indexed.d.ts.map +1 -1
  180. package/dist/vocabulary/indexed.js +5 -0
  181. package/dist/vocabulary/indexed.js.map +1 -1
  182. package/dist/vocabulary/json.d.ts +2 -2
  183. package/dist/vocabulary/json.d.ts.map +1 -1
  184. package/dist/vocabulary/json.js +9 -4
  185. package/dist/vocabulary/json.js.map +1 -1
  186. package/dist/vocabulary/list.d.ts +6 -1
  187. package/dist/vocabulary/list.d.ts.map +1 -1
  188. package/dist/vocabulary/list.js +6 -1
  189. package/dist/vocabulary/list.js.map +1 -1
  190. package/dist/vocabulary/many.d.ts +7 -2
  191. package/dist/vocabulary/many.d.ts.map +1 -1
  192. package/dist/vocabulary/many.js +7 -2
  193. package/dist/vocabulary/many.js.map +1 -1
  194. package/dist/vocabulary/nullable.d.ts +6 -1
  195. package/dist/vocabulary/nullable.d.ts.map +1 -1
  196. package/dist/vocabulary/nullable.js +7 -2
  197. package/dist/vocabulary/nullable.js.map +1 -1
  198. package/dist/vocabulary/number.d.ts +6 -1
  199. package/dist/vocabulary/number.d.ts.map +1 -1
  200. package/dist/vocabulary/number.js +6 -1
  201. package/dist/vocabulary/number.js.map +1 -1
  202. package/dist/vocabulary/oneOf.d.ts +1 -1
  203. package/dist/vocabulary/oneOf.d.ts.map +1 -1
  204. package/dist/vocabulary/oneOf.js +6 -1
  205. package/dist/vocabulary/oneOf.js.map +1 -1
  206. package/dist/vocabulary/optional.d.ts +6 -1
  207. package/dist/vocabulary/optional.d.ts.map +1 -1
  208. package/dist/vocabulary/optional.js +7 -2
  209. package/dist/vocabulary/optional.js.map +1 -1
  210. package/dist/vocabulary/primary.d.ts +2 -2
  211. package/dist/vocabulary/primary.d.ts.map +1 -1
  212. package/dist/vocabulary/primary.js +7 -2
  213. package/dist/vocabulary/primary.js.map +1 -1
  214. package/dist/vocabulary/readOnly.d.ts +6 -1
  215. package/dist/vocabulary/readOnly.d.ts.map +1 -1
  216. package/dist/vocabulary/readOnly.js +6 -1
  217. package/dist/vocabulary/readOnly.js.map +1 -1
  218. package/dist/vocabulary/ref.d.ts +7 -2
  219. package/dist/vocabulary/ref.d.ts.map +1 -1
  220. package/dist/vocabulary/ref.js +7 -2
  221. package/dist/vocabulary/ref.js.map +1 -1
  222. package/dist/vocabulary/text.d.ts +7 -2
  223. package/dist/vocabulary/text.d.ts.map +1 -1
  224. package/dist/vocabulary/text.js +6 -1
  225. package/dist/vocabulary/text.js.map +1 -1
  226. package/dist/vocabulary/unique.d.ts +6 -1
  227. package/dist/vocabulary/unique.d.ts.map +1 -1
  228. package/dist/vocabulary/unique.js +7 -3
  229. package/dist/vocabulary/unique.js.map +1 -1
  230. package/dist/vocabulary/updated.d.ts +6 -1
  231. package/dist/vocabulary/updated.d.ts.map +1 -1
  232. package/dist/vocabulary/updated.js +5 -0
  233. package/dist/vocabulary/updated.js.map +1 -1
  234. package/dist/vocabulary/url.d.ts +6 -1
  235. package/dist/vocabulary/url.d.ts.map +1 -1
  236. package/dist/vocabulary/url.js +5 -0
  237. package/dist/vocabulary/url.js.map +1 -1
  238. package/dist/vocabulary/vocabulary.d.ts +6 -1
  239. package/dist/vocabulary/vocabulary.d.ts.map +1 -1
  240. package/dist/vocabulary/vocabulary.js +22 -12
  241. package/dist/vocabulary/vocabulary.js.map +1 -1
  242. package/dist/vocabulary/writeOnly.d.ts +6 -1
  243. package/dist/vocabulary/writeOnly.d.ts.map +1 -1
  244. package/dist/vocabulary/writeOnly.js +6 -1
  245. package/dist/vocabulary/writeOnly.js.map +1 -1
  246. package/package.json +1 -1
  247. package/src/{schema/Schema.ts → Schema.ts} +32 -75
  248. package/src/SchemaDefinition.ts +257 -0
  249. package/src/SchemaDerivation.ts +44 -0
  250. package/src/{schema/SchemaView.ts → SchemaView.ts} +9 -9
  251. package/src/{schema/axis → axis}/Axis.ts +2 -2
  252. package/src/axis/boundary/Boundaries.ts +37 -0
  253. package/src/{schema/axis → axis}/boundary/Boundary.ts +9 -7
  254. package/src/{schema/axis → axis}/boundary/BoundaryAxis.ts +4 -4
  255. package/src/{schema/axis → axis}/lifecycle/Clock.ts +1 -1
  256. package/src/axis/lifecycle/Generators.ts +29 -0
  257. package/src/{schema/axis → axis}/lifecycle/LifecycleAxis.ts +12 -7
  258. package/src/axis/lifecycle/apply.ts +53 -0
  259. package/src/{schema/axis → axis}/role/Relation.ts +6 -5
  260. package/src/axis/role/Role.ts +52 -0
  261. package/src/{schema/axis → axis}/role/RoleAxis.ts +28 -40
  262. package/src/axis/shape/Formats.ts +20 -0
  263. package/src/{schema/axis → axis}/shape/Shape.ts +45 -18
  264. package/src/entity/EntityAdapterSet.ts +81 -0
  265. package/src/entity/EntityAdapters.ts +4 -96
  266. package/src/entity/EntityDeclarations.ts +1 -1
  267. package/src/entity.ts +7 -2
  268. package/src/{schema/fields → field}/Field.ts +8 -28
  269. package/src/field/FieldSet.ts +75 -0
  270. package/src/index.ts +34 -91
  271. package/src/lib/Registry.ts +37 -0
  272. package/src/lib/index.ts +2 -0
  273. package/src/projection/Cases.ts +56 -55
  274. package/src/projection/Visibility.ts +5 -4
  275. package/src/projection/card/Bundle.ts +9 -9
  276. package/src/projection/card/Card.ts +109 -75
  277. package/src/projection/card/Descriptor.ts +7 -7
  278. package/src/projection/card/admission.ts +37 -6
  279. package/src/projection/card/diff.ts +2 -2
  280. package/src/validator/AdapterFieldValidator.ts +40 -0
  281. package/src/{judge/FieldJudge.ts → validator/FieldDeclarationValidator.ts} +10 -10
  282. package/src/{judge/ValueJudge.ts → validator/FieldValueValidator.ts} +14 -13
  283. package/src/validator/InputRefusal.ts +7 -0
  284. package/src/{judge/RowJudge.ts → validator/InputValidator.ts} +31 -24
  285. package/src/vocabulary/bool.ts +6 -1
  286. package/src/vocabulary/created.ts +6 -1
  287. package/src/vocabulary/date.ts +6 -1
  288. package/src/vocabulary/email.ts +6 -1
  289. package/src/vocabulary/immutable.ts +6 -1
  290. package/src/vocabulary/index.ts +22 -0
  291. package/src/vocabulary/indexed.ts +6 -1
  292. package/src/vocabulary/json.ts +10 -5
  293. package/src/vocabulary/list.ts +6 -1
  294. package/src/vocabulary/many.ts +7 -2
  295. package/src/vocabulary/nullable.ts +8 -3
  296. package/src/vocabulary/number.ts +6 -1
  297. package/src/vocabulary/oneOf.ts +6 -1
  298. package/src/vocabulary/optional.ts +8 -3
  299. package/src/vocabulary/primary.ts +7 -2
  300. package/src/vocabulary/readOnly.ts +7 -2
  301. package/src/vocabulary/ref.ts +7 -2
  302. package/src/vocabulary/text.ts +7 -2
  303. package/src/vocabulary/unique.ts +8 -4
  304. package/src/vocabulary/updated.ts +6 -1
  305. package/src/vocabulary/url.ts +6 -1
  306. package/src/vocabulary/vocabulary.ts +22 -12
  307. package/src/vocabulary/writeOnly.ts +7 -2
  308. package/dist/judge/FieldJudge.d.ts +0 -9
  309. package/dist/judge/FieldJudge.d.ts.map +0 -1
  310. package/dist/judge/FieldJudge.js.map +0 -1
  311. package/dist/judge/RowJudge.d.ts +0 -12
  312. package/dist/judge/RowJudge.d.ts.map +0 -1
  313. package/dist/judge/RowJudge.js.map +0 -1
  314. package/dist/judge/RowRefusal.d.ts +0 -17
  315. package/dist/judge/RowRefusal.d.ts.map +0 -1
  316. package/dist/judge/RowRefusal.js +0 -16
  317. package/dist/judge/RowRefusal.js.map +0 -1
  318. package/dist/judge/ValueJudge.d.ts +0 -12
  319. package/dist/judge/ValueJudge.d.ts.map +0 -1
  320. package/dist/judge/ValueJudge.js.map +0 -1
  321. package/dist/judge/options.d.ts +0 -4
  322. package/dist/judge/options.d.ts.map +0 -1
  323. package/dist/judge/options.js +0 -2
  324. package/dist/judge/options.js.map +0 -1
  325. package/dist/judge/result.d.ts.map +0 -1
  326. package/dist/judge/result.js +0 -2
  327. package/dist/judge/result.js.map +0 -1
  328. package/dist/projection/SchemaOrCard.d.ts +0 -7
  329. package/dist/projection/SchemaOrCard.d.ts.map +0 -1
  330. package/dist/projection/SchemaOrCard.js +0 -11
  331. package/dist/projection/SchemaOrCard.js.map +0 -1
  332. package/dist/projection/card/EntityTypeSource.d.ts +0 -12
  333. package/dist/projection/card/EntityTypeSource.d.ts.map +0 -1
  334. package/dist/projection/card/EntityTypeSource.js +0 -78
  335. package/dist/projection/card/EntityTypeSource.js.map +0 -1
  336. package/dist/projection/card/FacadeTypeSource.d.ts +0 -19
  337. package/dist/projection/card/FacadeTypeSource.d.ts.map +0 -1
  338. package/dist/projection/card/FacadeTypeSource.js +0 -40
  339. package/dist/projection/card/FacadeTypeSource.js.map +0 -1
  340. package/dist/schema/Schema.d.ts.map +0 -1
  341. package/dist/schema/Schema.js.map +0 -1
  342. package/dist/schema/SchemaDefinition.d.ts +0 -60
  343. package/dist/schema/SchemaDefinition.d.ts.map +0 -1
  344. package/dist/schema/SchemaDefinition.js +0 -85
  345. package/dist/schema/SchemaDefinition.js.map +0 -1
  346. package/dist/schema/SchemaDerivation.d.ts +0 -34
  347. package/dist/schema/SchemaDerivation.d.ts.map +0 -1
  348. package/dist/schema/SchemaDerivation.js +0 -51
  349. package/dist/schema/SchemaDerivation.js.map +0 -1
  350. package/dist/schema/SchemaView.d.ts.map +0 -1
  351. package/dist/schema/axis/Axis.d.ts.map +0 -1
  352. package/dist/schema/axis/Axis.js.map +0 -1
  353. package/dist/schema/axis/Meta.d.ts.map +0 -1
  354. package/dist/schema/axis/boundary/Boundaries.d.ts +0 -20
  355. package/dist/schema/axis/boundary/Boundaries.d.ts.map +0 -1
  356. package/dist/schema/axis/boundary/Boundaries.js +0 -31
  357. package/dist/schema/axis/boundary/Boundaries.js.map +0 -1
  358. package/dist/schema/axis/boundary/Boundary.d.ts.map +0 -1
  359. package/dist/schema/axis/boundary/Boundary.js.map +0 -1
  360. package/dist/schema/axis/boundary/BoundaryAxis.d.ts.map +0 -1
  361. package/dist/schema/axis/boundary/BoundaryAxis.js.map +0 -1
  362. package/dist/schema/axis/lifecycle/Clock.d.ts.map +0 -1
  363. package/dist/schema/axis/lifecycle/Clock.js.map +0 -1
  364. package/dist/schema/axis/lifecycle/Generators.d.ts +0 -18
  365. package/dist/schema/axis/lifecycle/Generators.d.ts.map +0 -1
  366. package/dist/schema/axis/lifecycle/Generators.js +0 -38
  367. package/dist/schema/axis/lifecycle/Generators.js.map +0 -1
  368. package/dist/schema/axis/lifecycle/Lifecycle.d.ts.map +0 -1
  369. package/dist/schema/axis/lifecycle/Lifecycle.js.map +0 -1
  370. package/dist/schema/axis/lifecycle/LifecycleAxis.d.ts.map +0 -1
  371. package/dist/schema/axis/lifecycle/LifecycleAxis.js.map +0 -1
  372. package/dist/schema/axis/lifecycle/apply.d.ts +0 -6
  373. package/dist/schema/axis/lifecycle/apply.d.ts.map +0 -1
  374. package/dist/schema/axis/lifecycle/apply.js +0 -34
  375. package/dist/schema/axis/lifecycle/apply.js.map +0 -1
  376. package/dist/schema/axis/role/Relation.d.ts.map +0 -1
  377. package/dist/schema/axis/role/Relation.js.map +0 -1
  378. package/dist/schema/axis/role/Role.d.ts.map +0 -1
  379. package/dist/schema/axis/role/Role.js +0 -40
  380. package/dist/schema/axis/role/Role.js.map +0 -1
  381. package/dist/schema/axis/role/RoleAxis.d.ts.map +0 -1
  382. package/dist/schema/axis/role/RoleAxis.js.map +0 -1
  383. package/dist/schema/axis/shape/Formats.d.ts +0 -8
  384. package/dist/schema/axis/shape/Formats.d.ts.map +0 -1
  385. package/dist/schema/axis/shape/Formats.js +0 -10
  386. package/dist/schema/axis/shape/Formats.js.map +0 -1
  387. package/dist/schema/axis/shape/Shape.d.ts.map +0 -1
  388. package/dist/schema/axis/shape/Shape.js +0 -52
  389. package/dist/schema/axis/shape/Shape.js.map +0 -1
  390. package/dist/schema/fields/Field.d.ts.map +0 -1
  391. package/dist/schema/fields/Field.js +0 -52
  392. package/dist/schema/fields/Field.js.map +0 -1
  393. package/dist/schema/fields/FieldSet.d.ts +0 -28
  394. package/dist/schema/fields/FieldSet.d.ts.map +0 -1
  395. package/dist/schema/fields/FieldSet.js +0 -55
  396. package/dist/schema/fields/FieldSet.js.map +0 -1
  397. package/dist/schema/fields/constraint/FieldGroup.d.ts +0 -21
  398. package/dist/schema/fields/constraint/FieldGroup.d.ts.map +0 -1
  399. package/dist/schema/fields/constraint/FieldGroup.js +0 -65
  400. package/dist/schema/fields/constraint/FieldGroup.js.map +0 -1
  401. package/dist/schema/fields/constraint/Unique.d.ts +0 -4
  402. package/dist/schema/fields/constraint/Unique.d.ts.map +0 -1
  403. package/dist/schema/fields/constraint/Unique.js +0 -4
  404. package/dist/schema/fields/constraint/Unique.js.map +0 -1
  405. package/dist/utils.d.ts.map +0 -1
  406. package/dist/utils.js.map +0 -1
  407. package/src/judge/RowRefusal.ts +0 -17
  408. package/src/judge/options.ts +0 -3
  409. package/src/projection/SchemaOrCard.ts +0 -18
  410. package/src/projection/card/EntityTypeSource.ts +0 -90
  411. package/src/projection/card/FacadeTypeSource.ts +0 -55
  412. package/src/schema/SchemaDefinition.ts +0 -150
  413. package/src/schema/SchemaDerivation.ts +0 -65
  414. package/src/schema/axis/boundary/Boundaries.ts +0 -44
  415. package/src/schema/axis/lifecycle/Generators.ts +0 -46
  416. package/src/schema/axis/lifecycle/apply.ts +0 -39
  417. package/src/schema/axis/role/Role.ts +0 -56
  418. package/src/schema/axis/shape/Formats.ts +0 -22
  419. package/src/schema/fields/FieldSet.ts +0 -63
  420. package/src/schema/fields/constraint/FieldGroup.ts +0 -84
  421. package/src/schema/fields/constraint/Unique.ts +0 -3
  422. /package/dist/{schema/SchemaView.js → SchemaView.js} +0 -0
  423. /package/dist/{schema/axis → axis}/Axis.js +0 -0
  424. /package/dist/{schema/axis → axis}/Meta.d.ts +0 -0
  425. /package/dist/{schema/axis → axis}/Meta.js +0 -0
  426. /package/dist/{schema/axis → axis}/boundary/BoundaryAxis.d.ts +0 -0
  427. /package/dist/{schema/axis → axis}/lifecycle/Lifecycle.d.ts +0 -0
  428. /package/dist/{schema/axis → axis}/lifecycle/Lifecycle.js +0 -0
  429. /package/dist/{schema/axis → axis}/lifecycle/LifecycleAxis.d.ts +0 -0
  430. /package/dist/{utils.d.ts → lib/utils.d.ts} +0 -0
  431. /package/dist/{utils.js → lib/utils.js} +0 -0
  432. /package/src/{schema/axis → axis}/Meta.ts +0 -0
  433. /package/src/{schema/axis → axis}/lifecycle/Lifecycle.ts +0 -0
  434. /package/src/{utils.ts → lib/utils.ts} +0 -0
  435. /package/src/{judge/result.ts → validation.ts} +0 -0
package/README.md CHANGED
@@ -35,13 +35,14 @@ PostDraft['~standard'].validate({ title: '' });
35
35
  // → { issues: [{ message: 'String is too short (0 < 1).', path: [{ key: 'title' }] }] }
36
36
  ```
37
37
 
38
- Validation is synchronous, and the spec types are inlined rather than depended on, so
39
- this package stays zero-dependency.
38
+ Validation is synchronous, and the spec types come from the package that publishes them.
39
+ That package is types only — its `index.js` is zero bytes — so a browser pays nothing for
40
+ it.
40
41
 
41
- One difference from most vendors, and it is deliberate: **the judge does not fill
42
+ One difference from most vendors, and it is deliberate: **the validator does not fill
42
43
  defaults**. A field declared `bool({ default: false })` may be absent — that is legal,
43
44
  and the value comes back without the key. Filling belongs to the storage, at the point
44
- of persistence, so the same input judged twice never gains a field on the way through.
45
+ of persistence, so the same input validated twice never gains a field on the way through.
45
46
 
46
47
  ## Installation
47
48
  ```bash
@@ -1,19 +1,19 @@
1
- import { type Fields } from './fields/Field.js';
2
- import { type CompositeUnique, type EntityDeclarations, type PreviousNames } from '../entity/EntityDeclarations.js';
3
- import { type EntityAdapters } from '../entity/EntityAdapters.js';
1
+ import { type Fields } from './field/Field.js';
2
+ import { type CompositeUnique, type EntityDeclarations, type PreviousNames } from './entity/EntityDeclarations.js';
3
+ import { type EntityAdapters } from './entity/EntityAdapters.js';
4
4
  import { SchemaDerivation } from './SchemaDerivation.js';
5
- import { SchemaDefinition } from './SchemaDefinition.js';
6
- import { type ValidateOptions } from '../judge/options.js';
7
- import type { StandardSchemaV1 } from '../projection/standard.js';
8
- import type { PartialRow, Row, SchemaView } from './SchemaView.js';
5
+ import { SchemaDefinition, type SchemaConstraints } from './SchemaDefinition.js';
6
+ import { type ValidateOptions } from './validator/InputValidator.js';
7
+ import type { StandardSchemaV1 } from './projection/standard.js';
8
+ import type { PartialValues, Values, SchemaView } from './SchemaView.js';
9
9
  export declare const ANONYMOUS_SCHEMA_NAME = "Schema";
10
10
  export interface SchemaConstructor<TFields extends Fields> extends SchemaView<TFields> {
11
- new (data: PartialRow<TFields>): Row<TFields>;
12
- readonly '~standard': StandardSchemaV1.Props<Record<string, unknown>, Row<TFields>>;
11
+ new (data: PartialValues<TFields>): Values<TFields>;
12
+ readonly '~standard': StandardSchemaV1.Props<Record<string, unknown>, Values<TFields>>;
13
13
  readonly derivation?: SchemaDerivation;
14
14
  readonly previous?: PreviousNames<TFields>;
15
15
  readonly anchored?: boolean;
16
- from(data: Record<string, unknown>): Row<TFields>;
16
+ from(data: Record<string, unknown>): Values<TFields>;
17
17
  pick<K extends string & keyof TFields>(...keys: K[]): SchemaConstructor<Pick<TFields, K>>;
18
18
  omit<K extends string & keyof TFields>(...keys: K[]): SchemaConstructor<Omit<TFields, K>>;
19
19
  partial(): SchemaConstructor<TFields>;
@@ -27,50 +27,40 @@ export declare class Schema {
27
27
  /** The one place a schema holds what it is. The readings below are its projections. */
28
28
  static definition: SchemaDefinition;
29
29
  static get fields(): Fields;
30
- static get adapters(): EntityAdapters<Fields> | undefined;
30
+ /** An entry survives every derivation that kept its field: `Post.pick('body').adapters`. */
31
+ static get adapters(): EntityAdapters<Fields>;
31
32
  static get opts(): ValidateOptions;
32
33
  static get derivation(): SchemaDerivation | undefined;
33
34
  static get previous(): PreviousNames<Fields> | undefined;
35
+ /** An anchor holds rows of its own; a derivation borrows them. */
34
36
  static get anchored(): boolean;
35
37
  constructor(data?: Record<string, unknown>);
36
38
  static getFields(): Fields;
37
- static getAdapters(): Readonly<Partial<import("../entity/EntityAdapters.js").FougereEntityAdapters<string>>> | undefined;
39
+ static getAdapters(): Readonly<Partial<import("./entity/EntityAdapters.js").FougereEntityAdapters<string>>>;
38
40
  static getUnique(): CompositeUnique<Fields> | undefined;
39
41
  static getOpts(): ValidateOptions;
40
- static validate(input: unknown): import("../index.js").ValidationResult<Record<string, unknown>>;
42
+ static validate(input: unknown): import("./validation.js").ValidationResult<Record<string, unknown>>;
41
43
  static from(data: Record<string, unknown>): Record<string, unknown>;
42
44
  static get ['~standard'](): StandardSchemaV1.Props<Record<string, unknown>>;
43
45
  static pick(...keys: string[]): SchemaConstructor<Fields>;
44
46
  static omit(...keys: string[]): SchemaConstructor<Fields>;
45
47
  static rename(mapping: Record<string, string>): SchemaConstructor<Fields>;
46
- /**
47
- * Everything a schema states about ITSELF, available wherever a schema is. `entity(fields, …)`
48
- * is this same gesture at the declaration site; the fields do not move, so neither does the type.
49
- */
50
48
  static declares(declarations: EntityDeclarations<Fields>): SchemaConstructor<Fields>;
51
- /**
52
- * This schema holds rows of its own — every entity is one, and a derivation says so.
53
- *
54
- * An anchor is where a walk STOPS: `derivation.anchor` climbs to the nearest one, and what
55
- * is cut from an anchor roots on it. Two anchors are two entities that happen to share a
56
- * shape, never a hierarchy — nothing here subtypes, so a relation between them is `ref()`.
57
- */
58
49
  static anchor(): SchemaConstructor<Fields>;
59
50
  static partial(): SchemaConstructor<Fields>;
60
51
  static extend(extra: Fields): SchemaConstructor<Fields>;
61
52
  static named(name: string): typeof Schema;
62
53
  static compose<T extends SchemaView[]>(...sources: T): SchemaConstructor<Merged<T>>;
63
- static of<TFields extends Fields>(stated: {
54
+ static of<TFields extends Fields>(declaration: {
64
55
  fields: TFields;
65
56
  derivation?: SchemaDerivation;
66
57
  adapters?: EntityAdapters<TFields>;
67
58
  opts?: ValidateOptions;
68
59
  previous?: PreviousNames<TFields>;
69
60
  anchored?: boolean;
61
+ constraints?: SchemaConstraints;
70
62
  }): SchemaConstructor<TFields>;
71
- /** The class a definition becomes. The one place a Schema subclass is born. */
72
63
  private static subclass;
73
- private static derive;
74
64
  }
75
65
  type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
76
66
  type Merged<T extends SchemaView[]> = UnionToIntersection<T[number] extends {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,16 @@
1
1
  import { Boundary } from './axis/boundary/Boundary.js';
2
- import { EntityAdapterSet } from '../entity/EntityAdapters.js';
3
- import { FieldGroup } from './fields/constraint/FieldGroup.js';
4
- import { Unique } from './fields/constraint/Unique.js';
5
- import { RowJudge } from '../judge/RowJudge.js';
2
+ import { InputValidator } from './validator/InputValidator.js';
6
3
  import { SchemaDefinition } from './SchemaDefinition.js';
7
4
  export const ANONYMOUS_SCHEMA_NAME = 'Schema';
8
5
  export class Schema {
9
6
  /** The one place a schema holds what it is. The readings below are its projections. */
10
- static definition = SchemaDefinition.stated({ fields: {} });
7
+ static definition = SchemaDefinition.of({ fields: {} });
11
8
  static get fields() {
12
9
  return this.definition.fields;
13
10
  }
11
+ /** An entry survives every derivation that kept its field: `Post.pick('body').adapters`. */
14
12
  static get adapters() {
15
- return this.definition.adapters;
13
+ return this.definition.adapterSet.adapters;
16
14
  }
17
15
  static get opts() {
18
16
  return this.definition.opts;
@@ -23,6 +21,7 @@ export class Schema {
23
21
  static get previous() {
24
22
  return this.definition.previous;
25
23
  }
24
+ /** An anchor holds rows of its own; a derivation borrows them. */
26
25
  static get anchored() {
27
26
  return this.definition.anchored;
28
27
  }
@@ -45,29 +44,28 @@ export class Schema {
45
44
  return this.adapters;
46
45
  }
47
46
  static getUnique() {
48
- const groups = FieldGroup.groupsOf(this.fields, Unique);
49
- return groups.length ? groups.map((group) => [...group.members]) : undefined;
47
+ return this.definition.constraints.unique;
50
48
  }
51
49
  static getOpts() {
52
50
  return this.opts;
53
51
  }
54
52
  static validate(input) {
55
- return RowJudge.of(this.fields, this.opts).check(input);
53
+ return InputValidator.of(this.fields, this.opts).validate(input);
56
54
  }
57
55
  static from(data) {
58
- const out = {};
56
+ const row = {};
59
57
  for (const [key, field] of Object.entries(this.fields)) {
60
- if (!(key in data))
58
+ if (!Object.hasOwn(data, key))
61
59
  continue;
62
60
  const value = data[key];
63
61
  if (value === null || value === undefined) {
64
- out[key] = value;
62
+ row[key] = value;
65
63
  continue;
66
64
  }
67
65
  const decoded = Boundary.of(field).decode(value);
68
- out[key] = 'error' in decoded ? value : decoded.value;
66
+ row[key] = 'error' in decoded ? value : decoded.value;
69
67
  }
70
- return out;
68
+ return row;
71
69
  }
72
70
  static get ['~standard']() {
73
71
  const { fields, opts } = this;
@@ -75,11 +73,11 @@ export class Schema {
75
73
  version: 1,
76
74
  vendor: 'fougere',
77
75
  validate(value) {
78
- const result = RowJudge.of(fields, opts).check(value);
79
- if (result.success)
80
- return { value: result.data };
76
+ const verdict = InputValidator.of(fields, opts).validate(value);
77
+ if (verdict.success)
78
+ return { value: verdict.data };
81
79
  return {
82
- issues: result.errors.map((e) => ({
80
+ issues: verdict.errors.map((e) => ({
83
81
  message: e.message,
84
82
  path: e.path && e.path !== '.' ? [{ key: e.path }] : undefined,
85
83
  })),
@@ -88,44 +86,17 @@ export class Schema {
88
86
  };
89
87
  }
90
88
  static pick(...keys) {
91
- assertKnownKeys('pick', keys, this.fields);
92
- const picked = {};
93
- for (const key of keys)
94
- if (this.fields[key])
95
- picked[key] = this.fields[key];
96
- return this.derive(picked, (k) => (keys.includes(k) ? k : undefined));
89
+ return Schema.subclass(this.definition.pick(keys, this));
97
90
  }
98
91
  static omit(...keys) {
99
- assertKnownKeys('omit', keys, this.fields);
100
- const kept = {};
101
- for (const [key, field] of Object.entries(this.fields))
102
- if (!keys.includes(key))
103
- kept[key] = field;
104
- return this.derive(kept, (k) => (keys.includes(k) ? undefined : k));
92
+ return Schema.subclass(this.definition.omit(keys, this));
105
93
  }
106
94
  static rename(mapping) {
107
- assertKnownKeys('rename', Object.keys(mapping), this.fields);
108
- const renamed = {};
109
- for (const [key, field] of Object.entries(this.fields))
110
- renamed[mapping[key] ?? key] = field;
111
- return this.derive(renamed, (k) => mapping[k] ?? k);
112
- }
113
- /**
114
- * Everything a schema states about ITSELF, available wherever a schema is. `entity(fields, …)`
115
- * is this same gesture at the declaration site; the fields do not move, so neither does the type.
116
- */
95
+ return Schema.subclass(this.definition.rename(mapping, this));
96
+ }
117
97
  static declares(declarations) {
118
- const addressed = EntityAdapterSet.of(declarations.adapters)?.fieldNames ?? [];
119
- assertKnownKeys('declares', [...addressed, ...Object.keys(declarations.previous ?? {})], this.fields);
120
98
  return Schema.subclass(this.definition.declaring(declarations));
121
99
  }
122
- /**
123
- * This schema holds rows of its own — every entity is one, and a derivation says so.
124
- *
125
- * An anchor is where a walk STOPS: `derivation.anchor` climbs to the nearest one, and what
126
- * is cut from an anchor roots on it. Two anchors are two entities that happen to share a
127
- * shape, never a hierarchy — nothing here subtypes, so a relation between them is `ref()`.
128
- */
129
100
  static anchor() {
130
101
  return Schema.subclass(this.definition.anchoring());
131
102
  }
@@ -148,10 +119,9 @@ export class Schema {
148
119
  static compose(...sources) {
149
120
  return Schema.subclass(SchemaDefinition.merged(sources));
150
121
  }
151
- static of(stated) {
152
- return Schema.subclass(SchemaDefinition.stated(stated));
122
+ static of(declaration) {
123
+ return Schema.subclass(SchemaDefinition.of(declaration));
153
124
  }
154
- /** The class a definition becomes. The one place a Schema subclass is born. */
155
125
  static subclass(definition) {
156
126
  class Derived extends Schema {
157
127
  }
@@ -162,15 +132,5 @@ export class Schema {
162
132
  });
163
133
  return Derived;
164
134
  }
165
- static derive(fields, survives) {
166
- return Schema.subclass(this.definition.cut(fields, survives, this));
167
- }
168
- }
169
- function assertKnownKeys(operation, keys, fields) {
170
- const strangers = keys.filter((key) => !(key in fields));
171
- if (strangers.length === 0)
172
- return;
173
- throw new Error(`${operation}(): unknown field ${strangers.map((s) => `\`${s}\``).join(', ')}. ` +
174
- `This schema carries ${Object.keys(fields).join(', ')}.`);
175
135
  }
176
136
  //# sourceMappingURL=Schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.js","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { type Fields } from './field/Field.js';
2
+ import { type CompositeUnique, type EntityDeclarations, type PreviousNames } from './entity/EntityDeclarations.js';
3
+ import { type EntityAdapters } from './entity/EntityAdapters.js';
4
+ import { EntityAdapterSet } from './entity/EntityAdapterSet.js';
5
+ import { SchemaDerivation } from './SchemaDerivation.js';
6
+ import { type ValidateOptions } from './validator/InputValidator.js';
7
+ import type { SchemaView } from './SchemaView.js';
8
+ /**
9
+ * What a schema constrains beyond any single field.
10
+ *
11
+ * `unique` is the one member today. It sits under an owner rather than beside `fields`
12
+ * and `opts` because the next rule spanning two fields — a check, an exclusion — is a
13
+ * member here, not an eighth positional argument in a list that has already lost one.
14
+ */
15
+ export interface SchemaConstraints<TFields extends Fields = Fields> {
16
+ readonly unique?: CompositeUnique<TFields>;
17
+ }
18
+ /**
19
+ * Everything a schema IS, apart from being a class whose instances are rows.
20
+ *
21
+ * The members used to be that many statics assigned side by side, and every derivation
22
+ * re-threaded them by hand — which is how one of them came to be dropped from a list
23
+ * without anyone noticing. A transformation here returns a COMPLETE definition or it does
24
+ * not compile, so no gesture can mix the fields of one with the options of another.
25
+ *
26
+ * Internal: it is not exported from the package and never appears on `SchemaConstructor`.
27
+ * A user derives with `Order.pick(…)`, never `Order.definition.pick(…)`.
28
+ */
29
+ export declare class SchemaDefinition {
30
+ readonly fields: Fields;
31
+ readonly adapterSet: EntityAdapterSet;
32
+ readonly opts: ValidateOptions;
33
+ readonly previous: PreviousNames<Fields> | undefined;
34
+ readonly derivation: SchemaDerivation | undefined;
35
+ readonly anchored: boolean;
36
+ readonly constraints: SchemaConstraints;
37
+ private constructor();
38
+ /** Built complete or not at all — no static assigned on the side. */
39
+ static of(declaration: {
40
+ fields: Fields;
41
+ adapters?: EntityAdapters<Fields>;
42
+ opts?: ValidateOptions;
43
+ previous?: PreviousNames<Fields>;
44
+ derivation?: SchemaDerivation;
45
+ anchored?: boolean;
46
+ constraints?: SchemaConstraints;
47
+ }): SchemaDefinition;
48
+ declaring(declarations: EntityDeclarations<Fields>): SchemaDefinition;
49
+ anchoring(): SchemaDefinition;
50
+ pick(keys: readonly string[], root: SchemaView): SchemaDefinition;
51
+ omit(keys: readonly string[], root: SchemaView): SchemaDefinition;
52
+ rename(mapping: Record<string, string>, root: SchemaView): SchemaDefinition;
53
+ /**
54
+ * `pick`, `omit` and `rename` are one gesture, and the renaming IS that gesture: the
55
+ * fields it keeps and everything else addressed by field name are both read from it.
56
+ */
57
+ private renaming;
58
+ /** One member gone and the group is gone: it constrained a pair that no longer exists. */
59
+ private constraintsRenamed;
60
+ patched(root: SchemaView): SchemaDefinition;
61
+ /** An added field does not pretend to come from the root, which never declared it. */
62
+ extended(extra: Fields, root: SchemaView): SchemaDefinition;
63
+ /** Several schemas fold into one, which has no single origin to point at. */
64
+ static merged(views: readonly SchemaView[]): SchemaDefinition;
65
+ /**
66
+ * So a gesture naming a field that does not exist says so, and lists what there is.
67
+ * FR : pour qu'un geste nommant un champ inexistant le dise, et énumère ce qui existe.
68
+ * `pick('titel')` → `pick(): unknown field \`titel\`. This schema carries id, title, body.`
69
+ */
70
+ private assertKnown;
71
+ private origin;
72
+ }
73
+ //# sourceMappingURL=SchemaDefinition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaDefinition.d.ts","sourceRoot":"","sources":["../src/SchemaDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IAChE,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;CAC5C;AAsBD;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,UAAU,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IAExC,OAAO,eAQN;IAED,qEAAqE;IACrE,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE;QACrB,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;QAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,WAAW,CAAC,EAAE,iBAAiB,CAAC;KACjC,GAAG,gBAAgB,CAUnB;IAED,SAAS,CAAC,YAAY,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAqBpE;IAED,SAAS,IAAI,gBAAgB,CAU5B;IAED,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAIhE;IAED,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAKhE;IAED,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAK1E;IAED;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAmBhB,0FAA0F;IAC1F,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAU1C;IAED,sFAAsF;IACtF,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAU1D;IAED,6EAA6E;IAC7E,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,gBAAgB,CAqB5D;IAED;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,MAAM;CAKf"}
@@ -0,0 +1,184 @@
1
+ import { FieldSet, deduplicated } from './field/FieldSet.js';
2
+ import { EntityAdapterSet } from './entity/EntityAdapterSet.js';
3
+ import { SchemaDerivation } from './SchemaDerivation.js';
4
+ /**
5
+ * Everything a schema IS, apart from being a class whose instances are rows.
6
+ *
7
+ * The members used to be that many statics assigned side by side, and every derivation
8
+ * re-threaded them by hand — which is how one of them came to be dropped from a list
9
+ * without anyone noticing. A transformation here returns a COMPLETE definition or it does
10
+ * not compile, so no gesture can mix the fields of one with the options of another.
11
+ *
12
+ * Internal: it is not exported from the package and never appears on `SchemaConstructor`.
13
+ * A user derives with `Order.pick(…)`, never `Order.definition.pick(…)`.
14
+ */
15
+ export class SchemaDefinition {
16
+ fields;
17
+ adapterSet;
18
+ opts;
19
+ previous;
20
+ derivation;
21
+ anchored;
22
+ constraints;
23
+ constructor(state) {
24
+ this.fields = state.fields;
25
+ this.adapterSet = state.adapterSet;
26
+ this.opts = state.opts;
27
+ this.previous = state.previous;
28
+ this.derivation = state.derivation;
29
+ this.anchored = state.anchored;
30
+ this.constraints = state.constraints;
31
+ }
32
+ /** Built complete or not at all — no static assigned on the side. */
33
+ static of(declaration) {
34
+ return new SchemaDefinition({
35
+ fields: declaration.fields,
36
+ adapterSet: EntityAdapterSet.of(declaration.adapters),
37
+ opts: declaration.opts ?? {},
38
+ previous: declaration.previous,
39
+ derivation: declaration.derivation,
40
+ anchored: declaration.anchored ?? false,
41
+ constraints: declaration.constraints ?? {},
42
+ });
43
+ }
44
+ declaring(declarations) {
45
+ const addressed = EntityAdapterSet.of(declarations.adapters).fieldNames;
46
+ this.assertKnown('declares', [
47
+ ...addressed,
48
+ ...Object.keys(declarations.previous ?? {}),
49
+ ]);
50
+ const declared = FieldSet.declaring(this.fields, declarations.unique);
51
+ return new SchemaDefinition({
52
+ fields: declared.fields,
53
+ adapterSet: EntityAdapterSet.merged([
54
+ this.adapterSet,
55
+ EntityAdapterSet.of(declarations.adapters),
56
+ ]),
57
+ opts: this.opts,
58
+ previous: declarations.previous ?? this.previous,
59
+ derivation: this.derivation,
60
+ anchored: this.anchored,
61
+ constraints: declarations.unique === undefined ? this.constraints : { unique: declared.unique },
62
+ });
63
+ }
64
+ anchoring() {
65
+ return new SchemaDefinition({
66
+ fields: this.fields,
67
+ adapterSet: this.adapterSet,
68
+ opts: this.opts,
69
+ previous: this.previous,
70
+ derivation: this.derivation,
71
+ anchored: true,
72
+ constraints: this.constraints,
73
+ });
74
+ }
75
+ pick(keys, root) {
76
+ this.assertKnown('pick', keys);
77
+ return this.renaming(new Map(keys.map((key) => [key, key])), root);
78
+ }
79
+ omit(keys, root) {
80
+ this.assertKnown('omit', keys);
81
+ const kept = Object.keys(this.fields).filter((key) => !keys.includes(key));
82
+ return this.renaming(new Map(kept.map((key) => [key, key])), root);
83
+ }
84
+ rename(mapping, root) {
85
+ this.assertKnown('rename', Object.keys(mapping));
86
+ const here = Object.keys(this.fields).map((key) => [key, mapping[key] ?? key]);
87
+ return this.renaming(new Map(here), root);
88
+ }
89
+ /**
90
+ * `pick`, `omit` and `rename` are one gesture, and the renaming IS that gesture: the
91
+ * fields it keeps and everything else addressed by field name are both read from it.
92
+ */
93
+ renaming(kept, root) {
94
+ const fields = {};
95
+ for (const [from, to] of kept) {
96
+ const field = this.fields[from];
97
+ if (field)
98
+ fields[to] = field;
99
+ }
100
+ const nameOf = (key) => kept.get(key);
101
+ return new SchemaDefinition({
102
+ fields,
103
+ adapterSet: this.adapterSet.rename(nameOf),
104
+ opts: this.opts,
105
+ previous: undefined,
106
+ derivation: this.origin(root).rename(nameOf),
107
+ anchored: false,
108
+ constraints: this.constraintsRenamed(nameOf),
109
+ });
110
+ }
111
+ /** One member gone and the group is gone: it constrained a pair that no longer exists. */
112
+ constraintsRenamed(transform) {
113
+ if (!this.constraints.unique)
114
+ return this.constraints;
115
+ const kept = [];
116
+ for (const group of this.constraints.unique) {
117
+ const renamed = group.map(transform);
118
+ if (renamed.every((key) => key !== undefined))
119
+ kept.push(renamed);
120
+ }
121
+ return { unique: deduplicated(kept) };
122
+ }
123
+ patched(root) {
124
+ return new SchemaDefinition({
125
+ fields: { ...this.fields },
126
+ adapterSet: this.adapterSet,
127
+ opts: { ...this.opts, patch: true },
128
+ previous: undefined,
129
+ derivation: this.origin(root),
130
+ anchored: false,
131
+ constraints: this.constraints,
132
+ });
133
+ }
134
+ /** An added field does not pretend to come from the root, which never declared it. */
135
+ extended(extra, root) {
136
+ return new SchemaDefinition({
137
+ fields: { ...this.fields, ...extra },
138
+ adapterSet: this.adapterSet,
139
+ opts: this.opts,
140
+ previous: undefined,
141
+ derivation: this.origin(root),
142
+ anchored: false,
143
+ constraints: this.constraints,
144
+ });
145
+ }
146
+ /** Several schemas fold into one, which has no single origin to point at. */
147
+ static merged(views) {
148
+ const fields = {};
149
+ let opts = {};
150
+ const groups = [];
151
+ for (const view of views) {
152
+ Object.assign(fields, view.getFields());
153
+ opts = { ...opts, ...view.getOpts() };
154
+ groups.push(...(view.getUnique() ?? []));
155
+ }
156
+ return new SchemaDefinition({
157
+ fields,
158
+ adapterSet: EntityAdapterSet.merged(views.map((view) => EntityAdapterSet.of(view.getAdapters()))),
159
+ opts,
160
+ previous: undefined,
161
+ derivation: undefined,
162
+ anchored: false,
163
+ constraints: { unique: deduplicated(groups) },
164
+ });
165
+ }
166
+ /**
167
+ * So a gesture naming a field that does not exist says so, and lists what there is.
168
+ * FR : pour qu'un geste nommant un champ inexistant le dise, et énumère ce qui existe.
169
+ * `pick('titel')` → `pick(): unknown field \`titel\`. This schema carries id, title, body.`
170
+ */
171
+ assertKnown(operation, keys) {
172
+ const strangers = keys.filter((key) => !Object.hasOwn(this.fields, key));
173
+ if (strangers.length === 0)
174
+ return;
175
+ throw new Error(`${operation}(): unknown field ${strangers.map((s) => `\`${s}\``).join(', ')}. ` +
176
+ `This schema carries ${Object.keys(this.fields).join(', ')}.`);
177
+ }
178
+ origin(root) {
179
+ if (!this.anchored && this.derivation)
180
+ return this.derivation;
181
+ return SchemaDerivation.first(root, this.fields);
182
+ }
183
+ }
184
+ //# sourceMappingURL=SchemaDefinition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaDefinition.js","sourceRoot":"","sources":["../src/SchemaDefinition.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAO7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAmCzD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,gBAAgB;IAClB,MAAM,CAAS;IACf,UAAU,CAAmB;IAC7B,IAAI,CAAkB;IACtB,QAAQ,CAAoC;IAC5C,UAAU,CAA+B;IACzC,QAAQ,CAAU;IAClB,WAAW,CAAoB;IAExC,YAAoB,KAAkB;QACpC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACvC,CAAC;IAED,qEAAqE;IACrE,MAAM,CAAC,EAAE,CAAC,WAQT;QACC,OAAO,IAAI,gBAAgB,CAAC;YAC1B,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,UAAU,EAAE,gBAAgB,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC;YACrD,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,EAAE;YAC5B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,KAAK;YACvC,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,EAAE;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,YAAwC;QAChD,MAAM,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC;QACxE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;YAC3B,GAAG,SAAS;YACZ,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,EAAE,CAAC;SAC5C,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QAEtE,OAAO,IAAI,gBAAgB,CAAC;YAC1B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC;gBAClC,IAAI,CAAC,UAAU;gBACf,gBAAgB,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;aAC3C,CAAC;YACF,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,YAAY,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAChD,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EACT,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;SACrF,CAAC,CAAC;IACL,CAAC;IAED,SAAS;QACP,OAAO,IAAI,gBAAgB,CAAC;YAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAuB,EAAE,IAAgB;QAC5C,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE/B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,CAAC,IAAuB,EAAE,IAAgB;QAC5C,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAE3E,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,OAA+B,EAAE,IAAgB;QACtD,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAU,CAAC,CAAC;QAExF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACK,QAAQ,CAAC,IAAc,EAAE,IAAgB;QAC/C,MAAM,MAAM,GAAW,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,KAAK;gBAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;QAChC,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE9C,OAAO,IAAI,gBAAgB,CAAC;YAC1B,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;YAC1C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YAC5C,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;SAC7C,CAAC,CAAC;IACL,CAAC;IAED,0FAA0F;IAClF,kBAAkB,CACxB,SAA8C;QAE9C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC;QACtD,MAAM,IAAI,GAAe,EAAE,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnF,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,IAAI,CAAwC,EAAE,CAAC;IAC/E,CAAC;IAED,OAAO,CAAC,IAAgB;QACtB,OAAO,IAAI,gBAAgB,CAAC;YAC1B,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;YAC1B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACnC,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAC7B,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,sFAAsF;IACtF,QAAQ,CAAC,KAAa,EAAE,IAAgB;QACtC,OAAO,IAAI,gBAAgB,CAAC;YAC1B,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,EAAE;YACpC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAC7B,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,MAAM,CAAC,MAAM,CAAC,KAA4B;QACxC,MAAM,MAAM,GAAW,EAAE,CAAC;QAC1B,IAAI,IAAI,GAAoB,EAAE,CAAC;QAC/B,MAAM,MAAM,GAA0B,EAAE,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACxC,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,IAAI,gBAAgB,CAAC;YAC1B,MAAM;YACN,UAAU,EAAE,gBAAgB,CAAC,MAAM,CACjC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAC7D;YACD,IAAI;YACJ,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,CAAwC,EAAE;SACrF,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,WAAW,CAAC,SAAiB,EAAE,IAAuB;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;QACzE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEnC,MAAM,IAAI,KAAK,CACb,GAAG,SAAS,qBAAqB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAC9E,uBAAuB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAChE,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,IAAgB;QAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAE9D,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import { type Fields } from './field/Field.js';
2
+ import type { SchemaView } from './SchemaView.js';
3
+ /**
4
+ * The origin is the ROOT: `Post.pick(a, b).omit(b)` answers `Post`, never the intermediate.
5
+ */
6
+ export declare class SchemaDerivation {
7
+ readonly source: SchemaView;
8
+ readonly nameOf: Readonly<Record<string, string | undefined>>;
9
+ private constructor();
10
+ static first(source: SchemaView, fields: Fields): SchemaDerivation;
11
+ rename(transform: (key: string) => string | undefined): SchemaDerivation;
12
+ get sourceName(): string;
13
+ /** Whose rows this one borrows, however many cuts away: `Post.pick('t').omit('t')` → `Post`. */
14
+ get anchor(): SchemaView;
15
+ }
16
+ //# sourceMappingURL=SchemaDerivation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaDerivation.d.ts","sourceRoot":"","sources":["../src/SchemaDerivation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,qBAAa,gBAAgB;IAEzB,QAAQ,CAAC,MAAM,EAAE,UAAU;IAC3B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAF/D,OAAO,eAGH;IAEJ,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAKjE;IAED,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAUvE;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,gGAAgG;IAChG,IAAI,MAAM,IAAI,UAAU,CAMvB;CACF"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * The origin is the ROOT: `Post.pick(a, b).omit(b)` answers `Post`, never the intermediate.
3
+ */
4
+ export class SchemaDerivation {
5
+ source;
6
+ nameOf;
7
+ constructor(source, nameOf) {
8
+ this.source = source;
9
+ this.nameOf = nameOf;
10
+ }
11
+ static first(source, fields) {
12
+ return new SchemaDerivation(source, Object.fromEntries(Object.keys(fields).map((key) => [key, key])));
13
+ }
14
+ rename(transform) {
15
+ return new SchemaDerivation(this.source, Object.fromEntries(Object.entries(this.nameOf).map(([origin, here]) => [
16
+ origin,
17
+ here === undefined ? undefined : transform(here),
18
+ ])));
19
+ }
20
+ get sourceName() {
21
+ return this.source.name;
22
+ }
23
+ /** Whose rows this one borrows, however many cuts away: `Post.pick('t').omit('t')` → `Post`. */
24
+ get anchor() {
25
+ const source = this.source;
26
+ return source.anchored !== undefined || !source.derivation
27
+ ? source
28
+ : source.derivation.anchor;
29
+ }
30
+ }
31
+ //# sourceMappingURL=SchemaDerivation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaDerivation.js","sourceRoot":"","sources":["../src/SchemaDerivation.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAEhB,MAAM;IACN,MAAM;IAFjB,YACW,MAAkB,EAClB,MAAoD;sBADpD,MAAM;sBACN,MAAM;IACd,CAAC;IAEJ,MAAM,CAAC,KAAK,CAAC,MAAkB,EAAE,MAAc;QAC7C,OAAO,IAAI,gBAAgB,CACzB,MAAM,EACN,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CACjE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,SAA8C;QACnD,OAAO,IAAI,gBAAgB,CACzB,IAAI,CAAC,MAAM,EACX,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM;YACN,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;SACjD,CAAC,CACH,CACF,CAAC;IACJ,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,gGAAgG;IAChG,IAAI,MAAM;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,OAAO,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,UAAU;YACxD,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;IAC/B,CAAC;CACF"}