arnaucube
arnaucube/raspberryGPIOhtmlserverPublic Self-hosted repository
raspberryGPIOhtmlserver/node_modules/object-keys/index.js
node_modules/object-keys/index.jsRaw
 1"use strict";
 2
 3// modified from https://github.com/es-shims/es5-shim
 4var has = Object.prototype.hasOwnProperty;
 5var toString = Object.prototype.toString;
 6var isArgs = require('./isArguments');
 7var hasDontEnumBug = !({'toString': null}).propertyIsEnumerable('toString');
 8var hasProtoEnumBug = (function () {}).propertyIsEnumerable('prototype');
 9var dontEnums = [
10	"toString",
11	"toLocaleString",
12	"valueOf",
13	"hasOwnProperty",
14	"isPrototypeOf",
15	"propertyIsEnumerable",
16	"constructor"
17];
18
19var keysShim = function keys(object) {
20	var isObject = object !== null && typeof object === 'object';
21	var isFunction = toString.call(object) === '[object Function]';
22	var isArguments = isArgs(object);
23	var isString = isObject && toString.call(object) === '[object String]';
24	var theKeys = [];
25
26	if (!isObject && !isFunction && !isArguments) {
27		throw new TypeError("Object.keys called on a non-object");
28	}
29
30	var skipProto = hasProtoEnumBug && isFunction;
31	if (isString && object.length > 0 && !has.call(object, 0)) {
32		for (var i = 0; i < object.length; ++i) {
33			theKeys.push(String(i));
34		}
35	}
36
37	if (isArguments && object.length > 0) {
38		for (var j = 0; j < object.length; ++j) {
39			theKeys.push(String(j));
40		}
41	} else {
42		for (var name in object) {
43			if (!(skipProto && name === 'prototype') && has.call(object, name)) {
44				theKeys.push(String(name));
45			}
46		}
47	}
48
49	if (hasDontEnumBug) {
50		var ctor = object.constructor;
51		var skipConstructor = ctor && ctor.prototype === object;
52
53		for (var j = 0; j < dontEnums.length; ++j) {
54			if (!(skipConstructor && dontEnums[j] === 'constructor') && has.call(object, dontEnums[j])) {
55				theKeys.push(dontEnums[j]);
56			}
57		}
58	}
59	return theKeys;
60};
61
62keysShim.shim = function shimObjectKeys() {
63	if (!Object.keys) {
64		Object.keys = keysShim;
65	}
66	return Object.keys || keysShim;
67};
68
69module.exports = keysShim;
70