diff --git a/cli/dts/lib.deno.unstable.d.ts b/cli/dts/lib.deno.unstable.d.ts index 0ed27c5d51..b8eb886e4c 100644 --- a/cli/dts/lib.deno.unstable.d.ts +++ b/cli/dts/lib.deno.unstable.d.ts @@ -317,6 +317,18 @@ declare namespace Deno { */ export function getUid(): number | null; + /** **Unstable** new API. yet to be vetted. + * + * Returns the group id of the process on POSIX platforms. Returns null on windows. + * + * ```ts + * console.log(Deno.getGid()); + * ``` + * + * Requires `allow-env` permission. + */ + export function getGid(): number | null; + /** All possible types for interfacing with foreign functions */ export type NativeType = | "void" diff --git a/cli/tests/unit/os_test.ts b/cli/tests/unit/os_test.ts index 6ed1126f1a..b5ff6f29fa 100644 --- a/cli/tests/unit/os_test.ts +++ b/cli/tests/unit/os_test.ts @@ -204,3 +204,13 @@ Deno.test({ permissions: { env: true } }, function getUid() { assert(uid > 0); } }); + +Deno.test({ permissions: { env: true } }, function getGid() { + if (Deno.build.os === "windows") { + assertEquals(Deno.getGid(), null); + } else { + const gid = Deno.getGid(); + assert(typeof gid === "number"); + assert(gid > 0); + } +}); diff --git a/runtime/js/30_os.js b/runtime/js/30_os.js index 9cc2ba5c7f..f9df423051 100644 --- a/runtime/js/30_os.js +++ b/runtime/js/30_os.js @@ -30,6 +30,10 @@ return core.opSync("op_network_interfaces"); } + function getGid() { + return core.opSync("op_getgid"); + } + function getUid() { return core.opSync("op_getuid"); } @@ -94,6 +98,7 @@ env, execPath, exit, + getGid, getUid, hostname, loadavg, diff --git a/runtime/js/90_deno_ns.js b/runtime/js/90_deno_ns.js index 879e63e57c..24a31bc31c 100644 --- a/runtime/js/90_deno_ns.js +++ b/runtime/js/90_deno_ns.js @@ -124,6 +124,7 @@ osRelease: __bootstrap.os.osRelease, systemMemoryInfo: __bootstrap.os.systemMemoryInfo, networkInterfaces: __bootstrap.os.networkInterfaces, + getGid: __bootstrap.os.getGid, getUid: __bootstrap.os.getUid, sleepSync: __bootstrap.timers.sleepSync, listen: __bootstrap.netUnstable.listen, diff --git a/runtime/ops/os.rs b/runtime/ops/os.rs index c74a423ab5..37da410ca3 100644 --- a/runtime/ops/os.rs +++ b/runtime/ops/os.rs @@ -22,6 +22,7 @@ pub fn init(maybe_exit_code: Option>) -> Extension { op_exit::decl(), op_delete_env::decl(), op_get_env::decl(), + op_getgid::decl(), op_getuid::decl(), op_hostname::decl(), op_loadavg::decl(), @@ -225,6 +226,22 @@ fn op_system_memory_info( } } +#[cfg(not(windows))] +#[op] +fn op_getgid(state: &mut OpState) -> Result, AnyError> { + super::check_unstable(state, "Deno.getGid"); + state.borrow_mut::().env.check_all()?; + unsafe { Ok(Some(libc::getgid())) } +} + +#[cfg(windows)] +#[op] +fn op_getgid(state: &mut OpState) -> Result, AnyError> { + super::check_unstable(state, "Deno.getGid"); + state.borrow_mut::().env.check_all()?; + Ok(None) +} + #[cfg(not(windows))] #[op] fn op_getuid(state: &mut OpState) -> Result, AnyError> {