@fougere/schema 0.2.0-alpha.2 → 0.3.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 (343) hide show
  1. package/dist/EntityDeclarations.d.ts +22 -0
  2. package/dist/EntityDeclarations.d.ts.map +1 -0
  3. package/dist/{hints.js → EntityDeclarations.js} +1 -5
  4. package/dist/EntityDeclarations.js.map +1 -0
  5. package/dist/Field.d.ts +21 -0
  6. package/dist/Field.d.ts.map +1 -0
  7. package/dist/Field.js +50 -0
  8. package/dist/Field.js.map +1 -0
  9. package/dist/{schema/schema.d.ts → Schema.d.ts} +27 -34
  10. package/dist/Schema.d.ts.map +1 -0
  11. package/dist/{schema/schema.js → Schema.js} +49 -59
  12. package/dist/Schema.js.map +1 -0
  13. package/dist/SchemaView.d.ts +18 -0
  14. package/dist/SchemaView.d.ts.map +1 -0
  15. package/dist/SchemaView.js +2 -0
  16. package/dist/SchemaView.js.map +1 -0
  17. package/dist/axis/Axis.d.ts +10 -0
  18. package/dist/axis/Axis.d.ts.map +1 -0
  19. package/dist/axis/Axis.js +9 -0
  20. package/dist/axis/Axis.js.map +1 -0
  21. package/dist/axis/Meta.d.ts +4 -0
  22. package/dist/axis/Meta.d.ts.map +1 -0
  23. package/dist/axis/Meta.js +2 -0
  24. package/dist/axis/Meta.js.map +1 -0
  25. package/dist/axis/boundary/Boundaries.d.ts +20 -0
  26. package/dist/axis/boundary/Boundaries.d.ts.map +1 -0
  27. package/dist/axis/boundary/Boundaries.js +31 -0
  28. package/dist/axis/boundary/Boundaries.js.map +1 -0
  29. package/dist/axis/boundary/Boundary.d.ts +26 -0
  30. package/dist/axis/boundary/Boundary.d.ts.map +1 -0
  31. package/dist/axis/boundary/Boundary.js +53 -0
  32. package/dist/axis/boundary/Boundary.js.map +1 -0
  33. package/dist/axis/boundary/axis.d.ts +4 -0
  34. package/dist/axis/boundary/axis.d.ts.map +1 -0
  35. package/dist/axis/boundary/axis.js +29 -0
  36. package/dist/axis/boundary/axis.js.map +1 -0
  37. package/dist/axis/lifecycle/Generators.d.ts +4 -0
  38. package/dist/axis/lifecycle/Generators.d.ts.map +1 -0
  39. package/dist/axis/lifecycle/Generators.js +8 -0
  40. package/dist/axis/lifecycle/Generators.js.map +1 -0
  41. package/dist/axis/lifecycle/Lifecycle.d.ts +28 -0
  42. package/dist/axis/lifecycle/Lifecycle.d.ts.map +1 -0
  43. package/dist/axis/lifecycle/Lifecycle.js +38 -0
  44. package/dist/axis/lifecycle/Lifecycle.js.map +1 -0
  45. package/dist/axis/lifecycle/apply.d.ts +8 -0
  46. package/dist/axis/lifecycle/apply.d.ts.map +1 -0
  47. package/dist/axis/lifecycle/apply.js +72 -0
  48. package/dist/axis/lifecycle/apply.js.map +1 -0
  49. package/dist/axis/lifecycle/axis.d.ts +4 -0
  50. package/dist/axis/lifecycle/axis.d.ts.map +1 -0
  51. package/dist/axis/lifecycle/axis.js +46 -0
  52. package/dist/axis/lifecycle/axis.js.map +1 -0
  53. package/dist/axis/role/Relation.d.ts +10 -0
  54. package/dist/axis/role/Relation.d.ts.map +1 -0
  55. package/dist/axis/role/Relation.js +6 -0
  56. package/dist/axis/role/Relation.js.map +1 -0
  57. package/dist/axis/role/Role.d.ts +38 -0
  58. package/dist/axis/role/Role.d.ts.map +1 -0
  59. package/dist/axis/role/Role.js +50 -0
  60. package/dist/axis/role/Role.js.map +1 -0
  61. package/dist/axis/role/axis.d.ts +5 -0
  62. package/dist/axis/role/axis.d.ts.map +1 -0
  63. package/dist/axis/role/axis.js +101 -0
  64. package/dist/axis/role/axis.js.map +1 -0
  65. package/dist/axis/shape/Formats.d.ts +8 -0
  66. package/dist/axis/shape/Formats.d.ts.map +1 -0
  67. package/dist/axis/shape/Formats.js +10 -0
  68. package/dist/axis/shape/Formats.js.map +1 -0
  69. package/dist/axis/shape/Shape.d.ts +58 -0
  70. package/dist/axis/shape/Shape.d.ts.map +1 -0
  71. package/dist/{field/shape.js → axis/shape/Shape.js} +10 -25
  72. package/dist/axis/shape/Shape.js.map +1 -0
  73. package/dist/card/Descriptor.d.ts +55 -0
  74. package/dist/card/Descriptor.d.ts.map +1 -0
  75. package/dist/card/Descriptor.js +2 -0
  76. package/dist/card/Descriptor.js.map +1 -0
  77. package/dist/card/describe.d.ts +12 -0
  78. package/dist/card/describe.d.ts.map +1 -0
  79. package/dist/card/describe.js +83 -0
  80. package/dist/card/describe.js.map +1 -0
  81. package/dist/card/diff.d.ts +140 -0
  82. package/dist/card/diff.d.ts.map +1 -0
  83. package/dist/card/diff.js +123 -0
  84. package/dist/card/diff.js.map +1 -0
  85. package/dist/card/reconstruct.d.ts +11 -0
  86. package/dist/card/reconstruct.d.ts.map +1 -0
  87. package/dist/card/reconstruct.js +83 -0
  88. package/dist/card/reconstruct.js.map +1 -0
  89. package/dist/card/typescript.d.ts +17 -0
  90. package/dist/card/typescript.d.ts.map +1 -0
  91. package/dist/card/typescript.js +93 -0
  92. package/dist/card/typescript.js.map +1 -0
  93. package/dist/clean.d.ts +2 -0
  94. package/dist/clean.d.ts.map +1 -0
  95. package/dist/{projections/card.js → clean.js} +1 -2
  96. package/dist/clean.js.map +1 -0
  97. package/dist/constraint/FieldGroup.d.ts +21 -0
  98. package/dist/constraint/FieldGroup.d.ts.map +1 -0
  99. package/dist/constraint/FieldGroup.js +65 -0
  100. package/dist/constraint/FieldGroup.js.map +1 -0
  101. package/dist/constraint/Unique.d.ts +4 -0
  102. package/dist/constraint/Unique.d.ts.map +1 -0
  103. package/dist/constraint/Unique.js +4 -0
  104. package/dist/constraint/Unique.js.map +1 -0
  105. package/dist/entity.d.ts +4 -19
  106. package/dist/entity.d.ts.map +1 -1
  107. package/dist/entity.js +13 -39
  108. package/dist/entity.js.map +1 -1
  109. package/dist/index.d.ts +54 -37
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +46 -48
  112. package/dist/index.js.map +1 -1
  113. package/dist/judge/Judge.d.ts +14 -0
  114. package/dist/judge/Judge.d.ts.map +1 -0
  115. package/dist/judge/Judge.js +161 -0
  116. package/dist/judge/Judge.js.map +1 -0
  117. package/dist/judge/cases.d.ts +50 -0
  118. package/dist/judge/cases.d.ts.map +1 -0
  119. package/dist/judge/cases.js +100 -0
  120. package/dist/judge/cases.js.map +1 -0
  121. package/dist/judge/form.d.ts +11 -0
  122. package/dist/judge/form.d.ts.map +1 -0
  123. package/dist/judge/form.js +18 -0
  124. package/dist/judge/form.js.map +1 -0
  125. package/dist/judge/options.d.ts +4 -0
  126. package/dist/judge/options.d.ts.map +1 -0
  127. package/dist/judge/options.js +2 -0
  128. package/dist/judge/options.js.map +1 -0
  129. package/dist/judge/result.d.ts +17 -0
  130. package/dist/judge/result.d.ts.map +1 -0
  131. package/dist/judge/result.js +2 -0
  132. package/dist/judge/result.js.map +1 -0
  133. package/dist/name.d.ts +1 -6
  134. package/dist/name.d.ts.map +1 -1
  135. package/dist/name.js +3 -6
  136. package/dist/name.js.map +1 -1
  137. package/dist/projection/encode.d.ts +3 -0
  138. package/dist/projection/encode.d.ts.map +1 -0
  139. package/dist/projection/encode.js +19 -0
  140. package/dist/projection/encode.js.map +1 -0
  141. package/dist/projection/io.d.ts +4 -0
  142. package/dist/projection/io.d.ts.map +1 -0
  143. package/dist/projection/io.js +29 -0
  144. package/dist/projection/io.js.map +1 -0
  145. package/dist/projection/source.d.ts +7 -0
  146. package/dist/projection/source.d.ts.map +1 -0
  147. package/dist/projection/source.js +11 -0
  148. package/dist/projection/source.js.map +1 -0
  149. package/dist/{projections → projection}/standard.d.ts +0 -8
  150. package/dist/projection/standard.d.ts.map +1 -0
  151. package/dist/projection/standard.js +2 -0
  152. package/dist/projection/standard.js.map +1 -0
  153. package/dist/same.d.ts +6 -0
  154. package/dist/same.d.ts.map +1 -0
  155. package/dist/same.js +35 -0
  156. package/dist/same.js.map +1 -0
  157. package/dist/vocabulary/bool.d.ts +1 -1
  158. package/dist/vocabulary/bool.d.ts.map +1 -1
  159. package/dist/vocabulary/bool.js +1 -1
  160. package/dist/vocabulary/bool.js.map +1 -1
  161. package/dist/vocabulary/created.d.ts +1 -5
  162. package/dist/vocabulary/created.d.ts.map +1 -1
  163. package/dist/vocabulary/created.js +1 -5
  164. package/dist/vocabulary/created.js.map +1 -1
  165. package/dist/vocabulary/date.d.ts +1 -1
  166. package/dist/vocabulary/date.d.ts.map +1 -1
  167. package/dist/vocabulary/date.js +1 -1
  168. package/dist/vocabulary/date.js.map +1 -1
  169. package/dist/vocabulary/email.d.ts +1 -2
  170. package/dist/vocabulary/email.d.ts.map +1 -1
  171. package/dist/vocabulary/email.js +0 -1
  172. package/dist/vocabulary/email.js.map +1 -1
  173. package/dist/vocabulary/immutable.d.ts +2 -6
  174. package/dist/vocabulary/immutable.d.ts.map +1 -1
  175. package/dist/vocabulary/immutable.js +4 -7
  176. package/dist/vocabulary/immutable.js.map +1 -1
  177. package/dist/vocabulary/indexed.d.ts +2 -7
  178. package/dist/vocabulary/indexed.d.ts.map +1 -1
  179. package/dist/vocabulary/indexed.js +2 -8
  180. package/dist/vocabulary/indexed.js.map +1 -1
  181. package/dist/vocabulary/json.d.ts +2 -10
  182. package/dist/vocabulary/json.d.ts.map +1 -1
  183. package/dist/vocabulary/json.js +10 -7
  184. package/dist/vocabulary/json.js.map +1 -1
  185. package/dist/vocabulary/list.d.ts +1 -12
  186. package/dist/vocabulary/list.d.ts.map +1 -1
  187. package/dist/vocabulary/list.js +1 -14
  188. package/dist/vocabulary/list.js.map +1 -1
  189. package/dist/vocabulary/many.d.ts +2 -5
  190. package/dist/vocabulary/many.d.ts.map +1 -1
  191. package/dist/vocabulary/many.js +2 -5
  192. package/dist/vocabulary/many.js.map +1 -1
  193. package/dist/vocabulary/nullable.d.ts +2 -6
  194. package/dist/vocabulary/nullable.d.ts.map +1 -1
  195. package/dist/vocabulary/nullable.js +5 -8
  196. package/dist/vocabulary/nullable.js.map +1 -1
  197. package/dist/vocabulary/number.d.ts +1 -1
  198. package/dist/vocabulary/number.d.ts.map +1 -1
  199. package/dist/vocabulary/number.js +1 -1
  200. package/dist/vocabulary/number.js.map +1 -1
  201. package/dist/vocabulary/oneOf.d.ts +1 -8
  202. package/dist/vocabulary/oneOf.d.ts.map +1 -1
  203. package/dist/vocabulary/oneOf.js +1 -1
  204. package/dist/vocabulary/oneOf.js.map +1 -1
  205. package/dist/vocabulary/optional.d.ts +2 -9
  206. package/dist/vocabulary/optional.d.ts.map +1 -1
  207. package/dist/vocabulary/optional.js +6 -14
  208. package/dist/vocabulary/optional.js.map +1 -1
  209. package/dist/vocabulary/primary.d.ts +2 -15
  210. package/dist/vocabulary/primary.d.ts.map +1 -1
  211. package/dist/vocabulary/primary.js +3 -9
  212. package/dist/vocabulary/primary.js.map +1 -1
  213. package/dist/vocabulary/readOnly.d.ts +2 -6
  214. package/dist/vocabulary/readOnly.d.ts.map +1 -1
  215. package/dist/vocabulary/readOnly.js +5 -8
  216. package/dist/vocabulary/readOnly.js.map +1 -1
  217. package/dist/vocabulary/ref.d.ts +2 -7
  218. package/dist/vocabulary/ref.d.ts.map +1 -1
  219. package/dist/vocabulary/ref.js +2 -7
  220. package/dist/vocabulary/ref.js.map +1 -1
  221. package/dist/vocabulary/text.d.ts +2 -2
  222. package/dist/vocabulary/text.d.ts.map +1 -1
  223. package/dist/vocabulary/text.js +1 -1
  224. package/dist/vocabulary/text.js.map +1 -1
  225. package/dist/vocabulary/unique.d.ts +2 -12
  226. package/dist/vocabulary/unique.d.ts.map +1 -1
  227. package/dist/vocabulary/unique.js +5 -13
  228. package/dist/vocabulary/unique.js.map +1 -1
  229. package/dist/vocabulary/updated.d.ts +1 -6
  230. package/dist/vocabulary/updated.d.ts.map +1 -1
  231. package/dist/vocabulary/updated.js +0 -5
  232. package/dist/vocabulary/updated.js.map +1 -1
  233. package/dist/vocabulary/url.d.ts +1 -2
  234. package/dist/vocabulary/url.d.ts.map +1 -1
  235. package/dist/vocabulary/url.js +0 -1
  236. package/dist/vocabulary/url.js.map +1 -1
  237. package/dist/vocabulary/vocabulary.d.ts +5 -0
  238. package/dist/vocabulary/vocabulary.d.ts.map +1 -0
  239. package/dist/vocabulary/vocabulary.js +31 -0
  240. package/dist/vocabulary/vocabulary.js.map +1 -0
  241. package/dist/vocabulary/writeOnly.d.ts +2 -6
  242. package/dist/vocabulary/writeOnly.d.ts.map +1 -1
  243. package/dist/vocabulary/writeOnly.js +5 -8
  244. package/dist/vocabulary/writeOnly.js.map +1 -1
  245. package/package.json +1 -1
  246. package/dist/field/boundary.d.ts +0 -69
  247. package/dist/field/boundary.d.ts.map +0 -1
  248. package/dist/field/boundary.js +0 -82
  249. package/dist/field/boundary.js.map +0 -1
  250. package/dist/field/field.d.ts +0 -21
  251. package/dist/field/field.d.ts.map +0 -1
  252. package/dist/field/field.js +0 -24
  253. package/dist/field/field.js.map +0 -1
  254. package/dist/field/format.d.ts +0 -29
  255. package/dist/field/format.d.ts.map +0 -1
  256. package/dist/field/format.js +0 -24
  257. package/dist/field/format.js.map +0 -1
  258. package/dist/field/index.d.ts +0 -8
  259. package/dist/field/index.d.ts.map +0 -1
  260. package/dist/field/index.js +0 -10
  261. package/dist/field/index.js.map +0 -1
  262. package/dist/field/lifecycle.d.ts +0 -31
  263. package/dist/field/lifecycle.d.ts.map +0 -1
  264. package/dist/field/lifecycle.js +0 -20
  265. package/dist/field/lifecycle.js.map +0 -1
  266. package/dist/field/meta.d.ts +0 -5
  267. package/dist/field/meta.d.ts.map +0 -1
  268. package/dist/field/meta.js +0 -5
  269. package/dist/field/meta.js.map +0 -1
  270. package/dist/field/role.d.ts +0 -47
  271. package/dist/field/role.d.ts.map +0 -1
  272. package/dist/field/role.js +0 -35
  273. package/dist/field/role.js.map +0 -1
  274. package/dist/field/shape.d.ts +0 -89
  275. package/dist/field/shape.d.ts.map +0 -1
  276. package/dist/field/shape.js.map +0 -1
  277. package/dist/hints.d.ts +0 -28
  278. package/dist/hints.d.ts.map +0 -1
  279. package/dist/hints.js.map +0 -1
  280. package/dist/projections/card.d.ts +0 -98
  281. package/dist/projections/card.d.ts.map +0 -1
  282. package/dist/projections/card.js.map +0 -1
  283. package/dist/projections/describe.d.ts +0 -25
  284. package/dist/projections/describe.d.ts.map +0 -1
  285. package/dist/projections/describe.js +0 -131
  286. package/dist/projections/describe.js.map +0 -1
  287. package/dist/projections/encode.d.ts +0 -11
  288. package/dist/projections/encode.d.ts.map +0 -1
  289. package/dist/projections/encode.js +0 -26
  290. package/dist/projections/encode.js.map +0 -1
  291. package/dist/projections/io.d.ts +0 -24
  292. package/dist/projections/io.d.ts.map +0 -1
  293. package/dist/projections/io.js +0 -46
  294. package/dist/projections/io.js.map +0 -1
  295. package/dist/projections/lifecycle.d.ts +0 -29
  296. package/dist/projections/lifecycle.d.ts.map +0 -1
  297. package/dist/projections/lifecycle.js +0 -93
  298. package/dist/projections/lifecycle.js.map +0 -1
  299. package/dist/projections/reconstruct.d.ts +0 -31
  300. package/dist/projections/reconstruct.d.ts.map +0 -1
  301. package/dist/projections/reconstruct.js +0 -146
  302. package/dist/projections/reconstruct.js.map +0 -1
  303. package/dist/projections/source.d.ts +0 -18
  304. package/dist/projections/source.d.ts.map +0 -1
  305. package/dist/projections/source.js +0 -18
  306. package/dist/projections/source.js.map +0 -1
  307. package/dist/projections/standard.d.ts.map +0 -1
  308. package/dist/projections/standard.js +0 -10
  309. package/dist/projections/standard.js.map +0 -1
  310. package/dist/projections/typescript.d.ts +0 -37
  311. package/dist/projections/typescript.d.ts.map +0 -1
  312. package/dist/projections/typescript.js +0 -157
  313. package/dist/projections/typescript.js.map +0 -1
  314. package/dist/schema/index.d.ts +0 -3
  315. package/dist/schema/index.d.ts.map +0 -1
  316. package/dist/schema/index.js +0 -2
  317. package/dist/schema/index.js.map +0 -1
  318. package/dist/schema/schema.d.ts.map +0 -1
  319. package/dist/schema/schema.js.map +0 -1
  320. package/dist/schema/view.d.ts +0 -26
  321. package/dist/schema/view.d.ts.map +0 -1
  322. package/dist/schema/view.js +0 -2
  323. package/dist/schema/view.js.map +0 -1
  324. package/dist/unique.d.ts +0 -40
  325. package/dist/unique.d.ts.map +0 -1
  326. package/dist/unique.js +0 -57
  327. package/dist/unique.js.map +0 -1
  328. package/dist/validation/index.d.ts +0 -4
  329. package/dist/validation/index.d.ts.map +0 -1
  330. package/dist/validation/index.js +0 -2
  331. package/dist/validation/index.js.map +0 -1
  332. package/dist/validation/judge.d.ts +0 -55
  333. package/dist/validation/judge.d.ts.map +0 -1
  334. package/dist/validation/judge.js +0 -351
  335. package/dist/validation/judge.js.map +0 -1
  336. package/dist/validation/options.d.ts +0 -6
  337. package/dist/validation/options.d.ts.map +0 -1
  338. package/dist/validation/options.js +0 -3
  339. package/dist/validation/options.js.map +0 -1
  340. package/dist/validation/result.d.ts +0 -20
  341. package/dist/validation/result.d.ts.map +0 -1
  342. package/dist/validation/result.js +0 -3
  343. package/dist/validation/result.js.map +0 -1
@@ -1,146 +0,0 @@
1
- import { Field, } from '../field/index.js';
2
- import { Schema } from '../schema/index.js';
3
- import { clean, } from './card.js';
4
- // ─── reconstruct — card → schema (the single reconstructor) ────────
5
- /**
6
- * Read a JSON Schema property back into a Fougère shape. The `type` travels
7
- * VERBATIM — nullability is the `[T,'null']` union on both sides, so there is
8
- * nothing to split; only the keyword subset of the base type is picked.
9
- */
10
- function reconstructShape(prop) {
11
- const types = Array.isArray(prop.type) ? prop.type : prop.type ? [prop.type] : [];
12
- const base = types.find((t) => t !== 'null');
13
- if (base === undefined)
14
- return undefined;
15
- const type = prop.type;
16
- // `array` with `items` is a value list, without it a `many` relation whose elements
17
- // live on the other side. Both are array shapes; only the role tells them apart, and
18
- // it travels in `x-fougere`. Nothing to branch on here — the keywords copy back.
19
- if (base === 'array') {
20
- const items = prop.items ? reconstructShape(prop.items) : undefined;
21
- return clean({ type, items, minItems: prop.minItems, maxItems: prop.maxItems });
22
- }
23
- switch (base) {
24
- case 'string':
25
- return clean({ type, minLength: prop.minLength, maxLength: prop.maxLength, pattern: prop.pattern, enum: prop.enum, format: prop.format });
26
- case 'number':
27
- case 'integer':
28
- return clean({ type, minimum: prop.minimum, maximum: prop.maximum });
29
- case 'boolean':
30
- return { type };
31
- default: // 'object' or anything unrecognised → opaque value (nesting travels verbatim)
32
- return clean({ type, properties: prop.properties, required: prop.required });
33
- }
34
- }
35
- function reconstructRole(role, resolve) {
36
- const out = {};
37
- if (role.primary)
38
- out.primary = true;
39
- // Members arrive spelled out and stay that way — a single-member group read back as the
40
- // empty self-reference would re-describe identically but lose the distinction for no
41
- // gain. `uniqueMembers` treats a named group as already resolved.
42
- if (role.unique?.length)
43
- out.unique = role.unique.map((group) => [...group]);
44
- if (role.index)
45
- out.index = true;
46
- if (role.relation) {
47
- const name = role.relation.to;
48
- out.relation = {
49
- // `to` is the `$ref` (a name). With a resolver (a bundle), it hands back the real
50
- // reconstructed target — adapters can read its fields. Lazy, so circular relations
51
- // resolve fine. Without one (a lone card), a name-only stand-in: enough to validate
52
- // (`kind`) and re-describe identically, but not to feed an adapter.
53
- to: () => resolve?.(name) ?? { name },
54
- kind: role.relation.kind,
55
- ...(role.relation.onDelete ? { onDelete: role.relation.onDelete } : {}),
56
- };
57
- }
58
- return out;
59
- }
60
- function reconstructField(prop, key, resolve) {
61
- const ext = prop['x-fougere'];
62
- const shape = reconstructShape(prop);
63
- // A card that names no type for a property cannot become a field: every field states a
64
- // shape. Loud and local, at the property that is missing it — the alternative is a field
65
- // that judges nothing, which is what this whole rule exists to stop.
66
- if (!shape) {
67
- throw new Error(`Field '${key}': the card carries no \`type\` for it, so there is no shape to rebuild. `
68
- + `A field always states one.`);
69
- }
70
- return new Field({
71
- shape,
72
- role: ext?.role ? reconstructRole(ext.role, resolve) : undefined,
73
- // The normal forms are pure JSON — they travelled verbatim, they read back verbatim.
74
- lifecycle: ext?.lifecycle,
75
- boundary: ext?.boundary,
76
- meta: prop.description !== undefined ? { description: prop.description } : undefined,
77
- });
78
- }
79
- /**
80
- * The entity-level groups implied by the fields — the inverse of
81
- * `projectUniqueOntoFields`. Only groups of more than one member: a lone `unique(slug)`
82
- * is fully stated by the field's own role, and listing it here would make `getUnique()`
83
- * answer a composite the author never declared.
84
- */
85
- function compositeFromFields(fields) {
86
- const seen = new Map();
87
- for (const field of Object.values(fields)) {
88
- for (const group of field.role?.unique ?? []) {
89
- if (group.length < 2)
90
- continue;
91
- // `JSON.stringify` and not a separator byte: a NUL made `grep` read the file as binary.
92
- seen.set(JSON.stringify(group), [...group]);
93
- }
94
- }
95
- return seen.size ? [...seen.values()] : undefined;
96
- }
97
- /** Build a live schema from a card; `resolve` wires relation targets when in a bundle. */
98
- function buildSchema(descriptor, resolve) {
99
- const fields = {};
100
- for (const [key, prop] of Object.entries(descriptor.properties)) {
101
- fields[key] = reconstructField(prop, key, resolve);
102
- }
103
- // The card holds the fact once per MEMBER, so a group of two arrives twice — de-duplicate
104
- // it and `getUnique()` answers what the author wrote.
105
- const schema = Schema.of(fields, undefined, undefined, {}, compositeFromFields(fields));
106
- // The name is what everything downstream keys on — the table, the GraphQL type, a
107
- // relation's `to`. `reconstructSet` overrides it with the bundle key, more specific.
108
- if (descriptor.title) {
109
- Object.defineProperty(schema, 'name', { value: descriptor.title, configurable: true });
110
- }
111
- return schema;
112
- }
113
- /**
114
- * Read a lone card back into a working schema — THE single reconstructor. The result
115
- * carries its `~standard` (live validation) rebuilt locally: the descriptor crosses
116
- * the wire as data, the behaviour is reconstituted here. Relations stay name stand-ins
117
- * (no set to resolve against — use {@link reconstructSet} for live targets).
118
- *
119
- * `T` states the row, which is what makes a rebuilt schema a CLASS and not a type beside a
120
- * value: `class Post extends reconstruct<{…}>(card) {}`, one declaration carrying both.
121
- * Without it the instance type is an index signature, so `post.titel` compiled.
122
- */
123
- export function reconstruct(descriptor) {
124
- return buildSchema(descriptor);
125
- }
126
- /**
127
- * Read a whole bundle back into live schemas, keyed by name — THE set reconstructor.
128
- * Every entity is rebuilt against a shared `$defs` resolver, so a relation's `to()`
129
- * hands back the real reconstructed target (feeds adapters), not a name stand-in.
130
- * Targets absent from the set (external/cross-frond `$ref`) keep the stand-in.
131
- */
132
- export function reconstructSet(bundle) {
133
- const map = {};
134
- const resolve = (name) => map[name.toLowerCase()];
135
- const out = {};
136
- for (const [name, descriptor] of Object.entries(bundle.$defs)) {
137
- const schema = buildSchema(descriptor, resolve);
138
- // Named after its key so re-describing yields the same `to`. `to` is lazy, so the map
139
- // need only be full before the first call — true once this loop ends.
140
- Object.defineProperty(schema, 'name', { value: name, configurable: true });
141
- map[name.toLowerCase()] = schema;
142
- out[name] = schema;
143
- }
144
- return out;
145
- }
146
- //# sourceMappingURL=reconstruct.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reconstruct.js","sourceRoot":"","sources":["../../src/projections/reconstruct.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import type { Fields } from '../field/index.js';
2
- import type { SchemaView } from '../schema/index.js';
3
- import type { SchemaDescriptor } from './card.js';
4
- /**
5
- * The two forms a schema reaches an adapter in. In-process it gets the class; from a
6
- * remote or foreign frond it gets the card, because a class does not cross a wire. Naming
7
- * the union is what lets one projection serve both.
8
- */
9
- export type SchemaSource = SchemaView | SchemaDescriptor;
10
- /**
11
- * Normalize a source to a live schema. Call it ONCE, at the adapter's boundary:
12
- * `reconstruct` runs per call (6.5 µs for 17 fields), so reading fields in two places
13
- * would rebuild the schema twice and hold two unrelated field objects.
14
- */
15
- export declare function schemaOf(source: SchemaSource): SchemaView;
16
- /** The fields an adapter projects from, whichever form it was handed. */
17
- export declare function fieldsOf(source: SchemaSource): Fields;
18
- //# sourceMappingURL=source.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/projections/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGlD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAOzD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAEzD;AAED,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAErD"}
@@ -1,18 +0,0 @@
1
- import { reconstruct } from './reconstruct.js';
2
- /** A card is the plain document — no behaviour, so no `getFields`. */
3
- function isDescriptor(source) {
4
- return typeof source.getFields !== 'function';
5
- }
6
- /**
7
- * Normalize a source to a live schema. Call it ONCE, at the adapter's boundary:
8
- * `reconstruct` runs per call (6.5 µs for 17 fields), so reading fields in two places
9
- * would rebuild the schema twice and hold two unrelated field objects.
10
- */
11
- export function schemaOf(source) {
12
- return isDescriptor(source) ? reconstruct(source) : source;
13
- }
14
- /** The fields an adapter projects from, whichever form it was handed. */
15
- export function fieldsOf(source) {
16
- return schemaOf(source).getFields();
17
- }
18
- //# sourceMappingURL=source.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/projections/source.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAS/C,sEAAsE;AACtE,SAAS,YAAY,CAAC,MAAoB;IACxC,OAAO,OAAQ,MAAqB,CAAC,SAAS,KAAK,UAAU,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAoB;IAC3C,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7D,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,QAAQ,CAAC,MAAoB;IAC3C,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;AACtC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"standard.d.ts","sourceRoot":"","sources":["../../src/projections/standard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,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,aAAa,CAAC,KAAK,CAAC,CAAC;KACvC;IAED,UAAU,KAAK;QACb,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,SAAS,CAAC;KACtE;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"}
@@ -1,10 +0,0 @@
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
- export {};
10
- //# sourceMappingURL=standard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"standard.js","sourceRoot":"","sources":["../../src/projections/standard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -1,37 +0,0 @@
1
- import type { SchemaDescriptor } from './card.js';
2
- export interface TypeSourceOptions {
3
- /** Name of the emitted interface. Defaults to the card's `title`, capitalized. */
4
- name?: string;
5
- exported?: boolean;
6
- }
7
- /**
8
- * The anonymous object type one card describes — the members, nothing around them.
9
- * Internal: `entitySourceOf` is what a consumer calls, and it emits this above the judge.
10
- *
11
- * Every property is present: `required` on a Fougère card answers "what must a CALLER
12
- * supply at creation", not "what is always there when read" — an `id` the system
13
- * generates is absent from `required` and always present on a row. Typing the read
14
- * shape from the create rule would make `post.id` possibly-undefined for everyone.
15
- */
16
- export declare function shapeTypeOf(descriptor: SchemaDescriptor, indent?: string): string;
17
- /**
18
- * Emit the entity a card describes — ONE class, judge and shape together, because a class
19
- * is the language's own answer to "a name that is both a value and a type".
20
- *
21
- * The card travels inline, so the rebuilt judge and the shape above it read off the same
22
- * source. Requires `reconstruct` in scope: only the caller knows how the consumer imports.
23
- */
24
- export declare function entitySourceOf(descriptor: SchemaDescriptor, options?: TypeSourceOptions): string;
25
- /** One operation, as much of it as a card can say. */
26
- export interface OpDescriptor {
27
- name: string;
28
- description?: string;
29
- output?: SchemaDescriptor;
30
- /** How much `output` describes. Absent means the card did not say. */
31
- cardinality?: 'one' | 'maybe' | 'many' | 'page' | 'none';
32
- }
33
- /** Emit the type of a façade — every operation an entity serves, as a callable surface. */
34
- export declare function facadeTypeSourceOf(ops: readonly OpDescriptor[], options?: TypeSourceOptions & {
35
- rowType?: string;
36
- }): string;
37
- //# sourceMappingURL=typescript.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/projections/typescript.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,WAAW,CAAC;AA8EnE,MAAM,WAAW,iBAAiB;IAChC,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAK,GAAG,MAAM,CAS7E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,gBAAgB,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CASpG;AAmBD,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,sEAAsE;IACtE,WAAW,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAC1D;AAyBD,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,SAAS,YAAY,EAAE,EAC5B,OAAO,GAAE,iBAAiB,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACrD,MAAM,CAYR"}
@@ -1,157 +0,0 @@
1
- /**
2
- * card → TypeScript source. `reconstruct` gives a consumer a living judge; this gives it
3
- * the type, so `post.title` is `string` rather than `any` and `post.titel` fails.
4
- *
5
- * Deliberately NOT a JSON Schema→TS library: the input is a Fougère card, whose vocabulary
6
- * is closed. A general one would carry `$ref`, `allOf` and the rest we never emit, and
7
- * would still need this file to know `format: date-time` means `Date` — a fact about our
8
- * boundary, not about JSON.
9
- */
10
- /** What a field's value looks like once `reconstruct` has decoded it. */
11
- function typeOf(field) {
12
- const types = Array.isArray(field.type) ? field.type : field.type ? [field.type] : [];
13
- const nullable = types.includes('null');
14
- const base = types.find((t) => t !== 'null');
15
- const inner = baseTypeOf(base, field);
16
- return nullable ? `${inner} | null` : inner;
17
- }
18
- function baseTypeOf(base, field) {
19
- // A bounded value set IS a type — the enum travels, so the union does too.
20
- if (field.enum?.length) {
21
- return field.enum.map((v) => (v === null ? 'null' : JSON.stringify(v))).join(' | ');
22
- }
23
- switch (base) {
24
- case 'string':
25
- // `date-time` is the wire form of a value the boundary decodes; the type says what
26
- // you receive, not what travelled.
27
- return field.format === 'date-time' ? 'Date' : 'string';
28
- case 'number':
29
- case 'integer':
30
- return 'number';
31
- case 'boolean':
32
- return 'boolean';
33
- case 'array':
34
- // `array` covers two things: a value list carries `items`, a `many` relation carries
35
- // none — the ids of the other side.
36
- return field.items ? `${typeOf(field.items)}[]` : 'string[]';
37
- case 'object':
38
- return field.properties ? objectTypeOf(field.properties, field.required ?? []) : 'Record<string, unknown>';
39
- default:
40
- return 'unknown';
41
- }
42
- }
43
- function objectTypeOf(properties, required) {
44
- const members = Object.entries(properties).map(([name, field]) => {
45
- const optional = required.includes(name) ? '' : '?';
46
- return `${propertyKey(name)}${optional}: ${typeOf(field)}`;
47
- });
48
- return `{ ${members.join('; ')} }`;
49
- }
50
- /** Quote a key only when it is not a plain identifier — generated source stays readable. */
51
- function propertyKey(name) {
52
- return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name) ? name : JSON.stringify(name);
53
- }
54
- /**
55
- * A description lands INSIDE a comment, and a card can come from a stranger.
56
- *
57
- * `identifierOf` already refuses a name for this reason — a name stops being data when it
58
- * lands in a declaration. So does a description: `*\/` ends the comment, and everything
59
- * after it is source. A card carrying `*\/ } console.log(…); interface X {` produced a file
60
- * that compiled with zero diagnostics and emitted a top-level statement, which `fougere
61
- * sync` then wrote into the consumer's repository for its next import to run.
62
- *
63
- * Escaped rather than refused, unlike a name: a description is prose, and prose contains
64
- * `*\/` legitimately (a sentence about a comment, a regex). `*\/` renders the same to a
65
- * reader and terminates nothing, so the text survives and the exit does not.
66
- */
67
- function docCommentOf(text, indent) {
68
- if (!text)
69
- return '';
70
- return `${indent}/** ${text.replace(/\*\//g, '*\\/')} */\n`;
71
- }
72
- /**
73
- * The anonymous object type one card describes — the members, nothing around them.
74
- * Internal: `entitySourceOf` is what a consumer calls, and it emits this above the judge.
75
- *
76
- * Every property is present: `required` on a Fougère card answers "what must a CALLER
77
- * supply at creation", not "what is always there when read" — an `id` the system
78
- * generates is absent from `required` and always present on a row. Typing the read
79
- * shape from the create rule would make `post.id` possibly-undefined for everyone.
80
- */
81
- export function shapeTypeOf(descriptor, indent = '') {
82
- const entries = Object.entries(descriptor.properties ?? {});
83
- if (entries.length === 0)
84
- return '{}';
85
- const lines = entries.map(([key, field]) => {
86
- const doc = docCommentOf(field.description, `${indent} `);
87
- return `${doc}${indent} ${propertyKey(key)}: ${typeOf(field)};`;
88
- });
89
- return `{\n${lines.join('\n')}\n${indent}}`;
90
- }
91
- /**
92
- * Emit the entity a card describes — ONE class, judge and shape together, because a class
93
- * is the language's own answer to "a name that is both a value and a type".
94
- *
95
- * The card travels inline, so the rebuilt judge and the shape above it read off the same
96
- * source. Requires `reconstruct` in scope: only the caller knows how the consumer imports.
97
- */
98
- export function entitySourceOf(descriptor, options = {}) {
99
- const name = identifierOf(options.name ?? capitalize(descriptor.title ?? 'Schema'));
100
- const exported = options.exported === false ? '' : 'export ';
101
- const card = JSON.stringify(descriptor, null, 2)
102
- .split('\n')
103
- .map((line, i) => (i === 0 ? line : ` ${line}`))
104
- .join('\n');
105
- return `${exported}class ${name} extends reconstruct<${shapeTypeOf(descriptor)}>(${card}) {}`;
106
- }
107
- /**
108
- * A card names itself, and a card can come from a stranger. Everything else here emits
109
- * data — a string lands inside `JSON.stringify` — but a name lands in a DECLARATION,
110
- * so it is the one value that could stop being data. Refuse it here as well as at the
111
- * caller: the projection should not depend on who calls it to be safe.
112
- */
113
- function identifierOf(name) {
114
- if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name)) {
115
- throw new Error(`'${name}' is not a TypeScript identifier — it cannot name a generated declaration`);
116
- }
117
- return name;
118
- }
119
- function capitalize(s) {
120
- return s ? s[0].toUpperCase() + s.slice(1) : s;
121
- }
122
- /**
123
- * What one operation hands back, in TypeScript.
124
- *
125
- * `output` is the shape of a ROW; `cardinality` is how many rows. Separating them is
126
- * what makes this honest — `list` returns a page, not an array, and a generator that
127
- * assumed otherwise would have written a signature that compiles and lies.
128
- *
129
- * A page is spelled as what it IS: `ListResult<T> extends Array<T>`, an array carrying
130
- * its own totals. So the type is the array intersected with them, not a wrapper.
131
- */
132
- function returnTypeOf(op, rowType) {
133
- switch (op.cardinality) {
134
- case 'many': return `${rowType}[]`;
135
- case 'page': return `${rowType}[] & { total?: number; endCursor?: string; hasMore?: boolean }`;
136
- case 'maybe': return `${rowType} | undefined`;
137
- case 'one': return rowType;
138
- // `none` says there is no shaped output — a boolean, a void. Saying `unknown` is
139
- // the truth; guessing `void` would forbid reading a value that does come back.
140
- case 'none': return 'unknown';
141
- default: return 'unknown';
142
- }
143
- }
144
- /** Emit the type of a façade — every operation an entity serves, as a callable surface. */
145
- export function facadeTypeSourceOf(ops, options = {}) {
146
- const name = options.name ?? 'Facade';
147
- const exported = options.exported === false ? '' : 'export ';
148
- const rowType = options.rowType ?? 'unknown';
149
- const members = ops.map((op) => {
150
- const doc = docCommentOf(op.description, ' ');
151
- return `${doc} ${propertyKey(op.name)}(invocation?: Invocation): Promise<${returnTypeOf(op, rowType)}>;`;
152
- });
153
- if (members.length === 0)
154
- return `${exported}interface ${name} {}`;
155
- return `${exported}interface ${name} {\n${members.join('\n')}\n}`;
156
- }
157
- //# sourceMappingURL=typescript.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../src/projections/typescript.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export type { Row, PartialRow, SchemaView } from "./view.js";
2
- export { Schema, compose, ANONYMOUS_SCHEMA_NAME, type SchemaConstructor } from "./schema.js";
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -1,2 +0,0 @@
1
- export { Schema, compose, ANONYMOUS_SCHEMA_NAME } from "./schema.js";
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAA0B,MAAM,aAAa,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema/schema.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema/schema.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import type { Field, Fields } from "../field/index.js";
2
- import type { Hints } from "../hints.js";
3
- import type { CompositeUnique } from "../unique.js";
4
- import type { ValidationResult, ValidateOptions } from '../validation/index.js';
5
- /** The row an entity carries — its fields' value types, all present. */
6
- export type Row<TFields extends Fields> = {
7
- [K in keyof TFields]: TFields[K] extends Field<infer T> ? T : never;
8
- };
9
- /** A row as handed to the constructor — every key omissible. */
10
- export type PartialRow<TFields extends Fields> = Partial<Row<TFields>>;
11
- /**
12
- * What a schema ANSWERS. No construct signature, so a class carrying a body satisfies it —
13
- * and `Fields` by default, for a reader that does not care which map it holds.
14
- */
15
- export interface SchemaView<TFields extends Fields = Fields> {
16
- readonly name: string;
17
- getFields(): TFields;
18
- /** Per-consumer hints from the 2nd arg of `entity()`. Derivations carry them. */
19
- getHints(): Hints<TFields> | undefined;
20
- /** Field groups unique together, from the 2nd arg of `entity()`. */
21
- getUnique(): CompositeUnique<TFields> | undefined;
22
- /** This view's validation mode — `patch` is set by `partial()`. */
23
- getOpts(): ValidateOptions;
24
- validate(input: unknown): ValidationResult<Row<TFields>>;
25
- }
26
- //# sourceMappingURL=view.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/schema/view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGhF,wEAAwE;AACxE,MAAM,MAAM,GAAG,CAAC,OAAO,SAAS,MAAM,IAAI;KACvC,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CACpE,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,UAAU,CAAC,OAAO,SAAS,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAEvE;;;GAGG;AACH,MAAM,WAAW,UAAU,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,SAAS,IAAI,OAAO,CAAC;IACrB,iFAAiF;IACjF,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IACvC,oEAAoE;IACpE,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAClD,mEAAmE;IACnE,OAAO,IAAI,eAAe,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;CAC1D"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=view.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/schema/view.ts"],"names":[],"mappings":""}
package/dist/unique.d.ts DELETED
@@ -1,40 +0,0 @@
1
- import type { Fields } from './field/index.js';
2
- import type { Hints } from './hints.js';
3
- /**
4
- * Field names that identify at most one row when taken together. No shape can express it —
5
- * judging one value never sees the other rows — and no handler either: a check then a write
6
- * is two round trips with room for a concurrent one between them. Only the database keeps it.
7
- */
8
- export type CompositeUnique<TFields extends Fields> = ReadonlyArray<ReadonlyArray<Extract<keyof TFields, string>>>;
9
- /**
10
- * What an entity declares about itself, beyond its fields — the 2nd argument of
11
- * `entity()`.
12
- *
13
- * One object rather than a growing parameter list: a second fact about an entity
14
- * adds a key here, never a positional argument.
15
- */
16
- export interface EntityDeclarations<TFields extends Fields> {
17
- unique?: CompositeUnique<TFields>;
18
- /** Per-consumer hints, keyed by registered adapter. See {@link Hints}. */
19
- hints?: Hints<TFields>;
20
- }
21
- /**
22
- * Carry composite groups across a key transform. A group that lost a member is DROPPED,
23
- * not narrowed: `(listId, docId)` says nothing about `listId` alone.
24
- */
25
- export declare function deriveUnique(groups: CompositeUnique<Fields> | undefined, mapKey: (key: string) => string | undefined): CompositeUnique<Fields> | undefined;
26
- /**
27
- * The same, on each member's role — it must run WITH {@link deriveUnique}: once projected
28
- * the group lives in two places, so remapping one alone left a role claiming a pair whose
29
- * other member was gone. The empty self-reference names no key, so it needs no remapping.
30
- */
31
- export declare function deriveUniqueRoles<TFields extends Fields>(fields: TFields, mapKey: (key: string) => string | undefined): TFields;
32
- /**
33
- * Project the entity's composite groups onto every member's role — the single place the
34
- * two ways of stating uniqueness meet, so every consumer has one shape to handle.
35
- *
36
- * The entity declaration stays the source (`getUnique()` answers it); this is a projection,
37
- * never a second place to edit.
38
- */
39
- export declare function projectUniqueOntoFields<TFields extends Fields>(fields: TFields, groups: CompositeUnique<TFields> | undefined): TFields;
40
- //# sourceMappingURL=unique.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"unique.d.ts","sourceRoot":"","sources":["../src/unique.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;;;GAIG;AACH,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,MAAM,IAAI,aAAa,CACjE,aAAa,CAAC,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,CAAC,CAC9C,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB,CAAC,OAAO,SAAS,MAAM;IACxD,MAAM,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAClC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,SAAS,EAC3C,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAC1C,eAAe,CAAC,MAAM,CAAC,GAAG,SAAS,CAQrC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,MAAM,EACtD,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAC1C,OAAO,CAeT;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,SAAS,MAAM,EAC5D,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,GAC3C,OAAO,CAcT"}
package/dist/unique.js DELETED
@@ -1,57 +0,0 @@
1
- /**
2
- * Carry composite groups across a key transform. A group that lost a member is DROPPED,
3
- * not narrowed: `(listId, docId)` says nothing about `listId` alone.
4
- */
5
- export function deriveUnique(groups, mapKey) {
6
- if (!groups)
7
- return undefined;
8
- const carried = groups
9
- .map((group) => group.map(mapKey))
10
- .filter((group) => group.every((key) => key !== undefined));
11
- return carried.length > 0 ? carried : undefined;
12
- }
13
- /**
14
- * The same, on each member's role — it must run WITH {@link deriveUnique}: once projected
15
- * the group lives in two places, so remapping one alone left a role claiming a pair whose
16
- * other member was gone. The empty self-reference names no key, so it needs no remapping.
17
- */
18
- export function deriveUniqueRoles(fields, mapKey) {
19
- const out = { ...fields };
20
- for (const [key, field] of Object.entries(out)) {
21
- const groups = field.role?.unique;
22
- if (!groups?.length)
23
- continue;
24
- const carried = groups
25
- .map((group) => (group.length === 0 ? [] : group.map(mapKey)))
26
- .filter((group) => group.every((member) => member !== undefined));
27
- if (carried.length === groups.length)
28
- continue; // nothing lost, keep the field as is
29
- const { unique: _dropped, ...rest } = field.role;
30
- out[key] = field.with({ role: carried.length ? { ...rest, unique: carried } : rest });
31
- }
32
- return out;
33
- }
34
- /**
35
- * Project the entity's composite groups onto every member's role — the single place the
36
- * two ways of stating uniqueness meet, so every consumer has one shape to handle.
37
- *
38
- * The entity declaration stays the source (`getUnique()` answers it); this is a projection,
39
- * never a second place to edit.
40
- */
41
- export function projectUniqueOntoFields(fields, groups) {
42
- if (!groups || groups.length === 0)
43
- return fields;
44
- const projected = { ...fields };
45
- for (const group of groups) {
46
- const members = [...group];
47
- for (const key of members) {
48
- const field = projected[key];
49
- if (!field)
50
- continue; // a group naming an absent field states nothing here
51
- const already = field.role?.unique ?? [];
52
- projected[key] = field.with({ role: { ...field.role, unique: [...already, members] } });
53
- }
54
- }
55
- return projected;
56
- }
57
- //# sourceMappingURL=unique.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"unique.js","sourceRoot":"","sources":["../src/unique.ts"],"names":[],"mappings":"AAyBA;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,MAA2C,EAC3C,MAA2C;IAE3C,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,MAAM,OAAO,GAAG,MAAM;SACnB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;SACjC,MAAM,CAAC,CAAC,KAAK,EAAqB,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC;IAEjF,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAe,EACf,MAA2C;IAE3C,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,EAAY,CAAC;IACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE,MAAM;YAAE,SAAS;QAE9B,MAAM,OAAO,GAAG,MAAM;aACnB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;aAC7D,MAAM,CAAC,CAAC,KAAK,EAAqB,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC;QAEvF,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;YAAE,SAAS,CAAG,qCAAqC;QACvF,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,IAAK,CAAC;QAClD,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,GAAc,CAAC;AACxB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAe,EACf,MAA4C;IAE5C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAElD,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,EAAY,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK;gBAAE,SAAS,CAAG,qDAAqD;YAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;YACzC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IACD,OAAO,SAAoB,CAAC;AAC9B,CAAC"}