Пример #1
0
function Image(height, width) {
  if (!(this instanceof Image)) {
    return new Image(height, width)
  }
  if (!isnumber(height) || !isnumber(width)) {
    throw new Error("Image height and width must be numbers.")
  }
  this.height = +height
  this.width = +width
  this.frames = []
}
Пример #2
0
dat.put = function(key, doc, opts, cb) {
  if (typeof key === 'object') return this.put(key.key, key, doc, opts)
  if (typeof opts === 'function') return this.put(key, doc, null, opts)
  if (!opts) opts = {}
  if (!cb) cb = noop

  var self = this
  var isBuffer = Buffer.isBuffer(doc)
  var version = opts.version || doc.version

  if (version) {
    if (!isNumber(version)) {
      setImmediate(function() {
        cb(new Error('version must be a number'))
      })
      return
    }
    version = +version // coerce into number
  }

  var afterMerge = function(err) {
    if (err) return cb(err)

    if (isBuffer && (!key || self.beforePut)) {
      isBuffer = false
      doc = self.schema.decode(doc)
    }

    if (!key && !isBuffer) key = docUtils.extractPrimaryKey(doc, opts)
    if (!key) throw new Error('put() requires a key')

    debug('put key: %s, version: %d', key, version || 0)

    var ready = function(err, doc) {
      if (err) return cb(err)

      self.storage.put(key, isBuffer ? doc : self.schema.encode(doc), {version:version, force:opts.force}, function(err, value, version) {
        if (err) return cb(err)
        cb(null, self.schema.decode(value, {key:key, version:version}))
      })
    }

    if (!self.beforePut) ready(null, doc)
    else self.beforePut(doc, ready)
  }

  if (opts.columns) this.schema.merge(opts.columns, opts, afterMerge)
  else if (isBuffer) afterWrite()
  else this.schema.mergeFromObject(doc, afterMerge)
}
Пример #3
0
function floorDate(date, threshold, tzOffset) {
  var floored = _floorDate(date, threshold)

  if (tzOffset != null) {
    if (!(isNumber(tzOffset))) {
      if (tzOffset == "UTC" || tzOffset == "utc") {
        tzOffset = 0
      }
      else {
        throw new Error("Unrecognized timezone offset " + tzOffset + " (expected minutes or 'UTC')")
      }
    }
    var offsetMillis = (floored.getTimezoneOffset() - tzOffset) * MILLIS_PER_MINUTE
    floored = new Date(floored.getTime() + offsetMillis)
  }

  return floored
}
Пример #4
0
  function mapAgg(seqKey, segment, option) {
    if (isNumber(segment) && segment < 1) {
      // Looks like percentile, otherwise segments less than one don't make sense
      option = segment
      segment = null
    }
    if (segment == null) segment = Number.MAX_VALUE

    var rollup = agg(seqKey, segment)
    var transform = map({objectMode: true}, function (record) {
      var pivoted = pivot(record.set)
      var aggregated = {}
      aggregated[seqKey] = record[seqKey]
      // For lots of keys a for() might be faster here...
      Object.keys(pivoted).forEach(function (key) {
        if (key == seqKey) return
        aggregated[key] = fn.call(null, pivoted[key], option)
      })
      return aggregated
    })

    return splice(rollup, transform)
  }
Пример #5
0
module.exports = function isNaN() {
    return isNumber(obj) && obj !== +obj;
};
Пример #6
0
function _floorDate(date, threshold) {
  if (isNumber(date) && !(date instanceof Date)) date = new Date(date)
  var out = date
  if (threshold == null) return date

  if (isNumber(threshold) && threshold !== 0) {
    // threshold is a number in milliseconds, truncate date
    var ts = date.getTime()
    return new Date((Math.floor(ts / threshold)) * threshold)
  }

  switch (threshold) {
    // Fall-through on purpose
    case "y":
    case "yr":
    case "yrs":
    case "year":
    case "years":
      date.setMonth(0)
    case "M":
    case "mon":
    case "mons":
    case "month":
    case "months":
      date.setDate(1)
    case "d":
    case "day":
    case "days":
      date.setHours(0)
    case "h":
    case "hr":
    case "hrs":
    case "hour":
    case "hours":
      date.setMinutes(0)
    case "m":
    case "min":
    case "mins":
    case "minute":
    case "minutes":
      date.setSeconds(0)
    case "s":
    case "sec":
    case "secs":
    case "second":
    case "seconds":
      date.setMilliseconds(0)
      break // End fall-through
    case "w":
    case "wk":
    case "wks":
    case "week":
    case "weeks":
      // special Sun-Sat 0-6
      var year = date.getFullYear()
      var month = date.getMonth()
      var day = date.getDay()
      var new_day = date.getDate() - day
      date = new Date(year, month, new_day)
      break
    case "q":
    case "qtr":
    case "qtrs":
    case "quarter":
    case "quarters":
      year = date.getFullYear()
      month = date.getMonth()
      var quarter_month = (((month)/3) | 0) * 3
      // TBD timezone issues?
      date = new Date(year, quarter_month, 1)
      break
    default:
      return new Error("Unknown/Invalid time threshold for floorDate")
  }

  return date
}
Пример #7
0
function pack(val) {
  if (typeof val === 'undefined') throw new Error('cannot pack undefined value')
  if (!isNumber(val)) throw new Error('cannot pack non-number')
  return lexint.pack(val, 'hex')
}