@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
@@ -1,6 +1,6 @@
1
- import { realpathSync } from "node:fs";
1
+ import { readFileSync, realpathSync } from "node:fs";
2
2
  import { frontendDisposed } from "../frontend/dispose-hook.js";
3
- import { checkerPanicDiag, nodeIslandEntryPatchDiag, nodeIslandModuleNoteDiag, nodeIslandNoteDiag, nodeIslandPatchedReadDiag, nodeIslandStripDiag, nodeIslandRetryFailedDiag, npmStaticRefusalDiag, iceDiag, isCheckerPanic, stdioPatchAcrossIslandsDiag, } from "../diagnostics/diagnostic.js";
3
+ import { checkerPanicDiag, nodeIslandEntryPatchDiag, nodeIslandEntryReadDiag, nodeIslandImplicitGlobalReadDiag, nodeIslandModuleNoteDiag, nodeIslandNoteDiag, nodeIslandReaderStripDiag, nodeIslandStripDiag, nodeIslandRetryFailedDiag, npmStaticRefusalDiag, nativePackageDiag, iceDiag, isCheckerPanic, stdioPatchAcrossIslandsDiag, } from "../diagnostics/diagnostic.js";
4
4
  import { validateModule } from "../ir/validate.js";
5
5
  import { checkContracts } from "../contracts/check.js";
6
6
  import { fenceSpeculativeWasiFunctions, moduleWasiUnavailableSurface, targetRefusalDiag, } from "../backend/target-diagnostics.js";
@@ -11,7 +11,7 @@ import { classifyDiagnostic, classifyMarker, isIslandReasonCode, } from "../node
11
11
  import { packageDirOf, packageVersionOf } from "../node-islands/origin.js";
12
12
  import { describe } from "../node-islands/summary.js";
13
13
  import { resolveBareModule } from "../frontend/resolve.js";
14
- import { isEsmFile } from "../frontend/lowering/lower-node-island.js";
14
+ import { growIslandSet } from "../node-islands/growth.js";
15
15
  import { isJsSourceFileName } from "../frontend/tsc-codes.js";
16
16
  /** Release the parser/checker before native object generation begins.
17
17
  * `unitStore` keeps the lowered units of this build for the next one
@@ -50,6 +50,18 @@ export function prepareExecutableModule(entryPath, opts, ffi, buildPlatform, cre
50
50
  let disposed = false;
51
51
  let fenceGrown = null;
52
52
  const fenceSure = new Set();
53
+ // The growth inputs this build's frontend offers (node-islands/growth.ts).
54
+ // Built once: the frontend does not change inside a build, and its scan is
55
+ // a whole-program walk.
56
+ let growthInputs = null;
57
+ let growthBuilt = false;
58
+ const growthOf = () => {
59
+ if (!growthBuilt) {
60
+ growthInputs = islandGrowth(entryPath, opts, fe);
61
+ growthBuilt = true;
62
+ }
63
+ return growthInputs;
64
+ };
53
65
  // The frontend (and its tsgo server) is released as soon as lowering
54
66
  // ends — clang and the link never hold it open.
55
67
  try {
@@ -66,7 +78,8 @@ export function prepareExecutableModule(entryPath, opts, ffi, buildPlatform, cre
66
78
  // An import of a natively compiled package that preflight refuses
67
79
  // in the importer (a CommonJS namespace import) is that package's
68
80
  // refusal: it runs in a Node island instead.
69
- const grown = preflightIslands(entryPath, opts, fe, lowerIslands);
81
+ const growth = growthOf();
82
+ const grown = growth === null ? null : growIslandSet(growth, lowerIslands, { preflight: fe.preflight });
70
83
  if (grown !== null) {
71
84
  fe.dispose();
72
85
  frontendDisposed();
@@ -99,7 +112,10 @@ export function prepareExecutableModule(entryPath, opts, ffi, buildPlatform, cre
99
112
  // Packages whose own modules refused to lower run in Node islands
100
113
  // too (the authoritative lowering, DESIGN.md §1.4): build again with
101
114
  // them as islands.
102
- const grown = loweringIslands(entryPath, opts, fe, lowered.diagnostics, lowerIslands, fe.nodeIslandScan?.({ userJs: false }).edges);
115
+ const growth = growthOf();
116
+ const grown = growth === null
117
+ ? null
118
+ : growIslandSet(growth, lowerIslands, { diagnostics: lowered.diagnostics });
103
119
  // Sloppy user modules the lowering refused join the same retry
104
120
  // (DESIGN.md note 1 §3.2): one reload with every island at once,
105
121
  // never one round per module.
@@ -117,8 +133,12 @@ export function prepareExecutableModule(entryPath, opts, ffi, buildPlatform, cre
117
133
  // declare (interfaces, aliases such as `Static<T>`) are `any`, so its
118
134
  // diagnostics describe a program the island build does not compile:
119
135
  // there the packages' declarations type the user code.
120
- const marked = retryFences
121
- ? fenceIslands(entryPath, opts, fe, lowered, lowerIslands, false)
136
+ const marked = retryFences && growth !== null
137
+ ? growIslandSet(growth, lowerIslands, {
138
+ diagnostics: lowered.diagnostics,
139
+ fences: lowered.runtimeFences,
140
+ fenceMode: "report",
141
+ })
122
142
  : null;
123
143
  if (marked !== null) {
124
144
  fe.dispose();
@@ -164,8 +184,18 @@ export function prepareExecutableModule(entryPath, opts, ffi, buildPlatform, cre
164
184
  lowered.module.contracts = checked.contracts;
165
185
  contractWarnings = checked.warnings;
166
186
  }
167
- if (retryFences)
168
- fenceGrown = fenceIslands(entryPath, opts, fe, lowered, lowerIslands, true, fenceSure);
187
+ if (retryFences) {
188
+ const growth = growthOf();
189
+ fenceGrown =
190
+ growth === null
191
+ ? null
192
+ : growIslandSet(growth, lowerIslands, {
193
+ diagnostics: lowered.diagnostics,
194
+ fences: lowered.runtimeFences,
195
+ fenceMode: "sure",
196
+ sure: fenceSure,
197
+ });
198
+ }
169
199
  }
170
200
  finally {
171
201
  if (!disposed) {
@@ -316,6 +346,32 @@ function decideNodeIslands(entryPath, opts, fe, lowerIslands, lowerModules) {
316
346
  const scan = fe.nodeIslandScan({ userJs: policy.mode === "auto" });
317
347
  const moduleDecision = moduleIslands(entryPath, policy, scan);
318
348
  const modules = moduleDecision.modules;
349
+ // A sloppy write to an undeclared name creates a global — a sloppy-only
350
+ // semantic the native tier does not implement, so the module runs in
351
+ // Node (the user's policy, 2026-10-31). The checker decides this one, not
352
+ // the syntax pre-scan: a write target needs bindings, and its sloppiness
353
+ // depends on the enclosing function and file strictness. Preflight
354
+ // reports it as SC1091 carrying the R2.4 reason. The entry stays native
355
+ // (a whole-file island is a different feature), and a strict-mode write
356
+ // is an ordinary lowering gap, so neither joins here.
357
+ if (policy.mode === "auto") {
358
+ for (const d of fe.preflight) {
359
+ if (d.code !== "SC1091" || d.reason !== "implicit-global-write")
360
+ continue;
361
+ const file = d.loc.file;
362
+ if (modules.has(file) || sameFile(file, entryPath))
363
+ continue;
364
+ if (!isJsSourceFileName(file) || file.includes("/node_modules/"))
365
+ continue;
366
+ const reason = classifyDiagnostic(d, "refusal");
367
+ modules.set(file, {
368
+ file,
369
+ class: reason.class,
370
+ reason: describe(reason),
371
+ decision: "auto",
372
+ });
373
+ }
374
+ }
319
375
  // Modules the lowering refused keep their first reason (the reload no
320
376
  // longer compiles them).
321
377
  for (const [file, island] of lowerModules)
@@ -328,10 +384,12 @@ function decideNodeIslands(entryPath, opts, fe, lowerIslands, lowerModules) {
328
384
  }
329
385
  for (const problem of moduleDecision.stripProblems)
330
386
  errors.push(nodeIslandStripDiag(problem.file, problem.construct, problem.loc));
331
- // Who else must see the patch (H3.4): every non-islanded module that
332
- // reads a patched member through the builtin's CommonJS object. An npm
333
- // package joins the island set (a patch meant for it must reach it); a
334
- // user module is SC8020, because native code cannot see the patch.
387
+ // Who else must see the patch (H3.4): every module that reads a patched
388
+ // member through the builtin's CommonJS object joins the island set, npm
389
+ // package or user module alike — the patch lives in the islands' Node, and
390
+ // only sharing the builtin shows the read the patch, as in Node. The entry
391
+ // stays native, and a user TypeScript module Node cannot strip cannot run
392
+ // in Node at all: both are SC8006.
335
393
  const patchedMembers = new Map();
336
394
  for (const m of scan.modules) {
337
395
  if (!modules.has(m.file))
@@ -344,6 +402,10 @@ function decideNodeIslands(entryPath, opts, fe, lowerIslands, lowerModules) {
344
402
  }
345
403
  }
346
404
  const readerPackages = new Map();
405
+ // A package the build marks native stays native: a read that only an
406
+ // island could satisfy is SC8003, once per package and construct.
407
+ const forcedNativeReads = new Set();
408
+ const readerModules = new Map();
347
409
  if (policy.mode === "auto" && patchedMembers.size > 0) {
348
410
  for (const m of scan.modules) {
349
411
  if (modules.has(m.file))
@@ -353,6 +415,14 @@ function decideNodeIslands(entryPath, opts, fe, lowerIslands, lowerModules) {
353
415
  if (patchFile === undefined)
354
416
  continue;
355
417
  if (m.origin === "npm" && m.packageName !== null && m.packageDir !== null) {
418
+ if (policy.forcedNative.has(m.packageName)) {
419
+ const key = `${m.packageName}:${read.member}`;
420
+ if (!forcedNativeReads.has(key)) {
421
+ forcedNativeReads.add(key);
422
+ errors.push(nativePackageDiag(m.packageName, `it reads '${read.member}' through the CommonJS ${builtinModuleOf(read.member)} object, which island module ${patchFile} patches; a native read cannot see the patch`, fe.npmImportSites.get(m.packageName) ?? read.loc));
423
+ }
424
+ continue;
425
+ }
356
426
  if (!readerPackages.has(m.packageName) && !refused.has(m.packageName))
357
427
  readerPackages.set(m.packageName, {
358
428
  packageDir: m.packageDir,
@@ -361,17 +431,74 @@ function decideNodeIslands(entryPath, opts, fe, lowerIslands, lowerModules) {
361
431
  });
362
432
  }
363
433
  else if (m.origin === "user") {
364
- errors.push(nodeIslandPatchedReadDiag(read.member, patchFile, read.loc));
434
+ if (sameFile(m.file, entryPath)) {
435
+ errors.push(nodeIslandEntryReadDiag(m.file, read.member, builtinModuleOf(read.member), patchFile, read.loc));
436
+ continue;
437
+ }
438
+ if (m.stripProblem !== null) {
439
+ errors.push(nodeIslandReaderStripDiag(m.file, read.member, patchFile, m.stripProblem.construct, m.stripProblem.loc));
440
+ continue;
441
+ }
442
+ if (!readerModules.has(m.file))
443
+ readerModules.set(m.file, { member: read.member, patchFile });
444
+ }
445
+ }
446
+ }
447
+ }
448
+ // Who else must see an implicit global (H3.4): a sloppy write creates the
449
+ // name on Node's global object when its island module runs, and native
450
+ // code has no global object to read it from. An npm package that reads
451
+ // the name joins the island set (its Node sees the global); a user module
452
+ // or the entry is SC8020.
453
+ const readerGlobals = new Map();
454
+ const createdGlobals = policy.mode === "auto" ? implicitGlobalWrites(fe, modules) : new Map();
455
+ if (createdGlobals.size > 0) {
456
+ for (const m of scan.modules) {
457
+ if (modules.has(m.file))
458
+ continue;
459
+ for (const read of m.globalReads) {
460
+ const writerFile = createdGlobals.get(read.name);
461
+ if (writerFile === undefined)
462
+ continue;
463
+ if (m.origin === "npm" && m.packageName !== null && m.packageDir !== null) {
464
+ if (policy.forcedNative.has(m.packageName)) {
465
+ const key = `${m.packageName}:${read.name}`;
466
+ if (!forcedNativeReads.has(key)) {
467
+ forcedNativeReads.add(key);
468
+ errors.push(nativePackageDiag(m.packageName, `it reads '${read.name}', which island module ${writerFile} creates as an implicit global; the native build has no global object, so the read cannot see it`, fe.npmImportSites.get(m.packageName) ?? read.loc));
469
+ }
470
+ continue;
471
+ }
472
+ if (!readerGlobals.has(m.packageName) && !refused.has(m.packageName))
473
+ readerGlobals.set(m.packageName, {
474
+ packageDir: m.packageDir,
475
+ global: read.name,
476
+ writerFile,
477
+ });
478
+ }
479
+ else if (m.origin === "user") {
480
+ errors.push(nodeIslandImplicitGlobalReadDiag(read.name, writerFile, read.loc));
365
481
  }
366
482
  }
367
483
  }
368
484
  }
369
485
  if (errors.length > 0)
370
486
  return { packages: new Map(), modules: new Map(), notes: [], errors };
487
+ // A user module that reads a patched member runs in a Node island, so its
488
+ // read goes through the patched object exactly as in Node (H3.4).
489
+ for (const [file, reader] of readerModules) {
490
+ modules.set(file, {
491
+ file,
492
+ class: "object-model",
493
+ reason: `it reads '${reader.member}' through the CommonJS ${builtinModuleOf(reader.member)} object, which island module ${reader.patchFile} patches`,
494
+ decision: "auto",
495
+ });
496
+ }
371
497
  if (refused.size === 0 &&
372
498
  policy.forcedNode.size === 0 &&
373
499
  modules.size === 0 &&
374
- readerPackages.size === 0)
500
+ readerPackages.size === 0 &&
501
+ readerGlobals.size === 0)
375
502
  return null;
376
503
  const report = buildNodeIslandReport({
377
504
  entry: entryPath,
@@ -450,6 +577,22 @@ function decideNodeIslands(entryPath, opts, fe, lowerIslands, lowerModules) {
450
577
  });
451
578
  notes.push(nodeIslandNoteDiag(name, version, "object-model", reason, fe.npmImportSites.get(name) ?? { file: entryPath, start: 0, end: 0 }));
452
579
  }
580
+ // npm packages that read an implicit global an island module creates join
581
+ // the island set: the global lives on their Node's global object.
582
+ for (const [name, reader] of readerGlobals) {
583
+ if (packages.has(name))
584
+ continue;
585
+ const version = packageVersionOf(reader.packageDir);
586
+ const reason = `it reads '${reader.global}', the implicit global island module ${reader.writerFile} creates`;
587
+ packages.set(name, {
588
+ name,
589
+ version,
590
+ dir: reader.packageDir,
591
+ class: "object-model",
592
+ reason,
593
+ });
594
+ notes.push(nodeIslandNoteDiag(name, version, "object-model", reason, fe.npmImportSites.get(name) ?? { file: entryPath, start: 0, end: 0 }));
595
+ }
453
596
  for (const island of [...modules.values()].sort((a, b) => a.file < b.file ? -1 : a.file > b.file ? 1 : 0))
454
597
  notes.push(nodeIslandModuleNoteDiag(island.file, island.class, island.reason, {
455
598
  file: island.file,
@@ -458,6 +601,29 @@ function decideNodeIslands(entryPath, opts, fe, lowerIslands, lowerModules) {
458
601
  }));
459
602
  return packages.size === 0 && modules.size === 0 ? null : { packages, modules, notes, errors };
460
603
  }
604
+ /** The names the island modules' sloppy implicit-global writes create, each
605
+ * with the file that creates it. Preflight reports each write as an SC1091
606
+ * whose range is the write target. */
607
+ function implicitGlobalWrites(fe, modules) {
608
+ const globals = new Map();
609
+ const sources = new Map();
610
+ for (const d of fe.preflight) {
611
+ if (d.code !== "SC1091" || d.reason !== "implicit-global-write")
612
+ continue;
613
+ const file = d.loc.file;
614
+ if (!modules.has(file))
615
+ continue;
616
+ let source = sources.get(file);
617
+ if (source === undefined) {
618
+ source = readFileSync(file, "utf8");
619
+ sources.set(file, source);
620
+ }
621
+ const name = source.slice(d.loc.start, d.loc.end);
622
+ if (/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name) && !globals.has(name))
623
+ globals.set(name, file);
624
+ }
625
+ return globals;
626
+ }
461
627
  /** The builtin module a patched member belongs to ("fs" of
462
628
  * "fs.readFileSync"). */
463
629
  function builtinModuleOf(member) {
@@ -484,84 +650,23 @@ function patchFileOf(patched, member) {
484
650
  }
485
651
  return undefined;
486
652
  }
487
- /** The island set grown by the npm packages whose own modules refused to
488
- * lower (`--node-islands=auto` only), or null when there are none. */
489
- function loweringIslands(entryPath, opts, fe, diagnostics, known, edges) {
490
- const policy = nodeIslandPolicy(readProjectConfig(entryPath), opts.nodeIslands);
491
- if (policy.mode !== "auto" || known.size > 16)
653
+ /** The growth inputs this build's frontend offers the shared island-growth
654
+ * rules (node-islands/growth.ts), or null when the frontend holds no island
655
+ * scan: the rules then grow nothing. `npmStatic` keeps a `"auto"` request
656
+ * out: only an explicit list names the packages to keep native. */
657
+ function islandGrowth(entryPath, opts, fe) {
658
+ const scan = fe.nodeIslandScan?.({ userJs: false });
659
+ if (scan === undefined)
492
660
  return null;
493
- const compiled = new Set(fe.npmStatic.filter((e) => e.status === "static").map((e) => e.package));
494
- const grown = new Map(known);
495
- for (const d of diagnostics) {
496
- // A use of a package outside the compiled module graph (an import()
497
- // the frontend did not compile): that package runs in an island.
498
- const named = d.code === "SC2013" ? /npm package '([^']+)'/.exec(d.message) : null;
499
- if (named !== null) {
500
- const name = named[1];
501
- if (grown.has(name) || policy.forcedNative.has(name) || policy.unloaded.has(name))
502
- continue;
503
- const js = resolveBareModule(d.loc.file, name, "js-only") ??
504
- resolveBareModule(d.loc.file, name, "js-only", "require");
505
- const at = js === null ? null : packageDirOf(js.typesFile);
506
- if (at === null || at.name !== name)
507
- continue;
508
- grown.set(name, {
509
- name,
510
- version: packageVersionOf(at.dir),
511
- dir: at.dir,
512
- class: "packaging",
513
- reason: `${d.code}: ${d.message}`,
514
- });
515
- continue;
516
- }
517
- if (!isIslandReasonCode(d.code))
518
- continue;
519
- const at = packageDirOf(d.loc.file);
520
- if (at === null || !compiled.has(at.name) || grown.has(at.name))
521
- continue;
522
- if (policy.forcedNative.has(at.name) || policy.unloaded.has(at.name))
523
- continue;
524
- const reason = classifyDiagnostic(d, "refusal");
525
- grown.set(at.name, {
526
- name: at.name,
527
- version: packageVersionOf(at.dir),
528
- dir: at.dir,
529
- class: reason.class,
530
- reason: describe(reason),
531
- });
532
- }
533
- // A native ES module that imports an island CommonJS module would read
534
- // its bindings from the module's exports object, where Node gives it the
535
- // namespace its CommonJS facade builds (the lexed names, module.exports
536
- // as the default): the importing package runs in the island too.
537
- for (let added = edges !== undefined; added;) {
538
- added = false;
539
- for (const edge of edges) {
540
- const name = edge.to;
541
- if (!grown.has(name) || edge.fromDir === null || edge.shim)
542
- continue;
543
- const at = packageDirOf(edge.fromFile);
544
- if (at === null || grown.has(at.name) || !compiled.has(at.name))
545
- continue;
546
- if (policy.forcedNative.has(at.name) || policy.unloaded.has(at.name))
547
- continue;
548
- if (!isEsmFile(edge.fromFile))
549
- continue;
550
- const target = resolveBareModule(edge.fromFile, name, "js-only") ??
551
- resolveBareModule(edge.fromFile, name, "js-only", "require");
552
- if (target === null || isEsmFile(target.typesFile))
553
- continue;
554
- grown.set(at.name, {
555
- name: at.name,
556
- version: packageVersionOf(at.dir),
557
- dir: at.dir,
558
- class: "packaging",
559
- reason: `an ES module of the package imports the CommonJS island package '${name}'`,
560
- });
561
- added = true;
562
- }
563
- }
564
- return grown.size === known.size ? null : grown;
661
+ return {
662
+ entry: entryPath,
663
+ policy: nodeIslandPolicy(readProjectConfig(entryPath), opts.nodeIslands),
664
+ scan,
665
+ npm: fe.npmStatic,
666
+ npmImportSites: fe.npmImportSites,
667
+ ...(Array.isArray(opts.npmStatic) ? { explicitNpmStatic: opts.npmStatic } : {}),
668
+ sourceTexts: () => fe.sourceTexts(),
669
+ };
565
670
  }
566
671
  /** The island modules grown by the lowering's refusals in user JavaScript
567
672
  * (`--node-islands=auto` only), or null when there are none: a sloppy
@@ -577,7 +682,8 @@ function loweringModules(entryPath, opts, diagnostics, known) {
577
682
  if (!isIslandReasonCode(d.code))
578
683
  continue;
579
684
  const file = d.loc.file;
580
- // Packages run in Node through their own decision (loweringIslands).
685
+ // Packages run in Node through their own decision
686
+ // (node-islands/growth.ts).
581
687
  if (file.includes("/node_modules/") || packageDirOf(file) !== null)
582
688
  continue;
583
689
  if (!isJsSourceFileName(file) || sameFile(file, entryPath))
@@ -598,159 +704,4 @@ function loweringModules(entryPath, opts, diagnostics, known) {
598
704
  }
599
705
  return grown.size === known.size ? null : grown;
600
706
  }
601
- /** Preflight refusals at import statements of natively compiled npm
602
- * packages (`--node-islands=auto` only): those packages become islands. */
603
- function preflightIslands(entryPath, opts, fe, known) {
604
- const policy = nodeIslandPolicy(readProjectConfig(entryPath), opts.nodeIslands);
605
- if (policy.mode !== "auto" || known.size > 16)
606
- return null;
607
- const compiled = new Set(fe.npmStatic.filter((e) => e.status === "static").map((e) => e.package));
608
- if (compiled.size === 0)
609
- return null;
610
- const texts = fe.sourceTexts();
611
- const grown = new Map(known);
612
- for (const d of fe.preflight) {
613
- if (d.code !== "SC1013")
614
- continue;
615
- const text = texts.get(d.loc.file);
616
- if (text === undefined)
617
- continue;
618
- // The import statement around the diagnostic: its module specifier.
619
- const start = text.lastIndexOf("import", d.loc.start);
620
- const end = text.indexOf(";", d.loc.end);
621
- const stmt = text.slice(start < 0 ? d.loc.start : start, end < 0 ? text.length : end);
622
- const m = /\bfrom\s*["']([^"']+)["']/.exec(stmt);
623
- if (m === null)
624
- continue;
625
- const spec = m[1];
626
- const name = spec.startsWith("@") ? spec.split("/").slice(0, 2).join("/") : spec.split("/")[0];
627
- if (!compiled.has(name) || grown.has(name))
628
- continue;
629
- if (policy.forcedNative.has(name) || policy.unloaded.has(name))
630
- continue;
631
- const site = fe.npmImportSites.get(name);
632
- const jsEntry = site === undefined ? null : resolveBareModule(site.file, spec, "js-only");
633
- const at = jsEntry === null ? null : packageDirOf(jsEntry.typesFile);
634
- if (at === null)
635
- continue;
636
- grown.set(name, {
637
- name,
638
- version: packageVersionOf(at.dir),
639
- dir: at.dir,
640
- class: "gap",
641
- reason: `${d.code}: ${d.message}`,
642
- });
643
- }
644
- return grown.size === known.size ? null : grown;
645
- }
646
- /** Packages compiled natively with runtime fences (refusals deferred to the
647
- * operation that reaches them) that should run in islands instead: those
648
- * with a fence that surely fires (one in top-level module code, which runs
649
- * when the module evaluates) or that itself needs the runtime (R1). Other
650
- * fences stay deferred refusals until decision 8 (D6) retires them, so
651
- * typed packages like jose stay native. With `requireFence` false (after a
652
- * failed build) the package's island class by NI-2's report decides
653
- * instead: runtime (R1) or object-model (R2). `--node-islands=auto` only;
654
- * null for none. */
655
- function fenceIslands(entryPath, opts, fe, lowered, known, requireFence = true, sure) {
656
- if (fe.nodeIslandScan === undefined)
657
- return null;
658
- if (requireFence && lowered.runtimeFences.length === 0)
659
- return null;
660
- const policy = nodeIslandPolicy(readProjectConfig(entryPath), opts.nodeIslands);
661
- if (policy.mode !== "auto" || known.size > 32)
662
- return null;
663
- // An explicit --npm-static request keeps its package native.
664
- const explicit = new Set(Array.isArray(opts.npmStatic) ? opts.npmStatic.map((n) => n.replace(/\.\.\.$/, "")) : []);
665
- const compiled = new Set(fe.npmStatic
666
- .filter((e) => e.status === "static" && !explicit.has(e.package))
667
- .map((e) => e.package));
668
- const fenced = new Map();
669
- for (const d of lowered.runtimeFences) {
670
- const at = packageDirOf(d.loc.file);
671
- if (at === null || !compiled.has(at.name) || known.has(at.name))
672
- continue;
673
- if (policy.forcedNative.has(at.name) || policy.unloaded.has(at.name))
674
- continue;
675
- // A fence in top-level module code throws when the module evaluates:
676
- // it counts like one that needs the runtime.
677
- const runtime = d.moduleInit === true || classifyDiagnostic(d, "fence").class === "runtime";
678
- fenced.set(at.name, (fenced.get(at.name) ?? false) || runtime);
679
- if (runtime)
680
- sure?.add(at.name);
681
- }
682
- if (requireFence && fenced.size === 0)
683
- return null;
684
- const scan = fe.nodeIslandScan({ userJs: false });
685
- const report = buildNodeIslandReport({
686
- entry: entryPath,
687
- scan,
688
- npm: fe.npmStatic,
689
- diagnostics: lowered.diagnostics,
690
- fences: lowered.runtimeFences,
691
- policy,
692
- });
693
- const grown = new Map(known);
694
- for (const island of report.islands) {
695
- const runtimeFence = requireFence
696
- ? fenced.get(island.package)
697
- : (fenced.get(island.package) ?? false);
698
- if (runtimeFence === undefined || island.path === null)
699
- continue;
700
- if (!compiled.has(island.package) || known.has(island.package))
701
- continue;
702
- if (policy.forcedNative.has(island.package) || policy.unloaded.has(island.package))
703
- continue;
704
- // With fences (requireFence), only fences that surely fire count: a
705
- // gap fence inside a function body may never run (jose's typed paths
706
- // stay native, DECISIONS.md 2026-10-21). After a failed build
707
- // (!requireFence), the package's report class decides.
708
- if (requireFence && !runtimeFence)
709
- continue;
710
- if (!runtimeFence && island.class !== "runtime" && island.class !== "object-model")
711
- continue;
712
- grown.set(island.package, {
713
- name: island.package,
714
- version: island.version,
715
- dir: island.path,
716
- class: island.class,
717
- reason: island.reason,
718
- });
719
- }
720
- // A native ES module that imports an island CommonJS module would read
721
- // its bindings from the module's exports object, where Node gives it the
722
- // namespace its CommonJS facade builds (the lexed names, module.exports
723
- // as the default): the importing package runs in the island too.
724
- for (let added = true; added;) {
725
- added = false;
726
- for (const edge of scan.edges) {
727
- const name = edge.to;
728
- if (!grown.has(name) || edge.fromDir === null || edge.shim)
729
- continue;
730
- const at = packageDirOf(edge.fromFile);
731
- if (at === null || grown.has(at.name) || !compiled.has(at.name))
732
- continue;
733
- if (policy.forcedNative.has(at.name) || policy.unloaded.has(at.name))
734
- continue;
735
- if (!isEsmFile(edge.fromFile))
736
- continue;
737
- const target = resolveBareModule(edge.fromFile, name, "js-only") ??
738
- resolveBareModule(edge.fromFile, name, "js-only", "require");
739
- if (target === null || isEsmFile(target.typesFile))
740
- continue;
741
- grown.set(at.name, {
742
- name: at.name,
743
- version: packageVersionOf(at.dir),
744
- dir: at.dir,
745
- class: "packaging",
746
- reason: `an ES module of the package imports the CommonJS island package '${name}'`,
747
- });
748
- // It goes wherever that island goes, the sure-fence retry included.
749
- if (known.has(name) || sure?.has(name) === true)
750
- sure?.add(at.name);
751
- added = true;
752
- }
753
- }
754
- return grown.size === known.size ? null : grown;
755
- }
756
707
  //# sourceMappingURL=prepare.js.map