@scriptc/compiler 0.4.7 → 0.4.8

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 (776) hide show
  1. package/ambient/node-fallback/child_process.d.ts +71 -22
  2. package/ambient/node-fallback/crypto.d.ts +15 -7
  3. package/ambient/node-fallback/events.d.ts +23 -5
  4. package/ambient/node-fallback/fs.d.ts +3 -2
  5. package/ambient/node-fallback/http.d.ts +23 -17
  6. package/ambient/node-fallback/https.d.ts +5 -2
  7. package/ambient/node-fallback/net.d.ts +6 -0
  8. package/ambient/node-fallback/os.d.ts +11 -1
  9. package/ambient/node-fallback/path-posix.d.ts +6 -0
  10. package/ambient/node-fallback/path-win32.d.ts +5 -0
  11. package/ambient/node-fallback/path.d.ts +2 -0
  12. package/ambient/node-fallback/zlib.d.ts +31 -2
  13. package/ambient/scriptc-node-fallback.d.ts +37 -7
  14. package/ambient/scriptc.d.ts +7 -2
  15. package/dist/backend/executable-features.js +11 -3
  16. package/dist/backend/executable-features.js.map +1 -1
  17. package/dist/backend/library-pack.d.ts +6 -0
  18. package/dist/backend/library-pack.js +17 -6
  19. package/dist/backend/library-pack.js.map +1 -1
  20. package/dist/backend/library-pack.test.d.ts +1 -0
  21. package/dist/backend/library-pack.test.js +28 -0
  22. package/dist/backend/library-pack.test.js.map +1 -0
  23. package/dist/backend/linker.d.ts +9 -2
  24. package/dist/backend/linker.js +190 -32
  25. package/dist/backend/linker.js.map +1 -1
  26. package/dist/backend/lld.d.ts +8 -4
  27. package/dist/backend/lld.js +19 -13
  28. package/dist/backend/lld.js.map +1 -1
  29. package/dist/backend/lld.test.js +3 -1
  30. package/dist/backend/lld.test.js.map +1 -1
  31. package/dist/backend/llvm/alloc.d.ts +15 -2
  32. package/dist/backend/llvm/alloc.js +172 -36
  33. package/dist/backend/llvm/alloc.js.map +1 -1
  34. package/dist/backend/llvm/alloc.test.js +69 -1
  35. package/dist/backend/llvm/alloc.test.js.map +1 -1
  36. package/dist/backend/llvm/arenas.d.ts +17 -4
  37. package/dist/backend/llvm/arenas.js +105 -10
  38. package/dist/backend/llvm/arenas.js.map +1 -1
  39. package/dist/backend/llvm/arenas.test.js +229 -0
  40. package/dist/backend/llvm/arenas.test.js.map +1 -1
  41. package/dist/backend/llvm/bytes-alias.js +10 -1
  42. package/dist/backend/llvm/bytes-alias.js.map +1 -1
  43. package/dist/backend/llvm/bytes-headers.js +6 -0
  44. package/dist/backend/llvm/bytes-headers.js.map +1 -1
  45. package/dist/backend/llvm/bytes-loop-versions.test.js +25 -0
  46. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  47. package/dist/backend/llvm/call-lifetimes.js +10 -0
  48. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  49. package/dist/backend/llvm/classes.d.ts +16 -9
  50. package/dist/backend/llvm/classes.js +142 -37
  51. package/dist/backend/llvm/classes.js.map +1 -1
  52. package/dist/backend/llvm/classes.test.js +42 -0
  53. package/dist/backend/llvm/classes.test.js.map +1 -1
  54. package/dist/backend/llvm/cpu-dispatch.d.ts +15 -5
  55. package/dist/backend/llvm/cpu-dispatch.js +31 -7
  56. package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
  57. package/dist/backend/llvm/dyn.d.ts +12 -3
  58. package/dist/backend/llvm/dyn.js +31 -7
  59. package/dist/backend/llvm/dyn.js.map +1 -1
  60. package/dist/backend/llvm/emit-function.js +67 -4
  61. package/dist/backend/llvm/emit-function.js.map +1 -1
  62. package/dist/backend/llvm/emit-module.js +90 -39
  63. package/dist/backend/llvm/emit-module.js.map +1 -1
  64. package/dist/backend/llvm/emit-module.test.d.ts +1 -0
  65. package/dist/backend/llvm/emit-module.test.js +52 -0
  66. package/dist/backend/llvm/emit-module.test.js.map +1 -0
  67. package/dist/backend/llvm/emit-statements.js +99 -15
  68. package/dist/backend/llvm/emit-statements.js.map +1 -1
  69. package/dist/backend/llvm/emitter.d.ts +113 -8
  70. package/dist/backend/llvm/emitter.js +438 -67
  71. package/dist/backend/llvm/emitter.js.map +1 -1
  72. package/dist/backend/llvm/emitter.test.js +31 -3
  73. package/dist/backend/llvm/emitter.test.js.map +1 -1
  74. package/dist/backend/llvm/expr-async.js +19 -1
  75. package/dist/backend/llvm/expr-async.js.map +1 -1
  76. package/dist/backend/llvm/expr-bytes.js +16 -1
  77. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  78. package/dist/backend/llvm/expr-calls.js +18 -2
  79. package/dist/backend/llvm/expr-calls.js.map +1 -1
  80. package/dist/backend/llvm/expr-dynamic.js +31 -10
  81. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  82. package/dist/backend/llvm/expr-primitives.js +31 -3
  83. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  84. package/dist/backend/llvm/expr-records.d.ts +1 -1
  85. package/dist/backend/llvm/expr-records.js +124 -56
  86. package/dist/backend/llvm/expr-records.js.map +1 -1
  87. package/dist/backend/llvm/expr-stream-bridges.js +17 -0
  88. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  89. package/dist/backend/llvm/js-groups.d.ts +21 -0
  90. package/dist/backend/llvm/js-groups.js +277 -0
  91. package/dist/backend/llvm/js-groups.js.map +1 -0
  92. package/dist/backend/llvm/js-ic.d.ts +19 -1
  93. package/dist/backend/llvm/js-ic.js +96 -23
  94. package/dist/backend/llvm/js-ic.js.map +1 -1
  95. package/dist/backend/llvm/lib-dispatch.js +132 -1
  96. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  97. package/dist/backend/llvm/lib-network.js +33 -6
  98. package/dist/backend/llvm/lib-network.js.map +1 -1
  99. package/dist/backend/llvm/lib-process.js +44 -3
  100. package/dist/backend/llvm/lib-process.js.map +1 -1
  101. package/dist/backend/llvm/lib-shared.js +69 -2
  102. package/dist/backend/llvm/lib-shared.js.map +1 -1
  103. package/dist/backend/llvm/local-union-storage.test.js +32 -0
  104. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  105. package/dist/backend/llvm/loop-state.js +7 -2
  106. package/dist/backend/llvm/loop-state.js.map +1 -1
  107. package/dist/backend/llvm/map-entry-fusion.d.ts +8 -0
  108. package/dist/backend/llvm/map-entry-fusion.js +3 -3
  109. package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
  110. package/dist/backend/llvm/map-number-lookup.test.js +6 -6
  111. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  112. package/dist/backend/llvm/nullable-unions.js +7 -6
  113. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  114. package/dist/backend/llvm/nullable-unions.test.js +4 -1
  115. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  116. package/dist/backend/llvm/receivers.js +3 -0
  117. package/dist/backend/llvm/receivers.js.map +1 -1
  118. package/dist/backend/llvm/record-entry-fusion.d.ts +32 -0
  119. package/dist/backend/llvm/record-entry-fusion.js +217 -0
  120. package/dist/backend/llvm/record-entry-fusion.js.map +1 -0
  121. package/dist/backend/llvm/record-results.d.ts +5 -2
  122. package/dist/backend/llvm/record-results.js +13 -12
  123. package/dist/backend/llvm/record-results.js.map +1 -1
  124. package/dist/backend/llvm/record-views.js +12 -6
  125. package/dist/backend/llvm/record-views.js.map +1 -1
  126. package/dist/backend/llvm/reference-effects.js +1 -0
  127. package/dist/backend/llvm/reference-effects.js.map +1 -1
  128. package/dist/backend/llvm/reference-writes.js +3 -0
  129. package/dist/backend/llvm/reference-writes.js.map +1 -1
  130. package/dist/backend/llvm/region-ir.js +1 -0
  131. package/dist/backend/llvm/region-ir.js.map +1 -1
  132. package/dist/backend/llvm/region-sites.d.ts +18 -0
  133. package/dist/backend/llvm/region-sites.js +79 -1
  134. package/dist/backend/llvm/region-sites.js.map +1 -1
  135. package/dist/backend/llvm/runtime-registries.test.js +53 -6
  136. package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
  137. package/dist/backend/llvm/serialized-ir-emission.test.js +3 -1
  138. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  139. package/dist/backend/llvm/shapes.d.ts +33 -3
  140. package/dist/backend/llvm/shapes.js +183 -13
  141. package/dist/backend/llvm/shapes.js.map +1 -1
  142. package/dist/backend/llvm/stack-objects.d.ts +1 -2
  143. package/dist/backend/llvm/stack-objects.js +8 -5
  144. package/dist/backend/llvm/stack-objects.js.map +1 -1
  145. package/dist/backend/llvm/walkers.d.ts +12 -0
  146. package/dist/backend/llvm/walkers.js +46 -2
  147. package/dist/backend/llvm/walkers.js.map +1 -1
  148. package/dist/backend/may-throw.js +12 -2
  149. package/dist/backend/may-throw.js.map +1 -1
  150. package/dist/backend/may-throw.test.js +13 -0
  151. package/dist/backend/may-throw.test.js.map +1 -1
  152. package/dist/backend/native/contracts.d.ts +48 -8
  153. package/dist/backend/native/executable.js +55 -13
  154. package/dist/backend/native/executable.js.map +1 -1
  155. package/dist/backend/native/helper-identity-record.d.ts +11 -0
  156. package/dist/backend/native/helper-identity-record.js +76 -0
  157. package/dist/backend/native/helper-identity-record.js.map +1 -0
  158. package/dist/backend/native/helper-identity-record.test.d.ts +1 -0
  159. package/dist/backend/native/helper-identity-record.test.js +101 -0
  160. package/dist/backend/native/helper-identity-record.test.js.map +1 -0
  161. package/dist/backend/native/library.js +9 -1
  162. package/dist/backend/native/library.js.map +1 -1
  163. package/dist/backend/native/runtime-inputs.js +4 -1
  164. package/dist/backend/native/runtime-inputs.js.map +1 -1
  165. package/dist/backend/native/vendor.d.ts +1 -1
  166. package/dist/backend/native/vendor.js +1 -1
  167. package/dist/backend/native/vendor.js.map +1 -1
  168. package/dist/backend/native-codegen-core.d.ts +13 -10
  169. package/dist/backend/native-codegen-core.js +26 -13
  170. package/dist/backend/native-codegen-core.js.map +1 -1
  171. package/dist/backend/native-codegen.js +27 -8
  172. package/dist/backend/native-codegen.js.map +1 -1
  173. package/dist/backend/native-codegen.test.js +110 -14
  174. package/dist/backend/native-codegen.test.js.map +1 -1
  175. package/dist/backend/native-link-info-core.d.ts +37 -8
  176. package/dist/backend/native-link-info-core.js.map +1 -1
  177. package/dist/backend/runtime-pack-core.d.ts +17 -2
  178. package/dist/backend/runtime-pack-core.js +18 -3
  179. package/dist/backend/runtime-pack-core.js.map +1 -1
  180. package/dist/backend/runtime-pack-targets.test.js +1 -1
  181. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  182. package/dist/backend/runtime-pack.test.js +211 -2
  183. package/dist/backend/runtime-pack.test.js.map +1 -1
  184. package/dist/backend/tree-classes.d.ts +42 -0
  185. package/dist/backend/tree-classes.js +723 -0
  186. package/dist/backend/tree-classes.js.map +1 -0
  187. package/dist/backend/tree-classes.test.d.ts +1 -0
  188. package/dist/backend/tree-classes.test.js +338 -0
  189. package/dist/backend/tree-classes.test.js.map +1 -0
  190. package/dist/backend/vendor-archives.d.ts +5 -1
  191. package/dist/backend/vendor-archives.js +51 -7
  192. package/dist/backend/vendor-archives.js.map +1 -1
  193. package/dist/backend/vendor-inputs.d.ts +25 -4
  194. package/dist/backend/vendor-inputs.js +68 -4
  195. package/dist/backend/vendor-inputs.js.map +1 -1
  196. package/dist/backend/vendor-inputs.test.js +35 -1
  197. package/dist/backend/vendor-inputs.test.js.map +1 -1
  198. package/dist/backend/warm-cache.js +1 -1
  199. package/dist/backend/warm-cache.js.map +1 -1
  200. package/dist/compat/fetch-profile.js +2 -2
  201. package/dist/coverage/report.js +47 -0
  202. package/dist/coverage/report.js.map +1 -1
  203. package/dist/coverage/surface-manifest.js +1 -1
  204. package/dist/diagnostics/codes.d.ts +8 -0
  205. package/dist/diagnostics/codes.js +8 -0
  206. package/dist/diagnostics/codes.js.map +1 -1
  207. package/dist/diagnostics/diagnostic.d.ts +27 -9
  208. package/dist/diagnostics/diagnostic.js +60 -19
  209. package/dist/diagnostics/diagnostic.js.map +1 -1
  210. package/dist/diagnostics/envelope.d.ts +18 -0
  211. package/dist/diagnostics/envelope.js.map +1 -1
  212. package/dist/executable/executable-cache.d.ts +21 -2
  213. package/dist/executable/executable-cache.js +21 -1
  214. package/dist/executable/executable-cache.js.map +1 -1
  215. package/dist/executable/executable-cache.test.js +123 -1
  216. package/dist/executable/executable-cache.test.js.map +1 -1
  217. package/dist/executable/prepare.js +199 -248
  218. package/dist/executable/prepare.js.map +1 -1
  219. package/dist/frontend/analysis.js +200 -18
  220. package/dist/frontend/analysis.js.map +1 -1
  221. package/dist/frontend/builtin-modules.d.ts +4 -0
  222. package/dist/frontend/builtin-modules.js +10 -0
  223. package/dist/frontend/builtin-modules.js.map +1 -1
  224. package/dist/frontend/early-errors.d.ts +12 -2
  225. package/dist/frontend/early-errors.js +535 -4
  226. package/dist/frontend/early-errors.js.map +1 -1
  227. package/dist/frontend/early-errors.test.js +165 -0
  228. package/dist/frontend/early-errors.test.js.map +1 -1
  229. package/dist/frontend/inferred-js-diagnostics.test.js +65 -0
  230. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  231. package/dist/frontend/jsx-opinion-sites.test.d.ts +1 -0
  232. package/dist/frontend/jsx-opinion-sites.test.js +86 -0
  233. package/dist/frontend/jsx-opinion-sites.test.js.map +1 -0
  234. package/dist/frontend/lib-exports.d.ts +23 -4
  235. package/dist/frontend/lib-exports.js +98 -26
  236. package/dist/frontend/lib-exports.js.map +1 -1
  237. package/dist/frontend/lowering/binding-analysis.js +21 -3
  238. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  239. package/dist/frontend/lowering/buffers.d.ts +8 -0
  240. package/dist/frontend/lowering/buffers.js +43 -0
  241. package/dist/frontend/lowering/buffers.js.map +1 -0
  242. package/dist/frontend/lowering/builtin-calls.js +4 -0
  243. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  244. package/dist/frontend/lowering/builtin-namespaces.d.ts +3 -2
  245. package/dist/frontend/lowering/builtin-namespaces.js +24 -3
  246. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
  247. package/dist/frontend/lowering/builtin-statics.d.ts +24 -0
  248. package/dist/frontend/lowering/builtin-statics.js +407 -0
  249. package/dist/frontend/lowering/builtin-statics.js.map +1 -0
  250. package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
  251. package/dist/frontend/lowering/builtins/arguments.js +12 -0
  252. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  253. package/dist/frontend/lowering/builtins/atomics.d.ts +6 -1
  254. package/dist/frontend/lowering/builtins/atomics.js +87 -1
  255. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  256. package/dist/frontend/lowering/builtins/child-process-methods.js +2 -2
  257. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  258. package/dist/frontend/lowering/builtins/child-process-sync.d.ts +13 -0
  259. package/dist/frontend/lowering/builtins/child-process-sync.js +1 -13
  260. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  261. package/dist/frontend/lowering/builtins/child-process.d.ts +10 -4
  262. package/dist/frontend/lowering/builtins/child-process.js +560 -27
  263. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  264. package/dist/frontend/lowering/builtins/compression.d.ts +2 -2
  265. package/dist/frontend/lowering/builtins/compression.js +41 -21
  266. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  267. package/dist/frontend/lowering/builtins/constants.js +7 -2
  268. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  269. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
  270. package/dist/frontend/lowering/builtins/filesystem-calls.js +28 -2
  271. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  272. package/dist/frontend/lowering/builtins/json.js +4 -0
  273. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  274. package/dist/frontend/lowering/builtins/module-calls.js +3 -1
  275. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  276. package/dist/frontend/lowering/builtins/numbers.d.ts +4 -1
  277. package/dist/frontend/lowering/builtins/numbers.js +10 -2
  278. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  279. package/dist/frontend/lowering/builtins/operating-system.d.ts +6 -3
  280. package/dist/frontend/lowering/builtins/operating-system.js +96 -16
  281. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  282. package/dist/frontend/lowering/builtins/process.d.ts +2 -2
  283. package/dist/frontend/lowering/builtins/process.js +103 -8
  284. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  285. package/dist/frontend/lowering/builtins/promises.js +169 -8
  286. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  287. package/dist/frontend/lowering/builtins/properties.js +6 -2
  288. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  289. package/dist/frontend/lowering/builtins/readline.d.ts +6 -4
  290. package/dist/frontend/lowering/builtins/readline.js +180 -36
  291. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  292. package/dist/frontend/lowering/builtins/url.js +35 -12
  293. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  294. package/dist/frontend/lowering/builtins/webassembly.js +2 -0
  295. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  296. package/dist/frontend/lowering/call-arguments.d.ts +10 -0
  297. package/dist/frontend/lowering/call-arguments.js +37 -2
  298. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  299. package/dist/frontend/lowering/call-signatures.d.ts +10 -0
  300. package/dist/frontend/lowering/call-signatures.js +103 -0
  301. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  302. package/dist/frontend/lowering/class-construction.d.ts +14 -2
  303. package/dist/frontend/lowering/class-construction.js +99 -5
  304. package/dist/frontend/lowering/class-construction.js.map +1 -1
  305. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +9 -0
  306. package/dist/frontend/lowering/class-dynamic-dispatch.js +1283 -1030
  307. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  308. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +158 -0
  309. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  310. package/dist/frontend/lowering/class-prototypes.js +20 -15
  311. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  312. package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
  313. package/dist/frontend/lowering/class-runtime-statics.js +20 -1
  314. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  315. package/dist/frontend/lowering/class-unions.js +21 -4
  316. package/dist/frontend/lowering/class-unions.js.map +1 -1
  317. package/dist/frontend/lowering/coercions/function-adapters.js +9 -0
  318. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  319. package/dist/frontend/lowering/coercions/state.d.ts +8 -0
  320. package/dist/frontend/lowering/coercions/state.js +17 -0
  321. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  322. package/dist/frontend/lowering/coercions/structural-plans.js +20 -5
  323. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  324. package/dist/frontend/lowering/coercions/structural.js +10 -1
  325. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  326. package/dist/frontend/lowering/coercions/unions.d.ts +2 -1
  327. package/dist/frontend/lowering/coercions/unions.js +54 -10
  328. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  329. package/dist/frontend/lowering/constructor-returns.d.ts +23 -2
  330. package/dist/frontend/lowering/constructor-returns.js +284 -58
  331. package/dist/frontend/lowering/constructor-returns.js.map +1 -1
  332. package/dist/frontend/lowering/containers/array-callbacks.js +156 -62
  333. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  334. package/dist/frontend/lowering/containers/array-construction.js +21 -3
  335. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  336. package/dist/frontend/lowering/containers/array-from-async.js +139 -3
  337. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
  338. package/dist/frontend/lowering/containers/array-iteration.d.ts +14 -4
  339. package/dist/frontend/lowering/containers/array-iteration.js +24 -7
  340. package/dist/frontend/lowering/containers/array-iteration.js.map +1 -1
  341. package/dist/frontend/lowering/containers/array-methods.js +14 -11
  342. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  343. package/dist/frontend/lowering/containers/bytes.d.ts +6 -0
  344. package/dist/frontend/lowering/containers/bytes.js +446 -86
  345. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  346. package/dist/frontend/lowering/containers/callback-arguments.d.ts +5 -0
  347. package/dist/frontend/lowering/containers/callback-arguments.js +21 -12
  348. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  349. package/dist/frontend/lowering/containers/collection-grouping.js +421 -2
  350. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  351. package/dist/frontend/lowering/containers/collection-methods.js +52 -17
  352. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  353. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +23 -0
  354. package/dist/frontend/lowering/containers/iterator-helpers.js +176 -10
  355. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  356. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +5 -2
  357. package/dist/frontend/lowering/containers/string-and-regexp.js +45 -11
  358. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  359. package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
  360. package/dist/frontend/lowering/crypto-tables.js +5 -5
  361. package/dist/frontend/lowering/dispatch-sites.js +3 -0
  362. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  363. package/dist/frontend/lowering/divergences.d.ts +40 -0
  364. package/dist/frontend/lowering/divergences.js +239 -20
  365. package/dist/frontend/lowering/divergences.js.map +1 -1
  366. package/dist/frontend/lowering/effect-free.d.ts +12 -0
  367. package/dist/frontend/lowering/effect-free.js +44 -0
  368. package/dist/frontend/lowering/effect-free.js.map +1 -0
  369. package/dist/frontend/lowering/expressions/array-literals.d.ts +10 -0
  370. package/dist/frontend/lowering/expressions/array-literals.js +62 -0
  371. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  372. package/dist/frontend/lowering/expressions/binary.js +115 -5
  373. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  374. package/dist/frontend/lowering/expressions/element-access.js +151 -7
  375. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  376. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +15 -0
  377. package/dist/frontend/lowering/expressions/hosted-narrowing.js +54 -1
  378. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
  379. package/dist/frontend/lowering/expressions/identifiers.js +31 -2
  380. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  381. package/dist/frontend/lowering/expressions/narrowing.d.ts +3 -0
  382. package/dist/frontend/lowering/expressions/narrowing.js +175 -22
  383. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  384. package/dist/frontend/lowering/expressions/object-literals.js +173 -11
  385. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  386. package/dist/frontend/lowering/expressions/optional-chains.js +5 -1
  387. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  388. package/dist/frontend/lowering/expressions/property-access.d.ts +8 -0
  389. package/dist/frontend/lowering/expressions/property-access.js +379 -109
  390. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  391. package/dist/frontend/lowering/expressions/relational.js +237 -7
  392. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  393. package/dist/frontend/lowering/expressions/typeof.js +8 -0
  394. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  395. package/dist/frontend/lowering/expressions/union-fields.d.ts +20 -1
  396. package/dist/frontend/lowering/expressions/union-fields.js +103 -13
  397. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  398. package/dist/frontend/lowering/expressions/updates.js +74 -55
  399. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  400. package/dist/frontend/lowering/function-returns.js +37 -10
  401. package/dist/frontend/lowering/function-returns.js.map +1 -1
  402. package/dist/frontend/lowering/general-streams.js +5 -0
  403. package/dist/frontend/lowering/general-streams.js.map +1 -1
  404. package/dist/frontend/lowering/generator-delegation.d.ts +15 -7
  405. package/dist/frontend/lowering/generator-delegation.js +301 -118
  406. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  407. package/dist/frontend/lowering/generic-functions.d.ts +27 -1
  408. package/dist/frontend/lowering/generic-functions.js +432 -18
  409. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  410. package/dist/frontend/lowering/global-function-values.d.ts +25 -0
  411. package/dist/frontend/lowering/global-function-values.js +193 -0
  412. package/dist/frontend/lowering/global-function-values.js.map +1 -0
  413. package/dist/frontend/lowering/global-values.d.ts +6 -4
  414. package/dist/frontend/lowering/global-values.js +24 -10
  415. package/dist/frontend/lowering/global-values.js.map +1 -1
  416. package/dist/frontend/lowering/host-global-values.d.ts +31 -0
  417. package/dist/frontend/lowering/host-global-values.js +121 -0
  418. package/dist/frontend/lowering/host-global-values.js.map +1 -0
  419. package/dist/frontend/lowering/host-globals.d.ts +74 -0
  420. package/dist/frontend/lowering/host-globals.js +344 -0
  421. package/dist/frontend/lowering/host-globals.js.map +1 -0
  422. package/dist/frontend/lowering/http2-constants.js +1 -1
  423. package/dist/frontend/lowering/iterator-adapters.js +46 -17
  424. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  425. package/dist/frontend/lowering/iterator-prototype.d.ts +30 -0
  426. package/dist/frontend/lowering/iterator-prototype.js +160 -0
  427. package/dist/frontend/lowering/iterator-prototype.js.map +1 -0
  428. package/dist/frontend/lowering/key-order-witness.js +43 -22
  429. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  430. package/dist/frontend/lowering/key-order-witness.test.js +1 -0
  431. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  432. package/dist/frontend/lowering/lib-boundary.js +11 -3
  433. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  434. package/dist/frontend/lowering/lower-assert.js +30 -15
  435. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  436. package/dist/frontend/lowering/lower-async-iteration.d.ts +11 -0
  437. package/dist/frontend/lowering/lower-async-iteration.js +15 -0
  438. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  439. package/dist/frontend/lowering/lower-builtin-values.js +11 -1
  440. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  441. package/dist/frontend/lowering/lower-calls.d.ts +25 -0
  442. package/dist/frontend/lowering/lower-calls.js +929 -227
  443. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  444. package/dist/frontend/lowering/lower-calls.test.js +59 -16
  445. package/dist/frontend/lowering/lower-calls.test.js.map +1 -1
  446. package/dist/frontend/lowering/lower-classes.d.ts +20 -0
  447. package/dist/frontend/lowering/lower-classes.js +468 -44
  448. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  449. package/dist/frontend/lowering/lower-event-emitter.d.ts +6 -2
  450. package/dist/frontend/lowering/lower-event-emitter.js +253 -83
  451. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  452. package/dist/frontend/lowering/lower-exprs.d.ts +1 -1
  453. package/dist/frontend/lowering/lower-exprs.js +71 -20
  454. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  455. package/dist/frontend/lowering/lower-functions.js +25 -6
  456. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  457. package/dist/frontend/lowering/lower-generators.js +57 -10
  458. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  459. package/dist/frontend/lowering/lower-global-value.d.ts +6 -0
  460. package/dist/frontend/lowering/lower-global-value.js +14 -5
  461. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  462. package/dist/frontend/lowering/lower-inspect.d.ts +4 -0
  463. package/dist/frontend/lowering/lower-inspect.js +638 -64
  464. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  465. package/dist/frontend/lowering/lower-modules.js +48 -2
  466. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  467. package/dist/frontend/lowering/lower-namespaces.js +18 -0
  468. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  469. package/dist/frontend/lowering/lower-node-island.js +16 -6
  470. package/dist/frontend/lowering/lower-node-island.js.map +1 -1
  471. package/dist/frontend/lowering/lower-server.js +303 -87
  472. package/dist/frontend/lowering/lower-server.js.map +1 -1
  473. package/dist/frontend/lowering/lower-stdlib.js +45 -0
  474. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  475. package/dist/frontend/lowering/lower-stmts.d.ts +14 -11
  476. package/dist/frontend/lowering/lower-stmts.js +270 -52
  477. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  478. package/dist/frontend/lowering/lower-timers.js +110 -27
  479. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  480. package/dist/frontend/lowering/lower-url.js +6 -3
  481. package/dist/frontend/lowering/lower-url.js.map +1 -1
  482. package/dist/frontend/lowering/lowerer.d.ts +227 -21
  483. package/dist/frontend/lowering/lowerer.js +651 -92
  484. package/dist/frontend/lowering/lowerer.js.map +1 -1
  485. package/dist/frontend/lowering/lowerer.test.js +18 -0
  486. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  487. package/dist/frontend/lowering/lowering-facts.d.ts +110 -0
  488. package/dist/frontend/lowering/lowering-facts.js +323 -0
  489. package/dist/frontend/lowering/lowering-facts.js.map +1 -0
  490. package/dist/frontend/lowering/lowering-facts.test.d.ts +1 -0
  491. package/dist/frontend/lowering/lowering-facts.test.js +100 -0
  492. package/dist/frontend/lowering/lowering-facts.test.js.map +1 -0
  493. package/dist/frontend/lowering/nan-coded-reads.d.ts +27 -4
  494. package/dist/frontend/lowering/nan-coded-reads.js +112 -9
  495. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  496. package/dist/frontend/lowering/optional-arguments.d.ts +4 -0
  497. package/dist/frontend/lowering/optional-arguments.js +26 -2
  498. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  499. package/dist/frontend/lowering/partial-assertions.d.ts +0 -3
  500. package/dist/frontend/lowering/partial-assertions.js +9 -15
  501. package/dist/frontend/lowering/partial-assertions.js.map +1 -1
  502. package/dist/frontend/lowering/primitive-throws.d.ts +100 -0
  503. package/dist/frontend/lowering/primitive-throws.js +241 -0
  504. package/dist/frontend/lowering/primitive-throws.js.map +1 -0
  505. package/dist/frontend/lowering/primitive-wrappers.js +1 -0
  506. package/dist/frontend/lowering/primitive-wrappers.js.map +1 -1
  507. package/dist/frontend/lowering/record-inherited.d.ts +17 -1
  508. package/dist/frontend/lowering/record-inherited.js +16 -2
  509. package/dist/frontend/lowering/record-inherited.js.map +1 -1
  510. package/dist/frontend/lowering/record-links.d.ts +73 -0
  511. package/dist/frontend/lowering/record-links.js +797 -0
  512. package/dist/frontend/lowering/record-links.js.map +1 -0
  513. package/dist/frontend/lowering/runtime-optional-provenance.d.ts +27 -7
  514. package/dist/frontend/lowering/runtime-optional-provenance.js +25 -11
  515. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  516. package/dist/frontend/lowering/runtime-optional-report.d.ts +40 -0
  517. package/dist/frontend/lowering/runtime-optional-report.js +300 -0
  518. package/dist/frontend/lowering/runtime-optional-report.js.map +1 -0
  519. package/dist/frontend/lowering/scoped-type-memo.test.d.ts +1 -0
  520. package/dist/frontend/lowering/scoped-type-memo.test.js +86 -0
  521. package/dist/frontend/lowering/scoped-type-memo.test.js.map +1 -0
  522. package/dist/frontend/lowering/static-typeof.d.ts +3 -1
  523. package/dist/frontend/lowering/static-typeof.js +6 -1
  524. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  525. package/dist/frontend/lowering/strict-mode.d.ts +1 -5
  526. package/dist/frontend/lowering/strict-mode.js +4 -30
  527. package/dist/frontend/lowering/strict-mode.js.map +1 -1
  528. package/dist/frontend/lowering/structural-instances.d.ts +7 -0
  529. package/dist/frontend/lowering/structural-instances.js +23 -0
  530. package/dist/frontend/lowering/structural-instances.js.map +1 -1
  531. package/dist/frontend/lowering/surfaces.d.ts +15 -1
  532. package/dist/frontend/lowering/surfaces.js +78 -10
  533. package/dist/frontend/lowering/surfaces.js.map +1 -1
  534. package/dist/frontend/lowering/union-retag.d.ts +13 -1
  535. package/dist/frontend/lowering/union-retag.js +55 -1
  536. package/dist/frontend/lowering/union-retag.js.map +1 -1
  537. package/dist/frontend/lowering/union-retag.test.js +51 -0
  538. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  539. package/dist/frontend/lowering/unit-journal.d.ts +8 -0
  540. package/dist/frontend/lowering/unit-journal.js +14 -0
  541. package/dist/frontend/lowering/unit-journal.js.map +1 -1
  542. package/dist/frontend/lowering/unit-journal.test.js +36 -1
  543. package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
  544. package/dist/frontend/lowering/zlib-constants.js +3 -2
  545. package/dist/frontend/lowering/zlib-constants.js.map +1 -1
  546. package/dist/frontend/npm-static.js +78 -9
  547. package/dist/frontend/npm-static.js.map +1 -1
  548. package/dist/frontend/npm-static.test.js +95 -2
  549. package/dist/frontend/npm-static.test.js.map +1 -1
  550. package/dist/frontend/pipeline.d.ts +5 -4
  551. package/dist/frontend/pipeline.js +94 -31
  552. package/dist/frontend/pipeline.js.map +1 -1
  553. package/dist/frontend/pipeline.test.js +68 -11
  554. package/dist/frontend/pipeline.test.js.map +1 -1
  555. package/dist/frontend/program.d.ts +62 -2
  556. package/dist/frontend/program.js +695 -422
  557. package/dist/frontend/program.js.map +1 -1
  558. package/dist/frontend/program.test.js +37 -1
  559. package/dist/frontend/program.test.js.map +1 -1
  560. package/dist/frontend/services-node.d.ts +7 -0
  561. package/dist/frontend/services-node.js +32 -1
  562. package/dist/frontend/services-node.js.map +1 -1
  563. package/dist/frontend/services-node.test.js +51 -0
  564. package/dist/frontend/services-node.test.js.map +1 -1
  565. package/dist/frontend/shape-inference/overlay.js +68 -2
  566. package/dist/frontend/shape-inference/overlay.js.map +1 -1
  567. package/dist/frontend/tier-analysis.d.ts +9 -0
  568. package/dist/frontend/tier-analysis.js +1 -0
  569. package/dist/frontend/tier-analysis.js.map +1 -1
  570. package/dist/frontend/tsc-codes.d.ts +57 -3
  571. package/dist/frontend/tsc-codes.js +935 -150
  572. package/dist/frontend/tsc-codes.js.map +1 -1
  573. package/dist/frontend/tsc-codes.test.js +221 -12
  574. package/dist/frontend/tsc-codes.test.js.map +1 -1
  575. package/dist/frontend/type-mapper.d.ts +91 -9
  576. package/dist/frontend/type-mapper.js +622 -181
  577. package/dist/frontend/type-mapper.js.map +1 -1
  578. package/dist/index.d.ts +1 -1
  579. package/dist/index.js +80 -15
  580. package/dist/index.js.map +1 -1
  581. package/dist/index.test.d.ts +1 -0
  582. package/dist/index.test.js +60 -0
  583. package/dist/index.test.js.map +1 -0
  584. package/dist/ir/builtin-effects.js +43 -0
  585. package/dist/ir/builtin-effects.js.map +1 -1
  586. package/dist/ir/builtin-signatures.d.ts +1 -1
  587. package/dist/ir/builtin-signatures.js +242 -16
  588. package/dist/ir/builtin-signatures.js.map +1 -1
  589. package/dist/ir/callback-specialization.d.ts +3 -2
  590. package/dist/ir/callback-specialization.js +35 -25
  591. package/dist/ir/callback-specialization.js.map +1 -1
  592. package/dist/ir/capture-values.d.ts +8 -4
  593. package/dist/ir/capture-values.js +9 -6
  594. package/dist/ir/capture-values.js.map +1 -1
  595. package/dist/ir/char-unit-locals.d.ts +6 -2
  596. package/dist/ir/char-unit-locals.js +11 -2
  597. package/dist/ir/char-unit-locals.js.map +1 -1
  598. package/dist/ir/class-key-index.d.ts +18 -0
  599. package/dist/ir/class-key-index.js +29 -0
  600. package/dist/ir/class-key-index.js.map +1 -0
  601. package/dist/ir/class-key-index.test.d.ts +1 -0
  602. package/dist/ir/class-key-index.test.js +25 -0
  603. package/dist/ir/class-key-index.test.js.map +1 -0
  604. package/dist/ir/codec.generated.d.ts +1 -1
  605. package/dist/ir/codec.generated.js +724 -648
  606. package/dist/ir/codec.generated.js.map +1 -1
  607. package/dist/ir/constant-globals.d.ts +5 -2
  608. package/dist/ir/constant-globals.js +25 -27
  609. package/dist/ir/constant-globals.js.map +1 -1
  610. package/dist/ir/expression-inlining.d.ts +4 -2
  611. package/dist/ir/expression-inlining.js +8 -2
  612. package/dist/ir/expression-inlining.js.map +1 -1
  613. package/dist/ir/field-values.d.ts +5 -2
  614. package/dist/ir/field-values.js +32 -21
  615. package/dist/ir/field-values.js.map +1 -1
  616. package/dist/ir/fields.generated.d.ts +11 -2
  617. package/dist/ir/fields.generated.js +8 -0
  618. package/dist/ir/fields.generated.js.map +1 -1
  619. package/dist/ir/final-fields.js +1 -1
  620. package/dist/ir/final-fields.js.map +1 -1
  621. package/dist/ir/function-references.d.ts +5 -4
  622. package/dist/ir/function-references.js +7 -4
  623. package/dist/ir/function-references.js.map +1 -1
  624. package/dist/ir/function-references.test.js +7 -0
  625. package/dist/ir/function-references.test.js.map +1 -1
  626. package/dist/ir/init-only-globals.d.ts +4 -2
  627. package/dist/ir/init-only-globals.js +17 -18
  628. package/dist/ir/init-only-globals.js.map +1 -1
  629. package/dist/ir/inline-array-views.js +1 -0
  630. package/dist/ir/inline-array-views.js.map +1 -1
  631. package/dist/ir/int32-slots.js +7 -0
  632. package/dist/ir/int32-slots.js.map +1 -1
  633. package/dist/ir/ir.d.ts +59 -4
  634. package/dist/ir/ir.js +7 -0
  635. package/dist/ir/ir.js.map +1 -1
  636. package/dist/ir/js-groups.d.ts +51 -0
  637. package/dist/ir/js-groups.js +394 -0
  638. package/dist/ir/js-groups.js.map +1 -0
  639. package/dist/ir/js-groups.test.d.ts +1 -0
  640. package/dist/ir/js-groups.test.js +555 -0
  641. package/dist/ir/js-groups.test.js.map +1 -0
  642. package/dist/ir/js-ic.js +30 -5
  643. package/dist/ir/js-ic.js.map +1 -1
  644. package/dist/ir/js-ic.test.js +27 -1
  645. package/dist/ir/js-ic.test.js.map +1 -1
  646. package/dist/ir/node-index.d.ts +23 -6
  647. package/dist/ir/node-index.js +126 -49
  648. package/dist/ir/node-index.js.map +1 -1
  649. package/dist/ir/numeric-call-specialization.d.ts +4 -2
  650. package/dist/ir/numeric-call-specialization.js +40 -26
  651. package/dist/ir/numeric-call-specialization.js.map +1 -1
  652. package/dist/ir/paired-while-loops.d.ts +4 -2
  653. package/dist/ir/paired-while-loops.js +8 -2
  654. package/dist/ir/paired-while-loops.js.map +1 -1
  655. package/dist/ir/parameter-versions.d.ts +13 -4
  656. package/dist/ir/parameter-versions.js +63 -42
  657. package/dist/ir/parameter-versions.js.map +1 -1
  658. package/dist/ir/property-bags.d.ts +4 -2
  659. package/dist/ir/property-bags.js +22 -17
  660. package/dist/ir/property-bags.js.map +1 -1
  661. package/dist/ir/row-pairs.d.ts +4 -2
  662. package/dist/ir/row-pairs.js +12 -11
  663. package/dist/ir/row-pairs.js.map +1 -1
  664. package/dist/ir/runtime-features.d.ts +87 -12
  665. package/dist/ir/runtime-features.js +263 -160
  666. package/dist/ir/runtime-features.js.map +1 -1
  667. package/dist/ir/runtime-features.test.js +109 -139
  668. package/dist/ir/runtime-features.test.js.map +1 -1
  669. package/dist/ir/runtime-jam-loops.d.ts +35 -0
  670. package/dist/ir/runtime-jam-loops.js +604 -0
  671. package/dist/ir/runtime-jam-loops.js.map +1 -0
  672. package/dist/ir/runtime-jam-loops.test.d.ts +1 -0
  673. package/dist/ir/runtime-jam-loops.test.js +565 -0
  674. package/dist/ir/runtime-jam-loops.test.js.map +1 -0
  675. package/dist/ir/saturating-loop-jams.d.ts +4 -2
  676. package/dist/ir/saturating-loop-jams.js +11 -10
  677. package/dist/ir/saturating-loop-jams.js.map +1 -1
  678. package/dist/ir/scalar-records.d.ts +5 -2
  679. package/dist/ir/scalar-records.js +12 -2
  680. package/dist/ir/scalar-records.js.map +1 -1
  681. package/dist/ir/self-captures.d.ts +4 -2
  682. package/dist/ir/self-captures.js +32 -27
  683. package/dist/ir/self-captures.js.map +1 -1
  684. package/dist/ir/serialize.d.ts +6 -1
  685. package/dist/ir/serialize.js +87 -23
  686. package/dist/ir/serialize.js.map +1 -1
  687. package/dist/ir/serialize.test.js +26 -0
  688. package/dist/ir/serialize.test.js.map +1 -1
  689. package/dist/ir/tiers.js +1 -0
  690. package/dist/ir/tiers.js.map +1 -1
  691. package/dist/ir/traverse.js +4 -0
  692. package/dist/ir/traverse.js.map +1 -1
  693. package/dist/ir/typed-argument-clones.d.ts +30 -0
  694. package/dist/ir/typed-argument-clones.js +789 -0
  695. package/dist/ir/typed-argument-clones.js.map +1 -0
  696. package/dist/ir/union-arm-loops.d.ts +3 -0
  697. package/dist/ir/union-arm-loops.js +373 -0
  698. package/dist/ir/union-arm-loops.js.map +1 -0
  699. package/dist/ir/union-arm-loops.test.d.ts +1 -0
  700. package/dist/ir/union-arm-loops.test.js +230 -0
  701. package/dist/ir/union-arm-loops.test.js.map +1 -0
  702. package/dist/ir/validate.js +88 -18
  703. package/dist/ir/validate.js.map +1 -1
  704. package/dist/library/compiler-self-identity.d.ts +8 -2
  705. package/dist/library/compiler-self-identity.js +92 -18
  706. package/dist/library/compiler-self-identity.js.map +1 -1
  707. package/dist/library/compiler-self-identity.test.js +150 -3
  708. package/dist/library/compiler-self-identity.test.js.map +1 -1
  709. package/dist/library/int-infer.d.ts +5 -0
  710. package/dist/library/int-infer.js +15 -3
  711. package/dist/library/int-infer.js.map +1 -1
  712. package/dist/library/ir-policy.js +1 -0
  713. package/dist/library/ir-policy.js.map +1 -1
  714. package/dist/library/library-cache.d.ts +4 -0
  715. package/dist/library/library-cache.js +2 -0
  716. package/dist/library/library-cache.js.map +1 -1
  717. package/dist/library/library-cache.test.js +26 -0
  718. package/dist/library/library-cache.test.js.map +1 -1
  719. package/dist/library/prepare.js +99 -31
  720. package/dist/library/prepare.js.map +1 -1
  721. package/dist/native/cache.d.ts +7 -0
  722. package/dist/native/cache.js +47 -0
  723. package/dist/native/cache.js.map +1 -1
  724. package/dist/native/cache.test.js +13 -1
  725. package/dist/native/cache.test.js.map +1 -1
  726. package/dist/native/cli.js +1 -1
  727. package/dist/native/cli.js.map +1 -1
  728. package/dist/native/compiler.js +18 -3
  729. package/dist/native/compiler.js.map +1 -1
  730. package/dist/native/executable-cache-open.test.js +31 -5
  731. package/dist/native/executable-cache-open.test.js.map +1 -1
  732. package/dist/native/executable-cache.d.ts +6 -1
  733. package/dist/native/executable-cache.js +7 -1
  734. package/dist/native/executable-cache.js.map +1 -1
  735. package/dist/native/prepare.d.ts +3 -0
  736. package/dist/native/prepare.js +43 -26
  737. package/dist/native/prepare.js.map +1 -1
  738. package/dist/native/prepare.test.js +25 -3
  739. package/dist/native/prepare.test.js.map +1 -1
  740. package/dist/native/sanitizer.js +10 -1
  741. package/dist/native/sanitizer.js.map +1 -1
  742. package/dist/native/sanitizer.test.js +7 -2
  743. package/dist/native/sanitizer.test.js.map +1 -1
  744. package/dist/node-islands/boundary.d.ts +12 -0
  745. package/dist/node-islands/boundary.js +38 -6
  746. package/dist/node-islands/boundary.js.map +1 -1
  747. package/dist/node-islands/boundary.test.d.ts +1 -0
  748. package/dist/node-islands/boundary.test.js +76 -0
  749. package/dist/node-islands/boundary.test.js.map +1 -0
  750. package/dist/node-islands/detect.d.ts +9 -0
  751. package/dist/node-islands/detect.js +110 -0
  752. package/dist/node-islands/detect.js.map +1 -1
  753. package/dist/node-islands/detect.test.js +24 -0
  754. package/dist/node-islands/detect.test.js.map +1 -1
  755. package/dist/node-islands/graph-islands.d.ts +40 -0
  756. package/dist/node-islands/graph-islands.js +128 -0
  757. package/dist/node-islands/graph-islands.js.map +1 -0
  758. package/dist/node-islands/growth.d.ts +57 -0
  759. package/dist/node-islands/growth.js +205 -0
  760. package/dist/node-islands/growth.js.map +1 -0
  761. package/dist/node-islands/report.d.ts +12 -0
  762. package/dist/node-islands/report.js +28 -0
  763. package/dist/node-islands/report.js.map +1 -1
  764. package/dist/node-islands/report.test.js +2 -0
  765. package/dist/node-islands/report.test.js.map +1 -1
  766. package/dist/node-islands/rules.js +5 -0
  767. package/dist/node-islands/rules.js.map +1 -1
  768. package/dist/node-islands/scan.d.ts +11 -2
  769. package/dist/node-islands/scan.js +61 -9
  770. package/dist/node-islands/scan.js.map +1 -1
  771. package/dist/wasm/translate.js +11 -5
  772. package/dist/wasm/translate.js.map +1 -1
  773. package/dist/wasm/translate.test.js +35 -0
  774. package/dist/wasm/translate.test.js.map +1 -1
  775. package/package.json +20 -20
  776. package/surface-manifest.json +184 -117
@@ -17,6 +17,20 @@ function diagnostics(source) {
17
17
  rmSync(directory, { recursive: true, force: true });
18
18
  }
19
19
  }
20
+ /** The preflight diagnostics of an ES module (`.mjs`), the goal symbol the
21
+ * [Await] and top-level-`using` rules differ under. */
22
+ function moduleDiagnostics(source) {
23
+ const directory = mkdtempSync(join(tmpdir(), "scriptc-early-errors-"));
24
+ writeFileSync(join(directory, "main.mjs"), source);
25
+ const load = loadProgram(join(directory, "main.mjs"));
26
+ try {
27
+ return checkPreflight(load).map((diagnostic) => diagnostic.code);
28
+ }
29
+ finally {
30
+ load.dispose();
31
+ rmSync(directory, { recursive: true, force: true });
32
+ }
33
+ }
20
34
  test.for([
21
35
  // A function body's top-level function declarations are var-scoped, so
22
36
  // duplicates are legal in strict code too.
@@ -39,4 +53,155 @@ test.for([
39
53
  ])("Node refuses: %s", ([source, code]) => {
40
54
  expect(diagnostics(source)).toContain(code);
41
55
  });
56
+ test.for([
57
+ // Legal destructuring assignment and for-in/of heads: a variable, a
58
+ // property access, or a pattern of them.
59
+ "var a, b;\n[a, b] = [1, 2];\nconsole.log(a, b);",
60
+ "var o = {};\n({ x: o.y = 1, ...o.rest } = { x: 2 });\nconsole.log(o.y);",
61
+ "var o = {};\n[o.a = 1, ...o.r] = [2];\nconsole.log(o.a);",
62
+ "var a;\nfor ([a] of [[1]]) a;\nfor ({ a } of [{ a: 2 }]) a;\nconsole.log(a);",
63
+ // A rest element and the target of a default hold a pattern as well.
64
+ "var a, b;\n[ ...[a] ] = [[1]];\n[ [b] = [2] ] = [];\nconsole.log(a, b);",
65
+ "var a;\n({ x: [a] = [3] } = {});\nconsole.log(a);",
66
+ // Parentheses are transparent around a target.
67
+ "var a;\n((a)) = 1;\nconsole.log(a);",
68
+ "var a;\n[ ...(a) ] = [1];\nconsole.log(a);",
69
+ // A private name is readable anywhere an enclosing class declares it.
70
+ "class C { #x = 1; m() { return this.#x; } static s() { return new C().#x; } }\nnew C().m();",
71
+ "class C { #x = 1; m() { class D { #x = 2; y = this.#x; } return new D().y; } }\nnew C().m();",
72
+ "class C { #x = 1; m(o) { return #x in o; } }\nnew C().m(new C());",
73
+ ])("Node accepts (early targets): %s", (source) => {
74
+ expect(diagnostics(source)).toEqual([]);
75
+ });
76
+ test.for([
77
+ ["import('a', {}, '');", "SC0008"],
78
+ ["import();", "SC0008"],
79
+ ["import('a', {}, {});", "SC0008"],
80
+ ["import('a') -= 1;", "SC0010"],
81
+ ["var f = function () {};\nf() += 1;", "SC0010"],
82
+ ["var a;\n++a.b();", "SC0010"],
83
+ // A pattern never sits inside parentheses, and an object's rest target
84
+ // takes a reference only.
85
+ ["var a;\n[ ([a]) ] = [[1]];", "SC0010"],
86
+ ["var a;\n({ ...[a] } = {});", "SC0010"],
87
+ ["var C = class { m() { this.#x; } };\nnew C().m();", "SC0009"],
88
+ ["class C { #x; }\nnew C().#y;", "SC0009"],
89
+ // `#x in obj` is readable wherever `#x` is in scope (the accepts list
90
+ // above), and `#x` in no class's scope is a SyntaxError.
91
+ ["class C { #x; }\nconsole.log(#x in {});", "SC0009"],
92
+ ])("Node refuses (early targets): %s", ([source, code]) => {
93
+ expect(diagnostics(source)).toContain(code);
94
+ });
95
+ /* `await` is a ReservedWord in the contexts whose grammar passes [Await]
96
+ * down: an async function's body and parameters, a class static block, a
97
+ * module's top level — and an arrow's PARAMETERS inherit that, while an
98
+ * arrow's BODY and a class field initializer reset it. Node is the oracle
99
+ * for every row below. */
100
+ test.for([
101
+ // [Await] false: a plain function's parameter default, an arrow body, a
102
+ // field initializer, and the IdentifierName slots.
103
+ "function f(a = await) { return a; }\nconsole.log(f(2));",
104
+ "async function f() { (() => { var await = 1; return await; })(); }\nf();",
105
+ "async function f() { function g() { return 1; } return g(); }\nf();",
106
+ "class C { x = await2; }\nnew C();",
107
+ "class C { static { var o = { await: 1 }; console.log(o.await); } }\nnew C();",
108
+ "class C { await() { return 1; } }\nconsole.log(new C().await());",
109
+ // A member's computed name is evaluated where the member is defined, so an
110
+ // async method's own [Await] does not reach its name.
111
+ "function outer() { var await = 'm'; class C { async [await]() {} } return new C(); }\nconsole.log(outer());",
112
+ "function outer() { var await = 'k'; return { async [await]() { return 1; } }; }\nconsole.log(outer());",
113
+ // `let`/`const` at the top level of a script are ordinary declarations:
114
+ // the Using bit is what SC0013 reads, and Const carries its own bit.
115
+ "const a = 1;\nlet b = 2;\nconsole.log(a + b);",
116
+ ])("Node accepts (await as an identifier): %s", (source) => {
117
+ expect(diagnostics(source)).toEqual([]);
118
+ });
119
+ test.for([
120
+ // The checker already refuses these two with its own diagnostic; the
121
+ // early-error pass names the same site under the rule it belongs to.
122
+ ["async function f() { var await = 1; }\nf();", "SC0011"],
123
+ ["async function f(await) {}\nf();", "SC0011"],
124
+ // tsc accepts these two, and Node does not.
125
+ ["class C { static { ((x = await) => 0); } }\nnew C();", "SC0011"],
126
+ ["async () => { (a = await) => 0; };", "SC0011"],
127
+ ])("Node refuses (await as an identifier): %s", ([source, code]) => {
128
+ expect(diagnostics(source)).toContain(code);
129
+ });
130
+ test.for([
131
+ // A module's top level is an [Await] context, but a destructuring rename's
132
+ // property name is an IdentifierName there, not a binding.
133
+ "const { await: renamed } = { await: 1 };\nconsole.log(renamed);",
134
+ "function f({ await: renamed }) { return renamed; }\nconsole.log(f({ await: 2 }));",
135
+ ])("Node accepts (await as an IdentifierName in a module): %s", (source) => {
136
+ expect(moduleDiagnostics(source)).toEqual([]);
137
+ });
138
+ test.for([
139
+ // The binding side of the same pattern is a BindingIdentifier, and in a
140
+ // module that is the reserved word.
141
+ ["var await = 1;\nconsole.log(await);", "SC0011"],
142
+ ["const { await } = { await: 1 };\nconsole.log(await);", "SC0011"],
143
+ ])("Node refuses (await as a binding in a module): %s", ([source, code]) => {
144
+ expect(moduleDiagnostics(source)).toContain(code);
145
+ });
146
+ test.for([
147
+ // ContainsArguments stops at a function expression and never sees a
148
+ // method's own arguments or a computed element name.
149
+ "class C { x = function () { return arguments.length; }; }\nnew C().x();",
150
+ "class C { m() { return arguments.length; } }\nnew C().m();",
151
+ "class C { [arguments2] = 1; }\nnew C();",
152
+ ])("Node accepts (arguments outside a field initializer): %s", (source) => {
153
+ expect(diagnostics(source)).toEqual([]);
154
+ });
155
+ test.for([
156
+ ["class C { x = arguments; }\nnew C();", "SC0012"],
157
+ ["class C { static x = arguments; }\nnew C();", "SC0012"],
158
+ ["class C { x = (() => arguments); }\nnew C().x();", "SC0012"],
159
+ ["class C { static { arguments; } }\nnew C();", "SC0012"],
160
+ ])("Node refuses (arguments in a field initializer): %s", ([source, code]) => {
161
+ expect(diagnostics(source)).toContain(code);
162
+ });
163
+ test.for([
164
+ // A block, a function body, and a class static block all admit `using`.
165
+ "{ class R { [Symbol.dispose]() {} } using r = new R(); }",
166
+ "function f() { class R { [Symbol.dispose]() {} } using r = new R(); }\nf();",
167
+ "class C { static { class R { [Symbol.dispose]() {} } using r = new R(); } }\nnew C();",
168
+ ])("Node accepts (nested using): %s", (source) => {
169
+ expect(diagnostics(source)).toEqual([]);
170
+ });
171
+ test.for([
172
+ ["class R { [Symbol.dispose]() {} }\nusing r = new R();", "SC0013"],
173
+ ["class R { [Symbol.dispose]() {} }\nawait using r = new R();", "SC0013"],
174
+ ])("Node refuses (script-top-level using): %s", ([source, code]) => {
175
+ expect(diagnostics(source)).toContain(code);
176
+ });
177
+ test.for([
178
+ // Strict mode narrows the assignment target: `eval` and `arguments` stay
179
+ // ordinary names in sloppy code and as property names.
180
+ "var [eval2] = [1];\nconsole.log(eval2);",
181
+ "var o = {};\no.eval = 1;\nconsole.log(o.eval);",
182
+ ])("Node accepts (sloppy eval/arguments targets): %s", (source) => {
183
+ expect(diagnostics(source)).toEqual([]);
184
+ });
185
+ test.for([
186
+ ['"use strict";\narguments = 1;', "SC0014"],
187
+ ['"use strict";\n([eval] = [1]);', "SC0014"],
188
+ ['"use strict";\nfor (arguments of [1]) break;', "SC0014"],
189
+ ])("Node refuses (strict eval/arguments targets): %s", ([source, code]) => {
190
+ expect(diagnostics(source)).toContain(code);
191
+ });
192
+ test.for([
193
+ // A `var` in the catch block is Annex B's, and a nested block is a
194
+ // different Block.
195
+ "try {} catch (e) { var e; }\nconsole.log(typeof e);",
196
+ "try { throw 1; } catch (e) { { function e() {} } }",
197
+ ])("Node accepts (catch block declarations): %s", (source) => {
198
+ expect(diagnostics(source)).toEqual([]);
199
+ });
200
+ test.for([
201
+ ["try {} catch (e) { function e() {} }", "SC0015"],
202
+ ['"use strict";\ntry {} catch (e) { function e() {} }', "SC0015"],
203
+ ["try {} catch ([e]) { function e() {} }", "SC0015"],
204
+ ])("Node refuses (catch parameter redeclared): %s", ([source, code]) => {
205
+ expect(diagnostics(source)).toContain(code);
206
+ });
42
207
  //# sourceMappingURL=early-errors.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"early-errors.test.js","sourceRoot":"","sources":["../../src/frontend/early-errors.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE;oBACoB;AACpB,SAAS,WAAW,CAAC,MAAc;IACjC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACvE,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,IAAI,CAAC,GAAG,CAAC;IACP,uEAAuE;IACvE,2CAA2C;IAC3C,8EAA8E;IAC9E,kEAAkE;IAClE,6EAA6E;IAC7E,wDAAwD;IACxD,8EAA8E;IAC9E,+EAA+E;IAC/E,0CAA0C;IAC1C,oDAAoD;CACrD,CAAC,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,EAAE;IAChC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,GAAG,CAAC;IACP,CAAC,uDAAuD,EAAE,QAAQ,CAAC;IACnE,CAAC,wDAAwD,EAAE,QAAQ,CAAC;IACpE,CAAC,6DAA6D,EAAE,QAAQ,CAAC;IACzE,CAAC,gFAAgF,EAAE,QAAQ,CAAC;CAC7F,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;IACxC,MAAM,CAAC,WAAW,CAAC,MAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"early-errors.test.js","sourceRoot":"","sources":["../../src/frontend/early-errors.test.ts"],"names":[],"mappings":"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"}
@@ -74,4 +74,69 @@ export function* generator() {
74
74
  "'yield' expression implicitly results in an 'any' type because its containing generator lacks a return-type annotation.",
75
75
  ]);
76
76
  });
77
+ test("a JavaScript module keeps the setter opinion to itself", () => {
78
+ const library = `export class Store {
79
+ constructor() {
80
+ this.stored = 0;
81
+ }
82
+ set value(next) {
83
+ this.stored = next;
84
+ }
85
+ get value() {
86
+ return this.stored;
87
+ }
88
+ }
89
+ export const bag = {
90
+ set only(next) {
91
+ console.log(next);
92
+ },
93
+ };
94
+ `;
95
+ const main = 'import { Store, bag } from "./library.js"; const store = new Store(); store.value = 2; bag.only = 3; console.log(store.value);';
96
+ // A JavaScript setter's parameter is whatever the caller passes, and the
97
+ // lowering gives it checked-dynamic storage and dynamic reads; the
98
+ // checker's "implicitly any" opinion belongs to TypeScript input, where an
99
+ // annotation is a promise.
100
+ expect(diagnostics(library, main)).toEqual([]);
101
+ expect(diagnostics(library, main, "ts").map((diagnostic) => diagnostic.message)).toContain("Property 'only' implicitly has type 'any', because its set accessor lacks a parameter type annotation.");
102
+ });
103
+ test.for([
104
+ [
105
+ "2704",
106
+ 'export const box = {};\nObject.defineProperty(box, "flag", { value: 1, configurable: true });\nexport function drop() { delete box.flag; }',
107
+ ],
108
+ ["2464", "export const box = {};\nexport function keyed() { return { [box]: 1 }; }"],
109
+ ["2365", "export function joined() { return true + 1; }"],
110
+ ["2689", "export class Derived extends AsyncIterator {}"],
111
+ ["1166", 'export class Field { ["a" + "b"] = 1; }'],
112
+ [
113
+ "7032",
114
+ "export class Hidden { set #slot(next) { console.log(next); } run(value) { this.#slot = value; } }",
115
+ ],
116
+ ])("a JavaScript module keeps the TS%s opinion it cannot lower", ([, library]) => {
117
+ // These codes stay refused: each names a program the lowerer cannot build
118
+ // exactly (a delete of a builtin's own property, a class element's computed
119
+ // key, an operator on operands it cannot convert, a class over a stdlib
120
+ // base, a class field with no stable key), so the relaxation must not
121
+ // admit them. The base is the async iterator interface: `extends Iterator`
122
+ // is a program the lowering builds, so it no longer carries an opinion to
123
+ // keep. The invalid assignment-target pair (2364 `f() += g()`,
124
+ // 2357 `f()++`) stays refused the same way: Node calls `f`, then throws.
125
+ expect(diagnostics(library, 'import * as library from "./library.js"; console.log(library);').length).toBeGreaterThan(0);
126
+ });
127
+ test("a checked JavaScript file keeps a typed slot its JSDoc declared", () => {
128
+ // TS2322 is one of the opinion table's `checkedJs: "enforce"` rows: a
129
+ // project that asked tsc to check its JavaScript keeps the error, while
130
+ // the same file unchecked takes the opinion (nothing at runtime checks the
131
+ // annotation Node never reads).
132
+ const main = 'import * as library from "./library.js"; console.log(library);';
133
+ const library = "/** @type {string} */\nexport let box = 1;\n";
134
+ expect(diagnostics(`// @ts-check\n${library}`, main).map((d) => d.message)).toContain("Type 'number' is not assignable to type 'string'.");
135
+ expect(diagnostics(library, main)).toEqual([]);
136
+ });
137
+ test("a checked JavaScript file still takes the opinions its JSDoc never asked for", () => {
138
+ // TS7006 has no `checkedJs: "enforce"`: checkJs asks tsc to check the
139
+ // JSDoc a file carries, not to invent parameter annotations it does not.
140
+ expect(diagnostics("// @ts-check\nexport function add(a, b) { return a + b; }\n", 'import { add } from "./library.js"; console.log(add(1, 2));')).toEqual([]);
141
+ });
77
142
  //# sourceMappingURL=inferred-js-diagnostics.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inferred-js-diagnostics.test.js","sourceRoot":"","sources":["../../src/frontend/inferred-js-diagnostics.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inferred-js-diagnostics.test.js","sourceRoot":"","sources":["../../src/frontend/inferred-js-diagnostics.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,86 @@
1
+ import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { expect, test } from "vitest";
5
+ import { checkPreflight, loadProgram } from "./program-node.js";
6
+ /** A checked JavaScript program whose JSX comes before the admitted site.
7
+ * The rewrite inserts the runtime import and replaces the element, so every
8
+ * offset after the first element moves by a different amount than the one
9
+ * before it. */
10
+ function jsxProject() {
11
+ const directory = mkdtempSync(join(tmpdir(), "scriptc-jsx-opinion-"));
12
+ writeFileSync(join(directory, "package.json"), '{"type":"module"}');
13
+ writeFileSync(join(directory, "tsconfig.json"), JSON.stringify({
14
+ compilerOptions: {
15
+ allowJs: true,
16
+ checkJs: true,
17
+ strict: true,
18
+ jsx: "react-jsx",
19
+ noEmit: true,
20
+ },
21
+ }));
22
+ writeFileSync(join(directory, "jsx-types.d.ts"), [
23
+ "declare namespace JSX {",
24
+ " interface IntrinsicElements { div: any }",
25
+ "}",
26
+ 'declare module "react/jsx-runtime" {',
27
+ " export const jsx: any;",
28
+ " export const jsxs: any;",
29
+ " export const Fragment: any;",
30
+ "}",
31
+ "",
32
+ ].join("\n"));
33
+ const source = [
34
+ '/// <reference path="./jsx-types.d.ts" />',
35
+ 'const box = <div className="box" />;',
36
+ "export function pick(value) { return value; }",
37
+ "export { box };",
38
+ "",
39
+ ].join("\n");
40
+ const file = join(directory, "app.jsx");
41
+ writeFileSync(file, source);
42
+ return { directory, file, source };
43
+ }
44
+ test("an admitted opinion site is recorded at its span in the text the lowering holds", () => {
45
+ const { directory, file } = jsxProject();
46
+ const load = loadProgram(file);
47
+ try {
48
+ expect(checkPreflight(load)).toEqual([]);
49
+ const lowered = load.jsxSources?.get(file);
50
+ expect(lowered).toBeDefined();
51
+ // The parameter's implicit any (TS7006) is admitted once: the world over
52
+ // the text as written and the world over the rewritten text name the
53
+ // same site, so the record is one entry, at the rewritten offset.
54
+ const sites = (load.admittedOpinions ?? []).filter((site) => site.code === 7006);
55
+ expect(sites).toHaveLength(1);
56
+ const site = sites[0];
57
+ expect(lowered.text.slice(site.pos, site.end)).toBe("value");
58
+ }
59
+ finally {
60
+ load.dispose();
61
+ rmSync(directory, { recursive: true, force: true });
62
+ }
63
+ });
64
+ test("a site with no JSX rewrite keeps its diagnostic offsets", () => {
65
+ const directory = mkdtempSync(join(tmpdir(), "scriptc-js-opinion-"));
66
+ writeFileSync(join(directory, "package.json"), '{"type":"module"}');
67
+ writeFileSync(join(directory, "tsconfig.json"), JSON.stringify({
68
+ compilerOptions: { allowJs: true, checkJs: true, strict: true, noEmit: true },
69
+ }));
70
+ const source = "export function pick(value) { return value; }\n";
71
+ const file = join(directory, "app.js");
72
+ writeFileSync(file, source);
73
+ const load = loadProgram(file);
74
+ try {
75
+ expect(checkPreflight(load)).toEqual([]);
76
+ const sites = (load.admittedOpinions ?? []).filter((site) => site.code === 7006);
77
+ expect(sites).toHaveLength(1);
78
+ const site = sites[0];
79
+ expect(source.slice(site.pos, site.end)).toBe("value");
80
+ }
81
+ finally {
82
+ load.dispose();
83
+ rmSync(directory, { recursive: true, force: true });
84
+ }
85
+ });
86
+ //# sourceMappingURL=jsx-opinion-sites.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-opinion-sites.test.js","sourceRoot":"","sources":["../../src/frontend/jsx-opinion-sites.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
1
  import * as ts from "./ts7/adapter.js";
2
2
  import type { SrcLoc } from "../ir/ir.js";
3
- export interface EntryExportInfo {
3
+ /** An export name that resolves to a function declaration. */
4
+ export interface EntryFunctionExport {
5
+ kind: "function";
4
6
  name: string;
7
+ /** The declaration site (where SC4003/SC4004/SC4007 anchor). */
5
8
  loc: SrcLoc;
6
9
  /** Declared type parameters — SC4007 (a profile entry needs one concrete
7
10
  * compiled signature). */
@@ -11,6 +14,22 @@ export interface EntryExportInfo {
11
14
  /** `function*` — SC4004. */
12
15
  generator: boolean;
13
16
  }
14
- /** Every `export function f(...)` of the entry file, by exported name.
15
- * Overload signatures collapse onto one entry (same name, one body). */
16
- export declare function entryFunctionExports(entry: ts.SourceFile): Map<string, EntryExportInfo>;
17
+ /** An export name that resolves to something other than a function
18
+ * declaration: SC4002 names what the name denotes. */
19
+ export interface EntryValueExport {
20
+ kind: "value";
21
+ name: string;
22
+ loc: SrcLoc;
23
+ /** "a class", "a variable", "a type", … */
24
+ what: string;
25
+ }
26
+ export type EntryExport = EntryFunctionExport | EntryValueExport;
27
+ /** The symbol the entry module's export `name` denotes, with aliases (a
28
+ * local export list, a named re-export, and the chains they can form)
29
+ * resolved to the declaration that supplies the value. Null when the
30
+ * entry module exports nothing under that name. */
31
+ export declare function resolveEntryExportSymbol(checker: ts.TypeChecker, entry: ts.SourceFile, name: string): ts.Symbol | null;
32
+ /** Resolve the profile's export names against the entry module — the facts
33
+ * the SC4002/SC4004/SC4007 refusals key on, by exported name. Names the
34
+ * entry does not export at all are absent from the map. */
35
+ export declare function entryExportFacts(program: ts.Program, entry: ts.SourceFile, names: readonly string[]): Map<string, EntryExport>;
@@ -1,35 +1,107 @@
1
- /* Library mode's export resolution input: what the ENTRY source file exports
2
- * as function declarations. Resolution runs on the frontend's program
3
- * object after preflight (design §5.3) — the export map may only name
4
- * exports of the profile's one entry module, and today's compilable export
5
- * surface for functions is exactly `export function f(...)` declarations
6
- * (export lists and re-exports are SC1014-fenced, so nothing else can
7
- * reach a compiled program). The per-declaration facts collected here are
1
+ /* Library mode's export resolution input: what the ENTRY module exports,
2
+ * resolved through its export table. Resolution runs on the frontend's
3
+ * program object after preflight (design §5.3) — the export map may only
4
+ * name exports of the profile's one entry module, and the compilable
5
+ * export surface for functions is a function DECLARATION reached from
6
+ * that module's exports. A direct `export function f(...)`, an export
7
+ * list (`export { f }`, `export { f as g }`), and a re-export
8
+ * (`export { f } from "./m"`, `export * from "./m"`) all name the same
9
+ * declaration, so the facts (and, in the lowering, the unit the
10
+ * declaration compiles to) come from the declaration site: the one-line
11
+ * facade SC4002 points authors to is exactly as good as declaring the
12
+ * function in the entry. The per-declaration facts collected here are
8
13
  * what the SC4002/SC4004/SC4007 refusals key on; the marshalling check
9
14
  * (SC4003) runs later against the lowered IrFunction's types. */
10
15
  import * as ts from "./ts7/adapter.js";
11
- /** Every `export function f(...)` of the entry file, by exported name.
12
- * Overload signatures collapse onto one entry (same name, one body). */
13
- export function entryFunctionExports(entry) {
16
+ /** The symbol the entry module's export `name` denotes, with aliases (a
17
+ * local export list, a named re-export, and the chains they can form)
18
+ * resolved to the declaration that supplies the value. Null when the
19
+ * entry module exports nothing under that name. */
20
+ export function resolveEntryExportSymbol(checker, entry, name) {
21
+ const moduleSymbol = checker.getSymbolAtLocation(entry);
22
+ if (moduleSymbol === undefined)
23
+ return null;
24
+ const exported = checker.getExportsOfModule(moduleSymbol).find((s) => ts.symbolName(s) === name);
25
+ if (exported === undefined)
26
+ return null;
27
+ let symbol = exported;
28
+ // Alias chains are bounded like any other syntactic walk: a malformed or
29
+ // cyclic export graph must not spin here (the checker itself refuses
30
+ // cycles earlier; this is the belt).
31
+ for (let hops = 0; hops < 32 && (symbol.flags & ts.SymbolFlags.Alias) !== 0; hops++)
32
+ symbol = checker.getAliasedSymbol(symbol);
33
+ return symbol;
34
+ }
35
+ /** Resolve the profile's export names against the entry module — the facts
36
+ * the SC4002/SC4004/SC4007 refusals key on, by exported name. Names the
37
+ * entry does not export at all are absent from the map. */
38
+ export function entryExportFacts(program, entry, names) {
14
39
  const out = new Map();
15
- for (const stmt of entry.statements.nodes) {
16
- if (!ts.isFunctionDeclaration(stmt) || stmt.name === undefined)
17
- continue;
18
- const mods = ts.canHaveModifiers(stmt) ? ts.getModifiers(stmt) : undefined;
19
- const exported = mods?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword) === true;
20
- if (!exported)
21
- continue;
22
- const name = stmt.name.text;
23
- if (out.has(name) && stmt.body === undefined)
24
- continue; // overload signature
25
- out.set(name, {
40
+ if (names.length === 0)
41
+ return out;
42
+ const checker = program.getTypeChecker();
43
+ for (const name of names) {
44
+ const symbol = resolveEntryExportSymbol(checker, entry, name);
45
+ if (symbol === null)
46
+ continue; // not exported: SC4002
47
+ out.set(name, exportFactOf(symbol, name));
48
+ }
49
+ return out;
50
+ }
51
+ /** One export symbol's fact. Overload signatures collapse onto their
52
+ * implementation (same symbol, one body); a name that denotes any other
53
+ * value or type is described by what it is so SC4002 can say so. */
54
+ function exportFactOf(symbol, name) {
55
+ const declarations = symbol.declarations;
56
+ const functions = declarations.filter((d) => ts.isFunctionDeclaration(d));
57
+ if (functions.length > 0) {
58
+ const impl = functions.find((d) => d.body !== undefined) ?? functions[functions.length - 1];
59
+ const sf = ts.getSourceFileOfNode(impl);
60
+ const mods = ts.canHaveModifiers(impl) ? ts.getModifiers(impl) : undefined;
61
+ return {
62
+ kind: "function",
26
63
  name,
27
- loc: { file: entry.fileName, start: ts.tokenStartOfNode(stmt), end: stmt.end },
28
- generic: (stmt.typeParameters?.nodes.length ?? 0) > 0,
64
+ loc: { file: sf.fileName, start: ts.tokenStartOfNode(impl), end: impl.end },
65
+ generic: (impl.typeParameters?.nodes.length ?? 0) > 0,
29
66
  async: mods?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) === true,
30
- generator: stmt.asteriskToken !== undefined,
31
- });
67
+ generator: impl.asteriskToken !== undefined,
68
+ };
32
69
  }
33
- return out;
70
+ const declaration = symbol.valueDeclaration ?? declarations[0];
71
+ const loc = declaration === undefined
72
+ ? { file: "", start: 0, end: 0 }
73
+ : {
74
+ file: ts.getSourceFileOfNode(declaration).fileName,
75
+ start: ts.tokenStartOfNode(declaration),
76
+ end: declaration.end,
77
+ };
78
+ return { kind: "value", name, loc, what: whatItIs(symbol, declaration) };
79
+ }
80
+ /** A short noun phrase for what a non-function export denotes, for the
81
+ * SC4002 message. */
82
+ function whatItIs(symbol, declaration) {
83
+ if (declaration !== undefined) {
84
+ if (ts.isClassDeclaration(declaration) || ts.isClassExpression(declaration))
85
+ return "a class";
86
+ if (ts.isEnumDeclaration(declaration))
87
+ return "an enum";
88
+ if (ts.isVariableDeclaration(declaration))
89
+ return "a variable";
90
+ if (ts.isImportSpecifier(declaration) || ts.isImportClause(declaration))
91
+ return "an imported binding";
92
+ if (ts.isInterfaceDeclaration(declaration) || ts.isTypeAliasDeclaration(declaration))
93
+ return "a type";
94
+ if (ts.isModuleDeclaration(declaration))
95
+ return "a namespace";
96
+ }
97
+ if ((symbol.flags & ts.SymbolFlags.Class) !== 0)
98
+ return "a class";
99
+ if ((symbol.flags & ts.SymbolFlags.Enum) !== 0)
100
+ return "an enum";
101
+ if ((symbol.flags & ts.SymbolFlags.Variable) !== 0)
102
+ return "a variable";
103
+ if ((symbol.flags & (ts.SymbolFlags.Interface | ts.SymbolFlags.TypeAlias)) !== 0)
104
+ return "a type";
105
+ return "a non-function value";
34
106
  }
35
107
  //# sourceMappingURL=lib-exports.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lib-exports.js","sourceRoot":"","sources":["../../src/frontend/lib-exports.ts"],"names":[],"mappings":"AAAA;;;;;;;;iEAQiE;AACjE,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAevC;wEACwE;AACxE,MAAM,UAAU,oBAAoB,CAAC,KAAoB;IACvD,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,SAAS;QACzE,MAAM,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3E,MAAM,QAAQ,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;QACpF,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,SAAS,CAAC,qBAAqB;QAC7E,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;YACZ,IAAI;YACJ,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;YAC9E,OAAO,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;YACrD,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI;YACxE,SAAS,EAAE,IAAI,CAAC,aAAa,KAAK,SAAS;SAC5C,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"lib-exports.js","sourceRoot":"","sources":["../../src/frontend/lib-exports.ts"],"names":[],"mappings":"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"}
@@ -264,6 +264,15 @@ export function nullishGenericBindingUnitOf(lowerer, sym) {
264
264
  return null;
265
265
  const declared = lowerer.checker.getTypeOfSymbol(sym);
266
266
  const mapped = lowerer.mapTypeOf(declared);
267
+ // A DECLARED generic signature (`let a: <T>() => T = null!`) maps to its
268
+ // erased func type, but a nullish value has no func slot either: the
269
+ // no-storage family keeps the binding, exactly as it does for the empty
270
+ // record below. A non-generic func slot keeps its storage and its
271
+ // representation error.
272
+ if (mapped !== null &&
273
+ mapped.kind === "func" &&
274
+ lowerer.checker.getCallSignatures(declared).some((sig) => sig.getTypeParameters().length > 0))
275
+ return unit;
267
276
  if (mapped !== null) {
268
277
  // Only the EMPTY interned shape qualifies among record mappings —
269
278
  // the all-generic-signature interface (`I<A & B>`) whose struct has
@@ -402,9 +411,18 @@ export function deadUnmappableBinding(lowerer, sym, decl) {
402
411
  // The type gate LAST among the cheap checks: querying the checker for
403
412
  // a type is the expensive step (and can panic upstream — the 1e999
404
413
  // bug), so only survivors of the syntactic filters pay it. Mappable
405
- // types keep their real storage.
406
- if (lowerer.mapTypeOf(lowerer.checker.getTypeOfSymbol(sym)) !== null)
407
- return false;
414
+ // types keep their real storage, EXCEPT a generic signature, which now
415
+ // maps to its erased func type (`var a1: { <T, U extends T>(): void }`):
416
+ // a dead binding of one is still materialized and dropped by Node, so
417
+ // it keeps this family's zero code instead of gaining a func slot.
418
+ const declared = lowerer.checker.getTypeOfSymbol(sym);
419
+ const mapped = lowerer.mapTypeOf(declared);
420
+ if (mapped !== null) {
421
+ const erasedSignature = mapped.kind === "func" &&
422
+ lowerer.checker.getCallSignatures(declared).some((sig) => sig.getTypeParameters().length > 0);
423
+ if (!erasedSignature)
424
+ return false;
425
+ }
408
426
  const symText = ts.symbolName(sym);
409
427
  const namesSym = (e) => ts.isIdentifier(e) && e.text === symText && lowerer.resolveValueSymbol(e) === sym;
410
428
  let dead = true;