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