mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-24 06:14:01 +08:00
deflateSync, inflateSync, gzipSync, gunzipSync, deflateRawSync, inflateRawSync and unzipSync, and their callback forms, accept Node's options and run Node's processChunkSync over the zlib stream engine. - Options (windowBits, level, memLevel, strategy, dictionary, chunkSize, finishFlush, maxOutputLength, rejectGarbageAfterEnd) are validated at run time with Node's ladder, shared with the stream classes; info is refused at run time. - Errors carry Node's errno and code; maxOutputLength reports ERR_BUFFER_TOO_LARGE and rejectGarbageAfterEnd ERR_TRAILING_JUNK_AFTER_STREAM_END. The default-options decoders also read every gzip member. - Untyped JavaScript inputs may be strings, TypedArrays, DataViews or ArrayBuffers; other values throw Node's ERR_INVALID_ARG_TYPE after the options are checked. - Results are Buffers, as in Node: they convert to their text. Corpus programs 5378, 5379 and 5415 cover the sync, callback and untyped input forms.
39 lines
2.3 KiB
TypeScript
39 lines
2.3 KiB
TypeScript
// The widened fallback ambient world: the Node/web surface real CLI
|
|
// sources reference TYPECHECKS under the fallback declarations (no
|
|
// @types/node needed to preflight) and every reached use without a
|
|
// lowering terminates in a clean SC2020-family diagnostic at its use
|
|
// site — the coverage report's honest blocker list, never a raw
|
|
// "Cannot find name". fetch, RequestInit, and AbortSignal lower natively.
|
|
// setInterval/clearInterval, process.on/once/off (signals and "exit"),
|
|
// the stdin events, and stdin.destroy() all LOWER now — the fences here
|
|
// are the members BEYOND the lowered slice.
|
|
const timer = setInterval(() => {}, 50);
|
|
clearInterval(timer);
|
|
process.stdin.destroy();
|
|
process.on("SIGINT", () => {});
|
|
process.once("exit", () => {});
|
|
process.off("exit", () => {});
|
|
process.stdin.setEncoding("utf8"); // terminal streams accept a text encoding
|
|
const buf = Buffer.from("x", "utf8").reverse(); // from and fill lower; reverse fences
|
|
const enc = new TextEncoder().encode("x");
|
|
const dec = new TextDecoder().decode(enc);
|
|
const signal = AbortSignal.timeout(1000);
|
|
const res = fetch("https://example.com", { signal });
|
|
const tty = process.stdout.isTTY;
|
|
const errTty = process.stderr.isTTY;
|
|
|
|
import { accessSync, constants, mkdtempSync, readFileSync } from "node:fs";
|
|
import { setInterval as promiseInterval, setTimeout as promiseSleep } from "node:timers/promises";
|
|
accessSync("/bin/sh", constants.X_OK);
|
|
const tmp = mkdtempSync("/tmp/scr-");
|
|
const raw = readFileSync("/etc/hosts").toString(tty ? "hex" : "latin1"); // runtime BufferEncoding selection lowers too
|
|
const intervalWithSignal = promiseInterval(1, "tick", {}); // AbortSignal options stay fenced
|
|
const sleepWithSignal = promiseSleep(1, "tick", { signal: AbortSignal.timeout(5) }); // resolve values lower; AbortSignal stays fenced
|
|
// The computed encoding is now part of the static Buffer surface. The
|
|
// one-shot zlib/raw/gzip codecs take Node's options, validated at run
|
|
// time; Brotli remains an explicit member fence.
|
|
import { brotliCompressSync, deflateSync } from "node:zlib";
|
|
const packed = deflateSync("data", { level: 9, strategy: 1 }); // options lower
|
|
const brotli = brotliCompressSync(Buffer.from("data")); // outside the lowered family: fenced
|
|
// The remaining imports continue the declared-but-not-lowered surface.
|