From 4e75f6de4a2e49f28c24b59107f262d472b68977 Mon Sep 17 00:00:00 2001 From: Daniel Wirtz Date: Thu, 16 Jul 2020 01:30:05 +0200 Subject: [PATCH] fix: make node detection a bit more forgiving (#1445) * Make node detection a bit more forgiving * reorder * make sure we get a boolean --- index.d.ts | 9 ++++++--- src/util/minimal.js | 27 +++++++++++++++++---------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/index.d.ts b/index.d.ts index 772250491..cb86b61e6 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1951,15 +1951,18 @@ export namespace util { public length(): number; } + /** Whether running within node or not. */ + let isNode: boolean; + + /** Global object reference. */ + let global: object; + /** An immuable empty array. */ const emptyArray: any[]; /** An immutable empty object. */ const emptyObject: object; - /** Whether running within node or not. */ - const isNode: boolean; - /** * Tests if the specified value is an integer. * @param value Value to test diff --git a/src/util/minimal.js b/src/util/minimal.js index e384b62fb..3c406dee7 100644 --- a/src/util/minimal.js +++ b/src/util/minimal.js @@ -25,8 +25,23 @@ util.pool = require("@protobufjs/pool"); // utility to work with the low and high bits of a 64 bit value util.LongBits = require("./longbits"); -// global object reference -util.global = typeof global !== "undefined" && Object.prototype.toString.call(global) === "[object global]" && global +/** + * Whether running within node or not. + * @memberof util + * @type {boolean} + */ +util.isNode = Boolean(typeof global !== "undefined" + && global + && global.process + && global.process.versions + && global.process.versions.node); + +/** + * Global object reference. + * @memberof util + * @type {Object} + */ +util.global = util.isNode && global || typeof window !== "undefined" && window || typeof self !== "undefined" && self || this; // eslint-disable-line no-invalid-this @@ -46,14 +61,6 @@ util.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ */ util.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes -/** - * Whether running within node or not. - * @memberof util - * @type {boolean} - * @const - */ -util.isNode = Boolean(util.global.process && util.global.process.versions && util.global.process.versions.node); - /** * Tests if the specified value is an integer. * @function