Jump To …

console.coffee

try
  Util = require("util")
catch e
  Util = require("sys")


class Console
  constructor: (@_silent)->

  assert: console.assert.bind(console)

  count: (name)->
    @_counters ||= {}
    @_counters[name] ||= 0
    @_counters[name]++
    @log "#{name}: #{@_counters[name]}"

  debug: ->
    @log.apply(this, arguments)

  error: ->
    @log.apply(this, arguments)

  group: ->
  groupCollapsed: ->
  groupEnd: ->

  info: ->
    @log.apply(this, arguments)

  log: ->
    formatted = ((if typeof arg == "string" then arg else Util.inspect(arg, console.showHidden, console.depth)) for arg in arguments)
    if typeof Util.format == "function"
      output = Util.format.apply(this, formatted) + "\n"
    else
      output = formatted.join(" ") + "\n"
    @_output ||= []
    @_output.push output
    unless @_silent
      process.stdout.write output

  warn: ->
    @log.apply(this, arguments)

  time: (name)->
    @_timers ||= {}
    @_timers[name] = Date.now()

  timeEnd: (name)->
    return unless @_timers
    start = @_timers[name]
    return unless start
    delete @_timers[name]
    @log "#{name}: #{Date.now() - start}ms"

  trace: ->
    stack = (new Error).stack.split("\n")
    stack[0] = "console.trace()"
    @log stack.join("\n")

Returns all output captured by this console.

  @prototype.__defineGetter__ "output", ->
    return (if @_output then @_output.join("\n") else "")


exports.Console = Console