@scriptc/compiler 0.4.0 → 0.4.1

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 (433) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +35 -5
  2. package/dist/backend/executable-features.js +7 -0
  3. package/dist/backend/executable-features.js.map +1 -1
  4. package/dist/backend/library-pack.js +3 -0
  5. package/dist/backend/library-pack.js.map +1 -1
  6. package/dist/backend/link-plan-core.d.ts +2 -0
  7. package/dist/backend/link-plan-core.js +2 -0
  8. package/dist/backend/link-plan-core.js.map +1 -1
  9. package/dist/backend/link-plan.d.ts +1 -0
  10. package/dist/backend/link-plan.js +1 -0
  11. package/dist/backend/link-plan.js.map +1 -1
  12. package/dist/backend/llvm/array-search.js +3 -1
  13. package/dist/backend/llvm/array-search.js.map +1 -1
  14. package/dist/backend/llvm/classes.d.ts +27 -1
  15. package/dist/backend/llvm/classes.js +115 -22
  16. package/dist/backend/llvm/classes.js.map +1 -1
  17. package/dist/backend/llvm/classes.test.js +21 -9
  18. package/dist/backend/llvm/classes.test.js.map +1 -1
  19. package/dist/backend/llvm/common.d.ts +21 -3
  20. package/dist/backend/llvm/common.js +50 -3
  21. package/dist/backend/llvm/common.js.map +1 -1
  22. package/dist/backend/llvm/dense-array-access.d.ts +3 -1
  23. package/dist/backend/llvm/dense-array-access.js +61 -38
  24. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  25. package/dist/backend/llvm/dense-array-access.test.js +4 -0
  26. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  27. package/dist/backend/llvm/dense-array-loops.js +3 -3
  28. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  29. package/dist/backend/llvm/dyn.d.ts +9 -0
  30. package/dist/backend/llvm/dyn.js +62 -6
  31. package/dist/backend/llvm/dyn.js.map +1 -1
  32. package/dist/backend/llvm/emit-function.js +5 -2
  33. package/dist/backend/llvm/emit-function.js.map +1 -1
  34. package/dist/backend/llvm/emit-module.js +54 -32
  35. package/dist/backend/llvm/emit-module.js.map +1 -1
  36. package/dist/backend/llvm/emit-statements.d.ts +3 -2
  37. package/dist/backend/llvm/emit-statements.js +90 -13
  38. package/dist/backend/llvm/emit-statements.js.map +1 -1
  39. package/dist/backend/llvm/emitter.d.ts +20 -9
  40. package/dist/backend/llvm/emitter.js +42 -31
  41. package/dist/backend/llvm/emitter.js.map +1 -1
  42. package/dist/backend/llvm/expr-calls.js +17 -4
  43. package/dist/backend/llvm/expr-calls.js.map +1 -1
  44. package/dist/backend/llvm/expr-containers.js +6 -9
  45. package/dist/backend/llvm/expr-containers.js.map +1 -1
  46. package/dist/backend/llvm/expr-dynamic.js +46 -4
  47. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  48. package/dist/backend/llvm/expr-primitives.js +3 -3
  49. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  50. package/dist/backend/llvm/expr-primitives.test.js +55 -0
  51. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  52. package/dist/backend/llvm/expr-stream-bridges.js +11 -15
  53. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  54. package/dist/backend/llvm/integer-clones.js +3 -3
  55. package/dist/backend/llvm/integer-clones.js.map +1 -1
  56. package/dist/backend/llvm/js-ic.d.ts +18 -0
  57. package/dist/backend/llvm/js-ic.js +712 -0
  58. package/dist/backend/llvm/js-ic.js.map +1 -0
  59. package/dist/backend/llvm/jsval.js +139 -11
  60. package/dist/backend/llvm/jsval.js.map +1 -1
  61. package/dist/backend/llvm/lib-process.js +4 -3
  62. package/dist/backend/llvm/lib-process.js.map +1 -1
  63. package/dist/backend/llvm/lib-shared.js +22 -0
  64. package/dist/backend/llvm/lib-shared.js.map +1 -1
  65. package/dist/backend/llvm/local-array-reads.js +40 -31
  66. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  67. package/dist/backend/llvm/map-number-lookup.d.ts +20 -4
  68. package/dist/backend/llvm/map-number-lookup.js +43 -7
  69. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  70. package/dist/backend/llvm/narrow-guards.js +64 -0
  71. package/dist/backend/llvm/narrow-guards.js.map +1 -1
  72. package/dist/backend/llvm/publish.d.ts +3 -0
  73. package/dist/backend/llvm/publish.js +36 -17
  74. package/dist/backend/llvm/publish.js.map +1 -1
  75. package/dist/backend/llvm/regions.js +2 -2
  76. package/dist/backend/llvm/regions.js.map +1 -1
  77. package/dist/backend/llvm/regions.test.js +7 -1
  78. package/dist/backend/llvm/regions.test.js.map +1 -1
  79. package/dist/backend/llvm/shapes.d.ts +8 -2
  80. package/dist/backend/llvm/shapes.js +9 -7
  81. package/dist/backend/llvm/shapes.js.map +1 -1
  82. package/dist/backend/llvm/speculative-integers.d.ts +20 -1
  83. package/dist/backend/llvm/speculative-integers.js +94 -6
  84. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  85. package/dist/backend/llvm/speculative-integers.test.js +55 -1
  86. package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
  87. package/dist/backend/llvm/string-reads.d.ts +1 -1
  88. package/dist/backend/llvm/string-reads.js +4 -4
  89. package/dist/backend/llvm/string-reads.js.map +1 -1
  90. package/dist/backend/llvm/thread-slots.test.js +5 -4
  91. package/dist/backend/llvm/thread-slots.test.js.map +1 -1
  92. package/dist/backend/mangle.d.ts +5 -0
  93. package/dist/backend/mangle.js +7 -0
  94. package/dist/backend/mangle.js.map +1 -1
  95. package/dist/backend/native/contracts.d.ts +20 -0
  96. package/dist/backend/native/executable.js +20 -3
  97. package/dist/backend/native/executable.js.map +1 -1
  98. package/dist/backend/native/library.js +2 -1
  99. package/dist/backend/native/library.js.map +1 -1
  100. package/dist/backend/native-codegen.d.ts +6 -0
  101. package/dist/backend/native-codegen.js +19 -0
  102. package/dist/backend/native-codegen.js.map +1 -1
  103. package/dist/backend/native-codegen.test.js +27 -0
  104. package/dist/backend/native-codegen.test.js.map +1 -1
  105. package/dist/backend/native-link-info-core.d.ts +18 -0
  106. package/dist/backend/native-link-info-core.js.map +1 -1
  107. package/dist/backend/native-profile.d.ts +32 -0
  108. package/dist/backend/native-profile.js +39 -0
  109. package/dist/backend/native-profile.js.map +1 -0
  110. package/dist/backend/native-profile.test.d.ts +1 -0
  111. package/dist/backend/native-profile.test.js +58 -0
  112. package/dist/backend/native-profile.test.js.map +1 -0
  113. package/dist/backend/native-tools.d.ts +14 -0
  114. package/dist/backend/native-tools.js +13 -0
  115. package/dist/backend/native-tools.js.map +1 -1
  116. package/dist/backend/runtime-abi.d.ts +2 -2
  117. package/dist/backend/runtime-abi.js +2 -2
  118. package/dist/backend/runtime-pack-core.d.ts +4 -0
  119. package/dist/backend/runtime-pack-core.js +4 -0
  120. package/dist/backend/runtime-pack-core.js.map +1 -1
  121. package/dist/backend/runtime-pack-targets.test.js +4 -1
  122. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  123. package/dist/backend/runtime-pack.test.js +4 -1
  124. package/dist/backend/runtime-pack.test.js.map +1 -1
  125. package/dist/backend/target-diagnostics.js +7 -0
  126. package/dist/backend/target-diagnostics.js.map +1 -1
  127. package/dist/backend/warm-cache.js +3 -0
  128. package/dist/backend/warm-cache.js.map +1 -1
  129. package/dist/cli/command.js +63 -1
  130. package/dist/cli/command.js.map +1 -1
  131. package/dist/cli/host.d.ts +3 -0
  132. package/dist/cli/output-options.d.ts +2 -0
  133. package/dist/cli/output-options.js +9 -0
  134. package/dist/cli/output-options.js.map +1 -1
  135. package/dist/cli/usage.d.ts +11 -1
  136. package/dist/cli/usage.js +23 -0
  137. package/dist/cli/usage.js.map +1 -1
  138. package/dist/compile-types.d.ts +9 -0
  139. package/dist/contracts/check.js +1 -2
  140. package/dist/contracts/check.js.map +1 -1
  141. package/dist/executable/executable-cache.d.ts +10 -0
  142. package/dist/executable/executable-cache.js +6 -0
  143. package/dist/executable/executable-cache.js.map +1 -1
  144. package/dist/executable/executable-cache.test.js +5 -0
  145. package/dist/executable/executable-cache.test.js.map +1 -1
  146. package/dist/frontend/arguments-usage.d.ts +8 -0
  147. package/dist/frontend/arguments-usage.js +98 -0
  148. package/dist/frontend/arguments-usage.js.map +1 -1
  149. package/dist/frontend/arguments-usage.test.d.ts +1 -0
  150. package/dist/frontend/arguments-usage.test.js +32 -0
  151. package/dist/frontend/arguments-usage.test.js.map +1 -0
  152. package/dist/frontend/builtin-package-aliases.d.ts +24 -0
  153. package/dist/frontend/builtin-package-aliases.js +133 -0
  154. package/dist/frontend/builtin-package-aliases.js.map +1 -0
  155. package/dist/frontend/builtin-package-aliases.test.d.ts +1 -0
  156. package/dist/frontend/builtin-package-aliases.test.js +48 -0
  157. package/dist/frontend/builtin-package-aliases.test.js.map +1 -0
  158. package/dist/frontend/dts-paths.d.ts +4 -0
  159. package/dist/frontend/dts-paths.js +9 -1
  160. package/dist/frontend/dts-paths.js.map +1 -1
  161. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +8 -0
  162. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +50 -1
  163. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -1
  164. package/dist/frontend/lowering/builtins/callable-aliases.js +3 -2
  165. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  166. package/dist/frontend/lowering/builtins/crypto.d.ts +3 -0
  167. package/dist/frontend/lowering/builtins/crypto.js +4 -1
  168. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  169. package/dist/frontend/lowering/builtins/ecdh.d.ts +10 -0
  170. package/dist/frontend/lowering/builtins/ecdh.js +208 -0
  171. package/dist/frontend/lowering/builtins/ecdh.js.map +1 -0
  172. package/dist/frontend/lowering/builtins/json.js +52 -0
  173. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  174. package/dist/frontend/lowering/builtins/process.d.ts +9 -0
  175. package/dist/frontend/lowering/builtins/process.js +44 -0
  176. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  177. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +3 -0
  178. package/dist/frontend/lowering/builtins/promisify-callback.js +21 -3
  179. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
  180. package/dist/frontend/lowering/builtins/reflection.js +26 -0
  181. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  182. package/dist/frontend/lowering/builtins/timers.js +5 -1
  183. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  184. package/dist/frontend/lowering/builtins/typed-array-members.d.ts +7 -0
  185. package/dist/frontend/lowering/builtins/typed-array-members.js +160 -0
  186. package/dist/frontend/lowering/builtins/typed-array-members.js.map +1 -0
  187. package/dist/frontend/lowering/call-signatures.d.ts +4 -0
  188. package/dist/frontend/lowering/call-signatures.js +126 -9
  189. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  190. package/dist/frontend/lowering/cjs-exports-object.js +34 -1
  191. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
  192. package/dist/frontend/lowering/class-dynamic-dispatch.js +9 -1
  193. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  194. package/dist/frontend/lowering/class-protocols.d.ts +10 -0
  195. package/dist/frontend/lowering/class-protocols.js +53 -3
  196. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  197. package/dist/frontend/lowering/class-prototypes.js +6 -1
  198. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  199. package/dist/frontend/lowering/class-to-primitive.d.ts +2 -2
  200. package/dist/frontend/lowering/class-to-primitive.js +6 -3
  201. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  202. package/dist/frontend/lowering/coercions/fresh-spread.d.ts +13 -0
  203. package/dist/frontend/lowering/coercions/fresh-spread.js +95 -0
  204. package/dist/frontend/lowering/coercions/fresh-spread.js.map +1 -0
  205. package/dist/frontend/lowering/coercions/function-adapters.js +99 -70
  206. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  207. package/dist/frontend/lowering/containers/array-callbacks.d.ts +8 -0
  208. package/dist/frontend/lowering/containers/array-callbacks.js +22 -19
  209. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  210. package/dist/frontend/lowering/containers/array-construction.js +7 -0
  211. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  212. package/dist/frontend/lowering/containers/array-methods.js +5 -0
  213. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  214. package/dist/frontend/lowering/containers/bytes.d.ts +9 -0
  215. package/dist/frontend/lowering/containers/bytes.js +493 -17
  216. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  217. package/dist/frontend/lowering/containers/collection-methods.js +72 -3
  218. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  219. package/dist/frontend/lowering/containers/string-and-regexp.js +49 -13
  220. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  221. package/dist/frontend/lowering/cycle-initialization.d.ts +26 -10
  222. package/dist/frontend/lowering/cycle-initialization.js +152 -35
  223. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  224. package/dist/frontend/lowering/expressions/array-literals.js +33 -13
  225. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  226. package/dist/frontend/lowering/expressions/binary.js +79 -5
  227. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  228. package/dist/frontend/lowering/expressions/element-access.js +13 -6
  229. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  230. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +14 -2
  231. package/dist/frontend/lowering/expressions/keyed-field-targets.js +91 -10
  232. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
  233. package/dist/frontend/lowering/expressions/narrowing.js +17 -2
  234. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  235. package/dist/frontend/lowering/expressions/object-literals.js +48 -1
  236. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  237. package/dist/frontend/lowering/expressions/optional-chains.d.ts +1 -1
  238. package/dist/frontend/lowering/expressions/optional-chains.js +12 -3
  239. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  240. package/dist/frontend/lowering/expressions/property-access.d.ts +5 -0
  241. package/dist/frontend/lowering/expressions/property-access.js +252 -9
  242. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  243. package/dist/frontend/lowering/expressions/relational.js +49 -4
  244. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  245. package/dist/frontend/lowering/expressions/typeof.js +13 -0
  246. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  247. package/dist/frontend/lowering/expressions/updates.js +1 -1
  248. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  249. package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
  250. package/dist/frontend/lowering/generator-delegation.js +191 -1
  251. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  252. package/dist/frontend/lowering/generic-functions.d.ts +4 -0
  253. package/dist/frontend/lowering/generic-functions.js +213 -56
  254. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  255. package/dist/frontend/lowering/handle-properties.d.ts +24 -0
  256. package/dist/frontend/lowering/handle-properties.js +281 -0
  257. package/dist/frontend/lowering/handle-properties.js.map +1 -0
  258. package/dist/frontend/lowering/iterable-spelling.d.ts +7 -0
  259. package/dist/frontend/lowering/iterable-spelling.js +38 -0
  260. package/dist/frontend/lowering/iterable-spelling.js.map +1 -0
  261. package/dist/frontend/lowering/lower-array-sort.d.ts +33 -15
  262. package/dist/frontend/lowering/lower-array-sort.js +117 -21
  263. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  264. package/dist/frontend/lowering/lower-array-sort.test.js +93 -14
  265. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  266. package/dist/frontend/lowering/lower-builtin-values.js +1 -0
  267. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  268. package/dist/frontend/lowering/lower-calls.js +166 -7
  269. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  270. package/dist/frontend/lowering/lower-classes.d.ts +4 -0
  271. package/dist/frontend/lowering/lower-classes.js +59 -7
  272. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  273. package/dist/frontend/lowering/lower-dgram.js +62 -13
  274. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  275. package/dist/frontend/lowering/lower-exprs.js +32 -1
  276. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  277. package/dist/frontend/lowering/lower-functions.js +4 -0
  278. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  279. package/dist/frontend/lowering/lower-generators.js +10 -4
  280. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  281. package/dist/frontend/lowering/lower-inspect.js +569 -11
  282. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  283. package/dist/frontend/lowering/lower-modules.d.ts +11 -3
  284. package/dist/frontend/lowering/lower-modules.js +212 -67
  285. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  286. package/dist/frontend/lowering/lower-namespaces.js +20 -0
  287. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  288. package/dist/frontend/lowering/lower-server.js +26 -1
  289. package/dist/frontend/lowering/lower-server.js.map +1 -1
  290. package/dist/frontend/lowering/lower-stdlib.js +28 -9
  291. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  292. package/dist/frontend/lowering/lower-stmts.d.ts +7 -10
  293. package/dist/frontend/lowering/lower-stmts.js +418 -51
  294. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  295. package/dist/frontend/lowering/lower-timers.js +17 -1
  296. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  297. package/dist/frontend/lowering/lowerer.d.ts +29 -5
  298. package/dist/frontend/lowering/lowerer.js +172 -25
  299. package/dist/frontend/lowering/lowerer.js.map +1 -1
  300. package/dist/frontend/lowering/rebindable-functions.d.ts +8 -0
  301. package/dist/frontend/lowering/rebindable-functions.js +54 -0
  302. package/dist/frontend/lowering/rebindable-functions.js.map +1 -0
  303. package/dist/frontend/lowering/static-typeof.d.ts +26 -0
  304. package/dist/frontend/lowering/static-typeof.js +133 -0
  305. package/dist/frontend/lowering/static-typeof.js.map +1 -0
  306. package/dist/frontend/lowering/string-index-bounds.js +3 -2
  307. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  308. package/dist/frontend/lowering/surfaces.js +30 -4
  309. package/dist/frontend/lowering/surfaces.js.map +1 -1
  310. package/dist/frontend/lowering/thenables.d.ts +16 -0
  311. package/dist/frontend/lowering/thenables.js +124 -0
  312. package/dist/frontend/lowering/thenables.js.map +1 -0
  313. package/dist/frontend/npm-static-builtin-aliases.d.ts +8 -0
  314. package/dist/frontend/npm-static-builtin-aliases.js +65 -0
  315. package/dist/frontend/npm-static-builtin-aliases.js.map +1 -0
  316. package/dist/frontend/npm-static-bundled-chunks.d.ts +8 -1
  317. package/dist/frontend/npm-static-bundled-chunks.js +173 -2
  318. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
  319. package/dist/frontend/npm-static-bundled-chunks.test.js +112 -0
  320. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
  321. package/dist/frontend/npm-static-bundled-esm.js +224 -4
  322. package/dist/frontend/npm-static-bundled-esm.js.map +1 -1
  323. package/dist/frontend/npm-static-bundled-esm.test.js +129 -0
  324. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -1
  325. package/dist/frontend/npm-static-enum-iife.d.ts +6 -0
  326. package/dist/frontend/npm-static-enum-iife.js +280 -0
  327. package/dist/frontend/npm-static-enum-iife.js.map +1 -0
  328. package/dist/frontend/npm-static-enum-iife.test.d.ts +1 -0
  329. package/dist/frontend/npm-static-enum-iife.test.js +116 -0
  330. package/dist/frontend/npm-static-enum-iife.test.js.map +1 -0
  331. package/dist/frontend/npm-static.d.ts +8 -0
  332. package/dist/frontend/npm-static.js +46 -1
  333. package/dist/frontend/npm-static.js.map +1 -1
  334. package/dist/frontend/npm.js +13 -0
  335. package/dist/frontend/npm.js.map +1 -1
  336. package/dist/frontend/package-shims.d.ts +47 -0
  337. package/dist/frontend/package-shims.js +300 -0
  338. package/dist/frontend/package-shims.js.map +1 -0
  339. package/dist/frontend/pipeline.js +67 -1
  340. package/dist/frontend/pipeline.js.map +1 -1
  341. package/dist/frontend/program.d.ts +8 -0
  342. package/dist/frontend/program.js +72 -9
  343. package/dist/frontend/program.js.map +1 -1
  344. package/dist/frontend/resolve.js +13 -0
  345. package/dist/frontend/resolve.js.map +1 -1
  346. package/dist/frontend/services.d.ts +6 -0
  347. package/dist/frontend/services.js +19 -0
  348. package/dist/frontend/services.js.map +1 -1
  349. package/dist/frontend/ts7/program-host.d.ts +6 -5
  350. package/dist/frontend/ts7/program-host.js +7 -0
  351. package/dist/frontend/ts7/program-host.js.map +1 -1
  352. package/dist/frontend/ts7/semantic-model.d.ts +3 -0
  353. package/dist/frontend/ts7/semantic-model.js +26 -0
  354. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  355. package/dist/frontend/ts7/session.d.ts +19 -4
  356. package/dist/frontend/ts7/session.js.map +1 -1
  357. package/dist/frontend/type-mapper.js +201 -15
  358. package/dist/frontend/type-mapper.js.map +1 -1
  359. package/dist/index.d.ts +1 -0
  360. package/dist/index.js +58 -6
  361. package/dist/index.js.map +1 -1
  362. package/dist/ir/array-length-stability.d.ts +3 -2
  363. package/dist/ir/array-length-stability.js +15 -2
  364. package/dist/ir/array-length-stability.js.map +1 -1
  365. package/dist/ir/array-length-stability.test.js +22 -1
  366. package/dist/ir/array-length-stability.test.js.map +1 -1
  367. package/dist/ir/builtin-effects.js +13 -0
  368. package/dist/ir/builtin-effects.js.map +1 -1
  369. package/dist/ir/builtin-signatures.d.ts +1 -1
  370. package/dist/ir/builtin-signatures.js +46 -4
  371. package/dist/ir/builtin-signatures.js.map +1 -1
  372. package/dist/ir/integer-loop-facts.d.ts +5 -0
  373. package/dist/ir/integer-loop-facts.js +79 -14
  374. package/dist/ir/integer-loop-facts.js.map +1 -1
  375. package/dist/ir/integer-ranges.d.ts +10 -1
  376. package/dist/ir/integer-ranges.js +122 -25
  377. package/dist/ir/integer-ranges.js.map +1 -1
  378. package/dist/ir/integer-ranges.test.js +191 -1
  379. package/dist/ir/integer-ranges.test.js.map +1 -1
  380. package/dist/ir/ir.js +8 -0
  381. package/dist/ir/ir.js.map +1 -1
  382. package/dist/ir/js-ic.d.ts +52 -0
  383. package/dist/ir/js-ic.js +199 -0
  384. package/dist/ir/js-ic.js.map +1 -0
  385. package/dist/ir/js-ic.test.d.ts +1 -0
  386. package/dist/ir/js-ic.test.js +148 -0
  387. package/dist/ir/js-ic.test.js.map +1 -0
  388. package/dist/ir/jsval.js +38 -4
  389. package/dist/ir/jsval.js.map +1 -1
  390. package/dist/ir/runtime-features.d.ts +39 -4
  391. package/dist/ir/runtime-features.js +229 -99
  392. package/dist/ir/runtime-features.js.map +1 -1
  393. package/dist/ir/traverse.js +110 -68
  394. package/dist/ir/traverse.js.map +1 -1
  395. package/dist/ir/validate.js +21 -8
  396. package/dist/ir/validate.js.map +1 -1
  397. package/dist/ir/validate.test.js +15 -2
  398. package/dist/ir/validate.test.js.map +1 -1
  399. package/dist/library/ir-policy.js +1 -0
  400. package/dist/library/ir-policy.js.map +1 -1
  401. package/dist/native/cli.js +17 -0
  402. package/dist/native/cli.js.map +1 -1
  403. package/dist/native/compiler.js +33 -4
  404. package/dist/native/compiler.js.map +1 -1
  405. package/dist/native/executable-cache.js +3 -0
  406. package/dist/native/executable-cache.js.map +1 -1
  407. package/dist/native/prepare.js +3 -0
  408. package/dist/native/prepare.js.map +1 -1
  409. package/dist/native/sanitizer.test.js +7 -0
  410. package/dist/native/sanitizer.test.js.map +1 -1
  411. package/package.json +21 -20
  412. package/shims/fs-extra/core/api.ts +1192 -0
  413. package/shims/fs-extra/index.ts +9 -0
  414. package/shims/undici/core/agent.ts +163 -0
  415. package/shims/undici/core/api.ts +93 -0
  416. package/shims/undici/core/client.ts +1304 -0
  417. package/shims/undici/core/connector.ts +157 -0
  418. package/shims/undici/core/diagnostics-types.ts +68 -0
  419. package/shims/undici/core/diagnostics.ts +16 -0
  420. package/shims/undici/core/dispatcher.ts +574 -0
  421. package/shims/undici/core/errors-v5.ts +22 -0
  422. package/shims/undici/core/errors-v7.ts +25 -0
  423. package/shims/undici/core/errors.ts +255 -0
  424. package/shims/undici/core/fetch.ts +635 -0
  425. package/shims/undici/core/pool.ts +280 -0
  426. package/shims/undici/core/readable.ts +268 -0
  427. package/shims/undici/core/request.ts +313 -0
  428. package/shims/undici/core/timers.ts +80 -0
  429. package/shims/undici/core/types.ts +167 -0
  430. package/shims/undici/core/util.ts +67 -0
  431. package/shims/undici/v5.ts +119 -0
  432. package/shims/undici/v7.ts +119 -0
  433. package/surface-manifest.json +2 -4
@@ -62,6 +62,7 @@ import { lowerReflectCall } from "./builtins/reflection.js";
62
62
  import { lowerAbsenceProbe, v8CalleeText, lowerOptionalNumber, lowerPromiseAllTupleCall, lowerPromiseRejectCall, lowerToNumberArgument, stringWrapperToString, symbolFieldInfo, templateRawTextOf, } from "./lower-exprs.js";
63
63
  import { isSafeToDiscard } from "./expressions/evaluation-safety.js";
64
64
  import { tryLowerExpression } from "./expressions/try-lower-expression.js";
65
+ import { lowerChildMethodValue, lowerChildPropertyCall } from "./handle-properties.js";
65
66
  import { classToNumberConversion } from "./class-to-primitive.js";
66
67
  import { hasRuntimeStatics } from "./class-runtime-statics.js";
67
68
  import { structuralReadType } from "./class-unions.js";
@@ -1160,6 +1161,7 @@ export function lowerCall(lowerer, expr) {
1160
1161
  lowerCipherMethodCall(lowerer, expr, expr.expression) ??
1161
1162
  lowerFileHandleMethodCall(lowerer, expr, expr.expression) ??
1162
1163
  lowerDirMethodCall(lowerer, expr, expr.expression) ??
1164
+ lowerChildPropertyCall(lowerer, expr, expr.expression) ??
1163
1165
  lowerer.lowerChildMethodCall(expr, expr.expression) ??
1164
1166
  // Piped child-output stream receivers — on/once("data" | "end").
1165
1167
  lowerChildStreamMethodCall(lowerer, expr, expr.expression) ??
@@ -1335,6 +1337,11 @@ export function lowerCall(lowerer, expr) {
1335
1337
  return nsUndefRead(lowerer, ambientRoot.text, expr, t);
1336
1338
  }
1337
1339
  }
1340
+ {
1341
+ const childCall = lowerChildPropertyCall(lowerer, expr, expr.expression, true);
1342
+ if (childCall)
1343
+ return childCall;
1344
+ }
1338
1345
  // The lib fence's METHOD-CALL chokepoint: a stdlib-declared member
1339
1346
  // that every lowering above declined — an unlowered member
1340
1347
  // (m.keys(), p.then(f), Object.keys(o)) or an unlowered call FORM of
@@ -1774,6 +1781,59 @@ function lowerStringMethodCallWithOptionalArgs(lowerer, call, access, receiver,
1774
1781
  }
1775
1782
  return changed ? { ...lowered, args } : lowered;
1776
1783
  }
1784
+ /** `.then(String)` / `.then(Number)` / `.then(Boolean)` over a promise of
1785
+ * a number, string or boolean: the ambient constructor converts its first
1786
+ * argument (the settled value), so the handler is an interned closure over
1787
+ * the settled type applying that conversion. The constructors' own value
1788
+ * form takes a string, which a number or boolean settled value is not.
1789
+ * Null for every other handler. */
1790
+ function primitiveConversionHandler(lowerer, node, inner) {
1791
+ if (!ts.isIdentifier(node))
1792
+ return null;
1793
+ const name = node.text;
1794
+ if (name !== "String" && name !== "Number" && name !== "Boolean")
1795
+ return null;
1796
+ // A string settled value already fits the constructors' value form.
1797
+ if (inner.kind !== "f64" && inner.kind !== "bool")
1798
+ return null;
1799
+ if (!lowerer.isStdlibSymbol(lowerer.resolveValueSymbol(node) ?? undefined))
1800
+ return null;
1801
+ const loc = locOf(node);
1802
+ const ret = name === "String" ? STRING : name === "Number" ? F64 : BOOL;
1803
+ const fnT = funcOf([inner], ret);
1804
+ const key = `then.${name}:${typeKey(inner)}`;
1805
+ let fnName = lowerer.arrHofHelpers.get(key);
1806
+ if (fnName === undefined) {
1807
+ fnName = `%then.${name}.${lowerer.arrHofHelpers.size}`;
1808
+ lowerer.arrHofHelpers.set(key, fnName);
1809
+ const value = varRef("v.0", inner, loc);
1810
+ let body;
1811
+ if (name === "Boolean")
1812
+ body = { kind: "toBool", operand: value, type: BOOL, loc };
1813
+ else if (name === "String")
1814
+ body = { kind: "toString", operand: value, type: STRING, loc };
1815
+ else if (inner.kind === "f64")
1816
+ body = value;
1817
+ else
1818
+ body = {
1819
+ kind: "ternary",
1820
+ cond: value,
1821
+ then: { kind: "numLit", value: 1, type: F64, loc },
1822
+ else_: { kind: "numLit", value: 0, type: F64, loc },
1823
+ type: F64,
1824
+ loc,
1825
+ };
1826
+ lowerer.liftedFns.push({
1827
+ name: fnName,
1828
+ params: [{ localId: "v.0", name: "v", type: inner }],
1829
+ returnType: ret,
1830
+ locals: [{ id: "v.0", name: "v", type: inner, mutable: false }],
1831
+ body: [{ kind: "return", value: body, loc }],
1832
+ loc,
1833
+ });
1834
+ }
1835
+ return { kind: "closure", fnName, captures: [], type: fnT, loc };
1836
+ }
1777
1837
  function lowerNumberConstructorValue(lowerer, argNode, loc) {
1778
1838
  const undefinedArg = lowerStaticallyUndefinedArgument(lowerer, argNode);
1779
1839
  if (undefinedArg) {
@@ -2781,6 +2841,9 @@ function lowerDynReceiverMethodCall(lowerer, call, access, boxTypedTemporary = f
2781
2841
  ? lowerer.checker.getNonNullableType(rawRecvTs)
2782
2842
  : rawRecvTs;
2783
2843
  if (lowerer.classImplementedProtocol(recvTs)) {
2844
+ const viewed = pickViewGenericMethodCall(lowerer, call, access, recvTs);
2845
+ if (viewed)
2846
+ return viewed;
2784
2847
  const property = lowerer.checker.getPropertyOfType(recvTs, access.name.text);
2785
2848
  if (property &&
2786
2849
  isGenericCallableMemberType(lowerer.checker.getTypeOfSymbol(property), lowerer.checker))
@@ -3116,7 +3179,18 @@ function lowerDynReceiverMethodCall(lowerer, call, access, boxTypedTemporary = f
3116
3179
  ?.arms.every((arm) => arm.kind === "object" &&
3117
3180
  lowerer.classes.get(arm.className)?.fields.has(access.name.text)))
3118
3181
  return true;
3182
+ // A standard-library member spelled as a function-typed property
3183
+ // (undici-types declares Headers.append/forEach/... and the body mixin
3184
+ // as `readonly append: (...) => void`; scriptc's own declarations use
3185
+ // methods) is still the handle's native method: it takes the shared
3186
+ // receiver dispatch below either way (which also calls a plain object's
3187
+ // own member), so the lowering does not depend on which declaration
3188
+ // file supplies the type.
3189
+ const libMethod = prop !== undefined &&
3190
+ prop.declarations.length > 0 &&
3191
+ prop.declarations.every((decl) => lowerer.isStdlibFile(decl.getSourceFile()));
3119
3192
  return (prop !== undefined &&
3193
+ !libMethod &&
3120
3194
  prop.declarations.some((decl) => ts.isPropertyDeclaration(decl) || ts.isPropertySignature(decl)));
3121
3195
  })();
3122
3196
  // Protocol methods keep their static signature: instances of the
@@ -3656,8 +3730,14 @@ function lowerArrayIsArrayCall(lowerer, call, access) {
3656
3730
  if (call.arguments.nodes.length !== 1)
3657
3731
  return null; // the stdlib chokepoint fences
3658
3732
  const argNode = call.arguments.nodes[0];
3659
- const arg = lowerer.lowerExpr(argNode);
3733
+ let arg = lowerer.lowerExpr(argNode);
3660
3734
  const loc = locOf(call);
3735
+ // A checker-narrowed dyn read arrives as a validated extraction (the
3736
+ // dynCheck bridge). The runtime value may be wider than the flow type
3737
+ // claims (an overload narrower than what arrives), so test the dyn value
3738
+ // itself instead of folding on the extracted type (typeof's rule).
3739
+ if (arg.kind === "dynCheck" && arg.value.type.kind === "dyn")
3740
+ arg = arg.value;
3661
3741
  if (arg.type.kind === "dyn") {
3662
3742
  return { kind: "dynTest", test: "array", value: arg, type: BOOL, loc };
3663
3743
  }
@@ -4982,7 +5062,8 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
4982
5062
  // the handle is the value's only story, isIslandExpr's local rule).
4983
5063
  if (inner.kind === "moduleNs")
4984
5064
  markModuleNsHandlerParams(lowerer, call.arguments.nodes[0], inner);
4985
- let cb = lowerer.lowerExpr(call.arguments.nodes[0]);
5065
+ let cb = primitiveConversionHandler(lowerer, call.arguments.nodes[0], inner) ??
5066
+ lowerer.lowerExpr(call.arguments.nodes[0]);
4986
5067
  // A TYPED handler on a DYN-settling promise (the tracePromise
4987
5068
  // result's `.then((value) => ...)` — the checker's generic
4988
5069
  // instantiation typed the parameter, but the settled value is a
@@ -8174,13 +8255,31 @@ function lowerObjLitGenericMethodCall(lowerer, call, access) {
8174
8255
  if ((name === "apply" || name === "call" || name === "bind") &&
8175
8256
  lowerer.checker.getCallSignatures(recvT).length > 0) {
8176
8257
  const value = tryLowerExpression(lowerer, access.expression);
8177
- if (value?.type.kind === "func" &&
8178
- lowerer.dynConvertible(value.type) &&
8258
+ // Builtin function values held as checked-dynamic functions
8259
+ // (String.fromCharCode, JSON.stringify) bind the same way, and so
8260
+ // does a member that lowers to a checked-dynamic value (a native
8261
+ // handle's method read in JavaScript).
8262
+ if (value &&
8263
+ (value.type.kind === "dyn" ||
8264
+ (value.type.kind === "func" && lowerer.dynConvertible(value.type))) &&
8179
8265
  !call.arguments.nodes.some(ts.isSpreadElement)) {
8180
8266
  const loc = locOf(call);
8181
8267
  return {
8182
8268
  kind: "dynInvoke",
8183
- recv: { kind: "dynFrom", value, type: DYN, loc },
8269
+ recv: value.type.kind === "dyn" ? value : { kind: "dynFrom", value, type: DYN, loc },
8270
+ method: name,
8271
+ calleeName: ts.getTextOfNode(access),
8272
+ args: call.arguments.nodes.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
8273
+ type: DYN,
8274
+ loc,
8275
+ };
8276
+ }
8277
+ const childMethod = lowerChildMethodValue(lowerer, access.expression);
8278
+ if (childMethod && !call.arguments.nodes.some(ts.isSpreadElement)) {
8279
+ const loc = locOf(call);
8280
+ return {
8281
+ kind: "dynInvoke",
8282
+ recv: childMethod,
8184
8283
  method: name,
8185
8284
  calleeName: ts.getTextOfNode(access),
8186
8285
  args: call.arguments.nodes.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
@@ -8919,7 +9018,28 @@ export function lowerStaticNumberGlobal(lowerer, name, call, args, loc) {
8919
9018
  const radix = args[1]
8920
9019
  ? lowerer.lowerExprExpecting(args[1], F64)
8921
9020
  : { kind: "numLit", value: 0, type: F64, loc };
8922
- const optional = optionalCallValue(lowerer, args[0]);
9021
+ let optional = optionalCallValue(lowerer, args[0]);
9022
+ let lowered = null;
9023
+ // A possibly-missing or untyped text in JavaScript (`parseInt(process.
9024
+ // env.PORT, 10)`): TypeScript rejects the call, Node parses the text
9025
+ // of whatever arrives ("undefined").
9026
+ if (optional === null && isJsSourceFile(ts.getSourceFileOfNode(call))) {
9027
+ const argT = lowerer.typeOf(args[0]);
9028
+ const parts = argT.isUnionType() ? ts.constituentTypes(argT) : [argT];
9029
+ if (parts.some((part) => (part.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Null | ts.TypeFlags.Any)) !== 0)) {
9030
+ const raw = lowerer.lowerExpr(args[0]);
9031
+ if (raw.type.kind === "union") {
9032
+ optional = raw;
9033
+ lowered = raw;
9034
+ }
9035
+ else {
9036
+ const text = raw.type.kind === "dyn"
9037
+ ? { kind: "libCall", fn: "dyn.toStringCoerce", args: [raw], type: STRING, loc }
9038
+ : lowerer.coerceInto(args[0], raw, STRING);
9039
+ return { kind: "libCall", fn: "num.parseInt", args: [text, radix], type: F64, loc };
9040
+ }
9041
+ }
9042
+ }
8923
9043
  if (optional?.type.kind === "union") {
8924
9044
  const def = lowerer.unions.get(optional.type.unionId);
8925
9045
  const stringTag = def?.arms.findIndex((arm) => arm.kind === "string") ?? -1;
@@ -9014,7 +9134,9 @@ export function lowerStaticNumberGlobal(lowerer, name, call, args, loc) {
9014
9134
  return { kind: "call", callee: helper, args: [optional, radix], type: F64, loc };
9015
9135
  }
9016
9136
  }
9017
- const s = lowerer.lowerExprExpecting(args[0], STRING);
9137
+ const s = lowered !== null
9138
+ ? lowerer.coerceInto(args[0], lowered, STRING)
9139
+ : lowerer.lowerExprExpecting(args[0], STRING);
9018
9140
  return { kind: "libCall", fn: "num.parseInt", args: [s, radix], type: F64, loc };
9019
9141
  }
9020
9142
  // STATIC parseFloat/isFinite over exactly-typed arguments —
@@ -9084,6 +9206,43 @@ function maybePromiseHandlerResult(lowerer, call, value, R) {
9084
9206
  }
9085
9207
  return stmt;
9086
9208
  }
9209
+ /** `view.m(args)` where `view` is a `Pick<C, K>` / `Omit<C, K>` view of a
9210
+ * program class C and `m` is one of C's GENERIC methods (its overloads
9211
+ * included): generic methods have no dispatchable method value, so the
9212
+ * view's live receiver is extracted as the C instance it holds (a checked
9213
+ * extraction — a value of another class throws Node-style TypeError
9214
+ * text naming C) and the call monomorphizes statically against C, the
9215
+ * same lowering a C-typed receiver gets. Null for other receivers. */
9216
+ function pickViewGenericMethodCall(lowerer, call, access, recvTs) {
9217
+ const alias = recvTs.getAliasSymbol();
9218
+ if (alias === undefined || (ts.symbolName(alias) !== "Pick" && ts.symbolName(alias) !== "Omit"))
9219
+ return null;
9220
+ if (!alias.declarations.every((d) => ts.getSourceFileOfNode(d).isDeclarationFile))
9221
+ return null;
9222
+ const source = recvTs.getAliasTypeArguments()[0];
9223
+ const symbol = source?.getSymbol();
9224
+ const info = symbol ? lowerer.classBySymbol.get(symbol) : undefined;
9225
+ if (!info || call.questionDotToken || access.questionDotToken)
9226
+ return null;
9227
+ const found = findGenericMethodOn(lowerer, info, access.name.text);
9228
+ if (!found)
9229
+ return null;
9230
+ const loc = locOf(access.expression);
9231
+ const lowered = lowerer.lowerExpr(access.expression);
9232
+ const instance = { kind: "object", className: info.def.name };
9233
+ // A view that statically holds an instance of another class (a
9234
+ // structurally compatible one) calls that class's method in Node, not
9235
+ // C's: the call is refused rather than extracted as a C instance.
9236
+ if (lowered.type.kind === "object" &&
9237
+ lowered.type.className !== info.def.name &&
9238
+ !lowerer.isSubclassOf(lowered.type.className, info.def.name)) {
9239
+ lowerer.unsupported("SC1090", access, `calling the generic method '${access.name.text}' through a '${ts.symbolName(alias)}' view of '${info.def.name}' that holds a '${lowerer.fmt(lowered.type)}'`);
9240
+ }
9241
+ const receiver = lowered.type.kind === "object"
9242
+ ? lowered
9243
+ : { kind: "dynCheck", value: lowerer.coerceToExpected(lowered, DYN), type: instance, loc };
9244
+ return lowerClassGenericMethodCall(lowerer, call, access, info, found, receiver);
9245
+ }
9087
9246
  /** `Object.assign(err, ...sources)` in TypeScript onto an error-hierarchy
9088
9247
  * target (`Object.assign(new Error(message), details)`): the sources'
9089
9248
  * own members land on the error — the runtime copy over its