@scriptc/compiler 0.4.2 → 0.4.3

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 (636) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +397 -37
  2. package/dist/backend/cycle-analysis.d.ts +4 -1
  3. package/dist/backend/cycle-analysis.js +6 -4
  4. package/dist/backend/cycle-analysis.js.map +1 -1
  5. package/dist/backend/cycle-analysis.test.js +55 -0
  6. package/dist/backend/cycle-analysis.test.js.map +1 -1
  7. package/dist/backend/cycle-mutability.d.ts +7 -0
  8. package/dist/backend/cycle-mutability.js +19 -1
  9. package/dist/backend/cycle-mutability.js.map +1 -1
  10. package/dist/backend/executable-features.js +2 -0
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/immutability.d.ts +6 -3
  13. package/dist/backend/immutability.js +33 -29
  14. package/dist/backend/immutability.js.map +1 -1
  15. package/dist/backend/library-pack.js +1 -0
  16. package/dist/backend/library-pack.js.map +1 -1
  17. package/dist/backend/llvm/alloc.d.ts +16 -1
  18. package/dist/backend/llvm/alloc.js +54 -4
  19. package/dist/backend/llvm/alloc.js.map +1 -1
  20. package/dist/backend/llvm/appended-array-literals.d.ts +2 -1
  21. package/dist/backend/llvm/appended-array-literals.js +44 -36
  22. package/dist/backend/llvm/appended-array-literals.js.map +1 -1
  23. package/dist/backend/llvm/appended-array-literals.test.js +4 -3
  24. package/dist/backend/llvm/appended-array-literals.test.js.map +1 -1
  25. package/dist/backend/llvm/array-search.d.ts +4 -3
  26. package/dist/backend/llvm/array-search.js +21 -9
  27. package/dist/backend/llvm/array-search.js.map +1 -1
  28. package/dist/backend/llvm/blocks.d.ts +1 -1
  29. package/dist/backend/llvm/blocks.js +2 -2
  30. package/dist/backend/llvm/blocks.js.map +1 -1
  31. package/dist/backend/llvm/byte-windows.js +2 -0
  32. package/dist/backend/llvm/byte-windows.js.map +1 -1
  33. package/dist/backend/llvm/bytes-alias.d.ts +6 -1
  34. package/dist/backend/llvm/bytes-alias.js +8 -2
  35. package/dist/backend/llvm/bytes-alias.js.map +1 -1
  36. package/dist/backend/llvm/bytes-loop-versions.d.ts +47 -5
  37. package/dist/backend/llvm/bytes-loop-versions.js +473 -32
  38. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  39. package/dist/backend/llvm/bytes-loop-versions.test.js +258 -2
  40. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  41. package/dist/backend/llvm/checked-value-lifetimes.js +2 -0
  42. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  43. package/dist/backend/llvm/classes.d.ts +7 -5
  44. package/dist/backend/llvm/classes.js +44 -20
  45. package/dist/backend/llvm/classes.js.map +1 -1
  46. package/dist/backend/llvm/classes.test.js +167 -7
  47. package/dist/backend/llvm/classes.test.js.map +1 -1
  48. package/dist/backend/llvm/common.d.ts +9 -3
  49. package/dist/backend/llvm/common.js +9 -3
  50. package/dist/backend/llvm/common.js.map +1 -1
  51. package/dist/backend/llvm/constant-callbacks.d.ts +2 -1
  52. package/dist/backend/llvm/constant-callbacks.js +83 -52
  53. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  54. package/dist/backend/llvm/counted-loops.d.ts +7 -0
  55. package/dist/backend/llvm/counted-loops.js +18 -0
  56. package/dist/backend/llvm/counted-loops.js.map +1 -1
  57. package/dist/backend/llvm/dense-array-access.d.ts +39 -8
  58. package/dist/backend/llvm/dense-array-access.js +222 -52
  59. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  60. package/dist/backend/llvm/dense-array-access.test.js +36 -0
  61. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  62. package/dist/backend/llvm/dense-array-loops.d.ts +17 -1
  63. package/dist/backend/llvm/dense-array-loops.js +194 -5
  64. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  65. package/dist/backend/llvm/dense-array-loops.test.js +90 -1
  66. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
  67. package/dist/backend/llvm/dyn-handle-tags.test.js +6 -1
  68. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -1
  69. package/dist/backend/llvm/dyn.d.ts +26 -0
  70. package/dist/backend/llvm/dyn.js +352 -61
  71. package/dist/backend/llvm/dyn.js.map +1 -1
  72. package/dist/backend/llvm/emit-function.js +11 -20
  73. package/dist/backend/llvm/emit-function.js.map +1 -1
  74. package/dist/backend/llvm/emit-journal.d.ts +93 -0
  75. package/dist/backend/llvm/emit-journal.js +170 -0
  76. package/dist/backend/llvm/emit-journal.js.map +1 -0
  77. package/dist/backend/llvm/emit-module.js +195 -27
  78. package/dist/backend/llvm/emit-module.js.map +1 -1
  79. package/dist/backend/llvm/emit-statements.d.ts +0 -4
  80. package/dist/backend/llvm/emit-statements.js +268 -84
  81. package/dist/backend/llvm/emit-statements.js.map +1 -1
  82. package/dist/backend/llvm/emitter-state.d.ts +7 -0
  83. package/dist/backend/llvm/emitter-state.js +14 -0
  84. package/dist/backend/llvm/emitter-state.js.map +1 -0
  85. package/dist/backend/llvm/emitter.d.ts +176 -37
  86. package/dist/backend/llvm/emitter.js +724 -85
  87. package/dist/backend/llvm/emitter.js.map +1 -1
  88. package/dist/backend/llvm/emitter.test.js +54 -5
  89. package/dist/backend/llvm/emitter.test.js.map +1 -1
  90. package/dist/backend/llvm/expr-bytes.js +34 -12
  91. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  92. package/dist/backend/llvm/expr-callbacks.js +47 -0
  93. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  94. package/dist/backend/llvm/expr-calls.js +28 -14
  95. package/dist/backend/llvm/expr-calls.js.map +1 -1
  96. package/dist/backend/llvm/expr-containers.d.ts +14 -2
  97. package/dist/backend/llvm/expr-containers.js +129 -37
  98. package/dist/backend/llvm/expr-containers.js.map +1 -1
  99. package/dist/backend/llvm/expr-context.d.ts +14 -0
  100. package/dist/backend/llvm/expr-dynamic.js +18 -11
  101. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  102. package/dist/backend/llvm/expr-primitives.js +100 -28
  103. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  104. package/dist/backend/llvm/expr-primitives.test.js +11 -6
  105. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  106. package/dist/backend/llvm/expr-records.d.ts +12 -0
  107. package/dist/backend/llvm/expr-records.js +106 -0
  108. package/dist/backend/llvm/expr-records.js.map +1 -1
  109. package/dist/backend/llvm/expr-stream-bridges.d.ts +2 -2
  110. package/dist/backend/llvm/expr-stream-bridges.js +194 -65
  111. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  112. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  113. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  114. package/dist/backend/llvm/expr-stream-callbacks.d.ts +2 -2
  115. package/dist/backend/llvm/expr-stream-callbacks.js +74 -20
  116. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  117. package/dist/backend/llvm/int32-kind-loops.d.ts +39 -0
  118. package/dist/backend/llvm/int32-kind-loops.js +106 -0
  119. package/dist/backend/llvm/int32-kind-loops.js.map +1 -0
  120. package/dist/backend/llvm/integer-or-nan-indexes.test.d.ts +1 -0
  121. package/dist/backend/llvm/integer-or-nan-indexes.test.js +118 -0
  122. package/dist/backend/llvm/integer-or-nan-indexes.test.js.map +1 -0
  123. package/dist/backend/llvm/integer-values.d.ts +20 -1
  124. package/dist/backend/llvm/integer-values.js +71 -0
  125. package/dist/backend/llvm/integer-values.js.map +1 -1
  126. package/dist/backend/llvm/js-ic.d.ts +1 -1
  127. package/dist/backend/llvm/js-ic.js +1 -1
  128. package/dist/backend/llvm/js-ic.js.map +1 -1
  129. package/dist/backend/llvm/key-orders.d.ts +7 -0
  130. package/dist/backend/llvm/key-orders.js +33 -0
  131. package/dist/backend/llvm/key-orders.js.map +1 -0
  132. package/dist/backend/llvm/lib-connect.js +4 -0
  133. package/dist/backend/llvm/lib-connect.js.map +1 -1
  134. package/dist/backend/llvm/lib-datagram.js +11 -0
  135. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  136. package/dist/backend/llvm/lib-dispatch.js +80 -2
  137. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  138. package/dist/backend/llvm/lib-filesystem.js +4 -4
  139. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  140. package/dist/backend/llvm/lib-http2.js +4 -0
  141. package/dist/backend/llvm/lib-http2.js.map +1 -1
  142. package/dist/backend/llvm/lib-lookup.js +16 -6
  143. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  144. package/dist/backend/llvm/lib-shared.js +73 -2
  145. package/dist/backend/llvm/lib-shared.js.map +1 -1
  146. package/dist/backend/llvm/lib-stream.js +35 -5
  147. package/dist/backend/llvm/lib-stream.js.map +1 -1
  148. package/dist/backend/llvm/local-array-reads.js +115 -19
  149. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  150. package/dist/backend/llvm/local-array-reads.test.js +14 -0
  151. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  152. package/dist/backend/llvm/loop-state.d.ts +33 -0
  153. package/dist/backend/llvm/loop-state.js +42 -0
  154. package/dist/backend/llvm/loop-state.js.map +1 -0
  155. package/dist/backend/llvm/map-number-lookup.d.ts +26 -8
  156. package/dist/backend/llvm/map-number-lookup.js +91 -31
  157. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  158. package/dist/backend/llvm/map-number-lookup.test.js +55 -0
  159. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  160. package/dist/backend/llvm/map-read-lifetimes.js +4 -2
  161. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  162. package/dist/backend/llvm/nullable-unions.d.ts +2 -1
  163. package/dist/backend/llvm/nullable-unions.js +15 -3
  164. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  165. package/dist/backend/llvm/publish.d.ts +10 -0
  166. package/dist/backend/llvm/publish.js +12 -0
  167. package/dist/backend/llvm/publish.js.map +1 -1
  168. package/dist/backend/llvm/receivers.js +6 -1
  169. package/dist/backend/llvm/receivers.js.map +1 -1
  170. package/dist/backend/llvm/record-results.d.ts +1 -9
  171. package/dist/backend/llvm/record-results.js +2 -11
  172. package/dist/backend/llvm/record-results.js.map +1 -1
  173. package/dist/backend/llvm/reference-writes.d.ts +7 -2
  174. package/dist/backend/llvm/reference-writes.js +89 -72
  175. package/dist/backend/llvm/reference-writes.js.map +1 -1
  176. package/dist/backend/llvm/running-extrema.d.ts +11 -0
  177. package/dist/backend/llvm/running-extrema.js +115 -0
  178. package/dist/backend/llvm/running-extrema.js.map +1 -0
  179. package/dist/backend/llvm/running-extrema.test.d.ts +1 -0
  180. package/dist/backend/llvm/running-extrema.test.js +89 -0
  181. package/dist/backend/llvm/running-extrema.test.js.map +1 -0
  182. package/dist/backend/llvm/shapes.d.ts +71 -15
  183. package/dist/backend/llvm/shapes.js +222 -33
  184. package/dist/backend/llvm/shapes.js.map +1 -1
  185. package/dist/backend/llvm/shapes.test.js +53 -7
  186. package/dist/backend/llvm/shapes.test.js.map +1 -1
  187. package/dist/backend/llvm/speculative-integers.d.ts +6 -0
  188. package/dist/backend/llvm/speculative-integers.js +2 -2
  189. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  190. package/dist/backend/llvm/stack-objects.d.ts +3 -2
  191. package/dist/backend/llvm/stack-objects.js +5 -2
  192. package/dist/backend/llvm/stack-objects.js.map +1 -1
  193. package/dist/backend/llvm/string-reads.d.ts +12 -0
  194. package/dist/backend/llvm/string-reads.js +44 -0
  195. package/dist/backend/llvm/string-reads.js.map +1 -1
  196. package/dist/backend/llvm/walk-borrows.d.ts +3 -0
  197. package/dist/backend/llvm/walk-borrows.js +46 -41
  198. package/dist/backend/llvm/walk-borrows.js.map +1 -1
  199. package/dist/backend/llvm/walkers.d.ts +3 -0
  200. package/dist/backend/llvm/walkers.js +88 -65
  201. package/dist/backend/llvm/walkers.js.map +1 -1
  202. package/dist/backend/llvm/wrapping-sums.d.ts +16 -1
  203. package/dist/backend/llvm/wrapping-sums.js +126 -0
  204. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  205. package/dist/backend/may-throw.d.ts +8 -10
  206. package/dist/backend/may-throw.js +14 -10
  207. package/dist/backend/may-throw.js.map +1 -1
  208. package/dist/backend/native/contracts.d.ts +5 -0
  209. package/dist/backend/native/executable.js +7 -0
  210. package/dist/backend/native/executable.js.map +1 -1
  211. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  212. package/dist/backend/native/runtime-inputs.js +1 -0
  213. package/dist/backend/native/runtime-inputs.js.map +1 -1
  214. package/dist/backend/native-link-info-core.d.ts +4 -0
  215. package/dist/backend/native-link-info-core.js.map +1 -1
  216. package/dist/backend/publication.d.ts +12 -1
  217. package/dist/backend/publication.js +37 -14
  218. package/dist/backend/publication.js.map +1 -1
  219. package/dist/backend/publication.test.js +30 -0
  220. package/dist/backend/publication.test.js.map +1 -1
  221. package/dist/backend/result-slots.d.ts +16 -0
  222. package/dist/backend/result-slots.js +23 -0
  223. package/dist/backend/result-slots.js.map +1 -0
  224. package/dist/backend/runtime-abi.d.ts +2 -2
  225. package/dist/backend/runtime-abi.js +2 -2
  226. package/dist/backend/runtime-pack-core.d.ts +1 -0
  227. package/dist/backend/runtime-pack-core.js +1 -0
  228. package/dist/backend/runtime-pack-core.js.map +1 -1
  229. package/dist/backend/runtime-pack-targets.test.js +2 -1
  230. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  231. package/dist/backend/runtime-pack.test.js +2 -1
  232. package/dist/backend/runtime-pack.test.js.map +1 -1
  233. package/dist/backend/stack-observations.d.ts +2 -1
  234. package/dist/backend/stack-observations.js +67 -42
  235. package/dist/backend/stack-observations.js.map +1 -1
  236. package/dist/backend/target-diagnostics.js +5 -3
  237. package/dist/backend/target-diagnostics.js.map +1 -1
  238. package/dist/backend/warm-cache.js +1 -0
  239. package/dist/backend/warm-cache.js.map +1 -1
  240. package/dist/cli/usage.d.ts +1 -1
  241. package/dist/cli/usage.js +3 -3
  242. package/dist/compat/fetch-profile.js +1 -1
  243. package/dist/compat/fetch-profile.js.map +1 -1
  244. package/dist/contracts/check.js +4 -3
  245. package/dist/contracts/check.js.map +1 -1
  246. package/dist/contracts/int32-elements.js +10 -2
  247. package/dist/contracts/int32-elements.js.map +1 -1
  248. package/dist/coverage/report.js +12 -3
  249. package/dist/coverage/report.js.map +1 -1
  250. package/dist/diagnostics/diagnostic.d.ts +4 -0
  251. package/dist/diagnostics/diagnostic.js.map +1 -1
  252. package/dist/diagnostics/envelope.d.ts +3 -0
  253. package/dist/diagnostics/envelope.js +1 -0
  254. package/dist/diagnostics/envelope.js.map +1 -1
  255. package/dist/executable/executable-cache.d.ts +2 -0
  256. package/dist/executable/executable-cache.js +1 -0
  257. package/dist/executable/executable-cache.js.map +1 -1
  258. package/dist/executable/executable-cache.test.js +1 -0
  259. package/dist/executable/executable-cache.test.js.map +1 -1
  260. package/dist/frontend/decl-projection.d.ts +41 -0
  261. package/dist/frontend/decl-projection.js +854 -0
  262. package/dist/frontend/decl-projection.js.map +1 -0
  263. package/dist/frontend/decl-projection.test.d.ts +1 -0
  264. package/dist/frontend/decl-projection.test.js +30 -0
  265. package/dist/frontend/decl-projection.test.js.map +1 -0
  266. package/dist/frontend/dts-paths.d.ts +15 -0
  267. package/dist/frontend/dts-paths.js +25 -0
  268. package/dist/frontend/dts-paths.js.map +1 -1
  269. package/dist/frontend/input-tracker.d.ts +6 -0
  270. package/dist/frontend/input-tracker.js +51 -28
  271. package/dist/frontend/input-tracker.js.map +1 -1
  272. package/dist/frontend/input-tracker.test.js +19 -0
  273. package/dist/frontend/input-tracker.test.js.map +1 -1
  274. package/dist/frontend/lowering/array-values.js +100 -2
  275. package/dist/frontend/lowering/array-values.js.map +1 -1
  276. package/dist/frontend/lowering/builtins/child-process-methods.js +46 -15
  277. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  278. package/dist/frontend/lowering/builtins/child-process.js +13 -2
  279. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  280. package/dist/frontend/lowering/builtins/crypto.js +84 -9
  281. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  282. package/dist/frontend/lowering/builtins/global-namespace-keys.d.ts +3 -0
  283. package/dist/frontend/lowering/builtins/global-namespace-keys.js +122 -0
  284. package/dist/frontend/lowering/builtins/global-namespace-keys.js.map +1 -0
  285. package/dist/frontend/lowering/builtins/numbers.js +9 -1
  286. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  287. package/dist/frontend/lowering/builtins/promises.d.ts +6 -0
  288. package/dist/frontend/lowering/builtins/promises.js +88 -2
  289. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  290. package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
  291. package/dist/frontend/lowering/builtins/readline.js +35 -3
  292. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  293. package/dist/frontend/lowering/builtins/url.js +24 -1
  294. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  295. package/dist/frontend/lowering/builtins/webassembly.js +6 -3
  296. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  297. package/dist/frontend/lowering/class-callbacks.d.ts +5 -2
  298. package/dist/frontend/lowering/class-callbacks.js +82 -12
  299. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  300. package/dist/frontend/lowering/class-construction.d.ts +4 -1
  301. package/dist/frontend/lowering/class-construction.js +17 -3
  302. package/dist/frontend/lowering/class-construction.js.map +1 -1
  303. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +39 -2
  304. package/dist/frontend/lowering/class-dynamic-dispatch.js +766 -108
  305. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  306. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +47 -0
  307. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  308. package/dist/frontend/lowering/class-iterables.d.ts +2 -1
  309. package/dist/frontend/lowering/class-iterables.js +9 -1
  310. package/dist/frontend/lowering/class-iterables.js.map +1 -1
  311. package/dist/frontend/lowering/class-method-mutations.js +32 -9
  312. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  313. package/dist/frontend/lowering/class-prototypes.js +31 -2
  314. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  315. package/dist/frontend/lowering/class-runtime-statics.d.ts +9 -3
  316. package/dist/frontend/lowering/class-runtime-statics.js +29 -4
  317. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  318. package/dist/frontend/lowering/coercions/structural-plans.js +48 -1
  319. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  320. package/dist/frontend/lowering/coercions/structural.js +91 -1
  321. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  322. package/dist/frontend/lowering/containers/array-callback-call.js +2 -2
  323. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  324. package/dist/frontend/lowering/containers/array-callbacks.js +338 -18
  325. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  326. package/dist/frontend/lowering/containers/array-concat.js +10 -0
  327. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  328. package/dist/frontend/lowering/containers/array-methods.js +15 -0
  329. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  330. package/dist/frontend/lowering/containers/array-pipelines.js +19 -8
  331. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  332. package/dist/frontend/lowering/containers/bytes.js +2 -1
  333. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  334. package/dist/frontend/lowering/containers/callback-arguments.js +3 -0
  335. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  336. package/dist/frontend/lowering/containers/collection-methods.js +7 -2
  337. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  338. package/dist/frontend/lowering/containers/filter-predicates.d.ts +6 -0
  339. package/dist/frontend/lowering/containers/filter-predicates.js +205 -0
  340. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -0
  341. package/dist/frontend/lowering/containers/indexed-objects.d.ts +0 -12
  342. package/dist/frontend/lowering/containers/indexed-objects.js +46 -7
  343. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  344. package/dist/frontend/lowering/containers/string-and-regexp.js +55 -9
  345. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  346. package/dist/frontend/lowering/containers/string-replacement.js +43 -19
  347. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  348. package/dist/frontend/lowering/dispatch-sites.js +15 -1
  349. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  350. package/dist/frontend/lowering/divergences.js +9 -1
  351. package/dist/frontend/lowering/divergences.js.map +1 -1
  352. package/dist/frontend/lowering/error-methods.js +47 -2
  353. package/dist/frontend/lowering/error-methods.js.map +1 -1
  354. package/dist/frontend/lowering/expressions/array-literals.js +47 -0
  355. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  356. package/dist/frontend/lowering/expressions/binary.js +36 -2
  357. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  358. package/dist/frontend/lowering/expressions/element-access.js +90 -13
  359. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  360. package/dist/frontend/lowering/expressions/identifiers.js +33 -4
  361. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  362. package/dist/frontend/lowering/expressions/narrowing.js +95 -1
  363. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  364. package/dist/frontend/lowering/expressions/nullish-assignment.js +3 -1
  365. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  366. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  367. package/dist/frontend/lowering/expressions/object-literals.js +138 -51
  368. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  369. package/dist/frontend/lowering/expressions/optional-chains.js +12 -0
  370. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  371. package/dist/frontend/lowering/expressions/property-access.js +113 -11
  372. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  373. package/dist/frontend/lowering/expressions/relational.js +212 -33
  374. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  375. package/dist/frontend/lowering/expressions/union-fields.js +4 -0
  376. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  377. package/dist/frontend/lowering/expressions/updates.js +22 -3
  378. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  379. package/dist/frontend/lowering/frozen-records.d.ts +28 -0
  380. package/dist/frontend/lowering/frozen-records.js +322 -0
  381. package/dist/frontend/lowering/frozen-records.js.map +1 -0
  382. package/dist/frontend/lowering/function-returns.js +49 -0
  383. package/dist/frontend/lowering/function-returns.js.map +1 -1
  384. package/dist/frontend/lowering/generic-functions.js +7 -2
  385. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  386. package/dist/frontend/lowering/iterable-values.d.ts +49 -0
  387. package/dist/frontend/lowering/iterable-values.js +297 -0
  388. package/dist/frontend/lowering/iterable-values.js.map +1 -0
  389. package/dist/frontend/lowering/iterator-adapters.js +186 -1
  390. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  391. package/dist/frontend/lowering/js-class-fields.d.ts +8 -0
  392. package/dist/frontend/lowering/js-class-fields.js +45 -10
  393. package/dist/frontend/lowering/js-class-fields.js.map +1 -1
  394. package/dist/frontend/lowering/key-order-witness.d.ts +18 -3
  395. package/dist/frontend/lowering/key-order-witness.js +770 -22
  396. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  397. package/dist/frontend/lowering/key-order-witness.test.js +428 -8
  398. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  399. package/dist/frontend/lowering/lower-async-iteration.js +4 -1
  400. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  401. package/dist/frontend/lowering/lower-calls.d.ts +7 -0
  402. package/dist/frontend/lowering/lower-calls.js +443 -41
  403. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  404. package/dist/frontend/lowering/lower-classes.d.ts +11 -2
  405. package/dist/frontend/lowering/lower-classes.js +302 -22
  406. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  407. package/dist/frontend/lowering/lower-dgram.js +3 -1
  408. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  409. package/dist/frontend/lowering/lower-exprs.js +10 -2
  410. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  411. package/dist/frontend/lowering/lower-functions.d.ts +11 -0
  412. package/dist/frontend/lowering/lower-functions.js +83 -0
  413. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  414. package/dist/frontend/lowering/lower-generators.js +41 -31
  415. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  416. package/dist/frontend/lowering/lower-global-value.js +6 -3
  417. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  418. package/dist/frontend/lowering/lower-inspect.js +18 -6
  419. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  420. package/dist/frontend/lowering/lower-modules.js +32 -0
  421. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  422. package/dist/frontend/lowering/lower-namespaces.js +5 -1
  423. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  424. package/dist/frontend/lowering/lower-server.js +2 -2
  425. package/dist/frontend/lowering/lower-server.js.map +1 -1
  426. package/dist/frontend/lowering/lower-stdlib.d.ts +5 -0
  427. package/dist/frontend/lowering/lower-stdlib.js +30 -0
  428. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  429. package/dist/frontend/lowering/lower-stmts.d.ts +23 -0
  430. package/dist/frontend/lowering/lower-stmts.js +454 -48
  431. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  432. package/dist/frontend/lowering/lower-stream.d.ts +20 -2
  433. package/dist/frontend/lowering/lower-stream.js +1483 -156
  434. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  435. package/dist/frontend/lowering/lowerer.d.ts +77 -6
  436. package/dist/frontend/lowering/lowerer.js +313 -29
  437. package/dist/frontend/lowering/lowerer.js.map +1 -1
  438. package/dist/frontend/lowering/module-namespace-elements.d.ts +11 -1
  439. package/dist/frontend/lowering/module-namespace-elements.js +82 -5
  440. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  441. package/dist/frontend/lowering/new-target.d.ts +12 -0
  442. package/dist/frontend/lowering/new-target.js +280 -0
  443. package/dist/frontend/lowering/new-target.js.map +1 -0
  444. package/dist/frontend/lowering/surfaces.d.ts +3 -0
  445. package/dist/frontend/lowering/surfaces.js +18 -6
  446. package/dist/frontend/lowering/surfaces.js.map +1 -1
  447. package/dist/frontend/lowering/undefined-index.d.ts +27 -0
  448. package/dist/frontend/lowering/undefined-index.js +82 -0
  449. package/dist/frontend/lowering/undefined-index.js.map +1 -0
  450. package/dist/frontend/lowering/var-hoisting.js +29 -13
  451. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  452. package/dist/frontend/lowering/width-lift.d.ts +18 -0
  453. package/dist/frontend/npm-static-bundled-chunks.js +9 -11
  454. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
  455. package/dist/frontend/npm-static-bundled-chunks.test.js +6 -5
  456. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
  457. package/dist/frontend/npm-static-rewrite-syntax.js +9 -1
  458. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  459. package/dist/frontend/npm-static.js +4 -20
  460. package/dist/frontend/npm-static.js.map +1 -1
  461. package/dist/frontend/package-shims.d.ts +3 -0
  462. package/dist/frontend/package-shims.js +71 -8
  463. package/dist/frontend/package-shims.js.map +1 -1
  464. package/dist/frontend/pipeline.js +18 -10
  465. package/dist/frontend/pipeline.js.map +1 -1
  466. package/dist/frontend/process-fork.d.ts +25 -0
  467. package/dist/frontend/process-fork.js +2 -0
  468. package/dist/frontend/process-fork.js.map +1 -0
  469. package/dist/frontend/program.d.ts +8 -1
  470. package/dist/frontend/program.js +484 -69
  471. package/dist/frontend/program.js.map +1 -1
  472. package/dist/frontend/program.test.js +43 -3
  473. package/dist/frontend/program.test.js.map +1 -1
  474. package/dist/frontend/token-equivalence.d.ts +3 -0
  475. package/dist/frontend/token-equivalence.js +409 -0
  476. package/dist/frontend/token-equivalence.js.map +1 -0
  477. package/dist/frontend/token-equivalence.test.d.ts +1 -0
  478. package/dist/frontend/token-equivalence.test.js +67 -0
  479. package/dist/frontend/token-equivalence.test.js.map +1 -0
  480. package/dist/frontend/ts7/ast-node.d.ts +22 -0
  481. package/dist/frontend/ts7/ast-node.js +1048 -103
  482. package/dist/frontend/ts7/ast-node.js.map +1 -1
  483. package/dist/frontend/ts7/ast-node.test.js +24 -0
  484. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  485. package/dist/frontend/ts7/ast-wire.d.ts +4 -3
  486. package/dist/frontend/ts7/ast-wire.js +34 -24
  487. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  488. package/dist/frontend/ts7/ast-wire.test.js +23 -0
  489. package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
  490. package/dist/frontend/ts7/checker-backend.d.ts +3 -4
  491. package/dist/frontend/ts7/checker-backend.js +2 -2
  492. package/dist/frontend/ts7/checker-backend.js.map +1 -1
  493. package/dist/frontend/ts7/checker-backend.test.js +5 -9
  494. package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
  495. package/dist/frontend/ts7/checker.d.ts +4 -0
  496. package/dist/frontend/ts7/checker.js +7 -0
  497. package/dist/frontend/ts7/checker.js.map +1 -1
  498. package/dist/frontend/ts7/lib-diagnostics.d.ts +24 -0
  499. package/dist/frontend/ts7/lib-diagnostics.js +307 -0
  500. package/dist/frontend/ts7/lib-diagnostics.js.map +1 -0
  501. package/dist/frontend/ts7/lib-diagnostics.test.d.ts +1 -0
  502. package/dist/frontend/ts7/lib-diagnostics.test.js +199 -0
  503. package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -0
  504. package/dist/frontend/ts7/program-host.d.ts +7 -0
  505. package/dist/frontend/ts7/program-host.js +25 -2
  506. package/dist/frontend/ts7/program-host.js.map +1 -1
  507. package/dist/frontend/ts7/session.d.ts +14 -1
  508. package/dist/frontend/ts7/session.js +22 -0
  509. package/dist/frontend/ts7/session.js.map +1 -1
  510. package/dist/frontend/type-mapper.d.ts +13 -1
  511. package/dist/frontend/type-mapper.js +191 -11
  512. package/dist/frontend/type-mapper.js.map +1 -1
  513. package/dist/index.d.ts +0 -5
  514. package/dist/index.js +34 -4
  515. package/dist/index.js.map +1 -1
  516. package/dist/ir/analysis.js +5 -3
  517. package/dist/ir/analysis.js.map +1 -1
  518. package/dist/ir/array-length-stability.d.ts +4 -0
  519. package/dist/ir/array-length-stability.js +19 -6
  520. package/dist/ir/array-length-stability.js.map +1 -1
  521. package/dist/ir/array-length-stability.test.js +24 -0
  522. package/dist/ir/array-length-stability.test.js.map +1 -1
  523. package/dist/ir/builtin-effects.d.ts +7 -0
  524. package/dist/ir/builtin-effects.js +52 -0
  525. package/dist/ir/builtin-effects.js.map +1 -1
  526. package/dist/ir/builtin-signatures.d.ts +6 -4
  527. package/dist/ir/builtin-signatures.js +166 -13
  528. package/dist/ir/builtin-signatures.js.map +1 -1
  529. package/dist/ir/callback-specialization.d.ts +2 -1
  530. package/dist/ir/callback-specialization.js +23 -18
  531. package/dist/ir/callback-specialization.js.map +1 -1
  532. package/dist/ir/char-unit-locals.d.ts +19 -0
  533. package/dist/ir/char-unit-locals.js +185 -0
  534. package/dist/ir/char-unit-locals.js.map +1 -0
  535. package/dist/ir/char-unit-locals.test.d.ts +1 -0
  536. package/dist/ir/char-unit-locals.test.js +94 -0
  537. package/dist/ir/char-unit-locals.test.js.map +1 -0
  538. package/dist/ir/final-fields.d.ts +2 -1
  539. package/dist/ir/final-fields.js +14 -16
  540. package/dist/ir/final-fields.js.map +1 -1
  541. package/dist/ir/function-references.d.ts +2 -0
  542. package/dist/ir/function-references.js +2 -0
  543. package/dist/ir/function-references.js.map +1 -1
  544. package/dist/ir/function-references.test.js +3 -0
  545. package/dist/ir/function-references.test.js.map +1 -1
  546. package/dist/ir/initializer-bindings.d.ts +2 -1
  547. package/dist/ir/initializer-bindings.js +27 -20
  548. package/dist/ir/initializer-bindings.js.map +1 -1
  549. package/dist/ir/int32-arrays.d.ts +108 -0
  550. package/dist/ir/int32-arrays.js +831 -0
  551. package/dist/ir/int32-arrays.js.map +1 -0
  552. package/dist/ir/int32-slots.d.ts +24 -2
  553. package/dist/ir/int32-slots.js +259 -57
  554. package/dist/ir/int32-slots.js.map +1 -1
  555. package/dist/ir/integer-loops.d.ts +3 -3
  556. package/dist/ir/integer-loops.js +14 -6
  557. package/dist/ir/integer-loops.js.map +1 -1
  558. package/dist/ir/integer-loops.test.js +10 -0
  559. package/dist/ir/integer-loops.test.js.map +1 -1
  560. package/dist/ir/integer-ranges.d.ts +5 -0
  561. package/dist/ir/integer-ranges.js +125 -12
  562. package/dist/ir/integer-ranges.js.map +1 -1
  563. package/dist/ir/integer-ranges.test.js +30 -0
  564. package/dist/ir/integer-ranges.test.js.map +1 -1
  565. package/dist/ir/ir.d.ts +70 -7
  566. package/dist/ir/ir.js +58 -1
  567. package/dist/ir/ir.js.map +1 -1
  568. package/dist/ir/ir.test.js +21 -1
  569. package/dist/ir/ir.test.js.map +1 -1
  570. package/dist/ir/js-ic.d.ts +19 -2
  571. package/dist/ir/js-ic.js +95 -11
  572. package/dist/ir/js-ic.js.map +1 -1
  573. package/dist/ir/js-ic.test.js +188 -0
  574. package/dist/ir/js-ic.test.js.map +1 -1
  575. package/dist/ir/node-index.d.ts +57 -0
  576. package/dist/ir/node-index.js +215 -0
  577. package/dist/ir/node-index.js.map +1 -0
  578. package/dist/ir/paired-while-loops.d.ts +25 -0
  579. package/dist/ir/paired-while-loops.js +335 -0
  580. package/dist/ir/paired-while-loops.js.map +1 -0
  581. package/dist/ir/paired-while-loops.test.d.ts +1 -0
  582. package/dist/ir/paired-while-loops.test.js +163 -0
  583. package/dist/ir/paired-while-loops.test.js.map +1 -0
  584. package/dist/ir/parameter-versions.d.ts +25 -0
  585. package/dist/ir/parameter-versions.js +300 -0
  586. package/dist/ir/parameter-versions.js.map +1 -0
  587. package/dist/ir/runtime-features.d.ts +34 -13
  588. package/dist/ir/runtime-features.js +152 -38
  589. package/dist/ir/runtime-features.js.map +1 -1
  590. package/dist/ir/serialize.d.ts +12 -2
  591. package/dist/ir/serialize.js +16 -3
  592. package/dist/ir/serialize.js.map +1 -1
  593. package/dist/ir/serialize.test.js +17 -0
  594. package/dist/ir/serialize.test.js.map +1 -1
  595. package/dist/ir/traverse.js +18 -6
  596. package/dist/ir/traverse.js.map +1 -1
  597. package/dist/ir/validate.js +122 -36
  598. package/dist/ir/validate.js.map +1 -1
  599. package/dist/library/ir-policy.js +2 -0
  600. package/dist/library/ir-policy.js.map +1 -1
  601. package/dist/native/cache.d.ts +6 -1
  602. package/dist/native/cache.js +28 -5
  603. package/dist/native/cache.js.map +1 -1
  604. package/dist/native/cache.test.js +16 -2
  605. package/dist/native/cache.test.js.map +1 -1
  606. package/dist/native/cli.js +21 -1
  607. package/dist/native/cli.js.map +1 -1
  608. package/dist/native/compiler.js +8 -6
  609. package/dist/native/compiler.js.map +1 -1
  610. package/dist/native/executable-cache.d.ts +1 -1
  611. package/dist/native/executable-cache.js +2 -2
  612. package/dist/native/executable-cache.js.map +1 -1
  613. package/dist/native/prepare.d.ts +3 -1
  614. package/dist/native/prepare.js +119 -31
  615. package/dist/native/prepare.js.map +1 -1
  616. package/dist/native/prepare.test.js +78 -18
  617. package/dist/native/prepare.test.js.map +1 -1
  618. package/dist/native/sanitizer.test.js +2 -0
  619. package/dist/native/sanitizer.test.js.map +1 -1
  620. package/dist/native/text-file.d.ts +13 -3
  621. package/dist/native/text-file.js +63 -9
  622. package/dist/native/text-file.js.map +1 -1
  623. package/dist/native/text-file.test.d.ts +1 -0
  624. package/dist/native/text-file.test.js +49 -0
  625. package/dist/native/text-file.test.js.map +1 -0
  626. package/dist/native/toolchain.js +4 -4
  627. package/dist/native/toolchain.js.map +1 -1
  628. package/dist/native/toolchain.test.js +3 -3
  629. package/dist/native/toolchain.test.js.map +1 -1
  630. package/package.json +21 -21
  631. package/shims/chalk/v5.ts +688 -0
  632. package/shims/hono-node-server/v2.ts +645 -0
  633. package/shims/hot-shots/client.ts +1126 -0
  634. package/shims/hot-shots/v8-unix-dgram.ts +8 -0
  635. package/shims/hot-shots/v8.ts +8 -0
  636. package/surface-manifest.json +26 -4
@@ -0,0 +1,307 @@
1
+ /* The semantic diagnostics of the declaration files scriptc supplies (the
2
+ * TypeScript libs and scriptc's own declaration files), reused across
3
+ * builds. Checking them is most of the full check of a small program. When
4
+ * no other file of a program can change what checking those files reports
5
+ * (every one is a module without global or module augmentations, or a
6
+ * script declaring no global name the supplied files declare), the answer
7
+ * depends only on the checker, the compiler options and the files
8
+ * themselves, so a stored answer for the same three stands in for checking
9
+ * them again: the server checks only the program's other files
10
+ * (getDiagnosticsOfCheckedFiles), and the semantic diagnostics merge in the
11
+ * order the full check sorts them, by file name. An answer is stored only
12
+ * when the full check reports no global diagnostics: the global diagnostics
13
+ * of checking the other files are then the full check's. */
14
+ import { createHash } from "node:crypto";
15
+ import { statSync } from "node:fs";
16
+ import { NodeFlags, SyntaxKind } from "./enums.js";
17
+ import { walkPreorder } from "./ast.js";
18
+ const SCHEMA = "scriptc.lib-diagnostics.v1";
19
+ let configured = null;
20
+ /** Has later builds of this process reuse the diagnostics of the supplied
21
+ * declaration files through `store`, for the checker identified by
22
+ * `checker` (its executable's identity), or stop reusing them (null). */
23
+ export function setLibDiagnosticsStore(store, checker = "") {
24
+ configured = store === null ? null : { store, checker };
25
+ }
26
+ /** A checker executable's identity for the stored diagnostics' key: its
27
+ * path and file identity, or the path alone when it cannot be read. */
28
+ export function checkerExecutableIdentity(path) {
29
+ try {
30
+ const info = statSync(path);
31
+ return JSON.stringify([path, info.size, info.mtimeMs, info.ino]);
32
+ }
33
+ catch {
34
+ return JSON.stringify([path]);
35
+ }
36
+ }
37
+ /** The program's semantic and global diagnostics as the full check reports
38
+ * them, using stored diagnostics for the supplied declaration files; null
39
+ * when they cannot be reused for this program (then the caller asks for
40
+ * them as before). `supplied` tells whether a program file is one of the
41
+ * supplied declaration files. */
42
+ export function reusedLibDiagnostics(program, fileNames, supplied, sourceFile) {
43
+ if (configured === null || process.env["SCRIPTC_LIB_DIAGNOSTICS"] === "0")
44
+ return null;
45
+ const { store, checker } = configured;
46
+ const libs = [];
47
+ const own = [];
48
+ for (const name of fileNames)
49
+ (supplied(name) ? libs : own).push(name);
50
+ if (libs.length === 0)
51
+ return null;
52
+ // The global names each of the program's scripts declares; a module that
53
+ // declares nothing global contributes none.
54
+ const scripts = [];
55
+ for (const name of own) {
56
+ const file = sourceFile(name);
57
+ if (file === undefined)
58
+ return null;
59
+ if (file.externalModuleIndicator !== undefined) {
60
+ if (!declaresNothingGlobal(file))
61
+ return null;
62
+ continue;
63
+ }
64
+ const names = isJsFileName(name) ? null : scriptGlobalNames(file);
65
+ if (names === null)
66
+ return null;
67
+ scripts.push(names);
68
+ }
69
+ // A script's globals cannot change what the supplied files report unless
70
+ // one of them is also a global the supplied files declare.
71
+ const collides = (globals) => scripts.some((names) => [...names].some((name) => globals.has(name)));
72
+ // The options without the configuration file's path: it names where the
73
+ // project is, which checking the supplied files does not read (the files a
74
+ // project's location brings in are part of the key).
75
+ const options = { ...program.getCompilerOptions(), configFilePath: undefined };
76
+ const key = entryKey(checker, options, libs);
77
+ if (key === null)
78
+ return null;
79
+ const stored = readEntry(store, key, libs);
80
+ if (stored !== null && !collides(stored.globals)) {
81
+ const checked = program.checkedFileDiagnosticData(own);
82
+ if (checked === null)
83
+ return null;
84
+ const byFile = new Map(stored.files);
85
+ own.forEach((name, index) => byFile.set(name, checked.files[index] ?? []));
86
+ return { semantic: inFileOrder(byFile), global: checked.global };
87
+ }
88
+ // The full check, as before. Its answers for the supplied files are stored
89
+ // when it reports no global diagnostics and the program's scripts declare
90
+ // none of the supplied files' globals (so nothing of the program reached
91
+ // what those files report).
92
+ const global = program.diagnosticData("getGlobalDiagnostics");
93
+ const semantic = program.diagnosticData("getSemanticDiagnostics");
94
+ // A server that cannot check only some files could never use the answer.
95
+ if (global.length === 0 && stored === null && program.checkedFileDiagnosticData([]) !== null) {
96
+ const globals = suppliedGlobalNames(libs, sourceFile);
97
+ if (globals !== null && !collides(globals)) {
98
+ const files = {};
99
+ for (const name of libs)
100
+ files[name] = program.diagnosticData("getSemanticDiagnostics", name);
101
+ try {
102
+ store.write(key, JSON.stringify({ schema: SCHEMA, globals: [...globals], files }));
103
+ }
104
+ catch {
105
+ // Best effort: a failed write is a later miss.
106
+ }
107
+ }
108
+ }
109
+ return { semantic, global };
110
+ }
111
+ /** Whether a file cannot add to or change the global declarations the
112
+ * supplied files declare: a module with no `declare global`, no module
113
+ * augmentation and no UMD `export as namespace` declaration. */
114
+ function declaresNothingGlobal(file) {
115
+ if (file.externalModuleIndicator === undefined)
116
+ return false;
117
+ if (file.moduleAugmentations.length > 0)
118
+ return false;
119
+ for (const statement of file.statements.nodes) {
120
+ if (statement.kind === SyntaxKind.NamespaceExportDeclaration)
121
+ return false;
122
+ // `declare global` (a module declaration named by the identifier `global`).
123
+ if (statement.kind === SyntaxKind.ModuleDeclaration &&
124
+ statement.name?.kind === SyntaxKind.Identifier &&
125
+ statement.name.text === "global")
126
+ return false;
127
+ }
128
+ return true;
129
+ }
130
+ function isJsFileName(name) {
131
+ return /\.[cm]?jsx?$/.test(name);
132
+ }
133
+ /** The names a script file declares in the global scope: its top-level
134
+ * declarations, and the `var` and function declarations of its top-level
135
+ * blocks; null when it declares an ambient module (`declare module "x"`),
136
+ * which can merge with one the supplied files declare. Over-approximates:
137
+ * a name more only makes the stored answer apply less often. */
138
+ function scriptGlobalNames(file) {
139
+ const names = new Set();
140
+ let ambientModule = false;
141
+ walkPreorder(file, (node) => {
142
+ if (node === file)
143
+ return undefined;
144
+ if (node.kind === SyntaxKind.ModuleDeclaration && node.name?.kind === SyntaxKind.StringLiteral)
145
+ ambientModule = true;
146
+ const topLevel = node.parent === file;
147
+ if (topLevel || node.kind === SyntaxKind.FunctionDeclaration)
148
+ addDeclaredNames(node, names);
149
+ else if (node.kind === SyntaxKind.VariableDeclarationList &&
150
+ (node.flags & NodeFlags.BlockScoped) === 0)
151
+ for (const declaration of node.declarations?.nodes ?? [])
152
+ addBindingNames(declaration.name, names);
153
+ // Functions, classes and namespaces have scopes of their own.
154
+ return GLOBAL_SCOPE_BOUNDARIES.has(node.kind) ? "skip" : undefined;
155
+ });
156
+ return ambientModule ? null : names;
157
+ }
158
+ /** The global names the supplied files declare: the declarations of their
159
+ * scripts (as scriptGlobalNames finds them, with ambient modules as their
160
+ * quoted names) and those of the `declare global` blocks of their modules;
161
+ * null when one of them is not available. */
162
+ function suppliedGlobalNames(libs, sourceFile) {
163
+ const names = new Set();
164
+ for (const name of libs) {
165
+ const file = sourceFile(name);
166
+ if (file === undefined)
167
+ return null;
168
+ if (file.externalModuleIndicator === undefined) {
169
+ walkPreorder(file, (node) => {
170
+ if (node === file)
171
+ return undefined;
172
+ if (node.kind === SyntaxKind.ModuleDeclaration &&
173
+ node.name?.kind === SyntaxKind.StringLiteral)
174
+ names.add(JSON.stringify(node.name.text ?? ""));
175
+ if (node.parent === file || node.kind === SyntaxKind.FunctionDeclaration)
176
+ addDeclaredNames(node, names);
177
+ else if (node.kind === SyntaxKind.VariableDeclarationList &&
178
+ (node.flags & NodeFlags.BlockScoped) === 0)
179
+ for (const declaration of node.declarations?.nodes ?? [])
180
+ addBindingNames(declaration.name, names);
181
+ return GLOBAL_SCOPE_BOUNDARIES.has(node.kind) ? "skip" : undefined;
182
+ });
183
+ continue;
184
+ }
185
+ for (const statement of file.statements.nodes) {
186
+ if (statement.kind !== SyntaxKind.ModuleDeclaration ||
187
+ statement.name?.kind !== SyntaxKind.Identifier ||
188
+ statement.name.text !== "global")
189
+ continue;
190
+ for (const inner of statement.body?.statements?.nodes ?? [])
191
+ addDeclaredNames(inner, names);
192
+ }
193
+ }
194
+ return names;
195
+ }
196
+ const GLOBAL_SCOPE_BOUNDARIES = new Set([
197
+ SyntaxKind.FunctionDeclaration,
198
+ SyntaxKind.FunctionExpression,
199
+ SyntaxKind.ArrowFunction,
200
+ SyntaxKind.MethodDeclaration,
201
+ SyntaxKind.Constructor,
202
+ SyntaxKind.GetAccessor,
203
+ SyntaxKind.SetAccessor,
204
+ SyntaxKind.ClassDeclaration,
205
+ SyntaxKind.ClassExpression,
206
+ SyntaxKind.ModuleDeclaration,
207
+ ]);
208
+ /** The names a statement declares in the scope it is in. */
209
+ function addDeclaredNames(node, names) {
210
+ switch (node.kind) {
211
+ case SyntaxKind.VariableStatement:
212
+ for (const declaration of node.declarationList?.declarations?.nodes ?? [])
213
+ addBindingNames(declaration.name, names);
214
+ return;
215
+ case SyntaxKind.FunctionDeclaration:
216
+ case SyntaxKind.ClassDeclaration:
217
+ case SyntaxKind.InterfaceDeclaration:
218
+ case SyntaxKind.TypeAliasDeclaration:
219
+ case SyntaxKind.EnumDeclaration:
220
+ case SyntaxKind.ModuleDeclaration:
221
+ case SyntaxKind.ImportEqualsDeclaration:
222
+ if (node.name?.kind === SyntaxKind.Identifier)
223
+ names.add(node.name.text ?? "");
224
+ return;
225
+ }
226
+ }
227
+ function addBindingNames(name, names) {
228
+ if (name === undefined)
229
+ return;
230
+ if (name.kind === SyntaxKind.Identifier) {
231
+ names.add(name.text ?? "");
232
+ return;
233
+ }
234
+ // Object and array binding patterns.
235
+ for (const element of name.elements?.nodes ?? [])
236
+ addBindingNames(element.name, names);
237
+ }
238
+ /** The stored diagnostics' key: the checker, the compiler options and the
239
+ * supplied files in program order with each one's file identity; null when
240
+ * one of them cannot be read. */
241
+ function entryKey(checker, options, libs) {
242
+ const files = [];
243
+ for (const name of libs) {
244
+ try {
245
+ const info = statSync(name);
246
+ files.push([name, info.size, info.mtimeMs, info.ino]);
247
+ }
248
+ catch {
249
+ return null;
250
+ }
251
+ }
252
+ return createHash("sha256")
253
+ .update(JSON.stringify({ schema: SCHEMA, checker, options, files }))
254
+ .digest("hex");
255
+ }
256
+ function readEntry(store, key, libs) {
257
+ let text;
258
+ try {
259
+ text = store.read(key);
260
+ }
261
+ catch {
262
+ return null;
263
+ }
264
+ if (text === null)
265
+ return null;
266
+ let entry;
267
+ try {
268
+ entry = JSON.parse(text);
269
+ }
270
+ catch {
271
+ return null;
272
+ }
273
+ if (entry.schema !== SCHEMA || entry.files === undefined || !Array.isArray(entry.globals))
274
+ return null;
275
+ const files = new Map();
276
+ for (const name of libs) {
277
+ const list = entry.files[name];
278
+ if (!Array.isArray(list))
279
+ return null;
280
+ files.set(name, list);
281
+ }
282
+ return { files, globals: new Set(entry.globals.filter((name) => typeof name === "string")) };
283
+ }
284
+ /** Each file's diagnostics (already in the checker's order) in the order the
285
+ * checker sorts files: by file name, compared by code point. */
286
+ function inFileOrder(byFile) {
287
+ const names = [...byFile.keys()].sort(compareCodePoints);
288
+ const out = [];
289
+ for (const name of names)
290
+ for (const d of byFile.get(name))
291
+ out.push(d);
292
+ return out;
293
+ }
294
+ function compareCodePoints(a, b) {
295
+ let i = 0;
296
+ let j = 0;
297
+ while (i < a.length && j < b.length) {
298
+ const x = a.codePointAt(i);
299
+ const y = b.codePointAt(j);
300
+ if (x !== y)
301
+ return x < y ? -1 : 1;
302
+ i += x > 0xffff ? 2 : 1;
303
+ j += y > 0xffff ? 2 : 1;
304
+ }
305
+ return i < a.length ? 1 : j < b.length ? -1 : 0;
306
+ }
307
+ //# sourceMappingURL=lib-diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib-diagnostics.js","sourceRoot":"","sources":["../../../src/frontend/ts7/lib-diagnostics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,199 @@
1
+ import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { afterAll, afterEach, expect, test } from "vitest";
5
+ import { reusedLibDiagnostics, setLibDiagnosticsStore, } from "./lib-diagnostics.js";
6
+ import { closeSourceParser, parseSourceFile } from "./source-parser-node.js";
7
+ const dir = mkdtempSync(join(tmpdir(), "scriptc-lib-diagnostics-"));
8
+ const lib = join(dir, "lib.es5.d.ts");
9
+ const fallback = join(dir, "scriptc-node-fallback.d.ts");
10
+ const libText = "declare var NaN: number;\ninterface Array<T> { length: number }\n";
11
+ const fallbackText = "export {};\ndeclare global {\n var process: { argv: string[] };\n}\n";
12
+ writeFileSync(lib, libText);
13
+ writeFileSync(fallback, fallbackText);
14
+ const main = join(dir, "main.ts");
15
+ const util = join(dir, "\u{1F600}.ts");
16
+ const other = join(dir, "�.ts");
17
+ afterEach(() => setLibDiagnosticsStore(null));
18
+ afterAll(() => {
19
+ closeSourceParser();
20
+ rmSync(dir, { recursive: true, force: true });
21
+ });
22
+ function memoryStore() {
23
+ const entries = new Map();
24
+ return {
25
+ entries,
26
+ read: (key) => entries.get(key) ?? null,
27
+ write: (key, text) => void entries.set(key, text),
28
+ };
29
+ }
30
+ function diagnostic(fileName, pos, code = 2322) {
31
+ return { fileName, pos, end: pos + 1, code, category: 1, text: `at ${pos}` };
32
+ }
33
+ /** A session program whose full-check and checked-file answers are given; it
34
+ * records which requests it was asked. */
35
+ function sessionProgram(answers) {
36
+ const asked = [];
37
+ const all = [...answers.semantic.values()].flat();
38
+ return {
39
+ asked,
40
+ getCompilerOptions: () => ({ strict: true }),
41
+ diagnosticData: (method, file) => {
42
+ asked.push(file === undefined ? method : `${method} ${file}`);
43
+ if (method === "getGlobalDiagnostics")
44
+ return answers.global ?? [];
45
+ return file === undefined ? all : (answers.semantic.get(file) ?? []);
46
+ },
47
+ checkedFileDiagnosticData: (files) => {
48
+ asked.push(`checked ${files.join(",")}`);
49
+ if (answers.checked === false)
50
+ return null;
51
+ return { files: files.map((file) => answers.semantic.get(file) ?? []), global: [] };
52
+ },
53
+ };
54
+ }
55
+ /** The program's files, parsed: the supplied two and the given others. */
56
+ function files(texts) {
57
+ const parsed = new Map([
58
+ [lib, parseSourceFile(lib, libText, "ts")],
59
+ [fallback, parseSourceFile(fallback, fallbackText, "ts")],
60
+ ]);
61
+ for (const [name, text] of Object.entries(texts))
62
+ parsed.set(name, parseSourceFile(name, text, "ts"));
63
+ return (name) => parsed.get(name);
64
+ }
65
+ const names = [lib, fallback, main];
66
+ const supplied = (name) => name === lib || name === fallback;
67
+ const moduleFile = files({ [main]: "export const n: number = 'x';\n" });
68
+ test("without a store the full check answers", () => {
69
+ const program = sessionProgram({ semantic: new Map() });
70
+ expect(reusedLibDiagnostics(program, names, supplied, moduleFile)).toBeNull();
71
+ expect(program.asked).toEqual([]);
72
+ });
73
+ test("a stored answer stands in for checking the supplied files, merged by file name", () => {
74
+ const store = memoryStore();
75
+ setLibDiagnosticsStore(store, "checker");
76
+ const semantic = new Map([
77
+ [lib, [diagnostic(lib, 1)]],
78
+ [fallback, []],
79
+ [main, [diagnostic(main, 5), diagnostic(main, 9)]],
80
+ ]);
81
+ const first = sessionProgram({ semantic });
82
+ const full = reusedLibDiagnostics(first, names, supplied, moduleFile);
83
+ // The first build runs the full check and stores the supplied files' answers.
84
+ expect(first.asked).toEqual([
85
+ "getGlobalDiagnostics",
86
+ "getSemanticDiagnostics",
87
+ "checked ",
88
+ `getSemanticDiagnostics ${lib}`,
89
+ `getSemanticDiagnostics ${fallback}`,
90
+ ]);
91
+ expect(store.entries.size).toBe(1);
92
+ const second = sessionProgram({ semantic });
93
+ const reused = reusedLibDiagnostics(second, names, supplied, moduleFile);
94
+ expect(second.asked).toEqual([`checked ${main}`]);
95
+ // The files' diagnostics in the order of their names (lib.es5.d.ts, main.ts), as the full answer.
96
+ expect(reused).toEqual({
97
+ semantic: [diagnostic(lib, 1), diagnostic(main, 5), diagnostic(main, 9)],
98
+ global: [],
99
+ });
100
+ expect(full?.semantic).toEqual(reused?.semantic);
101
+ });
102
+ test("files merge in code point order, which differs from UTF-16 order", () => {
103
+ const store = memoryStore();
104
+ setLibDiagnosticsStore(store, "checker");
105
+ const all = [lib, fallback, util, other];
106
+ const sources = files({ [util]: "export {};\n", [other]: "export {};\n" });
107
+ const semantic = new Map([
108
+ [util, [diagnostic(util, 1)]],
109
+ [other, [diagnostic(other, 2)]],
110
+ ]);
111
+ reusedLibDiagnostics(sessionProgram({ semantic }), all, supplied, sources);
112
+ const reused = reusedLibDiagnostics(sessionProgram({ semantic }), all, supplied, sources);
113
+ // U+FFFD sorts before U+1F600 by code point (its surrogates sort after it by UTF-16 unit).
114
+ expect(reused?.semantic).toEqual([diagnostic(other, 2), diagnostic(util, 1)]);
115
+ });
116
+ test("a full check with global diagnostics is not stored", () => {
117
+ const store = memoryStore();
118
+ setLibDiagnosticsStore(store, "checker");
119
+ const program = sessionProgram({
120
+ semantic: new Map([[main, [diagnostic(main, 1)]]]),
121
+ global: [diagnostic(undefined, 0, 2318)],
122
+ });
123
+ expect(reusedLibDiagnostics(program, names, supplied, moduleFile)?.global).toEqual([
124
+ diagnostic(undefined, 0, 2318),
125
+ ]);
126
+ expect(store.entries.size).toBe(0);
127
+ });
128
+ test("scripts reuse the answer unless they declare a global the supplied files declare", () => {
129
+ const store = memoryStore();
130
+ setLibDiagnosticsStore(store, "checker");
131
+ const semantic = new Map([[main, []]]);
132
+ // A script declaring only new names: it stores the answer, and a later one reuses it.
133
+ const fresh = files({
134
+ [main]: "const total = 1;\nfunction run() {}\nif (total) { var later = 2; }\n",
135
+ });
136
+ reusedLibDiagnostics(sessionProgram({ semantic }), names, supplied, fresh);
137
+ expect(store.entries.size).toBe(1);
138
+ const again = sessionProgram({ semantic });
139
+ expect(reusedLibDiagnostics(again, names, supplied, fresh)).not.toBeNull();
140
+ expect(again.asked).toEqual([`checked ${main}`]);
141
+ // Scripts declaring a supplied global, at the top level, in a block, in a
142
+ // `declare global` of a supplied module, or an ambient module: the full check.
143
+ for (const text of [
144
+ "interface Array<T> { extra: T }\n",
145
+ "if (true) { var NaN = 1; }\n",
146
+ "declare var process: unknown;\n",
147
+ 'declare module "fs" {}\n',
148
+ ]) {
149
+ const program = sessionProgram({ semantic });
150
+ const result = reusedLibDiagnostics(program, names, supplied, files({ [main]: text }));
151
+ expect(program.asked[0], text).not.toBe(`checked ${main}`);
152
+ if (result !== null)
153
+ expect(program.asked[0]).toBe("getGlobalDiagnostics");
154
+ }
155
+ expect(store.entries.size).toBe(1);
156
+ });
157
+ test("a program whose script declares a supplied global does not store its answer", () => {
158
+ const store = memoryStore();
159
+ setLibDiagnosticsStore(store, "checker");
160
+ const program = sessionProgram({ semantic: new Map([[main, []]]) });
161
+ reusedLibDiagnostics(program, names, supplied, files({ [main]: "declare var NaN: number;\n" }));
162
+ expect(store.entries.size).toBe(0);
163
+ });
164
+ test("modules that can declare something global, and servers without the method, ask as before", () => {
165
+ const store = memoryStore();
166
+ setLibDiagnosticsStore(store, "checker");
167
+ const semantic = new Map([[main, []]]);
168
+ reusedLibDiagnostics(sessionProgram({ semantic }), names, supplied, moduleFile);
169
+ expect(store.entries.size).toBe(1);
170
+ for (const text of [
171
+ "export {};\ndeclare global { var extra: number }\n",
172
+ 'export {};\ndeclare module "./other" { const extra: number }\n',
173
+ "export as namespace Lib;\nexport const n = 1;\n",
174
+ ]) {
175
+ const program = sessionProgram({ semantic });
176
+ expect(reusedLibDiagnostics(program, names, supplied, files({ [main]: text }))).toBeNull();
177
+ expect(program.asked).toEqual([]);
178
+ }
179
+ const old = sessionProgram({ semantic, checked: false });
180
+ expect(reusedLibDiagnostics(old, names, supplied, moduleFile)).toBeNull();
181
+ // Nor does a server without the method store an answer it could not use.
182
+ const fresh = memoryStore();
183
+ setLibDiagnosticsStore(fresh, "checker");
184
+ reusedLibDiagnostics(sessionProgram({ semantic, checked: false }), names, supplied, moduleFile);
185
+ expect(fresh.entries.size).toBe(0);
186
+ });
187
+ test("a supplied file that changes is a different entry", () => {
188
+ const store = memoryStore();
189
+ setLibDiagnosticsStore(store, "checker");
190
+ const semantic = new Map([[main, []]]);
191
+ reusedLibDiagnostics(sessionProgram({ semantic }), names, supplied, moduleFile);
192
+ writeFileSync(fallback, fallbackText + "// edited\n");
193
+ const program = sessionProgram({ semantic });
194
+ reusedLibDiagnostics(program, names, supplied, moduleFile);
195
+ expect(program.asked[0]).toBe("getGlobalDiagnostics");
196
+ expect(store.entries.size).toBe(2);
197
+ writeFileSync(fallback, fallbackText);
198
+ });
199
+ //# sourceMappingURL=lib-diagnostics.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib-diagnostics.test.js","sourceRoot":"","sources":["../../../src/frontend/ts7/lib-diagnostics.test.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import type { Diagnostic, SourceFileMetadata } from "./semantic-types.js";
6
6
  import type { SourceFile } from "./ast-types.js";
7
7
  import type { Ts7ProjectCompilerOptions, Ts7SessionProject as Project, Ts7SessionSnapshot as Snapshot } from "./session.js";
8
8
  import { CheckerFacade } from "./checker.js";
9
+ import type { Ts7DiagnosticData } from "./session-schema.generated.js";
9
10
  /** The compiler options our createProgram accepts: TS7's CompilerOptions
10
11
  * shape (numeric enums for target/module/moduleResolution — the enums module
11
12
  * generates them from the pinned SDK) with the 5.9.3 "lib.es2025.d.ts" lib
@@ -104,6 +105,12 @@ export declare class Ts7Program {
104
105
  getProgramDiagnostics(): readonly Diagnostic[];
105
106
  getConfigFileParsingDiagnostics(): readonly Diagnostic[];
106
107
  getSourceFileMetadata(fileName: string): SourceFileMetadata | undefined;
108
+ /** The semantic and global diagnostics with the stored diagnostics of the
109
+ * declaration files scriptc supplies (lib-diagnostics.ts), or null. */
110
+ reusedLibDiagnostics(): {
111
+ semantic: Ts7DiagnosticData[];
112
+ global: Ts7DiagnosticData[];
113
+ } | null;
107
114
  isSourceFileDefaultLibrary(file: SourceFile): boolean;
108
115
  isSourceFileFromExternalLibrary(file: SourceFile): boolean;
109
116
  dispose(): void;
@@ -23,6 +23,9 @@ import { jsxOptionName, moduleDetectionKindName, moduleKindName, moduleResolutio
23
23
  import { tsgoPath } from "./session-path.js";
24
24
  import { trackedAccessibleEntries, trackedDirectoryExists, trackedFileExists, trackedReadFile, trackedRealpath, } from "../input-tracker.js";
25
25
  import { packageShimDeclarationText } from "../package-shims.js";
26
+ import { ambientDtsPath, fallbackDtsPath, overridesDtsPath } from "../dts-paths.js";
27
+ import { reusedLibDiagnostics } from "./lib-diagnostics.js";
28
+ import { ts7Diagnostic } from "./diagnostic.js";
26
29
  /* tsconfig JSON wants enum NAMES; the options object carries TS7's numeric
27
30
  * enum values. Generated name lookups preserve the SDK's reverse mappings
28
31
  * without materializing enum objects in the native compiler. */
@@ -321,6 +324,15 @@ export class Ts7Program {
321
324
  getSourceFileMetadata(fileName) {
322
325
  return this.project.program.getSourceFileMetadata(resolve(fileName));
323
326
  }
327
+ /** The semantic and global diagnostics with the stored diagnostics of the
328
+ * declaration files scriptc supplies (lib-diagnostics.ts), or null. */
329
+ reusedLibDiagnostics() {
330
+ this.snapshot.ensureActive();
331
+ const program = this.project.program;
332
+ const declarations = new Set([ambientDtsPath(), overridesDtsPath(), fallbackDtsPath()]);
333
+ return reusedLibDiagnostics(program, this.getSourceFileNames(), (name) => declarations.has(tsgoPath(name)) ||
334
+ program.getSourceFileMetadataByPath(name)?.isDefaultLibrary === true, (name) => this.getSourceFile(name));
335
+ }
324
336
  isSourceFileDefaultLibrary(file) {
325
337
  return this.project.program.isSourceFileDefaultLibrary(file);
326
338
  }
@@ -351,9 +363,20 @@ export class Ts7Program {
351
363
  * package dropped the aggregate). Order mirrors 5.9.3: config, options/
352
364
  * program, global, syntactic, semantic. */
353
365
  export function getPreEmitDiagnostics(program) {
366
+ const config = program.getConfigFileParsingDiagnostics();
367
+ const options = program.getProgramDiagnostics();
368
+ const reused = program.reusedLibDiagnostics();
369
+ if (reused !== null)
370
+ return [
371
+ ...config,
372
+ ...options,
373
+ ...reused.global.map(ts7Diagnostic),
374
+ ...program.getSyntacticDiagnostics(),
375
+ ...reused.semantic.map(ts7Diagnostic),
376
+ ];
354
377
  return [
355
- ...program.getConfigFileParsingDiagnostics(),
356
- ...program.getProgramDiagnostics(),
378
+ ...config,
379
+ ...options,
357
380
  ...program.getGlobalDiagnostics(),
358
381
  ...program.getSyntacticDiagnostics(),
359
382
  ...program.getSemanticDiagnostics(),