@scriptc/compiler 0.4.8 → 0.4.9

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 (536) hide show
  1. package/ambient/node-fallback/buffer.d.ts +2 -0
  2. package/ambient/node-fallback/child_process.d.ts +9 -3
  3. package/ambient/node-fallback/dns-promises.d.ts +25 -0
  4. package/ambient/node-fallback/dns.d.ts +29 -0
  5. package/ambient/node-fallback/test.d.ts +7 -0
  6. package/ambient/scriptc-node-fallback.d.ts +145 -2
  7. package/ambient/scriptc-overrides.d.ts +22 -13
  8. package/dist/backend/build-cache.d.ts +1 -1
  9. package/dist/backend/build-cache.js +1 -1
  10. package/dist/backend/build-cache.js.map +1 -1
  11. package/dist/backend/cache-root.d.ts +7 -0
  12. package/dist/backend/cache-root.js +27 -0
  13. package/dist/backend/cache-root.js.map +1 -1
  14. package/dist/backend/executable-features.js +5 -1
  15. package/dist/backend/executable-features.js.map +1 -1
  16. package/dist/backend/link-plan.js +7 -1
  17. package/dist/backend/link-plan.js.map +1 -1
  18. package/dist/backend/llvm/bytes-loop-versions.d.ts +12 -1
  19. package/dist/backend/llvm/bytes-loop-versions.js +107 -30
  20. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  21. package/dist/backend/llvm/bytes-loop-versions.test.js +96 -0
  22. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  23. package/dist/backend/llvm/checked-value-lifetimes.js +1 -0
  24. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  25. package/dist/backend/llvm/classes.d.ts +16 -5
  26. package/dist/backend/llvm/classes.js +34 -6
  27. package/dist/backend/llvm/classes.js.map +1 -1
  28. package/dist/backend/llvm/classes.test.js +21 -2
  29. package/dist/backend/llvm/classes.test.js.map +1 -1
  30. package/dist/backend/llvm/common.d.ts +9 -0
  31. package/dist/backend/llvm/common.js +9 -0
  32. package/dist/backend/llvm/common.js.map +1 -1
  33. package/dist/backend/llvm/cpu-dispatch.d.ts +36 -2
  34. package/dist/backend/llvm/cpu-dispatch.js +96 -2
  35. package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
  36. package/dist/backend/llvm/dense-array-access.d.ts +5 -2
  37. package/dist/backend/llvm/dense-array-access.js +16 -12
  38. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  39. package/dist/backend/llvm/dense-array-access.test.js +3 -1
  40. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  41. package/dist/backend/llvm/dyn.d.ts +24 -0
  42. package/dist/backend/llvm/dyn.js +117 -3
  43. package/dist/backend/llvm/dyn.js.map +1 -1
  44. package/dist/backend/llvm/emit-function.js +6 -0
  45. package/dist/backend/llvm/emit-function.js.map +1 -1
  46. package/dist/backend/llvm/emit-journal.d.ts +1 -0
  47. package/dist/backend/llvm/emit-journal.js.map +1 -1
  48. package/dist/backend/llvm/emit-module.js +48 -5
  49. package/dist/backend/llvm/emit-module.js.map +1 -1
  50. package/dist/backend/llvm/emit-module.test.js +41 -0
  51. package/dist/backend/llvm/emit-module.test.js.map +1 -1
  52. package/dist/backend/llvm/emit-statements.js +11 -0
  53. package/dist/backend/llvm/emit-statements.js.map +1 -1
  54. package/dist/backend/llvm/emitter.d.ts +87 -7
  55. package/dist/backend/llvm/emitter.js +136 -15
  56. package/dist/backend/llvm/emitter.js.map +1 -1
  57. package/dist/backend/llvm/expr-async.js +28 -6
  58. package/dist/backend/llvm/expr-async.js.map +1 -1
  59. package/dist/backend/llvm/expr-containers.js +19 -5
  60. package/dist/backend/llvm/expr-containers.js.map +1 -1
  61. package/dist/backend/llvm/expr-dynamic.js +29 -1
  62. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  63. package/dist/backend/llvm/expr-primitives.js +104 -6
  64. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  65. package/dist/backend/llvm/expr-records.js +15 -1
  66. package/dist/backend/llvm/expr-records.js.map +1 -1
  67. package/dist/backend/llvm/expr-stream-bridges.js +53 -5
  68. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  69. package/dist/backend/llvm/inline-arrays.js +1 -1
  70. package/dist/backend/llvm/inline-arrays.js.map +1 -1
  71. package/dist/backend/llvm/js-ic.js +126 -2
  72. package/dist/backend/llvm/js-ic.js.map +1 -1
  73. package/dist/backend/llvm/lanes.d.ts +38 -0
  74. package/dist/backend/llvm/lanes.js +778 -0
  75. package/dist/backend/llvm/lanes.js.map +1 -0
  76. package/dist/backend/llvm/lanes.test.d.ts +1 -0
  77. package/dist/backend/llvm/lanes.test.js +402 -0
  78. package/dist/backend/llvm/lanes.test.js.map +1 -0
  79. package/dist/backend/llvm/lib-dispatch.js +9 -4
  80. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  81. package/dist/backend/llvm/lib-network.js +20 -0
  82. package/dist/backend/llvm/lib-network.js.map +1 -1
  83. package/dist/backend/llvm/lib-shared.js +27 -0
  84. package/dist/backend/llvm/lib-shared.js.map +1 -1
  85. package/dist/backend/llvm/lib-test.js +11 -0
  86. package/dist/backend/llvm/lib-test.js.map +1 -1
  87. package/dist/backend/llvm/local-array-reads.js +2 -2
  88. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  89. package/dist/backend/llvm/map-number-lookup.js +8 -2
  90. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  91. package/dist/backend/llvm/nullable-unions.js +5 -2
  92. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  93. package/dist/backend/llvm/publish.d.ts +3 -0
  94. package/dist/backend/llvm/publish.js +2 -2
  95. package/dist/backend/llvm/publish.js.map +1 -1
  96. package/dist/backend/llvm/reference-writes.js +1 -0
  97. package/dist/backend/llvm/reference-writes.js.map +1 -1
  98. package/dist/backend/llvm/region-groups.js +43 -4
  99. package/dist/backend/llvm/region-groups.js.map +1 -1
  100. package/dist/backend/llvm/region-groups.test.js +79 -0
  101. package/dist/backend/llvm/region-groups.test.js.map +1 -1
  102. package/dist/backend/llvm/runtime-registries.test.js +32 -1
  103. package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
  104. package/dist/backend/llvm/shapes.js +10 -1
  105. package/dist/backend/llvm/shapes.js.map +1 -1
  106. package/dist/backend/llvm/string-reads.d.ts +1 -1
  107. package/dist/backend/llvm/string-reads.js +1 -1
  108. package/dist/backend/llvm/string-reads.js.map +1 -1
  109. package/dist/backend/llvm/unwind-abi.js +24 -2
  110. package/dist/backend/llvm/unwind-abi.js.map +1 -1
  111. package/dist/backend/llvm/unwind-abi.test.js +38 -0
  112. package/dist/backend/llvm/unwind-abi.test.js.map +1 -1
  113. package/dist/backend/llvm/walkers.d.ts +3 -0
  114. package/dist/backend/llvm/walkers.js +20 -2
  115. package/dist/backend/llvm/walkers.js.map +1 -1
  116. package/dist/backend/native/contracts.d.ts +15 -3
  117. package/dist/backend/native/executable.js +19 -5
  118. package/dist/backend/native/executable.js.map +1 -1
  119. package/dist/backend/native-codegen-core.d.ts +20 -0
  120. package/dist/backend/native-codegen-core.js +15 -0
  121. package/dist/backend/native-codegen-core.js.map +1 -1
  122. package/dist/backend/native-codegen.d.ts +5 -0
  123. package/dist/backend/native-codegen.js +62 -8
  124. package/dist/backend/native-codegen.js.map +1 -1
  125. package/dist/backend/native-codegen.test.js +48 -8
  126. package/dist/backend/native-codegen.test.js.map +1 -1
  127. package/dist/backend/native-link-info-core.d.ts +27 -3
  128. package/dist/backend/native-link-info-core.js.map +1 -1
  129. package/dist/backend/native-link-info.test.js +17 -1
  130. package/dist/backend/native-link-info.test.js.map +1 -1
  131. package/dist/backend/native-toolchain.d.ts +1 -1
  132. package/dist/backend/native-toolchain.js +1 -1
  133. package/dist/backend/native-toolchain.js.map +1 -1
  134. package/dist/backend/native-toolchain.test.js +14 -1
  135. package/dist/backend/native-toolchain.test.js.map +1 -1
  136. package/dist/backend/runtime-pack-core.d.ts +9 -3
  137. package/dist/backend/runtime-pack-core.js +6 -1
  138. package/dist/backend/runtime-pack-core.js.map +1 -1
  139. package/dist/backend/runtime-pack.test.js +32 -1
  140. package/dist/backend/runtime-pack.test.js.map +1 -1
  141. package/dist/backend/targets.d.ts +9 -1
  142. package/dist/backend/targets.js +11 -2
  143. package/dist/backend/targets.js.map +1 -1
  144. package/dist/backend/targets.test.js +6 -0
  145. package/dist/backend/targets.test.js.map +1 -1
  146. package/dist/cli/command.js +15 -1
  147. package/dist/cli/command.js.map +1 -1
  148. package/dist/cli/host.d.ts +6 -0
  149. package/dist/cli/mcp.d.ts +72 -0
  150. package/dist/cli/mcp.js +601 -0
  151. package/dist/cli/mcp.js.map +1 -0
  152. package/dist/cli/mcp.test.d.ts +1 -0
  153. package/dist/cli/mcp.test.js +380 -0
  154. package/dist/cli/mcp.test.js.map +1 -0
  155. package/dist/cli/output-options.d.ts +1 -0
  156. package/dist/cli/output-options.js +3 -0
  157. package/dist/cli/output-options.js.map +1 -1
  158. package/dist/cli/usage.d.ts +51 -1
  159. package/dist/cli/usage.js +709 -186
  160. package/dist/cli/usage.js.map +1 -1
  161. package/dist/compat/fetch-profile.js +9 -4
  162. package/dist/compat/fetch-profile.js.map +1 -1
  163. package/dist/compile-types.d.ts +17 -0
  164. package/dist/coverage/report.d.ts +5 -9
  165. package/dist/coverage/report.js.map +1 -1
  166. package/dist/executable/executable-cache.d.ts +17 -3
  167. package/dist/executable/executable-cache.js +17 -3
  168. package/dist/executable/executable-cache.js.map +1 -1
  169. package/dist/executable/prepare.js +87 -10
  170. package/dist/executable/prepare.js.map +1 -1
  171. package/dist/frontend/analysis.js +3 -2
  172. package/dist/frontend/analysis.js.map +1 -1
  173. package/dist/frontend/canon-map.js +13 -8
  174. package/dist/frontend/canon-map.js.map +1 -1
  175. package/dist/frontend/decl-projection.d.ts +18 -0
  176. package/dist/frontend/decl-projection.js +90 -22
  177. package/dist/frontend/decl-projection.js.map +1 -1
  178. package/dist/frontend/decl-projection.test.js +47 -1
  179. package/dist/frontend/decl-projection.test.js.map +1 -1
  180. package/dist/frontend/default-library.d.ts +10 -0
  181. package/dist/frontend/default-library.js +43 -0
  182. package/dist/frontend/default-library.js.map +1 -0
  183. package/dist/frontend/fork-target.js +54 -9
  184. package/dist/frontend/fork-target.js.map +1 -1
  185. package/dist/frontend/fork-target.test.js +82 -0
  186. package/dist/frontend/fork-target.test.js.map +1 -1
  187. package/dist/frontend/inferred-js-diagnostics.test.js +73 -0
  188. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  189. package/dist/frontend/lowering/abstract-equality.d.ts +2 -1
  190. package/dist/frontend/lowering/abstract-equality.js +7 -1
  191. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  192. package/dist/frontend/lowering/array-values.js +2 -2
  193. package/dist/frontend/lowering/array-values.js.map +1 -1
  194. package/dist/frontend/lowering/assertion-members.js +52 -2
  195. package/dist/frontend/lowering/assertion-members.js.map +1 -1
  196. package/dist/frontend/lowering/builtin-namespaces.d.ts +5 -0
  197. package/dist/frontend/lowering/builtin-namespaces.js +19 -12
  198. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
  199. package/dist/frontend/lowering/builtins/callable-aliases.js +42 -6
  200. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  201. package/dist/frontend/lowering/builtins/child-process.d.ts +12 -11
  202. package/dist/frontend/lowering/builtins/child-process.js +235 -38
  203. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  204. package/dist/frontend/lowering/builtins/compression.d.ts +6 -1
  205. package/dist/frontend/lowering/builtins/compression.js +3 -3
  206. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  207. package/dist/frontend/lowering/builtins/constants.js +2 -2
  208. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  209. package/dist/frontend/lowering/builtins/crypto.d.ts +3 -1
  210. package/dist/frontend/lowering/builtins/crypto.js +9 -1
  211. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  212. package/dist/frontend/lowering/builtins/dates.js +26 -6
  213. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  214. package/dist/frontend/lowering/builtins/environment.d.ts +13 -1
  215. package/dist/frontend/lowering/builtins/environment.js +15 -4
  216. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  217. package/dist/frontend/lowering/builtins/module-bindings.d.ts +33 -0
  218. package/dist/frontend/lowering/builtins/module-bindings.js +213 -11
  219. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  220. package/dist/frontend/lowering/builtins/module-resolution.d.ts +9 -2
  221. package/dist/frontend/lowering/builtins/module-resolution.js +187 -19
  222. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  223. package/dist/frontend/lowering/builtins/performance.js +1 -1
  224. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  225. package/dist/frontend/lowering/builtins/process.js +40 -2
  226. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  227. package/dist/frontend/lowering/builtins/promises.js +33 -0
  228. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  229. package/dist/frontend/lowering/builtins/readline.d.ts +9 -5
  230. package/dist/frontend/lowering/builtins/readline.js +184 -75
  231. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  232. package/dist/frontend/lowering/builtins/url.d.ts +4 -0
  233. package/dist/frontend/lowering/builtins/url.js +6 -0
  234. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  235. package/dist/frontend/lowering/call-arguments.js +15 -0
  236. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  237. package/dist/frontend/lowering/callable-properties.d.ts +34 -0
  238. package/dist/frontend/lowering/callable-properties.js +210 -0
  239. package/dist/frontend/lowering/callable-properties.js.map +1 -0
  240. package/dist/frontend/lowering/cjs-inline-require.d.ts +16 -0
  241. package/dist/frontend/lowering/cjs-inline-require.js +105 -0
  242. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
  243. package/dist/frontend/lowering/cjs-inline-require.test.d.ts +1 -0
  244. package/dist/frontend/lowering/cjs-inline-require.test.js +61 -0
  245. package/dist/frontend/lowering/cjs-inline-require.test.js.map +1 -0
  246. package/dist/frontend/lowering/class-dynamic-dispatch.js +82 -2
  247. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  248. package/dist/frontend/lowering/class-protocols.d.ts +57 -4
  249. package/dist/frontend/lowering/class-protocols.js +597 -30
  250. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  251. package/dist/frontend/lowering/class-unions.js +2 -2
  252. package/dist/frontend/lowering/class-unions.js.map +1 -1
  253. package/dist/frontend/lowering/coercions/function-adapters.d.ts +12 -0
  254. package/dist/frontend/lowering/coercions/function-adapters.js +62 -0
  255. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  256. package/dist/frontend/lowering/coercions/structural-plans.js +56 -1
  257. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  258. package/dist/frontend/lowering/coercions/structural.js +9 -4
  259. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  260. package/dist/frontend/lowering/collection-ingestion.d.ts +9 -0
  261. package/dist/frontend/lowering/collection-ingestion.js +115 -41
  262. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  263. package/dist/frontend/lowering/containers/array-callbacks.js +16 -0
  264. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  265. package/dist/frontend/lowering/containers/bytes.js +66 -10
  266. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  267. package/dist/frontend/lowering/containers/collection-methods.js +61 -5
  268. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  269. package/dist/frontend/lowering/containers/filter-predicates.js +11 -0
  270. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
  271. package/dist/frontend/lowering/containers/indexed-objects.d.ts +15 -0
  272. package/dist/frontend/lowering/containers/indexed-objects.js +213 -30
  273. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  274. package/dist/frontend/lowering/error-name-order.d.ts +16 -0
  275. package/dist/frontend/lowering/error-name-order.js +61 -0
  276. package/dist/frontend/lowering/error-name-order.js.map +1 -1
  277. package/dist/frontend/lowering/expressions/asserted-receiver.d.ts +17 -0
  278. package/dist/frontend/lowering/expressions/asserted-receiver.js +123 -1
  279. package/dist/frontend/lowering/expressions/asserted-receiver.js.map +1 -1
  280. package/dist/frontend/lowering/expressions/binary.js +147 -20
  281. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  282. package/dist/frontend/lowering/expressions/element-access.js +63 -14
  283. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  284. package/dist/frontend/lowering/expressions/erased-delete.d.ts +59 -0
  285. package/dist/frontend/lowering/expressions/erased-delete.js +247 -0
  286. package/dist/frontend/lowering/expressions/erased-delete.js.map +1 -0
  287. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +10 -0
  288. package/dist/frontend/lowering/expressions/hosted-narrowing.js +48 -1
  289. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
  290. package/dist/frontend/lowering/expressions/identifiers.js +20 -0
  291. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  292. package/dist/frontend/lowering/expressions/narrowing.d.ts +7 -2
  293. package/dist/frontend/lowering/expressions/narrowing.js +77 -45
  294. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  295. package/dist/frontend/lowering/expressions/object-literals.js +62 -19
  296. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  297. package/dist/frontend/lowering/expressions/optional-chains.js +19 -0
  298. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  299. package/dist/frontend/lowering/expressions/property-access.d.ts +7 -7
  300. package/dist/frontend/lowering/expressions/property-access.js +247 -48
  301. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  302. package/dist/frontend/lowering/expressions/relational.d.ts +1 -0
  303. package/dist/frontend/lowering/expressions/relational.js +18 -8
  304. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  305. package/dist/frontend/lowering/expressions/union-fields.js +11 -5
  306. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  307. package/dist/frontend/lowering/expressions/updates.js +121 -11
  308. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  309. package/dist/frontend/lowering/function-context.d.ts +10 -0
  310. package/dist/frontend/lowering/function-context.js +36 -0
  311. package/dist/frontend/lowering/function-context.js.map +1 -1
  312. package/dist/frontend/lowering/function-returns.js +8 -8
  313. package/dist/frontend/lowering/function-returns.js.map +1 -1
  314. package/dist/frontend/lowering/handle-properties.d.ts +62 -3
  315. package/dist/frontend/lowering/handle-properties.js +674 -26
  316. package/dist/frontend/lowering/handle-properties.js.map +1 -1
  317. package/dist/frontend/lowering/handle-properties.test.js +95 -2
  318. package/dist/frontend/lowering/handle-properties.test.js.map +1 -1
  319. package/dist/frontend/lowering/lower-builtin-values.d.ts +12 -0
  320. package/dist/frontend/lowering/lower-builtin-values.js +44 -0
  321. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  322. package/dist/frontend/lowering/lower-calls.js +328 -136
  323. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  324. package/dist/frontend/lowering/lower-classes.js +82 -17
  325. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  326. package/dist/frontend/lowering/lower-event-emitter.js +113 -9
  327. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  328. package/dist/frontend/lowering/lower-expando.d.ts +13 -21
  329. package/dist/frontend/lowering/lower-expando.js +90 -126
  330. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  331. package/dist/frontend/lowering/lower-exprs.js +2 -2
  332. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  333. package/dist/frontend/lowering/lower-functions.js +65 -0
  334. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  335. package/dist/frontend/lowering/lower-inspect.js +471 -0
  336. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  337. package/dist/frontend/lowering/lower-modules.js +36 -10
  338. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  339. package/dist/frontend/lowering/lower-node-island.js +28 -0
  340. package/dist/frontend/lowering/lower-node-island.js.map +1 -1
  341. package/dist/frontend/lowering/lower-server.d.ts +53 -7
  342. package/dist/frontend/lowering/lower-server.js +213 -42
  343. package/dist/frontend/lowering/lower-server.js.map +1 -1
  344. package/dist/frontend/lowering/lower-stdlib.js +50 -7
  345. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  346. package/dist/frontend/lowering/lower-stmts.d.ts +24 -0
  347. package/dist/frontend/lowering/lower-stmts.js +463 -220
  348. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  349. package/dist/frontend/lowering/lower-stream.js +2 -2
  350. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  351. package/dist/frontend/lowering/lower-test.js +71 -2
  352. package/dist/frontend/lowering/lower-test.js.map +1 -1
  353. package/dist/frontend/lowering/lowerer.d.ts +81 -10
  354. package/dist/frontend/lowering/lowerer.js +319 -72
  355. package/dist/frontend/lowering/lowerer.js.map +1 -1
  356. package/dist/frontend/lowering/new-target.js +10 -2
  357. package/dist/frontend/lowering/new-target.js.map +1 -1
  358. package/dist/frontend/lowering/nullish-empty-pattern.js +3 -3
  359. package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -1
  360. package/dist/frontend/lowering/partial-assertions.js +30 -5
  361. package/dist/frontend/lowering/partial-assertions.js.map +1 -1
  362. package/dist/frontend/lowering/primitive-throws.js +91 -1
  363. package/dist/frontend/lowering/primitive-throws.js.map +1 -1
  364. package/dist/frontend/lowering/primitive-wrappers.d.ts +9 -0
  365. package/dist/frontend/lowering/primitive-wrappers.js +2 -2
  366. package/dist/frontend/lowering/primitive-wrappers.js.map +1 -1
  367. package/dist/frontend/lowering/promise-executor-adapter.js +5 -2
  368. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
  369. package/dist/frontend/lowering/record-links.js +7 -2
  370. package/dist/frontend/lowering/record-links.js.map +1 -1
  371. package/dist/frontend/lowering/surfaces.d.ts +4 -0
  372. package/dist/frontend/lowering/surfaces.js +118 -2
  373. package/dist/frontend/lowering/surfaces.js.map +1 -1
  374. package/dist/frontend/lowering/surfaces.test.d.ts +1 -0
  375. package/dist/frontend/lowering/surfaces.test.js +31 -0
  376. package/dist/frontend/lowering/surfaces.test.js.map +1 -0
  377. package/dist/frontend/mock-shapes.js +3 -3
  378. package/dist/frontend/mock-shapes.js.map +1 -1
  379. package/dist/frontend/npm-static-ladder.d.ts +21 -0
  380. package/dist/frontend/npm-static-ladder.js +2 -0
  381. package/dist/frontend/npm-static-ladder.js.map +1 -0
  382. package/dist/frontend/npm-static-ladder.test.d.ts +1 -0
  383. package/dist/frontend/npm-static-ladder.test.js +138 -0
  384. package/dist/frontend/npm-static-ladder.test.js.map +1 -0
  385. package/dist/frontend/npm-static-status.d.ts +15 -0
  386. package/dist/frontend/npm-static-status.js +2 -0
  387. package/dist/frontend/npm-static-status.js.map +1 -0
  388. package/dist/frontend/package-shims.js +1 -1
  389. package/dist/frontend/package-shims.js.map +1 -1
  390. package/dist/frontend/pipeline.d.ts +1 -1
  391. package/dist/frontend/pipeline.js +222 -25
  392. package/dist/frontend/pipeline.js.map +1 -1
  393. package/dist/frontend/program-analysis.d.ts +4 -0
  394. package/dist/frontend/program-analysis.js +6 -0
  395. package/dist/frontend/program-analysis.js.map +1 -1
  396. package/dist/frontend/program.js +258 -32
  397. package/dist/frontend/program.js.map +1 -1
  398. package/dist/frontend/program.test.js +30 -0
  399. package/dist/frontend/program.test.js.map +1 -1
  400. package/dist/frontend/resolve.js +29 -5
  401. package/dist/frontend/resolve.js.map +1 -1
  402. package/dist/frontend/resolve.test.js +40 -0
  403. package/dist/frontend/resolve.test.js.map +1 -1
  404. package/dist/frontend/services.d.ts +8 -0
  405. package/dist/frontend/services.js +7 -0
  406. package/dist/frontend/services.js.map +1 -1
  407. package/dist/frontend/ts7/checker.d.ts +7 -0
  408. package/dist/frontend/ts7/checker.js +12 -0
  409. package/dist/frontend/ts7/checker.js.map +1 -1
  410. package/dist/frontend/ts7/checker.test.js +1 -0
  411. package/dist/frontend/ts7/checker.test.js.map +1 -1
  412. package/dist/frontend/ts7/program-host.d.ts +39 -2
  413. package/dist/frontend/ts7/program-host.js +62 -8
  414. package/dist/frontend/ts7/program-host.js.map +1 -1
  415. package/dist/frontend/ts7/program-host.test.js +33 -0
  416. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  417. package/dist/frontend/ts7/session-cache.d.ts +5 -1
  418. package/dist/frontend/ts7/session-cache.js +7 -1
  419. package/dist/frontend/ts7/session-cache.js.map +1 -1
  420. package/dist/frontend/ts7/session-cache.test.js +37 -0
  421. package/dist/frontend/ts7/session-cache.test.js.map +1 -1
  422. package/dist/frontend/ts7/session.js +19 -1
  423. package/dist/frontend/ts7/session.js.map +1 -1
  424. package/dist/frontend/ts7/source-parser.d.ts +17 -2
  425. package/dist/frontend/ts7/source-parser.js +61 -2
  426. package/dist/frontend/ts7/source-parser.js.map +1 -1
  427. package/dist/frontend/ts7/source-parser.test.js +55 -2
  428. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  429. package/dist/frontend/tsc-codes.d.ts +3 -2
  430. package/dist/frontend/tsc-codes.js +129 -22
  431. package/dist/frontend/tsc-codes.js.map +1 -1
  432. package/dist/frontend/type-mapper.d.ts +5 -11
  433. package/dist/frontend/type-mapper.js +380 -70
  434. package/dist/frontend/type-mapper.js.map +1 -1
  435. package/dist/index.d.ts +1 -1
  436. package/dist/index.js +67 -7
  437. package/dist/index.js.map +1 -1
  438. package/dist/ir/builtin-effects.js +29 -0
  439. package/dist/ir/builtin-effects.js.map +1 -1
  440. package/dist/ir/builtin-signatures.d.ts +1 -1
  441. package/dist/ir/builtin-signatures.js +72 -6
  442. package/dist/ir/builtin-signatures.js.map +1 -1
  443. package/dist/ir/codec.generated.d.ts +1 -1
  444. package/dist/ir/codec.generated.js +321 -263
  445. package/dist/ir/codec.generated.js.map +1 -1
  446. package/dist/ir/constant-length-clones.d.ts +26 -0
  447. package/dist/ir/constant-length-clones.js +589 -0
  448. package/dist/ir/constant-length-clones.js.map +1 -0
  449. package/dist/ir/constant-length-clones.test.d.ts +1 -0
  450. package/dist/ir/constant-length-clones.test.js +292 -0
  451. package/dist/ir/constant-length-clones.test.js.map +1 -0
  452. package/dist/ir/constant-tables.d.ts +10 -5
  453. package/dist/ir/constant-tables.js +83 -17
  454. package/dist/ir/constant-tables.js.map +1 -1
  455. package/dist/ir/constant-tables.test.js +58 -1
  456. package/dist/ir/constant-tables.test.js.map +1 -1
  457. package/dist/ir/fields.generated.js +5 -2
  458. package/dist/ir/fields.generated.js.map +1 -1
  459. package/dist/ir/function-references.js +2 -0
  460. package/dist/ir/function-references.js.map +1 -1
  461. package/dist/ir/function-references.test.js +13 -0
  462. package/dist/ir/function-references.test.js.map +1 -1
  463. package/dist/ir/integer-loops.js +1 -0
  464. package/dist/ir/integer-loops.js.map +1 -1
  465. package/dist/ir/integer-loops.test.js +16 -0
  466. package/dist/ir/integer-loops.test.js.map +1 -1
  467. package/dist/ir/ir.d.ts +50 -6
  468. package/dist/ir/ir.js +44 -2
  469. package/dist/ir/ir.js.map +1 -1
  470. package/dist/ir/ir.test.js +83 -1
  471. package/dist/ir/ir.test.js.map +1 -1
  472. package/dist/ir/js-groups.js +5 -1
  473. package/dist/ir/js-groups.js.map +1 -1
  474. package/dist/ir/js-ic.d.ts +20 -0
  475. package/dist/ir/js-ic.js +81 -4
  476. package/dist/ir/js-ic.js.map +1 -1
  477. package/dist/ir/js-ic.test.js +8 -1
  478. package/dist/ir/js-ic.test.js.map +1 -1
  479. package/dist/ir/lane-plans.d.ts +86 -0
  480. package/dist/ir/lane-plans.js +589 -0
  481. package/dist/ir/lane-plans.js.map +1 -0
  482. package/dist/ir/lane-plans.test.d.ts +1 -0
  483. package/dist/ir/lane-plans.test.js +549 -0
  484. package/dist/ir/lane-plans.test.js.map +1 -0
  485. package/dist/ir/runtime-features.d.ts +68 -10
  486. package/dist/ir/runtime-features.js +285 -17
  487. package/dist/ir/runtime-features.js.map +1 -1
  488. package/dist/ir/runtime-features.test.js +190 -1
  489. package/dist/ir/runtime-features.test.js.map +1 -1
  490. package/dist/ir/validate.js +61 -24
  491. package/dist/ir/validate.js.map +1 -1
  492. package/dist/native/cache.d.ts +5 -0
  493. package/dist/native/cache.js +23 -1
  494. package/dist/native/cache.js.map +1 -1
  495. package/dist/native/cache.test.js +29 -1
  496. package/dist/native/cache.test.js.map +1 -1
  497. package/dist/native/cli.js +4 -2
  498. package/dist/native/cli.js.map +1 -1
  499. package/dist/native/compiler.d.ts +11 -3
  500. package/dist/native/compiler.js +102 -16
  501. package/dist/native/compiler.js.map +1 -1
  502. package/dist/native/compiler.test.js +244 -2
  503. package/dist/native/compiler.test.js.map +1 -1
  504. package/dist/native/prepare.d.ts +14 -1
  505. package/dist/native/prepare.js +79 -29
  506. package/dist/native/prepare.js.map +1 -1
  507. package/dist/native/sanitizer.test.js +3 -0
  508. package/dist/native/sanitizer.test.js.map +1 -1
  509. package/dist/native/unchanged.d.ts +80 -0
  510. package/dist/native/unchanged.js +301 -0
  511. package/dist/native/unchanged.js.map +1 -0
  512. package/dist/native/unchanged.test.d.ts +1 -0
  513. package/dist/native/unchanged.test.js +249 -0
  514. package/dist/native/unchanged.test.js.map +1 -0
  515. package/dist/node-islands/boundary.d.ts +16 -0
  516. package/dist/node-islands/boundary.js +70 -7
  517. package/dist/node-islands/boundary.js.map +1 -1
  518. package/dist/node-islands/boundary.test.js +59 -14
  519. package/dist/node-islands/boundary.test.js.map +1 -1
  520. package/dist/node-islands/detect.js +203 -47
  521. package/dist/node-islands/detect.js.map +1 -1
  522. package/dist/node-islands/detect.test.js +45 -0
  523. package/dist/node-islands/detect.test.js.map +1 -1
  524. package/dist/node-islands/growth.js +4 -16
  525. package/dist/node-islands/growth.js.map +1 -1
  526. package/dist/node-islands/modules.d.ts +3 -0
  527. package/dist/node-islands/modules.js +143 -12
  528. package/dist/node-islands/modules.js.map +1 -1
  529. package/dist/node-islands/modules.test.js +125 -0
  530. package/dist/node-islands/modules.test.js.map +1 -1
  531. package/dist/node-islands/report.d.ts +1 -1
  532. package/dist/node-islands/report.js +2 -1
  533. package/dist/node-islands/report.js.map +1 -1
  534. package/package.json +20 -20
  535. package/shims/undici/core/request.ts +7 -1
  536. package/surface-manifest.json +380 -2
@@ -1,3 +1,4 @@
1
+ import { callableMemberFieldTarget } from "../callable-properties.js";
1
2
  import { lowerIteratorMemberValue } from "../iterator-prototype.js";
2
3
  import { widensReducedRecords } from "../function-returns.js";
3
4
  import { nullishReadTypeError, throwAfterEach } from "../primitive-throws.js";
@@ -11,10 +12,9 @@ import { globalFunctionValue } from "../global-function-values.js";
11
12
  import { arrayClassMemberOwner, arrayClassReceiver, lowerArrayClassConstructorRead, } from "../builtins/array-classes.js";
12
13
  import { indexedUnionArms, lowerIndexedUnionMember } from "../indexed-unions.js";
13
14
  import { keyedHelperName } from "../stable-names.js";
14
- import { builtinNamespaceValue } from "../builtin-namespaces.js";
15
+ import { builtinNamespaceValue, wellKnownSymbolValue } from "../builtin-namespaces.js";
15
16
  import { staticallySelected } from "../static-typeof.js";
16
17
  import { lowerWebStreamClassRead } from "../builtins/web-streams-dyn.js";
17
- import { wrapperConstructors } from "../primitive-wrappers.js";
18
18
  import * as ts from "../../ts7/adapter.js";
19
19
  import { lowerHistogramProperty } from "../builtins/performance.js";
20
20
  import { staticFunctionNameRead } from "../static-function-names.js";
@@ -24,9 +24,10 @@ import { isThisParameter } from "../call-signatures.js";
24
24
  import { argumentCountSlot, contextualCallCount, usedAsValue } from "../argument-counts.js";
25
25
  import { checkedPrivateValue, localPrivateBrandClass, privateNameClass, } from "../private-brands.js";
26
26
  import { PoisonError, builtinValueNameOf, jsFuncNameOf, neverTaintedJsType, own, } from "../lowerer.js";
27
+ import { httpClientFnBindingOf, httpClientSecureRef } from "../lower-server.js";
27
28
  import { ARRAY_METHODS, MAP_METHODS, NARROW_FIRST, SET_METHODS, STDLIB_SURFACE, STRING_INDEX_METHODS, STR_METHODS, isChildSurfaceMember, stdlibGlobalNameOf, } from "../surfaces.js";
28
29
  import { isGenericCallableMemberType, isLegacyUrlSymbol, isOsConstantsType, isParseArgsDynTypeName, } from "../../type-mapper.js";
29
- import { BIGINT_T, BOOL, BYTES_U8, DYN, F64, NULL_T, SEARCH_PARAMS_T, STRING, SYMBOL_T, UNDEFINED_T, arrayOf, canBoxFuncIntoDyn, funcOf, isDynTypedRefType, isUnitType, typeEquals, typeKey, unionContainerArmsOk, BYTES_ELEMENT_SIZE, } from "../../../ir/ir.js";
30
+ import { BIGINT_T, BOOL, BYTES_U8, DYN, F64, NULL_T, SEARCH_PARAMS_T, STRING, SYMBOL_T, UNDEFINED_T, arrayOf, canBoxFuncIntoDyn, funcOf, isDynTypedRefType, isUnitType, typeEquals, sortArms, sortArmsTotal, typeKey, unionContainerArmsOk, BYTES_ELEMENT_SIZE, } from "../../../ir/ir.js";
30
31
  import { lowerNavigatorMember, navigatorValue } from "../builtins/navigator.js";
31
32
  import { lowerX509PublicKey } from "../builtins/x509.js";
32
33
  import { fenceMimeStaticRead } from "../builtins/mime.js";
@@ -49,13 +50,13 @@ import { dynUndefinedExpr, nodeThrowExpr, numLit, strLit, varRef } from "../../.
49
50
  import { typedArrayLacksMember } from "../builtins/typed-array-members.js";
50
51
  import { COMMONJS_MODULE_BINDINGS, TEMPORAL_GLOBAL } from "../../builtin-modules.js";
51
52
  import { tryLowerExpression } from "./try-lower-expression.js";
52
- import { applyDeferredAssertion, assertedReceiverNode, deferredMemberReadTarget, deferredProbeReadAccess, } from "./asserted-receiver.js";
53
+ import { applyDeferredAssertion, assertedOptionalMemberRead, assertedReceiverNode, deferredMemberReadTarget, deferredProbeReadAccess, } from "./asserted-receiver.js";
53
54
  import { lowerRecordInheritedMember } from "../record-inherited.js";
54
55
  import { MUTABLE_BUFFER_MEMBERS } from "../buffers.js";
55
56
  import { DATE_METHOD_HINT } from "../builtins/dates.js";
56
57
  import { cjsClassExprWholeExportOf, cjsExportAssignmentOf, cjsExportDiscardReason, isCjsExportTableLiteral, isCjsJsFile, isJsSourceFile, isModuleExportsAccess, isNodeEsmFile, locOf, } from "../../program.js";
57
58
  import { ambientNsRootOf, ambientUndefReadType, ambientUndefVarRootOf, contextualUndefReadType, fenceEarlyNsMemberRef, nsMemberIdentOf, nsUndefRead, } from "../lower-namespaces.js";
58
- import { expandoMemberRead } from "../lower-expando.js";
59
+ import { fenceExpandoRead } from "../lower-expando.js";
59
60
  import { lowerProtocolPropertyRead } from "../class-protocol-dispatch.js";
60
61
  import { lowerReadlineProperty } from "../builtins/readline.js";
61
62
  import { lowerAsyncLocalStorageProperty } from "../builtins/async-context.js";
@@ -69,9 +70,9 @@ import { nullishGenericBindingUnitOf } from "../binding-analysis.js";
69
70
  import { blockedBindingUseDiag } from "../../../diagnostics/diagnostic.js";
70
71
  import { npmStaticPackageOfPath } from "../../npm-static.js";
71
72
  import { importMetaField, isImportMeta } from "../import-meta.js";
72
- import { createRequireCalleeFileOf } from "../builtins/module-bindings.js";
73
+ import { createRequireCalleeFileOf, createRequireRuntimeBaseOf, } from "../builtins/module-bindings.js";
73
74
  import { createRequireResolveFenceValue, createRequireResolveValue, } from "../builtins/module-resolution.js";
74
- import { builtinPrototypeMethod, lowerCheckedPredicateValue } from "../lower-builtin-values.js";
75
+ import { builtinMethodValue, builtinPrototypeMethod, lowerCheckedPredicateValue, stringTrimMethodName, } from "../lower-builtin-values.js";
75
76
  import { constructorStaticValue, objectFreezeValue } from "../builtin-statics.js";
76
77
  import { lowerBufferPrototypeMember, lowerBufferPrototypeObject } from "../containers/bytes.js";
77
78
  import { lowerNetAddressStaticRead } from "../builtins/net-address.js";
@@ -92,7 +93,7 @@ import { isFsStreamMember, lowerFsStreamProperty } from "../builtins/fs-streams.
92
93
  import { keyedFieldRead } from "./keyed-field-targets.js";
93
94
  import { heldEnvValueType } from "../builtins/environment.js";
94
95
  import { promisePrototypeValue } from "../thenables.js";
95
- import { lowerChildPropertyRead } from "../handle-properties.js";
96
+ import { lowerChildPropertyRead, lowerHandlePropertyRead } from "../handle-properties.js";
96
97
  /** True when a property access names an ABSTRACT property declaration
97
98
  * (`abstract p: number` — a PropertyDeclaration, not an accessor).
98
99
  * These uses need concrete property dispatch because the base has no slot. */
@@ -229,7 +230,8 @@ function isCreateRequireResolveValue(lowerer, expr) {
229
230
  return (!expr.questionDotToken &&
230
231
  ts.isPropertyAccessExpression(resolve) &&
231
232
  resolve.name.text === "resolve" &&
232
- createRequireCalleeFileOf(lowerer, resolve.expression) !== null);
233
+ (createRequireCalleeFileOf(lowerer, resolve.expression) !== null ||
234
+ createRequireRuntimeBaseOf(lowerer, resolve.expression)));
233
235
  }
234
236
  export function lowerPropertyAccessExpr(lowerer, expr, loc) {
235
237
  // A JavaScript source reading a member that resizes, grows or detaches a
@@ -240,6 +242,16 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
240
242
  const arrayClassConstructor = lowerArrayClassConstructorRead(lowerer, expr, loc);
241
243
  if (arrayClassConstructor !== null)
242
244
  return arrayClassConstructor;
245
+ // A createRequire loader's resolve read as a value (passed on, or
246
+ // picked by `??`): a function that resolves its request at run time.
247
+ // resolve.paths read as a value has no run-time lowering: a function
248
+ // that throws the fence when called. Claimed before the generic
249
+ // function-member reads below, which would otherwise read `.resolve`
250
+ // off the loader's run-time value form.
251
+ if (isCreateRequireResolveValue(lowerer, expr))
252
+ return expr.name.text === "paths"
253
+ ? createRequireResolveFenceValue(lowerer, expr, loc)
254
+ : createRequireResolveValue(lowerer, expr, loc);
243
255
  // `R.#x` for a static private on a checked-dynamic receiver: the brand
244
256
  // check, then the native storage (private-statics.ts).
245
257
  {
@@ -773,16 +785,10 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
773
785
  fenceEarlyNsMemberRef(lowerer, expr, memberSym);
774
786
  return lowerExpr(lowerer, nsMember);
775
787
  }
776
- // Expando function members (`foo.bar` after `foo.bar = 12`): the
777
- // member's module global (lower-expando.ts), before the ambient-
778
- // namespace fence — a declare-namespace merge over a real function
779
- // (`declare namespace Foo { var baz: number }` + `function Foo`)
780
- // reads its assigned members, not the ambient ReferenceError.
781
- {
782
- const ex = expandoMemberRead(lowerer, expr);
783
- if (ex)
784
- return lowerer.maybeNarrow(ex, expr);
785
- }
788
+ // Expando function members (`foo.bar` after `foo.bar = 12`) read
789
+ // through the closure's own-property table (the callable-member path
790
+ // below); this only keeps the source-order fence (lower-expando.ts).
791
+ fenceExpandoRead(lowerer, expr);
786
792
  // An AMBIENT namespace receiver (`M.x` where only `declare
787
793
  // namespace M` exists): the namespace object never exists at
788
794
  // runtime — Node's exact catchable ReferenceError at the access,
@@ -1043,6 +1049,36 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
1043
1049
  };
1044
1050
  }
1045
1051
  }
1052
+ // A client function chosen at run time (`const requestFn = c ?
1053
+ // https.request : http.request`): both arms are Node's `request` (the
1054
+ // .get pair both are `get`), and the length follows the arm the program
1055
+ // picked — https.request.length is 0, http.request.length 3.
1056
+ if (expr.name.text === "name" || expr.name.text === "length") {
1057
+ const ident = ts.isIdentifier(expr.expression) ? expr.expression : null;
1058
+ const sym = ident ? lowerer.resolveValueSymbol(ident) : undefined;
1059
+ const binding = sym ? httpClientFnBindingOf(lowerer, sym) : undefined;
1060
+ if (binding) {
1061
+ if (expr.name.text === "name")
1062
+ return { kind: "strLit", value: binding.member, type: STRING, loc };
1063
+ const httpLength = 3;
1064
+ const httpsLength = binding.member === "get" ? 3 : 0;
1065
+ if (httpsLength === httpLength)
1066
+ return { kind: "numLit", value: httpLength, type: F64, loc };
1067
+ const secure = binding.secureStorage !== undefined
1068
+ ? httpClientSecureRef(lowerer, binding, expr, loc)
1069
+ : lowerer.lowerCondition(binding.cond);
1070
+ return {
1071
+ kind: "ternary",
1072
+ cond: binding.trueSecure
1073
+ ? secure
1074
+ : { kind: "unary", op: "!", operand: secure, type: BOOL, loc },
1075
+ then: { kind: "numLit", value: httpsLength, type: F64, loc },
1076
+ else_: { kind: "numLit", value: httpLength, type: F64, loc },
1077
+ type: F64,
1078
+ loc,
1079
+ };
1080
+ }
1081
+ }
1046
1082
  // `f.name` / `f.length` / own properties on a FUNCTION-typed JS
1047
1083
  // value (the mustCall wrapper's function-instance members): read
1048
1084
  // through the dyn box — the closure's own-property table answers
@@ -1058,6 +1094,21 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
1058
1094
  expr.name.text === "length" ||
1059
1095
  expr.name.text === "constructor")) {
1060
1096
  const probed = tryLowerExpression(lowerer, expr.expression);
1097
+ // A builtin function value's own name and length are fixed when the
1098
+ // adapter is built: answer them without boxing the closure. Node's
1099
+ // wrapper names (`process.cwd` is `wrappedCwd`) and lengths that
1100
+ // differ from the adapter's parameters (`fs.readFile.length` is 3)
1101
+ // come from the same table the boxed value reports.
1102
+ if (probed?.type.kind === "func" &&
1103
+ (expr.name.text === "name" || expr.name.text === "length")) {
1104
+ const identity = lowerer.builtinFunctionIdentity(probed);
1105
+ if (expr.name.text === "name" &&
1106
+ identity.fnName !== undefined &&
1107
+ !identity.fnNameMainThreadOnly)
1108
+ return { kind: "strLit", value: identity.fnName, type: STRING, loc };
1109
+ if (expr.name.text === "length" && identity.fnLength !== undefined)
1110
+ return { kind: "numLit", value: identity.fnLength, type: F64, loc };
1111
+ }
1061
1112
  // Inferred callable returns can use checked storage even when the
1062
1113
  // checker still describes a function. Read its actual dyn value;
1063
1114
  // the ambient Function member must not hide its own properties.
@@ -1084,7 +1135,10 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
1084
1135
  loc,
1085
1136
  }, expr);
1086
1137
  }
1087
- if ((isJsSourceFile(ts.getSourceFileOfNode(expr)) || expr.name.text === "constructor") &&
1138
+ if ((isJsSourceFile(ts.getSourceFileOfNode(expr)) ||
1139
+ expr.name.text === "name" ||
1140
+ expr.name.text === "length" ||
1141
+ expr.name.text === "constructor") &&
1088
1142
  probed?.type.kind === "func" &&
1089
1143
  canBoxFuncIntoDyn(probed.type, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id))) {
1090
1144
  // A function is named by its definition, through const aliases: a
@@ -1250,14 +1304,6 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
1250
1304
  return declared && declared.kind !== "void" ? lowerer.coerceToExpected(read, declared) : read;
1251
1305
  }
1252
1306
  }
1253
- // A createRequire loader's resolve read as a value (passed on, or
1254
- // picked by `??`): a function that resolves its request at run time.
1255
- // resolve.paths read as a value has no run-time lowering: a function
1256
- // that throws the fence when called.
1257
- if (isCreateRequireResolveValue(lowerer, expr))
1258
- return expr.name.text === "paths"
1259
- ? createRequireResolveFenceValue(lowerer, expr, loc)
1260
- : createRequireResolveValue(lowerer, expr, loc);
1261
1307
  // The lib fence's PROPERTY chokepoint: a stdlib-declared member that
1262
1308
  // no lowering above claimed ([1,2].entries, Math.SQRT2, Promise.all,
1263
1309
  // re.exec as a value, ...) reports SC2020 here.
@@ -1495,6 +1541,14 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
1495
1541
  const childProperty = lowerChildPropertyRead(lowerer, expr);
1496
1542
  if (childProperty)
1497
1543
  return childProperty;
1544
+ // A member a typed handle's class does not declare (a JavaScript read
1545
+ // such as `m.label`): a property table entry of the handle
1546
+ // (scr_dyn_handle_props.c).
1547
+ {
1548
+ const handleProperty = lowerHandlePropertyRead(lowerer, expr, recvLowered);
1549
+ if (handleProperty)
1550
+ return handleProperty;
1551
+ }
1498
1552
  // A member a typed array's type does not declare (a JavaScript read, or
1499
1553
  // one under @ts-ignore), such as the feature probe `typeof bytes.toHex`:
1500
1554
  // when Node's prototype chain for the value lacks the name too, the read
@@ -1744,7 +1798,7 @@ function mergeReadTypes(lowerer, types) {
1744
1798
  return null;
1745
1799
  if (arms.length === 1)
1746
1800
  return arms[0];
1747
- const canonical = arms.sort((a, b) => typeKey(a) < typeKey(b) ? -1 : typeKey(a) > typeKey(b) ? 1 : 0);
1801
+ const canonical = sortArmsTotal(arms);
1748
1802
  return { kind: "union", unionId: lowerer.unions.intern(canonical) };
1749
1803
  }
1750
1804
  function importMetaProperty(lowerer, expr) {
@@ -1978,7 +2032,18 @@ export function lowerIntrinsicProperty(lowerer, expr) {
1978
2032
  if (primitivePrototype)
1979
2033
  return primitivePrototype;
1980
2034
  const builtinPrototype = builtinPrototypeMethod(lowerer, expr);
1981
- if (builtinPrototype)
2035
+ if (builtinPrototype) {
2036
+ // The trim family and RegExp's methods have a value of their own
2037
+ // (scr_dyn_builtin_methods.c). The invoke unit's table answers a member
2038
+ // read on a receiver it already knows; these values have no receiver at
2039
+ // read time and brand-check whatever `this` they are later called with,
2040
+ // which a receiver-keyed lookup cannot express. The interned value is
2041
+ // shared with the `''.trim` and `/a/.exec` spellings below.
2042
+ const trim = builtinPrototype === "String" ? stringTrimMethodName(expr.name.text) : null;
2043
+ if (trim)
2044
+ return builtinMethodValue("String", trim, locOf(expr));
2045
+ if (builtinPrototype === "RegExp")
2046
+ return builtinMethodValue("RegExp", expr.name.text, locOf(expr));
1982
2047
  return {
1983
2048
  kind: "libCall",
1984
2049
  fn: "dyn.builtinMethod",
@@ -1989,6 +2054,7 @@ export function lowerIntrinsicProperty(lowerer, expr) {
1989
2054
  type: DYN,
1990
2055
  loc: locOf(expr),
1991
2056
  };
2057
+ }
1992
2058
  if (ts.isPropertyAccessExpression(expr.expression) &&
1993
2059
  lowerer.stdlibGlobalMember(expr.expression, "Array") === "prototype") {
1994
2060
  return {
@@ -2011,6 +2077,41 @@ export function lowerIntrinsicProperty(lowerer, expr) {
2011
2077
  return { kind: "libCall", fn: "dyn.functionApply", args: [], type: DYN, loc: locOf(expr) };
2012
2078
  if (lowerer.stdlibGlobalMember(expr, "Array") === "prototype")
2013
2079
  return { kind: "libCall", fn: "dyn.arrayPrototype", args: [], type: DYN, loc: locOf(expr) };
2080
+ // DataView.prototype as a value, and its members read through it: the
2081
+ // prototype object the language defines — its see-through properties
2082
+ // (buffer, byteLength, byteOffset), its getter/setter family and its
2083
+ // constructor — not a view. A DataView method CALLED on the prototype
2084
+ // object itself throws the TypeError its brand check answers. Typed
2085
+ // sources keep the standard-library member fence: their views lower
2086
+ // through the intrinsic path, and only a JavaScript source can pass a
2087
+ // view around as a value.
2088
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
2089
+ lowerer.stdlibGlobalMember(expr, "DataView") === "prototype") {
2090
+ return {
2091
+ kind: "libCall",
2092
+ fn: "dyn.dataViewPrototype",
2093
+ args: [wellKnownSymbolValue("toStringTag", locOf(expr))],
2094
+ type: DYN,
2095
+ loc: locOf(expr),
2096
+ };
2097
+ }
2098
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
2099
+ ts.isPropertyAccessExpression(expr.expression) &&
2100
+ lowerer.stdlibGlobalMember(expr.expression, "DataView") === "prototype") {
2101
+ return {
2102
+ kind: "dynKeyGet",
2103
+ value: {
2104
+ kind: "libCall",
2105
+ fn: "dyn.dataViewPrototype",
2106
+ args: [wellKnownSymbolValue("toStringTag", locOf(expr.expression))],
2107
+ type: DYN,
2108
+ loc: locOf(expr.expression),
2109
+ },
2110
+ key: { kind: "strLit", value: expr.name.text, type: STRING, loc: locOf(expr.name) },
2111
+ type: DYN,
2112
+ loc: locOf(expr),
2113
+ };
2114
+ }
2014
2115
  // Date.prototype as a value, and its members read through it: the
2015
2116
  // prototype object the language defines (an ordinary object carrying the
2016
2117
  // interface's methods), not a Date. `Date.prototype.hasOwnProperty("x")`
@@ -2246,6 +2347,23 @@ export function lowerIntrinsicProperty(lowerer, expr) {
2246
2347
  const receiver = lowerer.lowerExpr(expr.expression);
2247
2348
  return { kind: "libCall", fn: "child.killed", args: [receiver], type: BOOL, loc };
2248
2349
  }
2350
+ // spawnfile / spawnargs: the file the child was started from, and that
2351
+ // file followed by its arguments. A shell spawn reports the shell and
2352
+ // its invocation (Node's own record of what it ran).
2353
+ if (name === "spawnfile") {
2354
+ const receiver = lowerer.lowerExpr(expr.expression);
2355
+ return { kind: "libCall", fn: "child.spawnfile", args: [receiver], type: STRING, loc };
2356
+ }
2357
+ if (name === "spawnargs") {
2358
+ const receiver = lowerer.lowerExpr(expr.expression);
2359
+ return {
2360
+ kind: "libCall",
2361
+ fn: "child.spawnargs",
2362
+ args: [receiver],
2363
+ type: arrayOf(STRING),
2364
+ loc,
2365
+ };
2366
+ }
2249
2367
  // signalCode: `NodeJS.Signals | null`, the signal that terminated the
2250
2368
  // child (null while running, after a normal exit, and after a spawn
2251
2369
  // failure) — the exit listener's second parameter, read as a property.
@@ -2262,7 +2380,7 @@ export function lowerIntrinsicProperty(lowerer, expr) {
2262
2380
  if (name === "on" || name === "once" || name === "kill" || name === "unref") {
2263
2381
  lowerer.unsupported("SC1090", expr, `child methods as values (call '${name}' directly)`);
2264
2382
  }
2265
- lowerer.noLowering(`ChildProcess.${name}`, expr, 'on/once("exit" | "close" | "error", cb), pid, exitCode, killed, kill(signal?), and unref() are the supported ChildProcess members', lowerer.checker.getSymbolAtLocation(expr.name));
2383
+ lowerer.noLowering(`ChildProcess.${name}`, expr, 'on/once("exit" | "close" | "error", cb), pid, exitCode, killed, spawnfile, spawnargs, kill(signal?), ref(), and unref() are the supported ChildProcess members', lowerer.checker.getSymbolAtLocation(expr.name));
2266
2384
  }
2267
2385
  if (kind === "spawnRes") {
2268
2386
  // The spawnSync-result reads. status is the interned `number | null`
@@ -2503,8 +2621,16 @@ export function lowerIntrinsicProperty(lowerer, expr) {
2503
2621
  loc,
2504
2622
  };
2505
2623
  }
2506
- if (name === "test") {
2507
- lowerer.unsupported("SC1090", expr, "regex methods as values (call 'test' directly)");
2624
+ // A regex method read as a value: the same interned function
2625
+ // `RegExp.prototype.exec` is (scr_dyn_builtin_methods.c), which
2626
+ // brand-checks its receiver. A compiled regex carries no own member of
2627
+ // any of these names, so the read answers the prototype's method exactly
2628
+ // as Node does. A direct call keeps its intrinsic lowering: it is
2629
+ // statically typed, and the value form would make it a dynamic call.
2630
+ if ((name === "exec" || name === "test" || name === "toString") && !isCalleeOf(expr)) {
2631
+ // The read still evaluates the receiver first: a call that answers the
2632
+ // regex may have side effects or throw before the member is read.
2633
+ return afterReceiver(lowerer.lowerExpr(expr.expression), builtinMethodValue("RegExp", name, locOf(expr)), locOf(expr));
2508
2634
  }
2509
2635
  return null;
2510
2636
  }
@@ -2690,16 +2816,22 @@ export function lowerIntrinsicProperty(lowerer, expr) {
2690
2816
  // runtime's interned function that runs it on its receiver.
2691
2817
  if (kind === "string" && isJsSourceFile(expr.getSourceFile()) && !expr.questionDotToken) {
2692
2818
  const receiver = lowerer.lowerExpr(expr.expression);
2693
- const method = {
2694
- kind: "libCall",
2695
- fn: "dyn.builtinMethod",
2696
- args: [
2697
- { kind: "strLit", value: "String", type: STRING, loc: locOf(expr) },
2698
- { kind: "strLit", value: name, type: STRING, loc: locOf(expr.name) },
2699
- ],
2700
- type: DYN,
2701
- loc: locOf(expr),
2702
- };
2819
+ // `''.trim` is the same interned function as String.prototype.trim, so
2820
+ // its call/apply run the method generically (scr_dyn_builtin_methods.c
2821
+ // rather than the invoke unit's table, which has no trim entry).
2822
+ const trim = stringTrimMethodName(name);
2823
+ const method = trim
2824
+ ? builtinMethodValue("String", trim, locOf(expr))
2825
+ : {
2826
+ kind: "libCall",
2827
+ fn: "dyn.builtinMethod",
2828
+ args: [
2829
+ { kind: "strLit", value: "String", type: STRING, loc: locOf(expr) },
2830
+ { kind: "strLit", value: name, type: STRING, loc: locOf(expr.name) },
2831
+ ],
2832
+ type: DYN,
2833
+ loc: locOf(expr),
2834
+ };
2703
2835
  return isSafeToDiscard(receiver)
2704
2836
  ? method
2705
2837
  : {
@@ -3283,6 +3415,16 @@ export function lowerFieldRead(lowerer, expr) {
3283
3415
  // answer in lowerPropertyAccessExpr (asserted-receiver.ts).
3284
3416
  if (deferredProbeReadAccess(lowerer, expr))
3285
3417
  return null;
3418
+ // A member only an asserted intersection declares
3419
+ // (`(item as Base & { icons?: unknown }).icons`): the assertion's width
3420
+ // copy has the name but no value in it, while the record the value
3421
+ // actually holds still carries the property in its kept source. Answer
3422
+ // from there (assertedOnlyFieldRead), as the destructuring twin does.
3423
+ {
3424
+ const assertedOnly = assertedOptionalMemberRead(lowerer, expr);
3425
+ if (assertedOnly)
3426
+ return assertedOnly;
3427
+ }
3286
3428
  const target = lowerer.fieldTarget(expr);
3287
3429
  if (target)
3288
3430
  return lowerer.fieldGetExpr(target, locOf(expr), expr);
@@ -4080,7 +4222,7 @@ export function lowerUnionKeyedRead(lowerer, expr, unionId, value, key, literalF
4080
4222
  joinArms.some((a) => a.kind === "dyn" || a.kind === "generator" || a.kind === "caught"))) {
4081
4223
  return null;
4082
4224
  }
4083
- joinArms.sort((a, b) => (typeKey(a) < typeKey(b) ? -1 : 1));
4225
+ sortArms(joinArms);
4084
4226
  const type = joinArms.length === 1
4085
4227
  ? joinArms[0]
4086
4228
  : { kind: "union", unionId: lowerer.unions.intern(joinArms) };
@@ -4644,6 +4786,15 @@ export function fieldTarget(lowerer, access) {
4644
4786
  }
4645
4787
  return null;
4646
4788
  }
4789
+ // A member of a typed CALLABLE: the closure's own-property table
4790
+ // (callable-properties.ts). The receiver lowered as a closure, so its
4791
+ // members are the function object's own data properties, read through the
4792
+ // identity-preserving box with the declared member type checked back.
4793
+ if (receiverIr?.kind === "func") {
4794
+ const callable = callableMemberFieldTarget(lowerer, access, receiverIr);
4795
+ if (callable)
4796
+ return callable;
4797
+ }
4647
4798
  return null;
4648
4799
  }
4649
4800
  /** The read expression for a field target (fieldGet / recordGet /
@@ -4995,7 +5146,28 @@ const BUILTIN_VALUE_REFLECTION = new Set([
4995
5146
  * redefinition (`Object.hasOwn(Object, "hasOwn")`,
4996
5147
  * `Object.defineProperty(Promise, ...)`, `hasOwnProperty.call(Map, ...)`),
4997
5148
  * which would observe or change members the interned value does not
4998
- * model. */
5149
+ * model — except an own-key query whose answer the value does model
5150
+ * (faithfulOwnKeyQuery). */
5151
+ /** The interned values whose own properties the runtime models exactly as
5152
+ * Node's constructor has them: Proxy is the one builtin constructor with no
5153
+ * `prototype` own property, and the runtime's Proxy value carries Node's
5154
+ * other own keys (length, name, revocable). The other interns would answer
5155
+ * `hasOwnProperty(..., "prototype")` false where Node answers true. */
5156
+ const BUILTIN_VALUE_OWN_KEYS_FAITHFUL = new Set(["Proxy"]);
5157
+ /** `Object.prototype.hasOwnProperty.call(<interned value>, key)` asks which
5158
+ * own keys the value has; it neither reads nor redefines a member. The
5159
+ * answer is Node's when the interned value's own keys are
5160
+ * (BUILTIN_VALUE_OWN_KEYS_FAITHFUL). */
5161
+ function faithfulOwnKeyQuery(lowerer, callee, canonical) {
5162
+ if (!BUILTIN_VALUE_OWN_KEYS_FAITHFUL.has(canonical) || callee.name.text !== "call")
5163
+ return false;
5164
+ const method = callee.expression;
5165
+ return (ts.isPropertyAccessExpression(method) &&
5166
+ method.name.text === "hasOwnProperty" &&
5167
+ ts.isPropertyAccessExpression(method.expression) &&
5168
+ method.expression.name.text === "prototype" &&
5169
+ stdlibGlobalNameOf(lowerer, method.expression.expression) === "Object");
5170
+ }
4999
5171
  export function builtinGlobalValueAt(lowerer, expr, canonical, loc, js) {
5000
5172
  // A namespace object models its own properties, so member reads and
5001
5173
  // reflection read it like any object.
@@ -5024,7 +5196,8 @@ export function builtinGlobalValueAt(lowerer, expr, canonical, loc, js) {
5024
5196
  call.arguments.nodes[0] === node &&
5025
5197
  lowerer.isStdlibSymbol(lowerer.checker.getSymbolAtLocation(ts.isPropertyAccessExpression(callee.expression)
5026
5198
  ? callee.expression.name
5027
- : callee.expression)));
5199
+ : callee.expression)) &&
5200
+ !faithfulOwnKeyQuery(lowerer, callee, canonical));
5028
5201
  if (reflects) {
5029
5202
  const name = owner !== null
5030
5203
  ? `${owner}.${callee.name.text}`
@@ -5271,6 +5444,26 @@ export function isPromisePrototypeRead(lowerer, expr) {
5271
5444
  inner.name.text === "constructor" &&
5272
5445
  lowerer.mapTypeOf(lowerer.typeOf(inner.expression))?.kind === "promise");
5273
5446
  }
5447
+ /** Whether `expr` reads DataView.prototype, or a member read through it, in
5448
+ * a JavaScript source. The checker types the read DataView — whose lowering
5449
+ * is a bytes view — but the value is the prototype OBJECT
5450
+ * (dyn.dataViewPrototype), so a binding inferred from it stays
5451
+ * checked-dynamic: the bytes extraction would throw where Node answers the
5452
+ * object. */
5453
+ export function isDataViewPrototypeRead(lowerer, expr) {
5454
+ if (!expr)
5455
+ return false;
5456
+ while (ts.isParenthesizedExpression(expr))
5457
+ expr = expr.expression;
5458
+ if (!ts.isPropertyAccessExpression(expr) || expr.questionDotToken)
5459
+ return false;
5460
+ if (!isJsSourceFile(ts.getSourceFileOfNode(expr)))
5461
+ return false;
5462
+ if (lowerer.stdlibGlobalMember(expr, "DataView") === "prototype")
5463
+ return true;
5464
+ return (ts.isPropertyAccessExpression(expr.expression) &&
5465
+ lowerer.stdlibGlobalMember(expr.expression, "DataView") === "prototype");
5466
+ }
5274
5467
  /** A promise's `constructor` (the Promise constructor value), and
5275
5468
  * Promise.prototype read as `promise.constructor.prototype` or
5276
5469
  * `Promise.prototype` (execa's `(async () => {})().constructor.prototype`):
@@ -5396,14 +5589,20 @@ function jsPrimitivePrototypeValue(lowerer, expr) {
5396
5589
  {
5397
5590
  kind: "libCall",
5398
5591
  fn: "wrapper.booleanPrototype",
5399
- args: [wrapperConstructors(lowerer, loc)[2]],
5592
+ args: [lowerer.coerceToExpected(primitiveCtorClosure(lowerer, kind, loc, true), DYN)],
5400
5593
  type: DYN,
5401
5594
  loc,
5402
5595
  }
5403
5596
  : {
5404
5597
  kind: "libCall",
5405
5598
  fn: "dyn.builtinPrototype",
5406
- args: [{ kind: "strLit", value: kind, type: STRING, loc }],
5599
+ args: [
5600
+ { kind: "strLit", value: kind, type: STRING, loc },
5601
+ // The compiled constructor value the prototype belongs to: the
5602
+ // unit answers it as the constructor's `prototype` member, so
5603
+ // `Object(1).constructor.prototype === Number.prototype`.
5604
+ lowerer.coerceToExpected(primitiveCtorClosure(lowerer, kind, loc, true), DYN),
5605
+ ],
5407
5606
  type: DYN,
5408
5607
  loc,
5409
5608
  };