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
package/dist/aot/index.js CHANGED
@@ -3,7 +3,13 @@ import { SchemaTag } from "../kind/index.js";
3
3
  import { err, ok } from "../result/index.js";
4
4
  import { freezeSchema, isSchemaValue } from "../schema/index.js";
5
5
  /**
6
- * @brief emit aot module.
6
+ * @brief Emit a standalone validator module for a guard schema.
7
+ * @param guard Guard whose schema is exported.
8
+ * @param options Optional function name and compile mode.
9
+ * @returns Result carrying source text, or closed issues for unsupported schema nodes.
10
+ * @details AOT output cannot close over runtime side tables. The schema is
11
+ * scanned before code emission so lazy, refine, and symbol-literal constructs
12
+ * fail as explicit issues instead of producing partially faithful source.
7
13
  */
8
14
  export function emitAotModule(guard, options) {
9
15
  const schema = readAotSchema(guard);
@@ -13,7 +19,7 @@ export function emitAotModule(guard, options) {
13
19
  if (issues.length !== 0) {
14
20
  return err(freezeAotIssues(issues));
15
21
  }
16
- const bundle = emitCompiledSourceBundle(schema, config.name);
22
+ const bundle = emitCompiledSourceBundle(schema, config.name, config.mode);
17
23
  if (bundle.dynamicSchemas.length !== 0) {
18
24
  return err(freezeAotIssues([
19
25
  {
@@ -29,25 +35,36 @@ export function emitAotModule(guard, options) {
29
35
  }));
30
36
  }
31
37
  /**
32
- * @brief read aot schema.
38
+ * @brief Normalize the guard input used by AOT emission.
39
+ * @param guard Candidate guard-like value.
40
+ * @returns Frozen schema safe for source generation.
41
+ * @throws TypeError when the value is not a TypeSea guard.
42
+ * @details The schema slot is descriptor-read to reject forged prototypes before
43
+ * the generator traverses schema data.
33
44
  */
34
45
  function readAotSchema(guard) {
35
46
  if (!isRecord(guard)) {
36
47
  throw new TypeError("AOT guard must be a TypeSea guard");
37
48
  }
38
- const schema = guard["schema"];
49
+ const schema = readOwnDataProperty(guard, "schema");
39
50
  if (!isSchemaValue(schema)) {
40
51
  throw new TypeError("AOT guard must contain a valid TypeSea schema");
41
52
  }
42
53
  return freezeSchema(schema);
43
54
  }
44
55
  /**
45
- * @brief read options.
56
+ * @brief Normalize AOT compile options.
57
+ * @details AOT helpers serialize only portable data because standalone modules cannot close
58
+ * over runtime side tables.
59
+ * @param options Optional user options object.
60
+ * @returns Complete options with defaults.
61
+ * @throws TypeError when option fields have unsupported types.
46
62
  */
47
63
  function readOptions(options) {
48
64
  if (options === undefined) {
49
65
  return {
50
- name: "typesea_aot"
66
+ name: "typesea_aot",
67
+ mode: "safe"
51
68
  };
52
69
  }
53
70
  if (!isRecord(options)) {
@@ -56,18 +73,45 @@ function readOptions(options) {
56
73
  const name = options.name;
57
74
  if (name === undefined) {
58
75
  return {
59
- name: "typesea_aot"
76
+ name: "typesea_aot",
77
+ mode: readAotMode(options)
60
78
  };
61
79
  }
62
80
  if (typeof name !== "string") {
63
81
  throw new TypeError("AOT name must be a string");
64
82
  }
65
83
  return {
66
- name
84
+ name,
85
+ mode: readAotMode(options)
67
86
  };
68
87
  }
69
88
  /**
70
- * @brief scan aot schema.
89
+ * @brief Normalize the requested AOT compile mode.
90
+ * @details AOT helpers serialize only portable data because standalone modules cannot close
91
+ * over runtime side tables.
92
+ * @param options Options object already accepted as a record.
93
+ * @returns Safe, unsafe, or unchecked codegen mode.
94
+ * @throws TypeError when the mode is outside the supported set.
95
+ */
96
+ function readAotMode(options) {
97
+ const mode = options["mode"];
98
+ if (mode === undefined) {
99
+ return "safe";
100
+ }
101
+ if (mode === "safe" || mode === "unsafe" || mode === "unchecked") {
102
+ return mode;
103
+ }
104
+ throw new TypeError("AOT mode must be \"safe\", \"unsafe\", or \"unchecked\"");
105
+ }
106
+ /**
107
+ * @brief Walk a schema tree and record constructs that AOT cannot preserve.
108
+ * @param schema Current schema node.
109
+ * @param path Diagnostic path to the current node.
110
+ * @param issues Mutable issue vector owned by the caller.
111
+ * @param seen Schema object set used to avoid repeated traversal.
112
+ * @details Runtime compilation can keep dynamic schemas in side tables; emitted
113
+ * modules cannot. This scan keeps the public API honest by refusing source that
114
+ * would silently weaken lazy, refine, or symbol literal semantics.
71
115
  */
72
116
  function scanAotSchema(schema, path, issues, seen) {
73
117
  if (seen.has(schema)) {
@@ -80,17 +124,32 @@ function scanAotSchema(schema, path, issues, seen) {
80
124
  pushIssue(path, issues, "unsupported_aot_symbol_literal", "AOT modules cannot preserve symbol literal identity");
81
125
  }
82
126
  return;
127
+ case SchemaTag.Date:
128
+ pushIssue(path, issues, "unsupported_aot_date", "AOT modules cannot preserve JavaScript Date object validation yet");
129
+ return;
83
130
  case SchemaTag.Array:
84
131
  scanAotSchema(schema.item, path.concat("items"), issues, seen);
85
132
  return;
86
133
  case SchemaTag.Tuple:
87
134
  scanSchemaArray(schema.items, path, issues, seen);
135
+ if (schema.rest !== undefined) {
136
+ scanAotSchema(schema.rest, path.concat("rest"), issues, seen);
137
+ }
88
138
  return;
89
139
  case SchemaTag.Record:
90
140
  scanAotSchema(schema.value, path.concat("additionalProperties"), issues, seen);
91
141
  return;
142
+ case SchemaTag.Map:
143
+ case SchemaTag.Set:
144
+ case SchemaTag.InstanceOf:
145
+ case SchemaTag.Property:
146
+ pushIssue(path, issues, "unsupported_aot_runtime_object", "AOT modules cannot preserve JavaScript runtime object contracts yet");
147
+ return;
92
148
  case SchemaTag.Object:
93
149
  scanObjectEntries(schema.entries, path, issues, seen);
150
+ if (schema.catchall !== undefined) {
151
+ scanAotSchema(schema.catchall, path.concat("additionalProperties"), issues, seen);
152
+ }
94
153
  return;
95
154
  case SchemaTag.Union:
96
155
  scanSchemaArray(schema.options, path, issues, seen);
@@ -131,6 +190,8 @@ function scanAotSchema(schema, path, issues, seen) {
131
190
  }
132
191
  /**
133
192
  * @brief scan schema array.
193
+ * @details AOT helpers serialize only portable data because standalone modules cannot close
194
+ * over runtime side tables.
134
195
  */
135
196
  function scanSchemaArray(schemas, path, issues, seen) {
136
197
  for (let index = 0; index < schemas.length; index += 1) {
@@ -142,6 +203,8 @@ function scanSchemaArray(schemas, path, issues, seen) {
142
203
  }
143
204
  /**
144
205
  * @brief scan object entries.
206
+ * @details AOT helpers serialize only portable data because standalone modules cannot close
207
+ * over runtime side tables.
145
208
  */
146
209
  function scanObjectEntries(entries, path, issues, seen) {
147
210
  for (let index = 0; index < entries.length; index += 1) {
@@ -153,6 +216,8 @@ function scanObjectEntries(entries, path, issues, seen) {
153
216
  }
154
217
  /**
155
218
  * @brief emit module source.
219
+ * @details AOT helpers serialize only portable data because standalone modules cannot close
220
+ * over runtime side tables.
156
221
  */
157
222
  function emitModuleSource(bundle) {
158
223
  return [
@@ -166,20 +231,23 @@ function emitModuleSource(bundle) {
166
231
  JSON.stringify(bundle.strings),
167
232
  ";const d=function(){return false;};",
168
233
  "const m=function(){return;};",
234
+ "const mf=function(){return;};",
169
235
  "const sk=function(v,ks){if(typeof v!==\"object\"||v===null||Array.isArray(v))return false;const ps=Reflect.ownKeys(v);for(let i=0;i<ps.length;i+=1){const key=ps[i];if(typeof key!==\"string\"||!ks.includes(key))return false;}return true;};",
170
- "const __typesea=(function(l,r,k,u,d,m,sk){",
236
+ "const __typesea=(function(l,r,k,u,d,m,mf,sk){",
171
237
  bundle.source,
172
- "})(l,r,k,u,d,m,sk);",
173
- "const freezeIssues=function(xs){if(xs.length===0)return Object.freeze([]);const out=new Array(xs.length);for(let i=0;i<xs.length;i+=1){const x=xs[i];const p=x.path.slice();Object.freeze(p);const y={path:p,code:x.code,expected:x.expected,actual:x.actual,message:x.message};Object.freeze(y);out[i]=y;}return Object.freeze(out);};",
238
+ "})(l,r,k,u,d,m,mf,sk);",
174
239
  "export function is(value){return __typesea.is(value);}",
175
- "export function check(value){const issues=freezeIssues(__typesea.check(value));if(issues.length===0)return Object.freeze({ok:true,value});return Object.freeze({ok:false,error:issues});}",
240
+ "export function check(value){return __typesea.result(value);}",
241
+ "export function checkFirst(value){return __typesea.first(value);}",
176
242
  "export function assert(value){const result=check(value);if(!result.ok){const error=new Error(\"TypeSea assertion failed\");Object.defineProperty(error,\"issues\",{configurable:false,enumerable:true,value:result.error,writable:false});throw error;}}",
177
- "export default Object.freeze({is,check,assert});",
243
+ "export default Object.freeze({is,check,checkFirst,assert});",
178
244
  ""
179
245
  ].join("");
180
246
  }
181
247
  /**
182
248
  * @brief emit declaration source.
249
+ * @details AOT helpers serialize only portable data because standalone modules cannot close
250
+ * over runtime side tables.
183
251
  */
184
252
  function emitDeclarationSource() {
185
253
  return [
@@ -195,10 +263,12 @@ function emitDeclarationSource() {
195
263
  " | { readonly ok: false; readonly error: readonly AotIssue[] };",
196
264
  "export declare function is(value: unknown): boolean;",
197
265
  "export declare function check<TValue = unknown>(value: TValue): AotCheckResult<TValue>;",
266
+ "export declare function checkFirst<TValue = unknown>(value: TValue): AotCheckResult<TValue>;",
198
267
  "export declare function assert(value: unknown): void;",
199
268
  "declare const guard: {",
200
269
  " readonly is: typeof is;",
201
270
  " readonly check: typeof check;",
271
+ " readonly checkFirst: typeof checkFirst;",
202
272
  " readonly assert: typeof assert;",
203
273
  "};",
204
274
  "export default guard;",
@@ -207,6 +277,8 @@ function emitDeclarationSource() {
207
277
  }
208
278
  /**
209
279
  * @brief serialize literal array.
280
+ * @details AOT helpers serialize only portable data because standalone modules cannot close
281
+ * over runtime side tables.
210
282
  */
211
283
  function serializeLiteralArray(values) {
212
284
  const parts = new Array(values.length);
@@ -220,6 +292,8 @@ function serializeLiteralArray(values) {
220
292
  }
221
293
  /**
222
294
  * @brief serialize literal.
295
+ * @details AOT helpers serialize only portable data because standalone modules cannot close
296
+ * over runtime side tables.
223
297
  */
224
298
  function serializeLiteral(value) {
225
299
  switch (typeof value) {
@@ -253,6 +327,8 @@ function serializeLiteral(value) {
253
327
  }
254
328
  /**
255
329
  * @brief serialize reg exp array.
330
+ * @details AOT helpers serialize only portable data because standalone modules cannot close
331
+ * over runtime side tables.
256
332
  */
257
333
  function serializeRegExpArray(values) {
258
334
  const parts = new Array(values.length);
@@ -265,7 +341,8 @@ function serializeRegExpArray(values) {
265
341
  return `[${parts.join(",")}]`;
266
342
  }
267
343
  /**
268
- * @brief push issue.
344
+ * @brief Execute push issue.
345
+ * @details This helper keeps a local invariant explicit at the module boundary.
269
346
  */
270
347
  function pushIssue(path, issues, code, message) {
271
348
  issues.push({
@@ -275,7 +352,8 @@ function pushIssue(path, issues, code, message) {
275
352
  });
276
353
  }
277
354
  /**
278
- * @brief freeze aot issues.
355
+ * @brief Execute freeze aot issues.
356
+ * @details This helper keeps a local invariant explicit at the module boundary.
279
357
  */
280
358
  function freezeAotIssues(issues) {
281
359
  for (let index = 0; index < issues.length; index += 1) {
@@ -288,8 +366,28 @@ function freezeAotIssues(issues) {
288
366
  return Object.freeze(issues);
289
367
  }
290
368
  /**
291
- * @brief is record.
369
+ * @brief Accept option and guard records before local field reads.
370
+ * @details AOT helpers serialize only portable data because standalone modules cannot close
371
+ * over runtime side tables.
372
+ * @param value Candidate object.
373
+ * @returns True for non-array objects.
292
374
  */
293
375
  function isRecord(value) {
294
376
  return typeof value === "object" && value !== null && !Array.isArray(value);
295
377
  }
378
+ /**
379
+ * @brief Read one own data slot from an AOT input object.
380
+ * @details AOT helpers serialize only portable data because standalone modules cannot close
381
+ * over runtime side tables.
382
+ * @param value Object being normalized.
383
+ * @param key Field name or symbol.
384
+ * @returns Stored field value, or undefined when absent.
385
+ */
386
+ function readOwnDataProperty(value, key) {
387
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
388
+ if (descriptor === undefined ||
389
+ !Object.prototype.hasOwnProperty.call(descriptor, "value")) {
390
+ return undefined;
391
+ }
392
+ return descriptor.value;
393
+ }
@@ -1,110 +1,82 @@
1
1
  import { type DecodeSource, type Decoder, type InferDecoder } from "../decoder/index.js";
2
2
  import type { Guard, Presence, RuntimeValue } from "../guard/index.js";
3
3
  import { type CheckResult } from "../issue/index.js";
4
- /**
5
- * @brief async decode runner.
6
- */
7
4
  type AsyncDecodeRunner<TValue> = (value: unknown) => Promise<CheckResult<TValue>>;
8
- /**
9
- * @brief async predicate.
10
- */
11
5
  type AsyncPredicate<TValue> = (value: TValue) => boolean | Promise<boolean>;
12
- /**
13
- * @brief async mapper.
14
- */
15
6
  type AsyncMapper<TValue, TNext> = (value: TValue) => TNext | Promise<TNext>;
16
7
  /**
17
- * @brief async decoder run symbol.
8
+ * @brief Private runner slot for async decoder instances.
9
+ * @details Decoder helpers keep validation failures explicit in Result values while
10
+ * preserving the original input value.
18
11
  */
19
12
  declare const AsyncDecoderRunSymbol: unique symbol;
20
- /**
21
- * @brief async decode source.
22
- */
23
13
  export type AsyncDecodeSource = DecodeSource | AsyncDecoder<unknown>;
24
- /**
25
- * @brief infer async decoder.
26
- */
27
14
  export type InferAsyncDecoder<TSource> = TSource extends AsyncDecoder<infer TValue> ? TValue : InferDecoder<TSource>;
28
15
  /**
29
- * @brief async decoder.
16
+ * @brief Promise-returning decode pipeline.
17
+ * @details The API keeps validation failures in Result values; rejected
18
+ * promises are reserved for programmer errors thrown by user mappers.
30
19
  */
31
20
  export interface AsyncDecoder<TValue> {
32
- /**
33
- * @brief decode async.
34
- */
35
21
  decodeAsync(value: unknown): Promise<CheckResult<TValue>>;
36
- /**
37
- * @brief refine async.
38
- */
39
22
  refineAsync(predicate: AsyncPredicate<TValue>, name: string): BaseAsyncDecoder<TValue>;
40
- /**
41
- * @brief transform async.
42
- */
43
23
  transformAsync<TNext>(mapper: AsyncMapper<TValue, TNext>): BaseAsyncDecoder<TNext>;
44
- /**
45
- * @brief pipe async.
46
- */
47
24
  pipeAsync<TNext extends AsyncDecodeSource>(next: TNext): BaseAsyncDecoder<InferAsyncDecoder<TNext>>;
48
25
  }
49
26
  /**
50
- * @brief base async decoder.
51
- * @details Owns its state directly; methods expose receiver checks and explicit result flow.
52
- * @invariant Construction leaves the instance in a fully usable state before it escapes.
27
+ * @brief Frozen wrapper around one async decode runner.
28
+ * @details Receiver validation mirrors BaseDecoder so detached method calls do
29
+ * not bypass TypeSea's object construction checks.
53
30
  */
54
31
  export declare class BaseAsyncDecoder<TValue> implements AsyncDecoder<TValue> {
55
32
  private readonly [AsyncDecoderRunSymbol];
56
- /**
57
- * @brief constructor.
58
- * @post The receiver is initialized according to the class invariant before it can be observed.
59
- */
60
33
  constructor(run: AsyncDecodeRunner<TValue>);
61
- /**
62
- * @brief decode async.
63
- */
64
34
  decodeAsync(this: unknown, value: unknown): Promise<CheckResult<TValue>>;
65
- /**
66
- * @brief refine async.
67
- */
68
35
  refineAsync(predicate: AsyncPredicate<TValue>, name: string): BaseAsyncDecoder<TValue>;
69
- /**
70
- * @brief transform async.
71
- */
72
36
  transformAsync<TNext>(mapper: AsyncMapper<TValue, TNext>): BaseAsyncDecoder<TNext>;
73
- /**
74
- * @brief pipe async.
75
- */
76
37
  pipeAsync<TNext extends AsyncDecodeSource>(next: TNext): BaseAsyncDecoder<InferAsyncDecoder<TNext>>;
77
38
  }
78
39
  /**
79
- * @brief async decoder.
40
+ * @brief Wrap a guard, decoder, or async decoder as an async decoder pipeline.
41
+ * @details Decoder helpers keep validation failures explicit in Result values while
42
+ * preserving the original input value.
80
43
  */
81
44
  export declare function asyncDecoder<TValue, TPresence extends Presence>(source: Guard<TValue, TPresence>): BaseAsyncDecoder<RuntimeValue<TValue, TPresence>>;
82
45
  /**
83
- * @brief async decoder.
46
+ * @brief Execute async decoder.
47
+ * @details This helper keeps a local invariant explicit at the module boundary.
84
48
  */
85
49
  export declare function asyncDecoder<TValue>(source: Decoder<TValue> | AsyncDecoder<TValue>): BaseAsyncDecoder<TValue>;
86
50
  /**
87
- * @brief async refine.
51
+ * @brief Build an async decoder and append an async refinement.
52
+ * @details Decoder helpers keep validation failures explicit in Result values while
53
+ * preserving the original input value.
88
54
  */
89
55
  export declare function asyncRefine<TValue, TPresence extends Presence>(source: Guard<TValue, TPresence>, predicate: AsyncPredicate<RuntimeValue<TValue, TPresence>>, name: string): BaseAsyncDecoder<RuntimeValue<TValue, TPresence>>;
90
56
  /**
91
- * @brief async refine.
57
+ * @brief Execute async refine.
58
+ * @details This helper keeps a local invariant explicit at the module boundary.
92
59
  */
93
60
  export declare function asyncRefine<TValue>(source: Decoder<TValue> | AsyncDecoder<TValue>, predicate: AsyncPredicate<TValue>, name: string): BaseAsyncDecoder<TValue>;
94
61
  /**
95
- * @brief async transform.
62
+ * @brief Build an async decoder and append an async mapper.
63
+ * @details Decoder helpers keep validation failures explicit in Result values while
64
+ * preserving the original input value.
96
65
  */
97
66
  export declare function asyncTransform<TValue, TPresence extends Presence, TNext>(source: Guard<TValue, TPresence>, mapper: AsyncMapper<RuntimeValue<TValue, TPresence>, TNext>): BaseAsyncDecoder<TNext>;
98
67
  /**
99
- * @brief async transform.
68
+ * @brief Execute async transform.
69
+ * @details This helper keeps a local invariant explicit at the module boundary.
100
70
  */
101
71
  export declare function asyncTransform<TValue, TNext>(source: Decoder<TValue> | AsyncDecoder<TValue>, mapper: AsyncMapper<TValue, TNext>): BaseAsyncDecoder<TNext>;
102
72
  /**
103
- * @brief async pipe.
73
+ * @brief Execute async pipe.
74
+ * @details This helper keeps a local invariant explicit at the module boundary.
104
75
  */
105
76
  export declare function asyncPipe<TNext extends AsyncDecodeSource>(source: AsyncDecodeSource, next: TNext): BaseAsyncDecoder<InferAsyncDecoder<TNext>>;
106
77
  /**
107
- * @brief is async decoder value.
78
+ * @brief Check async decoder value.
79
+ * @details This helper keeps a local invariant explicit at the module boundary.
108
80
  */
109
81
  export declare function isAsyncDecoderValue(value: unknown): value is AsyncDecoder<unknown>;
110
82
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/async/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/async/index.ts"],"names":[],"mappings":"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"}