@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
@@ -0,0 +1,83 @@
1
+ import { clean } from '../clean.js';
2
+ import { isObject, refuse } from '../judge/form.js';
3
+ import { EXTENSION_AXES } from '../axis/Axis.js';
4
+ import { Field } from '../Field.js';
5
+ import { Schema } from '../Schema.js';
6
+ function reconstructShape(prop) {
7
+ const types = Array.isArray(prop.type) ? prop.type : prop.type ? [prop.type] : [];
8
+ const base = types.find((t) => t !== 'null');
9
+ if (base === undefined)
10
+ return undefined;
11
+ const type = prop.type;
12
+ if (base === 'array') {
13
+ const items = prop.items ? reconstructShape(prop.items) : undefined;
14
+ return clean({ type, items, minItems: prop.minItems, maxItems: prop.maxItems });
15
+ }
16
+ switch (base) {
17
+ case 'string':
18
+ return clean({ type, minLength: prop.minLength, maxLength: prop.maxLength, pattern: prop.pattern, enum: prop.enum, format: prop.format });
19
+ case 'number':
20
+ case 'integer':
21
+ return clean({ type, minimum: prop.minimum, maximum: prop.maximum });
22
+ case 'boolean':
23
+ return { type };
24
+ default:
25
+ return clean({ type, properties: prop.properties, required: prop.required });
26
+ }
27
+ }
28
+ function reconstructField(prop, key, resolve) {
29
+ const ext = prop['x-fougere'];
30
+ const shape = reconstructShape(prop);
31
+ if (!shape) {
32
+ throw new Error(`Field '${key}': the card carries no \`type\` for it, so there is no shape to rebuild. `
33
+ + `A field always states one.`);
34
+ }
35
+ const axes = {};
36
+ for (const axis of EXTENSION_AXES) {
37
+ const wire = ext?.[axis.slot];
38
+ if (wire !== undefined) {
39
+ axes[axis.slot] = axis.reconstruct(wire, resolve);
40
+ }
41
+ }
42
+ return new Field({
43
+ shape,
44
+ ...axes,
45
+ meta: prop.description !== undefined ? { description: prop.description } : undefined,
46
+ });
47
+ }
48
+ function buildSchema(descriptor, resolve, name) {
49
+ const where = name ? `schema '${name}'` : 'this schema';
50
+ if (!isObject(descriptor))
51
+ refuse(`${where} is not an object`, 'A card carries one JSON Schema per door.');
52
+ const version = descriptor['x-fougere-version'];
53
+ if (version !== 1) {
54
+ refuse(`${where} states \`x-fougere-version: ${JSON.stringify(version)}\` and this reader speaks 1`, 'A producer and its readers move together: re-sync the consumer, or serve the version it speaks.');
55
+ }
56
+ if (!isObject(descriptor.properties)) {
57
+ refuse(`${where} carries no \`properties\` object`, 'A schema is its fields; there is nothing to rebuild.');
58
+ }
59
+ const fields = {};
60
+ for (const [key, prop] of Object.entries(descriptor.properties)) {
61
+ fields[key] = reconstructField(prop, key, resolve);
62
+ }
63
+ const schema = Schema.of(fields, undefined, undefined, {});
64
+ const title = name ?? descriptor.title;
65
+ if (title)
66
+ Object.defineProperty(schema, 'name', { value: title, configurable: true });
67
+ return schema;
68
+ }
69
+ export function reconstruct(descriptor) {
70
+ return buildSchema(descriptor);
71
+ }
72
+ export function reconstructSet(bundle) {
73
+ const map = {};
74
+ const resolve = (name) => map[name.toLowerCase()];
75
+ const out = {};
76
+ for (const [name, descriptor] of Object.entries(bundle.$defs)) {
77
+ const schema = buildSchema(descriptor, resolve, name);
78
+ map[name.toLowerCase()] = schema;
79
+ out[name] = schema;
80
+ }
81
+ return out;
82
+ }
83
+ //# sourceMappingURL=reconstruct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconstruct.js","sourceRoot":"","sources":["../../src/card/reconstruct.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { SchemaDescriptor } from './Descriptor.js';
2
+ export interface TypeSourceOptions {
3
+ name?: string;
4
+ exported?: boolean;
5
+ }
6
+ export declare function shapeTypeOf(descriptor: SchemaDescriptor, indent?: string): string;
7
+ export declare function entitySourceOf(descriptor: SchemaDescriptor, options?: TypeSourceOptions): string;
8
+ export interface OpDescriptor {
9
+ name: string;
10
+ description?: string;
11
+ output?: SchemaDescriptor;
12
+ cardinality?: 'one' | 'maybe' | 'many' | 'page' | 'none';
13
+ }
14
+ export declare function facadeTypeSourceOf(ops: readonly OpDescriptor[], options?: TypeSourceOptions & {
15
+ rowType?: string;
16
+ }): string;
17
+ //# sourceMappingURL=typescript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/card/typescript.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAgDzE,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAK,GAAG,MAAM,CAS7E;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,gBAAgB,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CASpG;AAaD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,WAAW,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAC1D;AAaD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,SAAS,YAAY,EAAE,EAC5B,OAAO,GAAE,iBAAiB,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACrD,MAAM,CAYR"}
@@ -0,0 +1,93 @@
1
+ function typeOf(field) {
2
+ const types = Array.isArray(field.type) ? field.type : field.type ? [field.type] : [];
3
+ const nullable = types.includes('null');
4
+ const base = types.find((t) => t !== 'null');
5
+ const inner = baseTypeOf(base, field);
6
+ return nullable ? `${inner} | null` : inner;
7
+ }
8
+ function baseTypeOf(base, field) {
9
+ if (field.enum?.length) {
10
+ return field.enum.map((v) => (v === null ? 'null' : JSON.stringify(v))).join(' | ');
11
+ }
12
+ switch (base) {
13
+ case 'string':
14
+ return field.format === 'date-time' ? 'Date' : 'string';
15
+ case 'number':
16
+ case 'integer':
17
+ return 'number';
18
+ case 'boolean':
19
+ return 'boolean';
20
+ case 'array':
21
+ return field.items ? `${typeOf(field.items)}[]` : 'string[]';
22
+ case 'object':
23
+ return field.properties ? objectTypeOf(field.properties, field.required ?? []) : 'Record<string, unknown>';
24
+ default:
25
+ return 'unknown';
26
+ }
27
+ }
28
+ function objectTypeOf(properties, required) {
29
+ const members = Object.entries(properties).map(([name, field]) => {
30
+ const optional = required.includes(name) ? '' : '?';
31
+ return `${propertyKey(name)}${optional}: ${typeOf(field)}`;
32
+ });
33
+ return `{ ${members.join('; ')} }`;
34
+ }
35
+ function propertyKey(name) {
36
+ return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name) ? name : JSON.stringify(name);
37
+ }
38
+ function docCommentOf(text, indent) {
39
+ if (!text)
40
+ return '';
41
+ return `${indent}/** ${text.replace(/\*\//g, '*\\/')} */\n`;
42
+ }
43
+ export function shapeTypeOf(descriptor, indent = '') {
44
+ const entries = Object.entries(descriptor.properties ?? {});
45
+ if (entries.length === 0)
46
+ return '{}';
47
+ const lines = entries.map(([key, field]) => {
48
+ const doc = docCommentOf(field.description, `${indent} `);
49
+ return `${doc}${indent} ${propertyKey(key)}: ${typeOf(field)};`;
50
+ });
51
+ return `{\n${lines.join('\n')}\n${indent}}`;
52
+ }
53
+ export function entitySourceOf(descriptor, options = {}) {
54
+ const name = identifierOf(options.name ?? capitalize(descriptor.title ?? 'Schema'));
55
+ const exported = options.exported === false ? '' : 'export ';
56
+ const card = JSON.stringify(descriptor, null, 2)
57
+ .split('\n')
58
+ .map((line, i) => (i === 0 ? line : ` ${line}`))
59
+ .join('\n');
60
+ return `${exported}class ${name} extends reconstruct<${shapeTypeOf(descriptor)}>(${card}) {}`;
61
+ }
62
+ function identifierOf(name) {
63
+ if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name)) {
64
+ throw new Error(`'${name}' is not a TypeScript identifier — it cannot name a generated declaration`);
65
+ }
66
+ return name;
67
+ }
68
+ function capitalize(s) {
69
+ return s ? s[0].toUpperCase() + s.slice(1) : s;
70
+ }
71
+ function returnTypeOf(op, rowType) {
72
+ switch (op.cardinality) {
73
+ case 'many': return `${rowType}[]`;
74
+ case 'page': return `${rowType}[] & { total?: number; endCursor?: string; hasMore?: boolean }`;
75
+ case 'maybe': return `${rowType} | undefined`;
76
+ case 'one': return rowType;
77
+ case 'none': return 'unknown';
78
+ default: return 'unknown';
79
+ }
80
+ }
81
+ export function facadeTypeSourceOf(ops, options = {}) {
82
+ const name = options.name ?? 'Facade';
83
+ const exported = options.exported === false ? '' : 'export ';
84
+ const rowType = options.rowType ?? 'unknown';
85
+ const members = ops.map((op) => {
86
+ const doc = docCommentOf(op.description, ' ');
87
+ return `${doc} ${propertyKey(op.name)}(invocation?: Invocation): Promise<${returnTypeOf(op, rowType)}>;`;
88
+ });
89
+ if (members.length === 0)
90
+ return `${exported}interface ${name} {}`;
91
+ return `${exported}interface ${name} {\n${members.join('\n')}\n}`;
92
+ }
93
+ //# sourceMappingURL=typescript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../src/card/typescript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function clean<T extends Record<string, unknown>>(obj: T): T;
2
+ //# sourceMappingURL=clean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../src/clean.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAKlE"}
@@ -1,8 +1,7 @@
1
- /** Drop keys whose value is `undefined`, so the descriptor stays clean JSON. */
2
1
  export function clean(obj) {
3
2
  for (const key of Object.keys(obj))
4
3
  if (obj[key] === undefined)
5
4
  delete obj[key];
6
5
  return obj;
7
6
  }
8
- //# sourceMappingURL=card.js.map
7
+ //# sourceMappingURL=clean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../src/clean.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,KAAK,CAAoC,GAAM;IAC7D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAChC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAE9C,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { Field, Fields } from "../Field.js";
2
+ export declare abstract class FieldGroup {
3
+ readonly members: readonly string[];
4
+ constructor(members: readonly string[]);
5
+ protected withMembers(members: readonly string[]): this;
6
+ get isSelf(): boolean;
7
+ resolvedOn(ownKey: string): this;
8
+ covers(key: string): boolean;
9
+ equals(other: FieldGroup): boolean;
10
+ onto(fields: Fields): Fields;
11
+ rename(map: (key: string) => string | undefined): this | null;
12
+ toJSON(): string[];
13
+ static normalize<R extends FieldGroup>(groups: ReadonlyArray<R | ReadonlyArray<string>> | undefined, make: (members: readonly string[]) => R): ReadonlyArray<R> | undefined;
14
+ static on<R extends FieldGroup>(field: Field, kind: Function & {
15
+ prototype: R;
16
+ }): R[];
17
+ static groupsOf<R extends FieldGroup>(fields: Fields, kind: Function & {
18
+ prototype: R;
19
+ }): R[];
20
+ }
21
+ //# sourceMappingURL=FieldGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldGroup.d.ts","sourceRoot":"","sources":["../../src/constraint/FieldGroup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEjD,8BAAsB,UAAU;IAClB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE;IAA/C,YAAqB,OAAO,EAAE,SAAS,MAAM,EAAE,EAAI;IAEnD,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAItD;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE/B;IAED,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE3B;IAED,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAMjC;IAED,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAgB3B;IAED,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAM5D;IAED,MAAM,IAAI,MAAM,EAAE,CAEjB;IAED,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,UAAU,EACnC,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,EAC5D,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,CAAC,GACtC,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAK9B;IAED,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,UAAU,EAC5B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,QAAQ,GAAG;QAAE,SAAS,EAAE,CAAC,CAAA;KAAE,GAChC,CAAC,EAAE,CAIL;IAED,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,UAAU,EAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,GAAG;QAAE,SAAS,EAAE,CAAC,CAAA;KAAE,GAChC,CAAC,EAAE,CAML;CACF"}
@@ -0,0 +1,65 @@
1
+ export class FieldGroup {
2
+ members;
3
+ constructor(members) {
4
+ this.members = members;
5
+ }
6
+ withMembers(members) {
7
+ return new this.constructor(members);
8
+ }
9
+ get isSelf() {
10
+ return this.members.length === 0;
11
+ }
12
+ resolvedOn(ownKey) {
13
+ return this.isSelf ? this.withMembers([ownKey]) : this;
14
+ }
15
+ covers(key) {
16
+ return this.members.includes(key);
17
+ }
18
+ equals(other) {
19
+ return (this.constructor === other.constructor &&
20
+ this.members.length === other.members.length &&
21
+ this.members.every((member, i) => member === other.members[i]));
22
+ }
23
+ onto(fields) {
24
+ const missing = this.members.filter((key) => !(key in fields));
25
+ if (missing.length)
26
+ throw new Error(`${this.constructor.name.toLowerCase()}: [${this.members.join(", ")}] names ` +
27
+ `${missing.map((m) => `'${m}'`).join(", ")}, which the entity does not declare.`);
28
+ const out = { ...fields };
29
+ for (const key of this.members) {
30
+ const field = out[key];
31
+ out[key] = field.with({
32
+ role: { ...field.role, rules: [...(field.role?.rules ?? []), this] },
33
+ });
34
+ }
35
+ return out;
36
+ }
37
+ rename(map) {
38
+ if (this.isSelf)
39
+ return this;
40
+ const carried = this.members.map(map);
41
+ return carried.every((key) => key !== undefined)
42
+ ? this.withMembers(carried)
43
+ : null;
44
+ }
45
+ toJSON() {
46
+ return [...this.members];
47
+ }
48
+ static normalize(groups, make) {
49
+ if (!groups)
50
+ return undefined;
51
+ return groups.map((group) => group instanceof FieldGroup ? group : make(group));
52
+ }
53
+ static on(field, kind) {
54
+ return (field.role?.rules ?? []).filter((rule) => rule instanceof kind);
55
+ }
56
+ static groupsOf(fields, kind) {
57
+ const seen = new Map();
58
+ for (const field of Object.values(fields))
59
+ for (const rule of FieldGroup.on(field, kind))
60
+ if (rule.members.length > 1)
61
+ seen.set(rule.members.join(" "), rule);
62
+ return [...seen.values()];
63
+ }
64
+ }
65
+ //# sourceMappingURL=FieldGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldGroup.js","sourceRoot":"","sources":["../../src/constraint/FieldGroup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { FieldGroup } from './FieldGroup.js';
2
+ export declare class Unique extends FieldGroup {
3
+ }
4
+ //# sourceMappingURL=Unique.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Unique.d.ts","sourceRoot":"","sources":["../../src/constraint/Unique.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,qBAAa,MAAO,SAAQ,UAAU;CAAG"}
@@ -0,0 +1,4 @@
1
+ import { FieldGroup } from './FieldGroup.js';
2
+ export class Unique extends FieldGroup {
3
+ }
4
+ //# sourceMappingURL=Unique.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Unique.js","sourceRoot":"","sources":["../../src/constraint/Unique.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,OAAO,MAAO,SAAQ,UAAU;CAAG"}
package/dist/entity.d.ts CHANGED
@@ -1,20 +1,5 @@
1
- import { type Fields } from "./field/index.js";
2
- import { type EntityDeclarations } from "./unique.js";
3
- import { type SchemaConstructor } from "./schema/index.js";
4
- /**
5
- * Define an entity — the factory that produces a schema-carrying class.
6
- *
7
- * ```ts
8
- * class Post extends entity({ id: primary(), title: text({ min: 1 }) }) {}
9
- *
10
- * new Post({ id, title }) // a real instance, data-typed
11
- * Post.pick('title') // a derived view, same static API
12
- * function publish(p: Post) // `Post` IS the data type
13
- * ```
14
- *
15
- * Data and schema metadata only — no business behaviour lives on an entity. The 2nd
16
- * argument carries what the entity states about itself: `unique` groups, and per-adapter
17
- * hints for what a neutral field cannot express.
18
- */
19
- export declare function entity<TFields extends Fields>(fields: TFields, declarations?: EntityDeclarations<TFields>): SchemaConstructor<TFields>;
1
+ import { type Fields } from './Field.js';
2
+ import { type EntityDeclarations } from './EntityDeclarations.js';
3
+ import { type SchemaConstructor } from './Schema.js';
4
+ export declare function entity<TFields extends Fields>(originalFields: TFields, declarations?: EntityDeclarations<TFields>): SchemaConstructor<TFields>;
20
5
  //# sourceMappingURL=entity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAA2B,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CAAC,OAAO,SAAS,MAAM,EAC3C,MAAM,EAAE,OAAO,EACf,YAAY,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,GACzC,iBAAiB,CAAC,OAAO,CAAC,CAM5B"}
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE7D,wBAAgB,MAAM,CAAC,OAAO,SAAS,MAAM,EAC3C,cAAc,EAAE,OAAO,EACvB,YAAY,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,GACzC,iBAAiB,CAAC,OAAO,CAAC,CAY5B"}
package/dist/entity.js CHANGED
@@ -1,41 +1,15 @@
1
- import { Field } from "./field/index.js";
2
- import { Judge } from './validation/index.js';
3
- import { projectUniqueOntoFields } from "./unique.js";
4
- import { Schema } from "./schema/index.js";
5
- /**
6
- * Define an entity — the factory that produces a schema-carrying class.
7
- *
8
- * ```ts
9
- * class Post extends entity({ id: primary(), title: text({ min: 1 }) }) {}
10
- *
11
- * new Post({ id, title }) // a real instance, data-typed
12
- * Post.pick('title') // a derived view, same static API
13
- * function publish(p: Post) // `Post` IS the data type
14
- * ```
15
- *
16
- * Data and schema metadata only — no business behaviour lives on an entity. The 2nd
17
- * argument carries what the entity states about itself: `unique` groups, and per-adapter
18
- * hints for what a neutral field cannot express.
19
- */
20
- export function entity(fields, declarations) {
21
- const own = {};
22
- for (const [key, field] of Object.entries(fields))
23
- own[key] = new Field(field, key);
24
- const projected = projectUniqueOntoFields(own, declarations?.unique);
25
- assertDefaultsAreValid(projected);
26
- return Schema.of(projected, undefined, declarations?.hints, {}, declarations?.unique);
27
- }
28
- function assertDefaultsAreValid(fields) {
29
- for (const [name, field] of Object.entries(fields)) {
30
- const create = field.lifecycle?.create;
31
- if (typeof create !== 'object' || create === null || !('value' in create))
32
- continue;
33
- const checked = Judge.value(field, create.value);
34
- if ('error' in checked) {
35
- throw new Error(`Field '${name}': the declared default ${JSON.stringify(create.value)} `
36
- + `is not a legal value for it — ${checked.error}. It would be written into every row `
37
- + `without passing the judge.`);
38
- }
39
- }
1
+ import { Field } from './Field.js';
2
+ import { Unique } from './constraint/Unique.js';
3
+ import { Schema } from './Schema.js';
4
+ export function entity(originalFields, declarations) {
5
+ let fields = {};
6
+ for (const [key, field] of Object.entries(originalFields))
7
+ fields[key] = new Field(field, key);
8
+ for (const group of declarations?.unique ?? [])
9
+ fields = new Unique(group).onto(fields);
10
+ const schema = Schema.of(fields, undefined, declarations?.hints, {});
11
+ if (declarations?.previous)
12
+ Object.assign(schema, { previous: declarations.previous });
13
+ return schema;
40
14
  }
41
15
  //# sourceMappingURL=entity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAe,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAA2B,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,MAAM,EAA0B,MAAM,mBAAmB,CAAC;AAEnE;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,MAAM,CACpB,MAAe,EACf,YAA0C;IAE1C,MAAM,GAAG,GAAG,EAA2B,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpF,MAAM,SAAS,GAAG,uBAAuB,CAAC,GAAc,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAChF,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAc;IAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;QACvC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC;YAAE,SAAS;QAEpF,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAG,MAA6B,CAAC,KAAK,CAAC,CAAC;QACzE,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,UAAU,IAAI,2BAA2B,IAAI,CAAC,SAAS,CAAE,MAA6B,CAAC,KAAK,CAAC,GAAG;kBAC9F,iCAAiC,OAAO,CAAC,KAAK,uCAAuC;kBACrF,4BAA4B,CAC/B,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAe,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAA0B,MAAM,aAAa,CAAC;AAE7D,MAAM,UAAU,MAAM,CACpB,cAAuB,EACvB,YAA0C;IAE1C,IAAI,MAAM,GAAW,EAAE,CAAC;IAExB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;QACvD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEtC,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,MAAM,IAAI,EAAE;QAC5C,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,MAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAChF,IAAI,YAAY,EAAE,QAAQ;QAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvF,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,38 +1,55 @@
1
- export { Field, type Fields, type Shape, type ShapeType, type StringFormat, type FormatPredicate, type Role, type Relation, type Lifecycle, type GeneratorRef, type Boundary, type BoundaryRef, type Decoder, type Encoder, type Meta, nullableShape, uniqueMembers, registerGenerator, resolveCustomGenerator, resolveBoundary, boundaryOf, Anatomy, Formats, Boundaries, type EntityConstructor, } from "./field/index.js";
2
- export { compose, Schema, ANONYMOUS_SCHEMA_NAME, type SchemaConstructor, type SchemaView, type Row, type PartialRow, } from "./schema/index.js";
3
- export { type FougereHints, type Hints } from "./hints.js";
4
- export { type CompositeUnique, type EntityDeclarations } from "./unique.js";
5
- export { primary } from "./vocabulary/primary.js";
6
- export { text, type TextOptions } from "./vocabulary/text.js";
7
- export { email } from "./vocabulary/email.js";
8
- export { url } from "./vocabulary/url.js";
9
- export { list, type ListOptions } from "./vocabulary/list.js";
10
- export { number } from "./vocabulary/number.js";
11
- export { bool } from "./vocabulary/bool.js";
12
- export { date } from "./vocabulary/date.js";
13
- export { created } from "./vocabulary/created.js";
14
- export { updated } from "./vocabulary/updated.js";
15
- export { oneOf } from "./vocabulary/oneOf.js";
16
- export { ref } from "./vocabulary/ref.js";
17
- export { many } from "./vocabulary/many.js";
18
- export { optional } from "./vocabulary/optional.js";
19
- export { nullable } from "./vocabulary/nullable.js";
20
- export { immutable } from "./vocabulary/immutable.js";
21
- export { unique } from "./vocabulary/unique.js";
22
- export { indexed } from "./vocabulary/indexed.js";
23
- export { readOnly } from "./vocabulary/readOnly.js";
24
- export { writeOnly } from "./vocabulary/writeOnly.js";
25
- export { json } from "./vocabulary/json.js";
26
- export { applyCreate, applyUpdate } from "./projections/lifecycle.js";
27
- export { encodeFields } from "./projections/encode.js";
28
- export { inputFields, outputFields } from "./projections/io.js";
29
- export { registrationKeyOf } from "./name.js";
30
- export { describe, describeSet, sourceNameOf } from "./projections/describe.js";
31
- export { reconstruct, reconstructSet } from "./projections/reconstruct.js";
32
- export { entitySourceOf, facadeTypeSourceOf, type TypeSourceOptions, type OpDescriptor, } from "./projections/typescript.js";
33
- export { type SchemaBundle, type SchemaDescriptor, type FieldDescriptor, type FieldExtension, type RoleDescriptor, type RelationDescriptor, } from "./projections/card.js";
34
- export { type SchemaSource, schemaOf, fieldsOf, } from "./projections/source.js";
35
- export type { StandardSchemaV1 } from "./projections/standard.js";
36
- export { entity } from "./entity.js";
37
- export { Judge, type ValidateOptions, type ValidationError, type ValidationResult, type Checked } from "./validation/index.js";
1
+ export { Field, type Fields } from './Field.js';
2
+ export { type Shape, Anatomy } from './axis/shape/Shape.js';
3
+ export { type StringFormat, type FormatPredicate, Formats } from './axis/shape/Formats.js';
4
+ export { Role, primaryFieldOf, type RoleRules } from './axis/role/Role.js';
5
+ export { type Relation, type EntityConstructor } from './axis/role/Relation.js';
6
+ export { Lifecycle, type LifecycleRules } from './axis/lifecycle/Lifecycle.js';
7
+ export { type GeneratorRef, registerGenerator } from './axis/lifecycle/Generators.js';
8
+ export { Boundary, type BoundaryRules, type BoundaryRef } from './axis/boundary/Boundary.js';
9
+ export { type Decoder, type Encoder, Boundaries } from './axis/boundary/Boundaries.js';
10
+ export { type Meta } from './axis/Meta.js';
11
+ export { FieldGroup } from './constraint/FieldGroup.js';
12
+ export { Unique } from './constraint/Unique.js';
13
+ export { Schema, ANONYMOUS_SCHEMA_NAME, type SchemaConstructor } from './Schema.js';
14
+ export { casesFor, holds, refusalBranches, type Case } from './judge/cases.js';
15
+ export { type SchemaView, type Row, type PartialRow } from './SchemaView.js';
16
+ export { type FougereHints, type Hints } from './EntityDeclarations.js';
17
+ export { same } from './same.js';
18
+ export { primary } from './vocabulary/primary.js';
19
+ export { text } from './vocabulary/text.js';
20
+ export { email } from './vocabulary/email.js';
21
+ export { url } from './vocabulary/url.js';
22
+ export { list } from './vocabulary/list.js';
23
+ export { number } from './vocabulary/number.js';
24
+ export { bool } from './vocabulary/bool.js';
25
+ export { date } from './vocabulary/date.js';
26
+ export { created } from './vocabulary/created.js';
27
+ export { updated } from './vocabulary/updated.js';
28
+ export { oneOf } from './vocabulary/oneOf.js';
29
+ export { ref } from './vocabulary/ref.js';
30
+ export { many } from './vocabulary/many.js';
31
+ export { optional } from './vocabulary/optional.js';
32
+ export { nullable } from './vocabulary/nullable.js';
33
+ export { immutable } from './vocabulary/immutable.js';
34
+ export { unique } from './vocabulary/unique.js';
35
+ export { indexed } from './vocabulary/indexed.js';
36
+ export { readOnly } from './vocabulary/readOnly.js';
37
+ export { writeOnly } from './vocabulary/writeOnly.js';
38
+ export { json } from './vocabulary/json.js';
39
+ export { applyCreate, applyUpdate, freezeClock } from './axis/lifecycle/apply.js';
40
+ export { encodeFields } from './projection/encode.js';
41
+ export { inputFields, outputFields } from './projection/io.js';
42
+ export { registrationKeyOf, classNameOf } from './name.js';
43
+ export { describe, describeSet, sourceNameOf } from './card/describe.js';
44
+ export { reconstruct, reconstructSet } from './card/reconstruct.js';
45
+ export { diff, diffSet } from './card/diff.js';
46
+ export type { Change, Diff, DiffOptions, SetDiff, SetDiffOptions, RenameCandidate, TypeSet } from './card/diff.js';
47
+ export { entitySourceOf, facadeTypeSourceOf, type TypeSourceOptions, type OpDescriptor } from './card/typescript.js';
48
+ export { type SchemaBundle, type SchemaDescriptor, type FieldDescriptor, type FieldExtension, type RoleDescriptor, type RelationDescriptor } from './card/Descriptor.js';
49
+ export { type SchemaSource, schemaOf, fieldsOf } from './projection/source.js';
50
+ export type { StandardSchemaV1 } from './projection/standard.js';
51
+ export { entity } from './entity.js';
52
+ export { Judge } from './judge/Judge.js';
53
+ export { type ValidateOptions } from './judge/options.js';
54
+ export { type ValidationError, type ValidationResult, type Checked } from './judge/result.js';
38
55
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,KAAK,MAAM,EACX,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,IAAI,EACT,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,IAAI,EACT,aAAa,EAEb,aAAa,EAGb,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,UAAU,EACV,OAAO,EACP,OAAO,EACP,UAAU,EAKV,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,OAAO,EACP,MAAM,EACN,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,GAAG,EACR,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAG5E,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAM5C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,KAAK,YAAY,EACjB,QAAQ,EACR,QAAQ,GACT,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,KAAK,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}