Skip to content

Instantly share code, notes, and snippets.

@525c1e21-bd67-4735-ac99-b4b0e5262290
Forked from creationix/inspect.js
Created December 23, 2010 06:58
Show Gist options
  • Save 525c1e21-bd67-4735-ac99-b4b0e5262290/752674 to your computer and use it in GitHub Desktop.
Save 525c1e21-bd67-4735-ac99-b4b0e5262290/752674 to your computer and use it in GitHub Desktop.
function escapeString(string) {
string = string.replace(/\\/g, "\\\\").
replace(/\n/g, "\\n").
replace(/\r/g, "\\r").
replace(/\t/g, "\\t");
if (string.indexOf("'") < 0) {
return "'" + string + "'";
}
string = string.replace(/"/g, "\\\"");
return '"' + string + '"';
}
function escapeKey(string) {
if ((/[a-z_$][a-z0-9_$]*/i).test(string)) {
return string;
}
return escapeString(string);
}
function getType(object) {
var proto = object.__proto__;
if (!(proto && proto.constructor)) { return ""; }
return proto.constructor.name;
}
function inspect(value, keyer, short) {
if (value === undefined) { return "undefined"; }
if (value === null) { return "null"; }
if (value === true) { return "true"; }
if (value === false) { return "false"; }
switch (typeof value) {
case 'object':
case 'function':
if (short) {
return "(" + getType(value) + (Object.keys(value).length ? "..." : "") + ")";
}
var type = getType(value);
var parts = keyer(value).map(function (key, i) {
var prop = Object.getOwnPropertyDescriptor(value, key);
if (prop.hasOwnProperty("value")) {
return (i.toString() !== key ? escapeKey(key) + ": " : "") +
inspect(prop.value, keyer, true);
}
if (prop.get) {
if (prop.set) {
return escapeKey(key) + ": [Getter/Setter]";
}
return escapeKey(key) + ": [Getter]";
} else if (prop.set) {
return escapeKey(key) + ": [Setter]";
}
});
var body;
if (parts.length) {
body = " " + parts.join(", ") + " ";
if (body.length > 77 - type.length) {
body = "\n " + parts.join(",\n ") + "\n";
}
} else {
body = "";
}
return "(" + type + body + ")";
case 'number': return value.toString();
case 'string': return escapeString(value);
}
throw new Error("Not Implemented");
}
var types = {
Number: [Number, 42],
String: [String, "Hello"],
Date: [Date, new Date(Date.now())],
RegExp: [RegExp, new RegExp("Find Me", "gi")],
Object: [Object, {name: "Tim", age: 28}],
Array: [Array, [1,2,3,4]],
Buffer: [Buffer, new Buffer(4)],
EventEmitter: [process.EventEmitter, process]
}
Object.keys(types).map(function (name) {
var type = types[name][0],
prototype = type.prototype,
example = types[name][1];
console.log("%s -> %s", name, inspect(type, Object.getOwnPropertyNames));
console.log("%s.prototype -> %s", name, inspect(prototype, Object.getOwnPropertyNames));
console.log("example %s -> %s\n", name, inspect(example, Object.getOwnPropertyNames));
});
var modules = ["http", "net", "url", "path", "querystring", "child_process", "step", "connect", "haml", "nstore"];
modules.map(function (name) {
console.log("%s -> %s", name, inspect(require(name), Object.getOwnPropertyNames));
});
Number -> (Function
NaN: NaN,
arguments: null,
NEGATIVE_INFINITY: -Infinity,
POSITIVE_INFINITY: Infinity,
length: 1,
name: 'Number',
MAX_VALUE: 1.7976931348623157e+308,
prototype: (Object),
caller: null,
MIN_VALUE: 5e-324
)
Number.prototype -> (Object
toExponential: (Function),
toString: (Function),
toLocaleString: (Function),
toPrecision: (Function),
valueOf: (Function),
constructor: (Function),
toFixed: (Function)
)
example Number -> 42
String -> (Function
arguments: null,
length: 1,
name: 'String',
prototype: (Object),
fromCharCode: (Function),
caller: null
)
String.prototype -> (Object
length: 0,
constructor: (Function),
concat: (Function),
localeCompare: (Function),
substring: (Function),
italics: (Function),
charCodeAt: (Function),
strike: (Function),
indexOf: (Function),
toLowerCase: (Function),
trimRight: (Function),
toString: (Function),
toLocaleLowerCase: (Function),
replace: (Function),
toUpperCase: (Function),
fontsize: (Function),
trim: (Function),
split: (Function),
substr: (Function),
sub: (Function),
charAt: (Function),
blink: (Function),
lastIndexOf: (Function),
sup: (Function),
fontcolor: (Function),
valueOf: (Function),
link: (Function),
bold: (Function),
anchor: (Function),
trimLeft: (Function),
small: (Function),
search: (Function),
fixed: (Function),
big: (Function),
match: (Function),
toLocaleUpperCase: (Function),
slice: (Function)
)
example String -> 'Hello'
Date -> (Function
now: (Function),
arguments: null,
UTC: (Function),
length: 7,
name: 'Date',
prototype: (Object),
caller: null,
parse: (Function)
)
Date.prototype -> (Object
constructor: (Function),
toUTCString: (Function),
setMinutes: (Function),
setUTCMonth: (Function),
getMilliseconds: (Function),
getTime: (Function),
getMinutes: (Function),
getUTCHours: (Function),
toString: (Function),
setUTCFullYear: (Function),
setMonth: (Function),
getUTCMinutes: (Function),
getUTCDate: (Function),
setSeconds: (Function),
toLocaleDateString: (Function),
getMonth: (Function),
toTimeString: (Function),
toLocaleTimeString: (Function),
setUTCMilliseconds: (Function),
setYear: (Function),
getUTCFullYear: (Function),
getFullYear: (Function),
getTimezoneOffset: (Function),
setDate: (Function),
getUTCMonth: (Function),
getHours: (Function),
toLocaleString: (Function),
toISOString: (Function),
toDateString: (Function),
getUTCSeconds: (Function),
valueOf: (Function),
setUTCMinutes: (Function),
getUTCDay: (Function),
toJSON: (Function),
setUTCDate: (Function),
setUTCSeconds: (Function),
getYear: (Function),
getUTCMilliseconds: (Function),
getDay: (Function),
setFullYear: (Function),
setMilliseconds: (Function),
setTime: (Function),
setHours: (Function),
getSeconds: (Function),
toGMTString: (Function),
getDate: (Function),
setUTCHours: (Function)
)
example Date -> (Date)
RegExp -> (Function
$*: [Getter/Setter],
$3: [Getter/Setter],
$`: [Getter/Setter],
arguments: null,
$9: [Getter/Setter],
rightContext: [Getter/Setter],
multiline: [Getter/Setter],
length: 2,
$7: [Getter/Setter],
lastParen: [Getter/Setter],
$input: [Getter/Setter],
$+: [Getter/Setter],
$&: [Getter/Setter],
name: 'RegExp',
leftContext: [Getter/Setter],
$8: [Getter/Setter],
$4: [Getter/Setter],
prototype: (Object),
$1: [Getter/Setter],
$': [Getter/Setter],
$_: [Getter/Setter],
input: [Getter/Setter],
caller: null,
lastMatch: [Getter/Setter],
$2: [Getter/Setter],
$5: [Getter/Setter],
$6: [Getter/Setter]
)
RegExp.prototype -> (Object
toString: (Function),
constructor: (Function...),
exec: (Function),
compile: (Function),
test: (Function)
)
example RegExp -> (RegExp
lastIndex: 0,
multiline: false,
global: true,
source: 'Find Me',
ignoreCase: true
)
Object -> (Function
getOwnPropertyNames: (Function),
arguments: null,
seal: (Function),
length: 1,
create: (Function),
name: 'Object',
isFrozen: (Function),
keys: (Function),
prototype: (),
isExtensible: (Function),
getOwnPropertyDescriptor: (Function),
caller: null,
preventExtensions: (Function),
getPrototypeOf: (Function),
defineProperty: (Function),
isSealed: (Function),
defineProperties: (Function),
freeze: (Function)
)
Object.prototype -> (
toString: (Function),
__lookupGetter__: (Function),
__defineGetter__: (Function),
toLocaleString: (Function),
hasOwnProperty: (Function),
valueOf: (Function),
__defineSetter__: (Function),
constructor: (Function),
propertyIsEnumerable: (Function),
isPrototypeOf: (Function),
__lookupSetter__: (Function)
)
example Object -> (Object age: 28, name: 'Tim' )
Array -> (Function
arguments: null,
length: 1,
isArray: (Function),
name: 'Array',
prototype: (Object),
caller: null
)
Array.prototype -> (Object
length: 0,
constructor: (Function),
concat: (Function),
map: (Function),
sort: (Function),
join: (Function),
indexOf: (Function),
filter: (Function),
some: (Function),
toString: (Function),
reduceRight: (Function),
splice: (Function),
forEach: (Function),
shift: (Function),
unshift: (Function),
toLocaleString: (Function),
lastIndexOf: (Function),
reverse: (Function),
reduce: (Function),
pop: (Function),
push: (Function),
every: (Function),
slice: (Function)
)
example Array -> (Array 1, 2, 3, 4, length: 4 )
Buffer -> (Function
byteLength: (Function),
arguments: null,
isBuffer: (Function),
length: 3,
name: 'Buffer',
poolSize: 8192,
prototype: (Object...),
caller: null,
_charsWritten: 244
)
Buffer.prototype -> (Object
binarySlice: (Function),
utf8Write: (Function),
utf8Slice: (Function),
toString: (Function),
inspect: (Function),
binaryWrite: (Function),
asciiSlice: (Function),
set: (Function),
copy: (Function),
write: (Function),
constructor: (Function...),
asciiWrite: (Function),
get: (Function),
slice: (Function)
)
example Buffer -> (Buffer 252, 131, 196, 4, length: 4, offset: 4048, parent: (SlowBuffer...) )
EventEmitter -> (Function
arguments: null,
length: 0,
name: 'EventEmitter',
prototype: (Object...),
caller: null
)
EventEmitter.prototype -> (Object
on: (Function),
removeListener: (Function),
addListener: (Function),
once: (Function),
removeAllListeners: (Function),
emit: (Function),
constructor: (Function),
listeners: (Function)
)
example EventEmitter -> (EventEmitter
mainModule: (Module...),
createChildProcess: (Function),
setuid: (Function),
binding: (Function),
on: (Function),
cwd: (Function),
mixin: (Function),
stdout: [Getter],
unwatchFile: (Function),
_tickCallback: (Function),
title: 'node',
compile: (Function),
error: (Function),
platform: 'PLATFORM',
env: (...),
version: 'v0.3.2',
getgid: (Function),
chdir: (Function),
reallyExit: (Function),
setgid: (Function),
assert: (Function),
execPath: '/home/tim/.nvm/v0.3.2/bin/node',
exit: (Function),
kill: (Function),
pid: 9037,
argv: (Array...),
getuid: (Function),
debug: (Function),
memoryUsage: (Function),
ARGV: (Array...),
ENV: (...),
removeListener: (Function),
openStdin: (Function),
_needTickCallback: (Function),
installPrefix: '/home/tim/.nvm/v0.3.2',
nextTick: (Function),
versions: (Object...),
watchFile: (Function),
_kill: (Function),
EventEmitter: (Function),
dlopen: (Function),
addListener: (Function),
inherits: (Function),
_byteLength: (Function),
umask: (Function)
)
http -> (Object
STATUS_CODES: (Object...),
cat: (Function),
parsers: (...),
Server: (Function...),
ClientRequest: (Function...),
ServerResponse: (Function...),
createServer: (Function),
IncomingMessage: (Function...),
OutgoingMessage: (Function...),
createClient: (Function),
Client: (Function...)
)
net -> (Object
isIPv6: (Function),
Server: (Function...),
Stream: (Function...),
createConnection: (Function),
createServer: (Function),
isIPv4: (Function),
isIP: (Function)
)
url -> (Object
resolveObject: (Function),
resolve: (Function),
format: (Function),
parse: (Function)
)
path -> (Object
extname: (Function),
join: (Function),
normalizeArray: (Function),
split: (Function),
normalize: (Function),
basename: (Function),
existsSync: (Function),
exists: (Function),
dirname: (Function)
)
querystring -> (Object
decode: (Function),
escape: (Function),
stringify: (Function),
unescapeBuffer: (Function),
unescape: (Function),
encode: (Function),
parse: (Function)
)
child_process -> (Object spawn: (Function), execFile: (Function), exec: (Function) )
step -> (Function
arguments: null,
fn: (Function),
length: 0,
name: 'Step',
prototype: (Object),
caller: null
)
connect -> (Object
middleware: (Object),
Server: (Function...),
createServer: (Function),
version: '0.5.0',
utils: (Object...)
)
haml -> (Function
render: (Function),
arguments: null,
length: 2,
name: 'Haml',
prototype: (Object),
execute: (Function),
caller: null,
optimize: (Function),
compile: (Function)
)
nstore -> (Object
remove: (Function),
genKey: (Function),
initialize: (Function),
save: (Function),
get: (Function),
new: (Function),
loadDatabase: (Function),
length: [Getter],
checkQueue: (Function)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment