Closed jasnell closed 5 years ago
Uh, why does TC39 want it un-enumerable?
I think we interact with enumeration on it somewhere, probably at least the autocomplete in the REPL?
To be clear, I believe it's the global
data property itself that would be non-enumerable... that is:
Object.getOwnPropertyDescriptor(global, 'global');
As far as I understand it, and @ljharb could likely go into it in more detail than I, but non-enumerable is a default choice for anything new that the committee adds. There's no technical reason that is has to be non-enumerable so if Node.js needs it that way, then we just need to let the committee know.
That said, the data property is configurable so even if the committee leaves it as non-enumerable, Node.js is perfectly within it's rights to switch that to enumerable.
The idea is that when new things are added, they don't newly appear in enumerations. This applies to browsers, because node already has it enumerable.
If node uses Object.getOwnPropertyNames, or Reflect.ownKeys, or Object.getOwnPropertyDescriptor(s) to reflect, then enumerability won't matter - it's only be a problem if you're using Object.keys/for, or Object.assign.
Would they happen to also want to make it something like a Proxy, or could our current implementation essentially stay the same?
Current impl should be able to stay the same.
On Wednesday, September 28, 2016, Trevor Norris notifications@github.com wrote:
Would they happen to also want to make it something like a Proxy, or could our current implementation essentially stay the same?
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/nodejs/node/issues/8810#issuecomment-250205002, or mute the thread https://github.com/notifications/unsubscribe-auth/AAa2eR1U_kRszauRWxmoVPSnBnosQ8eJks5quomzgaJpZM4KINsh .
@jasnell, not sure what I should look at concerning the global
usage. Do you mean iterating over global
or something else?
@ChALkeR anything that relies on enumerability: iterating over it, calling Object.keys or Object.assign on it, etc.
Upd: the first search contained a mistype, I deleted it entirely. A revised version will follow in a few minutes.
@ljharb, @jasnell
Done, based on the 2016-10-22 dataset.
Note that some of the global
variables might be defined locally.
These are not sorted based on the downloads count yet.
Overall, there are 413 matches in 247 packages for the listed usecases.
Regex: for .*\(.* (in|of) global[^[_a-zA-Z.]
+ manual filtering to exclude false positives.
Notice that at least two matches are inside comments, I have not excluded those.
ark-0.5.2.tgz/src/module.coffee:409: for (var k in global) {
require-ts-0.2.2.tgz/src/RequireTS.ts:33: for (var k in global) {
tsi-0.3.0.tgz/src/tsi.ts:35: for (var g in global) context[g] = global[g];
3vot-db-0.0.1.tgz/plv8-fill/index.js:88: for (k in global) {
OperatorUI-0.0.1.tgz/html/files/js/dragula.js:894:for (eventname in global) {
Web_GUI_Core-0.0.1.tgz/html/files/js/dragula.js:894:for (eventname in global) {
allone-0.5.5.tgz/modules/spm/lib/core/plugin_config.js:263: for (var k in global) {
alloynuclear-0.4.5.tgz/asset/qunit-1.23.1.js:1267: for ( var key in global ) {
antiglobal-0.1.2.tgz/index.js:92: for (var key in global) {
appex-0.6.9.tgz/index.js:5739: for (var n in global) {
arcane-coffee-import-1.0.8.tgz/lib/import.js:72: // for (var k in global) {
ark-0.5.2.tgz/src/api/module.js:392: for (var k in global) {
automizy-email-editor-1.0.0.tgz/.bower/qunit/qunit/qunit.js:1168: for ( var key in global ) {
automizy-email-editor-1.0.0.tgz/.bower/qunit/src/test.js:467: for ( var key in global ) {
automizy-js-api-1.0.0.tgz/external/qunit/qunit/qunit.js:1168: for ( var key in global ) {
automizy-js-api-1.0.0.tgz/external/qunit/src/test.js:467: for ( var key in global ) {
autorequire-0.3.4.tgz/lib/loader_behavior/v0.4.0.js:35: for (k in global) {
autorequire-0.3.4.tgz/lib/loader_behavior/v0.5.1.js:35: for (k in global) {
autorequire-0.3.4.tgz/lib/loader_behavior/v0.5.2.js:40: for (k in global) {
autorequire-0.3.4.tgz/lib/loader_behavior/v0.6.10.js:40: for (k in global) {
backbone.ribs-1.0.2.tgz/unitTests/qunit-1.20.0.js:1284: for ( var key in global ) {
bamreader-0.2.1.tgz/lib/bamreader.js:463: for (k in global) {
barista-fiddle-0.0.3.tgz/fiddle/components/tern/typescript.js:14:for (var prop in global) box[prop] = global[prop];
bellhop-iframe-1.2.0.tgz/components/qunit/qunit/qunit.js:1284: for ( var key in global ) {
bevy-0.4.9.tgz/node-http-proxy/test/core/common.js:133: for (var x in global) {
biojs-vis-blast-0.1.5.tgz/node/lib/module.js:415: for (var k in global) {
biojs-vis-blast-0.1.5.tgz/node/lib/repl.js:350: for (var i in global) context[i] = global[i];
biojs-vis-blast-0.1.5.tgz/node/test/common.js:169: for (var val in global)
bizubee-node-0.0.3.tgz/src/resolver.js:13: for (var key in global) {
browsix-0.1.0.tgz/node/lib/repl.js:484: for (var i in global) context[i] = global[i];
build-tools-5.0.0.tgz/src/test/qunit/qunit.js:1285: for ( var key in global ) {
c4-1.0.1.tgz/lib/c4.js:59: for ( var i in global ) {
capital-framework-3.6.1.tgz/test/lib/qunit/qunit.js:1284: for ( var key in global ) {
catest-6.2.47.tgz/autocomplete/tern/lib/typescript.js:14:for (var prop in global) box[prop] = global[prop];
chained-emitter-0.1.4.tgz/test/common.js:101: for (var x in global) {
client-management-0.1.26.tgz/plugins/angular-dragula.js:964:for (eventname in global) {
commonjs-everywhere-0.9.7.tgz/node/lib/module.js:411: for (var k in global) {
commonjs-everywhere-0.9.7.tgz/node/lib/repl.js:324: for (var i in global) context[i] = global[i];
crossvent-1.5.5.tgz/src/eventmap.js:7:for (eventname in global) {
cuckoo-0.0.5.tgz/cuckoo.js:44: for (key in global) {
datawatcher-1.0.0.tgz/tests/qunit.js:1327: for ( var key in global ) {
dune-0.2.1.tgz/lib/dune2.js:117: for (var k in global) {
eartraining-0.0.1.tgz/dependencies/vexflow-master/tests/support/qunit.js:1168: for ( var key in global ) {
epub.js-0.2.14.tgz/books/16a7f7fe0c76c96869b2e0d62cc49f8e/theme/html/epub.js:5894: for (var attr in global) {
epub.js-0.2.14.tgz/src/renderer.js:246: for (var attr in global) {
epubjs-0.2.14.tgz/books/16a7f7fe0c76c96869b2e0d62cc49f8e/theme/html/epub.js:5894: for (var attr in global) {
epubjs-0.2.14.tgz/src/renderer.js:246: for (var attr in global) {
fg-ajax-include-1.0.0.tgz/libs/qunit.js:1267: for ( var key in global ) {
flush-all-0.1.1.tgz/node-v0.13/lib/module.js:417: for (var k in global) {
flush-all-0.1.1.tgz/node-v0.13/lib/repl.js:353: for (var i in global) context[i] = global[i];
flush-all-0.1.1.tgz/node-v0.13/test/common.js:181: for (var val in global)
fortress-0.0.1.tgz/index.js:63: for (var key in global) {
generator-sowell-ed-0.4.4.tgz/generators/qunit/templates/qunit-1.23.1.js:1267: for ( var key in global ) {
geolinks-0.0.15.tgz/Tests/qunit.js:1168: for ( var key in global ) {
google-protobuf-alpha-3.0.0-alpha.8.tgz/commonjs/export_asserts.js:26:for (var key in global) {
haibu-carapace-other-0.0.2.tgz/lib/module.js:504: for (var k in global) {
hot-repl-0.2.5.tgz/hot-repl.js:34: for (var k in global) {
hot-repl-0.2.5.tgz/hot-repl2.js:13:for (var k in global) {
http-proxy-zz-0.10.5.tgz/test/core/common.js:133: for (var x in global) {
httpp-proxy-0.10.3.tgz/test/core/common.js:133: for (var x in global) {
ice-framework-1.0.0.tgz/Security/Sandbox.js:33: for (var key in global)
impact-crater-0.0.3.tgz/templates/minimal/impact/lib/plugins/server.js:117: for (var i in global)
impact-crater-0.0.3.tgz/templates/simple-game/impact/lib/plugins/server.js:117: for (var i in global)
iobroker.mysensors-2-2.0.5.tgz/lib/mySensors-enums.js:203: for (var v in global) {
jack-sanity-0.4.0.tgz/lib/Sandbox.js:111: for (var key in global) {
jaff-0.0.4.tgz/lib/MacroTransform.js:84: for (var method in global) {
js-appcache-1.0.1.tgz/appcache.js:35: for (key in global)
jsg-0.0.3.tgz/testdata/node_core_modules/module.js:404: for (var k in global) {
jsg-0.0.3.tgz/testdata/node_core_modules/repl.js:349: for (var i in global) context[i] = global[i];
jssh-0.0.8.tgz/src/reader/prompt.js:237: for (var cmd in global) {
jssn-1.0.4.tgz/index.js:152: for (var key in global) {
jstophp-0.2.7.tgz/test/core.js:74: for (var key in global) {
jui-2.0.2.tgz/lib/core.js:1236: for (var key in global) {
jui-2.0.2.tgz/lib/core.js:1557: for (var key in global) {
jui-chart-2.0.4.tgz/lib/core.js:1236: for (var key in global) {
jui-chart-2.0.4.tgz/lib/core.js:1557: for (var key in global) {
jui-core-2.0.4.tgz/js/base.js:1236: for (var key in global) {
jui-core-2.0.4.tgz/js/base.js:1557: for (var key in global) {
jui-grid-2.0.2.tgz/lib/core.js:1236: for (var key in global) {
jui-grid-2.0.2.tgz/lib/core.js:1557: for (var key in global) {
k1ngdr3w-protractor-2.2.2.tgz/lib/protractor.js:818: for (var key in global) {
karma-uiuxengineering-jspm-3.0.4.tgz/src/files/hookSystemJS.js:26: for (var g in global) {
limits-0.0.7.tgz/lib/index.js:17: for (i in global) {
localeval-15.2.3.tgz/localeval.js:107: for (var sym in global) {
localeval-15.2.3.tgz/worker.js:58: for (var sym in global) {
localeval-browseronly-1.0.0.tgz/localeval.js:44: for (var sym in global) {
localeval-browseronly-1.0.0.tgz/worker.js:58: for (var sym in global) {
lucy-live-0.1.3.tgz/index.js:188: for ( var k in global )
metafunction-0.0.10.tgz/metafunction.js:234: for (k in global) {
metafunction-0.0.10.tgz/metafunction.js:240: for (k in global) {
nae-sandbox-0.0.2-alpha.tgz/_source/module.js:406: for (var k in global) {
nae-sandbox-0.0.2-alpha.tgz/lib/module.js:240: for (var k in global) {
narwhal-0.0.2.tgz/lib/narwhal/sandbox.js:49: for (var name in global)
narwhal-0.0.2.tgz/lib/narwhal/sandbox.js:123: for (var name in global)
narwhal-lib-0.0.2.tgz/lib/narwhal/sandbox.js:49: for (var name in global)
narwhal-lib-0.0.2.tgz/lib/narwhal/sandbox.js:123: for (var name in global)
node-core-lib-0.11.11.tgz/module.js:404: for (var k in global) {
node-core-lib-0.11.11.tgz/repl.js:349: for (var i in global) context[i] = global[i];
node-enumjs-1.0.2.tgz/src/lib/qunit/qunit-1.19.0.js:1168: for ( var key in global ) {
node-natives-0.10.25.tgz/module.js:411: for (var k in global) {
node-natives-0.10.25.tgz/repl.js:324: for (var i in global) context[i] = global[i];
node-sc-setup-1.0.0.tgz/require.js:379: for (var k in global) {
nodefs-0.0.2.tgz/module.js:385: for (var k in global) {
nominatim-client-1.0.1.tgz/index.js:15: for (let i in global) {
notrace-0.2.6.tgz/lib/consumer.js:461: for (globalProp in global) {
nova-0.2.0.tgz/lib/nova/nova.js:156: for (var k in global) {
novacreator-bootstrap-data-grid-1.0.0.tgz/test/qunit/qunit-1.23.1.js:1267: for ( var key in global ) {
npk-0.0.4.tgz/lib/linker.js:50: for (var k in global) {
opabsl.opp-1.0.6.tgz/opabslNodeJsPackage.js:1006:global.set_distant = function (str,b){var l =str.split(",");var i =l.length;for (; i--; ){l[i] in global && (global[l[i]].distant = b);}};
ozero-1.0.10.tgz/ozero.js:648: for (var k in global) {
pathseg-1.0.2.tgz/tests/qunit/qunit-1.20.0.js:1284: for ( var key in global ) {
persha-0.2.0.tgz/node-lib/module.js:415: for (var k in global) {
persha-0.2.0.tgz/node-lib/repl.js:350: for (var i in global) context[i] = global[i];
perturb-0.0.1.tgz/examples/node-events/common.js:351: for (var val in global)
pezhu-0.0.0.tgz/Downloads/node-v0.9.11/lib/module.js:411: for (var k in global) {
pezhu-0.0.0.tgz/Downloads/node-v0.9.11/lib/repl.js:318: for (var i in global) context[i] = global[i];
pezhu-0.0.0.tgz/Downloads/node-v0.9.11/test/common.js:141: for (var x in global) {
pkgdev-0.0.19.tgz/_template/test/qunit/qunit.js:1154: for (var key in global) {
plv8-mantle-0.0.1.tgz/plv8-fill/index.js:27: for (var k in global) {
plv8-mantle-0.0.1.tgz/util/index.js:16: for (var k in global) {
poly-ebook-server-1.0.5.tgz/client/futurepress/js/epub.js:6255: for (var attr in global) {
portable-js-0.0.3.tgz/misc/io/repl.js:392: for (var i in global) context[i] = global[i];
portable-js-0.0.3.tgz/misc/node/module.js:417: for (var k in global) {
portable-js-0.0.3.tgz/misc/node/repl.js:352: for (var i in global) context[i] = global[i];
pouchdb-http-proxy-0.10.4.tgz/test/core/common.js:133: for (var x in global) {
protractor-4.0.9.tgz/built/browser.js:755: for (var key in global) {
protractor-elementor-2.0.0.tgz/lib/protractor.js:688: for (var key in global) {
protractor-redbox-2.5.1.tgz/lib/protractor.js:862: for (var key in global) {
pry-0.6.5.tgz/lib/pry/completion.js:61: for (key in global) {
ptimer-0.3.1.tgz/spec/browser/src/qunit.js:1284: for ( var key in global ) {
purecalendar.js-1.0.0.tgz/tests/qunit-1.23.1.js:1267: for ( var key in global ) {
qunitjs-2.0.1.tgz/qunit/qunit.js:1151: for ( var key in global ) {
react-dragula-1.1.17.tgz/example/example.js:915:for (eventname in global) {
remap-0.0.2.tgz/module.js:63: for (var k in global) {
remodal-1.1.0.tgz/libs/qunit/qunit/qunit.js:1168: for ( var key in global ) {
remodal-1.1.0.tgz/libs/qunit/src/test.js:467: for ( var key in global ) {
repl.js-2.3.6.tgz/repl.js:547: for (var i in global) context[i] = global[i];
replica-js-0.1.0.tgz/mock-repl.js:321: for (var i in global) context[i] = global[i];
replique-0.1.1.tgz/src/replique.js:47: for (e in global) context[e] = global[e];
requests-0.1.7.tgz/test/large.js:1137: for (var key in global) {
requests-0.1.7.tgz/test/large.js:5570: for (var key in global) {
requests-0.1.7.tgz/test/large.js:10003: for (var key in global) {
requests-0.1.7.tgz/test/large.js:14436: for (var key in global) {
requests-0.1.7.tgz/test/large.js:18869: for (var key in global) {
requests-0.1.7.tgz/test/large.js:23302: for (var key in global) {
requests-0.1.7.tgz/test/large.js:27735: for (var key in global) {
requests-0.1.7.tgz/test/large.js:32168: for (var key in global) {
requests-0.1.7.tgz/test/large.js:36601: for (var key in global) {
requests-0.1.7.tgz/test/large.js:41034: for (var key in global) {
requests-0.1.7.tgz/test/large.js:45467: for (var key in global) {
requests-0.1.7.tgz/test/large.js:49900: for (var key in global) {
requests-0.1.7.tgz/test/large.js:54333: for (var key in global) {
requests-0.1.7.tgz/test/large.js:58766: for (var key in global) {
requests-0.1.7.tgz/test/large.js:63199: for (var key in global) {
requests-0.1.7.tgz/test/large.js:67632: for (var key in global) {
requests-0.1.7.tgz/test/large.js:72065: for (var key in global) {
requests-0.1.7.tgz/test/large.js:76498: for (var key in global) {
require-args-1.0.0.tgz/index.js:48: for (var k in global) {
requireincontext-0.0.2.tgz/index.js:21: for (var k in global) {
rhm-http-proxy-0.10.4.tgz/test/core/common.js:133: for (var x in global) {
rtcninja-0.7.0.tgz/html-adapter/antiglobal.js:94: for (var key in global) {
sandboxed-module-2.0.3.tgz/lib/sandboxed_module.js:109: for (var globalKey in global) {
sandboxed-module-strict-mode-0.1.4.tgz/lib/sandboxed_module.js:90: for (var key in global) {
sandboxed-module-strict-mode-0.1.4.tgz/test/fixture/global.js:1:for (var key in global) {
sandboxed-module-strict-mode-0.1.4.tgz/test/integration/test-global.js:14: for (var key in global) {
scoff-0.0.1.tgz/index.js:98: for (var key in global) {
seafish-http-proxy-meteor-0.1.4.tgz/test/core/common.js:133: for (var x in global) {
simpli.js-1.2.4.tgz/unitTest/1.2.1/js/qunit-1.20.0.js:1284: for ( var key in global ) {
simpli.js-1.2.4.tgz/unitTest/1.2.3/js/qunit-1.20.0.js:1284: for ( var key in global ) {
simpli.js-1.2.4.tgz/unitTest/1.2.4/js/qunit-1.20.0.js:1284: for ( var key in global ) {
sock-plex-1.0.2.tgz/test/common.js:174: for (var val in global)
sole-0.2.10.tgz/examples/external/qunit-2.0.1.js:1151: for ( var key in global ) {
spider-script-0.1.5.tgz/cli.js:88: for (var key in global) {
springroll-0.4.25.tgz/components/qunit/qunit/qunit.js:1288: for ( var key in global ) {
stacker-sandboxed-0.2.0.tgz/lib/sandboxed_module.js:110: for (var globalKey in global) {
swank-js-0.0.5.tgz/swank-handler.js:291: for (var i in global) this.context[i] = global[i];
syncrepl-0.8.26.tgz/oldrepl.js:66: for (var i in global) context[i] = global[i];
syncrepl-0.8.26.tgz/syncrepl.js:354: for (var i in global) context[i] = global[i];
systemjs-istanbul-hook-0.1.1.tgz/index.js:34: for (var g in global) {
tangler-0.1.0.tgz/src/node-resolver.js:17: for (var key in global) {
tasty-sandbox-2.0.5.tgz/lib/sandboxed_module.js:110: for (var globalKey in global) {
tasty-treewalker-0.3.4.tgz/libs/qunitjs/qunit.js:1168: for ( var key in global ) {
tea-js-0.2.0.tgz/bin/tea.0.1.12.js:166: for (var name in global){
tea-js-0.2.0.tgz/bin/tea.0.1.13.js:184: for (var name in global){
tea-js-0.2.0.tgz/bin/tea.js:256: for (var name in global){
tea-js-0.2.0.tgz/lib/utils/index.js:22: for (var name in global){
tea-js-0.2.0.tgz/utils/index.js:22: for (var name in global){
tern-yui3-0.1.0.tgz/demos/ternjs/tern/lib/typescript.js:14:for (var prop in global) box[prop] = global[prop];
timbles-1.1.4.tgz/tests/qunit-1.20.0.js:1284: for ( var key in global ) {
traceurified-module-0.0.1.tgz/runtime/index.js:57: for (var k in global) {
traceurified-module-runtime-0.0.2.tgz/index.js:58: for (var k in global) {
trepanjs-0.2.6.tgz/lib/repl.js:364: for (var i in global) context[i] = global[i];
trepanjs-0.2.6.tgz/test/common.js:176:// for (var val in global)
trial-0.0.9.tgz/lib/trial/trial.js:98: for (var k in global) sandbox[k] = global[k];
tsi-0.3.0.tgz/bin/tsi.js:25: for (var g in global)
typescript-require-0.2.9-1.tgz/index.js:95: for (var k in global) {
typescript.api-0.7.7.tgz/index.js:2963: for (var n in global) {
unit-testling-0.0.1.tgz/bin/testling.js:35: for (k in global) {
venttiseiska-0.1.0.tgz/tests/qunit-1.2.0.js:1284: for ( var key in global ) {
verbal-expressions-0.2.1.tgz/test/lib/qunit.js:1284: for ( var key in global ) {
veritaseum-proof-of-concept-0.1.3.tgz/test/qunit-1.19.0.js:1168: for ( var key in global ) {
vexflow-1.2.83.tgz/tests/support/qunit.js:1168: for ( var key in global ) {
vide-0.5.0.tgz/libs/qunit/qunit/qunit.js:1168: for ( var key in global ) {
vide-0.5.0.tgz/libs/qunit/src/test.js:467: for ( var key in global ) {
vippy-0.0.11.tgz/vippyd.js:92: for (var k in global) sandbox[k] = global[k];
visionr-core-1.0.31.tgz/src/bin/misc/repl.js:521: for (var i in global) context[i] = global[i];
vm-shim-0.0.6.tgz/vm-shim.js:104: for (var k in global) {
vm-shim-0.0.6.tgz/vm-shim.js:110: for (var k in global) {
voltrazord-4.1.0.tgz/test/lib/qunit/qunit.js:1284: for ( var key in global ) {
wbc-1.1.3.tgz/lib/core/plugin_config.js:280: for (var k in global) {
weo-http-proxy-0.8.2.tgz/test/core/common.js:123: for (var x in global) {
wnserver-0.0.97.tgz/src/wnInit.js:47: for (g in global)
zpt-0.2.0.tgz/test/js/lib/qunit-1.19.0.js:1168: for ( var key in global ) {
Regex: Object\.(keys|values)\(global\)
.
Notice that at least two matches are inside comments, I have not excluded those.
bokehjs-0.12.3.tgz/test/index.coffee:27:blacklist = Object.keys(global)
arts-1.1.15.tgz/index.ts:70: Object.keys(global).forEach(k=>this.g[k] = global[k])
3vot-db-0.0.1.tgz/microspec/suite.js:17: Object.keys(global).forEach(function(p) {
acnsy-2.0.1.tgz/test/util/sandboxed-module-fix.js:7: Object.keys(global).forEach(function (name) {
ahr.utils-2.1.0.tgz/ahr.utils.js:26: Object.keys(global).forEach(function (key) {
ahr2-2.3.2.tgz/utils.js:26: Object.keys(global).forEach(function (key) {
babel-istanbul-harmony-0.3.14.tgz/test/cli/sample-project/test/global-leak.js:10: Object.keys(global).forEach(function (k) {
backendjs-0.25.1.tgz/lib/db_dynamodb.js:261: if (!Object.keys(global).length) return callback(null, []);
bluedraft-0.0.1-d.tgz/test/leak_test.js:1:var keys = Object.keys(global)
bluedraft-0.0.1-d.tgz/test/leak_test.js:3:var newKeys = Object.keys(global)
calor-0.0.1-f.tgz/test/leak_test.js:1:var keys = Object.keys(global)
calor-0.0.1-f.tgz/test/leak_test.js:3:var newKeys = Object.keys(global)
clarinet-0.11.0.tgz/test/lib/mocha.js:1942: this.globals(Object.keys(global).concat(['errno']));
clarinet-0.11.0.tgz/test/lib/mocha.js:1992: var leaks = Object.keys(global).filter(function(key){
clay-nock-0.52.0.tgz/tests/test_intercept.js:21: globalCount = Object.keys(global).length;
clay-nock-0.52.0.tgz/tests/test_intercept.js:3458: var leaks = Object.keys(global)
clay-nock-0.52.0.tgz/tests/test_recorder.js:15: globalCount = Object.keys(global).length;
clay-nock-0.52.0.tgz/tests/test_recorder.js:510: var leaks = Object.keys(global)
coffee-coverage-1.0.1.tgz/lib/instrumentors/Istanbul.js:77: coverageVars = Object.keys(global).filter(function(key) {
contextify-0.1.15.tgz/test/contextify.js:318: var globalProps = Object.keys(global);
contextify-0.1.15.tgz/test/contextify.js:335: test.equal(Object.keys(global).length, 5);
contextify-0.1.15.tgz/test/contextify.js:338: test.equal(Object.keys(global).length, 4);
contextify-0.1.15.tgz/test/contextify.js:341: test.equal(Object.keys(global).length, 3);
contextify-0.1.15.tgz/test/contextify.js:344: test.equal(Object.keys(global).length, 2);
contextify-0.1.15.tgz/test/contextify.js:347: test.equal(Object.keys(global).length, 1);
contextify-0.1.15.tgz/test/contextify.js:350: test.equal(Object.keys(global).length, 0);
contextify_win32-0.1.12.tgz/test/contextify.js:318: var globalProps = Object.keys(global);
contextify_win32-0.1.12.tgz/test/contextify.js:335: test.equal(Object.keys(global).length, 5);
contextify_win32-0.1.12.tgz/test/contextify.js:338: test.equal(Object.keys(global).length, 4);
contextify_win32-0.1.12.tgz/test/contextify.js:341: test.equal(Object.keys(global).length, 3);
contextify_win32-0.1.12.tgz/test/contextify.js:344: test.equal(Object.keys(global).length, 2);
contextify_win32-0.1.12.tgz/test/contextify.js:347: test.equal(Object.keys(global).length, 1);
contextify_win32-0.1.12.tgz/test/contextify.js:350: test.equal(Object.keys(global).length, 0);
couch-login-1.0.1.tgz/test/reset-then-signup.js:16:var okGlobal = Object.keys(global)
couch-login-1.0.1.tgz/test/reset-then-signup.js:28: t.deepEqual(Object.keys(global), okGlobal)
couch-login-1.0.1.tgz/test/reset-then-signup.js:40: t.deepEqual(Object.keys(global), okGlobal)
couch-login-1.0.1.tgz/test/reset-then-signup.js:53: t.deepEqual(Object.keys(global), okGlobal)
couch-login-1.0.1.tgz/test/reset-then-signup.js:65: t.deepEqual(Object.keys(global), okGlobal)
couch-login-1.0.1.tgz/test/reset-then-signup.js:90: t.deepEqual(Object.keys(global), okGlobal)
couch-login-1.0.1.tgz/test/reset-then-signup.js:103: t.deepEqual(Object.keys(global), okGlobal)
covers-1.9.1.tgz/index.js:4: return Object.keys(global).filter(function (k) {
covers-1.9.1.tgz/test/myTest.js:23: var cover = global[Object.keys(global).filter(function (k) {
eggnog-1.3.0.tgz/src/context.js:258: throw new Error(buildMissingDepMsg(msg, globalId, Object.keys(global)));
empath-0.0.1.tgz/lib/detect_globals.js:11: var globals = Object.keys(global)
empath-0.0.1.tgz/lib/detect_globals.js:13: var globals2 = Object.keys(global)
finboxio-nock-8.0.1-fork.tgz/tests/test_intercept.js:24:globalCount = Object.keys(global).length;
finboxio-nock-8.0.1-fork.tgz/tests/test_intercept.js:4853: var leaks = Object.keys(global)
finboxio-nock-8.0.1-fork.tgz/tests/test_recorder.js:16: globalCount = Object.keys(global).length;
finboxio-nock-8.0.1-fork.tgz/tests/test_recorder.js:893: var leaks = Object.keys(global)
glad-0.7.3.tgz/globalReport.js:1:var nativeGlobals = Object.keys(global);
glad-0.7.3.tgz/globalReport.js:6: Object.keys(global).forEach(function (key) {
gleak-0.5.0.tgz/index.js:170: Object.keys(global).forEach(function (key) {
grunt-closure-coffee-stack-0.0.6.tgz/tasks/unittests.js:47: var globalKeys = Object.keys(global);
grunt-closure-coffee-stack-0.0.6.tgz/tasks/unittests.js:82: previousGlobalKeys = Object.keys(global).filter(function(key) {
grunt-este-2.5.0.tgz/tasks/unittests.js:47: var globalKeys = Object.keys(global);
grunt-este-2.5.0.tgz/tasks/unittests.js:87: previousGlobalKeys = Object.keys(global).filter(function(key) {
gulp-este-1.2.8.tgz/tasks/unittest.js:9:globals = Object.keys(global);
gulp-este-1.2.8.tgz/tasks/unittest.js:40: Object.keys(global).forEach((function(_this) {
iced-coffee-coverage-1.0.3.tgz/lib/instrumentors/Istanbul.js:78: coverageVars = Object.keys(global).filter(function(key) {
injectables-0.1.2.tgz/lib/injectables.js:187: Object.keys(global).forEach(function(k){
ish-0.3.0.tgz/test/test.js:7:var originalGlobals = Object.keys(global).reduce(function (dict, key) {
ish-0.3.0.tgz/test/test.js:16: Object.keys(global).forEach(function (key) {
istanbul-systemjs-0.1.2.tgz/src/main.js:18: var coverageVar = Object.keys(global)
jsh-0.1.42.tgz/lib/vm.js:46: Object.keys(global).forEach(function (v) {
json-validate-0.0.1.tgz/test/mocha.js:1635: this.globals = Object.keys(global).concat(['errno']);
json-validate-0.0.1.tgz/test/mocha.js:1669: var leaks = Object.keys(global).filter(function(key){
jstestr-0.4.2.tgz/istanbul/test/cli/sample-project/test/global-leak.js:10: Object.keys(global).forEach(function (k) {
jstophp-0.2.7.tgz/test/core.js:83: var b = Object.keys(global);
jsx-test-2.0.1.tgz/lib/helper.js:159: var coverageVariable = Object.keys(global).filter(function (key) {
leaky-1.0.0.tgz/leaky.js:56: var globals = Object.keys(global).concat(['errno', 'exports', 'module']);
less-2.7.1.tgz/test/less-test.js:12: var globals = Object.keys(global);
less-2.7.1.tgz/test/less-test.js:144: return Object.keys(global).filter(function(v) {
less-aristos-3.6.2.tgz/test/less-test.js:12: var globals = Object.keys(global);
less-aristos-3.6.2.tgz/test/less-test.js:144: return Object.keys(global).filter(function(v) {
less-edp-0.3.0.tgz/test/less-test.js:11: var globals = Object.keys(global);
less-edp-0.3.0.tgz/test/less-test.js:84: return Object.keys(global).filter(function(v) {
less-papandreou-1.5.0-patch1.tgz/test/less-test.js:9:var globals = Object.keys(global);
less-papandreou-1.5.0-patch1.tgz/test/less-test.js:113: return Object.keys(global).filter(function(v) {
less-templated-0.0.2.tgz/test/less-test.js:11: var globals = Object.keys(global);
less-templated-0.0.2.tgz/test/less-test.js:84: return Object.keys(global).filter(function(v) {
less-test-0.1.1.tgz/test/less-test.js:11: var globals = Object.keys(global);
less-test-0.1.1.tgz/test/less-test.js:84: return Object.keys(global).filter(function(v) {
less-vars-2.5.1.tgz/test/less-test.js:12: var globals = Object.keys(global);
less-vars-2.5.1.tgz/test/less-test.js:144: return Object.keys(global).filter(function(v) {
lisplate-0.6.0.tgz/spec/umd.spec.js:21:var covKey = Object.keys(global).find(function(k) {
load-1.0.2.tgz/index.js:91:var missing = Object.keys(global).filter(function filter(prop) {
mailman-client-0.0.2.tgz/test/transformer/index.js:8: Object.keys(global).forEach(function(name) {
marky-markdown-8.1.0.tgz/test/marky.js:2:var oldkeys = Object.keys(global)
marky-markdown-8.1.0.tgz/test/marky.js:87: assert.deepStrictEqual(Object.keys(global), oldkeys)
marky-markdown-8.1.0.tgz/test/marky.js:91: var currentkeys = Object.keys(global).sort()
minimatch-mocha-1.0.1.tgz/test/basic.js:7: , globalBefore = Object.keys(global)
minimatch-mocha-1.0.1.tgz/test/basic.js:392: var globalAfter = Object.keys(global)
minimatch-mocha-1.0.1.tgz/test/defaults.js:7: , globalBefore = Object.keys(global)
minimatch-mocha-1.0.1.tgz/test/defaults.js:267: var globalAfter = Object.keys(global)
minimatchify-0.2.15.tgz/test/basic.js:7: , globalBefore = Object.keys(global)
minimatchify-0.2.15.tgz/test/basic.js:392: var globalAfter = Object.keys(global)
minimatchify-0.2.15.tgz/test/defaults.js:7: , globalBefore = Object.keys(global)
minimatchify-0.2.15.tgz/test/defaults.js:267: var globalAfter = Object.keys(global)
mmjd-gulp-este-1.0.2.tgz/tasks/unittest.js:11: globals = Object.keys(global);
mmjd-gulp-este-1.0.2.tgz/tasks/unittest.js:42: Object.keys(global).forEach((function(_this) {
mocha-jsdom-1.1.0.tgz/index.js:8:var blacklist = Object.keys(global)
mockuire-0.1.0.tgz/lib/index.js:60: Object.keys(global)
modulify-0.1.0-1.tgz/src/modulify.js:93: var original = Object.keys(global);
modulify-0.1.0-1.tgz/src/modulify.js:95: var fin = Object.keys(global);
moduloteste-1.0.0.tgz/normalize-package-data/test/normalize.js:5:var globals = Object.keys(global)
moduloteste-1.0.0.tgz/normalize-package-data/test/normalize.js:251: t.same(Object.keys(global), globals)
nimbleservice-0.3.4.tgz/globalReport.js:1:var nativeGlobals = Object.keys(global);
nimbleservice-0.3.4.tgz/globalReport.js:6: Object.keys(global).forEach(function (key) {
nmock-0.10.1.tgz/tests/test_intercept.js:24:globalCount = Object.keys(global).length;
nmock-0.10.1.tgz/tests/test_intercept.js:4853: var leaks = Object.keys(global)
nmock-0.10.1.tgz/tests/test_recorder.js:16: globalCount = Object.keys(global).length;
nmock-0.10.1.tgz/tests/test_recorder.js:891: var leaks = Object.keys(global)
nock-8.1.0.tgz/tests/test_intercept.js:24:globalCount = Object.keys(global).length;
nock-8.1.0.tgz/tests/test_intercept.js:4853: var leaks = Object.keys(global)
nock-8.1.0.tgz/tests/test_recorder.js:16: globalCount = Object.keys(global).length;
nock-8.1.0.tgz/tests/test_recorder.js:891: var leaks = Object.keys(global)
nock-hotfixed-8.1.0.tgz/tests/test_intercept.js:24:globalCount = Object.keys(global).length;
nock-hotfixed-8.1.0.tgz/tests/test_intercept.js:4871: var leaks = Object.keys(global)
nock-hotfixed-8.1.0.tgz/tests/test_recorder.js:16: globalCount = Object.keys(global).length;
nock-hotfixed-8.1.0.tgz/tests/test_recorder.js:891: var leaks = Object.keys(global)
node-leaky-recursive-0.1.3.tgz/leaky.js:56: var globals = Object.keys(global).concat(['errno', 'exports', 'module']);
node2bat-0.0.4-rc2.tgz/test/test.js:21: console.log(' ' + Object.keys(global).join(', '));
nodebot-0.1.71.tgz/sax-js/test/index.js:1:var globalsBefore = JSON.stringify(Object.keys(global))
nodebot-0.1.71.tgz/sax-js/test/index.js:69: var globalsAfter = JSON.stringify(Object.keys(global))
npp-0.0.3.tgz/lib/npp.js:69: Object.keys(global).forEach(function(item){
paraffin-0.9.2.tgz/src/mocha/globalLeaks.js:56: var props = Object.keys(global);
plv8-mantle-0.0.1.tgz/microspec/index.js:27: Object.keys(global).forEach(function(p) {
prever-0.4.5.tgz/browser_runner/runner.js:5321: var keys = Object.keys(global).reduce(function (p, k) {
prever-0.4.5.tgz/browser_runner/runner.js:5354: Object.keys(global).filter(function (k) {
prever-0.4.5.tgz/lib/interfaces/bdd.js:18: var keys = Object.keys(global).reduce(function (p, k) {
prever-0.4.5.tgz/lib/interfaces/bdd.js:51: Object.keys(global).filter(function (k) {
primus-6.0.3.tgz/index.js:177: const sandbox = Object.keys(global).reduce((acc, key) => {
proof-1.2.0.tgz/index.js:1:var globals = Object.keys(global).concat([ 'errno' ])
proof-1.2.0.tgz/redux/index.js:2:var globals = Object.keys(global).concat([ 'errno' ])
proof-1.2.0.tgz/redux/scaffold.js:85: var leaked = Object.keys(global).filter(function (global) {
proof-1.2.0.tgz/scaffold.js:103: var leaked = Object.keys(global).filter(function (global) {
proof-1.2.0.tgz/t/proof/scaffold.t.js:1:var globals = Object.keys(global).concat([ 'errno' ])
proof-1.2.0.tgz/t/scaffold/assert.t.js:1:var globals = Object.keys(global).concat([ 'errno' ])
proof-1.2.0.tgz/t/scaffold/export.t.js:1:var globals = Object.keys(global).concat([ 'errno' ])
proof-1.2.0.tgz/t/scaffold/leaked.t.js:1:var globals = Object.keys(global).concat([ 'errno' ])
proof-1.2.0.tgz/t/scaffold/say.t.js:1:var globals = Object.keys(global).concat([ 'errno' ])
proxy-lite-2014.8.27-10.tgz/utility2.js:1548: Object.keys(global).forEach(function (key) {
qcnode-1.5.1.tgz/tests/testers/leakTests.js:13: keys = Object.keys(global),
qcnode-1.5.1.tgz/tests/testers/leakTests.js:16: child.exec("node -e 'console.log(JSON.stringify(Object.keys(global)))'",
qless-1.5.5.tgz/test/less-test.js:11: var globals = Object.keys(global);
qless-1.5.5.tgz/test/less-test.js:83: return Object.keys(global).filter(function(v) {
react-keys-2.0.0-alpha10.tgz/test/dom-config.js:7:const blacklist = Object.keys(global);
react-tvml-1.0.4.tgz/src/globals.js:2: global.window = Object.keys(global).map(function(name) {
redux-action-router-0.2.0.tgz/test/testSetup.js:4:const globalKeys = Object.keys(global);
requirejs-react-jsx-1.0.2.tgz/jsx.js:35: var coverageVariable = Object.keys(global).filter(function (key) { return key.indexOf('$$cov_') === 0 })[0];
righto-2.1.1.tgz/test/index.js:21:var globalkeys = Object.keys(global);
sails-hook-lint-1.1.1.tgz/index.js:165: let globals = _.concat(Object.keys(global), getGlobalsOfSails(sails));
sandboxed-module-2.0.3.tgz/lib/sandboxed_module.js:318: Object.keys(global).forEach(function(name) {
sax-pausable-0.1.0.tgz/test/index.js:1:var globalsBefore = JSON.stringify(Object.keys(global))
sax-pausable-0.1.0.tgz/test/index.js:69: var globalsAfter = JSON.stringify(Object.keys(global))
sibilant-0.5.5.tgz/lib/repl.js:21: Object.keys(global).forEach((function(key) {
siteboot-0.5.0.tgz/src/siteboot.js:922: Object.keys(global).map(function(key){context[key] = global[key];});
sourcejs-react-styleguidist-0.5.0.tgz/test/utils.utils.spec.js:25: sourceGlobalLength = Object.keys(global).length;
sourcejs-react-styleguidist-0.5.0.tgz/test/utils.utils.spec.js:42: expect(Object.keys(global).length).to.eql(sourceGlobalLength + 2);
specify-1.3.0.tgz/specify.js:12: , GLOBALS = Object.keys(global)
specify-1.3.0.tgz/specify.js:73: var end_globals = Object.keys(global)
spell-1.0.0.tgz/test/lib/mocha-0.3.6.js:1942: this.globals(Object.keys(global).concat(['errno']));
spell-1.0.0.tgz/test/lib/mocha-0.3.6.js:1992: var leaks = Object.keys(global).filter(function(key){
stacker-sandboxed-0.2.0.tgz/lib/sandboxed_module.js:319: Object.keys(global).forEach(function(name) {
strict-eval-1.0.1.tgz/lib/strict-eval.js:6: var keys = Object.keys(global);
tape-it-0.3.1.tgz/index.js:20: harness.globalCount = Object.keys(global).length;
tape-it-0.3.1.tgz/index.js:61: assert.deepEqual(Object.keys(global)
tasty-sandbox-2.0.5.tgz/lib/sandboxed_module.js:321: Object.keys(global).forEach(function(name) {
teamnora.nake-0.0.2.tgz/lib/nake.js:187: Object.keys(global).forEach(function(key){
testfirst-1.0.0.tgz/normalize-package-data/test/normalize.js:5:var globals = Object.keys(global)
testfirst-1.0.0.tgz/normalize-package-data/test/normalize.js:224: t.same(Object.keys(global), globals)
testke-1.0.0.tgz/normalize-package-data/test/normalize.js:5:var globals = Object.keys(global)
testke-1.0.0.tgz/normalize-package-data/test/normalize.js:224: t.same(Object.keys(global), globals)
tome-editor-0.0.2.tgz/wocha.js:122: var blacklist = Object.keys(global);
tpstylesheet-0.0.6.tgz/test/browser.js:29:const blacklist = Object.keys(global);
transactional-1.0.0-0.tgz/tests/tests.js:14789: , globalBefore = Object.keys(global)
transactional-1.0.0-0.tgz/tests/tests.js:15174: var globalAfter = Object.keys(global)
transactional-1.0.0-0.tgz/tests/tests.js:15254: , globalBefore = Object.keys(global)
transactional-1.0.0-0.tgz/tests/tests.js:15514: var globalAfter = Object.keys(global)
typhonjs-istanbul-instrument-jspm-0.1.0.tgz/src/instrumentIstanbulSystem.js:34: const coverageVariable = Object.keys(global).filter((key) => { return key.startsWith('$$cov_'); })[0];
uless-1.0.11.tgz/test/less-test.js:10: var globals = Object.keys(global);
uless-1.0.11.tgz/test/less-test.js:83: return Object.keys(global).filter(function(v) {
unexpected-markdown-1.7.1.tgz/lib/evaluateSnippets.js:119: Object.keys(global).forEach(function (key) {
weex-lint-0.1.10.tgz/lib/framework/lifecircle.js:17: // const originalGlobalKeys = Object.keys(global)
weex-lint-0.1.10.tgz/lib/framework/lifecircle.js:27: // const remainedGlobalKeys = Object.keys(global)
whatmd-0.0.3.tgz/src/whatmd.js:30: globalPropsBefore = Object.keys(global),
whatmd-0.0.3.tgz/src/whatmd.js:32: globalPropsAfter = Object.keys(global);
whatmd-0.0.3.tgz/src/whatmd.js:80: globalPropsBefore = Object.keys(global),
whatmd-0.0.3.tgz/src/whatmd.js:82: globalPropsAfter = Object.keys(global);
whatmd-0.0.3.tgz/src/whatmd.js:164: globalPropsBefore = Object.keys(global),
whatmd-0.0.3.tgz/src/whatmd.js:166: globalPropsAfter = Object.keys(global);
yacoot-0.12.5.tgz/libs/yacoot.js:33: Object.keys(global).forEach(function(key) {
Regex: Object\.assign.*,\s*global[^[_a-zA-Z.]
+ manual filtering to exclude one false positive.
angular-cli-with-use-yarn-1.0.0-beta.17.2.tgz/packages/webpack/src/resource_loader.ts:93: const vmContext = vm.createContext(Object.assign({require: require}, global));
ng-cli-2-0.0.11.tgz/packages/webpack/src/resource_loader.ts:93: const vmContext = vm.createContext(Object.assign({require: require}, global));
quang-cli-1.0.12.tgz/packages/webpack/src/resource_loader.ts:93: const vmContext = vm.createContext(Object.assign({require: require}, global));
sample-cli-cli-1.0.10.tgz/packages/webpack/src/resource_loader.ts:93: const vmContext = vm.createContext(Object.assign({require: require}, global));
patternplate-transform-react-1.1.2.tgz/distribution/injection-template.js:15: var global = Object.assign({}, global, IDENTIFIER);
wae-cli-0.6.0.tgz/lib/runner/runInRenderingAudioContext.js:22: sandbox.global = Object.assign({}, global);
wae-cli-0.6.0.tgz/lib/runner/runInStreamAudioContext.js:28: sandbox.global = Object.assign({}, global);
Regex: (_|lodash|object)\.assign.*,\s*global[^[_a-zA-Z.]
.
parse-cloudcode-runner-0.0.5.tgz/index.js:66: functionBody.apply(_.assign({Parse: Parse}, global), functionArguments);
Thanks! The assign
uses should be evangelized regardless to use Object.defineProperties({}, Object.getOwnPropertyDescriptors(global))
, for example, but that doesn't really impact anything.
Note: this includes Object.assign
and _.assign
that were already listed above.
Regex: (assign|extend).*,\s*global[^[_a-zA-Z.]
plus manual filtering.
cts-0.5.0.tgz/src-old/CTS/Rules.coffee:94: $.extend(rules, global)
fekit-0.2.148.tgz/src/util.coffee:533: context = _.extend( {} , global , ctx )
fekit-0.2.148.tgz/src/util.coffee:678: context = _.extend( {} , global , ctx )
ft-1.0.44.tgz/src/util.coffee:526: context = _.extend( {} , global , ctx )
ft-1.0.44.tgz/src/util.coffee:671: context = _.extend( {} , global , ctx )
hkit-1.0.1.tgz/src/util.coffee:533: context = _.extend( {} , global , ctx )
hkit-1.0.1.tgz/src/util.coffee:678: context = _.extend( {} , global , ctx )
angular-cli-with-use-yarn-1.0.0-beta.17.2.tgz/packages/webpack/src/resource_loader.ts:93: const vmContext = vm.createContext(Object.assign({require: require}, global));
micro-build-1.2.7.tgz/src/library/shim-require-file.ts:16: const newContenxt = extend({iswrapped: true}, global);
ng-cli-2-0.0.11.tgz/packages/webpack/src/resource_loader.ts:93: const vmContext = vm.createContext(Object.assign({require: require}, global));
quang-cli-1.0.12.tgz/packages/webpack/src/resource_loader.ts:93: const vmContext = vm.createContext(Object.assign({require: require}, global));
sample-cli-cli-1.0.10.tgz/packages/webpack/src/resource_loader.ts:93: const vmContext = vm.createContext(Object.assign({require: require}, global));
angular2-logger-0.5.0.tgz/app/core/logger.js:41: var _a = Object.assign({}, DEFAULT_OPTIONS, options), level = _a.level, global = _a.global, globalAs = _a.globalAs, store = _a.store, storeAs = _a.storeAs;
async-require-1.2.2.tgz/index.js:50: vm.runInNewContext(script, extend({require:require}, global, sandbox));
destoroyah-0.2.7.tgz/lib/runner/default.js:22: setup.extend('rampage', global);
destoroyah-0.2.7.tgz/lib/runner/default.js:23: setup.extend('monster', global);
destoroyah-0.2.7.tgz/lib/runner/default.js:24: setup.extend('struggle', global);
fekit-0.2.148.tgz/lib/util.js:727: context = _.extend({}, global, ctx);
fekit-0.2.148.tgz/lib/util.js:904: context = _.extend({}, global, ctx);
ft-1.0.44.tgz/lib/util.js:718: context = _.extend({}, global, ctx);
ft-1.0.44.tgz/lib/util.js:895: context = _.extend({}, global, ctx);
gextend-0.3.0.tgz/test/helpers/sinon.js:3920:(function (sinon, global) {
glagol-2.0.0-rc9.tgz/formats/javascript.js:38: var context = process.browser ? {} : extend({}, global);
hkit-1.0.1.tgz/lib/util.js:734: context = _.extend({}, global, ctx);
hkit-1.0.1.tgz/lib/util.js:914: context = _.extend({}, global, ctx);
html-webpack-plugin-2.24.0.tgz/index.js:225: var vmContext = vm.createContext(_.extend({HTML_WEBPACK_PLUGIN: true, require: require}, global));
html-webpack-plugin-hokkoo-2.25.2.tgz/index.js:220: var vmContext = vm.createContext(_.extend({HTML_WEBPACK_PLUGIN: true, require: require}, global));
html-webpack-plugin-smadey-2.23.1.tgz/index.js:221: var vmContext = vm.createContext(_.extend({HTML_WEBPACK_PLUGIN: true, require: require}, global));
mockrequire-0.0.5.tgz/index.js:65: extend(sandbox, global);
monoclass-0.3.1.tgz/lib/monoclass.js:943: context = _.extend({}, global, defaultEnv.ctx, {
muti-html-webpack-plugin-1.0.5.tgz/index.js:261: var vmContext = vm.createContext(_.extend({ HTML_WEBPACK_PLUGIN: true, require: require }, global));
node-go-require-1.0.11.tgz/lib/go-loader.js:105: var context = extend({}, global, {
node-spider-script-1.0.9.tgz/lib/spider-loader.js:87: var context = extend({}, global, {
node-tsc-0.0.14.tgz/loadtsc.js:70: var sandbox = _.extend({}, global);
nodei-0.2.4.tgz/index.js:40: var sandbox = assign({}, global, {
packing-html-webpack-plugin-1.0.0.tgz/index.js:221: var vmContext = vm.createContext(_.extend({HTML_WEBPACK_PLUGIN: true, require: require}, global));
parse-cloudcode-runner-0.0.5.tgz/index.js:66: functionBody.apply(_.assign({Parse: Parse}, global), functionArguments);
patternplate-transform-react-1.1.2.tgz/distribution/injection-template.js:15: var global = Object.assign({}, global, IDENTIFIER);
qmb-0.3.7.tgz/src/module/fekit/fekit/util.js:714: context = _.extend({}, global, ctx);
qmb-0.3.7.tgz/src/module/fekit/fekit/util.js:891: context = _.extend({}, global, ctx);
tsun-0.3.1.tgz/bin/src/repl.js:82: util_1.assign(context, global);
unexpected-markdown-1.7.1.tgz/lib/evaluateSnippets.js:53: var oldGlobal = extend({}, global);
wae-cli-0.6.0.tgz/lib/runner/runInRenderingAudioContext.js:22: sandbox.global = Object.assign({}, global);
wae-cli-0.6.0.tgz/lib/runner/runInStreamAudioContext.js:28: sandbox.global = Object.assign({}, global);
wbg-html-webpack-plugin-1.0.1.tgz/index.js:220: var vmContext = vm.createContext(_.extend({HTML_WEBPACK_PLUGIN: true, require: require}, global));
webpack-docs-plugin-1.0.12-alpha.tgz/lib/modules/TemplateCompiler/index.js:154: var vmContext = vm.createContext(extend(true, {WEBPACK_DOCS_PLUGIN: true, require: require}, global));
Naturally the hard part is that while it's clear that making global
non-enumerable will alter these code paths, it's not clear that it will actually break any of them - ie, it won't break a path unless it relies on "global" being present in the list.
Object.defineProperty(global, 'global', { enumerable: false })
should be sufficient in citgm to do a quick check?
New citgm, rebased on 6.x to avoid Buffer without new
warnings breaking tests: https://ci.nodejs.org/view/Node.js-citgm/job/citgm-smoker/430/.
@jasnell @ChALkeR @ljharb Should this remain open? If so, is there anyone we should be pinging? Any labels we might add to help the right people find it?
Yes, it should remain open.
The current blocker is finding a global name that's acceptable. Once browsers agree on that, the proposal will be updated, and I'll update my PR to node to add it.
I'll add the blocked
label here in the meantime (even though this is a discuss
issue, I think it still makes sense if conversation is unlikely to meaningfully happen until the name is resolved).
@ljharb Based on https://github.com/tc39/proposal-global/issues/20, does it seem very likely that the global object will not be named global
, thus reducing compatibility concerns for Node.js around enumerability of global
?
It's an absolute certainty that it will not be named global
at this point, unfortunately.
(If node wants to leave global
enumerable, they're thus welcome to do so, but either way I think non-enumerable is a far better choice)
It's an absolute certainty that it will not be named
global
at this point, unfortunately.
OK, in that case, I'll remove the blocked
label.
(If node wants to leave
global
enumerable, they're thus welcome to do so, but either way I think non-enumerable is a far better choice)
We should probably change the title of this issue to reflect the above concern rather than the TC-39 standard thing since non-enumerability of a new thing would be a non-issue.
@jasnell Any objection to changing the title of this issue to something like "make global.global
non-enumerable?"
@ljharb ... any progress on the tc39 discussion?
Once it ships in a browser and is proven to be web compatible, I’ll update my PR to core (altho v8 may provide it anyways). Until then, it’s best if node does nothing (due to the risk of more web incompatibility)
Nothing further to do here for now
@nodejs/ctc ... there is a proposal on the table in TC-39 to add more standardization around
global
. See https://github.com/tc39/proposal-global/blob/master/spec.md for details.currently, the spec defines the data property as configurable but non-enumerable/non-writable. The committee is considering going ahead and making it writable. The key question for us is whether the
global
data property has to enumerable. It's extremely unlikely that it would be an issue but just to make sure.@ChALkeR ... would you be able to run some analysis about how existing modules are interacting with
global
?/cc @ljharb