diff options
-rw-r--r-- | .travis.yml | 2 | ||||
-rw-r--r-- | lib/getImportGlobalsSrc.js | 14 | ||||
-rw-r--r-- | test/getImportGlobalsSrc.test.js | 22 |
3 files changed, 28 insertions, 10 deletions
diff --git a/.travis.yml b/.travis.yml index bd4662b..9740083 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ language: node_js node_js: - "6" - "8" - - "9" + - "10" script: - npm test diff --git a/lib/getImportGlobalsSrc.js b/lib/getImportGlobalsSrc.js index 3c29c56..fcce0d0 100644 --- a/lib/getImportGlobalsSrc.js +++ b/lib/getImportGlobalsSrc.js @@ -9,7 +9,6 @@ */ function getImportGlobalsSrc(ignore) { var key, - value, src = "", globalObj = typeof global === "undefined"? window: global; @@ -20,12 +19,21 @@ function getImportGlobalsSrc(ignore) { // shadow the module-internal variables // @see https://github.com/jhnns/rewire-webpack/pull/6 ignore.push("module", "exports", "require"); + // strict mode doesn't allow to (re)define 'undefined', 'eval' & 'arguments' + ignore.push("undefined", "eval", "arguments"); + // 'GLOBAL' and 'root' are deprecated in Node + // (assigning them causes a DeprecationWarning) + ignore.push("GLOBAL", "root"); + // 'NaN' and 'Infinity' are immutable + // (doesn't throw an error if you set 'var NaN = ...', but doesn't work either) + ignore.push("NaN", "Infinity"); - for (key in globalObj) { /* jshint forin: false */ + const globals = Object.getOwnPropertyNames(globalObj); + + for (key of globals) { if (ignore.indexOf(key) !== -1) { continue; } - value = globalObj[key]; // key may be an invalid variable name (e.g. 'a-b') try { diff --git a/test/getImportGlobalsSrc.test.js b/test/getImportGlobalsSrc.test.js index b85736c..ca29f03 100644 --- a/test/getImportGlobalsSrc.test.js +++ b/test/getImportGlobalsSrc.test.js @@ -3,6 +3,7 @@ var expect = require("expect.js"), getImportGlobalsSrc = require("../lib/getImportGlobalsSrc.js"); describe("getImportGlobalsSrc", function () { + it("should declare all globals with a var", function () { var context = { global: global @@ -28,15 +29,20 @@ describe("getImportGlobalsSrc", function () { delete global['__core-js_shared__']; delete global['a-b']; - expectedGlobals = Object.keys(global); + const ignoredGlobals = ["module", "exports", "require", "undefined", "eval", "arguments", "GLOBAL", "root", "NaN", "Infinity"]; + + const globals = Object.getOwnPropertyNames(global); + expectedGlobals = globals.filter((el) => !ignoredGlobals.includes(el)); vm.runInNewContext(src, context); - actualGlobals = Object.keys(context); + actualGlobals = Object.getOwnPropertyNames(context); + actualGlobals.sort(); expectedGlobals.sort(); expect(actualGlobals).to.eql(expectedGlobals); expect(actualGlobals.length).to.be.above(1); }); + it("should ignore the given variables", function () { var context = { global: global @@ -44,18 +50,22 @@ describe("getImportGlobalsSrc", function () { ignore = ["console", "setTimeout"], src, actualGlobals, - expectedGlobals = Object.keys(global); + expectedGlobals = Object.getOwnPropertyNames(global); + + const ignoredGlobals = ["module", "exports", "require", "undefined", "eval", "arguments", "GLOBAL", "root", "NaN", "Infinity"]; + ignore = ignore.concat(ignoredGlobals); // getImportGlobalsSrc modifies the ignore array, so let's create a copy src = getImportGlobalsSrc(ignore.slice(0)); - expectedGlobals = expectedGlobals.filter(function filterIgnoredVars(value) { - return ignore.indexOf(value) === -1; - }); + expectedGlobals = expectedGlobals.filter((el) => !ignore.includes(el)); + vm.runInNewContext(src, context); actualGlobals = Object.keys(context); + actualGlobals.sort(); expectedGlobals.sort(); expect(actualGlobals).to.eql(expectedGlobals); expect(actualGlobals.length).to.be.above(1); }); + }); |