@scriptc/compiler 0.0.0 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/LICENSE +202 -0
  2. package/ambient/package.json +3 -0
  3. package/ambient/scriptc-node-fallback.d.ts +3001 -0
  4. package/ambient/scriptc-overrides.d.ts +95 -0
  5. package/ambient/scriptc.d.ts +74 -0
  6. package/dist/backend/cc.d.ts +169 -0
  7. package/dist/backend/cc.js +897 -0
  8. package/dist/backend/cc.js.map +1 -0
  9. package/dist/backend/emission/emit-async.d.ts +145 -0
  10. package/dist/backend/emission/emit-async.js +996 -0
  11. package/dist/backend/emission/emit-async.js.map +1 -0
  12. package/dist/backend/emission/emit-exprs.d.ts +3 -0
  13. package/dist/backend/emission/emit-exprs.js +5947 -0
  14. package/dist/backend/emission/emit-exprs.js.map +1 -0
  15. package/dist/backend/emission/emit-island.d.ts +45 -0
  16. package/dist/backend/emission/emit-island.js +271 -0
  17. package/dist/backend/emission/emit-island.js.map +1 -0
  18. package/dist/backend/emission/emit-shapes.d.ts +142 -0
  19. package/dist/backend/emission/emit-shapes.js +575 -0
  20. package/dist/backend/emission/emit-shapes.js.map +1 -0
  21. package/dist/backend/emission/emit-stmts.d.ts +78 -0
  22. package/dist/backend/emission/emit-stmts.js +960 -0
  23. package/dist/backend/emission/emit-stmts.js.map +1 -0
  24. package/dist/backend/emission/emit-types.d.ts +65 -0
  25. package/dist/backend/emission/emit-types.js +652 -0
  26. package/dist/backend/emission/emit-types.js.map +1 -0
  27. package/dist/backend/emission/emit-walkers.d.ts +154 -0
  28. package/dist/backend/emission/emit-walkers.js +1587 -0
  29. package/dist/backend/emission/emit-walkers.js.map +1 -0
  30. package/dist/backend/emission/emitter.d.ts +452 -0
  31. package/dist/backend/emission/emitter.js +1249 -0
  32. package/dist/backend/emission/emitter.js.map +1 -0
  33. package/dist/backend/emission/may-throw.d.ts +15 -0
  34. package/dist/backend/emission/may-throw.js +250 -0
  35. package/dist/backend/emission/may-throw.js.map +1 -0
  36. package/dist/backend/llvm/blocks.d.ts +21 -0
  37. package/dist/backend/llvm/blocks.js +68 -0
  38. package/dist/backend/llvm/blocks.js.map +1 -0
  39. package/dist/backend/llvm/classes.d.ts +84 -0
  40. package/dist/backend/llvm/classes.js +438 -0
  41. package/dist/backend/llvm/classes.js.map +1 -0
  42. package/dist/backend/llvm/dyn.d.ts +123 -0
  43. package/dist/backend/llvm/dyn.js +2624 -0
  44. package/dist/backend/llvm/dyn.js.map +1 -0
  45. package/dist/backend/llvm/emitter.d.ts +3 -0
  46. package/dist/backend/llvm/emitter.js +10087 -0
  47. package/dist/backend/llvm/emitter.js.map +1 -0
  48. package/dist/backend/llvm/shapes.d.ts +78 -0
  49. package/dist/backend/llvm/shapes.js +754 -0
  50. package/dist/backend/llvm/shapes.js.map +1 -0
  51. package/dist/backend/llvm/unsupported.d.ts +6 -0
  52. package/dist/backend/llvm/unsupported.js +12 -0
  53. package/dist/backend/llvm/unsupported.js.map +1 -0
  54. package/dist/backend/llvm/walkers.d.ts +58 -0
  55. package/dist/backend/llvm/walkers.js +793 -0
  56. package/dist/backend/llvm/walkers.js.map +1 -0
  57. package/dist/backend/mangle.d.ts +124 -0
  58. package/dist/backend/mangle.js +232 -0
  59. package/dist/backend/mangle.js.map +1 -0
  60. package/dist/coverage/report.d.ts +64 -0
  61. package/dist/coverage/report.js +226 -0
  62. package/dist/coverage/report.js.map +1 -0
  63. package/dist/diagnostics/diagnostic.d.ts +140 -0
  64. package/dist/diagnostics/diagnostic.js +458 -0
  65. package/dist/diagnostics/diagnostic.js.map +1 -0
  66. package/dist/diagnostics/render.d.ts +11 -0
  67. package/dist/diagnostics/render.js +58 -0
  68. package/dist/diagnostics/render.js.map +1 -0
  69. package/dist/frontend/cjs-lexer.d.ts +20 -0
  70. package/dist/frontend/cjs-lexer.js +813 -0
  71. package/dist/frontend/cjs-lexer.js.map +1 -0
  72. package/dist/frontend/lowering/http2-constants.d.ts +1 -0
  73. package/dist/frontend/lowering/http2-constants.js +251 -0
  74. package/dist/frontend/lowering/http2-constants.js.map +1 -0
  75. package/dist/frontend/lowering/lib-boundary.d.ts +6 -0
  76. package/dist/frontend/lowering/lib-boundary.js +143 -0
  77. package/dist/frontend/lowering/lib-boundary.js.map +1 -0
  78. package/dist/frontend/lowering/lower-assert.d.ts +18 -0
  79. package/dist/frontend/lowering/lower-assert.js +1269 -0
  80. package/dist/frontend/lowering/lower-assert.js.map +1 -0
  81. package/dist/frontend/lowering/lower-builtins.d.ts +511 -0
  82. package/dist/frontend/lowering/lower-builtins.js +5249 -0
  83. package/dist/frontend/lowering/lower-builtins.js.map +1 -0
  84. package/dist/frontend/lowering/lower-calls.d.ts +581 -0
  85. package/dist/frontend/lowering/lower-calls.js +6281 -0
  86. package/dist/frontend/lowering/lower-calls.js.map +1 -0
  87. package/dist/frontend/lowering/lower-classes.d.ts +727 -0
  88. package/dist/frontend/lowering/lower-classes.js +4701 -0
  89. package/dist/frontend/lowering/lower-classes.js.map +1 -0
  90. package/dist/frontend/lowering/lower-comptime.d.ts +53 -0
  91. package/dist/frontend/lowering/lower-comptime.js +244 -0
  92. package/dist/frontend/lowering/lower-comptime.js.map +1 -0
  93. package/dist/frontend/lowering/lower-containers.d.ts +483 -0
  94. package/dist/frontend/lowering/lower-containers.js +6281 -0
  95. package/dist/frontend/lowering/lower-containers.js.map +1 -0
  96. package/dist/frontend/lowering/lower-dgram.d.ts +20 -0
  97. package/dist/frontend/lowering/lower-dgram.js +319 -0
  98. package/dist/frontend/lowering/lower-dgram.js.map +1 -0
  99. package/dist/frontend/lowering/lower-emitter.d.ts +10 -0
  100. package/dist/frontend/lowering/lower-emitter.js +688 -0
  101. package/dist/frontend/lowering/lower-emitter.js.map +1 -0
  102. package/dist/frontend/lowering/lower-enums.d.ts +22 -0
  103. package/dist/frontend/lowering/lower-enums.js +235 -0
  104. package/dist/frontend/lowering/lower-enums.js.map +1 -0
  105. package/dist/frontend/lowering/lower-expando.d.ts +35 -0
  106. package/dist/frontend/lowering/lower-expando.js +276 -0
  107. package/dist/frontend/lowering/lower-expando.js.map +1 -0
  108. package/dist/frontend/lowering/lower-exprs.d.ts +524 -0
  109. package/dist/frontend/lowering/lower-exprs.js +8099 -0
  110. package/dist/frontend/lowering/lower-exprs.js.map +1 -0
  111. package/dist/frontend/lowering/lower-generators.d.ts +50 -0
  112. package/dist/frontend/lowering/lower-generators.js +421 -0
  113. package/dist/frontend/lowering/lower-generators.js.map +1 -0
  114. package/dist/frontend/lowering/lower-inspect.d.ts +20 -0
  115. package/dist/frontend/lowering/lower-inspect.js +1069 -0
  116. package/dist/frontend/lowering/lower-inspect.js.map +1 -0
  117. package/dist/frontend/lowering/lower-island.d.ts +108 -0
  118. package/dist/frontend/lowering/lower-island.js +650 -0
  119. package/dist/frontend/lowering/lower-island.js.map +1 -0
  120. package/dist/frontend/lowering/lower-mixins.d.ts +96 -0
  121. package/dist/frontend/lowering/lower-mixins.js +534 -0
  122. package/dist/frontend/lowering/lower-mixins.js.map +1 -0
  123. package/dist/frontend/lowering/lower-modules.d.ts +135 -0
  124. package/dist/frontend/lowering/lower-modules.js +1613 -0
  125. package/dist/frontend/lowering/lower-modules.js.map +1 -0
  126. package/dist/frontend/lowering/lower-namespaces.d.ts +168 -0
  127. package/dist/frontend/lowering/lower-namespaces.js +706 -0
  128. package/dist/frontend/lowering/lower-namespaces.js.map +1 -0
  129. package/dist/frontend/lowering/lower-server.d.ts +90 -0
  130. package/dist/frontend/lowering/lower-server.js +3471 -0
  131. package/dist/frontend/lowering/lower-server.js.map +1 -0
  132. package/dist/frontend/lowering/lower-stmts.d.ts +361 -0
  133. package/dist/frontend/lowering/lower-stmts.js +5341 -0
  134. package/dist/frontend/lowering/lower-stmts.js.map +1 -0
  135. package/dist/frontend/lowering/lower-stream.d.ts +88 -0
  136. package/dist/frontend/lowering/lower-stream.js +1533 -0
  137. package/dist/frontend/lowering/lower-stream.js.map +1 -0
  138. package/dist/frontend/lowering/lower-test.d.ts +27 -0
  139. package/dist/frontend/lowering/lower-test.js +353 -0
  140. package/dist/frontend/lowering/lower-test.js.map +1 -0
  141. package/dist/frontend/lowering/lowerer.d.ts +1748 -0
  142. package/dist/frontend/lowering/lowerer.js +6256 -0
  143. package/dist/frontend/lowering/lowerer.js.map +1 -0
  144. package/dist/frontend/lowering/surfaces.d.ts +272 -0
  145. package/dist/frontend/lowering/surfaces.js +1096 -0
  146. package/dist/frontend/lowering/surfaces.js.map +1 -0
  147. package/dist/frontend/npm-static.d.ts +55 -0
  148. package/dist/frontend/npm-static.js +300 -0
  149. package/dist/frontend/npm-static.js.map +1 -0
  150. package/dist/frontend/npm.d.ts +330 -0
  151. package/dist/frontend/npm.js +1259 -0
  152. package/dist/frontend/npm.js.map +1 -0
  153. package/dist/frontend/program.d.ts +186 -0
  154. package/dist/frontend/program.js +2172 -0
  155. package/dist/frontend/program.js.map +1 -0
  156. package/dist/frontend/provenance-registry.d.ts +48 -0
  157. package/dist/frontend/provenance-registry.js +87 -0
  158. package/dist/frontend/provenance-registry.js.map +1 -0
  159. package/dist/frontend/provenance.d.ts +6 -0
  160. package/dist/frontend/provenance.js +459 -0
  161. package/dist/frontend/provenance.js.map +1 -0
  162. package/dist/frontend/resolve.d.ts +56 -0
  163. package/dist/frontend/resolve.js +682 -0
  164. package/dist/frontend/resolve.js.map +1 -0
  165. package/dist/frontend/shared.d.ts +60 -0
  166. package/dist/frontend/shared.js +232 -0
  167. package/dist/frontend/shared.js.map +1 -0
  168. package/dist/frontend/ts7/adapter.d.ts +7 -0
  169. package/dist/frontend/ts7/adapter.js +54 -0
  170. package/dist/frontend/ts7/adapter.js.map +1 -0
  171. package/dist/frontend/ts7/ast.d.ts +50 -0
  172. package/dist/frontend/ts7/ast.js +211 -0
  173. package/dist/frontend/ts7/ast.js.map +1 -0
  174. package/dist/frontend/ts7/census-check.d.ts +1 -0
  175. package/dist/frontend/ts7/census-check.js +12 -0
  176. package/dist/frontend/ts7/census-check.js.map +1 -0
  177. package/dist/frontend/ts7/checker.d.ts +140 -0
  178. package/dist/frontend/ts7/checker.js +544 -0
  179. package/dist/frontend/ts7/checker.js.map +1 -0
  180. package/dist/frontend/ts7/enums.d.ts +18 -0
  181. package/dist/frontend/ts7/enums.js +43 -0
  182. package/dist/frontend/ts7/enums.js.map +1 -0
  183. package/dist/frontend/ts7/program.d.ts +99 -0
  184. package/dist/frontend/ts7/program.js +278 -0
  185. package/dist/frontend/ts7/program.js.map +1 -0
  186. package/dist/frontend/ts7/world-check.d.ts +3 -0
  187. package/dist/frontend/ts7/world-check.js +34 -0
  188. package/dist/frontend/ts7/world-check.js.map +1 -0
  189. package/dist/frontend/types.d.ts +205 -0
  190. package/dist/frontend/types.js +2485 -0
  191. package/dist/frontend/types.js.map +1 -0
  192. package/dist/index.d.ts +85 -0
  193. package/dist/index.js +424 -0
  194. package/dist/index.js.map +1 -0
  195. package/dist/ir/nodes.d.ts +4334 -0
  196. package/dist/ir/nodes.js +1906 -0
  197. package/dist/ir/nodes.js.map +1 -0
  198. package/dist/ir/serialize.d.ts +4 -0
  199. package/dist/ir/serialize.js +34 -0
  200. package/dist/ir/serialize.js.map +1 -0
  201. package/dist/ir/validate.d.ts +36 -0
  202. package/dist/ir/validate.js +4884 -0
  203. package/dist/ir/validate.js.map +1 -0
  204. package/package.json +30 -6
  205. package/README.md +0 -3
  206. package/index.js +0 -2
@@ -0,0 +1,459 @@
1
+ /* `--provenance-sources` — the provenance-assisted static compilation
2
+ * pipeline (EXPERIMENTAL prototype; the registry doc in
3
+ * provenance-registry.ts states the thesis).
4
+ *
5
+ * For every bare npm specifier the entry's module graph imports, this
6
+ * asks the npm registry for the package's PROVENANCE ATTESTATION
7
+ * (GET registry.npmjs.org/-/npm/v1/attestations/<pkg>@<version> — the
8
+ * SLSA predicate names the exact {repository, commit} the published dist
9
+ * was built from), fetches that source tree once (content-addressed cache
10
+ * under ~/.cache/scriptc/provenance/<gitCommit>), locates the package
11
+ * directory inside it (monorepos publish from subdirectories), and maps
12
+ * the published entry to its TypeScript source (dist/lib/build targets
13
+ * rewritten to their src twins). Mapped packages compile as ordinary
14
+ * program modules — real types, real statements, the static frontier —
15
+ * and everything that cannot be mapped FALLS BACK to the island path
16
+ * with a note; a fallback is never a build failure.
17
+ *
18
+ * PRODUCTION GAPS, deliberately unbuilt in the prototype: no sigstore
19
+ * bundle verification (the attestation is trusted as served), no
20
+ * dist-tarball ↔ source build reproduction (the behavior differential is
21
+ * the honest check today), source-entry mapping is heuristic (exports
22
+ * targets rewritten dist→src), and transitive dependency versions
23
+ * resolve from the DRIVER's installed tree rather than the package's own
24
+ * lockfile.
25
+ *
26
+ * Offline/test hook: SCRIPTC_PROVENANCE_MANIFEST=<path.json> pre-seeds
27
+ * {"packages": {"<name>": {"dir": "<source pkg dir>", "commit"?, "repo"?}}}
28
+ * — those packages skip the network entirely (harness fixtures ride
29
+ * this); unlisted packages still take the live pipeline. */
30
+ import { execFile } from "node:child_process";
31
+ import { readFileSync, statSync } from "node:fs";
32
+ import { mkdir, mkdtemp, rename, rm, writeFile } from "node:fs/promises";
33
+ import { builtinModules } from "node:module";
34
+ import { homedir, tmpdir } from "node:os";
35
+ import { dirname, isAbsolute, join, resolve } from "node:path";
36
+ import { promisify } from "node:util";
37
+ import ts from "typescript5";
38
+ import { resolveExports } from "./npm.js";
39
+ import { resolveRelativeModule } from "./resolve.js";
40
+ const execFileAsync = promisify(execFile);
41
+ const NODE_BUILTINS = new Set(builtinModules);
42
+ /** Hard cap on packages one compile will source-map (prototype guard). */
43
+ const MAX_PACKAGES = 16;
44
+ function isFile(path) {
45
+ try {
46
+ return statSync(path).isFile();
47
+ }
48
+ catch {
49
+ return false;
50
+ }
51
+ }
52
+ function isDirectory(path) {
53
+ try {
54
+ return statSync(path).isDirectory();
55
+ }
56
+ catch {
57
+ return false;
58
+ }
59
+ }
60
+ function readJson(path) {
61
+ try {
62
+ return JSON.parse(readFileSync(path, "utf8"));
63
+ }
64
+ catch {
65
+ return null;
66
+ }
67
+ }
68
+ function packageNameOf(specifier) {
69
+ const parts = specifier.split("/");
70
+ return specifier.startsWith("@") ? parts.slice(0, 2).join("/") : parts[0];
71
+ }
72
+ /* ── the bare-import prescan ─────────────────────────────────────────────
73
+ * The provenance pipeline runs BEFORE the program loads (tsgo needs the
74
+ * "paths" mapping at creation), so the bare specifiers come from a light
75
+ * parse walk of the entry's RELATIVE import closure — the same specifier
76
+ * collection shapes npm.ts scans embedded modules with, over the same
77
+ * sanctioned typescript5 island. */
78
+ function moduleSpecifiersLite(source, fileName) {
79
+ const sf = ts.createSourceFile(fileName, source, ts.ScriptTarget.Latest, false, ts.ScriptKind.TS);
80
+ const out = [];
81
+ const visit = (n) => {
82
+ if ((ts.isImportDeclaration(n) || ts.isExportDeclaration(n)) &&
83
+ n.moduleSpecifier !== undefined &&
84
+ ts.isStringLiteral(n.moduleSpecifier)) {
85
+ const typeOnly = ts.isImportDeclaration(n)
86
+ ? (n.importClause?.isTypeOnly ?? false)
87
+ : n.isTypeOnly;
88
+ out.push({ spec: n.moduleSpecifier.text, typeOnly });
89
+ }
90
+ else if (ts.isCallExpression(n)) {
91
+ const arg = n.arguments[0];
92
+ if (arg !== undefined &&
93
+ ts.isStringLiteralLike(arg) &&
94
+ (n.expression.kind === ts.SyntaxKind.ImportKeyword ||
95
+ (ts.isIdentifier(n.expression) && n.expression.text === "require" && n.arguments.length === 1))) {
96
+ out.push({ spec: arg.text, typeOnly: false });
97
+ }
98
+ }
99
+ ts.forEachChild(n, visit);
100
+ };
101
+ visit(sf);
102
+ return out;
103
+ }
104
+ /** Every bare (non-relative, non-builtin, non-"#") VALUE specifier the
105
+ * relative closure of `roots` imports, in first-encounter order. */
106
+ function bareImportsOf(roots) {
107
+ const seenFiles = new Set();
108
+ const bare = [];
109
+ const bareSeen = new Set();
110
+ const queue = [...roots];
111
+ while (queue.length > 0) {
112
+ const file = resolve(queue.shift());
113
+ if (seenFiles.has(file))
114
+ continue;
115
+ seenFiles.add(file);
116
+ let text;
117
+ try {
118
+ text = readFileSync(file, "utf8");
119
+ }
120
+ catch {
121
+ continue;
122
+ }
123
+ for (const { spec, typeOnly } of moduleSpecifiersLite(text, file)) {
124
+ if (typeOnly)
125
+ continue;
126
+ if (spec.startsWith("./") || spec.startsWith("../")) {
127
+ const dep = resolveRelativeModule(file, spec);
128
+ if (dep !== null && !dep.endsWith(".json") && !dep.endsWith(".d.ts"))
129
+ queue.push(dep);
130
+ continue;
131
+ }
132
+ if (spec.startsWith("#") || spec.startsWith("node:"))
133
+ continue;
134
+ if (NODE_BUILTINS.has(packageNameOf(spec)))
135
+ continue;
136
+ if (!bareSeen.has(spec)) {
137
+ bareSeen.add(spec);
138
+ bare.push(spec);
139
+ }
140
+ }
141
+ }
142
+ return bare;
143
+ }
144
+ /** node_modules/<name> walking up from `fromDir`, realpath-free (the
145
+ * published package.json is all this needs). */
146
+ function findInstalled(fromDir, name) {
147
+ for (let dir = fromDir;;) {
148
+ const candidate = join(dir, "node_modules", name);
149
+ const pkgJson = readJson(join(candidate, "package.json"));
150
+ if (pkgJson !== null && typeof pkgJson["version"] === "string") {
151
+ return {
152
+ dir: candidate,
153
+ name: typeof pkgJson["name"] === "string" ? pkgJson["name"] : name,
154
+ version: pkgJson["version"],
155
+ pkgJson,
156
+ };
157
+ }
158
+ const parent = dirname(dir);
159
+ if (parent === dir)
160
+ return null;
161
+ dir = parent;
162
+ }
163
+ }
164
+ /** GET the npm attestation set and extract the SLSA provenance
165
+ * predicate's resolved source dependency. Throws with a one-line reason
166
+ * on every failure shape (no attestation, network, malformed). */
167
+ async function fetchAttestation(name, version) {
168
+ const url = `https://registry.npmjs.org/-/npm/v1/attestations/${encodeURIComponent(`${name}@${version}`).replace(/%40/g, "@").replace(/%2F/gi, "/")}`;
169
+ const res = await fetch(url, { signal: AbortSignal.timeout(30_000) });
170
+ if (res.status === 404)
171
+ throw new Error("no provenance attestation published");
172
+ if (!res.ok)
173
+ throw new Error(`attestation fetch failed (HTTP ${res.status})`);
174
+ const body = (await res.json());
175
+ for (const att of body.attestations ?? []) {
176
+ if (!att.predicateType?.startsWith("https://slsa.dev/provenance"))
177
+ continue;
178
+ const payload = att.bundle?.dsseEnvelope?.payload;
179
+ if (payload === undefined)
180
+ continue;
181
+ const stmt = JSON.parse(Buffer.from(payload, "base64").toString("utf8"));
182
+ for (const dep of stmt.predicate?.buildDefinition?.resolvedDependencies ?? []) {
183
+ const commit = dep.digest?.gitCommit;
184
+ if (typeof commit === "string" && commit !== "" && typeof dep.uri === "string") {
185
+ return { repo: dep.uri, commit };
186
+ }
187
+ }
188
+ }
189
+ throw new Error("attestation set carries no SLSA provenance predicate");
190
+ }
191
+ /* ── source fetch (content-addressed by the attested commit) ──────────── */
192
+ function cacheRoot() {
193
+ return process.env["SCRIPTC_PROVENANCE_CACHE"] ?? join(homedir(), ".cache", "scriptc", "provenance");
194
+ }
195
+ /** The cached source tree for an attested commit, fetching it once from
196
+ * codeload (github repos only in the prototype). Returns the tree root. */
197
+ async function fetchSourceTree(repo, commit) {
198
+ const dest = join(cacheRoot(), commit);
199
+ if (isDirectory(dest))
200
+ return dest;
201
+ const m = /github\.com\/([^/]+)\/([^/@#]+)/.exec(repo);
202
+ if (m === null)
203
+ throw new Error(`source repository is not a github URL (${repo})`);
204
+ const url = `https://codeload.github.com/${m[1]}/${m[2]}/tar.gz/${commit}`;
205
+ const res = await fetch(url, { signal: AbortSignal.timeout(120_000) });
206
+ if (!res.ok)
207
+ throw new Error(`source fetch failed (HTTP ${res.status} for ${url})`);
208
+ const bytes = Buffer.from(await res.arrayBuffer());
209
+ await mkdir(cacheRoot(), { recursive: true });
210
+ const tmp = await mkdtemp(join(tmpdir(), "scriptc-provenance-"));
211
+ try {
212
+ const tarball = join(tmp, "src.tgz");
213
+ await writeFile(tarball, bytes);
214
+ const extractDir = join(tmp, "tree");
215
+ await mkdir(extractDir);
216
+ await execFileAsync("tar", ["-xzf", tarball, "-C", extractDir, "--strip-components=1"]);
217
+ try {
218
+ await rename(extractDir, dest);
219
+ }
220
+ catch {
221
+ // A parallel compile won the rename — its tree is the same content.
222
+ if (!isDirectory(dest))
223
+ throw new Error("source cache rename failed");
224
+ }
225
+ }
226
+ finally {
227
+ await rm(tmp, { recursive: true, force: true });
228
+ }
229
+ return dest;
230
+ }
231
+ /* ── package dir + source-entry mapping ────────────────────────────────── */
232
+ /** The directory inside `tree` whose package.json names `name`: the root,
233
+ * then the conventional monorepo layouts, then a bounded scan. */
234
+ function locatePackageDir(tree, name) {
235
+ const nameOf = (dir) => {
236
+ const pkg = readJson(join(dir, "package.json"));
237
+ return pkg !== null && typeof pkg["name"] === "string" ? pkg["name"] : null;
238
+ };
239
+ if (nameOf(tree) === name)
240
+ return tree;
241
+ const bare = name.startsWith("@") ? name.split("/")[1] : name;
242
+ const candidates = [
243
+ join(tree, "packages", bare),
244
+ join(tree, "packages", name),
245
+ join(tree, "packages", name.replace("@", "").replace("/", "-")),
246
+ join(tree, "packages", `babel-${bare}`),
247
+ ];
248
+ for (const c of candidates) {
249
+ if (nameOf(c) === name)
250
+ return c;
251
+ }
252
+ // Bounded breadth-first scan (depth ≤ 3, node_modules/.git skipped).
253
+ const queue = [{ dir: tree, depth: 0 }];
254
+ while (queue.length > 0) {
255
+ const { dir, depth } = queue.shift();
256
+ if (depth > 0 && nameOf(dir) === name)
257
+ return dir;
258
+ if (depth >= 3)
259
+ continue;
260
+ let entries;
261
+ try {
262
+ entries = ts.sys.getDirectories(dir);
263
+ }
264
+ catch {
265
+ continue;
266
+ }
267
+ for (const e of entries) {
268
+ if (e === "node_modules" || e.startsWith("."))
269
+ continue;
270
+ queue.push({ dir: join(dir, e), depth: depth + 1 });
271
+ }
272
+ }
273
+ return null;
274
+ }
275
+ /** The published dist target for `subpath` — "exports" with the import
276
+ * condition, else module/main/types fields (root subpath only). */
277
+ function publishedTargetOf(pkgJson, subpath) {
278
+ if (pkgJson["exports"] !== undefined) {
279
+ return resolveExports(pkgJson["exports"], subpath, "import");
280
+ }
281
+ if (subpath !== ".")
282
+ return subpath;
283
+ for (const field of ["module", "main", "types"]) {
284
+ const v = pkgJson[field];
285
+ if (typeof v === "string" && v !== "")
286
+ return v;
287
+ }
288
+ return "index.js";
289
+ }
290
+ /** dist target → source file, heuristically: the built path's leading
291
+ * dist/lib/build segment rewrites to src (or drops), extensions rewrite
292
+ * to their TypeScript twins, and the root entry falls back to the
293
+ * conventional src/index.ts homes. First existing candidate wins. */
294
+ function mapEntryToSource(pkgDir, target, subpath) {
295
+ const rel = target.replace(/^\.\//, "");
296
+ const stems = new Set([rel]);
297
+ const distRe = /^(dist|lib|build|out|output|dist-node|dist-src)\//;
298
+ if (distRe.test(rel)) {
299
+ stems.add(rel.replace(distRe, "src/"));
300
+ stems.add(rel.replace(distRe, ""));
301
+ }
302
+ else {
303
+ stems.add(`src/${rel}`);
304
+ }
305
+ const candidates = [];
306
+ for (const stem of stems) {
307
+ const base = stem.replace(/\.d\.(ts|mts|cts)$/, ".$1").replace(/\.(js|mjs|cjs)$/, "");
308
+ if (/\.(ts|tsx|mts|cts)$/.test(base))
309
+ candidates.push(base);
310
+ else {
311
+ candidates.push(`${base}.ts`, `${base}.mts`, `${base}.cts`, `${base}.tsx`);
312
+ candidates.push(join(base, "index.ts"));
313
+ }
314
+ }
315
+ if (subpath === ".") {
316
+ candidates.push("src/index.ts", "src/index.mts", "index.ts", "src/index.tsx");
317
+ }
318
+ for (const c of candidates) {
319
+ const abs = join(pkgDir, c);
320
+ if (isFile(abs))
321
+ return abs;
322
+ }
323
+ return null;
324
+ }
325
+ function readManifest() {
326
+ const path = process.env["SCRIPTC_PROVENANCE_MANIFEST"];
327
+ const out = new Map();
328
+ if (path === undefined || path === "")
329
+ return out;
330
+ const manifest = readJson(resolve(path));
331
+ const packages = manifest?.["packages"];
332
+ if (packages === null || typeof packages !== "object")
333
+ return out;
334
+ for (const [name, raw] of Object.entries(packages)) {
335
+ if (raw === null || typeof raw !== "object")
336
+ continue;
337
+ const e = raw;
338
+ if (typeof e.dir !== "string")
339
+ continue;
340
+ const dir = isAbsolute(e.dir) ? e.dir : resolve(dirname(resolve(path)), e.dir);
341
+ out.set(name, {
342
+ dir,
343
+ ...(typeof e.commit === "string" ? { commit: e.commit } : {}),
344
+ ...(typeof e.repo === "string" ? { repo: e.repo } : {}),
345
+ });
346
+ }
347
+ return out;
348
+ }
349
+ /** Resolves provenance sources for everything the entry's module graph
350
+ * imports (one transitive round per newly-mapped tree: source imports of
351
+ * OTHER packages try the pipeline too). Never throws for a package
352
+ * failure — those become notes and the package keeps its island path. */
353
+ export async function resolveProvenanceSources(entryPath) {
354
+ const entry = resolve(entryPath);
355
+ const manifest = readManifest();
356
+ const packages = [];
357
+ const notes = [];
358
+ /** package name → mapped package (or null after a noted failure). */
359
+ const processed = new Map();
360
+ /** All specifiers seen so far, grouped by package name. */
361
+ const specifiersByPackage = new Map();
362
+ const enqueue = (specs) => {
363
+ const newNames = [];
364
+ for (const spec of specs) {
365
+ const name = packageNameOf(spec);
366
+ let set = specifiersByPackage.get(name);
367
+ if (set === undefined) {
368
+ specifiersByPackage.set(name, (set = new Set()));
369
+ newNames.push(name);
370
+ }
371
+ set.add(spec);
372
+ }
373
+ return newNames;
374
+ };
375
+ const mapOne = async (name) => {
376
+ if (processed.has(name))
377
+ return;
378
+ if (processed.size >= MAX_PACKAGES) {
379
+ processed.set(name, null);
380
+ notes.push(`${name}: skipped — provenance package limit (${MAX_PACKAGES}) reached; island path used`);
381
+ return;
382
+ }
383
+ processed.set(name, null); // claimed; overwritten on success
384
+ const installed = findInstalled(dirname(entry), name);
385
+ if (installed === null) {
386
+ notes.push(`${name}: not installed under the entry's node_modules; island path used`);
387
+ return;
388
+ }
389
+ let dir;
390
+ let repo;
391
+ let commit;
392
+ const seeded = manifest.get(name);
393
+ try {
394
+ if (seeded !== undefined) {
395
+ dir = seeded.dir;
396
+ repo = seeded.repo ?? "(manifest)";
397
+ commit = seeded.commit ?? "(manifest)";
398
+ if (!isDirectory(dir))
399
+ throw new Error(`manifest dir does not exist (${dir})`);
400
+ }
401
+ else {
402
+ const attested = await fetchAttestation(installed.name, installed.version);
403
+ repo = attested.repo;
404
+ commit = attested.commit;
405
+ const tree = await fetchSourceTree(repo, commit);
406
+ const located = locatePackageDir(tree, installed.name);
407
+ if (located === null) {
408
+ throw new Error(`package directory not found inside the attested source tree (${tree})`);
409
+ }
410
+ dir = located;
411
+ }
412
+ const entries = {};
413
+ for (const spec of specifiersByPackage.get(name) ?? []) {
414
+ const parts = spec.split("/");
415
+ const nameLen = spec.startsWith("@") ? 2 : 1;
416
+ const subpath = parts.length === nameLen ? "." : `./${parts.slice(nameLen).join("/")}`;
417
+ const target = publishedTargetOf(installed.pkgJson, subpath);
418
+ const source = target === null ? null : mapEntryToSource(dir, target, subpath);
419
+ if (source === null) {
420
+ notes.push(`${name}@${installed.version}: no source mapping for '${spec}' (published target: ${target ?? "unexported"}); island path used`);
421
+ continue;
422
+ }
423
+ entries[spec] = source;
424
+ }
425
+ if (Object.keys(entries).length === 0)
426
+ return;
427
+ const srcPkg = readJson(join(dir, "package.json"));
428
+ const sourceVersion = typeof srcPkg?.["version"] === "string" ? srcPkg["version"] : undefined;
429
+ const pkg = {
430
+ name: installed.name,
431
+ version: installed.version,
432
+ ...(sourceVersion !== undefined && sourceVersion !== installed.version ? { sourceVersion } : {}),
433
+ repo,
434
+ commit,
435
+ dir,
436
+ entries,
437
+ };
438
+ if (pkg.sourceVersion !== undefined) {
439
+ notes.push(`${name}: source tree's package.json says ${pkg.sourceVersion}, installed is ${installed.version} (release tooling that bumps at publish) — the behavior differential is the check`);
440
+ }
441
+ packages.push(pkg);
442
+ processed.set(name, pkg);
443
+ // One transitive round: the mapped source's own bare imports try
444
+ // the pipeline too (versions resolve from the DRIVER's tree — a
445
+ // prototype heuristic; production wants the package's lockfile).
446
+ const inner = enqueue(bareImportsOf(Object.values(entries)));
447
+ for (const n of inner)
448
+ await mapOne(n);
449
+ }
450
+ catch (e) {
451
+ notes.push(`${name}@${installed.version}: ${e instanceof Error ? e.message : String(e)}; island path used`);
452
+ }
453
+ };
454
+ for (const name of enqueue(bareImportsOf([entry]))) {
455
+ await mapOne(name);
456
+ }
457
+ return { packages, notes };
458
+ }
459
+ //# sourceMappingURL=provenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/frontend/provenance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ export declare function setProjectRealm(entryPath: string): void;
2
+ export declare function projectDtsRuntimeSibling(path: string): string | null;
3
+ /** Resolves a RELATIVE import specifier from `fromFile` the way 5.9.3's
4
+ * ts.resolveModuleName does under scriptc's options. Returns the resolved
5
+ * absolute path (not realpath'd — matching 5.9.3, which keeps in-project
6
+ * paths as spelled), or null. */
7
+ export declare function resolveRelativeModule(fromFile: string, specifier: string): string | null;
8
+ /** Absolute path of the nearest package.json at or above `fromFile`'s
9
+ * directory — the package scope Node's imports-field refusals name
10
+ * (ERR_PACKAGE_IMPORT_NOT_DEFINED carries it). Null outside any scope. */
11
+ export declare function nearestPkgJsonPath(fromFile: string): string | null;
12
+ /** Resolves a PROJECT-INTERNAL package.json-mediated specifier from
13
+ * `fromFile` — `#alias` (the imports field) or a self-name reference (the
14
+ * nearest package.json's own name through its exports) — to an absolute
15
+ * source path with the usual bundler extension substitution, or null.
16
+ * Relative specifiers, real node_modules packages, and builtins are other
17
+ * resolvers' business; callers try those first. */
18
+ export declare function resolveProjectImport(fromFile: string, specifier: string): string | null;
19
+ export interface BareResolution {
20
+ /** The resolved types file, realpath'd (5.9.3 resolves node_modules
21
+ * symlinks — pnpm stores — and answers the real location). */
22
+ typesFile: string;
23
+ /** package.json "name" when present (5.9.3's packageId.name), else the
24
+ * specifier's package prefix. For @types answers this is the @types
25
+ * package's own name ("@types/foo"). */
26
+ packageName: string;
27
+ /** package.json "version" (packageId is only formed when it exists). */
28
+ version?: string;
29
+ /** Set when the node_modules package directory is a SYMLINK whose real
30
+ * location lies outside every node_modules — a workspace-linked package
31
+ * (pnpm/npm/yarn/bun workspaces all install internal packages this way):
32
+ * the realpath of the package directory. The resolved typesFile then
33
+ * carries no node_modules segment, and callers must not read that as
34
+ * "not an npm package". */
35
+ workspaceDir?: string;
36
+ }
37
+ /** Resolves a BARE import specifier to its npm TYPES file the way 5.9.3's
38
+ * ts.resolveModuleName does under scriptc's options (bundler, types-only in
39
+ * node_modules), walking node_modules directories up from the importing
40
+ * file. Null when nothing resolves. */
41
+ export declare function resolveBareModule(fromFile: string, specifier: string,
42
+ /** "js-only" forces the runtime-JS resolution regardless of the active
43
+ * --npm-static set (the auto-detection probe); default follows the set. */
44
+ mode?: "js-only"): BareResolution | null;
45
+ /** Resolves a `/// <reference types="name" />`-style TYPE DIRECTIVE the way
46
+ * ts.resolveTypeReferenceDirective does with typeRoots emptied (the
47
+ * secondary lookup only): walking up from the anchor file, per directory
48
+ * node_modules/<name> then node_modules/@types/<name>, each via package.json
49
+ * types/typings then index.d.ts. Returns the realpath'd file or null. */
50
+ export declare function resolveTypeDirective(name: string, fromFile: string): string | null;
51
+ /** Test hook: the package.json cache holds across programs (fine within one
52
+ * compile; a long-lived test process editing fixtures must reset it). */
53
+ export declare function clearResolveCaches(): void;
54
+ /** True when `path` is under a node_modules directory (the
55
+ * isExternalLibraryImport test 5.9.3 answers on resolutions). */
56
+ export declare function isNodeModulesPath(path: string): boolean;