docs: function globals() {
  		extend(window, {
  			console: {
  				log: function() {},
  				debug: function() {},
  				warn: function() {},
  				error: function() {}
  			},
  			Map: (function() {
  				function Map() {
  					this._map = Object.create(null);
  				}
  				Map.prototype = {
  					isNative: false,
  					get: function get(key) {
  						return this._map[key];
  					},
  					set: function set(key, val) {
  						this._map[key] = val;
  					},
  					has: function has(key) {
  						return this._map[key] !== undefined;
  					},
  					"delete": function get(key) {
  						delete this._map[key];
  					},
  					size: function() {
  						return Object.keys(this._map).length;
  					}
  				};
  				return Map;
  			})(),
  			Set: (function() {
  				function Set() {
  					this._map = Object.create(null);
  				}
  				Set.prototype = {
  					isNative: false,
  					add: function set(key) {
  						this._map[key] = true;
  					},
  					has: function has(key) {
  						return this._map[key] === true;
  					},
  					"delete": function get(key) {
  						delete this._map[key];
  					},
  					size: function() {
  						return Object.keys(this._map).length;
  					}
  				};
  				return Set;
  			})(),
  			WeakMap: (function() { // TODO: clean this up
  				function WeakMap() {
  					var keys = [],
  						values = [];
  
  					function del(key) {
  						if (has(key)) {
  							keys.splice(i, 1);
  							values.splice(i, 1);
  						}
  						return -1 < i;
  					}
  
  					function get(key, d3fault) {
  						return has(key) ? values[i] : d3fault;
  					}
  
  					function has(key) {
  						i = indexOf.call(keys, key);
  						return -1 < i;
  					}
  
  					function set(key, value) {
  						if (has(key)) {
  							values[i] = value;
  						} else {
  							values[keys.push(key) - 1] = value;
  						}
  					}
  					return create(WeakMapPrototype, {
  						isNative: {
  							value: false
  						},
  						"delete": {
  							value: del
  						},
  						del: {
  							value: del
  						},
  						get: {
  							value: get
  						},
  						has: {
  							value: has
  						},
  						set: {
  							value: set
  						}
  					});
  				}
  
  				function WeakMapInstance() {}
  				var WeakMapPrototype = WeakMap.prototype,
  					create = Object.create,
  					indexOf = [].indexOf,
  					i;
  				// used to follow FF behavior where WeakMap.prototype is WeakMap itself
  				WeakMap.prototype = 
  					WeakMapInstance.prototype = 
  					WeakMapPrototype = 
  					new WeakMap();
  				return WeakMap;
  			})()
  		});
  	}