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 = [] }
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) }
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 }
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) }
module.exports = function isNaN() { return isNumber(obj) && obj !== +obj; };
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 }
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') }