Permalink
Switch branches/tags
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
836 lines (720 sloc) 17.2 KB
/*
* Copyright 2012 The Closure Compiler Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @fileoverview Externs for Underscore 1.5.2.
*
* TODO: Wrapper objects.
* TODO: _.bind - for some reason this plays up in practice.
*
* @see http://documentcloud.github.com/underscore/
* @externs
*/
/**
* @param {*} obj
* @return {!_}
* @constructor
*/
function _(obj) {}
// Collection functions
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, VALUE, ?, ?)} iterator
* @param {CONTEXT=} opt_context
* @template CONTEXT, VALUE
*/
_.each = function(obj, iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, VALUE, ?, ?)} iterator
* @param {CONTEXT=} opt_context
* @template CONTEXT, VALUE
*/
_.forEach = function(obj, iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, VALUE, ?, ?) : RETURN} iterator
* @param {CONTEXT=} opt_context
* @return {!Array.<RETURN>}
* @template CONTEXT, VALUE, RETURN
*/
_.map = function(obj, iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, VALUE, ?, ?) : RETURN} iterator
* @param {CONTEXT=} opt_context
* @return {!Array.<RETURN>}
* @template CONTEXT, VALUE, RETURN
*/
_.collect = function(obj, iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, ?, VALUE, ?, ?) : RETURN} iterator
* @param {?} memo
* @param {CONTEXT=} opt_context
* @return {RETURN}
* @template CONTEXT, VALUE, RETURN
*/
_.reduce = function(obj, iterator, memo, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, ?, VALUE, ?, ?) : RETURN} iterator
* @param {?} memo
* @param {CONTEXT=} opt_context
* @return {RETURN}
* @template CONTEXT, VALUE, RETURN
*/
_.inject = function(obj, iterator, memo, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, ?, VALUE, ?, ?) : RETURN} iterator
* @param {?} memo
* @param {CONTEXT=} opt_context
* @return {RETURN}
* @template CONTEXT, VALUE, RETURN
*/
_.foldl = function(obj, iterator, memo, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, ?, VALUE, ?, ?) : RETURN} iterator
* @param {?} memo
* @param {CONTEXT=} opt_context
* @return {RETURN}
* @template CONTEXT, VALUE, RETURN
*/
_.reduceRight = function(obj, iterator, memo, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, ?, VALUE, ?, ?) : RETURN} iterator
* @param {VALUE} memo
* @param {CONTEXT=} opt_context
* @return {RETURN}
* @template CONTEXT, VALUE, RETURN
*/
_.foldr = function(obj, iterator, memo, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
* @param {CONTEXT=} opt_context
* @return {VALUE|undefined}
* @template CONTEXT, VALUE
*/
_.find = function(obj, iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
* @param {CONTEXT=} opt_context
* @return {VALUE|undefined}
* @template CONTEXT, VALUE
*/
_.detect = function(obj, iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
* @param {CONTEXT=} opt_context
* @return {!Array.<VALUE>}
* @template CONTEXT, VALUE
*/
_.filter = function(obj, iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
* @param {CONTEXT=} opt_context
* @return {!Array.<VALUE>}
* @template CONTEXT, VALUE
*/
_.select = function(obj, iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {Object} properties
* @return {!Array.<VALUE>}
* @template VALUE
*/
_.where = function(obj, properties) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {Object.<string, ?>} properties
* @return {VALUE|undefined}
* @template VALUE
*/
_.findWhere = function(obj, properties) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
* @param {CONTEXT=} opt_context
* @return {!Array.<VALUE>}
* @template CONTEXT, VALUE
*/
_.reject = function(obj, iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {(function(this:CONTEXT, VALUE, ?, ?) : ?)=} opt_iterator
* @param {CONTEXT=} opt_context
* @return {boolean}
* @template CONTEXT, VALUE
*/
_.every = function(obj, opt_iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {(function(this:CONTEXT, VALUE, ?, ?) : ?)=} opt_iterator
* @param {CONTEXT=} opt_context
* @return {boolean}
* @template CONTEXT, VALUE
*/
_.all = function(obj, opt_iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {(function(this:CONTEXT, VALUE, ?, ?) : ?)=} opt_iterator
* @param {CONTEXT=} opt_context
* @return {boolean}
* @template CONTEXT, VALUE
*/
_.some = function(obj, opt_iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {(function(this:CONTEXT, VALUE, ?, ?) : ?)=} opt_iterator
* @param {CONTEXT=} opt_context
* @return {boolean}
* @template CONTEXT, VALUE
*/
_.any = function(obj, opt_iterator, opt_context) {};
/**
* @param {Object|Array} obj
* @param {*} target
* @return {boolean}
*/
_.contains = function(obj, target) {};
/**
* @param {Object|Array} obj
* @param {*} target
* @return {boolean}
*/
_.include = function(obj, target) {};
/**
* @param {Object|Array} obj
* @param {string|Function} method
* @param {...*} var_args
*/
_.invoke = function(obj, method, var_args) {};
/**
* @param {Array.<Object.<?, VALUE>>} obj
* @param {string} key
* @return {!Array.<VALUE>}
* @template VALUE
*/
_.pluck = function(obj, key) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} opt_iterator
* @param {CONTEXT=} opt_context
* @return {VALUE}
* @template CONTEXT, VALUE
*/
_.max = function(obj, opt_iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} opt_iterator
* @param {CONTEXT=} opt_context
* @return {VALUE}
* @template CONTEXT, VALUE
*/
_.min = function(obj, opt_iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {string|function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
* @param {CONTEXT=} opt_context
* @return {!Array.<VALUE>}
* @template CONTEXT, VALUE
*/
_.sortBy = function(obj, iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {string|function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
* @param {CONTEXT=} opt_context
* @return {!Object.<Array.<VALUE>>}
* @template CONTEXT, VALUE
*/
_.groupBy = function(obj, iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {string|function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
* @param {CONTEXT=} opt_context
* @return {!Object.<?, VALUE>}
* @template CONTEXT, VALUE
*/
_.indexBy = function(obj, iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {string|function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
* @param {CONTEXT=} opt_context
* @return {!Object.<?, number>}
* @template CONTEXT, VALUE
*/
_.countBy = function(obj, iterator, opt_context) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @return {!Array.<VALUE>}
* @template VALUE
*/
_.shuffle = function(obj) {};
/**
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
* @param {number=} opt_n
* @return {!VALUE|Array.<VALUE>}
* @template VALUE
*/
_.sample = function(obj, opt_n) {};
/**
* @param {*} iterable
* @return {!Array}
*/
_.toArray = function(iterable) {};
/**
* @param {Object|Array} obj
* @return {number}
*/
_.size = function(obj) {};
// Array functions
/**
* @param {Array.<VALUE>} array
* @param {number=} opt_n
* @return {VALUE|!Array.<VALUE>}
* @template VALUE
*/
_.first = function(array, opt_n) {};
/**
* @param {Array.<VALUE>} array
* @param {number=} opt_n
* @return {VALUE|!Array.<VALUE>}
* @template VALUE
*/
_.head = function(array, opt_n) {};
/**
* @param {Array.<VALUE>} array
* @param {number=} opt_n
* @return {VALUE|!Array.<VALUE>}
* @template VALUE
*/
_.take = function(array, opt_n) {};
/**
* @param {Array.<VALUE>} array
* @param {number} opt_n
* @return {!Array.<VALUE>}
* @template VALUE
*/
_.initial = function(array, opt_n) {};
/**
* @param {Array.<VALUE>} array
* @param {number=} opt_n
* @return {VALUE|!Array.<VALUE>}
* @template VALUE
*/
_.last = function(array, opt_n) {};
/**
* @param {Array.<VALUE>} array
* @param {number=} opt_n
* @return {!Array.<VALUE>}
* @template VALUE
*/
_.rest = function(array, opt_n) {};
/**
* @param {Array.<VALUE>} array
* @param {number=} opt_n
* @return {!Array.<VALUE>}
* @template VALUE
*/
_.tail = function(array, opt_n) {};
/**
* @param {Array.<VALUE>} array
* @param {number=} opt_n
* @return {!Array.<VALUE>}
* @template VALUE
*/
_.drop = function(array, opt_n) {};
/**
* @param {!Array.<VALUE>} array
* @return {!Array.<!VALUE>}
* @template VALUE
*/
_.compact = function(array) {};
/**
* @param {Array} array
* @param {boolean=} opt_shallow
* @return {!Array}
*/
_.flatten = function(array, opt_shallow) {};
/**
* @param {!Array.<VALUE>} array
* @param {...VALUE} var_args
* @return {!Array.<VALUE>}
* @template VALUE
*/
_.without = function(array, var_args) {};
/**
* @param {...Array} arrays
* @return {!Array}
*/
_.union = function(arrays) {};
/**
* @param {...Array} arrays
* @return {!Array}
*/
_.intersection = function(arrays) {};
/**
* @param {Array} array
* @param {...Array} arrays
* @return {!Array}
*/
_.difference = function(array, arrays) {};
/**
* @param {!Array.<VALUE>} array
* @param {boolean=} opt_isSorted
* @param {(function(this:CONTEXT, VALUE, ?, ?) : RETURN)=} opt_iterator
* @param {CONTEXT=} opt_context
* @return {!Array.<RETURN>}
* @template CONTEXT, VALUE, RETURN
*/
_.uniq = function(array, opt_isSorted, opt_iterator, opt_context) {};
/**
* @param {!Array.<VALUE>} array
* @param {boolean=} opt_isSorted
* @param {(function(this:CONTEXT, VALUE, ?, ?) : RETURN)=} opt_iterator
* @param {CONTEXT=} opt_context
* @return {!Array.<RETURN>}
* @template CONTEXT, VALUE, RETURN
*/
_.unique = function(array, opt_isSorted, opt_iterator, opt_context) {};
/**
* @param {...Array} arrays
* @return {!Array}
*/
_.zip = function(arrays) {};
/**
* @param {!Array} list
* @param {Array=} opt_values
* @return {!Object}
*/
_.object = function(list, opt_values) {};
/**
* @param {Array} array
* @param {*} item
* @param {boolean=} opt_isSorted
* @return {number}
*/
_.indexOf = function(array, item, opt_isSorted) {};
/**
* @param {Array} array
* @param {*} item
* @param {number=} opt_fromindex
* @return {number}
*/
_.lastIndexOf = function(array, item, opt_fromindex) {};
/**
* @param {Array.<VALUE>} list
* @param {VALUE} obj
* @param {(function(this:CONTEXT, VALUE) : ?)=} opt_iterator
* @param {CONTEXT=} opt_context
* @return {number}
* @template CONTEXT, VALUE
*/
_.sortedIndex = function(list, obj, opt_iterator, opt_context) {};
/**
* @param {number} start
* @param {number=} opt_stop
* @param {number=} opt_step
* @return {!Array.<number>}
*/
_.range = function(start, opt_stop, opt_step) {};
// Function (ahem) functions
/**
* @param {Object} obj
* @param {...string} methodNames
*/
_.bindAll = function(obj, methodNames) {};
/**
* @param {Function} func
* @param {...*} var_args
* @return {!Function}
*/
_.partial = function(func, var_args) {};
/**
* @param {Function} func
* @param {Function=} opt_hasher
*/
_.memoize = function(func, opt_hasher) {};
/**
* @param {Function} func
* @param {number} wait
* @param {...*} var_args
*/
_.delay = function(func, wait, var_args) {};
/**
* @param {Function} func
*/
_.defer = function(func) {};
/**
* @param {Function} func
* @param {number} wait
* @param {Object=} opt_options
* @return {!Function}
*/
_.throttle = function(func, wait, opt_options) {};
/**
* @param {Function} func
* @param {number} wait
* @param {boolean=} opt_immediate
* @return {!Function}
*/
_.debounce = function(func, wait, opt_immediate) {};
/**
* @param {Function} func
* @return {!Function}
*/
_.once = function(func) {};
/**
* @param {number} times
* @param {Function} func
* @return {!Function}
*/
_.after = function(times, func) {};
/**
* @param {Function} func
* @param {Function} wrapper
* @return {!Function}
*/
_.wrap = function(func, wrapper) {};
/**
* @param {...Function} funcs
* @return {!Function}
*/
_.compose = function(funcs) {};
// Object functions
/**
* @param {Object} obj
* @return {!Array.<string>}
*/
_.keys = function(obj) {};
/**
* @param {Object.<?, VALUE>} obj
* @return {!Array.<VALUE>}
* @template VALUE
*/
_.values = function(obj) {};
/**
* @param {Object} obj
* @return {!Array.<!Array>}
*/
_.pairs = function(obj) {};
/**
* @param {Object.<K, V>} obj
* @return {!Object.<V, K>}
* @template K, V
*/
_.invert = function(obj) {};
/**
* @param {Object} obj
* @return {!Array.<string>}
*/
_.functions = function(obj) {};
/**
* @param {Object} obj
* @return {!Array.<string>}
*/
_.methods = function(obj) {};
/**
* @param {Object} obj
* @param {...Object} objs
*/
_.extend = function(obj, objs) {};
/**
* @param {Object.<K, V>} obj
* @param {...K|Array.<K>} keys
* @return {Object.<K, V>}
* @template K, V
*/
_.pick = function(obj, keys) {};
/**
* @param {Object.<K, V>} obj
* @param {...string|Array.<string>} keys
* @return {Object.<K, V>}
* @template K, V
*/
_.omit = function(obj, keys) {};
/**
* @param {Object} obj
* @param {...Object} defs
*/
_.defaults = function(obj, defs) {};
/**
* @param {Object.<K, V>} obj
* @return {Object.<K, V>}
* @template K, V
*/
_.clone = function(obj) {};
/**
* @param {Object.<K, V>} obj
* @param {function(Object.<K, V>)} interceptor
* @return {Object.<K, V>} obj
* @template K, V
*/
_.tap = function(obj, interceptor) {};
/**
* @param {Object} obj
* @param {string} key
* @return {boolean}
*/
_.has = function(obj, key) {};
/**
* @param {Object} a
* @param {Object} b
* @return {boolean}
*/
_.isEqual = function(a, b) {};
/**
* @param {Object|Array|string} obj
* @return {boolean}
*/
_.isEmpty = function(obj) {};
/**
* @param {*} obj
* @return {boolean}
*/
_.isElement = function(obj) {};
/**
* @param {*} obj
* @return {boolean}
*/
_.isArray = function(obj) {};
/**
* @param {*} obj
* @return {boolean}
*/
_.isObject = function(obj) {};
/**
* @param {*} obj
* @return {boolean}
*/
_.isArguments = function(obj) {};
/**
* @param {*} obj
* @return {boolean}
*/
_.isFunction = function(obj) {};
/**
* @param {*} obj
* @return {boolean}
*/
_.isString = function(obj) {};
/**
* @param {*} obj
* @return {boolean}
*/
_.isNumber = function(obj) {};
/**
* @param {*} obj
* @return {boolean}
*/
_.isFinite = function(obj) {};
/**
* @param {*} obj
* @return {boolean}
*/
_.isBoolean = function(obj) {};
/**
* @param {*} obj
* @return {boolean}
*/
_.isDate = function(obj) {};
/**
* @param {*} obj
* @return {boolean}
*/
_.isRegExp = function(obj) {};
/**
* @param {*} obj
* @return {boolean}
*/
_.isNaN = function(obj) {};
/**
* @param {*} obj
* @return {boolean}
*/
_.isNull = function(obj) {};
/**
* @param {*} obj
* @return {boolean}
*/
_.isUndefined = function(obj) {};
// Utility functions
/**
* @return {_}
*/
_.noConflict = function() {};
/**
* @param {VALUE} value
* @return {VALUE}
* @template VALUE
*/
_.identity = function(value) {};
/**
* @param {number} n
* @param {Function} iterator
* @param {Object=} opt_context
* @return {Array}
*/
_.times = function(n, iterator, opt_context) {};
/**
* @param {number} min
* @param {number=} opt_max
* @return {number}
*/
_.random = function(min, opt_max) {};
/**
* @param {Object} obj
*/
_.mixin = function(obj) {};
/**
* @param {string=} opt_prefix
* @return {number|string}
*/
_.uniqueId = function(opt_prefix) {};
/**
* @param {string} s
* @return {string}
*/
_.escape = function(s) {};
/**
* @param {string} s
* @return {string}
*/
_.unescape = function(s) {};
/**
* @param {Object} obj
* @param {string|Function} property
* @return {*}
*/
_.result = function(obj, property) {};
/**
* @param {string} str
* @param {Object=} opt_data
* @param {Object=} opt_settings
*/
_.template = function(str, opt_data, opt_settings) {};
// Chaining functions
/**
* @param {Object} obj
* @return {Object}
*/
_.chain = function(obj) {};