]> Cypherpunks repositories - gostls13.git/commitdiff
misc/wasm: improve detection of Node.js
authorRichard Musiol <mail@richard-musiol.de>
Thu, 25 Oct 2018 21:11:10 +0000 (23:11 +0200)
committerRichard Musiol <neelance@gmail.com>
Thu, 25 Oct 2018 22:13:48 +0000 (22:13 +0000)
This commit adds a check of "process.title" to detect Node.js.

The web app bundler Parcel sets "process" to an empty object. This
incorrectly got detected as Node.js, even though the script was
running in a browser.

Fixes #28364.

Change-Id: Iecac7f8fc3cc4ac7ddb42dd43c5385681a3282de
Reviewed-on: https://go-review.googlesource.com/c/144658
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
misc/wasm/wasm_exec.js

index 78eb306253d669fa7a0fb362c59b4e3a815a5b33..e47663783e62871715db1b2fa8eb2b066b42dc3e 100644 (file)
@@ -3,8 +3,18 @@
 // license that can be found in the LICENSE file.
 
 (() => {
+       if (typeof global !== "undefined") {
+               // global already exists
+       } else if (typeof window !== "undefined") {
+               window.global = window;
+       } else if (typeof self !== "undefined") {
+               self.global = self;
+       } else {
+               throw new Error("cannot export Go (neither global, window nor self is defined)");
+       }
+
        // Map web browser API and Node.js API to a single common API (preferring web standards over Node.js API).
-       const isNodeJS = typeof process !== "undefined";
+       const isNodeJS = global.process && global.process.title === "node";
        if (isNodeJS) {
                global.require = require;
                global.fs = require("fs");
                global.TextEncoder = util.TextEncoder;
                global.TextDecoder = util.TextDecoder;
        } else {
-               if (typeof window !== "undefined") {
-                       window.global = window;
-               } else if (typeof self !== "undefined") {
-                       self.global = self;
-               } else {
-                       throw new Error("cannot export Go (neither window nor self is defined)");
-               }
-
                let outputBuf = "";
                global.fs = {
                        constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused