diff options
author | Rubin Bhandari <roobin.bhandari@gmail.com> | 2020-06-11 22:56:26 +0545 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-11 13:11:26 -0400 |
commit | 6ccf9037a6b36c81ea0e6ac12d0e2dbd793f6114 (patch) | |
tree | abb74317f03844454306c6d6b52b963ffe8e1d16 | |
parent | 818a8010928cb8cef0b7043bd881c8cdce9b6efc (diff) |
feat: add Deno.osName() (#5714)
-rw-r--r-- | cli/doc/ts_type.rs | 4 | ||||
-rw-r--r-- | cli/js/deno.ts | 2 | ||||
-rw-r--r-- | cli/js/lib.deno.unstable.d.ts | 12 | ||||
-rw-r--r-- | cli/js/ops/os.ts | 4 | ||||
-rw-r--r-- | cli/ops/os.rs | 12 | ||||
-rw-r--r-- | cli/tests/unit/os_test.ts | 16 | ||||
-rw-r--r-- | std/node/os.ts | 4 | ||||
-rw-r--r-- | std/node/os_test.ts | 7 |
8 files changed, 49 insertions, 12 deletions
diff --git a/cli/doc/ts_type.rs b/cli/doc/ts_type.rs index ec1a5e7e9..e1677f13e 100644 --- a/cli/doc/ts_type.rs +++ b/cli/doc/ts_type.rs @@ -529,7 +529,7 @@ impl Into<TsTypeDef> for &TsType { TsUnionOrIntersectionType(union_or_inter) => union_or_inter.into(), TsArrayType(array_type) => array_type.into(), TsTupleType(tuple_type) => tuple_type.into(), - TsTypeOperator(type_op_type) => type_op_type.into(), + TsTypeOperator(type_op_name) => type_op_name.into(), TsParenthesizedType(paren_type) => paren_type.into(), TsRestType(rest_type) => rest_type.into(), TsOptionalType(optional_type) => optional_type.into(), @@ -737,7 +737,7 @@ pub fn ts_type_ann_to_def(type_ann: &TsTypeAnn) -> TsTypeDef { TsUnionOrIntersectionType(union_or_inter) => union_or_inter.into(), TsArrayType(array_type) => array_type.into(), TsTupleType(tuple_type) => tuple_type.into(), - TsTypeOperator(type_op_type) => type_op_type.into(), + TsTypeOperator(type_op_name) => type_op_name.into(), TsParenthesizedType(paren_type) => paren_type.into(), TsRestType(rest_type) => rest_type.into(), TsOptionalType(optional_type) => optional_type.into(), diff --git a/cli/js/deno.ts b/cli/js/deno.ts index 5bc69fc7b..e4211c23d 100644 --- a/cli/js/deno.ts +++ b/cli/js/deno.ts @@ -53,7 +53,7 @@ export { export { metrics, Metrics } from "./ops/runtime.ts"; export { mkdirSync, mkdir, MkdirOptions } from "./ops/fs/mkdir.ts"; export { connect, listen, Listener, Conn } from "./net.ts"; -export { env, exit, execPath } from "./ops/os.ts"; +export { dir, env, exit, execPath, osName } from "./ops/os.ts"; export { run, RunOptions, Process, ProcessStatus } from "./process.ts"; export { DirEntry, readDirSync, readDir } from "./ops/fs/read_dir.ts"; export { readFileSync, readFile } from "./read_file.ts"; diff --git a/cli/js/lib.deno.unstable.d.ts b/cli/js/lib.deno.unstable.d.ts index dc50416fc..f425dec56 100644 --- a/cli/js/lib.deno.unstable.d.ts +++ b/cli/js/lib.deno.unstable.d.ts @@ -32,6 +32,18 @@ declare namespace Deno { * Requires `allow-read` and `allow-write` permissions. */ export function linkSync(oldpath: string, newpath: string): void; + /** + * Returns the os name. + * + * ```ts + * console.log(Deno.osName()); // e.g. "Linux" + * ``` + * + */ + + export function osName(): string; + + /** Creates `newpath` as a hard link to `oldpath`. /** **UNSTABLE**: This API needs a security review. * * Creates `newpath` as a hard link to `oldpath`. diff --git a/cli/js/ops/os.ts b/cli/js/ops/os.ts index e63d8b358..915106495 100644 --- a/cli/js/ops/os.ts +++ b/cli/js/ops/os.ts @@ -72,3 +72,7 @@ export function dir(kind: DirKind): string | null { export function execPath(): string { return sendSync("op_exec_path"); } + +export function osName(): string { + return sendSync("op_name"); +} diff --git a/cli/ops/os.rs b/cli/ops/os.rs index ab7ed2876..77c547362 100644 --- a/cli/ops/os.rs +++ b/cli/ops/os.rs @@ -20,6 +20,7 @@ pub fn init(i: &mut CoreIsolate, s: &State) { i.register_op("op_hostname", s.stateful_json_op(op_hostname)); i.register_op("op_loadavg", s.stateful_json_op(op_loadavg)); i.register_op("op_os_release", s.stateful_json_op(op_os_release)); + i.register_op("op_name", s.stateful_json_op(op_name)); } #[derive(Deserialize)] @@ -206,3 +207,14 @@ fn op_os_release( let release = sys_info::os_release().unwrap_or_else(|_| "".to_string()); Ok(JsonOp::Sync(json!(release))) } + +fn op_name( + state: &State, + _args: Value, + _zero_copy: &mut [ZeroCopyBuf], +) -> Result<JsonOp, OpError> { + state.check_unstable("Deno.osName"); + state.check_env()?; + let os_name = sys_info::os_type().unwrap_or_else(|_| "".to_string()); + Ok(JsonOp::Sync(json!(os_name))) +} diff --git a/cli/tests/unit/os_test.ts b/cli/tests/unit/os_test.ts index 9698692c7..deb0385a8 100644 --- a/cli/tests/unit/os_test.ts +++ b/cli/tests/unit/os_test.ts @@ -326,6 +326,22 @@ unitTest({ perms: { env: false } }, function hostnamePerm(): void { assert(caughtError); }); +unitTest({ perms: { env: true } }, function osName(): void { + assertNotEquals(Deno.osName(), ""); +}); + +unitTest({ perms: { env: false } }, function osNamePerm(): void { + let caughtError = false; + try { + Deno.osName(); + } catch (err) { + caughtError = true; + assert(err instanceof Deno.errors.PermissionDenied); + assertEquals(err.name, "PermissionDenied"); + } + assert(caughtError); +}); + unitTest({ perms: { env: true } }, function releaseDir(): void { assertNotEquals(Deno.osRelease(), ""); }); diff --git a/std/node/os.ts b/std/node/os.ts index 27b054f4d..65b158b3f 100644 --- a/std/node/os.ts +++ b/std/node/os.ts @@ -190,9 +190,9 @@ export function totalmem(): number { notImplemented(SEE_GITHUB_ISSUE); } -/** Not yet implemented */ +/** Returns the operating system name as returned by uname(3) */ export function type(): string { - notImplemented(SEE_GITHUB_ISSUE); + return Deno.osName(); } /** Not yet implemented */ diff --git a/std/node/os_test.ts b/std/node/os_test.ts index f0b9ca79d..c67879d23 100644 --- a/std/node/os_test.ts +++ b/std/node/os_test.ts @@ -246,13 +246,6 @@ test({ ); assertThrows( () => { - os.type(); - }, - Error, - "Not implemented" - ); - assertThrows( - () => { os.uptime(); }, Error, |