@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
@@ -67,6 +67,20 @@ const BUILTIN_GLOBALS = new Set([
67
67
  "queueMicrotask",
68
68
  "structuredClone",
69
69
  ]);
70
+ /** CommonJS module-scope names and JavaScript's value keywords: provided by
71
+ * the module wrapper or the language, never the global object. */
72
+ const MODULE_SCOPE_NAMES = new Set([
73
+ "require",
74
+ "module",
75
+ "exports",
76
+ "__dirname",
77
+ "__filename",
78
+ "arguments",
79
+ "eval",
80
+ "undefined",
81
+ "NaN",
82
+ "Infinity",
83
+ ]);
70
84
  /** Writes to builtin members that the native subset models (process
71
85
  * state, tuning knobs). */
72
86
  const ALLOWED_BUILTIN_WRITES = new Set([
@@ -96,6 +110,21 @@ function builtinModuleName(spec) {
96
110
  return bare;
97
111
  return null;
98
112
  }
113
+ /** Parentheses and the TypeScript wrappers Node erases (`as`,
114
+ * `satisfies`, `!` and the angle-bracket assertion). */
115
+ function stripWrappers(node) {
116
+ let value = node;
117
+ for (;;) {
118
+ if (ts.isParenthesizedExpression(value) ||
119
+ ts.isAsExpression(value) ||
120
+ ts.isTypeAssertion(value) ||
121
+ ts.isNonNullExpression(value) ||
122
+ ts.isSatisfiesExpression(value))
123
+ value = value.expression;
124
+ else
125
+ return value;
126
+ }
127
+ }
99
128
  function literalText(node) {
100
129
  if (node === undefined)
101
130
  return null;
@@ -103,6 +132,15 @@ function literalText(node) {
103
132
  return node.text;
104
133
  return null;
105
134
  }
135
+ /** A property name the scan can spell: an identifier, a string or number
136
+ * literal, or a computed literal key. */
137
+ function staticKey(node) {
138
+ if (ts.isIdentifier(node) || ts.isNumericLiteral(node))
139
+ return node.text;
140
+ if (ts.isComputedPropertyName(node))
141
+ return literalText(stripWrappers(node.expression));
142
+ return literalText(node);
143
+ }
106
144
  /** A specifier that folds at build time: a literal, or a concatenation of
107
145
  * literals. */
108
146
  function isFoldableSpecifier(node) {
@@ -117,6 +155,15 @@ function isFoldableSpecifier(node) {
117
155
  function isAssignmentOperator(kind) {
118
156
  return kind >= ts.SyntaxKind.FirstAssignment && kind <= ts.SyntaxKind.LastAssignment;
119
157
  }
158
+ /** The key of an object-literal property (`name`, `"name"` or a
159
+ * template without substitutions). */
160
+ function literalKeyName(name) {
161
+ if (name === undefined)
162
+ return null;
163
+ if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNoSubstitutionTemplateLiteral(name))
164
+ return name.text;
165
+ return null;
166
+ }
120
167
  function propertyName(node) {
121
168
  if (ts.isPropertyAccessExpression(node)) {
122
169
  const name = node.name;
@@ -129,15 +176,14 @@ function propertyName(node) {
129
176
  /** `a.b.c` as "a.b.c" (element accesses with literal keys included), or
130
177
  * null when the chain has a computed key or does not start at a name. */
131
178
  function chainText(node) {
132
- if (ts.isIdentifier(node))
133
- return node.text;
134
- if (node.kind === ts.SyntaxKind.ThisKeyword)
179
+ const value = stripWrappers(node);
180
+ if (ts.isIdentifier(value))
181
+ return value.text;
182
+ if (value.kind === ts.SyntaxKind.ThisKeyword)
135
183
  return "this";
136
- if (ts.isParenthesizedExpression(node))
137
- return chainText(node.expression);
138
- if (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) {
139
- const base = chainText(node.expression);
140
- const name = propertyName(node);
184
+ if (ts.isPropertyAccessExpression(value) || ts.isElementAccessExpression(value)) {
185
+ const base = chainText(value.expression);
186
+ const name = propertyName(value);
141
187
  if (base === null || name === null)
142
188
  return null;
143
189
  return `${base}.${name}`;
@@ -146,32 +192,29 @@ function chainText(node) {
146
192
  }
147
193
  /** Like chainText, with computed keys spelled `[…]`: `process.env[…]`. */
148
194
  function memberText(node) {
149
- const text = chainText(node);
195
+ const value = stripWrappers(node);
196
+ const text = chainText(value);
150
197
  if (text !== null)
151
198
  return text;
152
- if (ts.isElementAccessExpression(node)) {
153
- const base = memberText(node.expression);
199
+ if (ts.isElementAccessExpression(value)) {
200
+ const base = memberText(value.expression);
154
201
  return base === null ? null : `${base}[…]`;
155
202
  }
156
- if (ts.isPropertyAccessExpression(node)) {
157
- const base = memberText(node.expression);
158
- const name = propertyName(node);
203
+ if (ts.isPropertyAccessExpression(value)) {
204
+ const base = memberText(value.expression);
205
+ const name = propertyName(value);
159
206
  return base === null || name === null ? null : `${base}.${name}`;
160
207
  }
161
208
  return null;
162
209
  }
163
210
  /** The identifier a member chain starts at (`a` of `a.b[c].d`). */
164
211
  function chainRoot(node) {
165
- let cur = node;
212
+ let cur = stripWrappers(node);
166
213
  for (;;) {
167
214
  if (ts.isIdentifier(cur))
168
215
  return cur;
169
216
  if (ts.isPropertyAccessExpression(cur) || ts.isElementAccessExpression(cur)) {
170
- cur = cur.expression;
171
- continue;
172
- }
173
- if (ts.isParenthesizedExpression(cur)) {
174
- cur = cur.expression;
217
+ cur = stripWrappers(cur.expression);
175
218
  continue;
176
219
  }
177
220
  return null;
@@ -212,6 +255,83 @@ function isFunctionBoundary(node) {
212
255
  ts.isGetAccessorDeclaration(node) ||
213
256
  ts.isSetAccessorDeclaration(node));
214
257
  }
258
+ /** Whether `node`, an identifier, is read rather than written, declared or
259
+ * used as a name. A shorthand property and a `typeof` operand are reads. */
260
+ function isReadPosition(node, parent) {
261
+ if (ts.isPropertyAccessExpression(parent) && parent.name === node)
262
+ return false;
263
+ if ((ts.isPropertyAssignment(parent) ||
264
+ ts.isMethodDeclaration(parent) ||
265
+ ts.isPropertyDeclaration(parent) ||
266
+ ts.isGetAccessorDeclaration(parent) ||
267
+ ts.isSetAccessorDeclaration(parent)) &&
268
+ parent.name === node)
269
+ return false;
270
+ if ((ts.isPropertySignature(parent) || ts.isMethodSignatureDeclaration(parent)) &&
271
+ parent.name === node)
272
+ return false;
273
+ if (ts.isLabeledStatement(parent) && parent.label === node)
274
+ return false;
275
+ if ((ts.isBreakStatement(parent) || ts.isContinueStatement(parent)) && parent.label === node)
276
+ return false;
277
+ if (ts.isBinaryExpression(parent) &&
278
+ parent.left === node &&
279
+ isAssignmentOperator(parent.operatorToken.kind))
280
+ return false;
281
+ if ((ts.isPrefixUnaryExpression(parent) || ts.isPostfixUnaryExpression(parent)) &&
282
+ parent.operand === node &&
283
+ (parent.operator === ts.SyntaxKind.PlusPlusToken ||
284
+ parent.operator === ts.SyntaxKind.MinusMinusToken))
285
+ return false;
286
+ if (ts.isDeleteExpression(parent) && parent.expression === node)
287
+ return false;
288
+ if ((ts.isForOfStatement(parent) || ts.isForInStatement(parent)) && parent.initializer === node)
289
+ return false;
290
+ return true;
291
+ }
292
+ /** Whether `node` sits in a type position: a name there is a type, not a
293
+ * value the global object could provide. */
294
+ function isTypePosition(node) {
295
+ let current = node;
296
+ let parent = current.parent;
297
+ while (parent !== undefined) {
298
+ if (ts.isTypeNode(parent))
299
+ return true;
300
+ // A declaration's annotation (`const x: T`), a return type, `as` and
301
+ // `satisfies` all hold their type in a `type` child.
302
+ if (parent.type === current)
303
+ return true;
304
+ if (ts.isExpression(parent) || ts.isStatement(parent))
305
+ return false;
306
+ current = parent;
307
+ parent = parent.parent;
308
+ }
309
+ return false;
310
+ }
311
+ /** The name a plain function value is bound to in the same file
312
+ * (`function f`, `var f = function`), for the constructor refinement. */
313
+ function boundFunctionName(fn) {
314
+ if (ts.isFunctionDeclaration(fn))
315
+ return fn.name?.text ?? null;
316
+ const parent = fn.parent;
317
+ if (parent === undefined)
318
+ return null;
319
+ if (ts.isVariableDeclaration(parent) && ts.isIdentifier(parent.name))
320
+ return parent.name.text;
321
+ if (ts.isPropertyAssignment(parent))
322
+ return propertyName(parent.name);
323
+ return null;
324
+ }
325
+ /** `X.prototype.name = function () {}`: a method assignment, whose every
326
+ * call through the same spelling has a receiver. */
327
+ function isPrototypeFunctionAssignment(left, right) {
328
+ let value = right;
329
+ while (ts.isParenthesizedExpression(value))
330
+ value = value.expression;
331
+ return (ts.isFunctionExpression(value) &&
332
+ ts.isPropertyAccessExpression(left.expression) &&
333
+ propertyName(left.expression) === "prototype");
334
+ }
215
335
  /** One module's pre-scan. */
216
336
  class ModuleScanner {
217
337
  sf;
@@ -227,6 +347,25 @@ class ModuleScanner {
227
347
  builtinBindings = new Map();
228
348
  /** Local names bound to a createRequire(...) result. */
229
349
  createdRequires = new Set();
350
+ /** Local names bound to a builtin module's CommonJS object: require(),
351
+ * a createRequire'd require's result, a default import, or an alias of
352
+ * one. Writes through these names are patches of the module object. */
353
+ cjsBuiltinObjects = new Set();
354
+ /** Members read through a CommonJS builtin object (H3.4). */
355
+ cjsReads = [];
356
+ /** Reads of names the file declares nowhere and no builtin provides: each
357
+ * resolves on the global object at run time. */
358
+ globalReads = [];
359
+ globalReadNames = new Set();
360
+ /** Names the file constructs with `new`: a constructor's `this` is never
361
+ * the global object, so its `this` uses need no island (decision S5). */
362
+ constructed = new Set();
363
+ /** Names the file calls as a bare identifier, `f(...)`: a name used both
364
+ * ways is a constructor and a plain function, so it still marks. */
365
+ bareCalled = new Set();
366
+ /** Function expressions the file assigns to `X.prototype.name`: every
367
+ * same-file call of them is a receiver call (decision S5). */
368
+ prototypeFunctions = new Set();
230
369
  strictness = new Map();
231
370
  moduleStrict;
232
371
  constructor(sf) {
@@ -248,7 +387,7 @@ class ModuleScanner {
248
387
  });
249
388
  return this.markers;
250
389
  }
251
- add(rule, reason, construct, node) {
390
+ add(rule, reason, construct, node, member) {
252
391
  if (this.markers.length >= MARKER_CAP)
253
392
  return;
254
393
  this.markers.push({
@@ -256,6 +395,7 @@ class ModuleScanner {
256
395
  reason,
257
396
  construct,
258
397
  loc: { file: this.sf.fileName, start: ts.tokenStartOfNode(node), end: node.end },
398
+ ...(member === undefined ? {} : { member }),
259
399
  });
260
400
  }
261
401
  bindName(name, init) {
@@ -265,21 +405,23 @@ class ModuleScanner {
265
405
  this.declared.add(name.text);
266
406
  if (init === undefined)
267
407
  return;
268
- let value = init;
269
- while (ts.isParenthesizedExpression(value))
270
- value = value.expression;
408
+ const value = stripWrappers(init);
271
409
  if (ts.isFunctionExpression(value) || ts.isArrowFunction(value))
272
410
  this.functions.add(name.text);
273
411
  else if (ts.isClassExpression(value))
274
412
  this.classes.add(name.text);
275
413
  const bound = this.builtinOf(value);
276
- if (bound !== null)
414
+ if (bound !== null) {
277
415
  this.builtinBindings.set(name.text, bound);
416
+ if (!bound.includes(".") && this.isCjsObjectValue(value))
417
+ this.cjsBuiltinObjects.add(name.text);
418
+ }
278
419
  if (ts.isCallExpression(value) && this.isCreateRequireCallee(value.expression))
279
420
  this.createdRequires.add(name.text);
280
421
  return;
281
422
  }
282
423
  if (ts.isObjectBindingPattern(name)) {
424
+ this.recordCjsPatternReads(name, init);
283
425
  const base = init === undefined ? null : this.builtinOf(init);
284
426
  for (const element of name.elements.nodes) {
285
427
  if (!ts.isBindingElement(element))
@@ -301,12 +443,22 @@ class ModuleScanner {
301
443
  }
302
444
  }
303
445
  }
446
+ /** A value that is a builtin module's CommonJS object: a require() or a
447
+ * createRequire'd require's result of a builtin, or an alias of one. */
448
+ isCjsObjectValue(value) {
449
+ if (ts.isIdentifier(value))
450
+ return this.cjsBuiltinObjects.has(value.text);
451
+ if (!ts.isCallExpression(value))
452
+ return false;
453
+ return (this.isRequireCallee(value.expression) ||
454
+ (ts.isIdentifier(value.expression) && this.createdRequires.has(value.expression.text)));
455
+ }
304
456
  /** `require("fs")`, `require("node:util").inherits` → "fs", "util.inherits". */
305
457
  builtinOf(node) {
306
- let value = node;
307
- while (ts.isParenthesizedExpression(value))
308
- value = value.expression;
309
- if (ts.isCallExpression(value) && this.isRequireCallee(value.expression)) {
458
+ const value = stripWrappers(node);
459
+ if (ts.isCallExpression(value) &&
460
+ (this.isRequireCallee(value.expression) ||
461
+ (ts.isIdentifier(value.expression) && this.createdRequires.has(value.expression.text)))) {
310
462
  const spec = literalText(value.arguments.nodes[0]);
311
463
  return spec === null ? null : builtinModuleName(spec);
312
464
  }
@@ -339,12 +491,43 @@ class ModuleScanner {
339
491
  this.declared.add(node.name.text);
340
492
  this.classes.add(node.name.text);
341
493
  }
494
+ else if ((ts.isInterfaceDeclaration(node) ||
495
+ ts.isTypeAliasDeclaration(node) ||
496
+ ts.isEnumDeclaration(node) ||
497
+ ts.isModuleDeclaration(node)) &&
498
+ ts.isIdentifier(node.name)) {
499
+ this.declared.add(node.name.text);
500
+ }
501
+ else if (ts.isTypeParameterDeclaration(node)) {
502
+ this.declared.add(node.name.text);
503
+ }
504
+ else if (ts.isEnumMember(node) && ts.isIdentifier(node.name)) {
505
+ this.declared.add(node.name.text);
506
+ }
342
507
  else if (ts.isVariableDeclaration(node)) {
343
508
  this.bindName(node.name, node.initializer);
344
509
  }
345
510
  else if (ts.isParameter(node)) {
346
511
  this.bindName(node.name, undefined);
347
512
  }
513
+ else if (ts.isFunctionExpression(node) && node.name !== undefined) {
514
+ this.declared.add(node.name.text);
515
+ }
516
+ else if (ts.isCatchClause(node) && node.variableDeclaration !== undefined) {
517
+ this.bindName(node.variableDeclaration.name, undefined);
518
+ }
519
+ else if (ts.isNewExpression(node) && ts.isIdentifier(node.expression)) {
520
+ this.constructed.add(node.expression.text);
521
+ }
522
+ else if (ts.isCallExpression(node) && ts.isIdentifier(node.expression)) {
523
+ this.bareCalled.add(node.expression.text);
524
+ }
525
+ else if (ts.isBinaryExpression(node) &&
526
+ node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
527
+ ts.isPropertyAccessExpression(node.left) &&
528
+ isPrototypeFunctionAssignment(node.left, node.right)) {
529
+ this.prototypeFunctions.add(node.right);
530
+ }
348
531
  else if (ts.isImportDeclaration(node)) {
349
532
  const spec = literalText(node.moduleSpecifier);
350
533
  const module = spec === null ? null : builtinModuleName(spec);
@@ -352,8 +535,12 @@ class ModuleScanner {
352
535
  if (clause !== undefined) {
353
536
  if (clause.name !== undefined) {
354
537
  this.declared.add(clause.name.text);
355
- if (module !== null)
538
+ if (module !== null) {
356
539
  this.builtinBindings.set(clause.name.text, module);
540
+ // A default import is the CommonJS object (unlike a namespace
541
+ // or named import, through which Node refuses writes).
542
+ this.cjsBuiltinObjects.add(clause.name.text);
543
+ }
357
544
  }
358
545
  const bindings = clause.namedBindings;
359
546
  if (bindings !== undefined && ts.isNamespaceImport(bindings)) {
@@ -411,13 +598,79 @@ class ModuleScanner {
411
598
  isGlobal(name) {
412
599
  return BUILTIN_GLOBALS.has(name) && !this.declared.has(name);
413
600
  }
601
+ /** A function declaration whose parent is a block that is not a function
602
+ * body: Annex B.3.2's block-level declaration, which in sloppy code also
603
+ * creates a `var`-like binding in the enclosing function (DESIGN.md note 1
604
+ * §3.1, construct 5). A declaration directly in a function body or at the
605
+ * top level of a script is ordinary. */
606
+ isAnnexBBlockFunction(fn) {
607
+ const parent = fn.parent;
608
+ if (parent === undefined || !ts.isBlock(parent))
609
+ return false;
610
+ const owner = parent.parent;
611
+ if (owner === undefined)
612
+ return false;
613
+ // A function-like body, a class static block or a class member
614
+ // initializer block is not a bare block statement.
615
+ return owner.body !== parent;
616
+ }
617
+ /** Whether the file shows the function is only ever called with a
618
+ * receiver, so native's missing sloppy `this` cannot be observed: it is
619
+ * constructed with `new`, or it is a `X.prototype.name` method (decision
620
+ * S5 — the marker islands what native gets wrong, and native passes the
621
+ * receiver for both shapes). */
622
+ receiverSafe(fn) {
623
+ if (this.prototypeFunctions.has(fn))
624
+ return true;
625
+ const name = boundFunctionName(fn);
626
+ return name !== null && this.constructed.has(name) && !this.bareCalled.has(name);
627
+ }
628
+ /** `this` in a plain function call: a sloppy function that is not a
629
+ * method, constructor, accessor or class member, and is not an arrow
630
+ * function (whose `this` is its enclosing function's). Conservative
631
+ * (decision S2): a file-level scan cannot see cross-file call sites, so
632
+ * any `this` in such a function marks the module, except the shapes the
633
+ * file itself proves are receiver calls (decision S5). Top-level `this`
634
+ * is not this marker: it is the module's exports object, and the test262
635
+ * profile's script-environment exclusion covers the script form. */
636
+ visitThis(node) {
637
+ if (this.isStrict(node))
638
+ return;
639
+ for (let cur = node.parent; cur !== undefined; cur = cur.parent) {
640
+ // An arrow function has no `this` of its own: keep looking outward.
641
+ if (ts.isArrowFunction(cur))
642
+ continue;
643
+ if (ts.isFunctionDeclaration(cur) || ts.isFunctionExpression(cur)) {
644
+ if (this.receiverSafe(cur))
645
+ return;
646
+ this.add("R2.4", "sloppy-this", "'this' in a plain call in sloppy mode", node);
647
+ return;
648
+ }
649
+ // A method, constructor or accessor has a receiver; a class member
650
+ // initializer and a class static block have their own `this`; a
651
+ // property assignment's function is commonly a method too.
652
+ if (isFunctionBoundary(cur) ||
653
+ ts.isClassDeclaration(cur) ||
654
+ ts.isClassExpression(cur) ||
655
+ ts.isClassStaticBlockDeclaration(cur) ||
656
+ ts.isPropertyDeclaration(cur) ||
657
+ ts.isPropertyAssignment(cur))
658
+ return;
659
+ // Top-level `this` is the module's exports object, not a call site.
660
+ if (ts.isSourceFile(cur))
661
+ return;
662
+ }
663
+ }
414
664
  visit(node) {
415
665
  if (ts.isCallExpression(node))
416
666
  this.visitCall(node);
417
667
  else if (ts.isNewExpression(node))
418
668
  this.visitNew(node);
419
- else if (ts.isBinaryExpression(node) && isAssignmentOperator(node.operatorToken.kind))
669
+ else if (ts.isBinaryExpression(node) && isAssignmentOperator(node.operatorToken.kind)) {
420
670
  this.visitWrite(node.left, node, "write");
671
+ if (node.operatorToken.kind === ts.SyntaxKind.EqualsToken)
672
+ this.recordCjsPatternReads(node.left, node.right);
673
+ }
421
674
  else if (ts.isDeleteExpression(node))
422
675
  this.visitDelete(node);
423
676
  else if (ts.isPrefixUnaryExpression(node) || ts.isPostfixUnaryExpression(node)) {
@@ -426,7 +679,10 @@ class ModuleScanner {
426
679
  this.visitWrite(node.operand, node, "write");
427
680
  }
428
681
  else if (ts.isWithStatement(node)) {
429
- this.add("R2.4", "with", "a 'with' statement", node);
682
+ // A `with` in strict code is an early error (Node refuses the file
683
+ // too), so only sloppy code carries the sloppy-semantics marker.
684
+ if (!this.isStrict(node))
685
+ this.add("R2.4", "with", "a 'with' statement", node);
430
686
  }
431
687
  else if (ts.isImportDeclaration(node)) {
432
688
  const spec = literalText(node.moduleSpecifier);
@@ -445,6 +701,13 @@ class ModuleScanner {
445
701
  const text = chainText(node);
446
702
  if ((text === "arguments.callee" || text === "arguments.caller") && !this.isStrict(node))
447
703
  this.add("R2.4", "sloppy-arguments", `'${text}'`, node);
704
+ this.recordCjsRead(node);
705
+ }
706
+ else if (ts.isElementAccessExpression(node)) {
707
+ this.recordCjsRead(node);
708
+ }
709
+ else if (node.kind === ts.SyntaxKind.ThisKeyword) {
710
+ this.visitThis(node);
448
711
  }
449
712
  else if (ts.isObjectLiteralExpression(node)) {
450
713
  for (const prop of node.properties.nodes) {
@@ -460,6 +723,100 @@ class ModuleScanner {
460
723
  this.visitFunction(node);
461
724
  }
462
725
  }
726
+ /** Records a read of a member of a builtin module's CommonJS object, so
727
+ * a patch installed by an island module can be checked against it
728
+ * (H3.4). The left of an assignment (and a delete or ++/-- target) is a
729
+ * write, not a read. A computed key reads a member the scan cannot name,
730
+ * so it is recorded as the whole module ("fs.*"). */
731
+ recordCjsRead(node) {
732
+ const root = chainRoot(node);
733
+ if (root === null || !this.cjsBuiltinObjects.has(root.text))
734
+ return;
735
+ const module = this.builtinBindings.get(root.text);
736
+ if (module === undefined)
737
+ return;
738
+ const text = chainText(node);
739
+ const parent = node.parent;
740
+ if (parent !== undefined) {
741
+ if (ts.isBinaryExpression(parent) &&
742
+ isAssignmentOperator(parent.operatorToken.kind) &&
743
+ parent.left === node)
744
+ return;
745
+ if (ts.isDeleteExpression(parent) ||
746
+ ts.isPrefixUnaryExpression(parent) ||
747
+ ts.isPostfixUnaryExpression(parent))
748
+ return;
749
+ }
750
+ this.pushCjsRead(text === null ? `${module}.*` : module + text.slice(root.text.length), node);
751
+ }
752
+ pushCjsRead(member, node) {
753
+ this.cjsReads.push({
754
+ member,
755
+ loc: { file: this.sf.fileName, start: ts.tokenStartOfNode(node), end: node.end },
756
+ });
757
+ }
758
+ /** The reads of a destructuring whose source is a builtin module's
759
+ * CommonJS object (`const { readFileSync } = require("fs")`,
760
+ * `({ readFileSync } = fs)`): each property it takes is read when the
761
+ * destructuring runs, so it sees a patch installed before. A rest element
762
+ * or a computed key reads members the scan cannot name ("fs.*"). */
763
+ recordCjsPatternReads(pattern, source) {
764
+ if (source === undefined)
765
+ return;
766
+ const value = stripWrappers(source);
767
+ if (!this.isCjsObjectValue(value))
768
+ return;
769
+ const module = this.builtinOf(value);
770
+ if (module === null || module.includes("."))
771
+ return;
772
+ this.recordPatternReads(pattern, module);
773
+ }
774
+ recordPatternReads(pattern, base) {
775
+ const target = stripWrappers(pattern);
776
+ const elements = [];
777
+ if (ts.isObjectBindingPattern(target)) {
778
+ for (const element of target.elements.nodes) {
779
+ if (!ts.isBindingElement(element))
780
+ continue;
781
+ elements.push({
782
+ key: element.propertyName ?? element.name,
783
+ value: element.name,
784
+ rest: element.dotDotDotToken !== undefined,
785
+ node: element,
786
+ });
787
+ }
788
+ }
789
+ else if (ts.isObjectLiteralExpression(target)) {
790
+ for (const prop of target.properties.nodes) {
791
+ if (ts.isPropertyAssignment(prop))
792
+ elements.push({ key: prop.name, value: prop.initializer, rest: false, node: prop });
793
+ else if (ts.isShorthandPropertyAssignment(prop))
794
+ elements.push({ key: prop.name, value: undefined, rest: false, node: prop });
795
+ else if (ts.isSpreadAssignment(prop))
796
+ elements.push({ key: undefined, value: undefined, rest: true, node: prop });
797
+ }
798
+ }
799
+ else
800
+ return;
801
+ for (const element of elements) {
802
+ const key = element.rest || element.key === undefined ? null : staticKey(element.key);
803
+ if (key === null) {
804
+ this.pushCjsRead(`${base.split(".")[0]}.*`, element.node);
805
+ continue;
806
+ }
807
+ const member = `${base}.${key}`;
808
+ this.pushCjsRead(member, element.node);
809
+ // A nested pattern reads the member's own properties too.
810
+ if (element.value !== undefined) {
811
+ let inner = stripWrappers(element.value);
812
+ // `{ readFileSync = fallback }` (a default) and `{ a: { b } = {} }`.
813
+ if (ts.isBinaryExpression(inner) && inner.operatorToken.kind === ts.SyntaxKind.EqualsToken)
814
+ inner = stripWrappers(inner.left);
815
+ if (ts.isObjectBindingPattern(inner) || ts.isObjectLiteralExpression(inner))
816
+ this.recordPatternReads(inner, member);
817
+ }
818
+ }
819
+ }
463
820
  visitSpecifier(spec, node) {
464
821
  const builtin = builtinModuleName(spec);
465
822
  if (builtin === "vm")
@@ -500,15 +857,24 @@ class ModuleScanner {
500
857
  let target = callee;
501
858
  while (ts.isParenthesizedExpression(target))
502
859
  target = target.expression;
860
+ // A bare `eval(...)` is the intrinsic's DIRECT call: it reads and
861
+ // creates bindings in the caller's scope, and in sloppy mode creates
862
+ // globals (DESIGN.md note 1 §3.1). `globalThis.eval(...)`, the
863
+ // comma-operator idiom `(0, eval)(...)` and the other spellings are
864
+ // indirect: they observe no caller scope, so only R1.1.
865
+ const direct = ts.isIdentifier(target) && target.text === "eval" && !this.declared.has("eval");
503
866
  if (ts.isBinaryExpression(target) && target.operatorToken.kind === ts.SyntaxKind.CommaToken)
504
867
  target = target.right;
505
868
  const text = chainText(target);
506
869
  if (text === null)
507
870
  return;
508
- if ((text === "eval" && !this.declared.has("eval")) ||
509
- text === "globalThis.eval" ||
510
- text === "global.eval" ||
511
- text === "window.eval") {
871
+ if (text === "eval" && !this.declared.has("eval")) {
872
+ this.add("R1.1", "code-from-string", "eval()", call);
873
+ if (direct && !this.isStrict(call))
874
+ this.add("R2.4", "direct-eval", "a direct call of eval() in sloppy mode", call);
875
+ return;
876
+ }
877
+ if (text === "globalThis.eval" || text === "global.eval" || text === "window.eval") {
512
878
  this.add("R1.1", "code-from-string", "eval()", call);
513
879
  return;
514
880
  }
@@ -560,10 +926,45 @@ class ModuleScanner {
560
926
  if (((text === "Object.defineProperty" || text === "Object.defineProperties") &&
561
927
  this.isGlobal("Object")) ||
562
928
  (text === "Reflect.defineProperty" && this.isGlobal("Reflect"))) {
929
+ // A definition on a builtin module's CommonJS object is a patch the
930
+ // code loading that object must see (R2.5, H3.1.4).
931
+ const target = first === undefined ? undefined : stripWrappers(first);
932
+ const builtin = target !== undefined && ts.isIdentifier(target) && this.cjsBuiltinObjects.has(target.text)
933
+ ? (this.builtinBindings.get(target.text) ?? null)
934
+ : null;
935
+ if (builtin !== null) {
936
+ const key = literalText(args[1] === undefined ? undefined : stripWrappers(args[1]));
937
+ this.add("R2.5", "builtin-patch", `'${text}()' on the builtin module '${builtin}'`, call, key === null ? `${builtin}.*` : `${builtin}.${key}`);
938
+ return;
939
+ }
563
940
  if (first !== undefined && !this.isModuleObject(first) && !this.inInteropHelper(call))
564
941
  this.add("R2.3", "define-property", `'${text}()'`, call);
565
942
  return;
566
943
  }
944
+ // Object.assign(fs, …) on a builtin module's CommonJS object: every
945
+ // literal key is a patch (R2.5, H3.1.4).
946
+ if (text === "Object.assign" && this.isGlobal("Object") && first !== undefined) {
947
+ const target = stripWrappers(first);
948
+ if (ts.isIdentifier(target) && this.cjsBuiltinObjects.has(target.text)) {
949
+ const builtin = this.builtinBindings.get(target.text) ?? null;
950
+ if (builtin !== null) {
951
+ const source = args.length === 2 ? stripWrappers(args[1]) : undefined;
952
+ const keys = source !== undefined && ts.isObjectLiteralExpression(source)
953
+ ? source.properties.nodes
954
+ .map((property) => ts.isPropertyAssignment(property) || ts.isShorthandPropertyAssignment(property)
955
+ ? literalKeyName(property.name)
956
+ : null)
957
+ .filter((key) => key !== null)
958
+ : [];
959
+ if (keys.length === 0)
960
+ this.add("R2.5", "builtin-patch", `'Object.assign()' on the builtin module '${builtin}'`, call, `${builtin}.*`);
961
+ else
962
+ for (const key of keys)
963
+ this.add("R2.5", "builtin-patch", `'Object.assign()' on the builtin module '${builtin}'`, call, `${builtin}.${key}`);
964
+ return;
965
+ }
966
+ }
967
+ }
567
968
  if (text.endsWith(".__defineGetter__") || text.endsWith(".__defineSetter__")) {
568
969
  this.add("R2.3", "define-property", `'${text.slice(text.lastIndexOf(".") + 1)}()'`, call);
569
970
  return;
@@ -706,7 +1107,10 @@ class ModuleScanner {
706
1107
  if (binding !== undefined) {
707
1108
  const member = binding + spelled.slice(root.text.length);
708
1109
  if (!this.allowedWrite(member)) {
709
- this.add("R2.5", "builtin-write", `a ${what} of the builtin module member '${member}'`, node);
1110
+ // A write through a builtin module's CommonJS object patches that
1111
+ // object; only code sharing Node's builtin can see it (H3.1).
1112
+ const patch = this.cjsBuiltinObjects.has(root.text);
1113
+ this.add("R2.5", patch ? "builtin-patch" : "builtin-write", `a ${what} of the builtin module member '${member}'`, node, patch ? member : undefined);
710
1114
  }
711
1115
  return;
712
1116
  }
@@ -738,6 +1142,7 @@ class ModuleScanner {
738
1142
  }
739
1143
  visitIdentifier(node) {
740
1144
  const name = node.text;
1145
+ this.collectGlobalRead(node);
741
1146
  if (name !== "WeakRef" && name !== "FinalizationRegistry")
742
1147
  return;
743
1148
  if (this.declared.has(name))
@@ -754,9 +1159,29 @@ class ModuleScanner {
754
1159
  return;
755
1160
  this.add("R1.6", "weak-ref", `'${name}'`, node);
756
1161
  }
1162
+ /** Records a read of a name the file declares nowhere and no builtin
1163
+ * provides: Node resolves it on the global object at run time, where an
1164
+ * island module's sloppy implicit-global write may have created it. */
1165
+ collectGlobalRead(node) {
1166
+ const name = node.text;
1167
+ if (this.declared.has(name) || this.isGlobal(name) || MODULE_SCOPE_NAMES.has(name))
1168
+ return;
1169
+ if (this.globalReadNames.has(name) || this.globalReads.length >= MARKER_CAP)
1170
+ return;
1171
+ const parent = node.parent;
1172
+ if (parent === undefined || isTypePosition(node) || !isReadPosition(node, parent))
1173
+ return;
1174
+ this.globalReadNames.add(name);
1175
+ this.globalReads.push({
1176
+ name,
1177
+ loc: { file: this.sf.fileName, start: ts.tokenStartOfNode(node), end: node.end },
1178
+ });
1179
+ }
757
1180
  /** Observable `arguments` aliasing in a sloppy function: writes to
758
1181
  * arguments[i], or to a parameter while `arguments` is read. */
759
1182
  visitFunction(fn) {
1183
+ if (ts.isFunctionDeclaration(fn) && this.isAnnexBBlockFunction(fn) && !this.isStrict(fn))
1184
+ this.add("R2.4", "annexb-block-function", "a function declaration in a block in sloppy mode", fn);
760
1185
  const body = fn.body;
761
1186
  if (body === undefined || !ts.isBlock(body))
762
1187
  return;
@@ -797,9 +1222,19 @@ class ModuleScanner {
797
1222
  this.add("R2.4", "sloppy-arguments", "a parameter write while 'arguments' is read in sloppy mode", seen.paramWrite);
798
1223
  }
799
1224
  }
800
- /** The R1/R2 markers of one JavaScript module, in source order. */
1225
+ /** The R1/R2 markers and CommonJS-object reads of one module, in source
1226
+ * order. */
1227
+ export function scanModuleFacts(sf) {
1228
+ const scanner = new ModuleScanner(sf);
1229
+ const markers = scanner.scan();
1230
+ return {
1231
+ markers: markers.sort((a, b) => a.loc.start - b.loc.start),
1232
+ cjsReads: scanner.cjsReads.sort((a, b) => a.loc.start - b.loc.start),
1233
+ globalReads: scanner.globalReads.sort((a, b) => a.loc.start - b.loc.start),
1234
+ };
1235
+ }
1236
+ /** The R1/R2 markers of one module, in source order. */
801
1237
  export function scanModule(sf) {
802
- const markers = new ModuleScanner(sf).scan();
803
- return markers.sort((a, b) => a.loc.start - b.loc.start);
1238
+ return scanModuleFacts(sf).markers;
804
1239
  }
805
1240
  //# sourceMappingURL=detect.js.map