typesea 0.1.0 → 0.3.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 (301) hide show
  1. package/CHANGELOG.md +85 -6
  2. package/README.md +143 -28
  3. package/dist/adapters/index.d.ts +50 -8
  4. package/dist/adapters/index.d.ts.map +1 -1
  5. package/dist/adapters/index.js +169 -48
  6. package/dist/aot/index.d.ts +19 -3
  7. package/dist/aot/index.d.ts.map +1 -1
  8. package/dist/aot/index.js +115 -17
  9. package/dist/async/index.d.ts +28 -56
  10. package/dist/async/index.d.ts.map +1 -1
  11. package/dist/async/index.js +94 -37
  12. package/dist/builders/composite.d.ts +43 -9
  13. package/dist/builders/composite.d.ts.map +1 -1
  14. package/dist/builders/composite.js +100 -17
  15. package/dist/builders/index.d.ts +8 -5
  16. package/dist/builders/index.d.ts.map +1 -1
  17. package/dist/builders/index.js +7 -4
  18. package/dist/builders/modifier.d.ts +36 -5
  19. package/dist/builders/modifier.d.ts.map +1 -1
  20. package/dist/builders/modifier.js +52 -5
  21. package/dist/builders/object/guard.d.ts +72 -24
  22. package/dist/builders/object/guard.d.ts.map +1 -1
  23. package/dist/builders/object/guard.js +139 -29
  24. package/dist/builders/object/index.d.ts +4 -2
  25. package/dist/builders/object/index.d.ts.map +1 -1
  26. package/dist/builders/object/index.js +3 -1
  27. package/dist/builders/object/schema.d.ts +88 -11
  28. package/dist/builders/object/schema.d.ts.map +1 -1
  29. package/dist/builders/object/schema.js +290 -23
  30. package/dist/builders/object/types.d.ts +20 -31
  31. package/dist/builders/object/types.d.ts.map +1 -1
  32. package/dist/builders/object/types.js +2 -0
  33. package/dist/builders/runtime.d.ts +40 -0
  34. package/dist/builders/runtime.d.ts.map +1 -0
  35. package/dist/builders/runtime.js +150 -0
  36. package/dist/builders/scalar.d.ts +49 -9
  37. package/dist/builders/scalar.d.ts.map +1 -1
  38. package/dist/builders/scalar.js +87 -9
  39. package/dist/builders/table.d.ts +35 -5
  40. package/dist/builders/table.d.ts.map +1 -1
  41. package/dist/builders/table.js +35 -5
  42. package/dist/builders/types.d.ts +20 -4
  43. package/dist/builders/types.d.ts.map +1 -1
  44. package/dist/builders/types.js +2 -0
  45. package/dist/compile/check-composite.d.ts +25 -2
  46. package/dist/compile/check-composite.d.ts.map +1 -1
  47. package/dist/compile/check-composite.js +699 -27
  48. package/dist/compile/check-scalar.d.ts +88 -0
  49. package/dist/compile/check-scalar.d.ts.map +1 -1
  50. package/dist/compile/check-scalar.js +570 -3
  51. package/dist/compile/check.d.ts +12 -0
  52. package/dist/compile/check.d.ts.map +1 -1
  53. package/dist/compile/check.js +62 -3
  54. package/dist/compile/context.d.ts +47 -9
  55. package/dist/compile/context.d.ts.map +1 -1
  56. package/dist/compile/context.js +53 -8
  57. package/dist/compile/first.d.ts +26 -0
  58. package/dist/compile/first.d.ts.map +1 -0
  59. package/dist/compile/first.js +850 -0
  60. package/dist/compile/graph-predicate.d.ts +4 -2
  61. package/dist/compile/graph-predicate.d.ts.map +1 -1
  62. package/dist/compile/graph-predicate.js +2272 -165
  63. package/dist/compile/guard.d.ts +16 -24
  64. package/dist/compile/guard.d.ts.map +1 -1
  65. package/dist/compile/guard.js +202 -72
  66. package/dist/compile/index.d.ts +3 -1
  67. package/dist/compile/index.d.ts.map +1 -1
  68. package/dist/compile/index.js +2 -0
  69. package/dist/compile/issue.d.ts +110 -0
  70. package/dist/compile/issue.d.ts.map +1 -1
  71. package/dist/compile/issue.js +184 -1
  72. package/dist/compile/names.d.ts +12 -2
  73. package/dist/compile/names.d.ts.map +1 -1
  74. package/dist/compile/names.js +19 -3
  75. package/dist/compile/predicate.d.ts +24 -0
  76. package/dist/compile/predicate.d.ts.map +1 -1
  77. package/dist/compile/predicate.js +287 -10
  78. package/dist/compile/runtime.d.ts +100 -13
  79. package/dist/compile/runtime.d.ts.map +1 -1
  80. package/dist/compile/runtime.js +56 -6
  81. package/dist/compile/source.d.ts +10 -2
  82. package/dist/compile/source.d.ts.map +1 -1
  83. package/dist/compile/source.js +385 -26
  84. package/dist/compile/types.d.ts +22 -0
  85. package/dist/compile/types.d.ts.map +1 -1
  86. package/dist/compile/types.js +2 -0
  87. package/dist/decoder/index.d.ts +92 -46
  88. package/dist/decoder/index.d.ts.map +1 -1
  89. package/dist/decoder/index.js +266 -39
  90. package/dist/evaluate/check-composite.d.ts +111 -2
  91. package/dist/evaluate/check-composite.d.ts.map +1 -1
  92. package/dist/evaluate/check-composite.js +343 -8
  93. package/dist/evaluate/check-scalar.d.ts +25 -0
  94. package/dist/evaluate/check-scalar.d.ts.map +1 -1
  95. package/dist/evaluate/check-scalar.js +124 -3
  96. package/dist/evaluate/check.d.ts +7 -0
  97. package/dist/evaluate/check.d.ts.map +1 -1
  98. package/dist/evaluate/check.js +62 -4
  99. package/dist/evaluate/index.d.ts +2 -0
  100. package/dist/evaluate/index.d.ts.map +1 -1
  101. package/dist/evaluate/index.js +2 -0
  102. package/dist/evaluate/issue.d.ts +11 -1
  103. package/dist/evaluate/issue.d.ts.map +1 -1
  104. package/dist/evaluate/issue.js +15 -1
  105. package/dist/evaluate/predicate.d.ts +16 -5
  106. package/dist/evaluate/predicate.d.ts.map +1 -1
  107. package/dist/evaluate/predicate.js +20 -5
  108. package/dist/evaluate/shared.d.ts +78 -13
  109. package/dist/evaluate/shared.d.ts.map +1 -1
  110. package/dist/evaluate/shared.js +101 -8
  111. package/dist/evaluate/state.d.ts +35 -13
  112. package/dist/evaluate/state.d.ts.map +1 -1
  113. package/dist/evaluate/state.js +35 -2
  114. package/dist/guard/array.d.ts +48 -0
  115. package/dist/guard/array.d.ts.map +1 -0
  116. package/dist/guard/array.js +84 -0
  117. package/dist/guard/base.d.ts +111 -31
  118. package/dist/guard/base.d.ts.map +1 -1
  119. package/dist/guard/base.js +165 -32
  120. package/dist/guard/date.d.ts +34 -0
  121. package/dist/guard/date.d.ts.map +1 -0
  122. package/dist/guard/date.js +60 -0
  123. package/dist/guard/error.d.ts +10 -5
  124. package/dist/guard/error.d.ts.map +1 -1
  125. package/dist/guard/error.js +10 -5
  126. package/dist/guard/index.d.ts +4 -0
  127. package/dist/guard/index.d.ts.map +1 -1
  128. package/dist/guard/index.js +4 -0
  129. package/dist/guard/number.d.ts +86 -11
  130. package/dist/guard/number.d.ts.map +1 -1
  131. package/dist/guard/number.js +159 -11
  132. package/dist/guard/props.d.ts +27 -3
  133. package/dist/guard/props.d.ts.map +1 -1
  134. package/dist/guard/props.js +27 -3
  135. package/dist/guard/read.d.ts +115 -10
  136. package/dist/guard/read.d.ts.map +1 -1
  137. package/dist/guard/read.js +185 -10
  138. package/dist/guard/registry.d.ts +12 -2
  139. package/dist/guard/registry.d.ts.map +1 -1
  140. package/dist/guard/registry.js +15 -3
  141. package/dist/guard/string.d.ts +115 -13
  142. package/dist/guard/string.d.ts.map +1 -1
  143. package/dist/guard/string.js +250 -13
  144. package/dist/guard/types.d.ts +110 -40
  145. package/dist/guard/types.d.ts.map +1 -1
  146. package/dist/guard/types.js +2 -0
  147. package/dist/index.d.ts +5 -5
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/index.js +4 -4
  150. package/dist/internal/index.d.ts +42 -6
  151. package/dist/internal/index.d.ts.map +1 -1
  152. package/dist/internal/index.js +51 -8
  153. package/dist/ir/builder.d.ts +17 -127
  154. package/dist/ir/builder.d.ts.map +1 -1
  155. package/dist/ir/builder.js +80 -137
  156. package/dist/ir/freeze.d.ts +4 -0
  157. package/dist/ir/freeze.d.ts.map +1 -1
  158. package/dist/ir/freeze.js +66 -0
  159. package/dist/ir/index.d.ts +3 -1
  160. package/dist/ir/index.d.ts.map +1 -1
  161. package/dist/ir/index.js +2 -0
  162. package/dist/ir/regexp.d.ts +2 -0
  163. package/dist/ir/regexp.d.ts.map +1 -1
  164. package/dist/ir/regexp.js +2 -0
  165. package/dist/ir/types.d.ts +94 -56
  166. package/dist/ir/types.d.ts.map +1 -1
  167. package/dist/ir/types.js +2 -0
  168. package/dist/ir/validate.d.ts +8 -1
  169. package/dist/ir/validate.d.ts.map +1 -1
  170. package/dist/ir/validate.js +511 -61
  171. package/dist/issue/index.d.ts +42 -10
  172. package/dist/issue/index.d.ts.map +1 -1
  173. package/dist/issue/index.js +65 -11
  174. package/dist/json-schema/emit-combinator.d.ts +44 -4
  175. package/dist/json-schema/emit-combinator.d.ts.map +1 -1
  176. package/dist/json-schema/emit-combinator.js +44 -4
  177. package/dist/json-schema/emit-composite.d.ts +16 -2
  178. package/dist/json-schema/emit-composite.d.ts.map +1 -1
  179. package/dist/json-schema/emit-composite.js +81 -13
  180. package/dist/json-schema/emit-scalar.d.ts +26 -3
  181. package/dist/json-schema/emit-scalar.d.ts.map +1 -1
  182. package/dist/json-schema/emit-scalar.js +124 -10
  183. package/dist/json-schema/emit-types.d.ts +11 -1
  184. package/dist/json-schema/emit-types.d.ts.map +1 -1
  185. package/dist/json-schema/emit-types.js +2 -0
  186. package/dist/json-schema/emit.d.ts +12 -1
  187. package/dist/json-schema/emit.d.ts.map +1 -1
  188. package/dist/json-schema/emit.js +23 -3
  189. package/dist/json-schema/freeze.d.ts +13 -2
  190. package/dist/json-schema/freeze.d.ts.map +1 -1
  191. package/dist/json-schema/freeze.js +41 -8
  192. package/dist/json-schema/index.d.ts +16 -2
  193. package/dist/json-schema/index.d.ts.map +1 -1
  194. package/dist/json-schema/index.js +23 -3
  195. package/dist/json-schema/issue.d.ts +4 -1
  196. package/dist/json-schema/issue.d.ts.map +1 -1
  197. package/dist/json-schema/issue.js +4 -1
  198. package/dist/json-schema/read.d.ts +24 -3
  199. package/dist/json-schema/read.d.ts.map +1 -1
  200. package/dist/json-schema/read.js +59 -12
  201. package/dist/json-schema/types.d.ts +45 -16
  202. package/dist/json-schema/types.d.ts.map +1 -1
  203. package/dist/json-schema/types.js +2 -0
  204. package/dist/kind/index.d.ts +40 -28
  205. package/dist/kind/index.d.ts.map +1 -1
  206. package/dist/kind/index.js +41 -13
  207. package/dist/lower/index.d.ts +6 -1
  208. package/dist/lower/index.d.ts.map +1 -1
  209. package/dist/lower/index.js +462 -46
  210. package/dist/message/index.d.ts +64 -10
  211. package/dist/message/index.d.ts.map +1 -1
  212. package/dist/message/index.js +155 -17
  213. package/dist/optimize/algebraic.d.ts +54 -0
  214. package/dist/optimize/algebraic.d.ts.map +1 -0
  215. package/dist/optimize/algebraic.js +314 -0
  216. package/dist/optimize/compact.d.ts +8 -1
  217. package/dist/optimize/compact.d.ts.map +1 -1
  218. package/dist/optimize/compact.js +13 -2
  219. package/dist/optimize/domain.d.ts +16 -0
  220. package/dist/optimize/domain.d.ts.map +1 -0
  221. package/dist/optimize/domain.js +619 -0
  222. package/dist/optimize/fold-boolean.d.ts +17 -2
  223. package/dist/optimize/fold-boolean.d.ts.map +1 -1
  224. package/dist/optimize/fold-boolean.js +59 -14
  225. package/dist/optimize/fold-common.d.ts +43 -8
  226. package/dist/optimize/fold-common.d.ts.map +1 -1
  227. package/dist/optimize/fold-common.js +37 -6
  228. package/dist/optimize/fold-constraints.d.ts +33 -0
  229. package/dist/optimize/fold-constraints.d.ts.map +1 -0
  230. package/dist/optimize/fold-constraints.js +484 -0
  231. package/dist/optimize/fold-scalar.d.ts +98 -13
  232. package/dist/optimize/fold-scalar.d.ts.map +1 -1
  233. package/dist/optimize/fold-scalar.js +98 -13
  234. package/dist/optimize/fold.d.ts +8 -1
  235. package/dist/optimize/fold.d.ts.map +1 -1
  236. package/dist/optimize/fold.js +22 -2
  237. package/dist/optimize/index.d.ts +9 -1
  238. package/dist/optimize/index.d.ts.map +1 -1
  239. package/dist/optimize/index.js +18 -3
  240. package/dist/optimize/map-node.d.ts +3 -1
  241. package/dist/optimize/map-node.d.ts.map +1 -1
  242. package/dist/optimize/map-node.js +48 -3
  243. package/dist/optimize/peephole.d.ts +16 -0
  244. package/dist/optimize/peephole.d.ts.map +1 -0
  245. package/dist/optimize/peephole.js +254 -0
  246. package/dist/optimize/remap.d.ts +2 -0
  247. package/dist/optimize/remap.d.ts.map +1 -1
  248. package/dist/optimize/remap.js +2 -0
  249. package/dist/optimize/rewrite.d.ts +13 -8
  250. package/dist/optimize/rewrite.d.ts.map +1 -1
  251. package/dist/optimize/rewrite.js +13 -8
  252. package/dist/plan/cache.d.ts +9 -3
  253. package/dist/plan/cache.d.ts.map +1 -1
  254. package/dist/plan/cache.js +34 -6
  255. package/dist/plan/index.d.ts +2 -0
  256. package/dist/plan/index.d.ts.map +1 -1
  257. package/dist/plan/index.js +2 -0
  258. package/dist/plan/predicate.d.ts +2 -0
  259. package/dist/plan/predicate.d.ts.map +1 -1
  260. package/dist/plan/predicate.js +298 -29
  261. package/dist/plan/schema-predicate.d.ts +6 -0
  262. package/dist/plan/schema-predicate.d.ts.map +1 -1
  263. package/dist/plan/schema-predicate.js +382 -19
  264. package/dist/plan/types.d.ts +2 -0
  265. package/dist/plan/types.d.ts.map +1 -1
  266. package/dist/plan/types.js +2 -0
  267. package/dist/result/index.d.ts +19 -5
  268. package/dist/result/index.d.ts.map +1 -1
  269. package/dist/result/index.js +10 -2
  270. package/dist/schema/common.d.ts +69 -6
  271. package/dist/schema/common.d.ts.map +1 -1
  272. package/dist/schema/common.js +104 -10
  273. package/dist/schema/freeze.d.ts +4 -0
  274. package/dist/schema/freeze.d.ts.map +1 -1
  275. package/dist/schema/freeze.js +40 -0
  276. package/dist/schema/index.d.ts +5 -2
  277. package/dist/schema/index.d.ts.map +1 -1
  278. package/dist/schema/index.js +4 -1
  279. package/dist/schema/lazy.d.ts +4 -0
  280. package/dist/schema/lazy.d.ts.map +1 -1
  281. package/dist/schema/lazy.js +4 -0
  282. package/dist/schema/literal.d.ts +7 -1
  283. package/dist/schema/literal.d.ts.map +1 -1
  284. package/dist/schema/literal.js +7 -1
  285. package/dist/schema/types.d.ts +109 -100
  286. package/dist/schema/types.d.ts.map +1 -1
  287. package/dist/schema/types.js +13 -2
  288. package/dist/schema/undefined.d.ts +17 -0
  289. package/dist/schema/undefined.d.ts.map +1 -0
  290. package/dist/schema/undefined.js +77 -0
  291. package/dist/schema/validate.d.ts +8 -1
  292. package/dist/schema/validate.d.ts.map +1 -1
  293. package/dist/schema/validate.js +255 -57
  294. package/docs/api.md +128 -8
  295. package/docs/assets/benchmark-headline.svg +163 -0
  296. package/docs/engine-notes.md +62 -15
  297. package/docs/index.html +1340 -702
  298. package/docs/ko/api.md +375 -0
  299. package/docs/ko/engine-notes.md +156 -0
  300. package/docs/ko/readme.md +378 -0
  301. package/package.json +66 -65
@@ -1,29 +1,50 @@
1
1
  /**
2
2
  * @file read.ts
3
3
  * @brief Input normalization for JSON Schema export.
4
+ * @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
5
+ * report a structured export issue.
4
6
  */
5
7
  import { type Schema } from "../schema/index.js";
6
8
  import type { JsonSchemaOptions } from "./types.js";
7
9
  /**
8
10
  * @brief draft 07 schema id.
11
+ * @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
12
+ * report a structured export issue.
9
13
  * @invariant The value is the default dialect marker for TypeSea JSON Schema output.
10
14
  */
11
15
  export declare const JSON_SCHEMA_DRAFT_07_ID = "http://json-schema.org/draft-07/schema#";
12
16
  /**
13
17
  * @brief draft 2020 12 schema id.
18
+ * @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
19
+ * report a structured export issue.
14
20
  * @invariant The value selects the `prefixItems` tuple keyword set.
15
21
  */
16
22
  export declare const JSON_SCHEMA_2020_12_ID = "https://json-schema.org/draft/2020-12/schema";
17
23
  /**
18
- * @brief read json schema guard schema.
24
+ * @brief Read the schema carried by a guard for JSON Schema export.
25
+ * @param guard Candidate guard-like value.
26
+ * @returns Frozen schema accepted by the exporter.
27
+ * @throws TypeError when the receiver does not expose a valid TypeSea schema.
28
+ * @details Export can be used at package or build boundaries, so forged
29
+ * prototype schema fields are rejected before conversion begins.
19
30
  */
20
31
  export declare function readJsonSchemaGuardSchema(guard: unknown): Schema;
21
32
  /**
22
- * @brief read json schema schema.
33
+ * @brief Validate and freeze a direct schema export input.
34
+ * @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
35
+ * report a structured export issue.
36
+ * @param schema Candidate TypeSea schema.
37
+ * @returns Frozen schema tree safe for traversal by emitters.
38
+ * @throws TypeError when the schema shape is malformed.
23
39
  */
24
40
  export declare function readJsonSchemaSchema(schema: unknown): Schema;
25
41
  /**
26
- * @brief read json schema options.
42
+ * @brief Normalize JSON Schema exporter options.
43
+ * @param options Candidate options object.
44
+ * @returns Dialect and schema id with defaults filled in.
45
+ * @throws TypeError when option fields are not supported.
46
+ * @details Options are read through own data slots so a caller cannot influence
47
+ * export dialect through inherited getters or prototype state.
27
48
  */
28
49
  export declare function readJsonSchemaOptions(options: unknown): JsonSchemaOptions;
29
50
  //# sourceMappingURL=read.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/json-schema/read.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAGL,KAAK,MAAM,EACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,eAAO,MAAM,uBAAuB,4CAA4C,CAAC;AAEjF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,iDAAiD,CAAC;AAErF;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAK5D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,CAmBzE"}
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/json-schema/read.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAGH,KAAK,MAAM,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAER,iBAAiB,EACpB,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,4CAA4C,CAAC;AAEjF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,iDAAiD,CAAC;AAErF;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKhE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAK5D;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,CAmBzE"}
@@ -1,29 +1,45 @@
1
1
  /**
2
2
  * @file read.ts
3
3
  * @brief Input normalization for JSON Schema export.
4
+ * @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
5
+ * report a structured export issue.
4
6
  */
5
7
  import { freezeSchema, isSchemaValue } from "../schema/index.js";
6
8
  /**
7
9
  * @brief draft 07 schema id.
10
+ * @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
11
+ * report a structured export issue.
8
12
  * @invariant The value is the default dialect marker for TypeSea JSON Schema output.
9
13
  */
10
14
  export const JSON_SCHEMA_DRAFT_07_ID = "http://json-schema.org/draft-07/schema#";
11
15
  /**
12
16
  * @brief draft 2020 12 schema id.
17
+ * @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
18
+ * report a structured export issue.
13
19
  * @invariant The value selects the `prefixItems` tuple keyword set.
14
20
  */
15
21
  export const JSON_SCHEMA_2020_12_ID = "https://json-schema.org/draft/2020-12/schema";
16
22
  /**
17
- * @brief read json schema guard schema.
23
+ * @brief Read the schema carried by a guard for JSON Schema export.
24
+ * @param guard Candidate guard-like value.
25
+ * @returns Frozen schema accepted by the exporter.
26
+ * @throws TypeError when the receiver does not expose a valid TypeSea schema.
27
+ * @details Export can be used at package or build boundaries, so forged
28
+ * prototype schema fields are rejected before conversion begins.
18
29
  */
19
30
  export function readJsonSchemaGuardSchema(guard) {
20
31
  if (!isRecord(guard)) {
21
32
  throw new TypeError("JSON Schema guard must be a TypeSea guard");
22
33
  }
23
- return readJsonSchemaSchema(guard["schema"]);
34
+ return readJsonSchemaSchema(readOwnDataProperty(guard, "schema"));
24
35
  }
25
36
  /**
26
- * @brief read json schema schema.
37
+ * @brief Validate and freeze a direct schema export input.
38
+ * @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
39
+ * report a structured export issue.
40
+ * @param schema Candidate TypeSea schema.
41
+ * @returns Frozen schema tree safe for traversal by emitters.
42
+ * @throws TypeError when the schema shape is malformed.
27
43
  */
28
44
  export function readJsonSchemaSchema(schema) {
29
45
  if (!isSchemaValue(schema)) {
@@ -32,7 +48,12 @@ export function readJsonSchemaSchema(schema) {
32
48
  return freezeSchema(schema);
33
49
  }
34
50
  /**
35
- * @brief read json schema options.
51
+ * @brief Normalize JSON Schema exporter options.
52
+ * @param options Candidate options object.
53
+ * @returns Dialect and schema id with defaults filled in.
54
+ * @throws TypeError when option fields are not supported.
55
+ * @details Options are read through own data slots so a caller cannot influence
56
+ * export dialect through inherited getters or prototype state.
36
57
  */
37
58
  export function readJsonSchemaOptions(options) {
38
59
  if (options === undefined) {
@@ -44,8 +65,8 @@ export function readJsonSchemaOptions(options) {
44
65
  if (!isRecord(options)) {
45
66
  throw new TypeError("JSON Schema options must be an object");
46
67
  }
47
- const schemaId = options["schemaId"];
48
- const dialect = readJsonSchemaDialect(options["dialect"], schemaId);
68
+ const schemaId = readOwnDataProperty(options, "schemaId");
69
+ const dialect = readJsonSchemaDialect(readOwnDataProperty(options, "dialect"), schemaId);
49
70
  if (schemaId !== undefined && typeof schemaId !== "string") {
50
71
  throw new TypeError("JSON Schema schemaId must be a string");
51
72
  }
@@ -55,9 +76,13 @@ export function readJsonSchemaOptions(options) {
55
76
  };
56
77
  }
57
78
  /**
58
- * @brief read json schema dialect.
59
- * @details Derives the emitter keyword set from the requested JSON Schema dialect.
79
+ * @brief Normalize the requested JSON Schema dialect.
80
+ * @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
81
+ * report a structured export issue.
82
+ * @param value Candidate dialect option.
83
+ * @param schemaId Schema id used as a compatibility hint.
60
84
  * @returns Normalized JSON Schema dialect.
85
+ * @throws TypeError when the dialect string is outside the supported set.
61
86
  */
62
87
  function readJsonSchemaDialect(value, schemaId) {
63
88
  if (value === undefined) {
@@ -69,9 +94,11 @@ function readJsonSchemaDialect(value, schemaId) {
69
94
  throw new TypeError("JSON Schema dialect must be draft-07 or 2020-12");
70
95
  }
71
96
  /**
72
- * @brief infer json schema dialect.
73
- * @details Chooses a keyword set from well-known schema identifiers without trusting arbitrary strings.
74
- * @returns Normalized JSON Schema dialect.
97
+ * @brief Infer the dialect from a well-known schema id marker.
98
+ * @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
99
+ * report a structured export issue.
100
+ * @param schemaId Candidate schema id.
101
+ * @returns Draft 2020-12 when the id names that draft, otherwise draft-07.
75
102
  */
76
103
  function inferJsonSchemaDialect(schemaId) {
77
104
  if (typeof schemaId === "string" && schemaId.includes("2020-12")) {
@@ -80,8 +107,28 @@ function inferJsonSchemaDialect(schemaId) {
80
107
  return "draft-07";
81
108
  }
82
109
  /**
83
- * @brief is record.
110
+ * @brief Accept option records before descriptor-based reads.
111
+ * @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
112
+ * report a structured export issue.
113
+ * @param value Candidate options or guard object.
114
+ * @returns True for non-array objects.
84
115
  */
85
116
  function isRecord(value) {
86
117
  return typeof value === "object" && value !== null && !Array.isArray(value);
87
118
  }
119
+ /**
120
+ * @brief Read one own data option without consulting prototypes.
121
+ * @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
122
+ * report a structured export issue.
123
+ * @param value Object being normalized.
124
+ * @param key Field name or symbol.
125
+ * @returns Stored field value, or undefined when absent.
126
+ */
127
+ function readOwnDataProperty(value, key) {
128
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
129
+ if (descriptor === undefined ||
130
+ !Object.prototype.hasOwnProperty.call(descriptor, "value")) {
131
+ return undefined;
132
+ }
133
+ return descriptor.value;
134
+ }
@@ -1,28 +1,40 @@
1
1
  /**
2
2
  * @file types.ts
3
3
  * @brief JSON Schema export data contracts.
4
+ * @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
5
+ * report a structured export issue.
4
6
  */
5
7
  import type { PathSegment } from "../issue/index.js";
6
8
  /**
7
- * @brief json schema.
9
+ * @brief Public JSON Schema fragment produced by the exporter.
10
+ * @details JSON Schema allows boolean schemas at every position, so the TypeSea
11
+ * model keeps that union explicit instead of wrapping boolean fragments in
12
+ * object shells.
8
13
  */
9
14
  export type JsonSchema = boolean | JsonSchemaObject;
10
15
  /**
11
- * @brief json schema primitive.
16
+ * @brief Literal values that can be represented losslessly in JSON Schema.
17
+ * @details Undefined, bigint, symbol, NaN, infinity, and negative zero are not
18
+ * part of this type because the exporter reports them as unsupported instead of
19
+ * weakening literal semantics.
12
20
  */
13
21
  export type JsonSchemaPrimitive = string | number | boolean | null;
14
22
  /**
15
- * @brief json schema type name.
23
+ * @brief Type names accepted by the emitted JSON Schema `type` keyword.
24
+ * @details The list is intentionally closed so emitters cannot spell dialect
25
+ * keywords or runtime-only TypeSea domains as plain strings.
16
26
  */
17
27
  export type JsonSchemaTypeName = "null" | "boolean" | "object" | "array" | "number" | "integer" | "string";
18
28
  /**
19
- * @brief json schema dialect.
29
+ * @brief JSON Schema dialects supported by TypeSea emission.
20
30
  * @details Defines the keyword set selected for emitted schemas.
21
31
  * @invariant Each dialect maps to one stable tuple representation.
22
32
  */
23
33
  export type JsonSchemaDialect = "draft-07" | "2020-12";
24
34
  /**
25
- * @brief json schema object.
35
+ * @brief Readonly JSON Schema object shape returned from public APIs.
36
+ * @details The interface contains only keywords emitted by TypeSea. Keeping the
37
+ * shape narrow catches accidental exporter drift in TypeScript before release.
26
38
  */
27
39
  export interface JsonSchemaObject {
28
40
  readonly $schema?: string;
@@ -34,10 +46,14 @@ export interface JsonSchemaObject {
34
46
  readonly maxLength?: number;
35
47
  readonly minimum?: number;
36
48
  readonly maximum?: number;
49
+ readonly exclusiveMinimum?: number;
50
+ readonly exclusiveMaximum?: number;
51
+ readonly multipleOf?: number;
37
52
  readonly items?: JsonSchema | readonly JsonSchema[];
38
53
  /**
39
- * @brief additional items.
40
- * @details Documents draft-07 tuple tail validation so older validators do not silently skip tuple element schemas.
54
+ * @brief Draft-07 tuple tail schema for values past fixed positions.
55
+ * @details Older validators read this field when `items` is an array, so it
56
+ * must be emitted for strict TypeSea tuple length semantics.
41
57
  * @invariant When `items` is an array, this field controls values past the fixed tuple length.
42
58
  */
43
59
  readonly additionalItems?: JsonSchema;
@@ -51,11 +67,15 @@ export interface JsonSchemaObject {
51
67
  readonly allOf?: readonly JsonSchema[];
52
68
  }
53
69
  /**
54
- * @brief json schema export code.
70
+ * @brief Closed set of JSON Schema export failure codes.
71
+ * @details Codes are stable machine-readable diagnostics. The human message may
72
+ * change, but adapter logic can branch on these strings.
55
73
  */
56
- export type JsonSchemaExportCode = "unsupported_bigint" | "unsupported_symbol" | "unsupported_undefined" | "unsupported_number_literal" | "unsupported_number_bound" | "unsupported_regex_flags" | "unsupported_lazy" | "unsupported_refine" | "unsupported_decoder" | "unsupported_async_decoder" | "unsupported_child";
74
+ export type JsonSchemaExportCode = "unsupported_bigint" | "unsupported_symbol" | "unsupported_date" | "unsupported_runtime_object" | "unsupported_undefined" | "unsupported_number_literal" | "unsupported_number_bound" | "unsupported_regex_flags" | "unsupported_lazy" | "unsupported_refine" | "unsupported_decoder" | "unsupported_async_decoder" | "unsupported_child";
57
75
  /**
58
- * @brief json schema export issue.
76
+ * @brief Structured diagnostic produced when export would lose semantics.
77
+ * @details Paths point into the TypeSea schema tree, not the emitted JSON
78
+ * Schema, because failures occur before a complete output document exists.
59
79
  */
60
80
  export interface JsonSchemaExportIssue {
61
81
  readonly path: readonly PathSegment[];
@@ -63,19 +83,24 @@ export interface JsonSchemaExportIssue {
63
83
  readonly message: string;
64
84
  }
65
85
  /**
66
- * @brief json schema options.
86
+ * @brief Configuration accepted by JSON Schema export APIs.
87
+ * @details Options are normalized before emission so the lower-level emitters
88
+ * can select dialect behavior without repeatedly checking optional fields.
67
89
  */
68
90
  export interface JsonSchemaOptions {
69
91
  /**
70
- * @brief dialect.
71
- * @details Selects the JSON Schema keyword set before emission begins.
92
+ * @brief Keyword family selected for the emitted document.
93
+ * @details Tuple schemas use `items` arrays for draft-07 and `prefixItems`
94
+ * for 2020-12.
72
95
  * @invariant Tuple schemas use `items` arrays for draft-07 and `prefixItems` for 2020-12.
73
96
  */
74
97
  readonly dialect: JsonSchemaDialect;
75
98
  readonly schemaId: string | undefined;
76
99
  }
77
100
  /**
78
- * @brief mutable json schema object.
101
+ * @brief Internal mutable JSON Schema object used during emission.
102
+ * @details Emitters fill this shape in local loops, then `freezeJsonSchema`
103
+ * hardens it before the value crosses the public API boundary.
79
104
  */
80
105
  export interface MutableJsonSchemaObject {
81
106
  $schema?: string;
@@ -87,10 +112,14 @@ export interface MutableJsonSchemaObject {
87
112
  maxLength?: number;
88
113
  minimum?: number;
89
114
  maximum?: number;
115
+ exclusiveMinimum?: number;
116
+ exclusiveMaximum?: number;
117
+ multipleOf?: number;
90
118
  items?: JsonSchema | readonly JsonSchema[];
91
119
  /**
92
- * @brief additional items.
93
- * @details Documents draft-07 tuple tail validation so older validators do not silently skip tuple element schemas.
120
+ * @brief Draft-07 tuple tail schema for values past fixed positions.
121
+ * @details Older validators read this field when `items` is an array, so it
122
+ * must be emitted for strict TypeSea tuple length semantics.
94
123
  * @invariant When `items` is an array, this field controls values past the fixed tuple length.
95
124
  */
96
125
  additionalItems?: JsonSchema;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/json-schema/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/json-schema/types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  /**
2
2
  * @file types.ts
3
3
  * @brief JSON Schema export data contracts.
4
+ * @details JSON Schema helpers emit only representations that preserve TypeSea semantics or
5
+ * report a structured export issue.
4
6
  */
5
7
  export {};
@@ -1,5 +1,7 @@
1
1
  /**
2
- * @brief schema tag.
2
+ * @brief Numeric schema tags used in frozen schema records.
3
+ * @details Plain objects avoid TypeScript enum emit and keep runtime constants
4
+ * stable for generated validators.
3
5
  */
4
6
  export declare const SchemaTag: {
5
7
  readonly String: 1;
@@ -23,60 +25,70 @@ export declare const SchemaTag: {
23
25
  readonly BigInt: 19;
24
26
  readonly Symbol: 20;
25
27
  readonly Intersection: 21;
28
+ readonly Date: 22;
29
+ readonly Map: 23;
30
+ readonly Set: 24;
31
+ readonly InstanceOf: 25;
32
+ readonly Property: 26;
26
33
  };
27
- /**
28
- * @brief schema tag.
29
- */
30
34
  export type SchemaTag = (typeof SchemaTag)[keyof typeof SchemaTag];
31
35
  /**
32
- * @brief object mode tag.
36
+ * @brief Object unknown-key policy tags.
37
+ * @details This declaration records the local invariant that callers rely on after this
38
+ * module boundary.
33
39
  */
34
40
  export declare const ObjectModeTag: {
35
41
  readonly Passthrough: 1;
36
42
  readonly Strict: 2;
37
43
  };
38
- /**
39
- * @brief object mode tag.
40
- */
41
44
  export type ObjectModeTag = (typeof ObjectModeTag)[keyof typeof ObjectModeTag];
42
45
  /**
43
- * @brief presence tag.
46
+ * @brief Required/optional field presence tags for object entries.
47
+ * @details This declaration is kept narrow so downstream code can rely on a closed set of
48
+ * supported values.
44
49
  */
45
50
  export declare const PresenceTag: {
46
51
  readonly Required: 1;
47
52
  readonly Optional: 2;
48
53
  };
49
- /**
50
- * @brief presence tag.
51
- */
52
54
  export type PresenceTag = (typeof PresenceTag)[keyof typeof PresenceTag];
53
- /**
54
- * @brief string check tag.
55
- */
56
55
  export declare const StringCheckTag: {
57
56
  readonly Min: 1;
58
57
  readonly Max: 2;
59
58
  readonly Regex: 3;
60
59
  readonly Uuid: 4;
60
+ readonly Email: 5;
61
+ readonly Url: 6;
62
+ readonly IsoDate: 7;
63
+ readonly IsoDateTime: 8;
64
+ readonly Ulid: 9;
65
+ readonly Ipv4: 10;
66
+ readonly Ipv6: 11;
61
67
  };
62
- /**
63
- * @brief string check tag.
64
- */
65
68
  export type StringCheckTag = (typeof StringCheckTag)[keyof typeof StringCheckTag];
66
- /**
67
- * @brief number check tag.
68
- */
69
69
  export declare const NumberCheckTag: {
70
70
  readonly Integer: 1;
71
71
  readonly Gte: 2;
72
72
  readonly Lte: 3;
73
+ readonly Gt: 4;
74
+ readonly Lt: 5;
75
+ readonly MultipleOf: 6;
73
76
  };
74
- /**
75
- * @brief number check tag.
76
- */
77
77
  export type NumberCheckTag = (typeof NumberCheckTag)[keyof typeof NumberCheckTag];
78
+ export declare const DateCheckTag: {
79
+ readonly Min: 1;
80
+ readonly Max: 2;
81
+ };
82
+ export type DateCheckTag = (typeof DateCheckTag)[keyof typeof DateCheckTag];
83
+ export declare const ArrayCheckTag: {
84
+ readonly Min: 1;
85
+ readonly Max: 2;
86
+ };
87
+ export type ArrayCheckTag = (typeof ArrayCheckTag)[keyof typeof ArrayCheckTag];
78
88
  /**
79
- * @brief node tag.
89
+ * @brief IR node tags with reserved numeric ranges by node family.
90
+ * @details Sparse ranges make graph dumps easier to scan and leave room for
91
+ * adding specialized nodes without renumbering old ones.
80
92
  */
81
93
  export declare const NodeTag: {
82
94
  readonly Start: 1;
@@ -107,13 +119,13 @@ export declare const NodeTag: {
107
119
  readonly TupleItems: 41;
108
120
  readonly RecordEvery: 42;
109
121
  readonly DiscriminantDispatch: 43;
122
+ readonly ObjectShape: 44;
123
+ readonly UnionDispatch: 45;
124
+ readonly PrimitiveUnion: 46;
110
125
  readonly Not: 50;
111
126
  readonly And: 51;
112
127
  readonly Or: 52;
113
128
  readonly Return: 70;
114
129
  };
115
- /**
116
- * @brief node tag.
117
- */
118
130
  export type NodeTag = (typeof NodeTag)[keyof typeof NodeTag];
119
131
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/kind/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;CAsBZ,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEnE;;GAEG;AACH,eAAO,MAAM,aAAa;;;CAGhB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,WAAW;;;CAGd,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,cAAc,GACxB,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,cAAc,GACxB,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCV,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/kind/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BZ,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;CAGhB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE/E;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;CAGd,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEzE,eAAO,MAAM,cAAc;;;;;;;;;;;;CAYjB,CAAC;AAEX,MAAM,MAAM,cAAc,GACtB,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAEzD,eAAO,MAAM,cAAc;;;;;;;CAOjB,CAAC;AAEX,MAAM,MAAM,cAAc,GACtB,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAEzD,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAEX,MAAM,MAAM,YAAY,GACpB,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAErD,eAAO,MAAM,aAAa;;;CAGhB,CAAC;AAEX,MAAM,MAAM,aAAa,GACrB,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCV,CAAC;AAEX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC"}
@@ -1,5 +1,7 @@
1
1
  /**
2
- * @brief schema tag.
2
+ * @brief Numeric schema tags used in frozen schema records.
3
+ * @details Plain objects avoid TypeScript enum emit and keep runtime constants
4
+ * stable for generated validators.
3
5
  */
4
6
  export const SchemaTag = {
5
7
  String: 1,
@@ -22,41 +24,64 @@ export const SchemaTag = {
22
24
  Never: 18,
23
25
  BigInt: 19,
24
26
  Symbol: 20,
25
- Intersection: 21
27
+ Intersection: 21,
28
+ Date: 22,
29
+ Map: 23,
30
+ Set: 24,
31
+ InstanceOf: 25,
32
+ Property: 26
26
33
  };
27
34
  /**
28
- * @brief object mode tag.
35
+ * @brief Object unknown-key policy tags.
36
+ * @details This declaration records the local invariant that callers rely on after this
37
+ * module boundary.
29
38
  */
30
39
  export const ObjectModeTag = {
31
40
  Passthrough: 1,
32
41
  Strict: 2
33
42
  };
34
43
  /**
35
- * @brief presence tag.
44
+ * @brief Required/optional field presence tags for object entries.
45
+ * @details This declaration is kept narrow so downstream code can rely on a closed set of
46
+ * supported values.
36
47
  */
37
48
  export const PresenceTag = {
38
49
  Required: 1,
39
50
  Optional: 2
40
51
  };
41
- /**
42
- * @brief string check tag.
43
- */
44
52
  export const StringCheckTag = {
45
53
  Min: 1,
46
54
  Max: 2,
47
55
  Regex: 3,
48
- Uuid: 4
56
+ Uuid: 4,
57
+ Email: 5,
58
+ Url: 6,
59
+ IsoDate: 7,
60
+ IsoDateTime: 8,
61
+ Ulid: 9,
62
+ Ipv4: 10,
63
+ Ipv6: 11
49
64
  };
50
- /**
51
- * @brief number check tag.
52
- */
53
65
  export const NumberCheckTag = {
54
66
  Integer: 1,
55
67
  Gte: 2,
56
- Lte: 3
68
+ Lte: 3,
69
+ Gt: 4,
70
+ Lt: 5,
71
+ MultipleOf: 6
72
+ };
73
+ export const DateCheckTag = {
74
+ Min: 1,
75
+ Max: 2
76
+ };
77
+ export const ArrayCheckTag = {
78
+ Min: 1,
79
+ Max: 2
57
80
  };
58
81
  /**
59
- * @brief node tag.
82
+ * @brief IR node tags with reserved numeric ranges by node family.
83
+ * @details Sparse ranges make graph dumps easier to scan and leave room for
84
+ * adding specialized nodes without renumbering old ones.
60
85
  */
61
86
  export const NodeTag = {
62
87
  Start: 1,
@@ -87,6 +112,9 @@ export const NodeTag = {
87
112
  TupleItems: 41,
88
113
  RecordEvery: 42,
89
114
  DiscriminantDispatch: 43,
115
+ ObjectShape: 44,
116
+ UnionDispatch: 45,
117
+ PrimitiveUnion: 46,
90
118
  Not: 50,
91
119
  And: 51,
92
120
  Or: 52,
@@ -1,7 +1,12 @@
1
1
  import { type Graph } from "../ir/index.js";
2
2
  import { type Schema } from "../schema/index.js";
3
3
  /**
4
- * @brief lower schema.
4
+ * @brief Convert one schema root into a Sea-of-Nodes predicate graph.
5
+ * @details The graph always starts with a single input parameter and ends in a
6
+ * boolean return node. Keeping that calling convention uniform lets optimizer,
7
+ * interpreter, compiler, and AOT code consume the same IR shape.
8
+ * @param schema Root schema to lower into predicate IR.
9
+ * @returns Graph with one parameter and one return node.
5
10
  */
6
11
  export declare function lowerSchema(schema: Schema): Graph;
7
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lower/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAgB,KAAK,KAAK,EAAe,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAOjD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lower/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAEH,KAAK,KAAK,EAIb,MAAM,gBAAgB,CAAC;AAExB,OAAO,EASH,KAAK,MAAM,EACd,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAOjD"}