diff --git a/std/_util/os.ts b/std/_util/os.ts new file mode 100644 index 0000000000..50c70b1349 --- /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 10bf891862..1bb0a6aff5 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 7c68d05e2c..b57abe9073 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 db60b24655..390df49329 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 { root?: string; diff --git a/std/node/_url.ts b/std/node/_url.ts index 82daa25e93..f85286df23 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 c8c02bad35..597da09dbc 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 d26334b553..78755529b2 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 fde2fe8e2d..a9cd701435 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 58c2c45610..8819bf25f1 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 4b54ad4384..61bb7c5889 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 ? /[\\/]+/ : /\/+/;