@scriptc/compiler 0.0.34 → 0.0.36

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 (424) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +7 -6
  2. package/dist/backend/build-cache.d.ts +44 -0
  3. package/dist/backend/build-cache.js +241 -0
  4. package/dist/backend/build-cache.js.map +1 -0
  5. package/dist/backend/{emission/emit-async.d.ts → c/async.d.ts} +21 -30
  6. package/dist/backend/{emission/emit-async.js → c/async.js} +270 -286
  7. package/dist/backend/c/async.js.map +1 -0
  8. package/dist/backend/{emission/emitter.d.ts → c/c-emitter.d.ts} +6 -23
  9. package/dist/backend/{emission/emitter.js → c/c-emitter.js} +53 -107
  10. package/dist/backend/c/c-emitter.js.map +1 -0
  11. package/dist/backend/c/exprs.d.ts +8 -0
  12. package/dist/backend/c/exprs.js +7913 -0
  13. package/dist/backend/c/exprs.js.map +1 -0
  14. package/dist/backend/{emission/emit-island.d.ts → c/island.d.ts} +5 -5
  15. package/dist/backend/{emission/emit-island.js → c/island.js} +24 -22
  16. package/dist/backend/c/island.js.map +1 -0
  17. package/dist/backend/{emission → c}/may-throw.d.ts +1 -1
  18. package/dist/backend/{emission → c}/may-throw.js +1 -1
  19. package/dist/backend/c/may-throw.js.map +1 -0
  20. package/dist/backend/{emission/emit-shapes.d.ts → c/shapes.d.ts} +19 -19
  21. package/dist/backend/{emission/emit-shapes.js → c/shapes.js} +78 -87
  22. package/dist/backend/c/shapes.js.map +1 -0
  23. package/dist/backend/{emission/emit-stmts.d.ts → c/stmts.d.ts} +12 -12
  24. package/dist/backend/{emission/emit-stmts.js → c/stmts.js} +377 -343
  25. package/dist/backend/c/stmts.js.map +1 -0
  26. package/dist/backend/{emission/emit-types.d.ts → c/types.d.ts} +1 -1
  27. package/dist/backend/{emission/emit-types.js → c/types.js} +42 -286
  28. package/dist/backend/c/types.js.map +1 -0
  29. package/dist/backend/c/types.test.js +25 -0
  30. package/dist/backend/c/types.test.js.map +1 -0
  31. package/dist/backend/{emission/emit-walkers.d.ts → c/walkers.d.ts} +19 -41
  32. package/dist/backend/{emission/emit-walkers.js → c/walkers.js} +238 -298
  33. package/dist/backend/c/walkers.js.map +1 -0
  34. package/dist/backend/ffi-callbacks.d.ts +1 -1
  35. package/dist/backend/ffi-callbacks.js +4 -3
  36. package/dist/backend/ffi-callbacks.js.map +1 -1
  37. package/dist/backend/{library-identity.d.ts → library-identity-markers.d.ts} +0 -4
  38. package/dist/backend/{library-identity.js → library-identity-markers.js} +10 -9
  39. package/dist/backend/library-identity-markers.js.map +1 -0
  40. package/dist/backend/llvm/blocks.d.ts +4 -0
  41. package/dist/backend/llvm/blocks.js +29 -0
  42. package/dist/backend/llvm/blocks.js.map +1 -1
  43. package/dist/backend/llvm/classes.d.ts +2 -19
  44. package/dist/backend/llvm/classes.js +20 -52
  45. package/dist/backend/llvm/classes.js.map +1 -1
  46. package/dist/backend/llvm/common.d.ts +4 -0
  47. package/dist/backend/llvm/common.js +27 -0
  48. package/dist/backend/llvm/common.js.map +1 -0
  49. package/dist/backend/llvm/dyn.d.ts +3 -8
  50. package/dist/backend/llvm/dyn.js +152 -224
  51. package/dist/backend/llvm/dyn.js.map +1 -1
  52. package/dist/backend/llvm/emitter.d.ts +4 -1
  53. package/dist/backend/llvm/emitter.js +514 -9981
  54. package/dist/backend/llvm/emitter.js.map +1 -1
  55. package/dist/backend/llvm/expr-async.d.ts +4 -0
  56. package/dist/backend/llvm/expr-async.js +726 -0
  57. package/dist/backend/llvm/expr-async.js.map +1 -0
  58. package/dist/backend/llvm/expr-bytes.d.ts +13 -0
  59. package/dist/backend/llvm/expr-bytes.js +456 -0
  60. package/dist/backend/llvm/expr-bytes.js.map +1 -0
  61. package/dist/backend/llvm/expr-callbacks.d.ts +22 -0
  62. package/dist/backend/llvm/expr-callbacks.js +520 -0
  63. package/dist/backend/llvm/expr-callbacks.js.map +1 -0
  64. package/dist/backend/llvm/expr-calls.d.ts +2 -0
  65. package/dist/backend/llvm/expr-calls.js +618 -0
  66. package/dist/backend/llvm/expr-calls.js.map +1 -0
  67. package/dist/backend/llvm/expr-containers.d.ts +25 -0
  68. package/dist/backend/llvm/expr-containers.js +623 -0
  69. package/dist/backend/llvm/expr-containers.js.map +1 -0
  70. package/dist/backend/llvm/expr-context.d.ts +255 -0
  71. package/dist/backend/llvm/expr-context.js +2 -0
  72. package/dist/backend/llvm/expr-context.js.map +1 -0
  73. package/dist/backend/llvm/expr-control.d.ts +2 -0
  74. package/dist/backend/llvm/expr-control.js +473 -0
  75. package/dist/backend/llvm/expr-control.js.map +1 -0
  76. package/dist/backend/llvm/expr-dispatch.d.ts +4 -0
  77. package/dist/backend/llvm/expr-dispatch.js +151 -0
  78. package/dist/backend/llvm/expr-dispatch.js.map +1 -0
  79. package/dist/backend/llvm/expr-dynamic.d.ts +2 -0
  80. package/dist/backend/llvm/expr-dynamic.js +810 -0
  81. package/dist/backend/llvm/expr-dynamic.js.map +1 -0
  82. package/dist/backend/llvm/expr-island.d.ts +15 -0
  83. package/dist/backend/llvm/expr-island.js +690 -0
  84. package/dist/backend/llvm/expr-island.js.map +1 -0
  85. package/dist/backend/llvm/expr-primitives.d.ts +6 -0
  86. package/dist/backend/llvm/expr-primitives.js +622 -0
  87. package/dist/backend/llvm/expr-primitives.js.map +1 -0
  88. package/dist/backend/llvm/expr-records.d.ts +9 -0
  89. package/dist/backend/llvm/expr-records.js +299 -0
  90. package/dist/backend/llvm/expr-records.js.map +1 -0
  91. package/dist/backend/llvm/expr-stream-bridges.d.ts +13 -0
  92. package/dist/backend/llvm/expr-stream-bridges.js +396 -0
  93. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -0
  94. package/dist/backend/llvm/expr-stream-callbacks.d.ts +12 -0
  95. package/dist/backend/llvm/expr-stream-callbacks.js +360 -0
  96. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -0
  97. package/dist/backend/llvm/lib-dispatch.d.ts +5 -0
  98. package/dist/backend/llvm/lib-dispatch.js +267 -0
  99. package/dist/backend/llvm/lib-dispatch.js.map +1 -0
  100. package/dist/backend/llvm/lib-filesystem.d.ts +6 -0
  101. package/dist/backend/llvm/lib-filesystem.js +594 -0
  102. package/dist/backend/llvm/lib-filesystem.js.map +1 -0
  103. package/dist/backend/llvm/lib-network.d.ts +2 -0
  104. package/dist/backend/llvm/lib-network.js +429 -0
  105. package/dist/backend/llvm/lib-network.js.map +1 -0
  106. package/dist/backend/llvm/lib-process.d.ts +5 -0
  107. package/dist/backend/llvm/lib-process.js +585 -0
  108. package/dist/backend/llvm/lib-process.js.map +1 -0
  109. package/dist/backend/llvm/lib-shared.d.ts +6 -0
  110. package/dist/backend/llvm/lib-shared.js +687 -0
  111. package/dist/backend/llvm/lib-shared.js.map +1 -0
  112. package/dist/backend/llvm/lib-stream.d.ts +2 -0
  113. package/dist/backend/llvm/lib-stream.js +470 -0
  114. package/dist/backend/llvm/lib-stream.js.map +1 -0
  115. package/dist/backend/llvm/shapes.d.ts +12 -2
  116. package/dist/backend/llvm/shapes.js +66 -307
  117. package/dist/backend/llvm/shapes.js.map +1 -1
  118. package/dist/backend/llvm/shapes.test.js +52 -0
  119. package/dist/backend/llvm/shapes.test.js.map +1 -0
  120. package/dist/backend/llvm/split.d.ts +43 -0
  121. package/dist/backend/llvm/split.js +227 -0
  122. package/dist/backend/llvm/split.js.map +1 -0
  123. package/dist/backend/llvm/split.test.d.ts +1 -0
  124. package/dist/backend/llvm/split.test.js +102 -0
  125. package/dist/backend/llvm/split.test.js.map +1 -0
  126. package/dist/backend/llvm/unsupported.d.ts +1 -1
  127. package/dist/backend/llvm/walkers.d.ts +2 -3
  128. package/dist/backend/llvm/walkers.js +164 -218
  129. package/dist/backend/llvm/walkers.js.map +1 -1
  130. package/dist/backend/native-codegen.d.ts +38 -0
  131. package/dist/backend/native-codegen.js +261 -0
  132. package/dist/backend/native-codegen.js.map +1 -0
  133. package/dist/backend/native-codegen.test.d.ts +1 -0
  134. package/dist/backend/native-codegen.test.js +188 -0
  135. package/dist/backend/native-codegen.test.js.map +1 -0
  136. package/dist/backend/native-link-info.d.ts +96 -0
  137. package/dist/backend/native-link-info.js +219 -0
  138. package/dist/backend/native-link-info.js.map +1 -0
  139. package/dist/backend/native-link-info.test.d.ts +1 -0
  140. package/dist/backend/native-link-info.test.js +134 -0
  141. package/dist/backend/native-link-info.test.js.map +1 -0
  142. package/dist/backend/{cc.d.ts → native-toolchain.d.ts} +139 -47
  143. package/dist/backend/{cc.js → native-toolchain.js} +1008 -910
  144. package/dist/backend/native-toolchain.js.map +1 -0
  145. package/dist/backend/native-toolchain.test.d.ts +1 -0
  146. package/dist/backend/{cc-cache.test.js → native-toolchain.test.js} +1297 -127
  147. package/dist/backend/native-toolchain.test.js.map +1 -0
  148. package/dist/backend/object-localize.js +1 -1
  149. package/dist/backend/object-localize.test.js +20 -0
  150. package/dist/backend/object-localize.test.js.map +1 -1
  151. package/dist/backend/runtime-abi.d.ts +10 -0
  152. package/dist/backend/runtime-abi.js +11 -0
  153. package/dist/backend/runtime-abi.js.map +1 -0
  154. package/dist/backend/runtime-pack.d.ts +137 -0
  155. package/dist/backend/runtime-pack.js +400 -0
  156. package/dist/backend/runtime-pack.js.map +1 -0
  157. package/dist/backend/runtime-pack.test.d.ts +1 -0
  158. package/dist/backend/runtime-pack.test.js +438 -0
  159. package/dist/backend/runtime-pack.test.js.map +1 -0
  160. package/dist/backend/targets.d.ts +30 -0
  161. package/dist/backend/targets.js +46 -0
  162. package/dist/backend/targets.js.map +1 -0
  163. package/dist/backend/targets.test.d.ts +1 -0
  164. package/dist/backend/targets.test.js +19 -0
  165. package/dist/backend/targets.test.js.map +1 -0
  166. package/dist/backend/vendor-archives.d.ts +41 -0
  167. package/dist/backend/vendor-archives.js +462 -0
  168. package/dist/backend/vendor-archives.js.map +1 -0
  169. package/dist/compat/fetch-profile.d.ts +0 -1
  170. package/dist/compat/fetch-profile.js +0 -1
  171. package/dist/compat/fetch-profile.js.map +1 -1
  172. package/dist/coverage/report.js +3 -3
  173. package/dist/coverage/report.js.map +1 -1
  174. package/dist/coverage/surface-manifest.js +25 -32
  175. package/dist/coverage/surface-manifest.js.map +1 -1
  176. package/dist/diagnostics/diagnostic.d.ts +11 -12
  177. package/dist/diagnostics/diagnostic.js +19 -17
  178. package/dist/diagnostics/diagnostic.js.map +1 -1
  179. package/dist/diagnostics/render.d.ts +1 -1
  180. package/dist/diagnostics/render.js +1 -1
  181. package/dist/diagnostics/render.js.map +1 -1
  182. package/dist/errors.d.ts +5 -0
  183. package/dist/errors.js +9 -0
  184. package/dist/errors.js.map +1 -0
  185. package/dist/executable/executable-cache.d.ts +86 -0
  186. package/dist/executable/executable-cache.js +398 -0
  187. package/dist/executable/executable-cache.js.map +1 -0
  188. package/dist/executable/executable-cache.test.d.ts +1 -0
  189. package/dist/executable/executable-cache.test.js +300 -0
  190. package/dist/executable/executable-cache.test.js.map +1 -0
  191. package/dist/ffi/{profile.d.ts → ffi-manifest.d.ts} +7 -2
  192. package/dist/ffi/{profile.js → ffi-manifest.js} +2 -1
  193. package/dist/ffi/ffi-manifest.js.map +1 -0
  194. package/dist/frontend/builtin-modules.d.ts +21 -0
  195. package/dist/frontend/builtin-modules.js +82 -0
  196. package/dist/frontend/builtin-modules.js.map +1 -0
  197. package/dist/frontend/cjs-lexer.d.ts +7 -0
  198. package/dist/frontend/cjs-lexer.js +15 -17
  199. package/dist/frontend/cjs-lexer.js.map +1 -1
  200. package/dist/frontend/dts-paths.d.ts +26 -0
  201. package/dist/frontend/dts-paths.js +41 -0
  202. package/dist/frontend/dts-paths.js.map +1 -0
  203. package/dist/frontend/input-tracker.d.ts +0 -2
  204. package/dist/frontend/input-tracker.js +1 -4
  205. package/dist/frontend/input-tracker.js.map +1 -1
  206. package/dist/frontend/lib-contract.d.ts +1 -5
  207. package/dist/frontend/lib-contract.js +1 -1
  208. package/dist/frontend/lib-contract.js.map +1 -1
  209. package/dist/frontend/lib-exports.d.ts +1 -1
  210. package/dist/frontend/lowering/call-position.d.ts +4 -0
  211. package/dist/frontend/lowering/call-position.js +7 -0
  212. package/dist/frontend/lowering/call-position.js.map +1 -0
  213. package/dist/frontend/lowering/callback-arg.d.ts +20 -0
  214. package/dist/frontend/lowering/callback-arg.js +44 -0
  215. package/dist/frontend/lowering/callback-arg.js.map +1 -0
  216. package/dist/frontend/lowering/lib-boundary.d.ts +1 -1
  217. package/dist/frontend/lowering/lib-boundary.js +34 -34
  218. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  219. package/dist/frontend/lowering/lower-assert.d.ts +3 -3
  220. package/dist/frontend/lowering/lower-assert.js +214 -241
  221. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  222. package/dist/frontend/lowering/lower-builtins.d.ts +74 -146
  223. package/dist/frontend/lowering/lower-builtins.js +1126 -1234
  224. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  225. package/dist/frontend/lowering/lower-calls.d.ts +56 -188
  226. package/dist/frontend/lowering/lower-calls.js +1409 -1494
  227. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  228. package/dist/frontend/lowering/lower-classes.d.ts +62 -125
  229. package/dist/frontend/lowering/lower-classes.js +832 -866
  230. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  231. package/dist/frontend/lowering/lower-comptime.d.ts +5 -12
  232. package/dist/frontend/lowering/lower-comptime.js +32 -31
  233. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  234. package/dist/frontend/lowering/lower-containers.d.ts +35 -135
  235. package/dist/frontend/lowering/lower-containers.js +1394 -1715
  236. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  237. package/dist/frontend/lowering/lower-dgram.d.ts +3 -7
  238. package/dist/frontend/lowering/lower-dgram.js +97 -111
  239. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  240. package/dist/frontend/lowering/lower-enums.d.ts +4 -4
  241. package/dist/frontend/lowering/lower-enums.js +30 -30
  242. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  243. package/dist/frontend/lowering/{lower-emitter.d.ts → lower-event-emitter.d.ts} +7 -18
  244. package/dist/frontend/lowering/{lower-emitter.js → lower-event-emitter.js} +172 -174
  245. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -0
  246. package/dist/frontend/lowering/lower-expando.d.ts +5 -5
  247. package/dist/frontend/lowering/lower-expando.js +40 -40
  248. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  249. package/dist/frontend/lowering/lower-exprs.d.ts +56 -264
  250. package/dist/frontend/lowering/lower-exprs.js +1644 -1704
  251. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  252. package/dist/frontend/lowering/lower-generators.d.ts +6 -6
  253. package/dist/frontend/lowering/lower-generators.js +73 -72
  254. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  255. package/dist/frontend/lowering/lower-inspect.d.ts +5 -17
  256. package/dist/frontend/lowering/lower-inspect.js +236 -238
  257. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  258. package/dist/frontend/lowering/lower-island.d.ts +34 -45
  259. package/dist/frontend/lowering/lower-island.js +440 -511
  260. package/dist/frontend/lowering/lower-island.js.map +1 -1
  261. package/dist/frontend/lowering/lower-mixins.d.ts +7 -10
  262. package/dist/frontend/lowering/lower-mixins.js +86 -86
  263. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  264. package/dist/frontend/lowering/lower-modules.d.ts +12 -18
  265. package/dist/frontend/lowering/lower-modules.js +284 -283
  266. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  267. package/dist/frontend/lowering/lower-namespaces.d.ts +23 -49
  268. package/dist/frontend/lowering/lower-namespaces.js +123 -115
  269. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  270. package/dist/frontend/lowering/lower-server.d.ts +18 -25
  271. package/dist/frontend/lowering/lower-server.js +899 -899
  272. package/dist/frontend/lowering/lower-server.js.map +1 -1
  273. package/dist/frontend/lowering/lower-stmts.d.ts +30 -149
  274. package/dist/frontend/lowering/lower-stmts.js +1176 -1229
  275. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  276. package/dist/frontend/lowering/lower-stream.d.ts +12 -12
  277. package/dist/frontend/lowering/lower-stream.js +300 -301
  278. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  279. package/dist/frontend/lowering/lower-test.d.ts +5 -5
  280. package/dist/frontend/lowering/lower-test.js +82 -82
  281. package/dist/frontend/lowering/lower-test.js.map +1 -1
  282. package/dist/frontend/lowering/lowerer.d.ts +66 -20
  283. package/dist/frontend/lowering/lowerer.js +421 -198
  284. package/dist/frontend/lowering/lowerer.js.map +1 -1
  285. package/dist/frontend/lowering/pairs-snapshot.d.ts +11 -0
  286. package/dist/frontend/lowering/pairs-snapshot.js +85 -0
  287. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -0
  288. package/dist/frontend/lowering/static-this.d.ts +6 -0
  289. package/dist/frontend/lowering/static-this.js +24 -0
  290. package/dist/frontend/lowering/static-this.js.map +1 -0
  291. package/dist/frontend/lowering/surfaces.d.ts +14 -33
  292. package/dist/frontend/lowering/surfaces.js +64 -64
  293. package/dist/frontend/lowering/surfaces.js.map +1 -1
  294. package/dist/frontend/npm-static-rewrite.js +6 -28
  295. package/dist/frontend/npm-static-rewrite.js.map +1 -1
  296. package/dist/frontend/npm-static.d.ts +0 -10
  297. package/dist/frontend/npm-static.js +4 -7
  298. package/dist/frontend/npm-static.js.map +1 -1
  299. package/dist/frontend/npm.d.ts +0 -24
  300. package/dist/frontend/npm.js +11 -85
  301. package/dist/frontend/npm.js.map +1 -1
  302. package/dist/frontend/program.d.ts +3 -1
  303. package/dist/frontend/program.js +51 -17
  304. package/dist/frontend/program.js.map +1 -1
  305. package/dist/frontend/provenance-registry.d.ts +0 -2
  306. package/dist/frontend/provenance-registry.js +0 -10
  307. package/dist/frontend/provenance-registry.js.map +1 -1
  308. package/dist/frontend/provenance.js +4 -7
  309. package/dist/frontend/provenance.js.map +1 -1
  310. package/dist/frontend/resolve.d.ts +7 -2
  311. package/dist/frontend/resolve.js +12 -17
  312. package/dist/frontend/resolve.js.map +1 -1
  313. package/dist/frontend/resolve.test.d.ts +1 -0
  314. package/dist/frontend/resolve.test.js +29 -0
  315. package/dist/frontend/resolve.test.js.map +1 -0
  316. package/dist/frontend/ts7/adapter.d.ts +2 -2
  317. package/dist/frontend/ts7/adapter.js +1 -1
  318. package/dist/frontend/ts7/adapter.js.map +1 -1
  319. package/dist/frontend/ts7/checker.d.ts +40 -2
  320. package/dist/frontend/ts7/checker.js +182 -54
  321. package/dist/frontend/ts7/checker.js.map +1 -1
  322. package/dist/frontend/ts7/enums.js +2 -1
  323. package/dist/frontend/ts7/enums.js.map +1 -1
  324. package/dist/frontend/ts7/{program.js → program-adapter.js} +7 -6
  325. package/dist/frontend/ts7/program-adapter.js.map +1 -0
  326. package/dist/frontend/ts7/world-check.d.ts +1 -3
  327. package/dist/frontend/ts7/world-check.js +3 -1
  328. package/dist/frontend/ts7/world-check.js.map +1 -1
  329. package/dist/frontend/tsc-codes.d.ts +8 -0
  330. package/dist/frontend/tsc-codes.js +109 -0
  331. package/dist/frontend/tsc-codes.js.map +1 -0
  332. package/dist/frontend/{types.d.ts → type-mapper.d.ts} +2 -25
  333. package/dist/frontend/{types.js → type-mapper.js} +31 -52
  334. package/dist/frontend/type-mapper.js.map +1 -0
  335. package/dist/frontend/workspace-registry.d.ts +26 -0
  336. package/dist/frontend/workspace-registry.js +71 -0
  337. package/dist/frontend/workspace-registry.js.map +1 -0
  338. package/dist/index.d.ts +115 -30
  339. package/dist/index.js +650 -146
  340. package/dist/index.js.map +1 -1
  341. package/dist/ir/analysis.d.ts +37 -0
  342. package/dist/ir/analysis.js +118 -0
  343. package/dist/ir/analysis.js.map +1 -0
  344. package/dist/ir/analysis.test.d.ts +1 -0
  345. package/dist/ir/analysis.test.js +21 -0
  346. package/dist/ir/analysis.test.js.map +1 -0
  347. package/dist/ir/build.d.ts +9 -0
  348. package/dist/ir/build.js +33 -0
  349. package/dist/ir/build.js.map +1 -0
  350. package/dist/ir/integer-loops.d.ts +1 -1
  351. package/dist/ir/{nodes.d.ts → ir.d.ts} +60 -26
  352. package/dist/ir/{nodes.js → ir.js} +173 -141
  353. package/dist/ir/ir.js.map +1 -0
  354. package/dist/ir/ir.test.d.ts +1 -0
  355. package/dist/ir/ir.test.js +17 -0
  356. package/dist/ir/ir.test.js.map +1 -0
  357. package/dist/ir/serialize.d.ts +1 -1
  358. package/dist/ir/serialize.js +2 -1
  359. package/dist/ir/serialize.js.map +1 -1
  360. package/dist/ir/validate.d.ts +1 -1
  361. package/dist/ir/validate.js +16 -5
  362. package/dist/ir/validate.js.map +1 -1
  363. package/dist/library/cache-primitives.d.ts +24 -0
  364. package/dist/library/cache-primitives.js +83 -0
  365. package/dist/library/cache-primitives.js.map +1 -0
  366. package/dist/library/cache-reset.test.d.ts +1 -0
  367. package/dist/library/cache-reset.test.js +47 -0
  368. package/dist/library/cache-reset.test.js.map +1 -0
  369. package/dist/library/compiler-self-identity.d.ts +23 -0
  370. package/dist/library/compiler-self-identity.js +84 -0
  371. package/dist/library/compiler-self-identity.js.map +1 -0
  372. package/dist/library/fence-eval.d.ts +3 -1
  373. package/dist/library/fence-eval.js +5 -1
  374. package/dist/library/fence-eval.js.map +1 -1
  375. package/dist/library/int-infer.d.ts +1 -36
  376. package/dist/library/int-infer.js +17 -17
  377. package/dist/library/int-infer.js.map +1 -1
  378. package/dist/library/{early-cache.d.ts → library-cache.d.ts} +1 -1
  379. package/dist/library/{early-cache.js → library-cache.js} +37 -111
  380. package/dist/library/library-cache.js.map +1 -0
  381. package/dist/library/library-cache.test.d.ts +1 -0
  382. package/dist/library/{early-cache.test.js → library-cache.test.js} +2 -2
  383. package/dist/library/library-cache.test.js.map +1 -0
  384. package/dist/library/{profile.d.ts → library-profile.d.ts} +4 -7
  385. package/dist/library/{profile.js → library-profile.js} +18 -11
  386. package/dist/library/library-profile.js.map +1 -0
  387. package/dist/library/semantic-source.js +2 -1
  388. package/dist/library/semantic-source.js.map +1 -1
  389. package/dist/library/sidecar.d.ts +5 -2
  390. package/dist/library/sidecar.js +11 -5
  391. package/dist/library/sidecar.js.map +1 -1
  392. package/dist/startup-cache.d.ts +6 -0
  393. package/dist/startup-cache.js +6 -0
  394. package/dist/startup-cache.js.map +1 -0
  395. package/package.json +7 -2
  396. package/surface-manifest.json +1 -1
  397. package/dist/backend/cc-cache.test.js.map +0 -1
  398. package/dist/backend/cc.js.map +0 -1
  399. package/dist/backend/emission/emit-async.js.map +0 -1
  400. package/dist/backend/emission/emit-exprs.d.ts +0 -13
  401. package/dist/backend/emission/emit-exprs.js +0 -7407
  402. package/dist/backend/emission/emit-exprs.js.map +0 -1
  403. package/dist/backend/emission/emit-island.js.map +0 -1
  404. package/dist/backend/emission/emit-shapes.js.map +0 -1
  405. package/dist/backend/emission/emit-stmts.js.map +0 -1
  406. package/dist/backend/emission/emit-types.js.map +0 -1
  407. package/dist/backend/emission/emit-walkers.js.map +0 -1
  408. package/dist/backend/emission/emitter.js.map +0 -1
  409. package/dist/backend/emission/may-throw.js.map +0 -1
  410. package/dist/backend/library-identity.js.map +0 -1
  411. package/dist/ffi/profile.js.map +0 -1
  412. package/dist/frontend/lowering/lower-emitter.js.map +0 -1
  413. package/dist/frontend/shared.d.ts +0 -82
  414. package/dist/frontend/shared.js +0 -308
  415. package/dist/frontend/shared.js.map +0 -1
  416. package/dist/frontend/ts7/program.js.map +0 -1
  417. package/dist/frontend/types.js.map +0 -1
  418. package/dist/ir/nodes.js.map +0 -1
  419. package/dist/library/early-cache.js.map +0 -1
  420. package/dist/library/early-cache.test.js.map +0 -1
  421. package/dist/library/profile.js.map +0 -1
  422. /package/dist/backend/{cc-cache.test.d.ts → c/types.test.d.ts} +0 -0
  423. /package/dist/{library/early-cache.test.d.ts → backend/llvm/shapes.test.d.ts} +0 -0
  424. /package/dist/frontend/ts7/{program.d.ts → program-adapter.d.ts} +0 -0
@@ -0,0 +1,134 @@
1
+ import { mkdtemp, writeFile } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { describe, expect, test } from "vitest";
5
+ import { loadFfiProfile } from "../ffi/ffi-manifest.js";
6
+ import { createNativeLinkInfo } from "./native-link-info.js";
7
+ import { MACOS_ARM64_TARGET } from "./targets.js";
8
+ const BASE = {
9
+ dynamic: false,
10
+ regex: false,
11
+ copying: false,
12
+ textDecoderLegacy: false,
13
+ fileHandle: false,
14
+ fetch: false,
15
+ netIsland: false,
16
+ zlib: false,
17
+ assert: false,
18
+ inspect: false,
19
+ dynInvoke: false,
20
+ dc: false,
21
+ dynAsync: false,
22
+ events: false,
23
+ emitter: false,
24
+ symbol: false,
25
+ searchParams: false,
26
+ qs: false,
27
+ parseArgs: false,
28
+ stream: false,
29
+ net: false,
30
+ http: false,
31
+ http2: false,
32
+ dgram: false,
33
+ watch: false,
34
+ foreignFfi: false,
35
+ nodeTest: false,
36
+ tls: false,
37
+ tlsCa: false,
38
+ };
39
+ describe("native link info recipes", () => {
40
+ test("feature source sets reproduce runtime and vendor gates", async () => {
41
+ const info = await createNativeLinkInfo({
42
+ programObject: "/out/app.o",
43
+ target: MACOS_ARM64_TARGET,
44
+ features: {
45
+ ...BASE,
46
+ dynamic: true,
47
+ regex: true,
48
+ inspect: true,
49
+ zlib: true,
50
+ tls: true,
51
+ },
52
+ ffi: null,
53
+ });
54
+ const runtime = info.runtime_pack.source_sets.find((set) => set.name === "runtime");
55
+ expect(runtime.sources).toEqual(expect.arrayContaining([
56
+ "src/scr_regex.c",
57
+ "src/scr_assert.c",
58
+ "src/scr_inspect.c",
59
+ "src/scr_zlib.c",
60
+ "src/scr_zlib_island.c",
61
+ "src/scr_tls.c",
62
+ "src/scr_tls_ca.c",
63
+ "src/scr_island.c",
64
+ "src/scr_web.c",
65
+ "src/scr_inspect_island.c",
66
+ ]));
67
+ expect(info.runtime_pack.source_sets.map((set) => set.name)).toEqual([
68
+ "runtime", "quickjs", "mbedtls",
69
+ ]);
70
+ expect(info.runtime_pack.source_sets.find((set) => set.name === "mbedtls").sources.length)
71
+ .toBeGreaterThan(100);
72
+ expect(info.link.system_libraries).toEqual(["System", "z", "m"]);
73
+ });
74
+ test("dev object recipes keep runtime optimization in lockstep", async () => {
75
+ const info = await createNativeLinkInfo({
76
+ programObject: "/out/app.o",
77
+ target: MACOS_ARM64_TARGET,
78
+ features: BASE,
79
+ ffi: null,
80
+ optimization: "dev",
81
+ });
82
+ expect(info.runtime_pack.source_sets[0]?.c_flags).toContain("-O0");
83
+ expect(info.runtime_pack.source_sets[0]?.c_flags).not.toContain("-O2");
84
+ // External objects are compiled separately and the driver recipe is an
85
+ // executable link. The two halves must not leak into each other's recipe.
86
+ expect(info.runtime_pack.source_sets[0]?.c_flags).not.toContain("-Wl,-dead_strip");
87
+ expect(info.link.driver_flags).toContain("-Wl,-dead_strip");
88
+ });
89
+ test("static external-object links dead-strip just like dynamic links", async () => {
90
+ const info = await createNativeLinkInfo({
91
+ programObject: "/out/app.o",
92
+ target: MACOS_ARM64_TARGET,
93
+ features: BASE,
94
+ ffi: null,
95
+ });
96
+ expect(info.link.driver_flags).toContain("-Wl,-dead_strip");
97
+ });
98
+ test("FFI symbols and resolved inputs remain ordered before the runtime", async () => {
99
+ const dir = await mkdtemp(join(tmpdir(), "scriptc-native-link-info-unit-"));
100
+ const library = join(dir, "native.o");
101
+ const manifest = join(dir, "ffi.json");
102
+ await writeFile(library, "fixture");
103
+ await writeFile(manifest, JSON.stringify({
104
+ ffi_format: 1,
105
+ functions: [{
106
+ name: "nativeScale",
107
+ symbol: "native_scale",
108
+ params: ["f64"],
109
+ returns: "f64",
110
+ }],
111
+ libraries: ["./native.o"],
112
+ system_libraries: ["sqlite3"],
113
+ }));
114
+ const loaded = loadFfiProfile(manifest);
115
+ if (!loaded.ok)
116
+ throw new Error(loaded.diagnostics[0]?.message);
117
+ const info = await createNativeLinkInfo({
118
+ programObject: "/out/app.o",
119
+ target: MACOS_ARM64_TARGET,
120
+ features: BASE,
121
+ ffi: loaded.profile,
122
+ });
123
+ expect(info.ffi).toEqual({
124
+ format: 1,
125
+ symbols: ["native_scale"],
126
+ libraries: [library],
127
+ });
128
+ expect(info.link.input_order.slice(0, 3)).toEqual([
129
+ "/out/app.o", library, "runtime/*.o",
130
+ ]);
131
+ expect(info.link.system_libraries).toEqual(["sqlite3", "System"]);
132
+ });
133
+ });
134
+ //# sourceMappingURL=native-link-info.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-link-info.test.js","sourceRoot":"","sources":["../../src/backend/native-link-info.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,30 @@
1
+ export { buildCacheRoot, prepareBuildCacheRoot, pruneBuildCache, resolveBuildCacheRoot, } from "./build-cache.js";
2
+ export declare const EXECUTABLE_RUNTIME_SOURCES: readonly ["scr_number.c", "scr_string.c", "scr_array.c", "scr_bytes.c", "scr_bytes_io.c", "scr_map.c", "scr_closure.c", "scr_ffi.c", "scr_object.c", "scr_union.c", "scr_exception.c", "scr_error.c", "scr_console.c", "scr_lib.c", "scr_path.c", "scr_url.c", "scr_json.c", "scr_async.c", "scr_child.c", "scr_cycle.c"];
3
+ /**
4
+ * Per-executable section-elimination recipe. This belongs beside the native
5
+ * driver rather than a particular build path: one-shot compilation, cached
6
+ * runtime objects, external object recipes, and runtime packs must all agree
7
+ * on what their final executable linker is allowed to discard.
8
+ *
9
+ * Archives and compile-only object/library recipes deliberately do not use
10
+ * the link half. In particular, `--lib` preserves its established object and
11
+ * archive contract; section GC is an executable-link optimization only.
12
+ */
13
+ export declare function executableSectionEliminationFlags(platform: string): {
14
+ compile: string[];
15
+ link: string[];
16
+ };
1
17
  export interface ToolchainEnvironmentCachePolicy {
2
18
  completeArtifacts: boolean;
3
19
  runtimeObjects: boolean;
4
20
  }
5
21
  export declare function toolchainEnvironmentCachePolicy(env?: NodeJS.ProcessEnv): ToolchainEnvironmentCachePolicy;
6
22
  export declare function toolchainEnvironmentFingerprint(env?: NodeJS.ProcessEnv): string;
23
+ /** Inputs that can change which native tool/runtime implementation an
24
+ * executable build selects before compileC has a chance to rediscover it.
25
+ * The early whole-program cache keys this exact posture before restoring a
26
+ * final binary; compileC retains its deeper inode/content validation. */
27
+ export declare function executableNativeEnvironmentFingerprint(env?: NodeJS.ProcessEnv): Promise<string>;
7
28
  export interface CcOptions {
8
29
  /** Path of the generated (or hand-written) program TU: a .c file, or the
9
30
  * LLVM backend's .ll — clang compiles IR text natively on the same
@@ -18,6 +39,19 @@ export interface CcOptions {
18
39
  * top-level bytes alone can safely represent. scriptc's frontend supplies
19
40
  * this for its generated C/LLVM IR; `--from-c` deliberately does not. */
20
41
  cacheIdentity?: string;
42
+ /** Native optimization posture. Release preserves the historical -O2
43
+ * executable lane; dev selects -O0 and may compile a caller-provided LLVM
44
+ * shard set into independently cached objects before the final link. */
45
+ optimization?: "release" | "dev";
46
+ /** Optional equivalent LLVM modules for dev compilation. Unsupported
47
+ * targets or merge failures fall back to the canonical cPath TU. */
48
+ programShards?: readonly {
49
+ name: string;
50
+ source: string;
51
+ }[];
52
+ /** Canonical externally visible definitions retained while shard merging
53
+ * demotes generated cross-shard linkage back to local symbols. */
54
+ programPublicSymbols?: readonly string[];
21
55
  /** Build with ASan + the runtime RC audit (test/debug lane). */
22
56
  sanitize?: boolean;
23
57
  /** Additional native archives/objects, appended after the generated
@@ -32,15 +66,17 @@ export interface CcOptions {
32
66
  * cached runtime objects. */
33
67
  systemLibraries?: readonly string[];
34
68
  /** Embed the dynamic-island engine (--dynamic): compiles scr_island.c,
35
- * defines SCR_DYNAMIC, and links the cached libqjs.a. Off = the static
36
- * default, byte-identical to builds predating the flag. */
69
+ * defines SCR_DYNAMIC, and links the cached libqjs.a. Off retains the
70
+ * static runtime selection; executable section GC may still remove
71
+ * unreachable static-runtime code. */
37
72
  dynamic?: boolean;
38
73
  /** The program contains a regex construct (index.ts detects it on the
39
74
  * IR): compiles scr_regex.c and links the vendored libregexp — as cached
40
75
  * standalone objects in static builds, from the engine archive under
41
76
  * --dynamic (one libregexp per binary; its host hooks want the island's
42
77
  * JSContext there). Off = regex-free: the command line is exactly the
43
- * historical one, so regex-free binaries cannot change by a byte. */
78
+ * historical runtime selection; executable section GC may remove unrelated
79
+ * unreachable code. */
44
80
  regex?: boolean;
45
81
  /** The program uses one of the copying/typed-array bridge intrinsics
46
82
  * implemented in scr_copying.c (index.ts detects them on the IR).
@@ -77,10 +113,11 @@ export interface CcOptions {
77
113
  netIsland?: boolean;
78
114
  /** The program uses zlib (index.ts detects zlib.* libCalls on the IR):
79
115
  * compiles scr_zlib.c — the regex/curl gating precedent, so zlib-free
80
- * binaries keep their exact link line. Host builds link the SYSTEM libz
81
- * (macOS ships it), byte-identical to the historical line; cross targets
82
- * compile the vendored zlib per target instead (ensureZlibObjects — zig
83
- * has no libz in its sysroots). Compressed bytes may differ between the
116
+ * binaries keep their exact link line. The default host-clang build links
117
+ * the SYSTEM libz (macOS ships it), byte-identical to the historical line;
118
+ * every Zig build compiles the vendored zlib with the selected driver instead
119
+ * (ensureZlibObjects — zig has no libz in its sysroots). Compressed bytes may
120
+ * differ between the
84
121
  * system and vendored libraries, which is why the corpus only ever
85
122
  * compares round-trips and fixed-blob inflation, never raw deflate
86
123
  * output. */
@@ -196,6 +233,17 @@ export interface CcOptions {
196
233
  * The unit also compiles whenever `tls` does — scr_tls.c consults its
197
234
  * default-set override and shared Windows-certificate enumerator. */
198
235
  tlsCa?: boolean;
236
+ /** Internal compiler hook: called only after a strict native artifact hit
237
+ * or a successful stable build has installed `outPath`. The executable
238
+ * frontend cache uses it to publish its stamp after native dependencies
239
+ * have validated; arbitrary compileC callers leave it unset. */
240
+ onArtifactReady?: (artifact: ValidatedNativeArtifact) => Promise<void>;
241
+ }
242
+ /** Native dependency proof attached to an executable frontend-cache entry.
243
+ * compileC produces this only after its strict local/CAS validation succeeds;
244
+ * the early reader replays it before restoring the final executable. */
245
+ export interface ValidatedNativeArtifact {
246
+ dependencies: NativeArtifactDependency[];
199
247
  }
200
248
  /** Structured compiler-driver failure. Most callers still let this surface
201
249
  * as an internal build error; the TypeScript compiler pipeline recognizes it
@@ -229,6 +277,10 @@ export interface CcDriver {
229
277
  /** Platform libraries appended after every object/archive input. */
230
278
  linkArgs: string[];
231
279
  }
280
+ /** Whether the selected compiler driver is Zig. This is deliberately based on
281
+ * the executable prefix rather than target presence: targetless Zig is still
282
+ * a Zig build, while target presence is only the platform/target contract. */
283
+ export declare function isZigDriver(driver: Pick<CcDriver, "argv">): boolean;
232
284
  export declare const IPHONEOS_MIN_VERSION = "15.0";
233
285
  export declare const ANDROID_MIN_API = 26;
234
286
  export declare function isIosTarget(target: string | null): boolean;
@@ -244,30 +296,19 @@ export declare function mobileLibraryTarget(env?: NodeJS.ProcessEnv): string | n
244
296
  * inspection — no discovery, no subprocess. */
245
297
  export declare function mobileTargetRefusal(target: string, hostPlatform?: NodeJS.Platform): string | null;
246
298
  export declare function resolveCc(env?: NodeJS.ProcessEnv, hostPlatform?: NodeJS.Platform): CcDriver;
247
- /** Musl intentionally has no predefined libc macro. The explicit Zig target
248
- * is therefore the source of truth for selecting its small runtime shim. */
249
- export declare function isMuslTarget(driver: Pick<CcDriver, "target">): boolean;
250
299
  /** The OS the produced binary runs on: the triple's OS under SCRIPTC_TARGET,
251
300
  * the host's otherwise — so platform-conditional link flags follow the
252
301
  * TARGET, not the machine running the compiler. Exported for compile()/
253
302
  * analyze(): the FRONTEND consults it too (path.sep / os.EOL literals and
254
303
  * the path-module binding follow the target — a win32 triple compiles
255
304
  * Node-on-Windows semantics, path.win32 backing the bare module). */
305
+ export declare function configuredTargetPlatform(env?: NodeJS.ProcessEnv, hostPlatform?: NodeJS.Platform): string;
256
306
  export declare function targetPlatform(driver: CcDriver): string;
257
307
  /** Architecture identity for host-native cache entries. Explicit cross targets
258
308
  * already name their complete target triple; native builds need the process
259
309
  * architecture too because one per-user cache can serve both native and
260
310
  * emulated processes (arm64 and Rosetta on macOS, for example). */
261
311
  export declare function cacheTargetIdentity(driver: Pick<CcDriver, "target">, hostPlatform?: NodeJS.Platform, hostArch?: string): string;
262
- /** Cross targets already carry their architecture in the explicit triple.
263
- * Host-native prerequisites need the same separation: a checkout/package can
264
- * be used by both arm64 Node and Rosetta/x64 Node on macOS. */
265
- export declare function vendorCacheTargetFlavor(driver: Pick<CcDriver, "target">, hostPlatform?: NodeJS.Platform, hostArch?: string): string;
266
- /** Vendor prerequisites live outside the content-addressed build root, so
267
- * their directory name must carry the same environment and resolved compiler
268
- * identity as the artifacts that consume them. The short digest keeps the
269
- * package-local path readable while preventing build-order contamination. */
270
- export declare function vendorCacheBuildIdentity(environmentFingerprint: string, compilerIdentity: string): string;
271
312
  export interface LibArchiveOptions {
272
313
  /** The program TU (.c or .ll — clang compiles either with -c). */
273
314
  cPath: string;
@@ -275,6 +316,17 @@ export interface LibArchiveOptions {
275
316
  * spelling. Library assembly uses this for the identity-free projection of
276
317
  * a complete caller-visible TU; its bytes drive every native cache key. */
277
318
  programSource?: string;
319
+ /** Optional equivalent LLVM modules for native compilation. The public
320
+ * `programSource` remains the canonical TU/cache identity; these stable
321
+ * shards compile independently and are relocatably merged into one program
322
+ * object before archive assembly. */
323
+ programShards?: readonly {
324
+ name: string;
325
+ source: string;
326
+ }[];
327
+ /** Canonical externally visible definitions retained while the shard merge
328
+ * demotes generated cross-shard linkage back to local symbols. */
329
+ programPublicSymbols?: readonly string[];
278
330
  /** Tiny generated C source carrying volatile library identity getters.
279
331
  * Its bytes join the complete archive key, but the source itself exists
280
332
  * only in the invocation-private build directory and the large program-
@@ -324,20 +376,14 @@ export interface LibArchiveOptions {
324
376
  textDecoderLegacy?: boolean;
325
377
  }
326
378
  export declare function compileLibArchive(opts: LibArchiveOptions): Promise<void>;
327
- /** Resolve the build cache without touching the filesystem. Exported from this
328
- * internal module so its platform and override behavior can be pinned directly. */
329
- export declare function resolveBuildCacheRoot(env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform, userHome?: string): string | null;
330
- /** Shared persistent-cache root for compiler-level tiers. The early library
331
- * cache deliberately follows the native cache's activation and hard-disable
332
- * contract, while native compilation retains ownership of toolchain safety. */
333
- export declare function buildCacheRoot(): string | null;
334
- /** Harden/create a compiler-level cache root using the same privacy policy as
335
- * the artifact caches. Failure disables only the optional caller's tier. */
336
- export declare function prepareBuildCacheRoot(root: string | null): Promise<string | null>;
337
- /** Register a successful compiler-level cache write with the shared bounded
338
- * LRU policy. */
339
- export declare function pruneBuildCache(root: string | null): Promise<void>;
340
- export declare function ccVersionOnce(argv: string[], environmentFingerprint?: string, fresh?: boolean): Promise<string>;
379
+ /** Persistent caches require an inspectable compiler driver. A general
380
+ * wrapper can branch on the real source/object paths or argument topology and
381
+ * inject inputs only into the final invocation; no synthetic metadata probe
382
+ * can safely represent that behavior. Accept direct Clang/Zig drivers (plus
383
+ * Apple's system shim) and conservatively keep wrapper-driven builds on the
384
+ * uncached path. */
385
+ export declare function compilerDriverSupportsPersistentCache(driver: Pick<CcDriver, "argv" | "targetArgs" | "target">, environmentFingerprint: string): Promise<boolean>;
386
+ export declare function ccVersion(argv: string[], environmentFingerprint?: string, fresh?: boolean): Promise<string>;
341
387
  /** Every system-header spelling consumed by a source tree scriptc owns. The
342
388
  * dependency probe preprocesses these spellings with the selected driver and
343
389
  * hashes the resolved files. Runtime-local and vendored source/header bytes
@@ -346,25 +392,71 @@ export declare function ccVersionOnce(argv: string[], environmentFingerprint?: s
346
392
  * libregexp, mbedTLS, zlib, curl, and Ryū translation units. */
347
393
  export declare function implicitDependencyProbeIncludes(rtDir: string): Promise<string[]>;
348
394
  export declare function parseLinkTraceFiles(output: string, cwd: string, excludedRoot: string, driverDryRun?: boolean): Promise<string[]>;
395
+ /** Resolve the exact files consumed by one compiler-driver link invocation.
396
+ * Runtime packs reuse the native toolchain's strict dry-run plus real linker
397
+ * trace so a PATH-selected Clang carries its own linker, SDK, compiler
398
+ * runtime, and injected inputs into the executable cache proof. */
399
+ export declare function nativeLinkerDependencyPaths(linker: string, linkArgs: readonly string[]): Promise<string[]>;
400
+ /** Reset process observations whose validity is bounded to one public native
401
+ * build. A long-lived caller may change PATH or install/remove ccache between
402
+ * invocations; the next build must probe that environment again. */
403
+ export declare function clearCcCaches(): void;
349
404
  export declare function runtimeFingerprint(rtDir: string): Promise<string>;
405
+ declare const vendorCacheTargetFlavor: (driver: Pick<CcDriver, "target">, hostPlatform?: NodeJS.Platform, hostArch?: string) => string, vendorCacheBuildIdentity: (environmentFingerprint: string, compilerIdentity: string, nativeSourceIdentity: string) => string;
406
+ export { vendorCacheBuildIdentity, vendorCacheTargetFlavor };
407
+ export interface NativeArtifactDependency {
408
+ path: string;
409
+ kind: "file" | "directory" | "symlink";
410
+ dev: number;
411
+ ino: number;
412
+ size: number;
413
+ mtimeMs: number;
414
+ ctimeMs: number;
415
+ /** Symlinks are identity-bearing paths whose target bytes also matter. */
416
+ targetPath?: string;
417
+ targetKind?: "file" | "directory";
418
+ targetDev?: number;
419
+ targetIno?: number;
420
+ targetSize?: number;
421
+ targetMtimeMs?: number;
422
+ targetCtimeMs?: number;
423
+ /** A directory's recursive namespace. This detects a new nested candidate
424
+ * that can begin shadowing an existing system/header dependency. */
425
+ treeDigest?: string;
426
+ treeExclusions?: string[];
427
+ }
428
+ /** Capture exact filesystem identities for inputs produced outside the C
429
+ * toolchain but consumed by its cache proofs. Callers carry this snapshot
430
+ * forward so later stages can prove the same inputs remained installed. */
431
+ export declare function snapshotNativeArtifactDependencies(dependencyPaths: readonly string[]): Promise<NativeArtifactDependency[]>;
432
+ export declare function nativeArtifactDependenciesStillMatch(dependencies: readonly NativeArtifactDependency[]): Promise<boolean>;
350
433
  /** Give one active link/archive operation private names for its cached
351
434
  * runtime objects. A hard link keeps the inode alive if another process's LRU
352
435
  * sweep unlinks the cache entry; filesystems that cannot hard-link across the
353
436
  * cache/tmp boundary fall back to a copy. If eviction wins before staging,
354
437
  * the caller catches the read failure and performs a fully fresh compile. */
355
438
  export declare function stageRuntimeObjects(objects: ReadonlyMap<string, string>, stageDir: string): Promise<Map<string, string>>;
356
- /** Compiles one C program together with the runtime sources.
357
- * With caching disabled, the runtime (a dozen small files) is recompiled on
358
- * every build in one historical clang invocation — no cached-archive
359
- * staleness bugs. --dynamic additionally compiles
360
- * scr_island.c under SCR_DYNAMIC and links the cached engine archive (built
361
- * lazily, see above); regex-using programs additionally compile scr_regex.c
362
- * and link libregexp (the cached objects, or the archive's own copy under
363
- * --dynamic). Without either, the command line is exactly the historical
364
- * one — regex-free static builds must stay byte-identical.
365
- *
366
- * With a caller-supplied dependency identity and an enabled cache root,
367
- * unchanged programs skip payload code generation/linking via the binary
368
- * cache after lightweight metadata probes, and misses link the program's own
369
- * TU against cached per-flavor runtime objects. */
370
439
  export declare function compileC(opts: CcOptions): Promise<void>;
440
+ export type NativeCacheWarmProfile = "runtime" | "tls" | "dynamic";
441
+ export interface WarmNativeCachesOptions {
442
+ /** Native object posture to seed. Defaults to the shipped release/-O2 lane. */
443
+ optimization?: "release" | "dev";
444
+ /** Seed ASan + RC-audit objects instead of the ordinary lane. */
445
+ sanitize?: boolean;
446
+ /** Feature families to seed. Defaults to every expensive native family. */
447
+ profiles?: readonly NativeCacheWarmProfile[];
448
+ }
449
+ export interface WarmNativeCachesResult {
450
+ cacheRoot: string;
451
+ profiles: {
452
+ profile: NativeCacheWarmProfile;
453
+ elapsedMs: number;
454
+ }[];
455
+ }
456
+ export declare function supportedNativeCacheWarmProfiles(driver: CcDriver): readonly NativeCacheWarmProfile[];
457
+ /** Populate expensive native prerequisites against the current compiler,
458
+ * target, SDK, and environment. The resulting entries use the exact same
459
+ * identities and validators as ordinary builds; this merely pays their cost
460
+ * before a developer's first program asks for them. Synthetic link products
461
+ * are discarded and never enter the complete-executable cache. */
462
+ export declare function warmNativeCaches(options?: WarmNativeCachesOptions): Promise<WarmNativeCachesResult>;