├── README.md ├── package.json ├── LICENSE ├── test.js ├── lib └── util.js └── float.patch /README.md: -------------------------------------------------------------------------------- 1 | # core-util-is 2 | 3 | The `util.is*` functions introduced in Node v0.12. 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "core-util-is", 3 | "version": "1.0.3", 4 | "description": "The `util.is*` functions introduced in Node v0.12.", 5 | "main": "lib/util.js", 6 | "files": [ 7 | "lib" 8 | ], 9 | "repository": { 10 | "type": "git", 11 | "url": "git://github.com/isaacs/core-util-is" 12 | }, 13 | "keywords": [ 14 | "util", 15 | "isBuffer", 16 | "isArray", 17 | "isNumber", 18 | "isString", 19 | "isRegExp", 20 | "isThis", 21 | "isThat", 22 | "polyfill" 23 | ], 24 | "author": "Isaac Z. Schlueter (http://blog.izs.me/)", 25 | "license": "MIT", 26 | "bugs": { 27 | "url": "https://github.com/isaacs/core-util-is/issues" 28 | }, 29 | "scripts": { 30 | "test": "tap test.js", 31 | "preversion": "npm test", 32 | "postversion": "npm publish", 33 | "prepublishOnly": "git push origin --follow-tags" 34 | }, 35 | "devDependencies": { 36 | "tap": "^15.0.9" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Node.js contributors. All rights reserved. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to 5 | deal in the Software without restriction, including without limitation the 6 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 7 | sell copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19 | IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | const t = require('tap'); 2 | 3 | const util = require('./lib/util'); 4 | 5 | t.equal(util.isArray([]), true); 6 | t.equal(util.isArray({}), false); 7 | { 8 | const { isArray } = Array 9 | Array.isArray = null 10 | const is = util.isArray({ [Symbol.toStringTag]: 'Array' }) 11 | Array.isArray = isArray 12 | t.equal(is, true); 13 | } 14 | 15 | t.equal(util.isBoolean(null), false); 16 | t.equal(util.isBoolean(true), true); 17 | t.equal(util.isBoolean(false), true); 18 | 19 | t.equal(util.isNull(null), true); 20 | t.equal(util.isNull(undefined), false); 21 | t.equal(util.isNull(false), false); 22 | t.equal(util.isNull(), false); 23 | 24 | t.equal(util.isNullOrUndefined(null), true); 25 | t.equal(util.isNullOrUndefined(undefined), true); 26 | t.equal(util.isNullOrUndefined(false), false); 27 | t.equal(util.isNullOrUndefined(), true); 28 | 29 | t.equal(util.isNumber(null), false); 30 | t.equal(util.isNumber('1'), false); 31 | t.equal(util.isNumber(1), true); 32 | 33 | t.equal(util.isString(null), false); 34 | t.equal(util.isString('1'), true); 35 | t.equal(util.isString(1), false); 36 | 37 | t.equal(util.isSymbol(null), false); 38 | t.equal(util.isSymbol('1'), false); 39 | t.equal(util.isSymbol(1), false); 40 | t.equal(util.isSymbol(Symbol()), true); 41 | 42 | t.equal(util.isUndefined(null), false); 43 | t.equal(util.isUndefined(undefined), true); 44 | t.equal(util.isUndefined(false), false); 45 | t.equal(util.isUndefined(), true); 46 | 47 | t.equal(util.isRegExp(null), false); 48 | t.equal(util.isRegExp('1'), false); 49 | t.equal(util.isRegExp(new RegExp()), true); 50 | 51 | t.equal(util.isObject({}), true); 52 | t.equal(util.isObject([]), true); 53 | t.equal(util.isObject(new RegExp()), true); 54 | t.equal(util.isObject(new Date()), true); 55 | 56 | t.equal(util.isDate(null), false); 57 | t.equal(util.isDate('1'), false); 58 | t.equal(util.isDate(new Date()), true); 59 | 60 | t.equal(util.isError(null), false); 61 | t.equal(util.isError({ err: true }), false); 62 | t.equal(util.isError(new Error()), true); 63 | 64 | t.equal(util.isFunction(null), false); 65 | t.equal(util.isFunction({ }), false); 66 | t.equal(util.isFunction(function() {}), true); 67 | 68 | t.equal(util.isPrimitive(null), true); 69 | t.equal(util.isPrimitive(''), true); 70 | t.equal(util.isPrimitive(0), true); 71 | t.equal(util.isPrimitive(new Date()), false); 72 | 73 | t.equal(util.isBuffer(null), false); 74 | t.equal(util.isBuffer({}), false); 75 | t.equal(util.isBuffer(Buffer.alloc(0)), true); 76 | t.equal(util.isBuffer(Buffer.from('')), true); 77 | 78 | t.test('require buffer instead of using global', t => { 79 | const util = t.mock('./lib/util.js', { 80 | buffer: { 81 | Buffer: { 82 | isBuffer: true 83 | } 84 | } 85 | }); 86 | t.equal(util.isBuffer, true, 'loaded from require(), not global') 87 | t.end() 88 | }) 89 | -------------------------------------------------------------------------------- /lib/util.js: -------------------------------------------------------------------------------- 1 | // Copyright Joyent, Inc. and other Node contributors. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a 4 | // copy of this software and associated documentation files (the 5 | // "Software"), to deal in the Software without restriction, including 6 | // without limitation the rights to use, copy, modify, merge, publish, 7 | // distribute, sublicense, and/or sell copies of the Software, and to permit 8 | // persons to whom the Software is furnished to do so, subject to the 9 | // following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included 12 | // in all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15 | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 17 | // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 18 | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 19 | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 20 | // USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | 22 | // NOTE: These type checking functions intentionally don't use `instanceof` 23 | // because it is fragile and can be easily faked with `Object.create()`. 24 | 25 | function isArray(arg) { 26 | if (Array.isArray) { 27 | return Array.isArray(arg); 28 | } 29 | return objectToString(arg) === '[object Array]'; 30 | } 31 | exports.isArray = isArray; 32 | 33 | function isBoolean(arg) { 34 | return typeof arg === 'boolean'; 35 | } 36 | exports.isBoolean = isBoolean; 37 | 38 | function isNull(arg) { 39 | return arg === null; 40 | } 41 | exports.isNull = isNull; 42 | 43 | function isNullOrUndefined(arg) { 44 | return arg == null; 45 | } 46 | exports.isNullOrUndefined = isNullOrUndefined; 47 | 48 | function isNumber(arg) { 49 | return typeof arg === 'number'; 50 | } 51 | exports.isNumber = isNumber; 52 | 53 | function isString(arg) { 54 | return typeof arg === 'string'; 55 | } 56 | exports.isString = isString; 57 | 58 | function isSymbol(arg) { 59 | return typeof arg === 'symbol'; 60 | } 61 | exports.isSymbol = isSymbol; 62 | 63 | function isUndefined(arg) { 64 | return arg === void 0; 65 | } 66 | exports.isUndefined = isUndefined; 67 | 68 | function isRegExp(re) { 69 | return objectToString(re) === '[object RegExp]'; 70 | } 71 | exports.isRegExp = isRegExp; 72 | 73 | function isObject(arg) { 74 | return typeof arg === 'object' && arg !== null; 75 | } 76 | exports.isObject = isObject; 77 | 78 | function isDate(d) { 79 | return objectToString(d) === '[object Date]'; 80 | } 81 | exports.isDate = isDate; 82 | 83 | function isError(e) { 84 | return (objectToString(e) === '[object Error]' || e instanceof Error); 85 | } 86 | exports.isError = isError; 87 | 88 | function isFunction(arg) { 89 | return typeof arg === 'function'; 90 | } 91 | exports.isFunction = isFunction; 92 | 93 | function isPrimitive(arg) { 94 | return arg === null || 95 | typeof arg === 'boolean' || 96 | typeof arg === 'number' || 97 | typeof arg === 'string' || 98 | typeof arg === 'symbol' || // ES6 symbol 99 | typeof arg === 'undefined'; 100 | } 101 | exports.isPrimitive = isPrimitive; 102 | 103 | exports.isBuffer = require('buffer').Buffer.isBuffer; 104 | 105 | function objectToString(o) { 106 | return Object.prototype.toString.call(o); 107 | } 108 | -------------------------------------------------------------------------------- /float.patch: -------------------------------------------------------------------------------- 1 | diff --git a/lib/util.js b/lib/util.js 2 | index a03e874..9074e8e 100644 3 | --- a/lib/util.js 4 | +++ b/lib/util.js 5 | @@ -19,430 +19,6 @@ 6 | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 7 | // USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | 9 | -var formatRegExp = /%[sdj%]/g; 10 | -exports.format = function(f) { 11 | - if (!isString(f)) { 12 | - var objects = []; 13 | - for (var i = 0; i < arguments.length; i++) { 14 | - objects.push(inspect(arguments[i])); 15 | - } 16 | - return objects.join(' '); 17 | - } 18 | - 19 | - var i = 1; 20 | - var args = arguments; 21 | - var len = args.length; 22 | - var str = String(f).replace(formatRegExp, function(x) { 23 | - if (x === '%%') return '%'; 24 | - if (i >= len) return x; 25 | - switch (x) { 26 | - case '%s': return String(args[i++]); 27 | - case '%d': return Number(args[i++]); 28 | - case '%j': 29 | - try { 30 | - return JSON.stringify(args[i++]); 31 | - } catch (_) { 32 | - return '[Circular]'; 33 | - } 34 | - default: 35 | - return x; 36 | - } 37 | - }); 38 | - for (var x = args[i]; i < len; x = args[++i]) { 39 | - if (isNull(x) || !isObject(x)) { 40 | - str += ' ' + x; 41 | - } else { 42 | - str += ' ' + inspect(x); 43 | - } 44 | - } 45 | - return str; 46 | -}; 47 | - 48 | - 49 | -// Mark that a method should not be used. 50 | -// Returns a modified function which warns once by default. 51 | -// If --no-deprecation is set, then it is a no-op. 52 | -exports.deprecate = function(fn, msg) { 53 | - // Allow for deprecating things in the process of starting up. 54 | - if (isUndefined(global.process)) { 55 | - return function() { 56 | - return exports.deprecate(fn, msg).apply(this, arguments); 57 | - }; 58 | - } 59 | - 60 | - if (process.noDeprecation === true) { 61 | - return fn; 62 | - } 63 | - 64 | - var warned = false; 65 | - function deprecated() { 66 | - if (!warned) { 67 | - if (process.throwDeprecation) { 68 | - throw new Error(msg); 69 | - } else if (process.traceDeprecation) { 70 | - console.trace(msg); 71 | - } else { 72 | - console.error(msg); 73 | - } 74 | - warned = true; 75 | - } 76 | - return fn.apply(this, arguments); 77 | - } 78 | - 79 | - return deprecated; 80 | -}; 81 | - 82 | - 83 | -var debugs = {}; 84 | -var debugEnviron; 85 | -exports.debuglog = function(set) { 86 | - if (isUndefined(debugEnviron)) 87 | - debugEnviron = process.env.NODE_DEBUG || ''; 88 | - set = set.toUpperCase(); 89 | - if (!debugs[set]) { 90 | - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { 91 | - var pid = process.pid; 92 | - debugs[set] = function() { 93 | - var msg = exports.format.apply(exports, arguments); 94 | - console.error('%s %d: %s', set, pid, msg); 95 | - }; 96 | - } else { 97 | - debugs[set] = function() {}; 98 | - } 99 | - } 100 | - return debugs[set]; 101 | -}; 102 | - 103 | - 104 | -/** 105 | - * Echos the value of a value. Trys to print the value out 106 | - * in the best way possible given the different types. 107 | - * 108 | - * @param {Object} obj The object to print out. 109 | - * @param {Object} opts Optional options object that alters the output. 110 | - */ 111 | -/* legacy: obj, showHidden, depth, colors*/ 112 | -function inspect(obj, opts) { 113 | - // default options 114 | - var ctx = { 115 | - seen: [], 116 | - stylize: stylizeNoColor 117 | - }; 118 | - // legacy... 119 | - if (arguments.length >= 3) ctx.depth = arguments[2]; 120 | - if (arguments.length >= 4) ctx.colors = arguments[3]; 121 | - if (isBoolean(opts)) { 122 | - // legacy... 123 | - ctx.showHidden = opts; 124 | - } else if (opts) { 125 | - // got an "options" object 126 | - exports._extend(ctx, opts); 127 | - } 128 | - // set default options 129 | - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; 130 | - if (isUndefined(ctx.depth)) ctx.depth = 2; 131 | - if (isUndefined(ctx.colors)) ctx.colors = false; 132 | - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; 133 | - if (ctx.colors) ctx.stylize = stylizeWithColor; 134 | - return formatValue(ctx, obj, ctx.depth); 135 | -} 136 | -exports.inspect = inspect; 137 | - 138 | - 139 | -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics 140 | -inspect.colors = { 141 | - 'bold' : [1, 22], 142 | - 'italic' : [3, 23], 143 | - 'underline' : [4, 24], 144 | - 'inverse' : [7, 27], 145 | - 'white' : [37, 39], 146 | - 'grey' : [90, 39], 147 | - 'black' : [30, 39], 148 | - 'blue' : [34, 39], 149 | - 'cyan' : [36, 39], 150 | - 'green' : [32, 39], 151 | - 'magenta' : [35, 39], 152 | - 'red' : [31, 39], 153 | - 'yellow' : [33, 39] 154 | -}; 155 | - 156 | -// Don't use 'blue' not visible on cmd.exe 157 | -inspect.styles = { 158 | - 'special': 'cyan', 159 | - 'number': 'yellow', 160 | - 'boolean': 'yellow', 161 | - 'undefined': 'grey', 162 | - 'null': 'bold', 163 | - 'string': 'green', 164 | - 'date': 'magenta', 165 | - // "name": intentionally not styling 166 | - 'regexp': 'red' 167 | -}; 168 | - 169 | - 170 | -function stylizeWithColor(str, styleType) { 171 | - var style = inspect.styles[styleType]; 172 | - 173 | - if (style) { 174 | - return '\u001b[' + inspect.colors[style][0] + 'm' + str + 175 | - '\u001b[' + inspect.colors[style][1] + 'm'; 176 | - } else { 177 | - return str; 178 | - } 179 | -} 180 | - 181 | - 182 | -function stylizeNoColor(str, styleType) { 183 | - return str; 184 | -} 185 | - 186 | - 187 | -function arrayToHash(array) { 188 | - var hash = {}; 189 | - 190 | - array.forEach(function(val, idx) { 191 | - hash[val] = true; 192 | - }); 193 | - 194 | - return hash; 195 | -} 196 | - 197 | - 198 | -function formatValue(ctx, value, recurseTimes) { 199 | - // Provide a hook for user-specified inspect functions. 200 | - // Check that value is an object with an inspect function on it 201 | - if (ctx.customInspect && 202 | - value && 203 | - isFunction(value.inspect) && 204 | - // Filter out the util module, it's inspect function is special 205 | - value.inspect !== exports.inspect && 206 | - // Also filter out any prototype objects using the circular check. 207 | - !(value.constructor && value.constructor.prototype === value)) { 208 | - var ret = value.inspect(recurseTimes, ctx); 209 | - if (!isString(ret)) { 210 | - ret = formatValue(ctx, ret, recurseTimes); 211 | - } 212 | - return ret; 213 | - } 214 | - 215 | - // Primitive types cannot have properties 216 | - var primitive = formatPrimitive(ctx, value); 217 | - if (primitive) { 218 | - return primitive; 219 | - } 220 | - 221 | - // Look up the keys of the object. 222 | - var keys = Object.keys(value); 223 | - var visibleKeys = arrayToHash(keys); 224 | - 225 | - if (ctx.showHidden) { 226 | - keys = Object.getOwnPropertyNames(value); 227 | - } 228 | - 229 | - // Some type of object without properties can be shortcutted. 230 | - if (keys.length === 0) { 231 | - if (isFunction(value)) { 232 | - var name = value.name ? ': ' + value.name : ''; 233 | - return ctx.stylize('[Function' + name + ']', 'special'); 234 | - } 235 | - if (isRegExp(value)) { 236 | - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); 237 | - } 238 | - if (isDate(value)) { 239 | - return ctx.stylize(Date.prototype.toString.call(value), 'date'); 240 | - } 241 | - if (isError(value)) { 242 | - return formatError(value); 243 | - } 244 | - } 245 | - 246 | - var base = '', array = false, braces = ['{', '}']; 247 | - 248 | - // Make Array say that they are Array 249 | - if (isArray(value)) { 250 | - array = true; 251 | - braces = ['[', ']']; 252 | - } 253 | - 254 | - // Make functions say that they are functions 255 | - if (isFunction(value)) { 256 | - var n = value.name ? ': ' + value.name : ''; 257 | - base = ' [Function' + n + ']'; 258 | - } 259 | - 260 | - // Make RegExps say that they are RegExps 261 | - if (isRegExp(value)) { 262 | - base = ' ' + RegExp.prototype.toString.call(value); 263 | - } 264 | - 265 | - // Make dates with properties first say the date 266 | - if (isDate(value)) { 267 | - base = ' ' + Date.prototype.toUTCString.call(value); 268 | - } 269 | - 270 | - // Make error with message first say the error 271 | - if (isError(value)) { 272 | - base = ' ' + formatError(value); 273 | - } 274 | - 275 | - if (keys.length === 0 && (!array || value.length == 0)) { 276 | - return braces[0] + base + braces[1]; 277 | - } 278 | - 279 | - if (recurseTimes < 0) { 280 | - if (isRegExp(value)) { 281 | - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); 282 | - } else { 283 | - return ctx.stylize('[Object]', 'special'); 284 | - } 285 | - } 286 | - 287 | - ctx.seen.push(value); 288 | - 289 | - var output; 290 | - if (array) { 291 | - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); 292 | - } else { 293 | - output = keys.map(function(key) { 294 | - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); 295 | - }); 296 | - } 297 | - 298 | - ctx.seen.pop(); 299 | - 300 | - return reduceToSingleString(output, base, braces); 301 | -} 302 | - 303 | - 304 | -function formatPrimitive(ctx, value) { 305 | - if (isUndefined(value)) 306 | - return ctx.stylize('undefined', 'undefined'); 307 | - if (isString(value)) { 308 | - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') 309 | - .replace(/'/g, "\\'") 310 | - .replace(/\\"/g, '"') + '\''; 311 | - return ctx.stylize(simple, 'string'); 312 | - } 313 | - if (isNumber(value)) { 314 | - // Format -0 as '-0'. Strict equality won't distinguish 0 from -0, 315 | - // so instead we use the fact that 1 / -0 < 0 whereas 1 / 0 > 0 . 316 | - if (value === 0 && 1 / value < 0) 317 | - return ctx.stylize('-0', 'number'); 318 | - return ctx.stylize('' + value, 'number'); 319 | - } 320 | - if (isBoolean(value)) 321 | - return ctx.stylize('' + value, 'boolean'); 322 | - // For some reason typeof null is "object", so special case here. 323 | - if (isNull(value)) 324 | - return ctx.stylize('null', 'null'); 325 | -} 326 | - 327 | - 328 | -function formatError(value) { 329 | - return '[' + Error.prototype.toString.call(value) + ']'; 330 | -} 331 | - 332 | - 333 | -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { 334 | - var output = []; 335 | - for (var i = 0, l = value.length; i < l; ++i) { 336 | - if (hasOwnProperty(value, String(i))) { 337 | - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, 338 | - String(i), true)); 339 | - } else { 340 | - output.push(''); 341 | - } 342 | - } 343 | - keys.forEach(function(key) { 344 | - if (!key.match(/^\d+$/)) { 345 | - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, 346 | - key, true)); 347 | - } 348 | - }); 349 | - return output; 350 | -} 351 | - 352 | - 353 | -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { 354 | - var name, str, desc; 355 | - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; 356 | - if (desc.get) { 357 | - if (desc.set) { 358 | - str = ctx.stylize('[Getter/Setter]', 'special'); 359 | - } else { 360 | - str = ctx.stylize('[Getter]', 'special'); 361 | - } 362 | - } else { 363 | - if (desc.set) { 364 | - str = ctx.stylize('[Setter]', 'special'); 365 | - } 366 | - } 367 | - if (!hasOwnProperty(visibleKeys, key)) { 368 | - name = '[' + key + ']'; 369 | - } 370 | - if (!str) { 371 | - if (ctx.seen.indexOf(desc.value) < 0) { 372 | - if (isNull(recurseTimes)) { 373 | - str = formatValue(ctx, desc.value, null); 374 | - } else { 375 | - str = formatValue(ctx, desc.value, recurseTimes - 1); 376 | - } 377 | - if (str.indexOf('\n') > -1) { 378 | - if (array) { 379 | - str = str.split('\n').map(function(line) { 380 | - return ' ' + line; 381 | - }).join('\n').substr(2); 382 | - } else { 383 | - str = '\n' + str.split('\n').map(function(line) { 384 | - return ' ' + line; 385 | - }).join('\n'); 386 | - } 387 | - } 388 | - } else { 389 | - str = ctx.stylize('[Circular]', 'special'); 390 | - } 391 | - } 392 | - if (isUndefined(name)) { 393 | - if (array && key.match(/^\d+$/)) { 394 | - return str; 395 | - } 396 | - name = JSON.stringify('' + key); 397 | - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { 398 | - name = name.substr(1, name.length - 2); 399 | - name = ctx.stylize(name, 'name'); 400 | - } else { 401 | - name = name.replace(/'/g, "\\'") 402 | - .replace(/\\"/g, '"') 403 | - .replace(/(^"|"$)/g, "'"); 404 | - name = ctx.stylize(name, 'string'); 405 | - } 406 | - } 407 | - 408 | - return name + ': ' + str; 409 | -} 410 | - 411 | - 412 | -function reduceToSingleString(output, base, braces) { 413 | - var numLinesEst = 0; 414 | - var length = output.reduce(function(prev, cur) { 415 | - numLinesEst++; 416 | - if (cur.indexOf('\n') >= 0) numLinesEst++; 417 | - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; 418 | - }, 0); 419 | - 420 | - if (length > 60) { 421 | - return braces[0] + 422 | - (base === '' ? '' : base + '\n ') + 423 | - ' ' + 424 | - output.join(',\n ') + 425 | - ' ' + 426 | - braces[1]; 427 | - } 428 | - 429 | - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; 430 | -} 431 | - 432 | - 433 | // NOTE: These type checking functions intentionally don't use `instanceof` 434 | // because it is fragile and can be easily faked with `Object.create()`. 435 | function isArray(ar) { 436 | @@ -522,166 +98,10 @@ function isPrimitive(arg) { 437 | exports.isPrimitive = isPrimitive; 438 | 439 | function isBuffer(arg) { 440 | - return arg instanceof Buffer; 441 | + return Buffer.isBuffer(arg); 442 | } 443 | exports.isBuffer = isBuffer; 444 | 445 | function objectToString(o) { 446 | return Object.prototype.toString.call(o); 447 | -} 448 | - 449 | - 450 | -function pad(n) { 451 | - return n < 10 ? '0' + n.toString(10) : n.toString(10); 452 | -} 453 | - 454 | - 455 | -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 456 | - 'Oct', 'Nov', 'Dec']; 457 | - 458 | -// 26 Feb 16:19:34 459 | -function timestamp() { 460 | - var d = new Date(); 461 | - var time = [pad(d.getHours()), 462 | - pad(d.getMinutes()), 463 | - pad(d.getSeconds())].join(':'); 464 | - return [d.getDate(), months[d.getMonth()], time].join(' '); 465 | -} 466 | - 467 | - 468 | -// log is just a thin wrapper to console.log that prepends a timestamp 469 | -exports.log = function() { 470 | - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); 471 | -}; 472 | - 473 | - 474 | -/** 475 | - * Inherit the prototype methods from one constructor into another. 476 | - * 477 | - * The Function.prototype.inherits from lang.js rewritten as a standalone 478 | - * function (not on Function.prototype). NOTE: If this file is to be loaded 479 | - * during bootstrapping this function needs to be rewritten using some native 480 | - * functions as prototype setup using normal JavaScript does not work as 481 | - * expected during bootstrapping (see mirror.js in r114903). 482 | - * 483 | - * @param {function} ctor Constructor function which needs to inherit the 484 | - * prototype. 485 | - * @param {function} superCtor Constructor function to inherit prototype from. 486 | - */ 487 | -exports.inherits = function(ctor, superCtor) { 488 | - ctor.super_ = superCtor; 489 | - ctor.prototype = Object.create(superCtor.prototype, { 490 | - constructor: { 491 | - value: ctor, 492 | - enumerable: false, 493 | - writable: true, 494 | - configurable: true 495 | - } 496 | - }); 497 | -}; 498 | - 499 | -exports._extend = function(origin, add) { 500 | - // Don't do anything if add isn't an object 501 | - if (!add || !isObject(add)) return origin; 502 | - 503 | - var keys = Object.keys(add); 504 | - var i = keys.length; 505 | - while (i--) { 506 | - origin[keys[i]] = add[keys[i]]; 507 | - } 508 | - return origin; 509 | -}; 510 | - 511 | -function hasOwnProperty(obj, prop) { 512 | - return Object.prototype.hasOwnProperty.call(obj, prop); 513 | -} 514 | - 515 | - 516 | -// Deprecated old stuff. 517 | - 518 | -exports.p = exports.deprecate(function() { 519 | - for (var i = 0, len = arguments.length; i < len; ++i) { 520 | - console.error(exports.inspect(arguments[i])); 521 | - } 522 | -}, 'util.p: Use console.error() instead'); 523 | - 524 | - 525 | -exports.exec = exports.deprecate(function() { 526 | - return require('child_process').exec.apply(this, arguments); 527 | -}, 'util.exec is now called `child_process.exec`.'); 528 | - 529 | - 530 | -exports.print = exports.deprecate(function() { 531 | - for (var i = 0, len = arguments.length; i < len; ++i) { 532 | - process.stdout.write(String(arguments[i])); 533 | - } 534 | -}, 'util.print: Use console.log instead'); 535 | - 536 | - 537 | -exports.puts = exports.deprecate(function() { 538 | - for (var i = 0, len = arguments.length; i < len; ++i) { 539 | - process.stdout.write(arguments[i] + '\n'); 540 | - } 541 | -}, 'util.puts: Use console.log instead'); 542 | - 543 | - 544 | -exports.debug = exports.deprecate(function(x) { 545 | - process.stderr.write('DEBUG: ' + x + '\n'); 546 | -}, 'util.debug: Use console.error instead'); 547 | - 548 | - 549 | -exports.error = exports.deprecate(function(x) { 550 | - for (var i = 0, len = arguments.length; i < len; ++i) { 551 | - process.stderr.write(arguments[i] + '\n'); 552 | - } 553 | -}, 'util.error: Use console.error instead'); 554 | - 555 | - 556 | -exports.pump = exports.deprecate(function(readStream, writeStream, callback) { 557 | - var callbackCalled = false; 558 | - 559 | - function call(a, b, c) { 560 | - if (callback && !callbackCalled) { 561 | - callback(a, b, c); 562 | - callbackCalled = true; 563 | - } 564 | - } 565 | - 566 | - readStream.addListener('data', function(chunk) { 567 | - if (writeStream.write(chunk) === false) readStream.pause(); 568 | - }); 569 | - 570 | - writeStream.addListener('drain', function() { 571 | - readStream.resume(); 572 | - }); 573 | - 574 | - readStream.addListener('end', function() { 575 | - writeStream.end(); 576 | - }); 577 | - 578 | - readStream.addListener('close', function() { 579 | - call(); 580 | - }); 581 | - 582 | - readStream.addListener('error', function(err) { 583 | - writeStream.end(); 584 | - call(err); 585 | - }); 586 | - 587 | - writeStream.addListener('error', function(err) { 588 | - readStream.destroy(); 589 | - call(err); 590 | - }); 591 | -}, 'util.pump(): Use readableStream.pipe() instead'); 592 | - 593 | - 594 | -var uv; 595 | -exports._errnoException = function(err, syscall) { 596 | - if (isUndefined(uv)) uv = process.binding('uv'); 597 | - var errname = uv.errname(err); 598 | - var e = new Error(syscall + ' ' + errname); 599 | - e.code = errname; 600 | - e.errno = errname; 601 | - e.syscall = syscall; 602 | - return e; 603 | -}; 604 | +} --------------------------------------------------------------------------------