/* The FALLBACK Node-ish declarations — shipped into the program ONLY when * the target project has no @types/node (see loadProgram): console, the * process global, and the "node:fs" module, typed as exactly the supported * surface so unsupported uses are honest TYPE errors. Where a member is * part of the stock lib surface but has no lowering, prefer DECLARING it * (console's non-lowered members below): a program that typechecks under * its own tsc then reaches the per-site lowering fence with its hint, * instead of a fallback-manufactured type error it cannot reproduce. * * When the project's node_modules contains @types/node, this file STANDS * DOWN — its declarations would collide with @types/node's own (`declare * var process`, `declare var console`, `declare module "node:fs"`), and * the project's real types win. The LOWERED surface does not change: the * lowerer recognizes the same members by name + provenance (shipped * ambient OR @types/node — see isStdlibFile/isNodeTypesPath), and * everything else @types/node declares hits the SC2020-family fence at * its use site. scriptc.d.ts holds the always-shipped core (divergence * overrides, comptime, setTimeout — which MERGES with * @types/node's as an overload instead of colliding). */ /* NodeJS.ErrnoException — the Error shape @types/node attaches to fs and * child failures. The TYPE maps to the runtime Error root; only `code` * has a lowering (throw sites stamp the errno name — "ENOENT" and * friends; reads answer `string | undefined`), errno/syscall/path * typecheck and fence per member. */ declare namespace NodeJS { interface ProcessVersions { readonly node: string; readonly openssl?: string; readonly [name: string]: string | undefined; } /* The process introspection records — named interfaces so the type * mapper interns their record shapes (the RemoteInfo pattern; the * names match @types/node's, so the mappings hold when it adopts). */ interface CpuUsage { user: number; system: number; } interface MemoryUsage { rss: number; heapTotal: number; heapUsed: number; external: number; arrayBuffers: number; } /* process.memoryUsage(): rss from the OS, heapTotal/heapUsed from the * runtime heap's own accounting; external and arrayBuffers are 0. */ interface MemoryUsageFn { (): MemoryUsage; rss(): number; } interface ProcessRelease { name: string; sourceUrl?: string | undefined; headersUrl?: string | undefined; libUrl?: string | undefined; lts?: string | undefined; } interface ResourceUsage { userCPUTime: number; systemCPUTime: number; maxRSS: number; sharedMemorySize: number; unsharedDataSize: number; unsharedStackSize: number; minorPageFault: number; majorPageFault: number; swappedOut: number; fsRead: number; fsWrite: number; ipcSent: number; ipcReceived: number; signalsCount: number; voluntaryContextSwitches: number; involuntaryContextSwitches: number; } interface ErrnoException extends Error { errno?: number | undefined; code?: string | undefined; path?: string | undefined; syscall?: string | undefined; } /* The readable-stream interface every Node stream implements. The * piped child-output stream (child.stdout / child.stderr under stdio * ["ignore", "pipe", "pipe"]) is declared with it: 'data' fires one * Buffer chunk per read (≤64KB, consumer-driven — no listener, no * read), 'end' fires once at EOF and always BEFORE the child's 'exit'. A * flowing stream keeps the loop alive. A program that also passes * other streams (fs, zlib, node:stream) where this interface is * expected compiles it as the node:stream Readable, with child output * bridged into one. */ interface ReadableStream { on(event: "data", listener: (chunk: Buffer) => void): void; on(event: "data", listener: (chunk: string) => void): void; on(event: "end", listener: () => void): void; on(event: string, listener: (...args: any[]) => void): void; once(event: "data", listener: (chunk: Buffer) => void): void; once(event: "data", listener: (chunk: string) => void): void; once(event: "end", listener: () => void): void; once(event: string, listener: (...args: any[]) => void): void; /* setEncoding('utf8') makes subsequent data chunks strings, including * multibyte sequences split across native pipe reads. */ setEncoding(encoding: string): this; readonly readable: boolean; pause(): this; resume(): this; isPaused(): boolean; pipe(destination: T, options?: { end?: boolean }): T; unpipe(destination?: WritableStream): this; [Symbol.asyncIterator](): AsyncIterableIterator; } /* The writable-stream interface every Node stream implements: * process.stdout/process.stderr, fs.WriteStream and the node:stream * Writable family. Written only to the process streams, it compiles as * their descriptor; with other streams flowing into it, as the * node:stream Writable (the process streams convert into one). */ interface WritableStream { readonly writable: boolean; write(data: string | Uint8Array, callback?: (error?: Error | null) => void): boolean; write( data: string | Uint8Array, encoding: BufferEncoding, callback?: (error?: Error | null) => void, ): boolean; end(callback?: () => void): void; end(data: string | Uint8Array, callback?: () => void): void; end(data: string | Uint8Array, encoding: BufferEncoding, callback?: () => void): void; /* Node's EventEmitter signature: listeners take untyped arguments. */ on(event: string, listener: (...args: any[]) => void): void; once(event: string, listener: (...args: any[]) => void): void; } } /* log/info/debug write stdout (info and debug ARE log in Node); error and * warn are ONE stream (warn IS error under another name) and write stderr * with the exact same formatting. Each call submits its output promptly; * stdout settles first under merged 2>&1 output. Arguments take Node's * console semantics: strings verbatim, everything else through the static * util.inspect rendering — so the parameters are unknown[], like stock * lib's console; values inspect cannot render statically (functions inside * composites, class hierarchies, `any`) fence per argument with a hint. * assert, count/countReset, dir/dirxml, group/groupCollapsed/groupEnd, * table, time/timeEnd/timeLog, clear, and the inspector-only * profile/profileEnd/timeStamp lower on the global console. * * trace is declared too — not because it lowers, but so a program that * typechecks under its own tsc reaches the per-site SC2020 fence naming * the member and the supported surface, instead of dying on a * fallback-manufactured type error its own tsc cannot reproduce. */ declare const console: { log(...args: unknown[]): void; info(...args: unknown[]): void; debug(...args: unknown[]): void; error(...args: unknown[]): void; warn(...args: unknown[]): void; assert(condition?: unknown, ...data: unknown[]): void; clear(): void; count(label?: string): void; countReset(label?: string): void; dir(item?: unknown, options?: unknown): void; dirxml(...data: unknown[]): void; group(...data: unknown[]): void; groupCollapsed(...data: unknown[]): void; groupEnd(): void; table(tabularData?: unknown, properties?: readonly string[]): void; time(label?: string): void; timeEnd(label?: string): void; timeLog(label?: string, ...data: unknown[]): void; timeStamp(label?: string): void; profile(label?: string): void; profileEnd(label?: string): void; trace(...data: unknown[]): void; Console: typeof import("node:console").Console; }; // node:console exports the global instance's bound methods and the Console // constructor: instances over process.stdout/process.stderr or node:stream // writables lower their log/info/debug/error/warn members; their remaining // methods are declared so unsupported uses reach named fences. type ScriptcConsoleMethods = typeof console; declare module "node:console" { export class Console { constructor(stdout: unknown, stderr?: unknown, ignoreErrors?: boolean); } export interface Console extends ScriptcConsoleMethods {} export const log: ScriptcConsoleMethods["log"]; export const info: ScriptcConsoleMethods["info"]; export const debug: ScriptcConsoleMethods["debug"]; export const error: ScriptcConsoleMethods["error"]; export const warn: ScriptcConsoleMethods["warn"]; export const assert: ScriptcConsoleMethods["assert"]; export const clear: ScriptcConsoleMethods["clear"]; export const count: ScriptcConsoleMethods["count"]; export const countReset: ScriptcConsoleMethods["countReset"]; export const dir: ScriptcConsoleMethods["dir"]; export const dirxml: ScriptcConsoleMethods["dirxml"]; export const group: ScriptcConsoleMethods["group"]; export const groupCollapsed: ScriptcConsoleMethods["groupCollapsed"]; export const groupEnd: ScriptcConsoleMethods["groupEnd"]; export const table: ScriptcConsoleMethods["table"]; export const time: ScriptcConsoleMethods["time"]; export const timeEnd: ScriptcConsoleMethods["timeEnd"]; export const timeLog: ScriptcConsoleMethods["timeLog"]; export const timeStamp: ScriptcConsoleMethods["timeStamp"]; export const profile: ScriptcConsoleMethods["profile"]; export const profileEnd: ScriptcConsoleMethods["profileEnd"]; export const trace: ScriptcConsoleMethods["trace"]; const defaultConsole: ScriptcConsoleMethods & { Console: typeof Console }; export default defaultConsole; } declare module "console" { export * from "node:console"; export { default } from "node:console"; } /* The process global (Node-like, deliberately tiny). Every member lowers to * a `libCall` and is implemented in the runtime's scr_lib.c. `argv` is one * interned array (identity and mutation semantics match Node's stable * process.argv); `exit` flushes stdout and ends the process immediately. * `env` reads (`process.env.NAME` / `process.env[name]`) are getenv(3) * behind a `string | undefined` union — narrow with `!== undefined` before * use — and writes are setenv(3): later reads and spawned children observe * them, like Node. `process.env` as a WHOLE value is a fresh * `{ [k: string]: string | undefined }` SNAPSHOT record over environ * (spreads, Object.keys, spawn-env flows). `pid`/`getuid()` are the POSIX * identities (getuid is declared optional to match @types/node — the * `?.()` call lowers as the plain call on this POSIX-only target), and * `kill` has Node's exact semantics: signal names or numbers, SIGTERM * default, signal 0 as an existence probe, and Node's error shapes * (`kill ESRCH`/`kill EPERM` Errors, TypeErrors for unknown signals and * non-int32 pids). */ declare var process: { getBuiltinModule(id: string): unknown; hrtime: { (time?: [number, number]): [number, number]; bigint(): bigint; }; argv: string[]; platform: string; /* The binary's OWN architecture ("arm64", "x64") — Node's answer for * its own build on the same machine. */ readonly arch: string; /* Stable native dictionary. node and openssl name compatibility targets; * components absent from the runtime have no entries. */ readonly versions: NodeJS.ProcessVersions; /* "v" plus versions.node: the compatibility target's release. */ readonly version: string; /* The build-configuration snapshot Node exposes from its gyp config. * A scriptc binary has no V8 and no gyp, so `variables` answers what is * true of a compiled binary: v8_enable_i18n_support is 1 like Node's * (the read links ICU, which the binary then carries), while the gyp * variables it cannot answer (icu_path, asan, …) read undefined through * the index signature (string | number | boolean | undefined), and * `target_defaults` is absent — probe code takes its documented * fallbacks. */ readonly config: { readonly variables: { readonly [name: string]: string | number | boolean | undefined }; readonly target_defaults?: { readonly default_configuration: string }; }; /* Node's feature probes — a compiled binary has no inspector and is * not a debug build; undeclared members read undefined through the * index signature. */ readonly features: { readonly [name: string]: boolean | undefined }; /* umask(2) — sets the file-mode creation mask and returns the previous * one; the no-argument form reads without setting (Node's shape). */ umask(mask?: number): number; /* chdir(2) — failures throw Node's fs-shaped catchable error. */ chdir(directory: string): void; loadEnvFile(path?: string | URL | Uint8Array): void; /* The extra CLI arguments Node itself consumed (--expose-internals, * ...): a compiled binary consumed none, so this is always []. */ readonly execArgv: string[]; /* Node's internal "exit sequence started" flag (real, undocumented * surface — the test harness reads it): true while 'exit' listeners * run, false otherwise. */ readonly _exiting: boolean; /* Node's raw synchronous stderr write (internal surface the test * harness uses on its failure paths). */ _rawDebug(...args: unknown[]): void; pid: number; /* The compiled binary's own resolved absolute path — Node's is the node * executable's (SEMANTICS.md divergence 12, the argv[0]/argv[1] story). */ readonly execPath: string; getuid?(): number; getgid?(): number; geteuid?(): number; getegid?(): number; getgroups?(): number[]; readonly ppid: number; /* libuv's process title: argv[0] until set; a write is truncated to * the original argument area on POSIX and sets the console title on * Windows. */ title: string; argv0: string; readonly release: NodeJS.ProcessRelease; /* signal admits null (Node treats it as the SIGTERM default) — real * callers forward a `string | null` result field. */ kill(pid: number, signal?: string | number | null): true; env: { [name: string]: string | undefined }; /** Numeric writes set the status returned by ordinary program exit. */ exitCode?: number; /* Silence and throw DeprecationWarnings (util.deprecate, * process.emitWarning); undefined until assigned. */ noDeprecation?: boolean; throwDeprecation?: boolean; /* `never`, like @types/node: code behind an early-exit guard narrows * (`if (!x) process.exit(1)` proves x afterwards) — typed `void` the * guard narrows nothing and correct programs fail preflight. The * lowering already handles the optional code (bare exit() uses exitCode, * or zero when it was never set). */ exit(code?: number | null): never; cwd(): string; /* The user tick queue: callbacks run before promise jobs at every loop * checkpoint (Node's tick-then-microtask order); trailing arguments * pass to the callback at fire time, like Node. */ nextTick(callback: (...args: any[]) => void, ...args: any[]): void; /* The process introspection statics — Node's shapes and units. */ uptime(): number; cpuUsage(previousValue?: NodeJS.CpuUsage): NodeJS.CpuUsage; threadCpuUsage(previousValue?: NodeJS.CpuUsage): NodeJS.CpuUsage; resourceUsage(): NodeJS.ResourceUsage; memoryUsage: NodeJS.MemoryUsageFn; availableMemory(): number; constrainedMemory(): number; /* The loop's own bookkeeping: 'Timeout' per armed timer, 'Immediate' * per queued unfired immediate; unmodeled kinds absent (SEMANTICS.md). */ getActiveResourcesInfo(): string[]; /* The raw byte writes — no newline, no formatting. stdout shares * console.log's stream, each call is submitted promptly, and ordering is * preserved. The boolean is Node's backpressure signal — these synchronous * writes always return true. Static BufferEncoding arguments and the * completion callback overloads match Node's WritableStream surface. */ stdout: import("tty").WriteStream; stderr: import("tty").WriteStream; /* The stdin stream, the piped-input slice: the TTY probe, the * data/end/error events and readline's 'keypress' (on and once — a 'data' listener keeps the * event loop alive until EOF, like Node's flowing stdin), destroy() * (full teardown: nothing fires after, the loop stops waiting), and * async iteration (`for await (const chunk of process.stdin)` — chunks * are Uint8Array values, ending at EOF). setEncoding has no lowering * (chunks stay bytes; decode with TextDecoder). */ stdin: { readonly isTTY: boolean; /* The descriptor the stream is built over (Node reports 0 here and * 1/2 on stdout/stderr, whatever the underlying file is). */ readonly fd: 0; /* True while a TTY stdin runs in raw mode; Node's own property is * undefined on a non-TTY stdin (the `x || false` idiom). */ readonly isRaw: boolean; on(event: "data", listener: (chunk: Uint8Array) => void): void; on(event: "end", listener: () => void): void; on(event: "error", listener: (err: Error) => void): void; /* readline.emitKeypressEvents(process.stdin)'s keys */ on( event: "keypress", listener: (str: string | undefined, key: import("readline").Key) => void, ): void; once(event: "data", listener: (chunk: Uint8Array) => void): void; once(event: "end", listener: () => void): void; once(event: "error", listener: (err: Error) => void): void; once( event: "keypress", listener: (str: string | undefined, key: import("readline").Key) => void, ): void; destroy(): void; setEncoding(encoding: "utf8"): void; /* Termios raw mode on a TTY stdin (libuv's UV_TTY_MODE_RAW, the mode * Node applies); on a NON-TTY stdin the member does not exist in Node * and the call throws Node's exact catchable TypeError. Node returns * `this` for chaining; here the call is statement-position only. */ setRawMode(mode: boolean): void; [Symbol.asyncIterator](): AsyncIterableIterator; }; /* Process events, the CLI slice: SIGINT/SIGTERM handlers (watching a * signal replaces its default disposition; removing the last listener * restores it; signal listeners never keep the loop alive — all Node's * rules) and the 'exit' hook (runs synchronously at termination with * the exit code; scheduling anything from it is too late, like Node). * `once` auto-removes after the first delivery; `off` removes by * listener identity — bind the listener to a const so registration and * removal see the same value. */ on(event: "SIGINT" | "SIGTERM", listener: () => void): void; on(event: "exit", listener: (code: number) => void): void; /* prependListener — the same registration at the FRONT of the event's * listener list (Node's EventEmitter order), for the registries that * own a prepend entry ('exit' and the signal family). prependOnceListener * has no lowering. */ prependListener(event: "SIGINT" | "SIGTERM", listener: () => void): void; prependListener(event: "exit", listener: (code: number) => void): void; /* 'warning' — Node's process-warning channel: listeners receive the * warning Error (as a dyn value); emitWarning and the runtime's * deprecation sites dispatch synchronously (SEMANTICS.md). */ on(event: "warning", listener: (warning: Error & { code?: string }) => void): void; /* 'unhandledRejection' — dispatched per never-observed rejection at * the completed nextTick/microtask checkpoint (reason, promise), * suppressing the default report. 'rejectionHandled' — the sibling * event, fired once when a delivered promise later gains a handler * (promise payload, Node's shape). */ on(event: "unhandledRejection", listener: (reason: unknown, promise: unknown) => void): void; on(event: "rejectionHandled", listener: (promise: unknown) => void): void; once(event: "SIGINT" | "SIGTERM", listener: () => void): void; once(event: "exit", listener: (code: number) => void): void; once(event: "unhandledRejection", listener: (reason: unknown, promise: unknown) => void): void; once(event: "rejectionHandled", listener: (promise: unknown) => void): void; off(event: "SIGINT" | "SIGTERM", listener: () => void): void; off(event: "exit", listener: (code: number) => void): void; off(event: "warning", listener: (warning: Error & { code?: string }) => void): void; off(event: "unhandledRejection", listener: (reason: unknown, promise: unknown) => void): void; off(event: "rejectionHandled", listener: (promise: unknown) => void): void; /* removeListener IS off — Node aliases them; both lower identically. */ removeListener(event: "SIGINT" | "SIGTERM", listener: () => void): void; removeListener(event: "exit", listener: (code: number) => void): void; removeListener(event: "warning", listener: (warning: Error & { code?: string }) => void): void; removeListener( event: "unhandledRejection", listener: (reason: unknown, promise: unknown) => void, ): void; removeListener(event: "rejectionHandled", listener: (promise: unknown) => void): void; /* emitWarning — Node's full grammar (string or Error warning; type/ * ctor/options second; code/ctor third). */ emitWarning(warning: string | Error, ...args: any[]): void; /** Present in a child created by child_process.fork(). */ readonly connected: boolean; send?(message: object, callback?: (error: Error | null) => void): boolean; disconnect(): void; on(event: "message", listener: (message: any) => void): void; on(event: "disconnect", listener: () => void): void; once(event: "message", listener: (message: any) => void): void; once(event: "disconnect", listener: () => void): void; }; /* ── globals a real CLI's sources reference (all @types/node or dyn-lib * territory; the fallback declares the slice so projects PREFLIGHT and * every reached use lands on the SC2020 fence — or a real lowering where * one exists — instead of "Cannot find name"). With @types/node these * stand down with the rest of the file. ─────────────────────────────── */ /* The CommonJS module globals. `__dirname`/`__filename` are compile-time * constants — each MODULE's real directory/file path (Node's per-module * values exactly; the build machine's paths are baked in, which is also * what Node answers when the same tree runs in place). In a file with ESM * syntax they fence: Node throws ReferenceError there. */ declare var __dirname: string; declare var __filename: string; interface ScriptcModule { children: ScriptcModule[]; exports: any; filename: string; id: string; isPreloading: boolean; loaded: boolean; parent: ScriptcModule | null | undefined; path: string; paths: string[]; require(id: string): any; } declare var module: ScriptcModule; /* `global` IS globalThis (Node's alias), and `declare var process` above * puts process on `typeof globalThis` — so `globalThis.process` and * `global.process` read the same object as the bare name. */ declare var global: typeof globalThis; /* The `require` VALUE's non-call surface. require() CALLS are module * edges (the checker models them as imports); the object's own members * are declared here so harness idioms typecheck. The main/cache values and * the CommonJS module graph lower to native process-lifetime handles. */ interface ScriptcRequireResolveOptions { paths?: string[]; } interface ScriptcRequireResolve { (id: string, options?: ScriptcRequireResolveOptions): string; paths(id: string): string[] | null; } interface ScriptcRequire { /* The call signature types NON-IMPORT-SHAPED require expressions (the * checker models import-shaped requires as module aliases regardless, * exactly like under @types/node's NodeRequire). `any`, like * @types/node: the value's home is the module system, not the static * value model — reached uses fence per site. */ (id: string): any; main: ScriptcModule | undefined; resolve: ScriptcRequireResolve; cache: { [id: string]: ScriptcModule | undefined }; } declare var require: ScriptcRequire; /* setImmediate/clearImmediate — Node's macrotask pair (fires after I/O * events of the current loop turn, before timers due later). The handle * follows the Timeout pattern: loop-liveness bookkeeping. */ interface Immediate extends Disposable { ref(): Immediate; unref(): Immediate; hasRef(): boolean; [Symbol.dispose](): void; } declare function setImmediate(callback: () => void): Immediate; /* The trailing-argument form — Node passes the extras to the callback. */ declare function setImmediate(callback: (...args: never[]) => void, ...args: unknown[]): Immediate; declare function clearImmediate(handle?: Immediate | null | undefined): void; /* queueMicrotask — the microtask queue (the promise-continuation queue: * runs before any timer/immediate/I/O callback scheduled later). */ declare function queueMicrotask(callback: () => void): void; /* structuredClone — the JSON-safe + bytes subset clones deep (cycles * fence; functions throw the spec's DataCloneError; DOMException clones * per WebIDL serialization). `value` is optional and `options` is * `unknown` so Node's own RUNTIME errors fire (ERR_MISSING_ARGS for the * zero-argument call, the dictionary/sequence TypeErrors for bad * options) where a tighter signature would reject at compile time — * the suite exercises exactly those. */ declare function structuredClone(value?: T, options?: unknown): T; /* AbortController — the signal factory for the fetch-cancellation slice * (AbortSignal above). */ interface AbortController { readonly signal: AbortSignal; abort(reason?: unknown): void; } declare var AbortController: { new (): AbortController }; /* atob/btoa — Node globals since v16 (the "buffer" module re-exports * them below): base64 → binary string and back, Latin-1 domain like the * WHATWG originals. The parameter is `unknown` because WebIDL ToStrings * whatever arrives (Node's atob(null) decodes "null") — the coercion * runs in the runtime over the dyn kind, and the Node suite exercises * it; malformed input throws the catchable DOMException * InvalidCharacterError, the zero-argument call Node's TypeError * [ERR_MISSING_ARGS]. */ declare function atob(data?: unknown): string; declare function btoa(data?: unknown): string; /* DOMException — the web-standard error shape (a Node global since * v17): an Error subclass whose `code` is the WebIDL legacy NUMBER * (InvalidCharacterError = 5, 0 for off-table names) and whose options * form carries `cause`. `new DOMException(msg)` has name "Error" like * the spec's default. Subclassing is fenced (the runtime layout carries * hidden slots) — extend Error instead. */ interface DOMException extends Error { readonly code: number; } declare var DOMException: { new (message?: unknown, nameOrOptions?: unknown): DOMException; readonly prototype: DOMException; }; /* WebCrypto (scr_webcrypto.c): crypto.subtle's importKey, generateKey and * exportKey for HMAC and AES keys (importKey also for PBKDF2 and HKDF * keys), AES-GCM/CBC/CTR encrypt and decrypt, wrapKey and unwrapKey of * secret keys (AES-KW or those ciphers), PBKDF2 and HKDF deriveBits and * deriveKey, HMAC sign/verify, generateKey, importKey, exportKey, sign * and verify for ECDSA, Ed25519, RSASSA-PKCS1-v1_5 and RSA-PSS, and the * SHA-1/SHA-2 digests, typed as exactly that surface (the declarations * mirror @types/node's webcrypto shapes), plus the global's randomUUID and * getRandomValues. Every other SubtleCrypto method and crypto member is * absent, so a use is an honest type error. CryptoKey values are native * handles whose four members read through the handle. */ declare var crypto: Crypto; /* The Crypto and SubtleCrypto constructors (feature probes only) stay * `unknown`; the values keep this declaration order. */ declare var Crypto: unknown; declare var CryptoKey: { prototype: CryptoKey; new (): CryptoKey; }; declare var SubtleCrypto: unknown; type KeyUsage = | "encrypt" | "decrypt" | "sign" | "verify" | "deriveKey" | "deriveBits" | "encapsulateBits" | "decapsulateBits" | "encapsulateKey" | "decapsulateKey" | "wrapKey" | "unwrapKey"; type KeyType = "private" | "public" | "secret"; interface Algorithm { name: string; } type AlgorithmIdentifier = Algorithm | string; type HashAlgorithmIdentifier = AlgorithmIdentifier; interface HmacImportParams extends Algorithm { hash: HashAlgorithmIdentifier; length?: number; } interface HmacKeyGenParams extends Algorithm { hash: HashAlgorithmIdentifier; length?: number; } interface AesKeyGenParams extends Algorithm { length: number; } interface AesGcmParams extends Algorithm { additionalData?: BufferSource; iv: BufferSource; tagLength?: number; } interface AesCbcParams extends Algorithm { iv: BufferSource; } interface AesCtrParams extends Algorithm { counter: BufferSource; length: number; } interface Pbkdf2Params extends Algorithm { hash: HashAlgorithmIdentifier; iterations: number; salt: BufferSource; } interface HkdfParams extends Algorithm { hash: HashAlgorithmIdentifier; info: BufferSource; salt: BufferSource; } interface AesDerivedKeyParams extends Algorithm { length: number; } interface KeyAlgorithm { name: string; } interface AesKeyAlgorithm extends KeyAlgorithm { length: number; } interface HmacKeyAlgorithm extends KeyAlgorithm { hash: KeyAlgorithm; length: number; } interface CryptoKey { readonly algorithm: KeyAlgorithm; readonly extractable: boolean; readonly type: KeyType; readonly usages: KeyUsage[]; } type KeyFormat = | "jwk" | "pkcs8" | "raw" | "raw-private" | "raw-public" | "raw-secret" | "raw-seed" | "spki"; interface JsonWebKey { alg?: string; crv?: string; d?: string; dp?: string; dq?: string; e?: string; ext?: boolean; k?: string; key_ops?: string[]; kty?: string; n?: string; p?: string; q?: string; qi?: string; use?: string; x?: string; y?: string; } interface EcKeyGenParams extends Algorithm { namedCurve: string; } interface EcKeyImportParams extends Algorithm { namedCurve: string; } interface EcdsaParams extends Algorithm { hash: HashAlgorithmIdentifier; } interface RsaHashedKeyGenParams extends Algorithm { modulusLength: number; publicExponent: Uint8Array; hash: HashAlgorithmIdentifier; } interface RsaHashedImportParams extends Algorithm { hash: HashAlgorithmIdentifier; } interface RsaPssParams extends Algorithm { saltLength: number; } interface EcKeyAlgorithm extends KeyAlgorithm { namedCurve: string; } interface RsaHashedKeyAlgorithm extends KeyAlgorithm { modulusLength: number; publicExponent: Uint8Array; hash: KeyAlgorithm; } interface CryptoKeyPair { privateKey: CryptoKey; publicKey: CryptoKey; } /* HMAC and AES keys generate, import and export as 'raw' and 'jwk' * (PBKDF2 and HKDF keys import as 'raw'); ECDSA and RSA keys generate, * import and export as 'spki', 'pkcs8' and 'jwk', and ECDSA public keys as * 'raw'. */ interface SubtleCrypto { decrypt( algorithm: AesGcmParams | AesCbcParams | AesCtrParams, key: CryptoKey, data: BufferSource, ): Promise; deriveBits( algorithm: Pbkdf2Params | HkdfParams, baseKey: CryptoKey, length?: number | null, ): Promise; deriveKey( algorithm: Pbkdf2Params | HkdfParams, baseKey: CryptoKey, derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams, extractable: boolean, keyUsages: readonly KeyUsage[], ): Promise; digest(algorithm: AlgorithmIdentifier, data: BufferSource): Promise; encrypt( algorithm: AesGcmParams | AesCbcParams | AesCtrParams, key: CryptoKey, data: BufferSource, ): Promise; exportKey(format: "jwk", key: CryptoKey): Promise; exportKey(format: Exclude, key: CryptoKey): Promise; generateKey( algorithm: EcKeyGenParams | RsaHashedKeyGenParams | "Ed25519" | { name: "Ed25519" }, extractable: boolean, keyUsages: readonly KeyUsage[], ): Promise; generateKey( algorithm: AesKeyGenParams | HmacKeyGenParams, extractable: boolean, keyUsages: readonly KeyUsage[], ): Promise; importKey( format: "jwk", keyData: JsonWebKey, algorithm: AlgorithmIdentifier | HmacImportParams | EcKeyImportParams | RsaHashedImportParams, extractable: boolean, keyUsages: readonly KeyUsage[], ): Promise; importKey( format: Exclude, keyData: BufferSource, algorithm: AlgorithmIdentifier | HmacImportParams | EcKeyImportParams | RsaHashedImportParams, extractable: boolean, keyUsages: readonly KeyUsage[], ): Promise; sign( algorithm: AlgorithmIdentifier | EcdsaParams | RsaPssParams, key: CryptoKey, data: BufferSource, ): Promise; unwrapKey( format: KeyFormat, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier | AesGcmParams | AesCbcParams | AesCtrParams, unwrappedKeyAlgorithm: AlgorithmIdentifier | HmacImportParams, extractable: boolean, keyUsages: readonly KeyUsage[], ): Promise; verify( algorithm: AlgorithmIdentifier | EcdsaParams | RsaPssParams, key: CryptoKey, signature: BufferSource, data: BufferSource, ): Promise; wrapKey( format: KeyFormat, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: AlgorithmIdentifier | AesGcmParams | AesCbcParams | AesCtrParams, ): Promise; } interface Crypto { readonly subtle: SubtleCrypto; getRandomValues< T extends | Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | BigInt64Array | BigUint64Array, >( typedArray: T, ): T; randomUUID(): `${string}-${string}-${string}-${string}-${string}`; } /* Capability-gated globals harness code probes behind feature guards * (the SQLite-backed storage pair): typed `unknown` — no lowering exists, * the guard is expected to be false in a compiled binary, and any reached * use fences per site. */ declare var localStorage: unknown; declare var sessionStorage: unknown; /* Node's Buffer, typed as a Uint8Array subtype with the members CLI code * touches — ONE runtime representation with Uint8Array (the u8 bytes * kind); the members beyond the lowered surface fence per site. */ /* Node's encoding-name union (aliases included — the compiler folds them * to the runtime's canonical spellings at the call site). */ type BufferEncoding = | "utf8" | "utf-8" | "hex" | "base64" | "base64url" | "latin1" | "ascii" | "binary" | "utf16le" | "utf-16le" | "ucs2" | "ucs-2"; interface Buffer< TArrayBuffer extends ArrayBufferLike = ArrayBufferLike, > extends Uint8Array { toString(encoding?: BufferEncoding, start?: number, end?: number): string; equals(otherBuffer: Uint8Array): boolean; compare( target: Uint8Array, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number, ): number; indexOf( value: string | number | Uint8Array, byteOffset?: number | BufferEncoding, encoding?: BufferEncoding, ): number; lastIndexOf( value: string | number | Uint8Array, byteOffset?: number | BufferEncoding, encoding?: BufferEncoding, ): number; includes( value: string | number | Buffer, byteOffset?: number | BufferEncoding, encoding?: BufferEncoding, ): boolean; fill( value: string | number | Uint8Array, offset?: number | BufferEncoding, end?: number | BufferEncoding, encoding?: BufferEncoding, ): this; copy(target: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; swap16(): Buffer; swap32(): Buffer; swap64(): Buffer; write( string: string, offset?: number | BufferEncoding, length?: number | BufferEncoding, encoding?: BufferEncoding, ): number; subarray(start?: number, end?: number): Buffer; /* @types/node's spelling — the ArrayBuffer instantiation keeps the * override compatible with the lib's Uint8Array.slice. */ slice(start?: number, end?: number): Buffer; writeUInt8(value: number, offset?: number): number; writeUInt16BE(value: number, offset?: number): number; writeUInt16LE(value: number, offset?: number): number; writeUInt32BE(value: number, offset?: number): number; writeUInt32LE(value: number, offset?: number): number; writeInt8(value: number, offset?: number): number; writeInt16BE(value: number, offset?: number): number; writeInt16LE(value: number, offset?: number): number; writeInt32BE(value: number, offset?: number): number; writeInt32LE(value: number, offset?: number): number; writeFloatBE(value: number, offset?: number): number; writeFloatLE(value: number, offset?: number): number; writeDoubleBE(value: number, offset?: number): number; writeDoubleLE(value: number, offset?: number): number; writeUIntBE(value: number, offset: number, byteLength: number): number; writeUIntLE(value: number, offset: number, byteLength: number): number; writeIntBE(value: number, offset: number, byteLength: number): number; writeIntLE(value: number, offset: number, byteLength: number): number; writeBigInt64BE(value: bigint, offset?: number): number; writeBigInt64LE(value: bigint, offset?: number): number; writeBigUInt64BE(value: bigint, offset?: number): number; writeBigUInt64LE(value: bigint, offset?: number): number; writeBigUint64BE(value: bigint, offset?: number): number; writeBigUint64LE(value: bigint, offset?: number): number; readUInt8(offset?: number): number; readUInt16BE(offset?: number): number; readUInt16LE(offset?: number): number; readUInt32BE(offset?: number): number; readUInt32LE(offset?: number): number; readInt8(offset?: number): number; readInt16BE(offset?: number): number; readInt16LE(offset?: number): number; readInt32BE(offset?: number): number; readInt32LE(offset?: number): number; readFloatBE(offset?: number): number; readFloatLE(offset?: number): number; readDoubleBE(offset?: number): number; readDoubleLE(offset?: number): number; readUIntBE(offset: number, byteLength: number): number; readUIntLE(offset: number, byteLength: number): number; readIntBE(offset: number, byteLength: number): number; readIntLE(offset: number, byteLength: number): number; readBigInt64BE(offset?: number): bigint; readBigInt64LE(offset?: number): bigint; readBigUInt64BE(offset?: number): bigint; readBigUInt64LE(offset?: number): bigint; readBigUint64BE(offset?: number): bigint; readBigUint64LE(offset?: number): bigint; } interface BufferConstructor { /** @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead. */ new (str: string, encoding?: BufferEncoding): Buffer; /** @deprecated since v10.0.0 - Use `Buffer.alloc()` instead. */ new (size: number): Buffer; /** @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. */ new (array: ArrayLike): Buffer; /** @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead. */ new (arrayBuffer: ArrayBuffer | SharedArrayBuffer): Buffer; from(data: string, encoding?: BufferEncoding): Buffer; /* The ArrayBuffer form is the VIEW construction: x.buffer with an * optional byte offset/length shares x's storage (the subarray rule). */ from(data: ArrayBuffer | SharedArrayBuffer, byteOffset?: number, length?: number): Buffer; from(data: Uint8Array | readonly number[]): Buffer; alloc(size: number, fill?: string | number | Uint8Array, encoding?: BufferEncoding): Buffer; compare(buf1: Uint8Array, buf2: Uint8Array): number; /* alloc without the zero-fill guarantee. Below Buffer.poolSize >>> 1 * bytes it returns a view into the shared pool slab. */ allocUnsafe(size: number): Buffer; allocUnsafeSlow(size: number): Buffer; /* The pool slab size for allocUnsafe, from, and concat. */ poolSize: number; concat(list: readonly Uint8Array[], totalLength?: number): Buffer; isBuffer(obj: unknown): obj is Buffer; byteLength(input: string | Uint8Array, encoding?: BufferEncoding): number; isEncoding(encoding: string): boolean; } declare var Buffer: BufferConstructor; /* The WHATWG codec constructors. Instance types live in scriptc.d.ts so * programs with @types/node have the same global type names. */ declare var TextEncoder: { new (): TextEncoder }; declare var TextDecoder: { new (label?: string, options?: { fatal?: boolean; ignoreBOM?: boolean }): TextDecoder; }; interface Event { readonly type: string; readonly bubbles: boolean; readonly cancelable: boolean; readonly composed: boolean; readonly defaultPrevented: boolean; readonly eventPhase: number; readonly target: EventTarget | null; readonly currentTarget: EventTarget | null; readonly srcElement: EventTarget | null; readonly isTrusted: boolean; readonly timeStamp: number; cancelBubble: boolean; returnValue: boolean; preventDefault(): void; stopPropagation(): void; stopImmediatePropagation(): void; composedPath(): unknown[]; } declare var Event: { new ( type: string, eventInitDict?: { bubbles?: boolean; cancelable?: boolean; composed?: boolean }, ): Event; readonly prototype: Event; readonly NONE: 0; readonly CAPTURING_PHASE: 1; readonly AT_TARGET: 2; readonly BUBBLING_PHASE: 3; }; interface CustomEvent extends Event { readonly detail: T; } declare var CustomEvent: { new ( type: string, eventInitDict?: { detail?: T; bubbles?: boolean; cancelable?: boolean; composed?: boolean }, ): CustomEvent; readonly prototype: CustomEvent; }; interface MessageEvent extends Event { readonly data: T; readonly origin: string; readonly lastEventId: string; readonly source: unknown; readonly ports: readonly MessagePort[]; } declare var MessageEvent: { new ( type: string, eventInitDict?: { data?: T; origin?: string; lastEventId?: string }, ): MessageEvent; readonly prototype: MessageEvent; }; interface AddEventListenerOptions { capture?: boolean; once?: boolean; passive?: boolean; signal?: AbortSignal; } interface EventTarget { addEventListener( type: string, listener: ((event: Event) => void) | { handleEvent(event: Event): void } | null, options?: AddEventListenerOptions | boolean, ): void; removeEventListener( type: string, listener: ((event: Event) => void) | { handleEvent(event: Event): void } | null, options?: { capture?: boolean } | boolean, ): void; dispatchEvent(event: Event): boolean; } declare var EventTarget: { new (): EventTarget; readonly prototype: EventTarget; }; interface MessagePort extends EventTarget { postMessage(value: unknown, transferOrOptions?: unknown): void; start(): void; close(): void; ref(): void; unref(): void; onmessage: ((event: MessageEvent) => void) | null; onmessageerror: ((event: MessageEvent) => void) | null; onclose: ((event: Event) => void) | null; } declare var MessagePort: { readonly prototype: MessagePort; }; interface MessageChannel { readonly port1: MessagePort; readonly port2: MessagePort; } declare var MessageChannel: { new (): MessageChannel; readonly prototype: MessageChannel; }; interface AbortSignal extends EventTarget { readonly aborted: boolean; readonly reason: unknown; onabort: ((event: Event) => void) | null; throwIfAborted(): void; } declare var AbortSignal: { timeout(ms: number): AbortSignal; abort(reason?: unknown): AbortSignal; any(signals: readonly AbortSignal[]): AbortSignal; readonly prototype: AbortSignal; }; interface QueuingStrategySize { (chunk: T): number; } interface QueuingStrategy { highWaterMark?: number; size?: QueuingStrategySize; } interface ReadableStreamReadValueResult { done: false; value: T; } interface ReadableStreamReadDoneResult { done: true; value: T | undefined; } type ReadableStreamReadResult = | ReadableStreamReadValueResult | ReadableStreamReadDoneResult; interface ReadableStreamDefaultReader { readonly closed: Promise; read(): Promise>; cancel(reason?: unknown): Promise; releaseLock(): void; } interface ReadableStreamDefaultController { readonly desiredSize: number | null; enqueue(chunk?: T): void; close(): void; error(reason?: unknown): void; } interface StreamPipeOptions { preventAbort?: boolean; preventCancel?: boolean; preventClose?: boolean; signal?: AbortSignal; } interface UnderlyingSource { start?(controller: ReadableStreamDefaultController): unknown; pull?(controller: ReadableStreamDefaultController): unknown; cancel?(reason?: unknown): unknown; } interface ReadableStream { readonly locked: boolean; cancel(reason?: unknown): Promise; getReader(): ReadableStreamDefaultReader; tee(): [ReadableStream, ReadableStream]; pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise; pipeThrough( transform: { readable: ReadableStream; writable: WritableStream }, options?: StreamPipeOptions, ): ReadableStream; [Symbol.asyncIterator](options?: { preventCancel?: boolean }): AsyncIterableIterator; values(options?: { preventCancel?: boolean }): AsyncIterableIterator; } declare var ReadableStream: { new (source?: UnderlyingSource): ReadableStream; from(iterable: readonly T[]): ReadableStream; from(iterable: Uint8Array): ReadableStream; from(iterable: string): ReadableStream; readonly prototype: ReadableStream; }; /* The writable side of a TransformStream and its writer. A program that * constructs a WritableStream, or a TransformStream with a transformer, * builds its streams with the web stream classes (scr_webstreams.c). */ interface WritableStreamDefaultWriter { readonly closed: Promise; readonly desiredSize: number | null; readonly ready: Promise; abort(reason?: unknown): Promise; close(): Promise; releaseLock(): void; write(chunk?: W): Promise; } interface WritableStream { readonly locked: boolean; abort(reason?: unknown): Promise; close(): Promise; getWriter(): WritableStreamDefaultWriter; } /* Without a transformer, the identity transform: chunks written to * `writable` are read from `readable`, and a write completes when its chunk * is read. */ interface TransformStream { readonly readable: ReadableStream; readonly writable: WritableStream; } interface Transformer { start?(controller: TransformStreamDefaultController): unknown; transform?(chunk: I, controller: TransformStreamDefaultController): unknown; flush?(controller: TransformStreamDefaultController): unknown; cancel?(reason?: unknown): unknown; } declare var TransformStream: { new ( transformer?: Transformer, writableStrategy?: QueuingStrategy, readableStrategy?: QueuingStrategy, ): TransformStream; readonly prototype: TransformStream; }; /* The other web stream interfaces. JavaScript sources construct and read * them as checked-dynamic values (scr_webstreams.c); TypeScript sources * have no static lowering for them. */ declare var ReadableStreamDefaultReader: { new (stream: ReadableStream): ReadableStreamDefaultReader; readonly prototype: ReadableStreamDefaultReader; }; declare var ReadableStreamDefaultController: { new (): ReadableStreamDefaultController; readonly prototype: ReadableStreamDefaultController; }; interface WritableStreamDefaultController { readonly signal: AbortSignal; error(reason?: unknown): void; } interface UnderlyingSink { start?(controller: WritableStreamDefaultController): unknown; write?(chunk: W, controller: WritableStreamDefaultController): unknown; close?(): unknown; abort?(reason?: unknown): unknown; } declare var WritableStream: { new (sink?: UnderlyingSink, strategy?: QueuingStrategy): WritableStream; readonly prototype: WritableStream; }; declare var WritableStreamDefaultWriter: { new (stream: WritableStream): WritableStreamDefaultWriter; readonly prototype: WritableStreamDefaultWriter; }; declare var WritableStreamDefaultController: { new (): WritableStreamDefaultController; readonly prototype: WritableStreamDefaultController; }; interface TransformStreamDefaultController { readonly desiredSize: number | null; enqueue(chunk?: O): void; error(reason?: unknown): void; terminate(): void; } declare var TransformStreamDefaultController: { new (): TransformStreamDefaultController; readonly prototype: TransformStreamDefaultController; }; interface CountQueuingStrategy extends QueuingStrategy { readonly highWaterMark: number; readonly size: QueuingStrategySize; } declare var CountQueuingStrategy: { new (init: { highWaterMark: number }): CountQueuingStrategy; readonly prototype: CountQueuingStrategy; }; interface ByteLengthQueuingStrategy extends QueuingStrategy { readonly highWaterMark: number; readonly size: QueuingStrategySize; } declare var ByteLengthQueuingStrategy: { new (init: { highWaterMark: number }): ByteLengthQueuingStrategy; readonly prototype: ByteLengthQueuingStrategy; }; interface TextEncoderStream { readonly encoding: "utf-8"; readonly readable: ReadableStream; readonly writable: WritableStream; } declare var TextEncoderStream: { new (): TextEncoderStream; readonly prototype: TextEncoderStream; }; interface TextDecoderStream { readonly encoding: string; readonly fatal: boolean; readonly ignoreBOM: boolean; readonly readable: ReadableStream; readonly writable: WritableStream; } declare var TextDecoderStream: { new (label?: string, options?: { fatal?: boolean; ignoreBOM?: boolean }): TextDecoderStream; readonly prototype: TextDecoderStream; }; /* fetch, typed as the native JSON + readable-stream slice: one URL, an * optional init with the members CLI requests carry, and a Response * whose body is the same stream consumed by json(). json() returns * unknown — the same dynamic boundary as JSON.parse: cast and validate. */ /* Headers — a response's native header map (lowercase names, * combine-on-append, sorted iteration). The value is a checked-dynamic * native handle like Response itself. */ interface Headers { append(name: string, value: string): void; delete(name: string): void; get(name: string): string | null; getSetCookie(): string[]; has(name: string): boolean; set(name: string, value: string): void; forEach( callbackfn: (value: string, key: string, parent: Headers) => void, thisArg?: unknown, ): void; [Symbol.iterator](): IterableIterator<[string, string]>; } declare var Headers: { new (init?: Headers | Record | readonly (readonly [string, string])[]): Headers; readonly prototype: Headers; }; interface Response { readonly ok: boolean; readonly status: number; readonly statusText: string; readonly url: string; readonly redirected: boolean; readonly headers: Headers; readonly body: ReadableStream | null; readonly bodyUsed: boolean; json(): Promise; text(): Promise; /* The whole body as bytes: bytes() answers a Uint8Array in both tiers. * arrayBuffer() remains unsupported because static programs have no * free-standing ArrayBuffer representation; the compiler diagnoses its * direct use and points at bytes(). */ arrayBuffer(): Promise; bytes(): Promise; /* A copy whose body is one branch of the body's tee; the original keeps * the other. */ clone(): Response; } interface ResponseInit { headers?: Headers | Record | readonly (readonly [string, string])[]; status?: number; statusText?: string; } declare var Response: { new ( body?: string | Uint8Array | ReadableStream | null, init?: ResponseInit, ): Response; readonly prototype: Response; error(): Response; json(data: unknown, init?: ResponseInit): Response; redirect(url: string | URL, status?: number): Response; }; /* Blob and File (node:buffer, also globals): immutable bytes with a * content type. Sources are copied when the Blob is built. */ interface BlobPropertyBag { endings?: "transparent" | "native"; type?: string; } interface FilePropertyBag extends BlobPropertyBag { lastModified?: number; } interface Blob { readonly size: number; readonly type: string; slice(start?: number, end?: number, contentType?: string): Blob; text(): Promise; arrayBuffer(): Promise; bytes(): Promise; stream(): ReadableStream; textStream(): ReadableStream; } declare var Blob: { new ( sources?: readonly (string | ArrayBuffer | ArrayBufferView | Blob)[], options?: BlobPropertyBag, ): Blob; readonly prototype: Blob; }; interface File extends Blob { readonly name: string; readonly lastModified: number; } declare var File: { new ( sources: readonly (string | ArrayBuffer | ArrayBufferView | Blob)[], fileName: string, options?: FilePropertyBag, ): File; readonly prototype: File; }; interface Request { readonly method: string; readonly url: string; readonly headers: Headers; readonly destination: string; readonly referrer: string; readonly referrerPolicy: string; readonly mode: string; readonly credentials: string; readonly cache: string; readonly redirect: "follow" | "error" | "manual"; readonly integrity: string; readonly keepalive: boolean; readonly isReloadNavigation: boolean; readonly isHistoryNavigation: boolean; readonly duplex: "half"; readonly signal: AbortSignal; readonly body: ReadableStream | null; readonly bodyUsed: boolean; json(): Promise; text(): Promise; arrayBuffer(): Promise; bytes(): Promise; clone(): Request; } interface RequestInit { method?: string; headers?: Headers | Record | readonly (readonly [string, string])[]; body?: string | Uint8Array | ReadableStream | null; duplex?: "half"; redirect?: "follow" | "error" | "manual"; signal?: AbortSignal; } declare var Request: { new (input: RequestInfo, init?: RequestInit): Request; readonly prototype: Request; }; declare function fetch(input: string | URL, init?: RequestInit): Promise; /* The repeating timer pair (setTimeout lives in scriptc.d.ts — always * shipped). The handle is the Timeout interface, like Node's — it maps to * the numeric timer id, so ReturnType stays a * representable type and `.unref()/.ref()/.hasRef()/.refresh()` chain over * setInterval results exactly like setTimeout's. clearInterval keeps the * historic number arm (the id IS the handle) alongside Node's undefined * tolerance. */ declare function setInterval(callback: () => void, ms?: number): Timeout; /* The trailing-argument form — setTimeout's exact story, every tick. */ declare function setInterval( callback: (...args: never[]) => void, ms?: number, ...args: unknown[] ): Timeout; declare function clearInterval(handle?: Timeout | number | null | undefined): void; /* node:perf_hooks — performance.now() over the runtime's process-start- * anchored monotonic clock (Node's timeOrigin for a compiled program), * fractional milliseconds. The .bind(performance) spelling lowers to the * same clock as a plain () => number function value (the mockable-clock idiom's * getTimestamp). mark, measure, the getEntries family and the clears run * over the thread's performance timeline with Node's validation; everything * else fences per member. */ declare module "node:perf_hooks" { export type EntryType = "mark" | "measure"; export class PerformanceEntry { protected constructor(); readonly duration: number; readonly name: string; readonly startTime: number; readonly entryType: EntryType; toJSON(): any; } export class PerformanceMark extends PerformanceEntry { readonly detail: any; readonly duration: 0; readonly entryType: "mark"; } export class PerformanceMeasure extends PerformanceEntry { readonly detail: any; readonly entryType: "measure"; } export interface MarkOptions { detail?: unknown | undefined; startTime?: number | undefined; } export interface MeasureOptions { detail?: unknown; duration?: number | undefined; end?: number | string | undefined; start?: number | string | undefined; } export interface Performance { now(): number; mark(name: string, options?: MarkOptions): PerformanceMark; measure(name: string, startMark?: string, endMark?: string): PerformanceMeasure; measure(name: string, options: MeasureOptions): PerformanceMeasure; getEntries(): PerformanceEntry[]; getEntriesByName(name: string, type?: EntryType): PerformanceEntry[]; getEntriesByType(type: EntryType): PerformanceEntry[]; clearMarks(name?: string): void; clearMeasures(name?: string): void; eventLoopUtilization( utilization1?: EventLoopUtilization, utilization2?: EventLoopUtilization, ): EventLoopUtilization; } export const performance: Performance; /* Event-loop metrics: utilization (idle/active ms since the loop started) * and monitorEventLoopDelay's sampling histogram (nanoseconds). */ export interface EventLoopUtilization { idle: number; active: number; utilization: number; } export interface EventLoopMonitorOptions { resolution?: number | undefined; } export interface Histogram { readonly count: number; readonly exceeds: number; readonly max: number; readonly mean: number; readonly min: number; readonly stddev: number; percentile(percentile: number): number; reset(): void; } export interface IntervalHistogram extends Histogram { enable(): boolean; disable(): boolean; } export function monitorEventLoopDelay(options?: EventLoopMonitorOptions): IntervalHistogram; } declare module "perf_hooks" { export * from "node:perf_hooks"; } /* Node also exposes the same performance object as a GLOBAL (no import * needed) — the module export and the global are one value, so the global * spelling lowers through the identical perf_hooks tables (name + * provenance, like console/process). With @types/node present this file * stands down and its wider global serves; the lowered surface stays * performance.now() either way. */ declare var performance: import("node:perf_hooks").Performance; /* import.meta: module-loader metadata with no value representation — * direct file-backed fields lower to constants, while the object and * remaining members fence (SC1090) EXCEPT as createRequire's base, where it * only NAMES the containing file. Declared so unsupported forms reach their * named lowering fences; @types/node's own augmentation stands in when * adopted. */ interface ImportMeta { url: string; filename: string; dirname: string; main: boolean; resolve(specifier: string, parent?: string | URL): string; } /* The WHATWG URL class (a Node global; the es2023 lib doesn't declare it), * typed as exactly the supported surface: construction from an input and * optional base (invalid input throws a catchable TypeError, like Node), the * protocol/origin/username/pathname/href/host/hostname/port/search/hash getters, searchParams (the * LIVE query view — mutations through it re-serialize into the URL, so * href reflects immediately; every read answers the same object, Node's * caching), toString()/toJSON() (href serialization), and the non-throwing * canParse()/parse() factories (conversion errors still propagate). * URL components except origin and searchParams support assignment; * the live searchParams view also mutates the query. URL values participate in * unions (URL | undefined). The parser covers the common CLI schemes * exactly (http/https/ws/wss/ftp/file authority URLs, opaque paths like * data: and mailto:) — divergences from the full WHATWG algorithm are * documented in SEMANTICS.md. */ interface URL { protocol: string; readonly origin: string; username: string; password: string; pathname: string; href: string; host: string; hostname: string; port: string; search: string; hash: string; readonly searchParams: URLSearchParams; toString(): string; toJSON(): string; } declare var URL: { new (input: string | { toString: () => string }, base?: string | URL): URL; canParse(input: string | URL, base?: string | URL): boolean; parse(input: string | URL, base?: string | URL): URL | null; }; /* URLSearchParams — the WHATWG application/x-www-form-urlencoded list. * Constructed standalone (string / string[][] pairs / inline record * literal / another URLSearchParams) or read live off a URL via * url.searchParams. keys()/values()/entries() lower when a for-of head * consumes them directly; stored iterator OBJECTS have no lowering. */ interface URLSearchParams { readonly size: number; append(name: string, value: string): void; delete(name: string, value?: string): void; get(name: string): string | null; getAll(name: string): string[]; has(name: string, value?: string): boolean; set(name: string, value: string): void; sort(): void; toString(): string; forEach(callback: (value: string, name: string, searchParams: URLSearchParams) => void): void; keys(): IterableIterator; values(): IterableIterator; entries(): IterableIterator<[string, string]>; [Symbol.iterator](): IterableIterator<[string, string]>; } declare var URLSearchParams: { new (init?: string | string[][] | { [key: string]: string } | URLSearchParams): URLSearchParams; }; /* node:readline — the question/close slice: createInterface over exactly * { input: process.stdin, output: process.stdout }, question(query, cb) * (the query writes to stdout, the callback gets the next line's text), * close() (fires 'close' synchronously, like Node's inline emit), and * on("close", cb). An open interface keeps the process alive until * close()/EOF, Node's semantics; lines split on \n and \r\n. */ declare module "readline" { /* The Interface over process.stdin or a stream input (scr_readline.c; * terminal mode in scr_readline_tty.c). Listener registrations are * statements: chaining on()/once() results has no lowering. */ export interface Key { sequence?: string; name?: string; ctrl?: boolean; meta?: boolean; shift?: boolean; } export class Interface implements Disposable { /* createInterface creates interfaces; instanceof tells the two * modules' classes apart. */ protected constructor(); /* terminal says whether the interface edits lines as a terminal; * line and cursor are the terminal's (line is '' otherwise). history * is the history option itself (or the interface's own empty array); * a terminal records the lines it reads. */ readonly terminal: boolean; readonly line: string; readonly cursor: number; getCursorPos(): CursorPos; history: string[]; readonly historySize: number; readonly historyIndex: number; readonly crlfDelay: number; readonly tabSize: number; readonly escapeCodeTimeout: number; question(query: string, callback: (answer: string) => void): void; close(): void; pause(): this; resume(): this; prompt(preserveCursor?: boolean): void; setPrompt(prompt: string): void; getPrompt(): string; write(data: string | null | undefined, key?: Key): void; on(event: "line", listener: (input: string) => void): this; on( event: "close" | "pause" | "resume" | "SIGINT" | "SIGTSTP" | "SIGCONT", listener: () => void, ): this; on(event: "error", listener: (err: Error) => void): this; on(event: "history", listener: (history: string[]) => void): this; once(event: "line", listener: (input: string) => void): this; once( event: "close" | "pause" | "resume" | "SIGINT" | "SIGTSTP" | "SIGCONT", listener: () => void, ): this; once(event: "error", listener: (err: Error) => void): this; once(event: "history", listener: (history: string[]) => void): this; addListener(event: "line", listener: (input: string) => void): this; addListener( event: "close" | "pause" | "resume" | "SIGINT" | "SIGTSTP" | "SIGCONT", listener: () => void, ): this; addListener(event: "error", listener: (err: Error) => void): this; addListener(event: "history", listener: (history: string[]) => void): this; [Symbol.asyncIterator](): AsyncIterableIterator; [Symbol.dispose](): void; } export interface ReadLineOptions { input: unknown; output?: unknown; terminal?: boolean; /* Node's crlfDelay: a \n arriving within this many ms (at least 100) * after a line ended by \r is dropped. completer and the history * options are validated and kept; a terminal interface uses them. * The options-record * stance (see http.RequestOptions) admits every key; the walk * decides. */ crlfDelay?: number; completer?: unknown; signal?: AbortSignal; history?: string[]; historySize?: number; removeHistoryDuplicates?: boolean; tabSize?: number; escapeCodeTimeout?: number; [option: string]: unknown; } export function createInterface(options: ReadLineOptions): Interface; export function createInterface( input: unknown, output?: unknown, completer?: unknown, terminal?: boolean, ): Interface; export interface CursorPos { rows: number; cols: number; } /* The escape-sequence helpers over process.stdout, process.stderr, a * writable stream, or null/undefined (nothing is written). */ export function cursorTo(stream: unknown, x: number, y?: number, callback?: () => void): boolean; export function cursorTo(stream: unknown, x: number, callback: () => void): boolean; export function moveCursor( stream: unknown, dx: number, dy: number, callback?: () => void, ): boolean; export function clearLine(stream: unknown, dir: -1 | 0 | 1, callback?: () => void): boolean; export function clearScreenDown(stream: unknown, callback?: () => void): boolean; /* 'keypress' events (str, key) on process.stdin or a readable stream */ export function emitKeypressEvents(stream: unknown, readlineInterface?: unknown): void; /* the same object as node:readline/promises */ export const promises: typeof import("node:readline/promises"); } declare module "node:readline" { export * from "readline"; } declare module "readline/promises" { import { CursorPos, Key, ReadLineOptions } from "readline"; /* The escape-sequence builder over process.stdout, process.stderr or a * writable stream: actions queue until commit(), or are written on the * next tick with autoCommit. */ export class Readline { constructor(stream: unknown, options?: { autoCommit?: boolean }); clearLine(dir: -1 | 0 | 1): this; clearScreenDown(): this; commit(): Promise; cursorTo(x: number, y?: number): this; moveCursor(dx: number, dy: number): this; rollback(): this; } /* The readline Interface with the promise question: it resolves with * the next line, rejects with an AbortError when options.signal aborts, * and with ERR_USE_AFTER_CLOSE after close(). */ export class Interface implements Disposable { /* createInterface creates interfaces; instanceof tells the two * modules' classes apart. */ protected constructor(); /* terminal says whether the interface edits lines as a terminal; * line and cursor are the terminal's (line is '' otherwise). history * is the history option itself (or the interface's own empty array); * a terminal records the lines it reads. */ readonly terminal: boolean; readonly line: string; readonly cursor: number; getCursorPos(): CursorPos; history: string[]; readonly historySize: number; readonly historyIndex: number; readonly crlfDelay: number; readonly tabSize: number; readonly escapeCodeTimeout: number; question(query: string, options?: { signal?: AbortSignal }): Promise; close(): void; pause(): this; resume(): this; prompt(preserveCursor?: boolean): void; setPrompt(prompt: string): void; getPrompt(): string; write(data: string | null | undefined, key?: Key): void; on(event: "line", listener: (input: string) => void): this; on( event: "close" | "pause" | "resume" | "SIGINT" | "SIGTSTP" | "SIGCONT", listener: () => void, ): this; on(event: "error", listener: (err: Error) => void): this; on(event: "history", listener: (history: string[]) => void): this; once(event: "line", listener: (input: string) => void): this; once( event: "close" | "pause" | "resume" | "SIGINT" | "SIGTSTP" | "SIGCONT", listener: () => void, ): this; once(event: "error", listener: (err: Error) => void): this; once(event: "history", listener: (history: string[]) => void): this; addListener(event: "line", listener: (input: string) => void): this; addListener( event: "close" | "pause" | "resume" | "SIGINT" | "SIGTSTP" | "SIGCONT", listener: () => void, ): this; addListener(event: "error", listener: (err: Error) => void): this; addListener(event: "history", listener: (history: string[]) => void): this; [Symbol.asyncIterator](): AsyncIterableIterator; [Symbol.dispose](): void; } export function createInterface(options: ReadLineOptions): Interface; export function createInterface( input: unknown, output?: unknown, completer?: unknown, terminal?: boolean, ): Interface; } declare module "node:readline/promises" { export * from "readline/promises"; } /* node:tty — the fd probe (the same isatty(3) behind process.*.isTTY) * and the supported structural view of a process output stream. */ declare module "tty" { export interface WriteStream extends NodeJS.WritableStream { write(data: string | Uint8Array, callback?: (error?: Error | null) => void): boolean; write( data: string | Uint8Array, encoding: BufferEncoding, callback?: (error?: Error | null) => void, ): boolean; readonly isTTY: boolean; readonly columns: number; readonly rows: number; /* The bytes queued behind the last write: the compiled binary's fd * 1/2 writes are synchronous, so it is always 0. */ readonly writableLength: number; /* The descriptor behind the stream (1 for stdout, 2 for stderr). */ readonly fd: number; /* Node's default for the process streams (65536 for a pipe, a file and a * TTY): a constant, because nothing is ever queued. */ readonly writableHighWaterMark: number; /* Always false: a synchronous write never returns false, so no 'drain' * is ever pending. */ readonly writableNeedDrain: boolean; /* 'drain' and the other events by name. Node returns the stream. */ on(event: string, listener: (...args: any[]) => void): this; once(event: string, listener: (...args: any[]) => void): this; addListener(event: string, listener: (...args: any[]) => void): this; off(event: string, listener: (...args: any[]) => void): this; removeListener(event: string, listener: (...args: any[]) => void): this; getWindowSize(): [number, number]; } export function isatty(fd: number): boolean; } declare module "node:tty" { export * from "tty"; } interface ErrorConstructor { stackTraceLimit: number; captureStackTrace(targetObject: object, constructorOpt?: Function): void; }