1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
"use strict"; // run code in ES5 strict mode
var someOtherModule = require("./someOtherModule.js"),
myNumber = 0, // copy by value
myObj = {}, // copy by reference
env = "bla",
fs;
// We need getters and setters for private vars to check if our injected setters and getters actual work
function setMyNumber(newNumber) {
myNumber = newNumber;
}
function getMyNumber() {
return myNumber;
}
function setMyObj(newObj) {
myObj = newObj;
}
function getMyObj() {
return myObj;
}
function readFileSync() {
fs.readFileSync("bla.txt", "utf8");
}
function checkSomeGlobals() {
var isLowerIE,
typeOfGlobalFunc;
if (typeof navigator !== "undefined") {
isLowerIE = /MSIE [6-8]\.[0-9]/g.test(navigator.userAgent);
}
if (isLowerIE) {
typeOfGlobalFunc = "object";
} else {
typeOfGlobalFunc = "function";
}
if (typeof global !== "object") {
throw new ReferenceError("global is not an object");
}
if (typeof console !== "object") {
throw new ReferenceError("console is not an object");
}
if (typeof require !== "function") {
throw new ReferenceError("require is not a function");
}
if (typeof module !== "object") {
throw new ReferenceError("module is not an object");
}
if (typeof exports !== "object") {
throw new ReferenceError("exports is not an object");
}
if (module.exports !== exports) {
throw new Error("module.exports === exports returns false");
}
if (typeof __dirname !== "string") {
throw new ReferenceError("__dirname is not a string");
}
if (typeof __filename !== "string") {
throw new ReferenceError("__filename is not a string");
}
if (typeof setTimeout !== typeOfGlobalFunc) {
throw new ReferenceError("setTimeout is not a function");
}
if (typeof clearTimeout !== typeOfGlobalFunc) {
throw new ReferenceError("clearTimeout is not a function");
}
if (typeof setInterval !== typeOfGlobalFunc) {
throw new ReferenceError("setInterval is not a function");
}
if (typeof clearInterval !== typeOfGlobalFunc) {
throw new ReferenceError("clearInterval is not a function");
}
if (typeof Error !== "function") {
throw new ReferenceError("Error is not a function");
}
if (typeof parseFloat !== "function") {
throw new ReferenceError("parseFloat is not a function");
}
if (typeof parseInt !== "function") {
throw new ReferenceError("parseInt is not a function");
}
if (typeof window === "undefined") {
if (typeof process !== "object") {
throw new ReferenceError("process is not an object");
}
if (typeof Buffer !== "function") {
throw new ReferenceError("Buffer is not a function");
}
} else {
if (typeof encodeURIComponent !== "function") {
throw new ReferenceError("encodeURIComponent is not a function");
}
if (typeof decodeURIComponent !== "function") {
throw new ReferenceError("decodeURIComponent is not a function");
}
if (typeof document !== "object") {
throw new ReferenceError("document is not an object");
}
}
}
function getConsole() {
return console;
}
function getFilename() {
return __filename;
}
function getBuffer() {
return Buffer;
}
function getDocument() {
return document;
}
// different styles of exports in moduleA.js and moduleB.js
exports.setMyNumber = setMyNumber;
exports.getMyNumber = getMyNumber;
exports.setMyObj = setMyObj;
exports.getMyObj = getMyObj;
exports.readFileSync = readFileSync;
exports.checkSomeGlobals = checkSomeGlobals;
exports.getConsole = getConsole;
exports.getFilename = getFilename;
exports.getBuffer = getBuffer;
exports.getDocument = getDocument;
exports.someOtherModule = someOtherModule;
|