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,6 +1,8 @@
1
1
  /**
2
2
  * @file internal.ts
3
3
  * @brief Private helpers shared across TypeSea translation units.
4
+ * @details This declaration records the local invariant that callers rely on after this
5
+ * module boundary.
4
6
  *
5
7
  * @invariant Values crossing a module boundary stay `unknown` until a local
6
8
  * guard proves the shape needed by that module.
@@ -8,27 +10,61 @@
8
10
  import type { Guard, Presence } from "../guard/index.js";
9
11
  import { type Schema } from "../schema/index.js";
10
12
  /**
11
- * @brief read guard schema.
13
+ * @brief Read a guard schema after proving the receiver shape locally.
14
+ * @param guard Candidate guard-like value.
15
+ * @param label Message prefix for TypeError diagnostics.
16
+ * @returns Valid schema stored in an own data slot.
17
+ * @throws TypeError when the receiver is not structurally a TypeSea guard.
18
+ * @details This helper is used by builders that accept guard-like values rather
19
+ * than constructed guard instances. The schema field is read by descriptor so a
20
+ * forged prototype cannot supply or mutate the schema after admission.
12
21
  */
13
22
  export declare function readGuardSchema(guard: unknown, label: string): Schema;
14
23
  /**
15
- * @brief is record.
24
+ * @brief Check record.
25
+ * @details This helper keeps a local invariant explicit at the module boundary.
16
26
  */
17
27
  export declare function isRecord(value: unknown): value is Readonly<Record<string, unknown>>;
18
28
  /**
19
- * @brief is unknown array.
29
+ * @brief Accept an array before a caller performs local element validation.
30
+ * @details This declaration records the local invariant that callers rely on after this
31
+ * module boundary.
32
+ * @param value Candidate vector.
33
+ * @returns True when the value is an Array instance.
20
34
  */
21
35
  export declare function isUnknownArray(value: unknown): value is readonly unknown[];
22
36
  /**
23
- * @brief includes string.
37
+ * @brief Linear membership for short builder-owned string vectors.
38
+ * @details This declaration records the local invariant that callers rely on after this
39
+ * module boundary.
40
+ * @param values Candidate set represented as an ordered vector.
41
+ * @param value String being searched.
42
+ * @returns True when the string is present.
24
43
  */
25
44
  export declare function includesString(values: readonly string[], value: string): boolean;
26
45
  /**
27
- * @brief is strict true.
46
+ * @brief Accept only the literal boolean success value from user predicates.
47
+ * @details This declaration records the local invariant that callers rely on after this
48
+ * module boundary.
49
+ * @param value Predicate return value.
50
+ * @returns True only for `true`.
28
51
  */
29
52
  export declare function isStrictTrue(value: unknown): boolean;
30
53
  /**
31
- * @brief is guard value.
54
+ * @brief Check whether a value structurally exposes a TypeSea schema.
55
+ * @details This declaration records the local invariant that callers rely on after this
56
+ * module boundary.
57
+ * @param value Candidate guard-like object.
58
+ * @returns True when a valid schema is stored directly on the object.
32
59
  */
33
60
  export declare function isGuardValue(value: unknown): value is Guard<unknown, Presence>;
61
+ /**
62
+ * @brief Read one own data property without running getters.
63
+ * @details This declaration records the local invariant that callers rely on after this
64
+ * module boundary.
65
+ * @param value Object being normalized.
66
+ * @param key Field name or symbol.
67
+ * @returns Stored field value, or undefined when the own data slot is absent.
68
+ */
69
+ export declare function readOwnDataProperty(value: object, key: PropertyKey): unknown;
34
70
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEhE;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,CASR;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAE5C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,OAAO,EAAE,CAE1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,KAAK,EAAE,MAAM,GACZ,OAAO,CAOT;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAEnC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEhE;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC3B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACd,MAAM,CASR;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACpB,KAAK,EAAE,OAAO,GACf,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAE5C;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,OAAO,EAAE,CAE1E;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC1B,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,KAAK,EAAE,MAAM,GACd,OAAO,CAOT;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CACxB,KAAK,EAAE,OAAO,GACf,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAEnC;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,WAAW,GACjB,OAAO,CAOT"}
@@ -1,38 +1,57 @@
1
1
  /**
2
2
  * @file internal.ts
3
3
  * @brief Private helpers shared across TypeSea translation units.
4
+ * @details This declaration records the local invariant that callers rely on after this
5
+ * module boundary.
4
6
  *
5
7
  * @invariant Values crossing a module boundary stay `unknown` until a local
6
8
  * guard proves the shape needed by that module.
7
9
  */
8
10
  import { isSchemaValue } from "../schema/index.js";
9
11
  /**
10
- * @brief read guard schema.
12
+ * @brief Read a guard schema after proving the receiver shape locally.
13
+ * @param guard Candidate guard-like value.
14
+ * @param label Message prefix for TypeError diagnostics.
15
+ * @returns Valid schema stored in an own data slot.
16
+ * @throws TypeError when the receiver is not structurally a TypeSea guard.
17
+ * @details This helper is used by builders that accept guard-like values rather
18
+ * than constructed guard instances. The schema field is read by descriptor so a
19
+ * forged prototype cannot supply or mutate the schema after admission.
11
20
  */
12
21
  export function readGuardSchema(guard, label) {
13
22
  if (!isRecord(guard)) {
14
23
  throw new TypeError(`${label} must be a TypeSea guard`);
15
24
  }
16
- const schema = guard["schema"];
25
+ const schema = readOwnDataProperty(guard, "schema");
17
26
  if (!isSchemaValue(schema)) {
18
27
  throw new TypeError(`${label} must contain a valid TypeSea schema`);
19
28
  }
20
29
  return schema;
21
30
  }
22
31
  /**
23
- * @brief is record.
32
+ * @brief Check record.
33
+ * @details This helper keeps a local invariant explicit at the module boundary.
24
34
  */
25
35
  export function isRecord(value) {
26
36
  return typeof value === "object" && value !== null && !Array.isArray(value);
27
37
  }
28
38
  /**
29
- * @brief is unknown array.
39
+ * @brief Accept an array before a caller performs local element validation.
40
+ * @details This declaration records the local invariant that callers rely on after this
41
+ * module boundary.
42
+ * @param value Candidate vector.
43
+ * @returns True when the value is an Array instance.
30
44
  */
31
45
  export function isUnknownArray(value) {
32
46
  return Array.isArray(value);
33
47
  }
34
48
  /**
35
- * @brief includes string.
49
+ * @brief Linear membership for short builder-owned string vectors.
50
+ * @details This declaration records the local invariant that callers rely on after this
51
+ * module boundary.
52
+ * @param values Candidate set represented as an ordered vector.
53
+ * @param value String being searched.
54
+ * @returns True when the string is present.
36
55
  */
37
56
  export function includesString(values, value) {
38
57
  for (let index = 0; index < values.length; index += 1) {
@@ -43,14 +62,38 @@ export function includesString(values, value) {
43
62
  return false;
44
63
  }
45
64
  /**
46
- * @brief is strict true.
65
+ * @brief Accept only the literal boolean success value from user predicates.
66
+ * @details This declaration records the local invariant that callers rely on after this
67
+ * module boundary.
68
+ * @param value Predicate return value.
69
+ * @returns True only for `true`.
47
70
  */
48
71
  export function isStrictTrue(value) {
49
72
  return value === true;
50
73
  }
51
74
  /**
52
- * @brief is guard value.
75
+ * @brief Check whether a value structurally exposes a TypeSea schema.
76
+ * @details This declaration records the local invariant that callers rely on after this
77
+ * module boundary.
78
+ * @param value Candidate guard-like object.
79
+ * @returns True when a valid schema is stored directly on the object.
53
80
  */
54
81
  export function isGuardValue(value) {
55
- return isRecord(value) && isSchemaValue(value["schema"]);
82
+ return isRecord(value) && isSchemaValue(readOwnDataProperty(value, "schema"));
83
+ }
84
+ /**
85
+ * @brief Read one own data property without running getters.
86
+ * @details This declaration records the local invariant that callers rely on after this
87
+ * module boundary.
88
+ * @param value Object being normalized.
89
+ * @param key Field name or symbol.
90
+ * @returns Stored field value, or undefined when the own data slot is absent.
91
+ */
92
+ export function readOwnDataProperty(value, key) {
93
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
94
+ if (descriptor === undefined ||
95
+ !Object.prototype.hasOwnProperty.call(descriptor, "value")) {
96
+ return undefined;
97
+ }
98
+ return descriptor.value;
56
99
  }
@@ -1,173 +1,63 @@
1
1
  /**
2
2
  * @file builder.ts
3
3
  * @brief Dense graph builder with structural node interning.
4
+ * @details IR helpers preserve Sea-of-Nodes invariants before graphs cross optimizer,
5
+ * compiler, or public introspection boundaries.
4
6
  */
5
- import type { LiteralValue, Schema } from "../schema/index.js";
6
- import type { Graph, NodeId } from "./types.js";
7
+ import { type ObjectModeTag } from "../kind/index.js";
8
+ import type { ArrayCheck, LiteralValue, Schema } from "../schema/index.js";
9
+ import type { Graph, NodeId, ObjectShapeEntry, UnionDispatchMask } from "./types.js";
7
10
  /**
8
- * @brief graph builder.
9
- * @details Owns its state directly; methods expose receiver checks and explicit result flow.
10
- * @invariant Construction leaves the instance in a fully usable state before it escapes.
11
+ * @brief Dense Sea-of-Nodes graph construction arena.
12
+ * @details The builder interns pure scalar nodes so later optimization passes see
13
+ * one canonical id for equivalent predicates. Composite nodes are deliberately
14
+ * appended instead: their embedded child graphs and schema payloads are owned
15
+ * values, and pointer-level interning would make aliasing harder to audit.
11
16
  */
12
17
  export declare class GraphBuilder {
13
18
  private readonly nodes;
14
19
  private readonly hash;
15
- /**
16
- * @brief constructor.
17
- * @post The receiver is initialized according to the class invariant before it can be observed.
18
- */
19
20
  constructor();
20
- /**
21
- * @brief start.
22
- */
23
21
  start(): NodeId;
24
- /**
25
- * @brief param.
26
- */
27
22
  param(name: string): NodeId;
28
- /**
29
- * @brief constant.
30
- */
31
23
  constant(value: LiteralValue): NodeId;
32
- /**
33
- * @brief get prop.
34
- */
35
24
  getProp(object: NodeId, key: string): NodeId;
36
- /**
37
- * @brief is string.
38
- */
39
25
  isString(value: NodeId): NodeId;
40
- /**
41
- * @brief is number.
42
- */
43
26
  isNumber(value: NodeId): NodeId;
44
- /**
45
- * @brief is boolean.
46
- */
47
27
  isBoolean(value: NodeId): NodeId;
48
- /**
49
- * @brief is big int.
50
- */
51
28
  isBigInt(value: NodeId): NodeId;
52
- /**
53
- * @brief is symbol.
54
- */
55
29
  isSymbol(value: NodeId): NodeId;
56
- /**
57
- * @brief is object.
58
- */
59
30
  isObject(value: NodeId): NodeId;
60
- /**
61
- * @brief is array.
62
- */
63
31
  isArray(value: NodeId): NodeId;
64
- /**
65
- * @brief is undefined.
66
- */
67
32
  isUndefined(value: NodeId): NodeId;
68
- /**
69
- * @brief is null.
70
- */
71
33
  isNull(value: NodeId): NodeId;
72
- /**
73
- * @brief is integer.
74
- */
75
34
  isInteger(value: NodeId): NodeId;
76
- /**
77
- * @brief not.
78
- */
79
35
  not(value: NodeId): NodeId;
80
- /**
81
- * @brief equals.
82
- */
83
36
  equals(left: NodeId, right: NodeId): NodeId;
84
- /**
85
- * @brief gte.
86
- */
87
37
  gte(left: NodeId, right: NodeId): NodeId;
88
- /**
89
- * @brief lte.
90
- */
91
38
  lte(left: NodeId, right: NodeId): NodeId;
92
- /**
93
- * @brief string min.
94
- */
95
39
  stringMin(value: NodeId, bound: number): NodeId;
96
- /**
97
- * @brief string max.
98
- */
99
40
  stringMax(value: NodeId, bound: number): NodeId;
100
- /**
101
- * @brief regex.
102
- */
103
41
  regex(value: NodeId, regex: RegExp, name: string): NodeId;
104
- /**
105
- * @brief has own.
106
- */
107
42
  hasOwn(object: NodeId, key: string): NodeId;
108
- /**
109
- * @brief has own data.
110
- */
111
43
  hasOwnData(object: NodeId, key: string): NodeId;
112
- /**
113
- * @brief strict keys.
114
- */
115
44
  strictKeys(object: NodeId, keys: readonly string[]): NodeId;
116
- /**
117
- * @brief array every.
118
- */
119
- arrayEvery(value: NodeId, item: Schema): NodeId;
120
- /**
121
- * @brief tuple items.
122
- */
123
- tupleItems(value: NodeId, items: readonly Schema[]): NodeId;
124
- /**
125
- * @brief record every.
126
- */
127
- recordEvery(value: NodeId, item: Schema): NodeId;
128
- /**
129
- * @brief discriminant dispatch.
130
- */
131
- discriminantDispatch(value: NodeId, key: string, literals: readonly string[], schemas: readonly Schema[]): NodeId;
132
- /**
133
- * @brief schema check.
134
- */
45
+ arrayEvery(value: NodeId, item: Schema, checks: readonly ArrayCheck[], itemGraph: Graph): NodeId;
46
+ tupleItems(value: NodeId, items: readonly Schema[], itemGraphs: readonly Graph[]): NodeId;
47
+ recordEvery(value: NodeId, item: Schema, itemGraph: Graph): NodeId;
48
+ discriminantDispatch(value: NodeId, key: string, literals: readonly string[], schemas: readonly Schema[], graphs: readonly Graph[]): NodeId;
49
+ objectShape(value: NodeId, entries: readonly ObjectShapeEntry[], keys: readonly string[], mode: ObjectModeTag, catchall: Schema | undefined, catchallGraph: Graph | undefined): NodeId;
50
+ unionDispatch(value: NodeId, options: readonly Schema[], graphs: readonly Graph[], masks: readonly UnionDispatchMask[]): NodeId;
51
+ primitiveUnion(value: NodeId, graphs: readonly Graph[], masks: readonly UnionDispatchMask[]): NodeId;
135
52
  schemaCheck(value: NodeId, schema: Schema): NodeId;
136
- /**
137
- * @brief and.
138
- */
139
53
  and(values: readonly NodeId[]): NodeId;
140
- /**
141
- * @brief or.
142
- */
143
54
  or(values: readonly NodeId[]): NodeId;
144
- /**
145
- * @brief ret.
146
- */
147
55
  ret(control: NodeId, value: NodeId): NodeId;
148
- /**
149
- * @brief finish.
150
- */
151
56
  finish(entry: NodeId, result: NodeId): Graph;
152
- /**
153
- * @brief unary.
154
- */
155
57
  private unary;
156
- /**
157
- * @brief numeric.
158
- */
159
58
  private numeric;
160
- /**
161
- * @brief string bound.
162
- */
163
59
  private stringBound;
164
- /**
165
- * @brief intern.
166
- */
167
60
  private intern;
168
- /**
169
- * @brief push.
170
- */
171
61
  private push;
172
62
  }
173
63
  //# sourceMappingURL=builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/ir/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/ir/builder.ts"],"names":[],"mappings":"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"}