@scriptc/compiler 0.3.4 → 0.3.6

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 (316) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +409 -42
  2. package/dist/backend/llvm/array-search.js +1 -1
  3. package/dist/backend/llvm/array-search.js.map +1 -1
  4. package/dist/backend/llvm/call-lifetimes.d.ts +6 -0
  5. package/dist/backend/llvm/call-lifetimes.js +19 -0
  6. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  7. package/dist/backend/llvm/constant-callbacks.d.ts +2 -21
  8. package/dist/backend/llvm/constant-callbacks.js +36 -219
  9. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  10. package/dist/backend/llvm/constant-callbacks.test.js +22 -0
  11. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  12. package/dist/backend/llvm/dense-array-access.d.ts +9 -0
  13. package/dist/backend/llvm/dense-array-access.js +27 -1
  14. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  15. package/dist/backend/llvm/dyn.d.ts +6 -0
  16. package/dist/backend/llvm/dyn.js +71 -7
  17. package/dist/backend/llvm/dyn.js.map +1 -1
  18. package/dist/backend/llvm/emitter.d.ts +120 -2
  19. package/dist/backend/llvm/emitter.js +820 -142
  20. package/dist/backend/llvm/emitter.js.map +1 -1
  21. package/dist/backend/llvm/expr-async.js +17 -7
  22. package/dist/backend/llvm/expr-async.js.map +1 -1
  23. package/dist/backend/llvm/expr-bytes.js +1 -1
  24. package/dist/backend/llvm/expr-callbacks.d.ts +11 -0
  25. package/dist/backend/llvm/expr-callbacks.js +53 -0
  26. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  27. package/dist/backend/llvm/expr-calls.js +88 -2
  28. package/dist/backend/llvm/expr-calls.js.map +1 -1
  29. package/dist/backend/llvm/expr-containers.js +50 -27
  30. package/dist/backend/llvm/expr-containers.js.map +1 -1
  31. package/dist/backend/llvm/expr-dispatch.js +1 -0
  32. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  33. package/dist/backend/llvm/expr-dynamic.js +25 -1
  34. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  35. package/dist/backend/llvm/expr-primitives.d.ts +1 -1
  36. package/dist/backend/llvm/expr-primitives.js +20 -1
  37. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  38. package/dist/backend/llvm/expr-stream-bridges.js +4 -0
  39. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  40. package/dist/backend/llvm/integer-clones.d.ts +103 -0
  41. package/dist/backend/llvm/integer-clones.js +1336 -0
  42. package/dist/backend/llvm/integer-clones.js.map +1 -0
  43. package/dist/backend/llvm/integer-clones.test.d.ts +1 -0
  44. package/dist/backend/llvm/integer-clones.test.js +219 -0
  45. package/dist/backend/llvm/integer-clones.test.js.map +1 -0
  46. package/dist/backend/llvm/lib-datagram.js +14 -0
  47. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  48. package/dist/backend/llvm/lib-dispatch.js +32 -1
  49. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  50. package/dist/backend/llvm/lib-filesystem.js +61 -1
  51. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  52. package/dist/backend/llvm/lib-network.js +21 -3
  53. package/dist/backend/llvm/lib-network.js.map +1 -1
  54. package/dist/backend/llvm/lib-process.js +34 -0
  55. package/dist/backend/llvm/lib-process.js.map +1 -1
  56. package/dist/backend/llvm/lib-shared.js +77 -2
  57. package/dist/backend/llvm/lib-shared.js.map +1 -1
  58. package/dist/backend/llvm/lib-test.js +16 -3
  59. package/dist/backend/llvm/lib-test.js.map +1 -1
  60. package/dist/backend/llvm/lib-tls.js +6 -0
  61. package/dist/backend/llvm/lib-tls.js.map +1 -1
  62. package/dist/backend/llvm/local-array-reads.js +1 -1
  63. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  64. package/dist/backend/llvm/map-entry-fusion.d.ts +28 -0
  65. package/dist/backend/llvm/map-entry-fusion.js +233 -0
  66. package/dist/backend/llvm/map-entry-fusion.js.map +1 -0
  67. package/dist/backend/llvm/map-entry-fusion.test.d.ts +1 -0
  68. package/dist/backend/llvm/map-entry-fusion.test.js +183 -0
  69. package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -0
  70. package/dist/backend/llvm/map-number-lookup.d.ts +2 -0
  71. package/dist/backend/llvm/map-number-lookup.js +1 -1
  72. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  73. package/dist/backend/llvm/map-number-lookup.test.js +10 -11
  74. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  75. package/dist/backend/llvm/map-read-lifetimes.d.ts +2 -0
  76. package/dist/backend/llvm/map-read-lifetimes.js +3 -0
  77. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  78. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  79. package/dist/backend/llvm/nullable-unions.d.ts +6 -3
  80. package/dist/backend/llvm/nullable-unions.js +2 -0
  81. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  82. package/dist/backend/llvm/publish.d.ts +16 -0
  83. package/dist/backend/llvm/publish.js +81 -10
  84. package/dist/backend/llvm/publish.js.map +1 -1
  85. package/dist/backend/llvm/publish.test.d.ts +1 -0
  86. package/dist/backend/llvm/publish.test.js +94 -0
  87. package/dist/backend/llvm/publish.test.js.map +1 -0
  88. package/dist/backend/llvm/record-results.d.ts +1 -1
  89. package/dist/backend/llvm/record-results.js +78 -4
  90. package/dist/backend/llvm/record-results.js.map +1 -1
  91. package/dist/backend/llvm/record-sources.d.ts +7 -0
  92. package/dist/backend/llvm/record-sources.js +14 -0
  93. package/dist/backend/llvm/record-sources.js.map +1 -0
  94. package/dist/backend/llvm/reference-writes.js +1 -0
  95. package/dist/backend/llvm/reference-writes.js.map +1 -1
  96. package/dist/backend/llvm/shapes.d.ts +12 -3
  97. package/dist/backend/llvm/shapes.js +23 -14
  98. package/dist/backend/llvm/shapes.js.map +1 -1
  99. package/dist/backend/llvm/shapes.test.js +5 -3
  100. package/dist/backend/llvm/shapes.test.js.map +1 -1
  101. package/dist/backend/llvm/speculative-integers.d.ts +74 -0
  102. package/dist/backend/llvm/speculative-integers.js +571 -0
  103. package/dist/backend/llvm/speculative-integers.js.map +1 -0
  104. package/dist/backend/llvm/speculative-integers.test.d.ts +1 -0
  105. package/dist/backend/llvm/speculative-integers.test.js +148 -0
  106. package/dist/backend/llvm/speculative-integers.test.js.map +1 -0
  107. package/dist/backend/llvm/string-lifetimes.test.js +75 -1
  108. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  109. package/dist/backend/llvm/walkers.d.ts +17 -0
  110. package/dist/backend/llvm/walkers.js +123 -0
  111. package/dist/backend/llvm/walkers.js.map +1 -1
  112. package/dist/backend/may-throw.js +2 -0
  113. package/dist/backend/may-throw.js.map +1 -1
  114. package/dist/backend/native/contracts.d.ts +2 -1
  115. package/dist/backend/native/executable.js +6 -1
  116. package/dist/backend/native/executable.js.map +1 -1
  117. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  118. package/dist/backend/native/runtime-inputs.js +1 -0
  119. package/dist/backend/native/runtime-inputs.js.map +1 -1
  120. package/dist/backend/runtime-abi.d.ts +2 -2
  121. package/dist/backend/runtime-abi.js +2 -2
  122. package/dist/backend/runtime-pack-targets.test.js +1 -1
  123. package/dist/backend/runtime-pack.d.ts +7 -3
  124. package/dist/backend/runtime-pack.js +12 -6
  125. package/dist/backend/runtime-pack.js.map +1 -1
  126. package/dist/backend/runtime-pack.test.js +16 -7
  127. package/dist/backend/runtime-pack.test.js.map +1 -1
  128. package/dist/contracts/check.js +1 -0
  129. package/dist/contracts/check.js.map +1 -1
  130. package/dist/coverage/surface-manifest.js +3 -3
  131. package/dist/coverage/surface-manifest.js.map +1 -1
  132. package/dist/diagnostics/diagnostic.d.ts +1 -1
  133. package/dist/diagnostics/diagnostic.js +6 -2
  134. package/dist/diagnostics/diagnostic.js.map +1 -1
  135. package/dist/frontend/lowering/builtin-calls.js +13 -0
  136. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  137. package/dist/frontend/lowering/builtins/callable-aliases.js +82 -8
  138. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  139. package/dist/frontend/lowering/builtins/child-process-async.d.ts +8 -6
  140. package/dist/frontend/lowering/builtins/child-process-async.js +45 -29
  141. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  142. package/dist/frontend/lowering/builtins/compression.d.ts +9 -0
  143. package/dist/frontend/lowering/builtins/compression.js +145 -30
  144. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  145. package/dist/frontend/lowering/builtins/crypto.js +12 -1
  146. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  147. package/dist/frontend/lowering/builtins/errors.js +5 -3
  148. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  149. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +6 -0
  150. package/dist/frontend/lowering/builtins/filesystem-calls.js +16 -0
  151. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  152. package/dist/frontend/lowering/builtins/filesystem.d.ts +8 -0
  153. package/dist/frontend/lowering/builtins/filesystem.js +199 -2
  154. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  155. package/dist/frontend/lowering/builtins/fs-streams.d.ts +26 -0
  156. package/dist/frontend/lowering/builtins/fs-streams.js +131 -0
  157. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -0
  158. package/dist/frontend/lowering/builtins/hash-stream.d.ts +12 -0
  159. package/dist/frontend/lowering/builtins/hash-stream.js +80 -0
  160. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -0
  161. package/dist/frontend/lowering/builtins/module-calls.js +17 -3
  162. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  163. package/dist/frontend/lowering/builtins/process.js +9 -2
  164. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  165. package/dist/frontend/lowering/builtins/readline.d.ts +45 -13
  166. package/dist/frontend/lowering/builtins/readline.js +812 -47
  167. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  168. package/dist/frontend/lowering/builtins/workers.d.ts +4 -0
  169. package/dist/frontend/lowering/builtins/workers.js +58 -0
  170. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  171. package/dist/frontend/lowering/class-dynamic-dispatch.js +150 -8
  172. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  173. package/dist/frontend/lowering/class-protocols.d.ts +55 -0
  174. package/dist/frontend/lowering/class-protocols.js +735 -0
  175. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  176. package/dist/frontend/lowering/containers/array-from-async.d.ts +18 -0
  177. package/dist/frontend/lowering/containers/array-from-async.js +282 -0
  178. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -0
  179. package/dist/frontend/lowering/containers/bytes.js +33 -12
  180. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  181. package/dist/frontend/lowering/containers/collection-grouping.js +2 -1
  182. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  183. package/dist/frontend/lowering/containers/collection-methods.js +27 -23
  184. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  185. package/dist/frontend/lowering/devirtualize.js +20 -7
  186. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  187. package/dist/frontend/lowering/divergences.js +188 -15
  188. package/dist/frontend/lowering/divergences.js.map +1 -1
  189. package/dist/frontend/lowering/lower-calls.js +129 -25
  190. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  191. package/dist/frontend/lowering/lower-classes.js +46 -1
  192. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  193. package/dist/frontend/lowering/lower-dgram.js +55 -15
  194. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  195. package/dist/frontend/lowering/lower-event-emitter.d.ts +9 -1
  196. package/dist/frontend/lowering/lower-event-emitter.js +88 -1
  197. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  198. package/dist/frontend/lowering/lower-exprs.d.ts +4 -0
  199. package/dist/frontend/lowering/lower-exprs.js +239 -71
  200. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  201. package/dist/frontend/lowering/lower-inspect.js +49 -3
  202. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  203. package/dist/frontend/lowering/lower-mock.d.ts +11 -1
  204. package/dist/frontend/lowering/lower-mock.js +377 -61
  205. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  206. package/dist/frontend/lowering/lower-modules.js +1 -0
  207. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  208. package/dist/frontend/lowering/lower-server.d.ts +2 -1
  209. package/dist/frontend/lowering/lower-server.js +234 -21
  210. package/dist/frontend/lowering/lower-server.js.map +1 -1
  211. package/dist/frontend/lowering/lower-stmts.js +60 -13
  212. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  213. package/dist/frontend/lowering/lower-stream.d.ts +1 -3
  214. package/dist/frontend/lowering/lower-stream.js +325 -20
  215. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  216. package/dist/frontend/lowering/lower-test.js +147 -48
  217. package/dist/frontend/lowering/lower-test.js.map +1 -1
  218. package/dist/frontend/lowering/lowerer.d.ts +13 -1
  219. package/dist/frontend/lowering/lowerer.js +10 -2
  220. package/dist/frontend/lowering/lowerer.js.map +1 -1
  221. package/dist/frontend/lowering/null-prototype.d.ts +13 -0
  222. package/dist/frontend/lowering/null-prototype.js +33 -0
  223. package/dist/frontend/lowering/null-prototype.js.map +1 -0
  224. package/dist/frontend/lowering/record-sources.d.ts +15 -0
  225. package/dist/frontend/lowering/record-sources.js +46 -0
  226. package/dist/frontend/lowering/record-sources.js.map +1 -0
  227. package/dist/frontend/lowering/surfaces.d.ts +3 -3
  228. package/dist/frontend/lowering/surfaces.js +59 -5
  229. package/dist/frontend/lowering/surfaces.js.map +1 -1
  230. package/dist/frontend/mock-shapes.d.ts +5 -0
  231. package/dist/frontend/mock-shapes.js +27 -2
  232. package/dist/frontend/mock-shapes.js.map +1 -1
  233. package/dist/frontend/program.js +5 -4
  234. package/dist/frontend/program.js.map +1 -1
  235. package/dist/frontend/type-mapper.d.ts +3 -0
  236. package/dist/frontend/type-mapper.js +148 -4
  237. package/dist/frontend/type-mapper.js.map +1 -1
  238. package/dist/index.js +18 -8
  239. package/dist/index.js.map +1 -1
  240. package/dist/ir/analysis.d.ts +10 -0
  241. package/dist/ir/analysis.js +35 -0
  242. package/dist/ir/analysis.js.map +1 -1
  243. package/dist/ir/analysis.test.js +69 -1
  244. package/dist/ir/analysis.test.js.map +1 -1
  245. package/dist/ir/builtin-effects.js +72 -0
  246. package/dist/ir/builtin-effects.js.map +1 -1
  247. package/dist/ir/builtin-signatures.d.ts +1 -1
  248. package/dist/ir/builtin-signatures.js +258 -13
  249. package/dist/ir/builtin-signatures.js.map +1 -1
  250. package/dist/ir/capture-values.d.ts +107 -0
  251. package/dist/ir/capture-values.js +850 -0
  252. package/dist/ir/capture-values.js.map +1 -0
  253. package/dist/ir/capture-values.test.d.ts +1 -0
  254. package/dist/ir/capture-values.test.js +268 -0
  255. package/dist/ir/capture-values.test.js.map +1 -0
  256. package/dist/ir/field-values.d.ts +16 -0
  257. package/dist/ir/field-values.js +128 -0
  258. package/dist/ir/field-values.js.map +1 -0
  259. package/dist/ir/field-values.test.d.ts +1 -0
  260. package/dist/ir/field-values.test.js +160 -0
  261. package/dist/ir/field-values.test.js.map +1 -0
  262. package/dist/ir/final-fields.d.ts +4 -1
  263. package/dist/ir/final-fields.js +11 -3
  264. package/dist/ir/final-fields.js.map +1 -1
  265. package/dist/ir/function-references.test.js +2 -1
  266. package/dist/ir/function-references.test.js.map +1 -1
  267. package/dist/ir/init-only-globals.d.ts +16 -0
  268. package/dist/ir/init-only-globals.js +121 -0
  269. package/dist/ir/init-only-globals.js.map +1 -0
  270. package/dist/ir/init-only-globals.test.d.ts +1 -0
  271. package/dist/ir/init-only-globals.test.js +115 -0
  272. package/dist/ir/init-only-globals.test.js.map +1 -0
  273. package/dist/ir/initializer-bindings.d.ts +18 -1
  274. package/dist/ir/initializer-bindings.js +91 -1
  275. package/dist/ir/initializer-bindings.js.map +1 -1
  276. package/dist/ir/initializer-bindings.test.js +57 -2
  277. package/dist/ir/initializer-bindings.test.js.map +1 -1
  278. package/dist/ir/int32-slots.d.ts +22 -0
  279. package/dist/ir/int32-slots.js +398 -13
  280. package/dist/ir/int32-slots.js.map +1 -1
  281. package/dist/ir/int32-slots.test.js +119 -8
  282. package/dist/ir/int32-slots.test.js.map +1 -1
  283. package/dist/ir/integer-loop-facts.d.ts +27 -1
  284. package/dist/ir/integer-loop-facts.js +239 -7
  285. package/dist/ir/integer-loop-facts.js.map +1 -1
  286. package/dist/ir/integer-ranges.d.ts +8 -5
  287. package/dist/ir/integer-ranges.js +147 -59
  288. package/dist/ir/integer-ranges.js.map +1 -1
  289. package/dist/ir/integer-ranges.test.js +285 -7
  290. package/dist/ir/integer-ranges.test.js.map +1 -1
  291. package/dist/ir/ir.d.ts +22 -1
  292. package/dist/ir/ir.js +4 -0
  293. package/dist/ir/ir.js.map +1 -1
  294. package/dist/ir/property-bags.d.ts +14 -0
  295. package/dist/ir/property-bags.js +121 -0
  296. package/dist/ir/property-bags.js.map +1 -0
  297. package/dist/ir/receiver-readers.d.ts +21 -0
  298. package/dist/ir/receiver-readers.js +217 -0
  299. package/dist/ir/receiver-readers.js.map +1 -0
  300. package/dist/ir/runtime-features.d.ts +3 -1
  301. package/dist/ir/runtime-features.js +102 -7
  302. package/dist/ir/runtime-features.js.map +1 -1
  303. package/dist/ir/runtime-features.test.js +62 -0
  304. package/dist/ir/runtime-features.test.js.map +1 -1
  305. package/dist/ir/traverse.js +4 -0
  306. package/dist/ir/traverse.js.map +1 -1
  307. package/dist/ir/validate.js +71 -3
  308. package/dist/ir/validate.js.map +1 -1
  309. package/dist/ir/validate.test.js +59 -0
  310. package/dist/ir/validate.test.js.map +1 -1
  311. package/dist/library/int-infer.js +3 -0
  312. package/dist/library/int-infer.js.map +1 -1
  313. package/dist/library/ir-policy.js +5 -0
  314. package/dist/library/ir-policy.js.map +1 -1
  315. package/package.json +20 -20
  316. package/surface-manifest.json +57 -19
@@ -173,6 +173,9 @@ export declare const PERF_ENTRY_FIELDS: string[];
173
173
  * PerformanceMeasure values (see mapType). The marker is an always-absent
174
174
  * optional, so dyn conversions and key walks never see it. */
175
175
  export declare function perfEntryShape(shapes: ShapeRegistry, unions: UnionRegistry): string;
176
+ /** The `{ stdout, stderr }` record a promisified exec/execFile call
177
+ * fulfills with (see mapType), in Node's key order. */
178
+ export declare function execResultShape(shapes: ShapeRegistry): string;
176
179
  /** toJSON()'s plain object over an entry: the same fields without the
177
180
  * marker. */
178
181
  export declare function perfEntryJsonShape(shapes: ShapeRegistry): string;
@@ -760,6 +760,14 @@ export function perfEntryShape(shapes, unions) {
760
760
  { name: "startTime", type: F64 },
761
761
  ], false, undefined, PERF_ENTRY_FIELDS);
762
762
  }
763
+ /** The `{ stdout, stderr }` record a promisified exec/execFile call
764
+ * fulfills with (see mapType), in Node's key order. */
765
+ export function execResultShape(shapes) {
766
+ return shapes.intern([
767
+ { name: "stderr", type: STRING },
768
+ { name: "stdout", type: STRING },
769
+ ], false, undefined, ["stdout", "stderr"]);
770
+ }
763
771
  /** toJSON()'s plain object over an entry: the same fields without the
764
772
  * marker. */
765
773
  export function perfEntryJsonShape(shapes) {
@@ -973,13 +981,42 @@ export function isOsConstantsSymbol(symbol, ctx, types = false) {
973
981
  /** worker_threads' Worker and MessagePort: owned runtime handles that keep
974
982
  * their live object representation (DYN) wherever they are stored. */
975
983
  function isWorkerHandleSymbol(symbol, ctx) {
976
- return ((symbol?.name === "Worker" || symbol?.name === "MessagePort") &&
984
+ return ((symbol?.name === "Worker" ||
985
+ symbol?.name === "MessagePort" ||
986
+ symbol?.name === "MessageChannel") &&
977
987
  ctx.checker
978
988
  .declarationsOf(symbol)
979
989
  .some((d) => (ts.isClassDeclaration(d) || ts.isInterfaceDeclaration(d)) &&
980
990
  ctx.isStdlibFile(d.getSourceFile()) &&
981
991
  isDeclaredInAmbientModule(d, "worker_threads")));
982
992
  }
993
+ /** The `{ message: any }` object type (or its union with undefined) that
994
+ * worker_threads declares as receiveMessageOnPort's result. */
995
+ function isReceiveMessageResult(type, ctx) {
996
+ const members = type.isUnionType() ? ts.constituentTypes(type) : [type];
997
+ let found = false;
998
+ for (const member of members) {
999
+ if (member.flags & ts.TypeFlags.Undefined)
1000
+ continue;
1001
+ const decl = member.getSymbol()
1002
+ ? ctx.checker.declarationsOf(member.getSymbol())[0]
1003
+ : undefined;
1004
+ let fn = decl?.parent;
1005
+ while (fn && ts.isUnionTypeNode(fn))
1006
+ fn = fn.parent;
1007
+ if (!decl ||
1008
+ !ts.isTypeLiteralNode(decl) ||
1009
+ !fn ||
1010
+ !ts.isFunctionDeclaration(fn) ||
1011
+ fn.name?.text !== "receiveMessageOnPort" ||
1012
+ !ctx.isStdlibFile(decl.getSourceFile()) ||
1013
+ !isDeclaredInAmbientModule(fn, "worker_threads")) {
1014
+ return false;
1015
+ }
1016
+ found = true;
1017
+ }
1018
+ return found;
1019
+ }
983
1020
  /** True for a type built only from worker handles, null/undefined, and
984
1021
  * arrays of those: values that keep the live DYN representation. */
985
1022
  export function isWorkerHandleType(type, ctx) {
@@ -1062,6 +1099,10 @@ function mapTypeInner(type, ctx) {
1062
1099
  if (moduleId !== null)
1063
1100
  return { kind: "moduleNs", moduleId };
1064
1101
  }
1102
+ // worker_threads.receiveMessageOnPort's `{ message: any } | undefined`:
1103
+ // the runtime's { message } object, a checked-dynamic value.
1104
+ if (isReceiveMessageResult(type, ctx))
1105
+ return DYN;
1065
1106
  // @types/node spells child_process.ExecFileException as an intersection
1066
1107
  // type alias over two Error-derived metadata interfaces. The value is
1067
1108
  // still one ordinary Error; recognize the owned alias before generic
@@ -1713,6 +1754,27 @@ function mapTypeInner(type, ctx) {
1713
1754
  isDeclaredInAmbientModule(d, "readline/promises")))) {
1714
1755
  return F64;
1715
1756
  }
1757
+ // readline.Key: emitKeys' key object stays a checked-dynamic value, so
1758
+ // it keeps Node's own shape (an undefined name, the escape sequences'
1759
+ // code member).
1760
+ if (psym?.name === "Key" &&
1761
+ checker
1762
+ .declarationsOf(psym)
1763
+ .some((d) => ts.isInterfaceDeclaration(d) &&
1764
+ ctx.isStdlibFile(d.getSourceFile()) &&
1765
+ (isDeclaredInAmbientModule(d, "readline") ||
1766
+ isDeclaredInAmbientModule(d, "readline/promises")))) {
1767
+ return DYN;
1768
+ }
1769
+ // readline/promises.Readline: an f64 handle the same way.
1770
+ if (psym?.name === "Readline" &&
1771
+ checker
1772
+ .declarationsOf(psym)
1773
+ .some((d) => (ts.isInterfaceDeclaration(d) || ts.isClassDeclaration(d)) &&
1774
+ ctx.isStdlibFile(d.getSourceFile()) &&
1775
+ isDeclaredInAmbientModule(d, "readline/promises"))) {
1776
+ return F64;
1777
+ }
1716
1778
  // diagnostics_channel.Channel: the channel value is an f64 handle into
1717
1779
  // the runtime's channel registry (the readline.Interface precedent —
1718
1780
  // Node's channels are process-lived too, its WeakRef machinery aside).
@@ -1928,9 +1990,10 @@ function mapTypeInner(type, ctx) {
1928
1990
  // The stdlib Console interface (the global console and node:console
1929
1991
  // Console instances) is a native handle carried by the checked-dynamic
1930
1992
  // representation and consumed by the console method lowerings. The
1931
- // stdlib Disposable (events.addAbortListener's result) is a checked
1932
- // object carrying its Symbol.dispose method.
1933
- if ((psym?.name === "Console" || psym?.name === "Disposable") &&
1993
+ // stdlib Disposable (events.addAbortListener's result) and
1994
+ // AsyncDisposable are checked objects carrying their Symbol.dispose or
1995
+ // Symbol.asyncDispose method.
1996
+ if ((psym?.name === "Console" || psym?.name === "Disposable" || psym?.name === "AsyncDisposable") &&
1934
1997
  checker
1935
1998
  .declarationsOf(psym)
1936
1999
  .some((d) => ts.isInterfaceDeclaration(d) && ctx.isStdlibFile(d.getSourceFile()))) {
@@ -2323,6 +2386,18 @@ function mapTypeInner(type, ctx) {
2323
2386
  isDeclaredInAmbientModule(d, "zlib"))) {
2324
2387
  return { kind: "object", className: "%Transform" };
2325
2388
  }
2389
+ // fs.ReadStream / fs.WriteStream (the shipped fallback declarations):
2390
+ // their instances are runtime Readable / Writable streams
2391
+ // (scr_fs_stream.c).
2392
+ if ((psym?.name === "ReadStream" || psym?.name === "WriteStream") &&
2393
+ checker
2394
+ .declarationsOf(psym)
2395
+ .some((d) => ts.isClassDeclaration(d) &&
2396
+ ctx.isStdlibFile(d.getSourceFile()) &&
2397
+ !isNodeTypesPath(d.getSourceFile().fileName) &&
2398
+ isDeclaredInAmbientModule(d, "fs"))) {
2399
+ return { kind: "object", className: psym.name === "ReadStream" ? "%Readable" : "%Writable" };
2400
+ }
2326
2401
  if ((psym?.name === "Readable" &&
2327
2402
  checker
2328
2403
  .declarationsOf(psym)
@@ -2602,6 +2677,17 @@ function mapTypeInner(type, ctx) {
2602
2677
  ], false, undefined, ["address", "family"]),
2603
2678
  };
2604
2679
  }
2680
+ // tlsSocket.getCipher()'s { name, standardName, version }.
2681
+ if (isStdlibInterface("CipherNameAndProtocol")) {
2682
+ return {
2683
+ kind: "record",
2684
+ shapeId: ctx.shapes.intern([
2685
+ { name: "name", type: STRING },
2686
+ { name: "standardName", type: STRING },
2687
+ { name: "version", type: STRING },
2688
+ ], false, undefined, ["name", "standardName", "version"]),
2689
+ };
2690
+ }
2605
2691
  // child_process.ExecFileSyncOptionsWithStringEncoding: the exec-options
2606
2692
  // interface interned explicitly on the AddressInfo pattern, so a TYPED
2607
2693
  // options value (`const commandOptions: ExecFileSyncOptions... = {...}`,
@@ -2850,6 +2936,28 @@ function mapTypeInner(type, ctx) {
2850
2936
  ], false, undefined, ["uid", "gid", "username", "homedir", "shell"]),
2851
2937
  };
2852
2938
  }
2939
+ // The promisified exec/execFile result `{ stdout: string; stderr: string }`:
2940
+ // an anonymous type literal (@types/node's __promisify__ overloads in
2941
+ // child_process, the shipped fallback's promisify overloads in util),
2942
+ // so it maps by provenance and exact shape, interned as the
2943
+ // %execFileAsync/%execAsync helpers build it. Node builds the object as
2944
+ // { stdout, stderr }. The Buffer-typed literals do not match and stay
2945
+ // unmapped.
2946
+ if (psym &&
2947
+ checker
2948
+ .declarationsOf(psym)
2949
+ .some((d) => ts.isTypeLiteralNode(d) &&
2950
+ ctx.isStdlibFile(d.getSourceFile()) &&
2951
+ (isDeclaredInAmbientModule(d, "child_process") || isDeclaredInAmbientModule(d, "util")))) {
2952
+ const props = checker.getPropertiesOfType(widened);
2953
+ if (props.length === 2 &&
2954
+ props.every((p) => (p.name === "stdout" || p.name === "stderr") &&
2955
+ (p.flags & ts.SymbolFlags.Optional) === 0 &&
2956
+ (checker.getTypeOfSymbol(p).flags & ts.TypeFlags.String) !== 0) &&
2957
+ props[0].name !== props[1].name) {
2958
+ return { kind: "record", shapeId: execResultShape(ctx.shapes) };
2959
+ }
2960
+ }
2853
2961
  // crypto.X509Certificate — the Dirent-style data record: THREE visible
2854
2962
  // fields (fingerprint and the validFrom/validTo validity window, all
2855
2963
  // computed at construction by the new-expression lowering). Module-
@@ -2889,6 +2997,16 @@ function mapTypeInner(type, ctx) {
2889
2997
  ctx.isStdlibFile(d.getSourceFile()))) {
2890
2998
  return { kind: "record", shapeId: perfEntryShape(ctx.shapes, ctx.unions) };
2891
2999
  }
3000
+ // readline's getCursorPos() record, in Node's key order ({ cols, rows }).
3001
+ if (isStdlibInterface("CursorPos")) {
3002
+ return {
3003
+ kind: "record",
3004
+ shapeId: ctx.shapes.intern([
3005
+ { name: "cols", type: F64 },
3006
+ { name: "rows", type: F64 },
3007
+ ], false, undefined, ["cols", "rows"]),
3008
+ };
3009
+ }
2892
3010
  // process.memoryUsage()'s record, in Node's key order.
2893
3011
  if (isStdlibInterface("MemoryUsage")) {
2894
3012
  const names = ["rss", "heapTotal", "heapUsed", "external", "arrayBuffers"];
@@ -3046,6 +3164,14 @@ function mapTypeInner(type, ctx) {
3046
3164
  checker.getPropertiesOfType(widened).length > 0)
3047
3165
  return DYN;
3048
3166
  }
3167
+ // A union of such hybrids that all map to ONE record is that record:
3168
+ // node:test's Mock<F | Implementation> distributes to (F & { mock }) |
3169
+ // (Implementation & { mock }), and the two function types can map alike.
3170
+ if (widened.isUnionType()) {
3171
+ const hybrid = mapUniformHybridUnion(widened, ctx);
3172
+ if (hybrid)
3173
+ return hybrid;
3174
+ }
3049
3175
  const callSigs = checker.getCallSignatures(widened);
3050
3176
  if (callSigs.length === 1) {
3051
3177
  const sig = callSigs[0];
@@ -4156,6 +4282,23 @@ function mapHybridCallableIntersection(widened, ctx) {
4156
4282
  fields.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));
4157
4283
  return { kind: "record", shapeId: shapes.intern(fields, false, undefined, declaredOrder) };
4158
4284
  }
4285
+ /** The record every part of a union of function-with-properties
4286
+ * intersections maps to, or null when a part does not map to the same one. */
4287
+ function mapUniformHybridUnion(widened, ctx) {
4288
+ const parts = ts.constituentTypes(widened);
4289
+ if (!parts.every((p) => p.isIntersectionType()))
4290
+ return null;
4291
+ let first = null;
4292
+ for (const part of parts) {
4293
+ if (ctx.checker.getConstructSignatures(part).length > 0)
4294
+ return null;
4295
+ const mapped = mapHybridCallableIntersection(part, ctx);
4296
+ if (!mapped || (first && typeKey(mapped) !== typeKey(first)))
4297
+ return null;
4298
+ first ??= mapped;
4299
+ }
4300
+ return first;
4301
+ }
4159
4302
  /** Optional standard error metadata refines an existing Error identity;
4160
4303
  * it does not allocate a structural copy or extend its native layout. */
4161
4304
  function mapErrorMetadataIntersection(type, ctx) {
@@ -4174,6 +4317,7 @@ function mapErrorMetadataIntersection(type, ctx) {
4174
4317
  "TypeError",
4175
4318
  "URIError",
4176
4319
  "AggregateError",
4320
+ "SuppressedError",
4177
4321
  ].includes(symbol.name) &&
4178
4322
  ctx.checker.declarationsOf(symbol).some((decl) => ctx.isStdlibFile(decl.getSourceFile())));
4179
4323
  });