@scriptc/compiler 0.4.6 → 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 (1082) 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 +29 -6
  4. package/ambient/node-fallback/fs-promises.d.ts +1 -1
  5. package/ambient/node-fallback/fs.d.ts +57 -12
  6. package/ambient/node-fallback/http.d.ts +26 -18
  7. package/ambient/node-fallback/https.d.ts +5 -2
  8. package/ambient/node-fallback/net.d.ts +25 -0
  9. package/ambient/node-fallback/os.d.ts +11 -1
  10. package/ambient/node-fallback/path-posix.d.ts +6 -0
  11. package/ambient/node-fallback/path-win32.d.ts +5 -0
  12. package/ambient/node-fallback/path.d.ts +2 -0
  13. package/ambient/node-fallback/querystring.d.ts +3 -3
  14. package/ambient/node-fallback/zlib.d.ts +31 -2
  15. package/ambient/scriptc-node-fallback.d.ts +95 -20
  16. package/ambient/scriptc.d.ts +7 -2
  17. package/dist/backend/executable-features.js +22 -1
  18. package/dist/backend/executable-features.js.map +1 -1
  19. package/dist/backend/immutability.d.ts +12 -1
  20. package/dist/backend/immutability.js +50 -4
  21. package/dist/backend/immutability.js.map +1 -1
  22. package/dist/backend/immutability.test.js +95 -1
  23. package/dist/backend/immutability.test.js.map +1 -1
  24. package/dist/backend/library-pack.d.ts +6 -0
  25. package/dist/backend/library-pack.js +18 -5
  26. package/dist/backend/library-pack.js.map +1 -1
  27. package/dist/backend/library-pack.test.d.ts +1 -0
  28. package/dist/backend/library-pack.test.js +28 -0
  29. package/dist/backend/library-pack.test.js.map +1 -0
  30. package/dist/backend/linker.d.ts +20 -2
  31. package/dist/backend/linker.js +221 -35
  32. package/dist/backend/linker.js.map +1 -1
  33. package/dist/backend/lld.d.ts +15 -6
  34. package/dist/backend/lld.js +24 -16
  35. package/dist/backend/lld.js.map +1 -1
  36. package/dist/backend/lld.test.js +13 -5
  37. package/dist/backend/lld.test.js.map +1 -1
  38. package/dist/backend/llvm/alloc.d.ts +15 -2
  39. package/dist/backend/llvm/alloc.js +172 -36
  40. package/dist/backend/llvm/alloc.js.map +1 -1
  41. package/dist/backend/llvm/alloc.test.js +69 -1
  42. package/dist/backend/llvm/alloc.test.js.map +1 -1
  43. package/dist/backend/llvm/arenas.d.ts +17 -4
  44. package/dist/backend/llvm/arenas.js +105 -10
  45. package/dist/backend/llvm/arenas.js.map +1 -1
  46. package/dist/backend/llvm/arenas.test.js +229 -0
  47. package/dist/backend/llvm/arenas.test.js.map +1 -1
  48. package/dist/backend/llvm/bytes-alias.js +10 -1
  49. package/dist/backend/llvm/bytes-alias.js.map +1 -1
  50. package/dist/backend/llvm/bytes-headers.js +6 -0
  51. package/dist/backend/llvm/bytes-headers.js.map +1 -1
  52. package/dist/backend/llvm/bytes-loop-versions.test.js +25 -0
  53. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  54. package/dist/backend/llvm/call-lifetimes.js +10 -0
  55. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  56. package/dist/backend/llvm/classes.d.ts +16 -9
  57. package/dist/backend/llvm/classes.js +142 -37
  58. package/dist/backend/llvm/classes.js.map +1 -1
  59. package/dist/backend/llvm/classes.test.js +42 -0
  60. package/dist/backend/llvm/classes.test.js.map +1 -1
  61. package/dist/backend/llvm/constant-callbacks.test.js +50 -1
  62. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  63. package/dist/backend/llvm/cpu-dispatch.d.ts +15 -5
  64. package/dist/backend/llvm/cpu-dispatch.js +34 -9
  65. package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
  66. package/dist/backend/llvm/dyn.d.ts +64 -3
  67. package/dist/backend/llvm/dyn.js +251 -15
  68. package/dist/backend/llvm/dyn.js.map +1 -1
  69. package/dist/backend/llvm/emit-function.js +68 -5
  70. package/dist/backend/llvm/emit-function.js.map +1 -1
  71. package/dist/backend/llvm/emit-module.js +226 -77
  72. package/dist/backend/llvm/emit-module.js.map +1 -1
  73. package/dist/backend/llvm/emit-module.test.d.ts +1 -0
  74. package/dist/backend/llvm/emit-module.test.js +52 -0
  75. package/dist/backend/llvm/emit-module.test.js.map +1 -0
  76. package/dist/backend/llvm/emit-statements.js +138 -34
  77. package/dist/backend/llvm/emit-statements.js.map +1 -1
  78. package/dist/backend/llvm/emitter.d.ts +142 -10
  79. package/dist/backend/llvm/emitter.js +523 -73
  80. package/dist/backend/llvm/emitter.js.map +1 -1
  81. package/dist/backend/llvm/emitter.test.js +31 -3
  82. package/dist/backend/llvm/emitter.test.js.map +1 -1
  83. package/dist/backend/llvm/expr-async.js +19 -1
  84. package/dist/backend/llvm/expr-async.js.map +1 -1
  85. package/dist/backend/llvm/expr-bytes.js +16 -1
  86. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  87. package/dist/backend/llvm/expr-calls.d.ts +4 -1
  88. package/dist/backend/llvm/expr-calls.js +38 -6
  89. package/dist/backend/llvm/expr-calls.js.map +1 -1
  90. package/dist/backend/llvm/expr-dynamic.js +237 -23
  91. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  92. package/dist/backend/llvm/expr-primitives.js +123 -12
  93. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  94. package/dist/backend/llvm/expr-records.d.ts +1 -1
  95. package/dist/backend/llvm/expr-records.js +124 -56
  96. package/dist/backend/llvm/expr-records.js.map +1 -1
  97. package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
  98. package/dist/backend/llvm/expr-stream-bridges.js +59 -2
  99. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  100. package/dist/backend/llvm/expr-stream-callbacks.d.ts +16 -0
  101. package/dist/backend/llvm/expr-stream-callbacks.js +206 -20
  102. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  103. package/dist/backend/llvm/integer-values.d.ts +2 -0
  104. package/dist/backend/llvm/integer-values.js +6 -0
  105. package/dist/backend/llvm/integer-values.js.map +1 -1
  106. package/dist/backend/llvm/js-groups.d.ts +21 -0
  107. package/dist/backend/llvm/js-groups.js +277 -0
  108. package/dist/backend/llvm/js-groups.js.map +1 -0
  109. package/dist/backend/llvm/js-ic.d.ts +57 -1
  110. package/dist/backend/llvm/js-ic.js +389 -22
  111. package/dist/backend/llvm/js-ic.js.map +1 -1
  112. package/dist/backend/llvm/lib-dispatch.js +152 -1
  113. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  114. package/dist/backend/llvm/lib-filesystem.js +116 -11
  115. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  116. package/dist/backend/llvm/lib-network.js +33 -6
  117. package/dist/backend/llvm/lib-network.js.map +1 -1
  118. package/dist/backend/llvm/lib-process.js +180 -27
  119. package/dist/backend/llvm/lib-process.js.map +1 -1
  120. package/dist/backend/llvm/lib-shared.js +139 -2
  121. package/dist/backend/llvm/lib-shared.js.map +1 -1
  122. package/dist/backend/llvm/lib-stream.js +67 -0
  123. package/dist/backend/llvm/lib-stream.js.map +1 -1
  124. package/dist/backend/llvm/local-union-storage.test.js +32 -0
  125. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  126. package/dist/backend/llvm/loop-entry-versions.d.ts +2 -2
  127. package/dist/backend/llvm/loop-entry-versions.js +43 -21
  128. package/dist/backend/llvm/loop-entry-versions.js.map +1 -1
  129. package/dist/backend/llvm/loop-state.d.ts +7 -1
  130. package/dist/backend/llvm/loop-state.js +26 -3
  131. package/dist/backend/llvm/loop-state.js.map +1 -1
  132. package/dist/backend/llvm/map-entry-fusion.d.ts +8 -0
  133. package/dist/backend/llvm/map-entry-fusion.js +3 -3
  134. package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
  135. package/dist/backend/llvm/map-number-lookup.d.ts +3 -1
  136. package/dist/backend/llvm/map-number-lookup.js +7 -3
  137. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  138. package/dist/backend/llvm/map-number-lookup.test.js +58 -17
  139. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  140. package/dist/backend/llvm/nullable-unions.js +7 -6
  141. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  142. package/dist/backend/llvm/nullable-unions.test.js +4 -1
  143. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  144. package/dist/backend/llvm/receiver-brackets.test.d.ts +1 -0
  145. package/dist/backend/llvm/receiver-brackets.test.js +68 -0
  146. package/dist/backend/llvm/receiver-brackets.test.js.map +1 -0
  147. package/dist/backend/llvm/receivers.js +3 -0
  148. package/dist/backend/llvm/receivers.js.map +1 -1
  149. package/dist/backend/llvm/record-entry-fusion.d.ts +32 -0
  150. package/dist/backend/llvm/record-entry-fusion.js +217 -0
  151. package/dist/backend/llvm/record-entry-fusion.js.map +1 -0
  152. package/dist/backend/llvm/record-results.d.ts +5 -2
  153. package/dist/backend/llvm/record-results.js +13 -12
  154. package/dist/backend/llvm/record-results.js.map +1 -1
  155. package/dist/backend/llvm/record-views.d.ts +22 -2
  156. package/dist/backend/llvm/record-views.js +147 -12
  157. package/dist/backend/llvm/record-views.js.map +1 -1
  158. package/dist/backend/llvm/record-views.test.js +76 -0
  159. package/dist/backend/llvm/record-views.test.js.map +1 -1
  160. package/dist/backend/llvm/reference-effects.js +1 -0
  161. package/dist/backend/llvm/reference-effects.js.map +1 -1
  162. package/dist/backend/llvm/reference-writes.js +4 -0
  163. package/dist/backend/llvm/reference-writes.js.map +1 -1
  164. package/dist/backend/llvm/region-ir.js +1 -0
  165. package/dist/backend/llvm/region-ir.js.map +1 -1
  166. package/dist/backend/llvm/region-sites.d.ts +18 -0
  167. package/dist/backend/llvm/region-sites.js +79 -1
  168. package/dist/backend/llvm/region-sites.js.map +1 -1
  169. package/dist/backend/llvm/runtime-registries.test.js +53 -6
  170. package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
  171. package/dist/backend/llvm/serialized-ir-emission.test.js +3 -1
  172. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  173. package/dist/backend/llvm/shapes.d.ts +36 -3
  174. package/dist/backend/llvm/shapes.js +201 -16
  175. package/dist/backend/llvm/shapes.js.map +1 -1
  176. package/dist/backend/llvm/shapes.test.js +4 -0
  177. package/dist/backend/llvm/shapes.test.js.map +1 -1
  178. package/dist/backend/llvm/speculative-integers.d.ts +10 -1
  179. package/dist/backend/llvm/speculative-integers.js +59 -8
  180. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  181. package/dist/backend/llvm/stack-objects.d.ts +1 -2
  182. package/dist/backend/llvm/stack-objects.js +8 -5
  183. package/dist/backend/llvm/stack-objects.js.map +1 -1
  184. package/dist/backend/llvm/unwind-abi.d.ts +3 -3
  185. package/dist/backend/llvm/unwind-abi.js +8 -3
  186. package/dist/backend/llvm/unwind-abi.js.map +1 -1
  187. package/dist/backend/llvm/walkers.d.ts +12 -0
  188. package/dist/backend/llvm/walkers.js +47 -3
  189. package/dist/backend/llvm/walkers.js.map +1 -1
  190. package/dist/backend/may-throw.js +12 -2
  191. package/dist/backend/may-throw.js.map +1 -1
  192. package/dist/backend/may-throw.test.js +13 -0
  193. package/dist/backend/may-throw.test.js.map +1 -1
  194. package/dist/backend/native/contracts.d.ts +94 -0
  195. package/dist/backend/native/executable.js +134 -10
  196. package/dist/backend/native/executable.js.map +1 -1
  197. package/dist/backend/native/helper-identity-record.d.ts +11 -0
  198. package/dist/backend/native/helper-identity-record.js +76 -0
  199. package/dist/backend/native/helper-identity-record.js.map +1 -0
  200. package/dist/backend/native/helper-identity-record.test.d.ts +1 -0
  201. package/dist/backend/native/helper-identity-record.test.js +101 -0
  202. package/dist/backend/native/helper-identity-record.test.js.map +1 -0
  203. package/dist/backend/native/library.js +10 -2
  204. package/dist/backend/native/library.js.map +1 -1
  205. package/dist/backend/native/runtime-inputs.js +8 -1
  206. package/dist/backend/native/runtime-inputs.js.map +1 -1
  207. package/dist/backend/native/vendor.d.ts +1 -1
  208. package/dist/backend/native/vendor.js +1 -1
  209. package/dist/backend/native/vendor.js.map +1 -1
  210. package/dist/backend/native-codegen-core.d.ts +13 -10
  211. package/dist/backend/native-codegen-core.js +26 -13
  212. package/dist/backend/native-codegen-core.js.map +1 -1
  213. package/dist/backend/native-codegen.js +30 -8
  214. package/dist/backend/native-codegen.js.map +1 -1
  215. package/dist/backend/native-codegen.test.js +110 -14
  216. package/dist/backend/native-codegen.test.js.map +1 -1
  217. package/dist/backend/native-link-info-core.d.ts +72 -0
  218. package/dist/backend/native-link-info-core.js.map +1 -1
  219. package/dist/backend/native-link-info.js +1 -0
  220. package/dist/backend/native-link-info.js.map +1 -1
  221. package/dist/backend/native-profile.d.ts +4 -1
  222. package/dist/backend/native-profile.js +12 -1
  223. package/dist/backend/native-profile.js.map +1 -1
  224. package/dist/backend/native-profile.test.js +10 -0
  225. package/dist/backend/native-profile.test.js.map +1 -1
  226. package/dist/backend/publication.d.ts +4 -1
  227. package/dist/backend/publication.js +4 -2
  228. package/dist/backend/publication.js.map +1 -1
  229. package/dist/backend/runtime-abi.d.ts +2 -2
  230. package/dist/backend/runtime-abi.js +2 -2
  231. package/dist/backend/runtime-pack-core.d.ts +46 -7
  232. package/dist/backend/runtime-pack-core.js +37 -2
  233. package/dist/backend/runtime-pack-core.js.map +1 -1
  234. package/dist/backend/runtime-pack-native.d.ts +18 -1
  235. package/dist/backend/runtime-pack-native.js +138 -29
  236. package/dist/backend/runtime-pack-native.js.map +1 -1
  237. package/dist/backend/runtime-pack-native.test.js +166 -4
  238. package/dist/backend/runtime-pack-native.test.js.map +1 -1
  239. package/dist/backend/runtime-pack-targets.test.js +3 -1
  240. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  241. package/dist/backend/runtime-pack.d.ts +7 -0
  242. package/dist/backend/runtime-pack.js +25 -3
  243. package/dist/backend/runtime-pack.js.map +1 -1
  244. package/dist/backend/runtime-pack.test.js +213 -12
  245. package/dist/backend/runtime-pack.test.js.map +1 -1
  246. package/dist/backend/tree-classes.d.ts +42 -0
  247. package/dist/backend/tree-classes.js +723 -0
  248. package/dist/backend/tree-classes.js.map +1 -0
  249. package/dist/backend/tree-classes.test.d.ts +1 -0
  250. package/dist/backend/tree-classes.test.js +338 -0
  251. package/dist/backend/tree-classes.test.js.map +1 -0
  252. package/dist/backend/vendor-archives.d.ts +8 -1
  253. package/dist/backend/vendor-archives.js +313 -8
  254. package/dist/backend/vendor-archives.js.map +1 -1
  255. package/dist/backend/vendor-inputs.d.ts +60 -3
  256. package/dist/backend/vendor-inputs.js +109 -3
  257. package/dist/backend/vendor-inputs.js.map +1 -1
  258. package/dist/backend/vendor-inputs.test.js +62 -1
  259. package/dist/backend/vendor-inputs.test.js.map +1 -1
  260. package/dist/backend/warm-cache.js +2 -0
  261. package/dist/backend/warm-cache.js.map +1 -1
  262. package/dist/compat/fetch-profile.d.ts +7 -1
  263. package/dist/compat/fetch-profile.js +25 -12
  264. package/dist/compat/fetch-profile.js.map +1 -1
  265. package/dist/compile-types.d.ts +7 -0
  266. package/dist/contracts/check.d.ts +3 -0
  267. package/dist/contracts/check.js +18 -5
  268. package/dist/contracts/check.js.map +1 -1
  269. package/dist/coverage/report.js +47 -0
  270. package/dist/coverage/report.js.map +1 -1
  271. package/dist/coverage/surface-manifest.js +1 -1
  272. package/dist/coverage/surface-manifest.js.map +1 -1
  273. package/dist/diagnostics/codes.d.ts +14 -0
  274. package/dist/diagnostics/codes.js +14 -0
  275. package/dist/diagnostics/codes.js.map +1 -1
  276. package/dist/diagnostics/diagnostic.d.ts +68 -0
  277. package/dist/diagnostics/diagnostic.js +186 -6
  278. package/dist/diagnostics/diagnostic.js.map +1 -1
  279. package/dist/diagnostics/dynamic-tier.js +3 -1
  280. package/dist/diagnostics/dynamic-tier.js.map +1 -1
  281. package/dist/diagnostics/envelope.d.ts +18 -0
  282. package/dist/diagnostics/envelope.js.map +1 -1
  283. package/dist/executable/executable-cache.d.ts +48 -0
  284. package/dist/executable/executable-cache.js +38 -0
  285. package/dist/executable/executable-cache.js.map +1 -1
  286. package/dist/executable/executable-cache.test.js +127 -1
  287. package/dist/executable/executable-cache.test.js.map +1 -1
  288. package/dist/executable/prepare.d.ts +13 -3
  289. package/dist/executable/prepare.js +438 -234
  290. package/dist/executable/prepare.js.map +1 -1
  291. package/dist/frontend/analysis.js +200 -18
  292. package/dist/frontend/analysis.js.map +1 -1
  293. package/dist/frontend/builtin-modules.d.ts +4 -0
  294. package/dist/frontend/builtin-modules.js +10 -0
  295. package/dist/frontend/builtin-modules.js.map +1 -1
  296. package/dist/frontend/early-errors.d.ts +24 -0
  297. package/dist/frontend/early-errors.js +836 -0
  298. package/dist/frontend/early-errors.js.map +1 -0
  299. package/dist/frontend/early-errors.test.d.ts +1 -0
  300. package/dist/frontend/early-errors.test.js +207 -0
  301. package/dist/frontend/early-errors.test.js.map +1 -0
  302. package/dist/frontend/inferred-js-diagnostics.test.js +88 -0
  303. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  304. package/dist/frontend/input-tracker.d.ts +47 -0
  305. package/dist/frontend/input-tracker.js +173 -36
  306. package/dist/frontend/input-tracker.js.map +1 -1
  307. package/dist/frontend/input-tracker.test.js +86 -2
  308. package/dist/frontend/input-tracker.test.js.map +1 -1
  309. package/dist/frontend/js-inference.d.ts +2 -0
  310. package/dist/frontend/js-inference.js +18 -0
  311. package/dist/frontend/js-inference.js.map +1 -0
  312. package/dist/frontend/jsx-opinion-sites.test.d.ts +1 -0
  313. package/dist/frontend/jsx-opinion-sites.test.js +86 -0
  314. package/dist/frontend/jsx-opinion-sites.test.js.map +1 -0
  315. package/dist/frontend/lib-exports.d.ts +23 -4
  316. package/dist/frontend/lib-exports.js +98 -26
  317. package/dist/frontend/lib-exports.js.map +1 -1
  318. package/dist/frontend/lowering/binding-analysis.d.ts +2 -1
  319. package/dist/frontend/lowering/binding-analysis.js +86 -4
  320. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  321. package/dist/frontend/lowering/buffers.d.ts +8 -0
  322. package/dist/frontend/lowering/buffers.js +43 -0
  323. package/dist/frontend/lowering/buffers.js.map +1 -0
  324. package/dist/frontend/lowering/builtin-calls.js +13 -0
  325. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  326. package/dist/frontend/lowering/builtin-namespaces.d.ts +3 -2
  327. package/dist/frontend/lowering/builtin-namespaces.js +41 -3
  328. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
  329. package/dist/frontend/lowering/builtin-statics.d.ts +24 -0
  330. package/dist/frontend/lowering/builtin-statics.js +407 -0
  331. package/dist/frontend/lowering/builtin-statics.js.map +1 -0
  332. package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
  333. package/dist/frontend/lowering/builtins/arguments.js +12 -0
  334. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  335. package/dist/frontend/lowering/builtins/atomics.d.ts +6 -1
  336. package/dist/frontend/lowering/builtins/atomics.js +87 -1
  337. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  338. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +7 -0
  339. package/dist/frontend/lowering/builtins/child-process-methods.js +52 -12
  340. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  341. package/dist/frontend/lowering/builtins/child-process-sync.d.ts +13 -0
  342. package/dist/frontend/lowering/builtins/child-process-sync.js +1 -13
  343. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  344. package/dist/frontend/lowering/builtins/child-process.d.ts +10 -4
  345. package/dist/frontend/lowering/builtins/child-process.js +565 -28
  346. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  347. package/dist/frontend/lowering/builtins/compression.d.ts +2 -2
  348. package/dist/frontend/lowering/builtins/compression.js +41 -21
  349. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  350. package/dist/frontend/lowering/builtins/constants.js +7 -2
  351. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  352. package/dist/frontend/lowering/builtins/dates.d.ts +1 -1
  353. package/dist/frontend/lowering/builtins/dates.js +23 -1
  354. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  355. package/dist/frontend/lowering/builtins/environment.d.ts +55 -0
  356. package/dist/frontend/lowering/builtins/environment.js +213 -2
  357. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  358. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
  359. package/dist/frontend/lowering/builtins/filesystem-calls.js +75 -18
  360. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  361. package/dist/frontend/lowering/builtins/filesystem.d.ts +25 -7
  362. package/dist/frontend/lowering/builtins/filesystem.js +185 -16
  363. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  364. package/dist/frontend/lowering/builtins/json.js +4 -0
  365. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  366. package/dist/frontend/lowering/builtins/module-calls.js +42 -3
  367. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  368. package/dist/frontend/lowering/builtins/module-resolution.d.ts +8 -0
  369. package/dist/frontend/lowering/builtins/module-resolution.js +31 -5
  370. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  371. package/dist/frontend/lowering/builtins/numbers.d.ts +4 -1
  372. package/dist/frontend/lowering/builtins/numbers.js +10 -2
  373. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  374. package/dist/frontend/lowering/builtins/operating-system.d.ts +9 -5
  375. package/dist/frontend/lowering/builtins/operating-system.js +101 -20
  376. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  377. package/dist/frontend/lowering/builtins/process.d.ts +18 -2
  378. package/dist/frontend/lowering/builtins/process.js +386 -25
  379. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  380. package/dist/frontend/lowering/builtins/promises.js +169 -8
  381. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  382. package/dist/frontend/lowering/builtins/properties.js +6 -2
  383. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  384. package/dist/frontend/lowering/builtins/querystring.d.ts +8 -0
  385. package/dist/frontend/lowering/builtins/querystring.js +202 -18
  386. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  387. package/dist/frontend/lowering/builtins/readline.d.ts +6 -4
  388. package/dist/frontend/lowering/builtins/readline.js +200 -38
  389. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  390. package/dist/frontend/lowering/builtins/reflection.js +60 -1
  391. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  392. package/dist/frontend/lowering/builtins/text-codecs.js +208 -59
  393. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  394. package/dist/frontend/lowering/builtins/url.js +55 -13
  395. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  396. package/dist/frontend/lowering/builtins/v8.d.ts +5 -5
  397. package/dist/frontend/lowering/builtins/v8.js +7 -5
  398. package/dist/frontend/lowering/builtins/v8.js.map +1 -1
  399. package/dist/frontend/lowering/builtins/web-streams-dyn.d.ts +17 -2
  400. package/dist/frontend/lowering/builtins/web-streams-dyn.js +97 -9
  401. package/dist/frontend/lowering/builtins/web-streams-dyn.js.map +1 -1
  402. package/dist/frontend/lowering/builtins/webassembly.js +2 -0
  403. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  404. package/dist/frontend/lowering/call-arguments.d.ts +10 -0
  405. package/dist/frontend/lowering/call-arguments.js +37 -2
  406. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  407. package/dist/frontend/lowering/call-signatures.d.ts +10 -0
  408. package/dist/frontend/lowering/call-signatures.js +180 -0
  409. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  410. package/dist/frontend/lowering/cjs-exports-object.d.ts +3 -0
  411. package/dist/frontend/lowering/cjs-exports-object.js +1 -1
  412. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
  413. package/dist/frontend/lowering/cjs-inline-require.js +5 -0
  414. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
  415. package/dist/frontend/lowering/class-construction.d.ts +14 -2
  416. package/dist/frontend/lowering/class-construction.js +99 -5
  417. package/dist/frontend/lowering/class-construction.js.map +1 -1
  418. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +14 -0
  419. package/dist/frontend/lowering/class-dynamic-dispatch.js +1376 -1009
  420. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  421. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +158 -0
  422. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  423. package/dist/frontend/lowering/class-protocols.js +59 -10
  424. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  425. package/dist/frontend/lowering/class-prototypes.js +20 -15
  426. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  427. package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
  428. package/dist/frontend/lowering/class-runtime-statics.js +35 -1
  429. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  430. package/dist/frontend/lowering/class-unions.js +21 -4
  431. package/dist/frontend/lowering/class-unions.js.map +1 -1
  432. package/dist/frontend/lowering/class-views.d.ts +13 -0
  433. package/dist/frontend/lowering/class-views.js +51 -0
  434. package/dist/frontend/lowering/class-views.js.map +1 -0
  435. package/dist/frontend/lowering/coercions/function-adapters.d.ts +15 -1
  436. package/dist/frontend/lowering/coercions/function-adapters.js +63 -10
  437. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  438. package/dist/frontend/lowering/coercions/state.d.ts +15 -0
  439. package/dist/frontend/lowering/coercions/state.js +24 -0
  440. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  441. package/dist/frontend/lowering/coercions/structural-plans.js +75 -3
  442. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  443. package/dist/frontend/lowering/coercions/structural.js +39 -2
  444. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  445. package/dist/frontend/lowering/coercions/unions.d.ts +2 -1
  446. package/dist/frontend/lowering/coercions/unions.js +54 -10
  447. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  448. package/dist/frontend/lowering/constructor-returns.d.ts +23 -2
  449. package/dist/frontend/lowering/constructor-returns.js +284 -58
  450. package/dist/frontend/lowering/constructor-returns.js.map +1 -1
  451. package/dist/frontend/lowering/containers/array-callbacks.d.ts +8 -1
  452. package/dist/frontend/lowering/containers/array-callbacks.js +288 -90
  453. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  454. package/dist/frontend/lowering/containers/array-construction.js +37 -8
  455. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  456. package/dist/frontend/lowering/containers/array-from-async.js +139 -3
  457. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
  458. package/dist/frontend/lowering/containers/array-iteration.d.ts +14 -4
  459. package/dist/frontend/lowering/containers/array-iteration.js +24 -7
  460. package/dist/frontend/lowering/containers/array-iteration.js.map +1 -1
  461. package/dist/frontend/lowering/containers/array-methods.js +30 -11
  462. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  463. package/dist/frontend/lowering/containers/bytes.d.ts +6 -0
  464. package/dist/frontend/lowering/containers/bytes.js +450 -86
  465. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  466. package/dist/frontend/lowering/containers/callback-arguments.d.ts +16 -0
  467. package/dist/frontend/lowering/containers/callback-arguments.js +74 -12
  468. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  469. package/dist/frontend/lowering/containers/collection-grouping.js +421 -2
  470. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  471. package/dist/frontend/lowering/containers/collection-methods.js +52 -17
  472. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  473. package/dist/frontend/lowering/containers/filter-predicates.d.ts +10 -0
  474. package/dist/frontend/lowering/containers/filter-predicates.js +69 -3
  475. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
  476. package/dist/frontend/lowering/containers/indexed-objects.js +46 -2
  477. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  478. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +23 -0
  479. package/dist/frontend/lowering/containers/iterator-helpers.js +176 -10
  480. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  481. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +5 -2
  482. package/dist/frontend/lowering/containers/string-and-regexp.js +45 -11
  483. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  484. package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
  485. package/dist/frontend/lowering/crypto-tables.js +5 -5
  486. package/dist/frontend/lowering/dispatch-sites.js +3 -0
  487. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  488. package/dist/frontend/lowering/divergences.d.ts +40 -0
  489. package/dist/frontend/lowering/divergences.js +239 -20
  490. package/dist/frontend/lowering/divergences.js.map +1 -1
  491. package/dist/frontend/lowering/effect-free.d.ts +12 -0
  492. package/dist/frontend/lowering/effect-free.js +44 -0
  493. package/dist/frontend/lowering/effect-free.js.map +1 -0
  494. package/dist/frontend/lowering/expressions/array-literals.d.ts +24 -0
  495. package/dist/frontend/lowering/expressions/array-literals.js +88 -10
  496. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  497. package/dist/frontend/lowering/expressions/binary.js +216 -14
  498. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  499. package/dist/frontend/lowering/expressions/element-access.js +272 -11
  500. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  501. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +15 -0
  502. package/dist/frontend/lowering/expressions/hosted-narrowing.js +54 -1
  503. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
  504. package/dist/frontend/lowering/expressions/identifiers.js +173 -4
  505. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  506. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +11 -1
  507. package/dist/frontend/lowering/expressions/keyed-field-targets.js +22 -1
  508. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
  509. package/dist/frontend/lowering/expressions/narrowing.d.ts +3 -0
  510. package/dist/frontend/lowering/expressions/narrowing.js +195 -18
  511. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  512. package/dist/frontend/lowering/expressions/object-literals.d.ts +5 -1
  513. package/dist/frontend/lowering/expressions/object-literals.js +951 -240
  514. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  515. package/dist/frontend/lowering/expressions/optional-chains.js +71 -21
  516. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  517. package/dist/frontend/lowering/expressions/property-access.d.ts +39 -0
  518. package/dist/frontend/lowering/expressions/property-access.js +1141 -87
  519. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  520. package/dist/frontend/lowering/expressions/relational.js +262 -4
  521. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  522. package/dist/frontend/lowering/expressions/typeof.js +25 -0
  523. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  524. package/dist/frontend/lowering/expressions/union-fields.d.ts +20 -1
  525. package/dist/frontend/lowering/expressions/union-fields.js +103 -13
  526. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  527. package/dist/frontend/lowering/expressions/updates.js +156 -22
  528. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  529. package/dist/frontend/lowering/frozen-records.d.ts +6 -0
  530. package/dist/frontend/lowering/frozen-records.js +10 -4
  531. package/dist/frontend/lowering/frozen-records.js.map +1 -1
  532. package/dist/frontend/lowering/frozen-records.test.d.ts +1 -0
  533. package/dist/frontend/lowering/frozen-records.test.js +44 -0
  534. package/dist/frontend/lowering/frozen-records.test.js.map +1 -0
  535. package/dist/frontend/lowering/function-names.d.ts +9 -0
  536. package/dist/frontend/lowering/function-names.js +95 -0
  537. package/dist/frontend/lowering/function-names.js.map +1 -0
  538. package/dist/frontend/lowering/function-returns.js +42 -13
  539. package/dist/frontend/lowering/function-returns.js.map +1 -1
  540. package/dist/frontend/lowering/general-streams.js +5 -0
  541. package/dist/frontend/lowering/general-streams.js.map +1 -1
  542. package/dist/frontend/lowering/generator-delegation.d.ts +15 -7
  543. package/dist/frontend/lowering/generator-delegation.js +301 -118
  544. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  545. package/dist/frontend/lowering/generic-functions.d.ts +75 -0
  546. package/dist/frontend/lowering/generic-functions.js +790 -18
  547. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  548. package/dist/frontend/lowering/global-function-values.d.ts +25 -0
  549. package/dist/frontend/lowering/global-function-values.js +193 -0
  550. package/dist/frontend/lowering/global-function-values.js.map +1 -0
  551. package/dist/frontend/lowering/global-values.d.ts +15 -4
  552. package/dist/frontend/lowering/global-values.js +67 -9
  553. package/dist/frontend/lowering/global-values.js.map +1 -1
  554. package/dist/frontend/lowering/handle-properties.js +34 -1
  555. package/dist/frontend/lowering/handle-properties.js.map +1 -1
  556. package/dist/frontend/lowering/host-global-values.d.ts +31 -0
  557. package/dist/frontend/lowering/host-global-values.js +121 -0
  558. package/dist/frontend/lowering/host-global-values.js.map +1 -0
  559. package/dist/frontend/lowering/host-globals.d.ts +74 -0
  560. package/dist/frontend/lowering/host-globals.js +344 -0
  561. package/dist/frontend/lowering/host-globals.js.map +1 -0
  562. package/dist/frontend/lowering/http2-constants.js +1 -1
  563. package/dist/frontend/lowering/iterator-adapters.js +46 -17
  564. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  565. package/dist/frontend/lowering/iterator-prototype.d.ts +30 -0
  566. package/dist/frontend/lowering/iterator-prototype.js +160 -0
  567. package/dist/frontend/lowering/iterator-prototype.js.map +1 -0
  568. package/dist/frontend/lowering/key-order-witness.d.ts +54 -0
  569. package/dist/frontend/lowering/key-order-witness.js +571 -9
  570. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  571. package/dist/frontend/lowering/key-order-witness.test.js +1 -0
  572. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  573. package/dist/frontend/lowering/lib-boundary.js +25 -3
  574. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  575. package/dist/frontend/lowering/lower-assert.js +140 -16
  576. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  577. package/dist/frontend/lowering/lower-async-iteration.d.ts +11 -0
  578. package/dist/frontend/lowering/lower-async-iteration.js +15 -0
  579. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  580. package/dist/frontend/lowering/lower-builtin-values.d.ts +36 -6
  581. package/dist/frontend/lowering/lower-builtin-values.js +342 -58
  582. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  583. package/dist/frontend/lowering/lower-calls.d.ts +47 -1
  584. package/dist/frontend/lowering/lower-calls.js +1354 -273
  585. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  586. package/dist/frontend/lowering/lower-calls.test.d.ts +1 -0
  587. package/dist/frontend/lowering/lower-calls.test.js +121 -0
  588. package/dist/frontend/lowering/lower-calls.test.js.map +1 -0
  589. package/dist/frontend/lowering/lower-classes.d.ts +36 -5
  590. package/dist/frontend/lowering/lower-classes.js +630 -89
  591. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  592. package/dist/frontend/lowering/lower-event-emitter.d.ts +15 -2
  593. package/dist/frontend/lowering/lower-event-emitter.js +610 -98
  594. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  595. package/dist/frontend/lowering/lower-exprs.d.ts +15 -1
  596. package/dist/frontend/lowering/lower-exprs.js +96 -20
  597. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  598. package/dist/frontend/lowering/lower-functions.js +27 -6
  599. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  600. package/dist/frontend/lowering/lower-generators.js +57 -10
  601. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  602. package/dist/frontend/lowering/lower-global-value.d.ts +6 -0
  603. package/dist/frontend/lowering/lower-global-value.js +14 -5
  604. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  605. package/dist/frontend/lowering/lower-inspect.d.ts +4 -0
  606. package/dist/frontend/lowering/lower-inspect.js +713 -92
  607. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  608. package/dist/frontend/lowering/lower-modules.js +135 -27
  609. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  610. package/dist/frontend/lowering/lower-namespaces.js +18 -0
  611. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  612. package/dist/frontend/lowering/lower-node-island.d.ts +35 -4
  613. package/dist/frontend/lowering/lower-node-island.js +472 -67
  614. package/dist/frontend/lowering/lower-node-island.js.map +1 -1
  615. package/dist/frontend/lowering/lower-server.js +463 -96
  616. package/dist/frontend/lowering/lower-server.js.map +1 -1
  617. package/dist/frontend/lowering/lower-shared-modules.js +13 -1
  618. package/dist/frontend/lowering/lower-shared-modules.js.map +1 -1
  619. package/dist/frontend/lowering/lower-stdlib.d.ts +3 -2
  620. package/dist/frontend/lowering/lower-stdlib.js +77 -18
  621. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  622. package/dist/frontend/lowering/lower-stmts.d.ts +24 -4
  623. package/dist/frontend/lowering/lower-stmts.js +831 -136
  624. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  625. package/dist/frontend/lowering/lower-stream.js +126 -8
  626. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  627. package/dist/frontend/lowering/lower-timers.js +243 -48
  628. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  629. package/dist/frontend/lowering/lower-url.js +6 -3
  630. package/dist/frontend/lowering/lower-url.js.map +1 -1
  631. package/dist/frontend/lowering/lowerer.d.ts +363 -21
  632. package/dist/frontend/lowering/lowerer.js +1224 -129
  633. package/dist/frontend/lowering/lowerer.js.map +1 -1
  634. package/dist/frontend/lowering/lowerer.test.js +19 -1
  635. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  636. package/dist/frontend/lowering/lowering-facts.d.ts +110 -0
  637. package/dist/frontend/lowering/lowering-facts.js +323 -0
  638. package/dist/frontend/lowering/lowering-facts.js.map +1 -0
  639. package/dist/frontend/lowering/lowering-facts.test.d.ts +1 -0
  640. package/dist/frontend/lowering/lowering-facts.test.js +100 -0
  641. package/dist/frontend/lowering/lowering-facts.test.js.map +1 -0
  642. package/dist/frontend/lowering/module-namespace-elements.js +15 -0
  643. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  644. package/dist/frontend/lowering/nan-coded-reads.d.ts +27 -4
  645. package/dist/frontend/lowering/nan-coded-reads.js +112 -9
  646. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  647. package/dist/frontend/lowering/new-target.js +2 -2
  648. package/dist/frontend/lowering/nullish-empty-pattern.d.ts +17 -0
  649. package/dist/frontend/lowering/nullish-empty-pattern.js +118 -0
  650. package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -0
  651. package/dist/frontend/lowering/optional-arguments.d.ts +4 -0
  652. package/dist/frontend/lowering/optional-arguments.js +26 -2
  653. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  654. package/dist/frontend/lowering/partial-assertions.d.ts +36 -0
  655. package/dist/frontend/lowering/partial-assertions.js +189 -0
  656. package/dist/frontend/lowering/partial-assertions.js.map +1 -0
  657. package/dist/frontend/lowering/primitive-throws.d.ts +100 -0
  658. package/dist/frontend/lowering/primitive-throws.js +241 -0
  659. package/dist/frontend/lowering/primitive-throws.js.map +1 -0
  660. package/dist/frontend/lowering/primitive-wrappers.d.ts +34 -0
  661. package/dist/frontend/lowering/primitive-wrappers.js +221 -0
  662. package/dist/frontend/lowering/primitive-wrappers.js.map +1 -0
  663. package/dist/frontend/lowering/private-statics.d.ts +46 -0
  664. package/dist/frontend/lowering/private-statics.js +322 -0
  665. package/dist/frontend/lowering/private-statics.js.map +1 -0
  666. package/dist/frontend/lowering/record-inherited.d.ts +17 -1
  667. package/dist/frontend/lowering/record-inherited.js +16 -2
  668. package/dist/frontend/lowering/record-inherited.js.map +1 -1
  669. package/dist/frontend/lowering/record-links.d.ts +73 -0
  670. package/dist/frontend/lowering/record-links.js +797 -0
  671. package/dist/frontend/lowering/record-links.js.map +1 -0
  672. package/dist/frontend/lowering/record-sources.d.ts +12 -1
  673. package/dist/frontend/lowering/record-sources.js +60 -0
  674. package/dist/frontend/lowering/record-sources.js.map +1 -1
  675. package/dist/frontend/lowering/runtime-optional-provenance.d.ts +27 -7
  676. package/dist/frontend/lowering/runtime-optional-provenance.js +25 -11
  677. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  678. package/dist/frontend/lowering/runtime-optional-report.d.ts +40 -0
  679. package/dist/frontend/lowering/runtime-optional-report.js +300 -0
  680. package/dist/frontend/lowering/runtime-optional-report.js.map +1 -0
  681. package/dist/frontend/lowering/scoped-type-memo.test.d.ts +1 -0
  682. package/dist/frontend/lowering/scoped-type-memo.test.js +86 -0
  683. package/dist/frontend/lowering/scoped-type-memo.test.js.map +1 -0
  684. package/dist/frontend/lowering/static-typeof.d.ts +3 -1
  685. package/dist/frontend/lowering/static-typeof.js +6 -1
  686. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  687. package/dist/frontend/lowering/strict-equality.d.ts +4 -0
  688. package/dist/frontend/lowering/strict-equality.js +14 -0
  689. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  690. package/dist/frontend/lowering/strict-mode.d.ts +1 -5
  691. package/dist/frontend/lowering/strict-mode.js +4 -30
  692. package/dist/frontend/lowering/strict-mode.js.map +1 -1
  693. package/dist/frontend/lowering/structural-instances.d.ts +7 -0
  694. package/dist/frontend/lowering/structural-instances.js +23 -0
  695. package/dist/frontend/lowering/structural-instances.js.map +1 -1
  696. package/dist/frontend/lowering/surfaces.d.ts +42 -1
  697. package/dist/frontend/lowering/surfaces.js +212 -71
  698. package/dist/frontend/lowering/surfaces.js.map +1 -1
  699. package/dist/frontend/lowering/union-retag.d.ts +13 -1
  700. package/dist/frontend/lowering/union-retag.js +55 -1
  701. package/dist/frontend/lowering/union-retag.js.map +1 -1
  702. package/dist/frontend/lowering/union-retag.test.js +51 -0
  703. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  704. package/dist/frontend/lowering/unit-journal.d.ts +136 -17
  705. package/dist/frontend/lowering/unit-journal.js +324 -53
  706. package/dist/frontend/lowering/unit-journal.js.map +1 -1
  707. package/dist/frontend/lowering/unit-journal.test.js +126 -3
  708. package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
  709. package/dist/frontend/lowering/unit-reuse.d.ts +92 -0
  710. package/dist/frontend/lowering/unit-reuse.js +1008 -0
  711. package/dist/frontend/lowering/unit-reuse.js.map +1 -0
  712. package/dist/frontend/lowering/width-lift.d.ts +12 -0
  713. package/dist/frontend/lowering/zlib-constants.js +3 -2
  714. package/dist/frontend/lowering/zlib-constants.js.map +1 -1
  715. package/dist/frontend/npm-file-import.test.d.ts +1 -0
  716. package/dist/frontend/npm-file-import.test.js +76 -0
  717. package/dist/frontend/npm-file-import.test.js.map +1 -0
  718. package/dist/frontend/npm-static.js +95 -11
  719. package/dist/frontend/npm-static.js.map +1 -1
  720. package/dist/frontend/npm-static.test.js +95 -2
  721. package/dist/frontend/npm-static.test.js.map +1 -1
  722. package/dist/frontend/npm.d.ts +9 -0
  723. package/dist/frontend/npm.js +82 -0
  724. package/dist/frontend/npm.js.map +1 -1
  725. package/dist/frontend/pipeline-native.js +2 -1
  726. package/dist/frontend/pipeline-native.js.map +1 -1
  727. package/dist/frontend/pipeline.d.ts +9 -4
  728. package/dist/frontend/pipeline.js +162 -38
  729. package/dist/frontend/pipeline.js.map +1 -1
  730. package/dist/frontend/pipeline.test.js +68 -11
  731. package/dist/frontend/pipeline.test.js.map +1 -1
  732. package/dist/frontend/program-node.d.ts +3 -0
  733. package/dist/frontend/program-node.js +13 -6
  734. package/dist/frontend/program-node.js.map +1 -1
  735. package/dist/frontend/program.d.ts +71 -2
  736. package/dist/frontend/program.js +836 -411
  737. package/dist/frontend/program.js.map +1 -1
  738. package/dist/frontend/program.test.js +37 -1
  739. package/dist/frontend/program.test.js.map +1 -1
  740. package/dist/frontend/provenance-core.js +4 -0
  741. package/dist/frontend/provenance-core.js.map +1 -1
  742. package/dist/frontend/services-node.d.ts +7 -0
  743. package/dist/frontend/services-node.js +32 -1
  744. package/dist/frontend/services-node.js.map +1 -1
  745. package/dist/frontend/services-node.test.js +51 -0
  746. package/dist/frontend/services-node.test.js.map +1 -1
  747. package/dist/frontend/services.d.ts +14 -0
  748. package/dist/frontend/services.js +52 -2
  749. package/dist/frontend/services.js.map +1 -1
  750. package/dist/frontend/services.test.js +61 -1
  751. package/dist/frontend/services.test.js.map +1 -1
  752. package/dist/frontend/shape-inference/analyze.d.ts +5 -0
  753. package/dist/frontend/shape-inference/analyze.js +104 -4
  754. package/dist/frontend/shape-inference/analyze.js.map +1 -1
  755. package/dist/frontend/shape-inference/domain.js +0 -1
  756. package/dist/frontend/shape-inference/domain.js.map +1 -1
  757. package/dist/frontend/shape-inference/index.js +5 -1
  758. package/dist/frontend/shape-inference/index.js.map +1 -1
  759. package/dist/frontend/shape-inference/memo.d.ts +2 -1
  760. package/dist/frontend/shape-inference/memo.js +6 -2
  761. package/dist/frontend/shape-inference/memo.js.map +1 -1
  762. package/dist/frontend/shape-inference/overlay.d.ts +1 -1
  763. package/dist/frontend/shape-inference/overlay.js +184 -4
  764. package/dist/frontend/shape-inference/overlay.js.map +1 -1
  765. package/dist/frontend/shape-inference/static-objects.js +11 -6
  766. package/dist/frontend/shape-inference/static-objects.js.map +1 -1
  767. package/dist/frontend/source-phase-imports.test.d.ts +1 -0
  768. package/dist/frontend/source-phase-imports.test.js +37 -0
  769. package/dist/frontend/source-phase-imports.test.js.map +1 -0
  770. package/dist/frontend/tier-analysis.d.ts +9 -0
  771. package/dist/frontend/tier-analysis.js +1 -0
  772. package/dist/frontend/tier-analysis.js.map +1 -1
  773. package/dist/frontend/ts7/ast-node.d.ts +6 -1
  774. package/dist/frontend/ts7/ast-node.js +12 -0
  775. package/dist/frontend/ts7/ast-node.js.map +1 -1
  776. package/dist/frontend/ts7/ast-wire-protocols.test.js +11 -3
  777. package/dist/frontend/ts7/ast-wire-protocols.test.js.map +1 -1
  778. package/dist/frontend/ts7/ast-wire.js +3 -5
  779. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  780. package/dist/frontend/ts7/checker-backend.d.ts +13 -0
  781. package/dist/frontend/ts7/checker-backend.js +84 -2
  782. package/dist/frontend/ts7/checker-backend.js.map +1 -1
  783. package/dist/frontend/ts7/checker-backend.test.js +126 -2
  784. package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
  785. package/dist/frontend/ts7/program-host.d.ts +22 -1
  786. package/dist/frontend/ts7/program-host.js +49 -4
  787. package/dist/frontend/ts7/program-host.js.map +1 -1
  788. package/dist/frontend/ts7/program-host.test.js +83 -0
  789. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  790. package/dist/frontend/ts7/rpc-process.d.ts +16 -1
  791. package/dist/frontend/ts7/rpc-process.js +170 -92
  792. package/dist/frontend/ts7/rpc-process.js.map +1 -1
  793. package/dist/frontend/ts7/rpc-process.test.js +49 -21
  794. package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
  795. package/dist/frontend/tsc-codes.d.ts +57 -3
  796. package/dist/frontend/tsc-codes.js +956 -101
  797. package/dist/frontend/tsc-codes.js.map +1 -1
  798. package/dist/frontend/tsc-codes.test.js +221 -12
  799. package/dist/frontend/tsc-codes.test.js.map +1 -1
  800. package/dist/frontend/type-mapper.d.ts +98 -11
  801. package/dist/frontend/type-mapper.js +770 -182
  802. package/dist/frontend/type-mapper.js.map +1 -1
  803. package/dist/index.d.ts +1 -1
  804. package/dist/index.js +224 -15
  805. package/dist/index.js.map +1 -1
  806. package/dist/index.test.d.ts +1 -0
  807. package/dist/index.test.js +60 -0
  808. package/dist/index.test.js.map +1 -0
  809. package/dist/ir/api.d.ts +1 -1
  810. package/dist/ir/api.js +1 -1
  811. package/dist/ir/api.js.map +1 -1
  812. package/dist/ir/build.d.ts +3 -2
  813. package/dist/ir/build.js +4 -2
  814. package/dist/ir/build.js.map +1 -1
  815. package/dist/ir/builtin-effects.js +96 -0
  816. package/dist/ir/builtin-effects.js.map +1 -1
  817. package/dist/ir/builtin-signatures.d.ts +1 -1
  818. package/dist/ir/builtin-signatures.js +453 -26
  819. package/dist/ir/builtin-signatures.js.map +1 -1
  820. package/dist/ir/callback-specialization.d.ts +3 -2
  821. package/dist/ir/callback-specialization.js +35 -25
  822. package/dist/ir/callback-specialization.js.map +1 -1
  823. package/dist/ir/capture-values.d.ts +8 -4
  824. package/dist/ir/capture-values.js +9 -6
  825. package/dist/ir/capture-values.js.map +1 -1
  826. package/dist/ir/char-unit-locals.d.ts +6 -2
  827. package/dist/ir/char-unit-locals.js +11 -2
  828. package/dist/ir/char-unit-locals.js.map +1 -1
  829. package/dist/ir/class-key-index.d.ts +18 -0
  830. package/dist/ir/class-key-index.js +29 -0
  831. package/dist/ir/class-key-index.js.map +1 -0
  832. package/dist/ir/class-key-index.test.d.ts +1 -0
  833. package/dist/ir/class-key-index.test.js +25 -0
  834. package/dist/ir/class-key-index.test.js.map +1 -0
  835. package/dist/ir/codec.d.ts +82 -0
  836. package/dist/ir/codec.generated.d.ts +13 -0
  837. package/dist/ir/codec.generated.js +5350 -0
  838. package/dist/ir/codec.generated.js.map +1 -0
  839. package/dist/ir/codec.js +325 -0
  840. package/dist/ir/codec.js.map +1 -0
  841. package/dist/ir/codec.test.d.ts +1 -0
  842. package/dist/ir/codec.test.js +225 -0
  843. package/dist/ir/codec.test.js.map +1 -0
  844. package/dist/ir/constant-globals.d.ts +5 -2
  845. package/dist/ir/constant-globals.js +25 -27
  846. package/dist/ir/constant-globals.js.map +1 -1
  847. package/dist/ir/expression-inlining.d.ts +4 -2
  848. package/dist/ir/expression-inlining.js +8 -2
  849. package/dist/ir/expression-inlining.js.map +1 -1
  850. package/dist/ir/field-values.d.ts +5 -2
  851. package/dist/ir/field-values.js +32 -21
  852. package/dist/ir/field-values.js.map +1 -1
  853. package/dist/ir/fields.generated.d.ts +29 -10
  854. package/dist/ir/fields.generated.js +1039 -11
  855. package/dist/ir/fields.generated.js.map +1 -1
  856. package/dist/ir/fields.test.js +46 -2
  857. package/dist/ir/fields.test.js.map +1 -1
  858. package/dist/ir/final-fields.js +1 -1
  859. package/dist/ir/final-fields.js.map +1 -1
  860. package/dist/ir/function-references.d.ts +6 -4
  861. package/dist/ir/function-references.js +11 -4
  862. package/dist/ir/function-references.js.map +1 -1
  863. package/dist/ir/function-references.test.js +14 -0
  864. package/dist/ir/function-references.test.js.map +1 -1
  865. package/dist/ir/init-only-globals.d.ts +4 -2
  866. package/dist/ir/init-only-globals.js +17 -18
  867. package/dist/ir/init-only-globals.js.map +1 -1
  868. package/dist/ir/inline-array-sources.js +4 -1
  869. package/dist/ir/inline-array-sources.js.map +1 -1
  870. package/dist/ir/inline-array-views.d.ts +13 -0
  871. package/dist/ir/inline-array-views.js +945 -0
  872. package/dist/ir/inline-array-views.js.map +1 -0
  873. package/dist/ir/inline-arrays.d.ts +7 -0
  874. package/dist/ir/inline-arrays.js +190 -55
  875. package/dist/ir/inline-arrays.js.map +1 -1
  876. package/dist/ir/inline-arrays.test.js +140 -2
  877. package/dist/ir/inline-arrays.test.js.map +1 -1
  878. package/dist/ir/int32-slots.js +7 -0
  879. package/dist/ir/int32-slots.js.map +1 -1
  880. package/dist/ir/integer-ranges.js +16 -6
  881. package/dist/ir/integer-ranges.js.map +1 -1
  882. package/dist/ir/ir.d.ts +130 -44
  883. package/dist/ir/ir.js +7 -0
  884. package/dist/ir/ir.js.map +1 -1
  885. package/dist/ir/js-groups.d.ts +51 -0
  886. package/dist/ir/js-groups.js +394 -0
  887. package/dist/ir/js-groups.js.map +1 -0
  888. package/dist/ir/js-groups.test.d.ts +1 -0
  889. package/dist/ir/js-groups.test.js +555 -0
  890. package/dist/ir/js-groups.test.js.map +1 -0
  891. package/dist/ir/js-ic.d.ts +10 -9
  892. package/dist/ir/js-ic.js +58 -25
  893. package/dist/ir/js-ic.js.map +1 -1
  894. package/dist/ir/js-ic.test.js +37 -3
  895. package/dist/ir/js-ic.test.js.map +1 -1
  896. package/dist/ir/jsval.js +374 -63
  897. package/dist/ir/jsval.js.map +1 -1
  898. package/dist/ir/jsval.test.js +96 -2
  899. package/dist/ir/jsval.test.js.map +1 -1
  900. package/dist/ir/loop-entry-ranges.js +112 -9
  901. package/dist/ir/loop-entry-ranges.js.map +1 -1
  902. package/dist/ir/loop-entry-ranges.test.js +40 -0
  903. package/dist/ir/loop-entry-ranges.test.js.map +1 -1
  904. package/dist/ir/node-index.d.ts +23 -6
  905. package/dist/ir/node-index.js +126 -49
  906. package/dist/ir/node-index.js.map +1 -1
  907. package/dist/ir/numeric-call-specialization.d.ts +4 -2
  908. package/dist/ir/numeric-call-specialization.js +40 -26
  909. package/dist/ir/numeric-call-specialization.js.map +1 -1
  910. package/dist/ir/paired-while-loops.d.ts +4 -2
  911. package/dist/ir/paired-while-loops.js +8 -2
  912. package/dist/ir/paired-while-loops.js.map +1 -1
  913. package/dist/ir/parameter-versions.d.ts +13 -3
  914. package/dist/ir/parameter-versions.js +63 -40
  915. package/dist/ir/parameter-versions.js.map +1 -1
  916. package/dist/ir/property-bags.d.ts +4 -2
  917. package/dist/ir/property-bags.js +22 -17
  918. package/dist/ir/property-bags.js.map +1 -1
  919. package/dist/ir/receiver-readers.js +58 -2
  920. package/dist/ir/receiver-readers.js.map +1 -1
  921. package/dist/ir/row-pairs.d.ts +4 -2
  922. package/dist/ir/row-pairs.js +12 -11
  923. package/dist/ir/row-pairs.js.map +1 -1
  924. package/dist/ir/runtime-features.d.ts +139 -5
  925. package/dist/ir/runtime-features.js +397 -19
  926. package/dist/ir/runtime-features.js.map +1 -1
  927. package/dist/ir/runtime-features.test.js +135 -1
  928. package/dist/ir/runtime-features.test.js.map +1 -1
  929. package/dist/ir/runtime-jam-loops.d.ts +35 -0
  930. package/dist/ir/runtime-jam-loops.js +604 -0
  931. package/dist/ir/runtime-jam-loops.js.map +1 -0
  932. package/dist/ir/runtime-jam-loops.test.d.ts +1 -0
  933. package/dist/ir/runtime-jam-loops.test.js +565 -0
  934. package/dist/ir/runtime-jam-loops.test.js.map +1 -0
  935. package/dist/ir/saturating-loop-jams.d.ts +11 -2
  936. package/dist/ir/saturating-loop-jams.js +56 -16
  937. package/dist/ir/saturating-loop-jams.js.map +1 -1
  938. package/dist/ir/saturating-loop-jams.test.js +39 -1
  939. package/dist/ir/saturating-loop-jams.test.js.map +1 -1
  940. package/dist/ir/scalar-records.d.ts +5 -2
  941. package/dist/ir/scalar-records.js +12 -2
  942. package/dist/ir/scalar-records.js.map +1 -1
  943. package/dist/ir/self-captures.d.ts +4 -2
  944. package/dist/ir/self-captures.js +40 -28
  945. package/dist/ir/self-captures.js.map +1 -1
  946. package/dist/ir/self-captures.test.js +15 -0
  947. package/dist/ir/self-captures.test.js.map +1 -1
  948. package/dist/ir/serialize.d.ts +8 -2
  949. package/dist/ir/serialize.js +92 -24
  950. package/dist/ir/serialize.js.map +1 -1
  951. package/dist/ir/serialize.test.js +26 -0
  952. package/dist/ir/serialize.test.js.map +1 -1
  953. package/dist/ir/tiers.js +1 -0
  954. package/dist/ir/tiers.js.map +1 -1
  955. package/dist/ir/traverse.js +4 -0
  956. package/dist/ir/traverse.js.map +1 -1
  957. package/dist/ir/typed-argument-clones.d.ts +30 -0
  958. package/dist/ir/typed-argument-clones.js +789 -0
  959. package/dist/ir/typed-argument-clones.js.map +1 -0
  960. package/dist/ir/union-arm-loops.d.ts +3 -0
  961. package/dist/ir/union-arm-loops.js +373 -0
  962. package/dist/ir/union-arm-loops.js.map +1 -0
  963. package/dist/ir/union-arm-loops.test.d.ts +1 -0
  964. package/dist/ir/union-arm-loops.test.js +230 -0
  965. package/dist/ir/union-arm-loops.test.js.map +1 -0
  966. package/dist/ir/validate.js +170 -22
  967. package/dist/ir/validate.js.map +1 -1
  968. package/dist/ir/validate.test.js +46 -0
  969. package/dist/ir/validate.test.js.map +1 -1
  970. package/dist/library/compiler-self-identity.d.ts +8 -2
  971. package/dist/library/compiler-self-identity.js +92 -18
  972. package/dist/library/compiler-self-identity.js.map +1 -1
  973. package/dist/library/compiler-self-identity.test.js +150 -3
  974. package/dist/library/compiler-self-identity.test.js.map +1 -1
  975. package/dist/library/int-infer.d.ts +5 -0
  976. package/dist/library/int-infer.js +15 -3
  977. package/dist/library/int-infer.js.map +1 -1
  978. package/dist/library/ir-policy.js +4 -0
  979. package/dist/library/ir-policy.js.map +1 -1
  980. package/dist/library/library-cache.d.ts +4 -0
  981. package/dist/library/library-cache.js +2 -0
  982. package/dist/library/library-cache.js.map +1 -1
  983. package/dist/library/library-cache.test.js +26 -0
  984. package/dist/library/library-cache.test.js.map +1 -1
  985. package/dist/library/prepare.js +99 -31
  986. package/dist/library/prepare.js.map +1 -1
  987. package/dist/native/cache.d.ts +7 -0
  988. package/dist/native/cache.js +49 -0
  989. package/dist/native/cache.js.map +1 -1
  990. package/dist/native/cache.test.js +13 -1
  991. package/dist/native/cache.test.js.map +1 -1
  992. package/dist/native/cli.js +2 -0
  993. package/dist/native/cli.js.map +1 -1
  994. package/dist/native/compiler.js +26 -5
  995. package/dist/native/compiler.js.map +1 -1
  996. package/dist/native/executable-cache-open.test.js +31 -5
  997. package/dist/native/executable-cache-open.test.js.map +1 -1
  998. package/dist/native/executable-cache.d.ts +6 -1
  999. package/dist/native/executable-cache.js +7 -1
  1000. package/dist/native/executable-cache.js.map +1 -1
  1001. package/dist/native/prepare.d.ts +3 -0
  1002. package/dist/native/prepare.js +74 -28
  1003. package/dist/native/prepare.js.map +1 -1
  1004. package/dist/native/prepare.test.js +25 -3
  1005. package/dist/native/prepare.test.js.map +1 -1
  1006. package/dist/native/sanitizer.js +63 -4
  1007. package/dist/native/sanitizer.js.map +1 -1
  1008. package/dist/native/sanitizer.test.js +93 -2
  1009. package/dist/native/sanitizer.test.js.map +1 -1
  1010. package/dist/native/toolchain.js +9 -2
  1011. package/dist/native/toolchain.js.map +1 -1
  1012. package/dist/node-islands/boundary.d.ts +37 -1
  1013. package/dist/node-islands/boundary.js +65 -7
  1014. package/dist/node-islands/boundary.js.map +1 -1
  1015. package/dist/node-islands/boundary.test.d.ts +1 -0
  1016. package/dist/node-islands/boundary.test.js +76 -0
  1017. package/dist/node-islands/boundary.test.js.map +1 -0
  1018. package/dist/node-islands/detect.d.ts +27 -1
  1019. package/dist/node-islands/detect.js +475 -40
  1020. package/dist/node-islands/detect.js.map +1 -1
  1021. package/dist/node-islands/detect.test.js +175 -4
  1022. package/dist/node-islands/detect.test.js.map +1 -1
  1023. package/dist/node-islands/effect-gate.js +30 -20
  1024. package/dist/node-islands/effect-gate.js.map +1 -1
  1025. package/dist/node-islands/effect-gate.test.js +4 -1
  1026. package/dist/node-islands/effect-gate.test.js.map +1 -1
  1027. package/dist/node-islands/graph-islands.d.ts +40 -0
  1028. package/dist/node-islands/graph-islands.js +128 -0
  1029. package/dist/node-islands/graph-islands.js.map +1 -0
  1030. package/dist/node-islands/growth.d.ts +57 -0
  1031. package/dist/node-islands/growth.js +205 -0
  1032. package/dist/node-islands/growth.js.map +1 -0
  1033. package/dist/node-islands/libnode.d.ts +1 -1
  1034. package/dist/node-islands/libnode.js +1 -1
  1035. package/dist/node-islands/libnode.js.map +1 -1
  1036. package/dist/node-islands/modules.d.ts +28 -0
  1037. package/dist/node-islands/modules.js +156 -0
  1038. package/dist/node-islands/modules.js.map +1 -1
  1039. package/dist/node-islands/modules.test.js +105 -1
  1040. package/dist/node-islands/modules.test.js.map +1 -1
  1041. package/dist/node-islands/policy.js +2 -3
  1042. package/dist/node-islands/policy.js.map +1 -1
  1043. package/dist/node-islands/probe-recorder.d.ts +1 -0
  1044. package/dist/node-islands/probe-recorder.js +596 -0
  1045. package/dist/node-islands/probe-recorder.js.map +1 -0
  1046. package/dist/node-islands/probe-recorder.test.d.ts +1 -0
  1047. package/dist/node-islands/probe-recorder.test.js +80 -0
  1048. package/dist/node-islands/probe-recorder.test.js.map +1 -0
  1049. package/dist/node-islands/report.d.ts +12 -0
  1050. package/dist/node-islands/report.js +28 -0
  1051. package/dist/node-islands/report.js.map +1 -1
  1052. package/dist/node-islands/report.test.js +4 -0
  1053. package/dist/node-islands/report.test.js.map +1 -1
  1054. package/dist/node-islands/rules.js +9 -0
  1055. package/dist/node-islands/rules.js.map +1 -1
  1056. package/dist/node-islands/scan.d.ts +16 -1
  1057. package/dist/node-islands/scan.js +110 -9
  1058. package/dist/node-islands/scan.js.map +1 -1
  1059. package/dist/node-islands/snapshot.d.ts +38 -1
  1060. package/dist/node-islands/snapshot.js +165 -161
  1061. package/dist/node-islands/snapshot.js.map +1 -1
  1062. package/dist/node-islands/snapshot.test.js +63 -2
  1063. package/dist/node-islands/snapshot.test.js.map +1 -1
  1064. package/dist/node-islands/summary.js +8 -0
  1065. package/dist/node-islands/summary.js.map +1 -1
  1066. package/dist/node-islands/type-strip.d.ts +11 -0
  1067. package/dist/node-islands/type-strip.js +157 -0
  1068. package/dist/node-islands/type-strip.js.map +1 -0
  1069. package/dist/node-islands/type-strip.test.d.ts +1 -0
  1070. package/dist/node-islands/type-strip.test.js +31 -0
  1071. package/dist/node-islands/type-strip.test.js.map +1 -0
  1072. package/dist/project-config.d.ts +4 -0
  1073. package/dist/project-config.js +19 -0
  1074. package/dist/project-config.js.map +1 -1
  1075. package/dist/project-config.test.js +10 -0
  1076. package/dist/project-config.test.js.map +1 -1
  1077. package/dist/wasm/translate.js +11 -5
  1078. package/dist/wasm/translate.js.map +1 -1
  1079. package/dist/wasm/translate.test.js +35 -0
  1080. package/dist/wasm/translate.test.js.map +1 -1
  1081. package/package.json +20 -20
  1082. package/surface-manifest.json +221 -122
@@ -16,19 +16,20 @@
16
16
  * checked against the declared result type, like `JSON.parse(s) as T`; a
17
17
  * thrown Error crosses as its nearest intrinsic class with its message and
18
18
  * string `code`. */
19
- import { readFileSync, realpathSync } from "node:fs";
19
+ import { readFileSync, realpathSync, statSync } from "node:fs";
20
20
  import { resolveFrom } from "../../node-islands/resolve.js";
21
- import { dirname, isAbsolute, join } from "node:path";
21
+ import { dirname, isAbsolute, join, resolve } from "node:path";
22
22
  import * as ts from "../ts7/adapter.js";
23
- import { locOf } from "../program.js";
23
+ import { isJsSourceFile, locOf } from "../program.js";
24
+ import { isRelativeSpecifier } from "../workspace-registry.js";
24
25
  import { PoisonError, newFnCtx } from "./lowerer.js";
25
26
  import { BOOL, DYN, FOREIGN, STRING, VOID, } from "../../ir/ir.js";
26
27
  import { dynUndefinedExpr, varRef } from "../../ir/build.js";
27
28
  import { classMethodValue } from "./class-method-values.js";
28
29
  import { funcTypeFromParamShapes } from "./call-signatures.js";
29
30
  import { resolveBareModule } from "../resolve.js";
30
- import { nativeSubclassOfIslandDiag, nodeIslandBoundaryDiag, nodeIslandModuleDiag, } from "../../diagnostics/diagnostic.js";
31
- import { crossingOf, isForeignType, isIslandSubclassDecl, markIslandSubclass, islandPackageOfFile, } from "../../node-islands/boundary.js";
31
+ import { nativeSubclassOfIslandDiag, nodeIslandBoundaryDiag, nodeIslandDataFileDiag, nodeIslandModuleDiag, } from "../../diagnostics/diagnostic.js";
32
+ import { crossingOf, isForeignType, isIslandProgramModule, isIslandSubclassDecl, markIslandSubclass, islandOwnerOfFile, } from "../../node-islands/boundary.js";
32
33
  import { stripTypeWrappers } from "./typed-arguments.js";
33
34
  import { thenReader } from "./checked-promise-all.js";
34
35
  import { dynCompoundValue } from "./lower-exprs.js";
@@ -108,7 +109,10 @@ export function lowerNodeApiCall(lowerer, call, member) {
108
109
  const caller = callerPath(call);
109
110
  const problem = lowerer.nodeIslandModules.add(caller, specifierNode.text);
110
111
  if (problem !== null) {
111
- lowerer.pushDiag(nodeIslandModuleDiag(`${surface}: ${problem}`, locOf(specifierNode)));
112
+ const diag = lowerer.nodeIslandModules.isDataFileProblem(problem)
113
+ ? nodeIslandDataFileDiag
114
+ : nodeIslandModuleDiag;
115
+ lowerer.pushDiag(diag(`${surface}: ${problem}`, locOf(specifierNode)));
112
116
  throw new PoisonError();
113
117
  }
114
118
  const specifier = lowerer.lowerExprExpecting(specifierNode, STRING);
@@ -221,19 +225,59 @@ export function isEsmFile(file) {
221
225
  dir = parent;
222
226
  }
223
227
  }
228
+ /** The file a relative (or absolute) specifier names from `fromFile`, as
229
+ * Node's CommonJS/ESM resolution would find it, or null. Extension fallback
230
+ * and directory indexes only: an island module is a file the program
231
+ * already loaded, and `exports` maps stay Node's job. */
232
+ function relativeIslandFile(fromFile, spec) {
233
+ const base = isAbsolute(spec) ? spec : resolve(dirname(fromFile), spec);
234
+ const candidates = [base];
235
+ if (!/\.[cm]?js$/.test(base)) {
236
+ for (const ext of [".js", ".cjs", ".mjs"])
237
+ candidates.push(base + ext);
238
+ }
239
+ for (const ext of [".js", ".cjs", ".mjs"])
240
+ candidates.push(join(base, `index${ext}`));
241
+ for (const candidate of candidates) {
242
+ try {
243
+ if (statSync(candidate).isFile())
244
+ return candidate;
245
+ }
246
+ catch {
247
+ /* the next candidate */
248
+ }
249
+ }
250
+ return null;
251
+ }
224
252
  /** The island module file `spec` names from `fromFile`, or null when the
225
- * specifier does not resolve into an island package. */
253
+ * specifier does not resolve into an island package or module. */
226
254
  export function islandModuleFile(islands, fromFile, spec, kind) {
227
- const js = resolveBareModule(fromFile, spec, "js-only", kind);
228
- if (js === null)
229
- return null;
230
- if (islandPackageOfFile(islands, js.typesFile) === null)
231
- return null;
255
+ let file;
256
+ if (isRelativeSpecifier(spec) || isAbsolute(spec)) {
257
+ // A program module the pre-scan put in a Node island (DESIGN.md note 1
258
+ // §3.2): the file itself is the island, resolved as Node would.
259
+ if (islands.modules.size === 0)
260
+ return null;
261
+ const resolved = relativeIslandFile(fromFile, spec);
262
+ if (resolved === null)
263
+ return null;
264
+ if (islandOwnerOfFile(islands, resolved) === null)
265
+ return null;
266
+ file = resolved;
267
+ }
268
+ else {
269
+ const js = resolveBareModule(fromFile, spec, "js-only", kind);
270
+ if (js === null)
271
+ return null;
272
+ if (islandOwnerOfFile(islands, js.typesFile) === null)
273
+ return null;
274
+ file = js.typesFile;
275
+ }
232
276
  try {
233
- return realpathSync(js.typesFile);
277
+ return realpathSync(file);
234
278
  }
235
279
  catch {
236
- return js.typesFile;
280
+ return file;
237
281
  }
238
282
  }
239
283
  /** The module global of the island module at `path`, created on first use. */
@@ -269,7 +313,10 @@ function islandLoadPath(lowerer, path, loc) {
269
313
  }
270
314
  const problem = lowerer.nodeIslandModules.addLoaded(real);
271
315
  if (problem !== null) {
272
- lowerer.pushDiag(nodeIslandModuleDiag(problem, loc));
316
+ const diag = lowerer.nodeIslandModules.isDataFileProblem(problem)
317
+ ? nodeIslandDataFileDiag
318
+ : nodeIslandModuleDiag;
319
+ lowerer.pushDiag(diag(problem, loc));
273
320
  throw new PoisonError();
274
321
  }
275
322
  lowerer.nodeIslandLoads.push({ literal, path: real });
@@ -296,8 +343,16 @@ function loadIslandModule(lowerer, path, loc) {
296
343
  /** A static import's load: `nodeIsland.defer(path, snapshot)`, which the
297
344
  * build decides after lowering (node-islands/snapshot.ts, scope-B NI-7):
298
345
  * a module proved effect-free at load keeps it with its interface snapshot
299
- * and evaluates on first use; any other becomes nodeIsland.require. */
346
+ * and evaluates on first use; any other becomes nodeIsland.require.
347
+ *
348
+ * A program module that runs in an island loads eagerly
349
+ * (`nodeIsland.require`): deciding a deferral means evaluating the module
350
+ * in the build-time probe, and the build never runs the program's own
351
+ * source. */
300
352
  function deferIslandModule(lowerer, path, loc) {
353
+ const islands = lowerer.nodeIslands;
354
+ if (islands !== null && isIslandProgramModule(islands, path))
355
+ return loadIslandModule(lowerer, path, loc);
301
356
  return {
302
357
  kind: "libCall",
303
358
  fn: "nodeIsland.defer",
@@ -306,9 +361,36 @@ function deferIslandModule(lowerer, path, loc) {
306
361
  loc,
307
362
  };
308
363
  }
364
+ /** Whether `node` runs while its module evaluates: no enclosing function,
365
+ * method, accessor, constructor or class member initializer. */
366
+ function runsAtModuleEvaluation(node) {
367
+ for (let n = node.parent; n !== undefined; n = n.parent) {
368
+ if (ts.isSourceFile(n))
369
+ return true;
370
+ if (ts.isFunctionLike(n) || ts.isClassStaticBlockDeclaration(n) || ts.isPropertyDeclaration(n))
371
+ return false;
372
+ }
373
+ return false;
374
+ }
375
+ /** The %init statements that run in `stmt`'s place in its file's %init
376
+ * header (Lowerer.islandImportActions). */
377
+ function islandStatementActions(lowerer, sf, stmt) {
378
+ let byStatement = lowerer.islandImportActions.get(sf);
379
+ if (byStatement === undefined) {
380
+ byStatement = new Map();
381
+ lowerer.islandImportActions.set(sf, byStatement);
382
+ }
383
+ let actions = byStatement.get(stmt);
384
+ if (actions === undefined) {
385
+ actions = [];
386
+ byStatement.set(stmt, actions);
387
+ }
388
+ return actions;
389
+ }
309
390
  /** A static import (or re-export) of an island package: loads the module
310
- * in the importer's %init prelude. Returns false when `spec` is not an
311
- * island module. */
391
+ * in the importer's %init header, in the statement's place among the
392
+ * dependencies' %init calls, as Node evaluates it in source order. Returns
393
+ * false when `spec` is not an island module. */
312
394
  export function collectIslandImport(lowerer, sf, stmt, spec) {
313
395
  const islands = lowerer.nodeIslands;
314
396
  if (islands === null)
@@ -317,14 +399,42 @@ export function collectIslandImport(lowerer, sf, stmt, spec) {
317
399
  if (path === null)
318
400
  return false;
319
401
  if (ts.isExportDeclaration(stmt)) {
320
- lowerer.pushDiag(nodeIslandBoundaryDiag(`re-exporting the Node island module '${spec}'`, locOf(stmt)));
402
+ // `export { Type } from "typebox"`: the re-exporting module loads the
403
+ // island module and every name it re-exports binds the island's own
404
+ // export, so importers of this module reach it through the alias chain
405
+ // (islandBindingOf). A namespace or star re-export has no name to bind.
406
+ const clause = stmt.exportClause;
407
+ if (stmt.isTypeOnly || clause === undefined || !ts.isNamedExports(clause)) {
408
+ lowerer.pushDiag(nodeIslandBoundaryDiag(`re-exporting the Node island module '${spec}'`, locOf(stmt)));
409
+ return true;
410
+ }
411
+ lowerer.usesNodeIsland = true;
412
+ const exportLoc = locOf(stmt);
413
+ const exported = islandModuleGlobal(lowerer, path);
414
+ const initActions = islandStatementActions(lowerer, sf, stmt);
415
+ initActions.push({
416
+ kind: "assign",
417
+ localId: exported.global.id,
418
+ value: deferIslandModule(lowerer, path, exportLoc),
419
+ loc: exportLoc,
420
+ });
421
+ for (const el of clause.elements.nodes) {
422
+ if (el.isTypeOnly)
423
+ continue;
424
+ const name = el.propertyName?.text ?? el.name.text;
425
+ // CommonJS named exports are the namespace's snapshot (below).
426
+ if (!exported.esm && name !== "default")
427
+ initActions.push(islandSnapshotAssign(lowerer, exported, name, exportLoc));
428
+ registerIslandReexport(lowerer, stmt, el, name === "default"
429
+ ? { kind: "default", module: exported }
430
+ : { kind: "named", module: exported, name });
431
+ }
321
432
  return true;
322
433
  }
323
434
  lowerer.usesNodeIsland = true;
324
435
  const loc = locOf(stmt);
325
436
  const binding = islandModuleGlobal(lowerer, path);
326
- const actions = lowerer.jsonInitActions.get(sf) ?? [];
327
- lowerer.jsonInitActions.set(sf, actions);
437
+ const actions = islandStatementActions(lowerer, sf, stmt);
328
438
  actions.push({
329
439
  kind: "assign",
330
440
  localId: binding.global.id,
@@ -358,31 +468,30 @@ export function collectIslandImport(lowerer, sf, stmt, spec) {
358
468
  return undefined;
359
469
  });
360
470
  }
361
- {
362
- for (const name of snapshotNames) {
363
- if (name === "default")
364
- continue;
365
- let g = binding.snapshots.get(name);
366
- if (g === undefined) {
367
- g = {
368
- id: `%g.island.${lowerer.globalsList.length}`,
369
- name,
370
- type: DYN,
371
- mutable: true,
372
- };
373
- lowerer.globalsList.push(g);
374
- binding.snapshots.set(name, g);
375
- }
376
- actions.push({
377
- kind: "assign",
378
- localId: g.id,
379
- value: islandGet(varRef(binding.global.id, DYN, loc), name, loc),
380
- loc,
381
- });
382
- }
471
+ for (const name of snapshotNames) {
472
+ if (name === "default")
473
+ continue;
474
+ actions.push(islandSnapshotAssign(lowerer, binding, name, loc));
383
475
  }
384
476
  return true;
385
477
  }
478
+ /** A CommonJS island name's snapshot global and the %init action that
479
+ * assigns it once the module evaluated (Node's namespace snapshots named
480
+ * exports). */
481
+ function islandSnapshotAssign(lowerer, binding, name, loc) {
482
+ let g = binding.snapshots.get(name);
483
+ if (g === undefined) {
484
+ g = { id: `%g.island.${lowerer.globalsList.length}`, name, type: DYN, mutable: true };
485
+ lowerer.globalsList.push(g);
486
+ binding.snapshots.set(name, g);
487
+ }
488
+ return {
489
+ kind: "assign",
490
+ localId: g.id,
491
+ value: islandGet(varRef(binding.global.id, DYN, loc), name, loc),
492
+ loc,
493
+ };
494
+ }
386
495
  function islandGet(target, key, loc) {
387
496
  return {
388
497
  kind: "libCall",
@@ -392,6 +501,47 @@ function islandGet(target, key, loc) {
392
501
  loc,
393
502
  };
394
503
  }
504
+ /** Records that `specifier`'s exported name binds `binding`: importers of
505
+ * the re-exporting module reach the island's own export through the alias
506
+ * chain, whatever they spell it (`export { Num as NumberSchema }`). The
507
+ * island's export symbol is the key a chain ends on, so it is registered
508
+ * beside the specifier's own symbol. */
509
+ function registerIslandReexport(lowerer, stmt, specifier, binding) {
510
+ const named = lowerer.checker.getSymbolAtLocation(specifier.name);
511
+ if (named !== undefined)
512
+ lowerer.islandReexports.set(named, binding);
513
+ const moduleSpecifier = stmt.moduleSpecifier;
514
+ if (moduleSpecifier === undefined)
515
+ return;
516
+ const moduleSymbol = lowerer.checker.getSymbolAtLocation(moduleSpecifier);
517
+ if (moduleSymbol === undefined)
518
+ return;
519
+ const exported = lowerer.checker.getExportsOfModule(moduleSymbol);
520
+ const found = exported.find((s) => ts.symbolName(s) === (specifier.propertyName?.text ?? specifier.name.text));
521
+ if (found === undefined)
522
+ return;
523
+ lowerer.islandReexports.set(found, binding);
524
+ if ((found.flags & ts.SymbolFlags.Alias) !== 0)
525
+ lowerer.islandReexports.set(lowerer.checker.getAliasedSymbol(found), binding);
526
+ }
527
+ /** The island binding an alias chain reaches, or null: a name re-exported
528
+ * by a native module resolves to the island's export symbol itself. */
529
+ function islandReexportOf(lowerer, symbol) {
530
+ if (symbol === undefined || lowerer.islandReexports.size === 0)
531
+ return null;
532
+ const seen = new Set();
533
+ let s = symbol;
534
+ while (s !== undefined && !seen.has(s)) {
535
+ seen.add(s);
536
+ const bound = lowerer.islandReexports.get(s);
537
+ if (bound !== undefined)
538
+ return bound;
539
+ if ((s.flags & ts.SymbolFlags.Alias) === 0)
540
+ return null;
541
+ s = lowerer.checker.getAliasedSymbol(s);
542
+ }
543
+ return null;
544
+ }
395
545
  function moduleSpecifierOf(decl) {
396
546
  return ts.isImportDeclaration(decl) && ts.isStringLiteral(decl.moduleSpecifier)
397
547
  ? decl.moduleSpecifier.text
@@ -408,6 +558,11 @@ function islandBindingOf(lowerer, ident) {
408
558
  if (islands === null)
409
559
  return null;
410
560
  const symbol = lowerer.checker.getSymbolAtLocation(ident);
561
+ // A name a native module re-exports from an island package binds the
562
+ // island's own export: the import's alias chain reaches it.
563
+ const reexport = islandReexportOf(lowerer, symbol);
564
+ if (reexport !== null)
565
+ return reexport;
411
566
  const decl = symbol ? symbol.declarations[0] : undefined;
412
567
  if (decl === undefined)
413
568
  return null;
@@ -427,8 +582,24 @@ function islandBindingOf(lowerer, ident) {
427
582
  binding = name === "default" ? "default" : { name };
428
583
  }
429
584
  else {
585
+ // `const { name } = require("pkg")`: a member of module.exports, read
586
+ // at each use (shortcut: not copied once at the declaration).
587
+ const property = requiredPropertyOf(decl);
588
+ if (property !== null && loadsAtStatement(property.declaration)) {
589
+ const spec = requireInitSpecOf(lowerer, property.declaration);
590
+ if (spec === null)
591
+ return null;
592
+ const file = ts.getSourceFileOfNode(decl).fileName;
593
+ const path = islandModuleFile(islands, file, spec, "require");
594
+ const module = path === null ? undefined : lowerer.islandModules.get(path);
595
+ return module === undefined ? null : { kind: "named", module, name: property.name };
596
+ }
430
597
  // `const x = require("pkg")` (a CommonJS module of a native package
431
- // requiring an island package): x is module.exports.
598
+ // requiring an island package): x is module.exports. Only at the
599
+ // module's top level: a function's own binding is a local.
600
+ const statement = decl.parent?.parent;
601
+ if (statement === undefined || !ts.isSourceFile(statement.parent))
602
+ return null;
432
603
  const spec = requireSpecOf(lowerer, decl);
433
604
  if (spec === null)
434
605
  return null;
@@ -484,8 +655,16 @@ function fromIsland(lowerer, raw, node) {
484
655
  if ((tsType.flags & (ts.TypeFlags.Void | ts.TypeFlags.Undefined)) !== 0 && isDiscarded(node))
485
656
  return raw;
486
657
  const mapped = lowerer.mapTypeOf(tsType);
487
- if (mapped === null)
658
+ if (mapped === null) {
659
+ // An intersection of containers (`Choice[] & GenChoice[]`: the
660
+ // island's array extended by the caller's own type) has no native
661
+ // representation of its own. Where the program only uses it through
662
+ // island operations it stays a handle, like an array the island does
663
+ // not declare.
664
+ if (containerType(lowerer, tsType) && handleUseOk(lowerer, node))
665
+ return raw;
488
666
  boundaryFail(lowerer, `an island value of type '${lowerer.checker.typeToString(tsType)}'`, node);
667
+ }
489
668
  if (mapped.kind === "dyn")
490
669
  return raw;
491
670
  if (mapped.kind === "void")
@@ -528,7 +707,7 @@ function fromIsland(lowerer, raw, node) {
528
707
  if (!copiedType(lowerer, mapped) && containerType(lowerer, tsType) && handleUseOk(lowerer, node))
529
708
  return raw;
530
709
  // Otherwise an array of copied values is a copy (above).
531
- if (copiedArrayType(lowerer, mapped)) {
710
+ if (copyableArrayType(lowerer, mapped)) {
532
711
  const copy = {
533
712
  kind: "libCall",
534
713
  fn: "nodeIsland.copyArrays",
@@ -538,7 +717,7 @@ function fromIsland(lowerer, raw, node) {
538
717
  };
539
718
  return lowerer.coerceToExpected(copy, mapped);
540
719
  }
541
- if (!copiedType(lowerer, mapped) && exportedByReference(lowerer, tsType))
720
+ if (!copiedType(lowerer, mapped) && copiedRecordType(lowerer, tsType))
542
721
  return lowerer.coerceToExpected(raw, mapped);
543
722
  if (!copiedType(lowerer, mapped))
544
723
  boundaryFail(lowerer, `an island value of type '${lowerer.checker.typeToString(tsType)}' (only primitives and strings are copied; objects of types the island does not declare stay handles from NI-5 on)`, node);
@@ -550,6 +729,33 @@ function copiedArrayType(lowerer, t) {
550
729
  return false;
551
730
  return copiedType(lowerer, t.elem) || copiedArrayType(lowerer, t.elem);
552
731
  }
732
+ /** An array of copied values, or a union of one with null and/or
733
+ * undefined (`string[] | undefined`): the copy converts whatever the
734
+ * island value holds (a non-array crosses as itself, so a nullish value
735
+ * stays nullish) and the checked conversion throws on an element of the
736
+ * wrong type. */
737
+ function copyableArrayType(lowerer, t) {
738
+ if (t.kind !== "union")
739
+ return copiedArrayType(lowerer, t);
740
+ const def = lowerer.unions.get(t.unionId);
741
+ if (def === undefined)
742
+ return false;
743
+ let arrays = 0;
744
+ for (const arm of def.arms) {
745
+ if (arm.kind === "nullT" || arm.kind === "undefinedT")
746
+ continue;
747
+ if (!copiedArrayType(lowerer, arm))
748
+ return false;
749
+ arrays++;
750
+ }
751
+ return arrays > 0;
752
+ }
753
+ /** The IR type an island value crosses as when it is a copyable array
754
+ * (`copyableArrayType`), or null when the declared type is not one. */
755
+ function copyableCrossing(lowerer, node) {
756
+ const mapped = lowerer.mapTypeOf(lowerer.typeOf(node));
757
+ return mapped !== null && copyableArrayType(lowerer, mapped) ? mapped : null;
758
+ }
553
759
  /** Whether a value of IR type `t` is copied at the boundary: primitives,
554
760
  * strings, null/undefined, and unions of those. */
555
761
  function copiedType(lowerer, t) {
@@ -626,20 +832,56 @@ function undeclaredHandleType(lowerer, type) {
626
832
  return false;
627
833
  return containerType(lowerer, type);
628
834
  }
835
+ /** Builtin classes whose native representation is not a JavaScript object
836
+ * (URLSearchParams, Headers, Request, …): an island instance of one has no
837
+ * native counterpart to convert into, so it stays a handle. */
838
+ const BUILTIN_HANDLE_CLASSES = new Set([
839
+ "URL",
840
+ "URLSearchParams",
841
+ "Headers",
842
+ "Request",
843
+ "Response",
844
+ "FormData",
845
+ "Blob",
846
+ "File",
847
+ "AbortController",
848
+ "AbortSignal",
849
+ "ReadableStream",
850
+ "WritableStream",
851
+ "TransformStream",
852
+ "TextEncoder",
853
+ "TextDecoder",
854
+ ]);
855
+ /** Whether `type` is one of BUILTIN_HANDLE_CLASSES as declared by the
856
+ * standard library or @types/node (not a program class of the same name). */
857
+ function builtinHandleClass(type) {
858
+ const symbol = type.getSymbol();
859
+ if (symbol === undefined || !BUILTIN_HANDLE_CLASSES.has(String(symbol.escapedName)))
860
+ return false;
861
+ return (symbol.declarations.length > 0 &&
862
+ symbol.declarations.every((d) => ts.getSourceFileOfNode(d).isDeclarationFile));
863
+ }
629
864
  /** Arrays, tuples, Maps and Sets (every arm of a union, nullish arms
630
- * aside): the object types an island hands back without declaring them. */
865
+ * aside), and the builtin classes of builtinHandleClass: the object types
866
+ * an island hands back without declaring them. An intersection of those
867
+ * (`Choice[] & GenChoice[]`) is a container too: it is a value of each. */
631
868
  function containerType(lowerer, type) {
632
869
  if (type.isUnionType())
633
870
  return ts
634
871
  .constituentTypes(type)
635
872
  .every((t) => (t.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.Void)) !== 0 ||
636
873
  containerType(lowerer, t));
874
+ if ((type.flags & ts.TypeFlags.Intersection) !== 0)
875
+ return ts
876
+ .constituentTypes(type)
877
+ .every((t) => (t.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.Void)) !== 0 ||
878
+ containerType(lowerer, t));
637
879
  if ((type.flags & ts.TypeFlags.Object) === 0)
638
880
  return false;
639
881
  if (lowerer.checker.isArrayType(type) || lowerer.checker.isTupleType(type))
640
882
  return true;
641
883
  const name = type.getSymbol()?.escapedName;
642
- return name === "Map" || name === "Set";
884
+ return name === "Map" || name === "Set" || builtinHandleClass(type);
643
885
  }
644
886
  /** A member read, call, index or `new` whose receiver or callee is an
645
887
  * island value. */
@@ -890,8 +1132,11 @@ export function classConstructHelper(lowerer, ident, loc) {
890
1132
  for (let c = info; c; c = c.base)
891
1133
  if (c.def.baseValueGlobal)
892
1134
  return null;
893
- if (lowerer.inheritsBuiltinErrorCtor(info))
894
- return null;
1135
+ /* A ctor-less Error subclass keeps the builtin base's constructor
1136
+ * parameters — the (message?, options?) checked-dynamic pair the
1137
+ * synthesized constructor forwards — so its helper constructs exactly
1138
+ * what native `new C(...)` does. Only an explicit constructor with
1139
+ * another shape falls through the mode check below. */
895
1140
  const shapes = info.ctorParams;
896
1141
  if (shapes.some((s) => s.mode !== "required" && s.mode !== "omittable"))
897
1142
  return null;
@@ -934,7 +1179,11 @@ export function classConstructHelper(lowerer, ident, loc) {
934
1179
  /** Native values NI-5 exports into the island by reference: functions,
935
1180
  * promises, and object types other than arrays, tuples, Maps and Sets
936
1181
  * (records, interfaces, class instances). A union qualifies when every
937
- * arm does or is copied. */
1182
+ * arm does or is copied, and an intersection of them qualifies: a merged
1183
+ * generic record (`Omit<Base, "k"> & Extras`, the `Type.Object(props)`
1184
+ * shape) is one native object, and the island reads the program's own
1185
+ * object, not a copy of it. An intersection with a primitive arm
1186
+ * (`string & {brand}`) is a primitive value, which the runtime copies. */
938
1187
  function exportedByReference(lowerer, type) {
939
1188
  const checker = lowerer.checker;
940
1189
  if (type.isUnionType())
@@ -942,6 +1191,11 @@ function exportedByReference(lowerer, type) {
942
1191
  .constituentTypes(type)
943
1192
  .every((t) => (t.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.Void)) !== 0 ||
944
1193
  exportedByReference(lowerer, t));
1194
+ if ((type.flags & ts.TypeFlags.Intersection) !== 0)
1195
+ return ts
1196
+ .constituentTypes(type)
1197
+ .every((t) => (t.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.Void)) !== 0 ||
1198
+ exportedByReference(lowerer, t));
945
1199
  if ((type.flags & ts.TypeFlags.Object) === 0)
946
1200
  return false;
947
1201
  // Arrays and tuples cross as Proxies over the native array (NI-5b).
@@ -951,6 +1205,21 @@ function exportedByReference(lowerer, type) {
951
1205
  return false;
952
1206
  return true;
953
1207
  }
1208
+ /** A record type an island object crosses OUT into as a deep checked
1209
+ * copy: the object types exportedByReference names, and intersections of
1210
+ * them — a mapped pair (`{[K in Fg]: V} & {[K in Bg]?: V}`) or a merged
1211
+ * generic record (`Omit<Base, "k"> & Extras`) is one record, so the
1212
+ * island's object converts into the native one the same way a plain
1213
+ * record's does. An intersection with a primitive arm (`string & {brand}`)
1214
+ * is a primitive value, which copies as its arm. */
1215
+ function copiedRecordType(lowerer, type) {
1216
+ if ((type.flags & ts.TypeFlags.Intersection) !== 0)
1217
+ return ts
1218
+ .constituentTypes(type)
1219
+ .every((t) => (t.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.Void)) !== 0 ||
1220
+ copiedRecordType(lowerer, t));
1221
+ return exportedByReference(lowerer, type);
1222
+ }
954
1223
  /** A fresh object or array literal crosses as a copy (a plain dyn object
955
1224
  * or array the runtime copies into V8): nothing native can alias it. Its
956
1225
  * members cross by the same rules (toIsland). */
@@ -1135,6 +1404,16 @@ function lowerIslandChain(lowerer, expr, chain, loc) {
1135
1404
  const result = fromIsland(lowerer, value, expr);
1136
1405
  return stmts.length > 0 ? { kind: "seqExpr", stmts, result, type: result.type, loc } : result;
1137
1406
  }
1407
+ /** The local an island handle binding reads here: its own binding, retyped
1408
+ * checked-dynamic, or, inside a closure, the capture of an enclosing
1409
+ * function's binding, which resolveLocal registers. */
1410
+ function islandHandleLocal(lowerer, ident) {
1411
+ const origin = lowerer.peekLocal(ident);
1412
+ if (origin === null)
1413
+ return null;
1414
+ origin.type = DYN;
1415
+ return lowerer.resolveLocal(ident);
1416
+ }
1138
1417
  /** Expressions on island values (the lowerExpr hook; null: not an island
1139
1418
  * expression, the ordinary lowering applies). */
1140
1419
  export function lowerIslandExpr(lowerer, expr) {
@@ -1151,14 +1430,24 @@ export function lowerIslandExpr(lowerer, expr) {
1151
1430
  if (b === null) {
1152
1431
  if (!islandHandleBinding(lowerer, expr))
1153
1432
  return null;
1154
- if (!handleUseOk(lowerer, expr))
1433
+ // The DECLARED type decides the crossing, not the use: an island
1434
+ // handle whose type is an array of copied values crosses as a copy of
1435
+ // its elements wherever native code needs a native value, and the
1436
+ // checked conversion throws on an element of the wrong type. Every
1437
+ // other native use stays refused (the value is a handle).
1438
+ const ok = handleUseOk(lowerer, expr);
1439
+ const copy = ok ? null : copyableCrossing(lowerer, expr);
1440
+ if (!ok && copy === null)
1155
1441
  boundaryFail(lowerer, `an island value of type '${lowerer.checker.typeToString(lowerer.typeOf(expr))}' used as a native value (island arrays, Maps and Sets stay handles: read members, call methods, index or spread them)`, expr);
1156
1442
  lowerer.usesNodeIsland = true;
1157
- const g = lowerer.globalOf(expr);
1158
- if (g === null)
1443
+ const slot = lowerer.globalOf(expr) ?? islandHandleLocal(lowerer, expr);
1444
+ if (slot === null)
1159
1445
  return null; // the local is declared dyn
1160
- g.type = DYN;
1161
- return varRef(g.id, DYN, loc);
1446
+ slot.type = DYN;
1447
+ const ref = varRef(slot.id, DYN, loc);
1448
+ return copy === null
1449
+ ? ref
1450
+ : lowerer.coerceToExpected({ kind: "libCall", fn: "nodeIsland.copyArrays", args: [ref], type: DYN, loc }, copy);
1162
1451
  }
1163
1452
  lowerer.usesNodeIsland = true;
1164
1453
  return fromIsland(lowerer, islandBindingValue(lowerer, b, expr, loc), expr);
@@ -1196,7 +1485,9 @@ export function lowerIslandExpr(lowerer, expr) {
1196
1485
  if (!isForeignExpr(lowerer, expr.expression))
1197
1486
  return null;
1198
1487
  lowerer.usesNodeIsland = true;
1199
- const target = lowerer.lowerExpr(expr.expression);
1488
+ // `(p as V)[k]`: an assertion on a handle is a view, never a conversion
1489
+ // (the read meets the member's declared type in fromIsland below).
1490
+ const target = lowerer.lowerExpr(stripTypeWrappers(expr.expression));
1200
1491
  const key = toIsland(lowerer, expr.argumentExpression);
1201
1492
  return fromIsland(lowerer, { kind: "libCall", fn: "nodeIsland.getKey", args: [target, key], type: DYN, loc }, expr);
1202
1493
  }
@@ -1372,7 +1663,9 @@ export function lowerIslandExpr(lowerer, expr) {
1372
1663
  stmts.push({ kind: "varDecl", localId: local.id, init, loc });
1373
1664
  return varRef(local.id, type, loc);
1374
1665
  };
1375
- const target = lowerer.lowerExpr(left.expression);
1666
+ // `(p as V).k = v`: write the HANDLE the assertion views, not the
1667
+ // asserted record the conversion would build.
1668
+ const target = lowerer.lowerExpr(stripTypeWrappers(left.expression));
1376
1669
  const receiver = hold("%islandSetTarget", target, target.type);
1377
1670
  const key = ts.isPropertyAccessExpression(left)
1378
1671
  ? null
@@ -1435,7 +1728,8 @@ function islandCompoundAssign(lowerer, expr, left, op, loc) {
1435
1728
  stmts.push({ kind: "varDecl", localId: local.id, init, loc });
1436
1729
  return varRef(local.id, DYN, loc);
1437
1730
  };
1438
- const target = hold("%islandObj", lowerer.coerceToExpected(lowerer.lowerExpr(left.expression), DYN));
1731
+ // `(p as V).k op= v`: the view is erased, so the handle is the receiver.
1732
+ const target = hold("%islandObj", lowerer.coerceToExpected(lowerer.lowerExpr(stripTypeWrappers(left.expression)), DYN));
1439
1733
  const key = ts.isPropertyAccessExpression(left)
1440
1734
  ? null
1441
1735
  : hold("%islandKey", toIsland(lowerer, left.argumentExpression));
@@ -1487,7 +1781,22 @@ function islandReceiver(lowerer, receiver, member, loc, call = false) {
1487
1781
  return { value: exports };
1488
1782
  }
1489
1783
  }
1490
- return { value: lowerer.coerceToExpected(lowerer.lowerExpr(receiver), FOREIGN) };
1784
+ // `(p as V).k`: the assertion is a view of `p`'s handle, not a
1785
+ // conversion of it (the read meets the member's type in fromIsland).
1786
+ return { value: lowerer.coerceToExpected(lowerer.lowerExpr(inner), FOREIGN) };
1787
+ }
1788
+ /** Whether `require(spec)` in `file` loads an island module. */
1789
+ export function isIslandRequireSpec(lowerer, file, spec) {
1790
+ const islands = lowerer.nodeIslands;
1791
+ return islands !== null && islandModuleFile(islands, file, spec, "require") !== null;
1792
+ }
1793
+ /** `require("<island pkg>")` in a CommonJS module, at a call no other
1794
+ * lowering claimed (inside a function, or as a subexpression): the island
1795
+ * module loads at the call. Null when the package is not an island. */
1796
+ export function lowerIslandRequireCall(lowerer, call) {
1797
+ if (lowerer.nodeIslands === null)
1798
+ return null;
1799
+ return lowerIslandLoadCall(lowerer, call, locOf(call)) ?? null;
1491
1800
  }
1492
1801
  /** `require("pkg")` (the global require, anywhere) and `import("pkg")` of
1493
1802
  * an island module: load it at the call. Undefined: not such a call. */
@@ -1518,7 +1827,14 @@ function lowerIslandLoadCall(lowerer, expr, loc) {
1518
1827
  loc,
1519
1828
  };
1520
1829
  }
1521
- return fromIsland(lowerer, loadIslandModule(lowerer, path, loc), expr);
1830
+ // A require() the module's own evaluation runs (not inside a function or
1831
+ // class body) loads the island exactly when a static import would: it is
1832
+ // deferred the same way (scope-B NI-7d), so a native package's top-level
1833
+ // `const x = require("<island>")` does not start Node at boot.
1834
+ const load = runsAtModuleEvaluation(expr)
1835
+ ? deferIslandModule(lowerer, path, loc)
1836
+ : loadIslandModule(lowerer, path, loc);
1837
+ return fromIsland(lowerer, load, expr);
1522
1838
  }
1523
1839
  /* ── native classes extending island classes (scope-B NI-5b) ───────────
1524
1840
  * `class Sub extends IslandBase { ... }` at module top level: the class is
@@ -1808,14 +2124,89 @@ function plainLiteral(node) {
1808
2124
  /** The specifier of `x = require("spec")` (a variable declaration binding
1809
2125
  * an identifier to a literal require), or null. */
1810
2126
  function requireSpecOf(lowerer, decl) {
1811
- if (!ts.isVariableDeclaration(decl) ||
1812
- !ts.isIdentifier(decl.name) ||
1813
- decl.initializer === undefined)
2127
+ if (!ts.isVariableDeclaration(decl) || !ts.isIdentifier(decl.name))
1814
2128
  return null;
1815
2129
  // Only a const keeps the module: a let or var can be reassigned.
1816
2130
  const list = decl.parent;
1817
2131
  if (!ts.isVariableDeclarationList(list) || (list.flags & ts.NodeFlags.Const) === 0)
1818
2132
  return null;
2133
+ return requireInitSpecOf(lowerer, decl);
2134
+ }
2135
+ /** The property a destructured CommonJS require binds: `name` in
2136
+ * `const { name } = require("spec")` or `const { name: local } = …`, with
2137
+ * the declaration. Rest elements, defaults and nested patterns are null. */
2138
+ function requiredPropertyOf(decl) {
2139
+ if (!ts.isBindingElement(decl) || decl.dotDotDotToken || decl.initializer)
2140
+ return null;
2141
+ if (!ts.isIdentifier(decl.name))
2142
+ return null;
2143
+ const pattern = decl.parent;
2144
+ if (pattern === undefined || !ts.isObjectBindingPattern(pattern))
2145
+ return null;
2146
+ const declaration = pattern.parent;
2147
+ if (declaration === undefined || !ts.isVariableDeclaration(declaration))
2148
+ return null;
2149
+ const key = decl.propertyName;
2150
+ const name = key === undefined
2151
+ ? decl.name.text
2152
+ : ts.isIdentifier(key) || ts.isStringLiteral(key)
2153
+ ? key.text
2154
+ : null;
2155
+ return name === null ? null : { name, declaration };
2156
+ }
2157
+ /** Whether every element of `const { … } = require("<island>")` binds a
2158
+ * plain member (requiredPropertyOf): only then do the names read the
2159
+ * module global; other patterns keep the ordinary lowering. */
2160
+ function islandPatternBindable(pattern) {
2161
+ return pattern.elements.nodes.every((e) => requiredPropertyOf(e) !== null);
2162
+ }
2163
+ /** Whether the top-level declaration `decl` of a JavaScript module loads
2164
+ * its island module at the statement (lowerIslandRequireAtStatement)
2165
+ * rather than in the module's %init prelude: `const` declarations binding
2166
+ * an identifier or a plain object pattern. Reads before the statement are
2167
+ * TDZ errors in Node, so the binding is never observed unassigned. `let`
2168
+ * and `var` bindings can be reassigned: they keep the ordinary lowering. */
2169
+ function loadsAtStatement(decl) {
2170
+ const list = decl.parent;
2171
+ if (list === undefined || !ts.isVariableDeclarationList(list))
2172
+ return false;
2173
+ if ((list.flags & ts.NodeFlags.Const) === 0)
2174
+ return false;
2175
+ if (!isJsSourceFile(ts.getSourceFileOfNode(decl)))
2176
+ return false;
2177
+ if (ts.isIdentifier(decl.name))
2178
+ return true;
2179
+ return ts.isObjectBindingPattern(decl.name) && islandPatternBindable(decl.name);
2180
+ }
2181
+ /** The top-level statement `const x = require("<island>")` or `const { a,
2182
+ * b: c } = require("<island>")` of a JavaScript module: assigns the island
2183
+ * module (deferred like any top-level require) to its module global at the
2184
+ * statement's position, so writes before it (`process.env.NODE_ENV = …`)
2185
+ * are visible to the module's evaluation, as in Node; `x` is the module,
2186
+ * `a` and `c` read its members at each use (shortcut: not copied once at
2187
+ * the declaration). Null for any other declaration. */
2188
+ export function lowerIslandRequireAtStatement(lowerer, decl) {
2189
+ const islands = lowerer.nodeIslands;
2190
+ if (islands === null || !loadsAtStatement(decl))
2191
+ return null;
2192
+ const spec = requireInitSpecOf(lowerer, decl);
2193
+ if (spec === null)
2194
+ return null;
2195
+ const path = islandModuleFile(islands, ts.getSourceFileOfNode(decl).fileName, spec, "require");
2196
+ const module = path === null ? undefined : lowerer.islandModules.get(path);
2197
+ if (path === null || module === undefined)
2198
+ return null;
2199
+ const loc = locOf(decl);
2200
+ const load = runsAtModuleEvaluation(decl)
2201
+ ? deferIslandModule(lowerer, path, loc)
2202
+ : loadIslandModule(lowerer, path, loc);
2203
+ return { kind: "assign", localId: module.global.id, value: load, loc };
2204
+ }
2205
+ /** The specifier of a variable declaration initialized with a literal
2206
+ * `require("spec")`, whatever its binding name or pattern, or null. */
2207
+ function requireInitSpecOf(lowerer, decl) {
2208
+ if (decl.initializer === undefined)
2209
+ return null;
1819
2210
  let init = decl.initializer;
1820
2211
  while (ts.isParenthesizedExpression(init))
1821
2212
  init = init.expression;
@@ -1835,7 +2226,9 @@ function requireSpecOf(lowerer, decl) {
1835
2226
  /** Top-level `const x = require("pkg")` statements of island packages in a
1836
2227
  * compiled module (a native package requiring an island package): load the
1837
2228
  * island module in the module's %init prelude (shortcut: before the body,
1838
- * not at the statement). */
2229
+ * not at the statement; JavaScript `const` declarations load at the
2230
+ * statement instead, loadsAtStatement), deferred exactly like a static import (scope-B
2231
+ * NI-7d: the build decides from the probe, stubs stand in until first use). */
1839
2232
  export function collectIslandRequires(lowerer, sf) {
1840
2233
  const islands = lowerer.nodeIslands;
1841
2234
  if (islands === null)
@@ -1844,6 +2237,18 @@ export function collectIslandRequires(lowerer, sf) {
1844
2237
  if (!ts.isVariableStatement(stmt))
1845
2238
  continue;
1846
2239
  for (const decl of stmt.declarationList.declarations.nodes) {
2240
+ // JavaScript `const` requires: the module global exists from
2241
+ // here on; the statement itself loads the module at its position
2242
+ // (lowerIslandRequireAtStatement).
2243
+ if (loadsAtStatement(decl)) {
2244
+ const spec = requireInitSpecOf(lowerer, decl);
2245
+ const path = spec === null ? null : islandModuleFile(islands, sf.fileName, spec, "require");
2246
+ if (path !== null) {
2247
+ lowerer.usesNodeIsland = true;
2248
+ islandModuleGlobal(lowerer, path);
2249
+ }
2250
+ continue;
2251
+ }
1847
2252
  const spec = requireSpecOf(lowerer, decl);
1848
2253
  if (spec === null)
1849
2254
  continue;
@@ -1858,7 +2263,7 @@ export function collectIslandRequires(lowerer, sf) {
1858
2263
  actions.push({
1859
2264
  kind: "assign",
1860
2265
  localId: binding.global.id,
1861
- value: loadIslandModule(lowerer, path, loc),
2266
+ value: deferIslandModule(lowerer, path, loc),
1862
2267
  loc,
1863
2268
  });
1864
2269
  }