Files
scriptc/packages/compiler/src/backend/executable-features.ts
T
Chris Tate 77b6830da1 Centralize builtin contracts and IR analysis ownership
- Derive builtin names from shared signatures and preserve their semantic documentation.
- Separate runtime selection, exception metadata, and library policy from core IR.
- Enforce shared-signature imports and preserve native and public contracts.
2026-10-05 18:10:38 -05:00

50 lines
1.6 KiB
TypeScript

/** Runtime requirements derived from the lowered program, shared by compiler hosts. */
import { type IrModule } from "../ir/ir.js";
import {
moduleEmbedsBuiltin,
moduleEmbedsCompressedNpm,
moduleRuntimeFeatures,
} from "../ir/runtime-features.js";
import { hasForeignFfiCallback } from "./ffi-callbacks.js";
import type { NativeLinkFeatures } from "./native-link-info.js";
export function executableLinkFeatures(mod: IrModule, dynamic: boolean): NativeLinkFeatures {
const features = moduleRuntimeFeatures(mod);
return {
dynamic,
regex: features.regex,
copying: features.copying,
textDecoderLegacy: features.legacyTextDecoder,
fileHandle: features.fileHandle,
fetch: features.fetch,
netIsland:
moduleEmbedsBuiltin(mod, "node:http") ||
moduleEmbedsBuiltin(mod, "node:https") ||
moduleEmbedsBuiltin(mod, "node:net") ||
moduleEmbedsBuiltin(mod, "node:tls"),
zlib: features.zlib || moduleEmbedsCompressedNpm(mod),
assert: features.assert,
inspect: features.inspect,
dynInvoke: features.dynInvoke,
dc: features.dc,
dynAsync: features.dynAsync,
events: features.processEvents,
emitter: features.emitter,
symbol: features.symbol,
bigint: features.bigint,
searchParams: features.searchParams,
qs: features.qs,
parseArgs: features.parseArgs,
stream: features.stream,
net: features.net,
http: features.http,
http2: features.http2,
dgram: features.dgram,
watch: features.fsWatch,
foreignFfi: hasForeignFfiCallback(mod.ffiImports ?? []),
nodeTest: features.nodeTest,
tls: features.tls,
tlsCa: features.tlsCa,
};
}