import { warnNotImplemented } from "./_utils.ts";import { EventEmitter } from "./events.ts";import { fromFileUrl } from "../path/mod.ts";import { isWindows } from "../_util/os.ts";import { Readable, Writable } from "./stream.ts";import { Buffer } from "./buffer.ts";import { validateString } from "./_validators.ts";import { ERR_INVALID_ARG_TYPE } from "./_errors.ts";import { getOptionValue } from "./_options.ts";import { assert } from "../_util/assert.ts";
const notImplementedEvents = [ "beforeExit", "disconnect", "message", "multipleResolves", "rejectionHandled", "uncaughtException", "uncaughtExceptionMonitor", "unhandledRejection",];
function _arch(): string { if (Deno.build.arch == "x86_64") { return "x64"; } else if (Deno.build.arch == "aarch64") { return "arm64"; } else { throw Error("unreachable"); }}
export const arch = _arch();
const argv = ["", "", ...Deno.args];Object.defineProperty(argv, "0", { get: Deno.execPath });Object.defineProperty(argv, "1", { get: () => fromFileUrl(Deno.mainModule) });
export const chdir = Deno.chdir;
export const cwd = Deno.cwd;
export const env: Record<string, string> = new Proxy({}, { get(_target, prop) { return Deno.env.get(String(prop)); }, ownKeys: () => Reflect.ownKeys(Deno.env.toObject()), getOwnPropertyDescriptor: () => ({ enumerable: true, configurable: true }), set(_target, prop, value) { Deno.env.set(String(prop), String(value)); return value; },});
export const exit = Deno.exit;
export function nextTick(this: unknown, cb: () => void): void;export function nextTick<T extends Array<unknown>>( this: unknown, cb: (...args: T) => void, ...args: T): void;export function nextTick<T extends Array<unknown>>( this: unknown, cb: (...args: T) => void, ...args: T) { if (args) { queueMicrotask(() => cb.call(this, ...args)); } else { queueMicrotask(cb); }}
export const pid = Deno.pid;
export const platform = isWindows ? "win32" : Deno.build.os;
export const version = "v16.11.1";
export const versions = { node: "16.11.1", uv: "1.42.0", zlib: "1.2.11", brotli: "1.0.9", ares: "1.17.2", modules: "93", nghttp2: "1.45.1", napi: "8", llhttp: "6.0.4", openssl: "1.1.1l", cldr: "39.0", icu: "69.1", tz: "2021a", unicode: "13.0", ...Deno.version,};
interface _Readable extends Readable { get isTTY(): true | undefined; destroySoon: Readable["destroy"]; fd: number; _isStdio: undefined;}
interface _Writable extends Writable { get isTTY(): true | undefined; get columns(): number | undefined; get rows(): number | undefined; getWindowSize(): [columns: number, rows: number] | undefined; destroySoon: Writable["destroy"]; fd: number; _isStdio: true;}
function createWritableStdioStream(writer: typeof Deno.stdout): _Writable { const stream = new Writable({ write(buf: Uint8Array, enc: string, cb) { writer.writeSync(buf instanceof Uint8Array ? buf : Buffer.from(buf, enc)); cb(); }, destroy(err, cb) { cb(err); this._undestroy(); if (!this._writableState.emitClose) { queueMicrotask(() => this.emit("close")); } }, }) as _Writable; stream.fd = writer.rid; stream.destroySoon = stream.destroy; stream._isStdio = true; stream.once("close", () => writer.close()); Object.defineProperties(stream, { columns: { enumerable: true, configurable: true, get: () => Deno.isatty(writer.rid) ? Deno.consoleSize(writer.rid).columns : undefined, }, rows: { enumerable: true, configurable: true, get: () => Deno.isatty(writer.rid) ? Deno.consoleSize(writer.rid).rows : undefined, }, isTTY: { enumerable: true, configurable: true, get: () => Deno.isatty(writer.rid), }, getWindowSize: { enumerable: true, configurable: true, value: () => Deno.isatty(writer.rid) ? Object.values(Deno.consoleSize(writer.rid)) : undefined, }, }); return stream;}
export const stderr = createWritableStdioStream(Deno.stderr);
export const stdin = new Readable({ read(this: Readable, size: number) { const p = Buffer.alloc(size || 16 * 1024); const length = Deno.stdin.readSync(p); this.push(length === null ? null : p.slice(0, length)); },}) as _Readable;stdin.on("close", () => Deno.stdin.close());stdin.fd = Deno.stdin.rid;Object.defineProperty(stdin, "isTTY", { enumerable: true, configurable: true, get() { return Deno.isatty(Deno.stdin.rid); },});
export const stdout = createWritableStdioStream(Deno.stdout);
function addReadOnlyProcessAlias( name: string, option: string, enumerable = true,) { const value = getOptionValue(option);
if (value) { Object.defineProperty(process, name, { writable: false, configurable: true, enumerable, value, }); }}
function createWarningObject( warning: string, type: string, code?: string, ctor?: Function, detail?: string,): Error { assert(typeof warning === "string");
const warningErr: any = new Error(warning); warningErr.name = String(type || "Warning");
if (code !== undefined) { warningErr.code = code; } if (detail !== undefined) { warningErr.detail = detail; }
Error.captureStackTrace(warningErr, ctor || process.emitWarning);
return warningErr;}
function doEmitWarning(warning: Error) { process.emit("warning", warning);}
export function emitWarning( warning: string | Error, type: | { type: string; detail: string; code: string; ctor: Function } | string | null, code?: string, ctor?: Function,) { let detail;
if (type !== null && typeof type === "object" && !Array.isArray(type)) { ctor = type.ctor; code = type.code;
if (typeof type.detail === "string") { detail = type.detail; }
type = type.type || "Warning"; } else if (typeof type === "function") { ctor = type; code = undefined; type = "Warning"; }
if (type !== undefined) { validateString(type, "type"); }
if (typeof code === "function") { ctor = code; code = undefined; } else if (code !== undefined) { validateString(code, "code"); }
if (typeof warning === "string") { warning = createWarningObject(warning, type as string, code, ctor, detail); } else if (!(warning instanceof Error)) { throw new ERR_INVALID_ARG_TYPE("warning", ["Error", "string"], warning); }
if (warning.name === "DeprecationWarning") { if ((process as any).noDeprecation) { return; }
if ((process as any).throwDeprecation) { return process.nextTick(() => { throw warning; }); } }
process.nextTick(doEmitWarning, warning);}
class Process extends EventEmitter { constructor() { super();
window.addEventListener("unload", () => { super.emit("exit", 0); }); }
arch = arch;
argv = argv;
execArgv = [];
chdir = chdir;
cwd = cwd;
exit = exit;
env = env;
mainModule: any = undefined;
nextTick = nextTick;
on(event: "exit", listener: (code: number) => void): this; on(event: string, listener: (...args: any[]) => void): this; on(event: typeof notImplementedEvents[number], listener: Function): this; on(event: string, listener: (...args: any[]) => void): this { if (notImplementedEvents.includes(event)) { warnNotImplemented(`process.on("${event}")`); } else if (event.startsWith("SIG")) { Deno.addSignalListener(event as Deno.Signal, listener); } else { super.on(event, listener); }
return this; }
off(event: "exit", listener: (code: number) => void): this; off(event: string, listener: (...args: any[]) => void): this; off(event: typeof notImplementedEvents[number], listener: Function): this; off(event: string, listener: (...args: any[]) => void): this { if (notImplementedEvents.includes(event)) { warnNotImplemented(`process.off("${event}")`); } else if (event.startsWith("SIG")) { Deno.removeSignalListener(event as Deno.Signal, listener); } else { super.off(event, listener); }
return this; }
pid = pid;
platform = platform;
removeAllListeners(eventName?: string | symbol): this { return super.removeAllListeners(eventName); }
removeListener( event: typeof notImplementedEvents[number], listener: Function, ): this; removeListener(event: "exit", listener: (code: number) => void): this; removeListener(event: string, listener: (...args: any[]) => void): this { if (notImplementedEvents.includes(event)) { warnNotImplemented(`process.removeListener("${event}")`); return this; }
super.removeListener("exit", listener);
return this; }
hrtime(time?: [number, number]): [number, number] { const milli = performance.now(); const sec = Math.floor(milli / 1000); const nano = Math.floor(milli * 1_000_000 - sec * 1_000_000_000); if (!time) { return [sec, nano]; } const [prevSec, prevNano] = time; return [sec - prevSec, nano - prevNano]; }
stderr = stderr;
stdin = stdin;
stdout = stdout;
version = version;
versions = versions;
emitWarning = emitWarning;}
const process = new Process();
Object.defineProperty(process, Symbol.toStringTag, { enumerable: false, writable: true, configurable: false, value: "process",});
addReadOnlyProcessAlias("noDeprecation", "--no-deprecation");addReadOnlyProcessAlias("throwDeprecation", "--throw-deprecation");
export const removeListener = process.removeListener;export const removeAllListeners = process.removeAllListeners;
export default process;
export { process };