Path: blob/main/test/embind/underscore-externs.js
4150 views
/*1* Copyright 2012 The Closure Compiler Authors.2*3* Licensed under the Apache License, Version 2.0 (the "License");4* you may not use this file except in compliance with the License.5* You may obtain a copy of the License at6*7* http://www.apache.org/licenses/LICENSE-2.08*9* Unless required by applicable law or agreed to in writing, software10* distributed under the License is distributed on an "AS IS" BASIS,11* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.12* See the License for the specific language governing permissions and13* limitations under the License.14*/1516/**17* @fileoverview Externs for Underscore 1.5.2.18*19* TODO: Wrapper objects.20* TODO: _.bind - for some reason this plays up in practice.21*22* @see http://documentcloud.github.com/underscore/23* @externs24*/2526/**27* @param {*} obj28* @return {!_}29* @constructor30*/31function _(obj) {}3233// Collection functions3435/**36* @param {Object.<?, VALUE>|Array.<VALUE>} obj37* @param {function(this:CONTEXT, VALUE, ?, ?)} iterator38* @param {CONTEXT=} opt_context39* @template CONTEXT, VALUE40*/41_.each = function(obj, iterator, opt_context) {};4243/**44* @param {Object.<?, VALUE>|Array.<VALUE>} obj45* @param {function(this:CONTEXT, VALUE, ?, ?)} iterator46* @param {CONTEXT=} opt_context47* @template CONTEXT, VALUE48*/49_.forEach = function(obj, iterator, opt_context) {};5051/**52* @param {Object.<?, VALUE>|Array.<VALUE>} obj53* @param {function(this:CONTEXT, VALUE, ?, ?) : RETURN} iterator54* @param {CONTEXT=} opt_context55* @return {!Array.<RETURN>}56* @template CONTEXT, VALUE, RETURN57*/58_.map = function(obj, iterator, opt_context) {};5960/**61* @param {Object.<?, VALUE>|Array.<VALUE>} obj62* @param {function(this:CONTEXT, VALUE, ?, ?) : RETURN} iterator63* @param {CONTEXT=} opt_context64* @return {!Array.<RETURN>}65* @template CONTEXT, VALUE, RETURN66*/67_.collect = function(obj, iterator, opt_context) {};6869/**70* @param {Object.<?, VALUE>|Array.<VALUE>} obj71* @param {function(this:CONTEXT, ?, VALUE, ?, ?) : RETURN} iterator72* @param {?} memo73* @param {CONTEXT=} opt_context74* @return {RETURN}75* @template CONTEXT, VALUE, RETURN76*/77_.reduce = function(obj, iterator, memo, opt_context) {};7879/**80* @param {Object.<?, VALUE>|Array.<VALUE>} obj81* @param {function(this:CONTEXT, ?, VALUE, ?, ?) : RETURN} iterator82* @param {?} memo83* @param {CONTEXT=} opt_context84* @return {RETURN}85* @template CONTEXT, VALUE, RETURN86*/87_.inject = function(obj, iterator, memo, opt_context) {};8889/**90* @param {Object.<?, VALUE>|Array.<VALUE>} obj91* @param {function(this:CONTEXT, ?, VALUE, ?, ?) : RETURN} iterator92* @param {?} memo93* @param {CONTEXT=} opt_context94* @return {RETURN}95* @template CONTEXT, VALUE, RETURN96*/97_.foldl = function(obj, iterator, memo, opt_context) {};9899/**100* @param {Object.<?, VALUE>|Array.<VALUE>} obj101* @param {function(this:CONTEXT, ?, VALUE, ?, ?) : RETURN} iterator102* @param {?} memo103* @param {CONTEXT=} opt_context104* @return {RETURN}105* @template CONTEXT, VALUE, RETURN106*/107_.reduceRight = function(obj, iterator, memo, opt_context) {};108109/**110* @param {Object.<?, VALUE>|Array.<VALUE>} obj111* @param {function(this:CONTEXT, ?, VALUE, ?, ?) : RETURN} iterator112* @param {VALUE} memo113* @param {CONTEXT=} opt_context114* @return {RETURN}115* @template CONTEXT, VALUE, RETURN116*/117_.foldr = function(obj, iterator, memo, opt_context) {};118119/**120* @param {Object.<?, VALUE>|Array.<VALUE>} obj121* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} iterator122* @param {CONTEXT=} opt_context123* @return {VALUE|undefined}124* @template CONTEXT, VALUE125*/126_.find = function(obj, iterator, opt_context) {};127128/**129* @param {Object.<?, VALUE>|Array.<VALUE>} obj130* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} iterator131* @param {CONTEXT=} opt_context132* @return {VALUE|undefined}133* @template CONTEXT, VALUE134*/135_.detect = function(obj, iterator, opt_context) {};136137/**138* @param {Object.<?, VALUE>|Array.<VALUE>} obj139* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} iterator140* @param {CONTEXT=} opt_context141* @return {!Array.<VALUE>}142* @template CONTEXT, VALUE143*/144_.filter = function(obj, iterator, opt_context) {};145146/**147* @param {Object.<?, VALUE>|Array.<VALUE>} obj148* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} iterator149* @param {CONTEXT=} opt_context150* @return {!Array.<VALUE>}151* @template CONTEXT, VALUE152*/153_.select = function(obj, iterator, opt_context) {};154155/**156* @param {Object.<?, VALUE>|Array.<VALUE>} obj157* @param {Object} properties158* @return {!Array.<VALUE>}159* @template VALUE160*/161_.where = function(obj, properties) {};162163/**164* @param {Object.<?, VALUE>|Array.<VALUE>} obj165* @param {Object.<string, ?>} properties166* @return {VALUE|undefined}167* @template VALUE168*/169_.findWhere = function(obj, properties) {};170171/**172* @param {Object.<?, VALUE>|Array.<VALUE>} obj173* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} iterator174* @param {CONTEXT=} opt_context175* @return {!Array.<VALUE>}176* @template CONTEXT, VALUE177*/178_.reject = function(obj, iterator, opt_context) {};179180/**181* @param {Object.<?, VALUE>|Array.<VALUE>} obj182* @param {(function(this:CONTEXT, VALUE, ?, ?) : ?)=} opt_iterator183* @param {CONTEXT=} opt_context184* @return {boolean}185* @template CONTEXT, VALUE186*/187_.every = function(obj, opt_iterator, opt_context) {};188189/**190* @param {Object.<?, VALUE>|Array.<VALUE>} obj191* @param {(function(this:CONTEXT, VALUE, ?, ?) : ?)=} opt_iterator192* @param {CONTEXT=} opt_context193* @return {boolean}194* @template CONTEXT, VALUE195*/196_.all = function(obj, opt_iterator, opt_context) {};197198/**199* @param {Object.<?, VALUE>|Array.<VALUE>} obj200* @param {(function(this:CONTEXT, VALUE, ?, ?) : ?)=} opt_iterator201* @param {CONTEXT=} opt_context202* @return {boolean}203* @template CONTEXT, VALUE204*/205_.some = function(obj, opt_iterator, opt_context) {};206207/**208* @param {Object.<?, VALUE>|Array.<VALUE>} obj209* @param {(function(this:CONTEXT, VALUE, ?, ?) : ?)=} opt_iterator210* @param {CONTEXT=} opt_context211* @return {boolean}212* @template CONTEXT, VALUE213*/214_.any = function(obj, opt_iterator, opt_context) {};215216/**217* @param {Object|Array} obj218* @param {*} target219* @return {boolean}220*/221_.contains = function(obj, target) {};222223/**224* @param {Object|Array} obj225* @param {*} target226* @return {boolean}227*/228_.include = function(obj, target) {};229230/**231* @param {Object|Array} obj232* @param {string|Function} method233* @param {...*} var_args234*/235_.invoke = function(obj, method, var_args) {};236237/**238* @param {Array.<Object.<?, VALUE>>} obj239* @param {string} key240* @return {!Array.<VALUE>}241* @template VALUE242*/243_.pluck = function(obj, key) {};244245/**246* @param {Object.<?, VALUE>|Array.<VALUE>} obj247* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} opt_iterator248* @param {CONTEXT=} opt_context249* @return {VALUE}250* @template CONTEXT, VALUE251*/252_.max = function(obj, opt_iterator, opt_context) {};253254/**255* @param {Object.<?, VALUE>|Array.<VALUE>} obj256* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} opt_iterator257* @param {CONTEXT=} opt_context258* @return {VALUE}259* @template CONTEXT, VALUE260*/261_.min = function(obj, opt_iterator, opt_context) {};262263/**264* @param {Object.<?, VALUE>|Array.<VALUE>} obj265* @param {string|function(this:CONTEXT, VALUE, ?, ?) : ?} iterator266* @param {CONTEXT=} opt_context267* @return {!Array.<VALUE>}268* @template CONTEXT, VALUE269*/270_.sortBy = function(obj, iterator, opt_context) {};271272/**273* @param {Object.<?, VALUE>|Array.<VALUE>} obj274* @param {string|function(this:CONTEXT, VALUE, ?, ?) : ?} iterator275* @param {CONTEXT=} opt_context276* @return {!Object.<Array.<VALUE>>}277* @template CONTEXT, VALUE278*/279_.groupBy = function(obj, iterator, opt_context) {};280281/**282* @param {Object.<?, VALUE>|Array.<VALUE>} obj283* @param {string|function(this:CONTEXT, VALUE, ?, ?) : ?} iterator284* @param {CONTEXT=} opt_context285* @return {!Object.<?, VALUE>}286* @template CONTEXT, VALUE287*/288_.indexBy = function(obj, iterator, opt_context) {};289290/**291* @param {Object.<?, VALUE>|Array.<VALUE>} obj292* @param {string|function(this:CONTEXT, VALUE, ?, ?) : ?} iterator293* @param {CONTEXT=} opt_context294* @return {!Object.<?, number>}295* @template CONTEXT, VALUE296*/297_.countBy = function(obj, iterator, opt_context) {};298299/**300* @param {Object.<?, VALUE>|Array.<VALUE>} obj301* @return {!Array.<VALUE>}302* @template VALUE303*/304_.shuffle = function(obj) {};305306/**307* @param {Object.<?, VALUE>|Array.<VALUE>} obj308* @param {number=} opt_n309* @return {!VALUE|Array.<VALUE>}310* @template VALUE311*/312_.sample = function(obj, opt_n) {};313314/**315* @param {*} iterable316* @return {!Array}317*/318_.toArray = function(iterable) {};319320/**321* @param {Object|Array} obj322* @return {number}323*/324_.size = function(obj) {};325326// Array functions327328/**329* @param {Array.<VALUE>} array330* @param {number=} opt_n331* @return {VALUE|!Array.<VALUE>}332* @template VALUE333*/334_.first = function(array, opt_n) {};335336/**337* @param {Array.<VALUE>} array338* @param {number=} opt_n339* @return {VALUE|!Array.<VALUE>}340* @template VALUE341*/342_.head = function(array, opt_n) {};343344/**345* @param {Array.<VALUE>} array346* @param {number=} opt_n347* @return {VALUE|!Array.<VALUE>}348* @template VALUE349*/350_.take = function(array, opt_n) {};351352/**353* @param {Array.<VALUE>} array354* @param {number} opt_n355* @return {!Array.<VALUE>}356* @template VALUE357*/358_.initial = function(array, opt_n) {};359360/**361* @param {Array.<VALUE>} array362* @param {number=} opt_n363* @return {VALUE|!Array.<VALUE>}364* @template VALUE365*/366_.last = function(array, opt_n) {};367368/**369* @param {Array.<VALUE>} array370* @param {number=} opt_n371* @return {!Array.<VALUE>}372* @template VALUE373*/374_.rest = function(array, opt_n) {};375376/**377* @param {Array.<VALUE>} array378* @param {number=} opt_n379* @return {!Array.<VALUE>}380* @template VALUE381*/382_.tail = function(array, opt_n) {};383384/**385* @param {Array.<VALUE>} array386* @param {number=} opt_n387* @return {!Array.<VALUE>}388* @template VALUE389*/390_.drop = function(array, opt_n) {};391392/**393* @param {!Array.<VALUE>} array394* @return {!Array.<!VALUE>}395* @template VALUE396*/397_.compact = function(array) {};398399/**400* @param {Array} array401* @param {boolean=} opt_shallow402* @return {!Array}403*/404_.flatten = function(array, opt_shallow) {};405406/**407* @param {!Array.<VALUE>} array408* @param {...VALUE} var_args409* @return {!Array.<VALUE>}410* @template VALUE411*/412_.without = function(array, var_args) {};413414/**415* @param {...Array} arrays416* @return {!Array}417*/418_.union = function(arrays) {};419420/**421* @param {...Array} arrays422* @return {!Array}423*/424_.intersection = function(arrays) {};425426/**427* @param {Array} array428* @param {...Array} arrays429* @return {!Array}430*/431_.difference = function(array, arrays) {};432433/**434* @param {!Array.<VALUE>} array435* @param {boolean=} opt_isSorted436* @param {(function(this:CONTEXT, VALUE, ?, ?) : RETURN)=} opt_iterator437* @param {CONTEXT=} opt_context438* @return {!Array.<RETURN>}439* @template CONTEXT, VALUE, RETURN440*/441_.uniq = function(array, opt_isSorted, opt_iterator, opt_context) {};442443/**444* @param {!Array.<VALUE>} array445* @param {boolean=} opt_isSorted446* @param {(function(this:CONTEXT, VALUE, ?, ?) : RETURN)=} opt_iterator447* @param {CONTEXT=} opt_context448* @return {!Array.<RETURN>}449* @template CONTEXT, VALUE, RETURN450*/451_.unique = function(array, opt_isSorted, opt_iterator, opt_context) {};452453/**454* @param {...Array} arrays455* @return {!Array}456*/457_.zip = function(arrays) {};458459/**460* @param {!Array} list461* @param {Array=} opt_values462* @return {!Object}463*/464_.object = function(list, opt_values) {};465466/**467* @param {Array} array468* @param {*} item469* @param {boolean=} opt_isSorted470* @return {number}471*/472_.indexOf = function(array, item, opt_isSorted) {};473474/**475* @param {Array} array476* @param {*} item477* @param {number=} opt_fromindex478* @return {number}479*/480_.lastIndexOf = function(array, item, opt_fromindex) {};481482/**483* @param {Array.<VALUE>} list484* @param {VALUE} obj485* @param {(function(this:CONTEXT, VALUE) : ?)=} opt_iterator486* @param {CONTEXT=} opt_context487* @return {number}488* @template CONTEXT, VALUE489*/490_.sortedIndex = function(list, obj, opt_iterator, opt_context) {};491492/**493* @param {number} start494* @param {number=} opt_stop495* @param {number=} opt_step496* @return {!Array.<number>}497*/498_.range = function(start, opt_stop, opt_step) {};499500// Function (ahem) functions501502/**503* @param {Object} obj504* @param {...string} methodNames505*/506_.bindAll = function(obj, methodNames) {};507508/**509* @param {Function} func510* @param {...*} var_args511* @return {!Function}512*/513_.partial = function(func, var_args) {};514515/**516* @param {Function} func517* @param {Function=} opt_hasher518*/519_.memoize = function(func, opt_hasher) {};520521/**522* @param {Function} func523* @param {number} wait524* @param {...*} var_args525*/526_.delay = function(func, wait, var_args) {};527528/**529* @param {Function} func530*/531_.defer = function(func) {};532533/**534* @param {Function} func535* @param {number} wait536* @param {Object=} opt_options537* @return {!Function}538*/539_.throttle = function(func, wait, opt_options) {};540541/**542* @param {Function} func543* @param {number} wait544* @param {boolean=} opt_immediate545* @return {!Function}546*/547_.debounce = function(func, wait, opt_immediate) {};548549/**550* @param {Function} func551* @return {!Function}552*/553_.once = function(func) {};554555/**556* @param {number} times557* @param {Function} func558* @return {!Function}559*/560_.after = function(times, func) {};561562/**563* @param {Function} func564* @param {Function} wrapper565* @return {!Function}566*/567_.wrap = function(func, wrapper) {};568569/**570* @param {...Function} funcs571* @return {!Function}572*/573_.compose = function(funcs) {};574575// Object functions576577/**578* @param {Object} obj579* @return {!Array.<string>}580*/581_.keys = function(obj) {};582583/**584* @param {Object.<?, VALUE>} obj585* @return {!Array.<VALUE>}586* @template VALUE587*/588_.values = function(obj) {};589590/**591* @param {Object} obj592* @return {!Array.<!Array>}593*/594_.pairs = function(obj) {};595596/**597* @param {Object.<K, V>} obj598* @return {!Object.<V, K>}599* @template K, V600*/601_.invert = function(obj) {};602603/**604* @param {Object} obj605* @return {!Array.<string>}606*/607_.functions = function(obj) {};608609/**610* @param {Object} obj611* @return {!Array.<string>}612*/613_.methods = function(obj) {};614615/**616* @param {Object} obj617* @param {...Object} objs618*/619_.extend = function(obj, objs) {};620621/**622* @param {Object.<K, V>} obj623* @param {...K|Array.<K>} keys624* @return {Object.<K, V>}625* @template K, V626*/627_.pick = function(obj, keys) {};628629/**630* @param {Object.<K, V>} obj631* @param {...string|Array.<string>} keys632* @return {Object.<K, V>}633* @template K, V634*/635_.omit = function(obj, keys) {};636637/**638* @param {Object} obj639* @param {...Object} defs640*/641_.defaults = function(obj, defs) {};642643/**644* @param {Object.<K, V>} obj645* @return {Object.<K, V>}646* @template K, V647*/648_.clone = function(obj) {};649650/**651* @param {Object.<K, V>} obj652* @param {function(Object.<K, V>)} interceptor653* @return {Object.<K, V>} obj654* @template K, V655*/656_.tap = function(obj, interceptor) {};657658/**659* @param {Object} obj660* @param {string} key661* @return {boolean}662*/663_.has = function(obj, key) {};664665/**666* @param {Object} a667* @param {Object} b668* @return {boolean}669*/670_.isEqual = function(a, b) {};671672/**673* @param {Object|Array|string} obj674* @return {boolean}675*/676_.isEmpty = function(obj) {};677678/**679* @param {*} obj680* @return {boolean}681*/682_.isElement = function(obj) {};683684/**685* @param {*} obj686* @return {boolean}687*/688_.isArray = function(obj) {};689690/**691* @param {*} obj692* @return {boolean}693*/694_.isObject = function(obj) {};695696/**697* @param {*} obj698* @return {boolean}699*/700_.isArguments = function(obj) {};701702/**703* @param {*} obj704* @return {boolean}705*/706_.isFunction = function(obj) {};707708/**709* @param {*} obj710* @return {boolean}711*/712_.isString = function(obj) {};713714/**715* @param {*} obj716* @return {boolean}717*/718_.isNumber = function(obj) {};719720/**721* @param {*} obj722* @return {boolean}723*/724_.isFinite = function(obj) {};725726/**727* @param {*} obj728* @return {boolean}729*/730_.isBoolean = function(obj) {};731732/**733* @param {*} obj734* @return {boolean}735*/736_.isDate = function(obj) {};737738/**739* @param {*} obj740* @return {boolean}741*/742_.isRegExp = function(obj) {};743744/**745* @param {*} obj746* @return {boolean}747*/748_.isNaN = function(obj) {};749750/**751* @param {*} obj752* @return {boolean}753*/754_.isNull = function(obj) {};755756/**757* @param {*} obj758* @return {boolean}759*/760_.isUndefined = function(obj) {};761762// Utility functions763764/**765* @return {_}766*/767_.noConflict = function() {};768769/**770* @param {VALUE} value771* @return {VALUE}772* @template VALUE773*/774_.identity = function(value) {};775776/**777* @param {number} n778* @param {Function} iterator779* @param {Object=} opt_context780* @return {Array}781*/782_.times = function(n, iterator, opt_context) {};783784/**785* @param {number} min786* @param {number=} opt_max787* @return {number}788*/789_.random = function(min, opt_max) {};790791/**792* @param {Object} obj793*/794_.mixin = function(obj) {};795796/**797* @param {string=} opt_prefix798* @return {number|string}799*/800_.uniqueId = function(opt_prefix) {};801802/**803* @param {string} s804* @return {string}805*/806_.escape = function(s) {};807808/**809* @param {string} s810* @return {string}811*/812_.unescape = function(s) {};813814/**815* @param {Object} obj816* @param {string|Function} property817* @return {*}818*/819_.result = function(obj, property) {};820821/**822* @param {string} str823* @param {Object=} opt_data824* @param {Object=} opt_settings825*/826_.template = function(str, opt_data, opt_settings) {};827828// Chaining functions829830/**831* @param {Object} obj832* @return {Object}833*/834_.chain = function(obj) {};835836837