@scriptc/compiler 0.0.0 → 0.0.2
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.
- package/LICENSE +202 -0
- package/ambient/package.json +3 -0
- package/ambient/scriptc-node-fallback.d.ts +3001 -0
- package/ambient/scriptc-overrides.d.ts +95 -0
- package/ambient/scriptc.d.ts +74 -0
- package/dist/backend/cc.d.ts +169 -0
- package/dist/backend/cc.js +897 -0
- package/dist/backend/cc.js.map +1 -0
- package/dist/backend/emission/emit-async.d.ts +145 -0
- package/dist/backend/emission/emit-async.js +996 -0
- package/dist/backend/emission/emit-async.js.map +1 -0
- package/dist/backend/emission/emit-exprs.d.ts +3 -0
- package/dist/backend/emission/emit-exprs.js +5949 -0
- package/dist/backend/emission/emit-exprs.js.map +1 -0
- package/dist/backend/emission/emit-island.d.ts +45 -0
- package/dist/backend/emission/emit-island.js +271 -0
- package/dist/backend/emission/emit-island.js.map +1 -0
- package/dist/backend/emission/emit-shapes.d.ts +142 -0
- package/dist/backend/emission/emit-shapes.js +575 -0
- package/dist/backend/emission/emit-shapes.js.map +1 -0
- package/dist/backend/emission/emit-stmts.d.ts +78 -0
- package/dist/backend/emission/emit-stmts.js +960 -0
- package/dist/backend/emission/emit-stmts.js.map +1 -0
- package/dist/backend/emission/emit-types.d.ts +65 -0
- package/dist/backend/emission/emit-types.js +652 -0
- package/dist/backend/emission/emit-types.js.map +1 -0
- package/dist/backend/emission/emit-walkers.d.ts +154 -0
- package/dist/backend/emission/emit-walkers.js +1587 -0
- package/dist/backend/emission/emit-walkers.js.map +1 -0
- package/dist/backend/emission/emitter.d.ts +452 -0
- package/dist/backend/emission/emitter.js +1249 -0
- package/dist/backend/emission/emitter.js.map +1 -0
- package/dist/backend/emission/may-throw.d.ts +15 -0
- package/dist/backend/emission/may-throw.js +250 -0
- package/dist/backend/emission/may-throw.js.map +1 -0
- package/dist/backend/llvm/blocks.d.ts +21 -0
- package/dist/backend/llvm/blocks.js +68 -0
- package/dist/backend/llvm/blocks.js.map +1 -0
- package/dist/backend/llvm/classes.d.ts +84 -0
- package/dist/backend/llvm/classes.js +438 -0
- package/dist/backend/llvm/classes.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +123 -0
- package/dist/backend/llvm/dyn.js +2624 -0
- package/dist/backend/llvm/dyn.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +3 -0
- package/dist/backend/llvm/emitter.js +10102 -0
- package/dist/backend/llvm/emitter.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +78 -0
- package/dist/backend/llvm/shapes.js +754 -0
- package/dist/backend/llvm/shapes.js.map +1 -0
- package/dist/backend/llvm/unsupported.d.ts +6 -0
- package/dist/backend/llvm/unsupported.js +12 -0
- package/dist/backend/llvm/unsupported.js.map +1 -0
- package/dist/backend/llvm/walkers.d.ts +58 -0
- package/dist/backend/llvm/walkers.js +793 -0
- package/dist/backend/llvm/walkers.js.map +1 -0
- package/dist/backend/mangle.d.ts +124 -0
- package/dist/backend/mangle.js +232 -0
- package/dist/backend/mangle.js.map +1 -0
- package/dist/coverage/report.d.ts +65 -0
- package/dist/coverage/report.js +238 -0
- package/dist/coverage/report.js.map +1 -0
- package/dist/diagnostics/diagnostic.d.ts +140 -0
- package/dist/diagnostics/diagnostic.js +458 -0
- package/dist/diagnostics/diagnostic.js.map +1 -0
- package/dist/diagnostics/render.d.ts +11 -0
- package/dist/diagnostics/render.js +58 -0
- package/dist/diagnostics/render.js.map +1 -0
- package/dist/frontend/cjs-lexer.d.ts +20 -0
- package/dist/frontend/cjs-lexer.js +813 -0
- package/dist/frontend/cjs-lexer.js.map +1 -0
- package/dist/frontend/lowering/http2-constants.d.ts +1 -0
- package/dist/frontend/lowering/http2-constants.js +251 -0
- package/dist/frontend/lowering/http2-constants.js.map +1 -0
- package/dist/frontend/lowering/lib-boundary.d.ts +6 -0
- package/dist/frontend/lowering/lib-boundary.js +143 -0
- package/dist/frontend/lowering/lib-boundary.js.map +1 -0
- package/dist/frontend/lowering/lower-assert.d.ts +18 -0
- package/dist/frontend/lowering/lower-assert.js +1269 -0
- package/dist/frontend/lowering/lower-assert.js.map +1 -0
- package/dist/frontend/lowering/lower-builtins.d.ts +511 -0
- package/dist/frontend/lowering/lower-builtins.js +5249 -0
- package/dist/frontend/lowering/lower-builtins.js.map +1 -0
- package/dist/frontend/lowering/lower-calls.d.ts +581 -0
- package/dist/frontend/lowering/lower-calls.js +6286 -0
- package/dist/frontend/lowering/lower-calls.js.map +1 -0
- package/dist/frontend/lowering/lower-classes.d.ts +727 -0
- package/dist/frontend/lowering/lower-classes.js +4701 -0
- package/dist/frontend/lowering/lower-classes.js.map +1 -0
- package/dist/frontend/lowering/lower-comptime.d.ts +53 -0
- package/dist/frontend/lowering/lower-comptime.js +244 -0
- package/dist/frontend/lowering/lower-comptime.js.map +1 -0
- package/dist/frontend/lowering/lower-containers.d.ts +486 -0
- package/dist/frontend/lowering/lower-containers.js +6345 -0
- package/dist/frontend/lowering/lower-containers.js.map +1 -0
- package/dist/frontend/lowering/lower-dgram.d.ts +20 -0
- package/dist/frontend/lowering/lower-dgram.js +319 -0
- package/dist/frontend/lowering/lower-dgram.js.map +1 -0
- package/dist/frontend/lowering/lower-emitter.d.ts +10 -0
- package/dist/frontend/lowering/lower-emitter.js +688 -0
- package/dist/frontend/lowering/lower-emitter.js.map +1 -0
- package/dist/frontend/lowering/lower-enums.d.ts +22 -0
- package/dist/frontend/lowering/lower-enums.js +235 -0
- package/dist/frontend/lowering/lower-enums.js.map +1 -0
- package/dist/frontend/lowering/lower-expando.d.ts +35 -0
- package/dist/frontend/lowering/lower-expando.js +276 -0
- package/dist/frontend/lowering/lower-expando.js.map +1 -0
- package/dist/frontend/lowering/lower-exprs.d.ts +524 -0
- package/dist/frontend/lowering/lower-exprs.js +8111 -0
- package/dist/frontend/lowering/lower-exprs.js.map +1 -0
- package/dist/frontend/lowering/lower-generators.d.ts +50 -0
- package/dist/frontend/lowering/lower-generators.js +421 -0
- package/dist/frontend/lowering/lower-generators.js.map +1 -0
- package/dist/frontend/lowering/lower-inspect.d.ts +20 -0
- package/dist/frontend/lowering/lower-inspect.js +1074 -0
- package/dist/frontend/lowering/lower-inspect.js.map +1 -0
- package/dist/frontend/lowering/lower-island.d.ts +108 -0
- package/dist/frontend/lowering/lower-island.js +650 -0
- package/dist/frontend/lowering/lower-island.js.map +1 -0
- package/dist/frontend/lowering/lower-mixins.d.ts +96 -0
- package/dist/frontend/lowering/lower-mixins.js +534 -0
- package/dist/frontend/lowering/lower-mixins.js.map +1 -0
- package/dist/frontend/lowering/lower-modules.d.ts +135 -0
- package/dist/frontend/lowering/lower-modules.js +1613 -0
- package/dist/frontend/lowering/lower-modules.js.map +1 -0
- package/dist/frontend/lowering/lower-namespaces.d.ts +168 -0
- package/dist/frontend/lowering/lower-namespaces.js +706 -0
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -0
- package/dist/frontend/lowering/lower-server.d.ts +90 -0
- package/dist/frontend/lowering/lower-server.js +3471 -0
- package/dist/frontend/lowering/lower-server.js.map +1 -0
- package/dist/frontend/lowering/lower-stmts.d.ts +361 -0
- package/dist/frontend/lowering/lower-stmts.js +5341 -0
- package/dist/frontend/lowering/lower-stmts.js.map +1 -0
- package/dist/frontend/lowering/lower-stream.d.ts +88 -0
- package/dist/frontend/lowering/lower-stream.js +1533 -0
- package/dist/frontend/lowering/lower-stream.js.map +1 -0
- package/dist/frontend/lowering/lower-test.d.ts +27 -0
- package/dist/frontend/lowering/lower-test.js +353 -0
- package/dist/frontend/lowering/lower-test.js.map +1 -0
- package/dist/frontend/lowering/lowerer.d.ts +1748 -0
- package/dist/frontend/lowering/lowerer.js +6257 -0
- package/dist/frontend/lowering/lowerer.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +272 -0
- package/dist/frontend/lowering/surfaces.js +1096 -0
- package/dist/frontend/lowering/surfaces.js.map +1 -0
- package/dist/frontend/npm-static.d.ts +55 -0
- package/dist/frontend/npm-static.js +300 -0
- package/dist/frontend/npm-static.js.map +1 -0
- package/dist/frontend/npm.d.ts +330 -0
- package/dist/frontend/npm.js +1259 -0
- package/dist/frontend/npm.js.map +1 -0
- package/dist/frontend/program.d.ts +186 -0
- package/dist/frontend/program.js +2255 -0
- package/dist/frontend/program.js.map +1 -0
- package/dist/frontend/provenance-registry.d.ts +48 -0
- package/dist/frontend/provenance-registry.js +87 -0
- package/dist/frontend/provenance-registry.js.map +1 -0
- package/dist/frontend/provenance.d.ts +6 -0
- package/dist/frontend/provenance.js +459 -0
- package/dist/frontend/provenance.js.map +1 -0
- package/dist/frontend/resolve.d.ts +56 -0
- package/dist/frontend/resolve.js +682 -0
- package/dist/frontend/resolve.js.map +1 -0
- package/dist/frontend/shared.d.ts +67 -0
- package/dist/frontend/shared.js +241 -0
- package/dist/frontend/shared.js.map +1 -0
- package/dist/frontend/ts7/adapter.d.ts +7 -0
- package/dist/frontend/ts7/adapter.js +54 -0
- package/dist/frontend/ts7/adapter.js.map +1 -0
- package/dist/frontend/ts7/ast.d.ts +50 -0
- package/dist/frontend/ts7/ast.js +211 -0
- package/dist/frontend/ts7/ast.js.map +1 -0
- package/dist/frontend/ts7/census-check.d.ts +1 -0
- package/dist/frontend/ts7/census-check.js +12 -0
- package/dist/frontend/ts7/census-check.js.map +1 -0
- package/dist/frontend/ts7/checker.d.ts +140 -0
- package/dist/frontend/ts7/checker.js +544 -0
- package/dist/frontend/ts7/checker.js.map +1 -0
- package/dist/frontend/ts7/enums.d.ts +18 -0
- package/dist/frontend/ts7/enums.js +43 -0
- package/dist/frontend/ts7/enums.js.map +1 -0
- package/dist/frontend/ts7/program.d.ts +99 -0
- package/dist/frontend/ts7/program.js +278 -0
- package/dist/frontend/ts7/program.js.map +1 -0
- package/dist/frontend/ts7/world-check.d.ts +3 -0
- package/dist/frontend/ts7/world-check.js +34 -0
- package/dist/frontend/ts7/world-check.js.map +1 -0
- package/dist/frontend/types.d.ts +205 -0
- package/dist/frontend/types.js +2485 -0
- package/dist/frontend/types.js.map +1 -0
- package/dist/index.d.ts +85 -0
- package/dist/index.js +429 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/nodes.d.ts +4334 -0
- package/dist/ir/nodes.js +1906 -0
- package/dist/ir/nodes.js.map +1 -0
- package/dist/ir/serialize.d.ts +4 -0
- package/dist/ir/serialize.js +34 -0
- package/dist/ir/serialize.js.map +1 -0
- package/dist/ir/validate.d.ts +36 -0
- package/dist/ir/validate.js +4885 -0
- package/dist/ir/validate.js.map +1 -0
- package/package.json +30 -6
- package/README.md +0 -3
- package/index.js +0 -2
package/dist/index.js
ADDED
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
import { mkdir, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { basename, dirname, join } from "node:path";
|
|
3
|
+
import { compileC, resolveCc, targetPlatform } from "./backend/cc.js";
|
|
4
|
+
import { emitModule } from "./backend/emission/emitter.js";
|
|
5
|
+
import { emitLlvmModule, LlvmUnsupportedError } from "./backend/llvm/emitter.js";
|
|
6
|
+
import { checkerPanicDiag, iceDiag, isCheckerPanic } from "./diagnostics/diagnostic.js";
|
|
7
|
+
import { moduleEmbedsBuiltin, moduleEmbedsCompressedNpm, moduleUsesAssert, moduleUsesDc, moduleUsesDgram, moduleUsesDynAsync, moduleUsesDynInvoke, moduleUsesEmitter, moduleUsesFetch, moduleUsesFsWatch, moduleUsesHttp2, moduleUsesHttpServer, moduleUsesInspect, moduleUsesNet, moduleUsesNodeTest, moduleUsesProcessEvents, moduleUsesRegex, moduleUsesSearchParams, moduleUsesStream, moduleUsesSymbol, moduleUsesTls, moduleUsesZlib } from "./ir/nodes.js";
|
|
8
|
+
import { serializeModule } from "./ir/serialize.js";
|
|
9
|
+
import { validateModule } from "./ir/validate.js";
|
|
10
|
+
import { checkPreflight, isNodeTypesPath, loadProgram, resolveNpmImport } from "./frontend/program.js";
|
|
11
|
+
import { npmStaticIneligibleReason, npmStaticOffenders, npmStaticPackageOfPath } from "./frontend/npm-static.js";
|
|
12
|
+
import { provenanceSources } from "./frontend/provenance-registry.js";
|
|
13
|
+
import { resolveBareModule } from "./frontend/resolve.js";
|
|
14
|
+
import { isJsSourceFileName, isRelativeSpecifier } from "./frontend/shared.js";
|
|
15
|
+
import { lowerToIr } from "./frontend/lowering/lowerer.js";
|
|
16
|
+
export const VERSION = "0.0.1";
|
|
17
|
+
export { compileC, runtimeSrcDir } from "./backend/cc.js";
|
|
18
|
+
export { emitModule } from "./backend/emission/emitter.js";
|
|
19
|
+
export { renderAll, renderDiagnostic } from "./diagnostics/render.js";
|
|
20
|
+
export { renderCoverage } from "./coverage/report.js";
|
|
21
|
+
export { validateModule } from "./ir/validate.js";
|
|
22
|
+
export { ISLAND_SURFACE } from "./frontend/lowering/surfaces.js";
|
|
23
|
+
export { ambientDtsPath, overridesDtsPath } from "./frontend/program.js";
|
|
24
|
+
export { resolveProvenanceSources } from "./frontend/provenance.js";
|
|
25
|
+
export { setProvenanceSources, } from "./frontend/provenance-registry.js";
|
|
26
|
+
export * as ir from "./ir/nodes.js";
|
|
27
|
+
/** The LLVM backend's tier refusal as a diagnostic. SC3xxx = backend
|
|
28
|
+
* coverage (the program is fine — this backend doesn't compile it yet);
|
|
29
|
+
* the parenthesized kind tag is machine-readable for the differential
|
|
30
|
+
* harness's histogram. */
|
|
31
|
+
function llvmRefusalDiag(err, entryPath) {
|
|
32
|
+
return {
|
|
33
|
+
code: "SC3001",
|
|
34
|
+
message: err.message,
|
|
35
|
+
loc: err.loc ?? { file: entryPath, start: 0, end: 0 },
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** The platform the BUILD is for — the SCRIPTC_TARGET triple's OS under a
|
|
39
|
+
* cross compile, the host's otherwise. The frontend needs it too (the
|
|
40
|
+
* whole program compiles for ONE platform, so path.sep / os.EOL literals
|
|
41
|
+
* and the path-module binding are compile-time constants); a malformed
|
|
42
|
+
* SCRIPTC_CC/SCRIPTC_TARGET combination reports at compileC exactly as
|
|
43
|
+
* before, so analysis falls back to the host here rather than throwing. */
|
|
44
|
+
function buildTargetPlatform() {
|
|
45
|
+
try {
|
|
46
|
+
return targetPlatform(resolveCc());
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return process.platform;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** --npm-static=auto: one throwaway load finds every bare npm import the
|
|
53
|
+
* program's own modules make, then the eligibility heuristics
|
|
54
|
+
* (npm-static.ts) pick the packages whose shipped JS is worth attempting.
|
|
55
|
+
* Rejected candidates report their reason so the coverage output says why
|
|
56
|
+
* auto skipped them. */
|
|
57
|
+
function detectAutoPackages(load, statuses) {
|
|
58
|
+
// package → the resolved types file AND the file whose import found it:
|
|
59
|
+
// the runtime-JS probe below must resolve from the SAME importing file,
|
|
60
|
+
// or a package visible only to a nested package.json realm (a pnpm
|
|
61
|
+
// monorepo's packages/*/node_modules, unreachable from the entry's own
|
|
62
|
+
// walk-up) answers "no runtime JS" for perfectly ordinary installs.
|
|
63
|
+
const seen = new Map();
|
|
64
|
+
for (const sf of [...load.moduleOrder, load.entry]) {
|
|
65
|
+
if (sf.fileName.includes("/node_modules/"))
|
|
66
|
+
continue;
|
|
67
|
+
for (const stmt of sf.statements) {
|
|
68
|
+
if (!ts7IsImportWithStringSpec(stmt))
|
|
69
|
+
continue;
|
|
70
|
+
const spec = stmt.moduleSpecifier.text;
|
|
71
|
+
if (isRelativeSpecifier(spec) || spec.startsWith("node:") || spec.startsWith("#"))
|
|
72
|
+
continue;
|
|
73
|
+
const npm = resolveNpmImport(sf.fileName, spec);
|
|
74
|
+
if (npm === null || isNodeTypesPath(npm.typesFile))
|
|
75
|
+
continue;
|
|
76
|
+
if (!seen.has(npm.packageName))
|
|
77
|
+
seen.set(npm.packageName, { typesFile: npm.typesFile, fromFile: sf.fileName });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const chosen = [];
|
|
81
|
+
for (const [pkg, { typesFile, fromFile }] of seen) {
|
|
82
|
+
const jsEntry = resolveBareModule(fromFile, pkg, "js-only");
|
|
83
|
+
const reason = npmStaticIneligibleReason(pkg, typesFile, jsEntry !== null && isJsSourceFileName(jsEntry.typesFile) ? jsEntry.typesFile : null);
|
|
84
|
+
if (reason === null)
|
|
85
|
+
chosen.push(pkg);
|
|
86
|
+
else
|
|
87
|
+
statuses.push({ package: pkg, status: "fallback", detail: `auto: ${reason}` });
|
|
88
|
+
}
|
|
89
|
+
return chosen;
|
|
90
|
+
}
|
|
91
|
+
/** Duck-typed import-declaration test (the ts7 AST types stay inside the
|
|
92
|
+
* frontend; this file only needs the specifier text). */
|
|
93
|
+
function ts7IsImportWithStringSpec(stmt) {
|
|
94
|
+
const s = stmt;
|
|
95
|
+
return typeof s.moduleSpecifier?.text === "string";
|
|
96
|
+
}
|
|
97
|
+
function runFrontend(entryPath, npmStatic) {
|
|
98
|
+
const statuses = [];
|
|
99
|
+
let requested = [];
|
|
100
|
+
if (npmStatic === "auto") {
|
|
101
|
+
const scout = loadProgram(entryPath);
|
|
102
|
+
try {
|
|
103
|
+
checkPreflight(scout);
|
|
104
|
+
requested = detectAutoPackages(scout, statuses);
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
scout.dispose();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else if (npmStatic !== undefined) {
|
|
111
|
+
requested = [...new Set(npmStatic)];
|
|
112
|
+
}
|
|
113
|
+
// The all-or-nothing fallback loop: a preflight diagnostic ANCHORED in
|
|
114
|
+
// an opted-in package's files (an unsupported require form, a builtin
|
|
115
|
+
// fence) — or an offender the resolution itself reported — drops that
|
|
116
|
+
// package from the set and the whole frontend reloads without it, so
|
|
117
|
+
// its import takes the ordinary island path. Static compilation of a
|
|
118
|
+
// package must never turn a working --dynamic build into a build
|
|
119
|
+
// failure.
|
|
120
|
+
let load = loadProgram(entryPath, { npmStatic: requested });
|
|
121
|
+
let preflight = checkPreflight(load);
|
|
122
|
+
const effective = new Set(requested);
|
|
123
|
+
while (effective.size > 0) {
|
|
124
|
+
const reasons = new Map(npmStaticOffenders());
|
|
125
|
+
for (const d of preflight) {
|
|
126
|
+
const pkg = npmStaticPackageOfPath(d.loc.file);
|
|
127
|
+
if (pkg !== null && !reasons.has(pkg))
|
|
128
|
+
reasons.set(pkg, `${d.code}: ${d.message}`);
|
|
129
|
+
}
|
|
130
|
+
const dropping = [...reasons.keys()].filter((p) => effective.has(p));
|
|
131
|
+
if (dropping.length === 0)
|
|
132
|
+
break;
|
|
133
|
+
for (const p of dropping) {
|
|
134
|
+
effective.delete(p);
|
|
135
|
+
statuses.push({ package: p, status: "fallback", detail: reasons.get(p) });
|
|
136
|
+
}
|
|
137
|
+
load.dispose();
|
|
138
|
+
load = loadProgram(entryPath, { npmStatic: effective });
|
|
139
|
+
preflight = checkPreflight(load);
|
|
140
|
+
}
|
|
141
|
+
// AUTO mode's last resort: an opt-in can change the PROGRAM's OWN
|
|
142
|
+
// typecheck (the inferred surface replaces the shipped .d.ts — the
|
|
143
|
+
// commander name()/description() chaining shape, or a package consumed
|
|
144
|
+
// for type-only imports), and those SC0001s anchor in USER files no
|
|
145
|
+
// offender attribution reaches. Auto promised eligibility detection,
|
|
146
|
+
// not a broken program: each remaining package is probed ALONE-dropped
|
|
147
|
+
// (n is the direct-import count — a handful of extra analysis loads);
|
|
148
|
+
// culprits whose removal clears the errors fall back with a note, and
|
|
149
|
+
// if no subset typechecks, everything drops. Explicit opt-ins keep the
|
|
150
|
+
// errors (the user asked for exactly these packages and the errors are
|
|
151
|
+
// the actionable answer).
|
|
152
|
+
if (npmStatic === "auto" && effective.size > 0 && preflight.some((d) => d.code === "SC0001")) {
|
|
153
|
+
const dropWithNote = (p) => {
|
|
154
|
+
effective.delete(p);
|
|
155
|
+
statuses.push({
|
|
156
|
+
package: p,
|
|
157
|
+
status: "fallback",
|
|
158
|
+
detail: "auto: the program does not typecheck against its inferred surface",
|
|
159
|
+
});
|
|
160
|
+
};
|
|
161
|
+
// Attribute per package by probing each SOLO (culprits are almost
|
|
162
|
+
// always independent — each package's inferred surface breaks its own
|
|
163
|
+
// import sites), then reload with the survivors; interaction effects
|
|
164
|
+
// that still fail drop everything left.
|
|
165
|
+
for (const p of [...effective]) {
|
|
166
|
+
const probe = loadProgram(entryPath, { npmStatic: [p] });
|
|
167
|
+
const probeDiags = checkPreflight(probe);
|
|
168
|
+
probe.dispose();
|
|
169
|
+
if (probeDiags.some((d) => d.code === "SC0001"))
|
|
170
|
+
dropWithNote(p);
|
|
171
|
+
}
|
|
172
|
+
load.dispose();
|
|
173
|
+
load = loadProgram(entryPath, { npmStatic: effective });
|
|
174
|
+
preflight = checkPreflight(load);
|
|
175
|
+
if (preflight.some((d) => d.code === "SC0001") && effective.size > 0) {
|
|
176
|
+
for (const p of [...effective])
|
|
177
|
+
dropWithNote(p);
|
|
178
|
+
load.dispose();
|
|
179
|
+
load = loadProgram(entryPath, { npmStatic: effective });
|
|
180
|
+
preflight = checkPreflight(load);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
for (const p of requested) {
|
|
184
|
+
if (effective.has(p))
|
|
185
|
+
statuses.push({ package: p, status: "static" });
|
|
186
|
+
}
|
|
187
|
+
const finalLoad = load;
|
|
188
|
+
return {
|
|
189
|
+
preflight,
|
|
190
|
+
entryText: () => finalLoad.entry.text,
|
|
191
|
+
sourceTexts: () => new Map([finalLoad.entry, ...finalLoad.moduleOrder].map((sf) => [sf.fileName, sf.text])),
|
|
192
|
+
lower: (opts) => lowerToIr(finalLoad.program, finalLoad.entry, finalLoad.moduleOrder, { ...opts, startupCrash: finalLoad.startupCrash ?? null }),
|
|
193
|
+
npmStatic: statuses,
|
|
194
|
+
dispose: finalLoad.dispose,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
/** Analysis without codegen: how much of the program compiles statically.
|
|
198
|
+
* Unlike compile(), lowering diagnostics are data here, not failure. */
|
|
199
|
+
export function analyze(entryPath, opts = {}) {
|
|
200
|
+
const fe = runFrontend(entryPath, opts.npmStatic);
|
|
201
|
+
try {
|
|
202
|
+
const emptyStats = { statementsTotal: 0, statementsFailed: 0, statementsIsland: 0, functionsSkipped: 0 };
|
|
203
|
+
const preflight = fe.preflight;
|
|
204
|
+
// Import-FORM fences don't stop the analysis: the module graph is still
|
|
205
|
+
// computable (a fenced import contributes no edges), the imported
|
|
206
|
+
// bindings poison at their use sites, and the fences join the blockers
|
|
207
|
+
// list beside statement-level ones — the report shows a statement
|
|
208
|
+
// percentage instead of stopping at the import lines. Everything else —
|
|
209
|
+
// tsc errors, config incompatibilities, circular imports — still stops
|
|
210
|
+
// at preflight (no trustworthy program to lower). Builds are unchanged:
|
|
211
|
+
// compile() fails on every preflight diagnostic exactly as before.
|
|
212
|
+
const IMPORT_FENCES = new Set(["SC1010", "SC1012", "SC1013", "SC1014", "SC1015"]);
|
|
213
|
+
if (preflight.some((d) => !IMPORT_FENCES.has(d.code))) {
|
|
214
|
+
return {
|
|
215
|
+
coverage: {
|
|
216
|
+
file: entryPath,
|
|
217
|
+
dynamic: opts.dynamic ?? false,
|
|
218
|
+
stats: emptyStats,
|
|
219
|
+
diagnostics: preflight,
|
|
220
|
+
...(fe.npmStatic.length > 0 ? { npmStatic: fe.npmStatic } : {}),
|
|
221
|
+
preflightFailed: true,
|
|
222
|
+
},
|
|
223
|
+
sourceTexts: fe.sourceTexts(),
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
// Coverage is whole-program by design: builds stop at what the entry
|
|
227
|
+
// reaches, but the analysis additionally lowers the unreached remainder
|
|
228
|
+
// (throwaway) so the report covers everything the source declares — with
|
|
229
|
+
// the unreached share in its own group.
|
|
230
|
+
const lowered = fe.lower({
|
|
231
|
+
dynamic: opts.dynamic ?? false,
|
|
232
|
+
coverage: true,
|
|
233
|
+
targetPlatform: buildTargetPlatform(),
|
|
234
|
+
});
|
|
235
|
+
const provenance = provenanceSources();
|
|
236
|
+
return {
|
|
237
|
+
coverage: {
|
|
238
|
+
file: entryPath,
|
|
239
|
+
dynamic: opts.dynamic ?? false,
|
|
240
|
+
stats: lowered.stats,
|
|
241
|
+
// The import fences report as blockers alongside the statement-level
|
|
242
|
+
// ones (use sites of the fenced bindings emit matching diagnostics,
|
|
243
|
+
// which the report groups with these).
|
|
244
|
+
diagnostics: [...preflight, ...lowered.diagnostics],
|
|
245
|
+
...(lowered.runtimeFences.length > 0 ? { runtimeFences: lowered.runtimeFences } : {}),
|
|
246
|
+
...(lowered.unreached ? { unreached: lowered.unreached } : {}),
|
|
247
|
+
...(lowered.npmBuiltins ? { npmBuiltins: lowered.npmBuiltins } : {}),
|
|
248
|
+
...(lowered.npmLazyTraps ? { npmLazyTraps: lowered.npmLazyTraps } : {}),
|
|
249
|
+
...(fe.npmStatic.length > 0 ? { npmStatic: fe.npmStatic } : {}),
|
|
250
|
+
// --provenance-sources: the per-package attribution inputs (the
|
|
251
|
+
// report aggregates statsByFile under each package's source dir).
|
|
252
|
+
...(provenance !== null ? { provenance } : {}),
|
|
253
|
+
...(lowered.statsByFile ? { statsByFile: lowered.statsByFile } : {}),
|
|
254
|
+
...(lowered.provenanceElided ? { provenanceElided: lowered.provenanceElided } : {}),
|
|
255
|
+
preflightFailed: false,
|
|
256
|
+
},
|
|
257
|
+
sourceTexts: fe.sourceTexts(),
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
finally {
|
|
261
|
+
fe.dispose();
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/** The whole pipeline: load → preflight → lower → validate → emit C → clang. */
|
|
265
|
+
export async function compile(entryPath, opts) {
|
|
266
|
+
const fe = runFrontend(entryPath, opts.npmStatic);
|
|
267
|
+
let lowered;
|
|
268
|
+
let entryText;
|
|
269
|
+
let sourceTexts;
|
|
270
|
+
// The frontend (and its tsgo server) is released as soon as lowering
|
|
271
|
+
// ends — clang and the link never hold it open.
|
|
272
|
+
try {
|
|
273
|
+
const fail = (diagnostics) => ({
|
|
274
|
+
ok: false,
|
|
275
|
+
diagnostics,
|
|
276
|
+
sourceTexts: fe.sourceTexts(),
|
|
277
|
+
});
|
|
278
|
+
if (fe.preflight.length > 0)
|
|
279
|
+
return fail(fe.preflight);
|
|
280
|
+
try {
|
|
281
|
+
lowered = fe.lower({
|
|
282
|
+
dynamic: opts.dynamic ?? false,
|
|
283
|
+
targetPlatform: buildTargetPlatform(),
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
catch (e) {
|
|
287
|
+
// The last-resort panic fence: an upstream tsgo panic that crossed a
|
|
288
|
+
// checker call no statement/collection fence wrapped still becomes a
|
|
289
|
+
// clean failed compile (anchored at the entry), never a crashed CLI.
|
|
290
|
+
if (!isCheckerPanic(e))
|
|
291
|
+
throw e;
|
|
292
|
+
return fail([
|
|
293
|
+
checkerPanicDiag(e.message.split("\n", 1)[0], { file: entryPath, start: 0, end: 0 }),
|
|
294
|
+
]);
|
|
295
|
+
}
|
|
296
|
+
if (lowered.module === null)
|
|
297
|
+
return fail(lowered.diagnostics);
|
|
298
|
+
const validation = validateModule(lowered.module);
|
|
299
|
+
if (validation.length > 0) {
|
|
300
|
+
return fail(validation.map((v) => iceDiag(v.message, v.loc)));
|
|
301
|
+
}
|
|
302
|
+
entryText = fe.entryText();
|
|
303
|
+
sourceTexts = fe.sourceTexts();
|
|
304
|
+
}
|
|
305
|
+
finally {
|
|
306
|
+
fe.dispose();
|
|
307
|
+
}
|
|
308
|
+
await mkdir(opts.outDir, { recursive: true });
|
|
309
|
+
const stem = basename(entryPath).replace(/\.(ts|js|mjs|cjs)$/, "");
|
|
310
|
+
// Both backends hang off the same in-memory IrModule (never the JSON
|
|
311
|
+
// dump); the LLVM backend's .ll takes the .c's seat on the exact clang
|
|
312
|
+
// command line below — compileC accepts either. The default lane tries
|
|
313
|
+
// LLVM first; a tier refusal retries ONLY the emit with the C backend
|
|
314
|
+
// (the frontend ran once, the IR is backend-agnostic — nothing recompiles).
|
|
315
|
+
let cPath = join(opts.outDir, `${stem}.c`);
|
|
316
|
+
let backend = "c";
|
|
317
|
+
let llvmRefusal;
|
|
318
|
+
if (opts.backend !== "c") {
|
|
319
|
+
try {
|
|
320
|
+
const ll = emitLlvmModule(lowered.module);
|
|
321
|
+
cPath = join(opts.outDir, `${stem}.ll`);
|
|
322
|
+
await writeFile(cPath, ll);
|
|
323
|
+
backend = "llvm";
|
|
324
|
+
}
|
|
325
|
+
catch (err) {
|
|
326
|
+
if (!(err instanceof LlvmUnsupportedError))
|
|
327
|
+
throw err;
|
|
328
|
+
// Explicit backend "llvm" keeps the fail-loudly contract (the
|
|
329
|
+
// debugging/CI pin): SC3001, never a silent lane change.
|
|
330
|
+
if (opts.backend === "llvm") {
|
|
331
|
+
return { ok: false, diagnostics: [llvmRefusalDiag(err, entryPath)], sourceTexts };
|
|
332
|
+
}
|
|
333
|
+
llvmRefusal = err.kind;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
if (backend === "c") {
|
|
337
|
+
await writeFile(cPath, emitModule(lowered.module, entryText));
|
|
338
|
+
}
|
|
339
|
+
// Kept-TU honesty: outDir persists across builds (the CLI's .scriptc/),
|
|
340
|
+
// so a lane change would leave the PREVIOUS lane's TU beside the fresh
|
|
341
|
+
// one — remove the loser so the surviving TU is always the one the
|
|
342
|
+
// binary below was linked from.
|
|
343
|
+
await rm(join(opts.outDir, `${stem}${backend === "llvm" ? ".c" : ".ll"}`), { force: true });
|
|
344
|
+
let irPath;
|
|
345
|
+
if (opts.emitIr) {
|
|
346
|
+
irPath = join(opts.outDir, `${stem}.ir.json`);
|
|
347
|
+
await writeFile(irPath, serializeModule(lowered.module));
|
|
348
|
+
}
|
|
349
|
+
await mkdir(dirname(opts.outPath), { recursive: true });
|
|
350
|
+
await compileC({
|
|
351
|
+
cPath,
|
|
352
|
+
outPath: opts.outPath,
|
|
353
|
+
sanitize: opts.sanitize ?? false,
|
|
354
|
+
dynamic: opts.dynamic ?? false,
|
|
355
|
+
// The link switch for scr_regex.c + libregexp: detected on the IR, so
|
|
356
|
+
// regex-free programs keep the historical (pinned) command line.
|
|
357
|
+
regex: moduleUsesRegex(lowered.module),
|
|
358
|
+
// The link switch for scr_fetch.c (the native bridge over scr_net +
|
|
359
|
+
// scr_tls + scr_http's client parser + zlib — cc.ts implies those
|
|
360
|
+
// units into the link): embedded npm code that references fetch gets
|
|
361
|
+
// the bridge; everything else keeps its exact link line.
|
|
362
|
+
fetch: moduleUsesFetch(lowered.module),
|
|
363
|
+
// The island's node:http/https client bridge: embedded graphs that
|
|
364
|
+
// import those builtins pull scr_net_island.c + the socket units.
|
|
365
|
+
netIsland: moduleEmbedsBuiltin(lowered.module, "node:http") ||
|
|
366
|
+
moduleEmbedsBuiltin(lowered.module, "node:https") ||
|
|
367
|
+
moduleEmbedsBuiltin(lowered.module, "node:net") ||
|
|
368
|
+
moduleEmbedsBuiltin(lowered.module, "node:tls"),
|
|
369
|
+
// The link switch for scr_zlib.c + libz: zlib.* libCalls on the IR,
|
|
370
|
+
// node:zlib in the embedded graph, or COMPRESSED embedded module text
|
|
371
|
+
// (emit-island.ts stores big npm sources as raw DEFLATE; the emitted
|
|
372
|
+
// main installs scr_zlib_inflate_exact on the same predicate).
|
|
373
|
+
zlib: moduleUsesZlib(lowered.module) || moduleEmbedsCompressedNpm(lowered.module),
|
|
374
|
+
// The link switch for scr_assert.c: assert.* libCalls on the IR (the
|
|
375
|
+
// regex switch also pulls it — scr_regex.c calls the assert helpers).
|
|
376
|
+
assert: moduleUsesAssert(lowered.module),
|
|
377
|
+
// The link switch for scr_inspect.c: insp.* libCalls on the IR.
|
|
378
|
+
inspect: moduleUsesInspect(lowered.module),
|
|
379
|
+
// The link switch for scr_dyn_invoke.c: dynInvoke nodes or
|
|
380
|
+
// dyn.defineProps libCalls on the IR.
|
|
381
|
+
dynInvoke: moduleUsesDynInvoke(lowered.module),
|
|
382
|
+
// The link switch for scr_dc.c: dc.* libCalls on the IR (the
|
|
383
|
+
// diagnostics_channel registry and pub/sub).
|
|
384
|
+
dc: moduleUsesDc(lowered.module),
|
|
385
|
+
// The link switch for scr_async_dyn.c: the checked-dynamic async
|
|
386
|
+
// surfaces (cc.ts also pulls it under the dynInvoke/dc gates).
|
|
387
|
+
dynAsync: moduleUsesDynAsync(lowered.module),
|
|
388
|
+
// The link switch for scr_events.c: process signal/exit listeners and
|
|
389
|
+
// the stdin event surface on the IR.
|
|
390
|
+
events: moduleUsesProcessEvents(lowered.module),
|
|
391
|
+
// The link switch for scr_events_emitter.c: the node:events
|
|
392
|
+
// EventEmitter surface on the IR (emitter.* libCalls or the
|
|
393
|
+
// %EventEmitter class def).
|
|
394
|
+
emitter: moduleUsesEmitter(lowered.module),
|
|
395
|
+
// The link switch for scr_symbol.c: sym.* libCalls or a symbol-kind
|
|
396
|
+
// type anywhere on the IR.
|
|
397
|
+
symbol: moduleUsesSymbol(lowered.module),
|
|
398
|
+
// The link switch for scr_url_params.c: sp.* libCalls, the
|
|
399
|
+
// url.searchParams getter, or a searchParams-kind type on the IR.
|
|
400
|
+
searchParams: moduleUsesSearchParams(lowered.module),
|
|
401
|
+
// The link switch for scr_stream.c: the node:stream class surface on
|
|
402
|
+
// the IR (stream libCalls or the %Readable-family class defs).
|
|
403
|
+
stream: moduleUsesStream(lowered.module),
|
|
404
|
+
// The link switch for scr_net.c: net.* (or http.* — http rides on
|
|
405
|
+
// net) libCalls on the IR.
|
|
406
|
+
net: moduleUsesNet(lowered.module),
|
|
407
|
+
// The link switch for scr_http.c: http.* libCalls on the IR.
|
|
408
|
+
http: moduleUsesHttpServer(lowered.module),
|
|
409
|
+
http2: moduleUsesHttp2(lowered.module),
|
|
410
|
+
// The link switch for scr_dgram.c: dgram.* or dns.* libCalls on the IR.
|
|
411
|
+
dgram: moduleUsesDgram(lowered.module),
|
|
412
|
+
// The link switch for scr_watch.c: fs.watch/watcher.* libCalls on the IR.
|
|
413
|
+
watch: moduleUsesFsWatch(lowered.module),
|
|
414
|
+
// The link switch for scr_test.c: test.* libCalls on the IR.
|
|
415
|
+
nodeTest: moduleUsesNodeTest(lowered.module),
|
|
416
|
+
// The link switch for scr_tls.c + the vendored mbedTLS archive:
|
|
417
|
+
// tls.* or https.* libCalls on the IR.
|
|
418
|
+
tls: moduleUsesTls(lowered.module),
|
|
419
|
+
});
|
|
420
|
+
return {
|
|
421
|
+
ok: true,
|
|
422
|
+
binaryPath: opts.outPath,
|
|
423
|
+
cPath,
|
|
424
|
+
backend,
|
|
425
|
+
...(irPath !== undefined ? { irPath } : {}),
|
|
426
|
+
...(llvmRefusal !== undefined ? { llvmRefusal } : {}),
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|