summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehnam Mohammadi <itten@live.com>2020-11-14 02:51:11 +0330
committerGitHub <noreply@github.com>2020-11-14 00:21:11 +0100
commita59f5eadd86e85bf662b37ec40ceb6f80cb207c4 (patch)
tree49b3ff46c3f743d4975c7eaa3d73698c006bf24c
parentd5661f677e9f5675fc488c4629e85a58764ec3ff (diff)
refactor(std): add std/_util/os.ts module (#8370)
This commit adds "std/_util/os.ts" module which contains common os detection logic and is browser compatible. Co-authored-by: Nayeem Rahman <nayeemrmn99@gmail.com>
-rw-r--r--std/_util/os.ts18
-rw-r--r--std/fs/copy.ts3
-rw-r--r--std/fs/ensure_symlink.ts3
-rw-r--r--std/fs/expand_glob.ts3
-rw-r--r--std/node/_url.ts3
-rw-r--r--std/node/module.ts3
-rw-r--r--std/path/_constants.ts14
-rw-r--r--std/path/glob.ts4
-rw-r--r--std/path/mod.ts2
-rw-r--r--std/path/separator.ts2
10 files changed, 27 insertions, 28 deletions
diff --git a/std/_util/os.ts b/std/_util/os.ts
new file mode 100644
index 000000000..50c70b134
--- /dev/null
+++ b/std/_util/os.ts
@@ -0,0 +1,18 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+// This module is browser compatible.
+
+export const osType = (() => {
+ if (globalThis.Deno != null) {
+ return Deno.build.os;
+ }
+
+ // deno-lint-ignore no-explicit-any
+ const navigator = (globalThis as any).navigator;
+ if (navigator?.appVersion?.includes?.("Win") ?? false) {
+ return "windows";
+ }
+
+ return "linux";
+})();
+
+export const isWindows = osType === "windows";
diff --git a/std/fs/copy.ts b/std/fs/copy.ts
index 10bf89186..1bb0a6aff 100644
--- a/std/fs/copy.ts
+++ b/std/fs/copy.ts
@@ -3,8 +3,7 @@ import * as path from "../path/mod.ts";
import { ensureDir, ensureDirSync } from "./ensure_dir.ts";
import { getFileInfoType, isSubdir } from "./_util.ts";
import { assert } from "../_util/assert.ts";
-
-const isWindows = Deno.build.os === "windows";
+import { isWindows } from "../_util/os.ts";
export interface CopyOptions {
/**
diff --git a/std/fs/ensure_symlink.ts b/std/fs/ensure_symlink.ts
index 7c68d05e2..b57abe907 100644
--- a/std/fs/ensure_symlink.ts
+++ b/std/fs/ensure_symlink.ts
@@ -3,8 +3,7 @@ import * as path from "../path/mod.ts";
import { ensureDir, ensureDirSync } from "./ensure_dir.ts";
import { exists, existsSync } from "./exists.ts";
import { getFileInfoType } from "./_util.ts";
-
-const isWindows = Deno.build.os == "windows";
+import { isWindows } from "../_util/os.ts";
/**
* Ensures that the link exists.
diff --git a/std/fs/expand_glob.ts b/std/fs/expand_glob.ts
index db60b2465..390df4932 100644
--- a/std/fs/expand_glob.ts
+++ b/std/fs/expand_glob.ts
@@ -16,8 +16,7 @@ import {
walkSync,
} from "./walk.ts";
import { assert } from "../_util/assert.ts";
-
-const isWindows = Deno.build.os == "windows";
+import { isWindows } from "../_util/os.ts";
export interface ExpandGlobOptions extends Omit<GlobOptions, "os"> {
root?: string;
diff --git a/std/node/_url.ts b/std/node/_url.ts
index 82daa25e9..f85286df2 100644
--- a/std/node/_url.ts
+++ b/std/node/_url.ts
@@ -26,8 +26,7 @@ import {
CHAR_LOWERCASE_Z,
} from "../path/_constants.ts";
import * as path from "./path.ts";
-
-const isWindows = Deno.build.os === "windows";
+import { isWindows } from "../_util/os.ts";
const forwardSlashRegEx = /\//g;
const percentRegEx = /%/g;
diff --git a/std/node/module.ts b/std/node/module.ts
index c8c02bad3..597da09db 100644
--- a/std/node/module.ts
+++ b/std/node/module.ts
@@ -34,13 +34,12 @@ import * as nodeUtil from "./util.ts";
import * as path from "../path/mod.ts";
import { assert } from "../_util/assert.ts";
import { fileURLToPath, pathToFileURL } from "./url.ts";
+import { isWindows } from "../_util/os.ts";
const CHAR_FORWARD_SLASH = "/".charCodeAt(0);
const CHAR_BACKWARD_SLASH = "\\".charCodeAt(0);
const CHAR_COLON = ":".charCodeAt(0);
-const isWindows = Deno.build.os == "windows";
-
const relativeResolveCache = Object.create(null);
let requireDepth = 0;
diff --git a/std/path/_constants.ts b/std/path/_constants.ts
index d26334b55..78755529b 100644
--- a/std/path/_constants.ts
+++ b/std/path/_constants.ts
@@ -46,17 +46,3 @@ export const CHAR_EQUAL = 61; /* = */
// Digits
export const CHAR_0 = 48; /* 0 */
export const CHAR_9 = 57; /* 9 */
-
-let NATIVE_OS: typeof Deno.build.os = "linux";
-// deno-lint-ignore no-explicit-any
-const navigator = (globalThis as any).navigator;
-if (globalThis.Deno != null) {
- NATIVE_OS = Deno.build.os;
-} else if (navigator?.appVersion?.includes?.("Win") ?? false) {
- NATIVE_OS = "windows";
-}
-// TODO(nayeemrmn): Improve OS detection in browsers beyond Windows.
-
-export const isWindows = NATIVE_OS == "windows";
-
-export { NATIVE_OS };
diff --git a/std/path/glob.ts b/std/path/glob.ts
index fde2fe8e2..a9cd70143 100644
--- a/std/path/glob.ts
+++ b/std/path/glob.ts
@@ -1,7 +1,7 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
// This module is browser compatible.
-import { NATIVE_OS } from "./_constants.ts";
+import { osType } from "../_util/os.ts";
import { join, normalize } from "./mod.ts";
import { SEP, SEP_PATTERN } from "./separator.ts";
@@ -80,7 +80,7 @@ const rangeEscapeChars = ["-", "\\", "]"];
* the group occurs not nested at the end of the segment. */
export function globToRegExp(
glob: string,
- { extended = true, globstar: globstarOption = true, os = NATIVE_OS }:
+ { extended = true, globstar: globstarOption = true, os = osType }:
GlobToRegExpOptions = {},
): RegExp {
if (glob == "") {
diff --git a/std/path/mod.ts b/std/path/mod.ts
index 58c2c4561..8819bf25f 100644
--- a/std/path/mod.ts
+++ b/std/path/mod.ts
@@ -2,7 +2,7 @@
// Ported mostly from https://github.com/browserify/path-browserify/
/** This module is browser compatible. */
-import { isWindows } from "./_constants.ts";
+import { isWindows } from "../_util/os.ts";
import * as _win32 from "./win32.ts";
import * as _posix from "./posix.ts";
diff --git a/std/path/separator.ts b/std/path/separator.ts
index 4b54ad438..61bb7c588 100644
--- a/std/path/separator.ts
+++ b/std/path/separator.ts
@@ -1,7 +1,7 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
/** This module is browser compatible. */
-import { isWindows } from "./_constants.ts";
+import { isWindows } from "../_util/os.ts";
export const SEP = isWindows ? "\\" : "/";
export const SEP_PATTERN = isWindows ? /[\\/]+/ : /\/+/;