Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
emscripten-core
GitHub Repository: emscripten-core/emscripten
Path: blob/main/test/embind/underscore-externs.js
4150 views
1
/*
2
* Copyright 2012 The Closure Compiler Authors.
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
16
17
/**
18
* @fileoverview Externs for Underscore 1.5.2.
19
*
20
* TODO: Wrapper objects.
21
* TODO: _.bind - for some reason this plays up in practice.
22
*
23
* @see http://documentcloud.github.com/underscore/
24
* @externs
25
*/
26
27
/**
28
* @param {*} obj
29
* @return {!_}
30
* @constructor
31
*/
32
function _(obj) {}
33
34
// Collection functions
35
36
/**
37
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
38
* @param {function(this:CONTEXT, VALUE, ?, ?)} iterator
39
* @param {CONTEXT=} opt_context
40
* @template CONTEXT, VALUE
41
*/
42
_.each = function(obj, iterator, opt_context) {};
43
44
/**
45
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
46
* @param {function(this:CONTEXT, VALUE, ?, ?)} iterator
47
* @param {CONTEXT=} opt_context
48
* @template CONTEXT, VALUE
49
*/
50
_.forEach = function(obj, iterator, opt_context) {};
51
52
/**
53
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
54
* @param {function(this:CONTEXT, VALUE, ?, ?) : RETURN} iterator
55
* @param {CONTEXT=} opt_context
56
* @return {!Array.<RETURN>}
57
* @template CONTEXT, VALUE, RETURN
58
*/
59
_.map = function(obj, iterator, opt_context) {};
60
61
/**
62
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
63
* @param {function(this:CONTEXT, VALUE, ?, ?) : RETURN} iterator
64
* @param {CONTEXT=} opt_context
65
* @return {!Array.<RETURN>}
66
* @template CONTEXT, VALUE, RETURN
67
*/
68
_.collect = function(obj, iterator, opt_context) {};
69
70
/**
71
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
72
* @param {function(this:CONTEXT, ?, VALUE, ?, ?) : RETURN} iterator
73
* @param {?} memo
74
* @param {CONTEXT=} opt_context
75
* @return {RETURN}
76
* @template CONTEXT, VALUE, RETURN
77
*/
78
_.reduce = function(obj, iterator, memo, opt_context) {};
79
80
/**
81
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
82
* @param {function(this:CONTEXT, ?, VALUE, ?, ?) : RETURN} iterator
83
* @param {?} memo
84
* @param {CONTEXT=} opt_context
85
* @return {RETURN}
86
* @template CONTEXT, VALUE, RETURN
87
*/
88
_.inject = function(obj, iterator, memo, opt_context) {};
89
90
/**
91
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
92
* @param {function(this:CONTEXT, ?, VALUE, ?, ?) : RETURN} iterator
93
* @param {?} memo
94
* @param {CONTEXT=} opt_context
95
* @return {RETURN}
96
* @template CONTEXT, VALUE, RETURN
97
*/
98
_.foldl = function(obj, iterator, memo, opt_context) {};
99
100
/**
101
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
102
* @param {function(this:CONTEXT, ?, VALUE, ?, ?) : RETURN} iterator
103
* @param {?} memo
104
* @param {CONTEXT=} opt_context
105
* @return {RETURN}
106
* @template CONTEXT, VALUE, RETURN
107
*/
108
_.reduceRight = function(obj, iterator, memo, opt_context) {};
109
110
/**
111
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
112
* @param {function(this:CONTEXT, ?, VALUE, ?, ?) : RETURN} iterator
113
* @param {VALUE} memo
114
* @param {CONTEXT=} opt_context
115
* @return {RETURN}
116
* @template CONTEXT, VALUE, RETURN
117
*/
118
_.foldr = function(obj, iterator, memo, opt_context) {};
119
120
/**
121
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
122
* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
123
* @param {CONTEXT=} opt_context
124
* @return {VALUE|undefined}
125
* @template CONTEXT, VALUE
126
*/
127
_.find = function(obj, iterator, opt_context) {};
128
129
/**
130
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
131
* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
132
* @param {CONTEXT=} opt_context
133
* @return {VALUE|undefined}
134
* @template CONTEXT, VALUE
135
*/
136
_.detect = function(obj, iterator, opt_context) {};
137
138
/**
139
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
140
* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
141
* @param {CONTEXT=} opt_context
142
* @return {!Array.<VALUE>}
143
* @template CONTEXT, VALUE
144
*/
145
_.filter = function(obj, iterator, opt_context) {};
146
147
/**
148
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
149
* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
150
* @param {CONTEXT=} opt_context
151
* @return {!Array.<VALUE>}
152
* @template CONTEXT, VALUE
153
*/
154
_.select = function(obj, iterator, opt_context) {};
155
156
/**
157
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
158
* @param {Object} properties
159
* @return {!Array.<VALUE>}
160
* @template VALUE
161
*/
162
_.where = function(obj, properties) {};
163
164
/**
165
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
166
* @param {Object.<string, ?>} properties
167
* @return {VALUE|undefined}
168
* @template VALUE
169
*/
170
_.findWhere = function(obj, properties) {};
171
172
/**
173
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
174
* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
175
* @param {CONTEXT=} opt_context
176
* @return {!Array.<VALUE>}
177
* @template CONTEXT, VALUE
178
*/
179
_.reject = function(obj, iterator, opt_context) {};
180
181
/**
182
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
183
* @param {(function(this:CONTEXT, VALUE, ?, ?) : ?)=} opt_iterator
184
* @param {CONTEXT=} opt_context
185
* @return {boolean}
186
* @template CONTEXT, VALUE
187
*/
188
_.every = function(obj, opt_iterator, opt_context) {};
189
190
/**
191
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
192
* @param {(function(this:CONTEXT, VALUE, ?, ?) : ?)=} opt_iterator
193
* @param {CONTEXT=} opt_context
194
* @return {boolean}
195
* @template CONTEXT, VALUE
196
*/
197
_.all = function(obj, opt_iterator, opt_context) {};
198
199
/**
200
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
201
* @param {(function(this:CONTEXT, VALUE, ?, ?) : ?)=} opt_iterator
202
* @param {CONTEXT=} opt_context
203
* @return {boolean}
204
* @template CONTEXT, VALUE
205
*/
206
_.some = function(obj, opt_iterator, opt_context) {};
207
208
/**
209
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
210
* @param {(function(this:CONTEXT, VALUE, ?, ?) : ?)=} opt_iterator
211
* @param {CONTEXT=} opt_context
212
* @return {boolean}
213
* @template CONTEXT, VALUE
214
*/
215
_.any = function(obj, opt_iterator, opt_context) {};
216
217
/**
218
* @param {Object|Array} obj
219
* @param {*} target
220
* @return {boolean}
221
*/
222
_.contains = function(obj, target) {};
223
224
/**
225
* @param {Object|Array} obj
226
* @param {*} target
227
* @return {boolean}
228
*/
229
_.include = function(obj, target) {};
230
231
/**
232
* @param {Object|Array} obj
233
* @param {string|Function} method
234
* @param {...*} var_args
235
*/
236
_.invoke = function(obj, method, var_args) {};
237
238
/**
239
* @param {Array.<Object.<?, VALUE>>} obj
240
* @param {string} key
241
* @return {!Array.<VALUE>}
242
* @template VALUE
243
*/
244
_.pluck = function(obj, key) {};
245
246
/**
247
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
248
* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} opt_iterator
249
* @param {CONTEXT=} opt_context
250
* @return {VALUE}
251
* @template CONTEXT, VALUE
252
*/
253
_.max = function(obj, opt_iterator, opt_context) {};
254
255
/**
256
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
257
* @param {function(this:CONTEXT, VALUE, ?, ?) : ?} opt_iterator
258
* @param {CONTEXT=} opt_context
259
* @return {VALUE}
260
* @template CONTEXT, VALUE
261
*/
262
_.min = function(obj, opt_iterator, opt_context) {};
263
264
/**
265
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
266
* @param {string|function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
267
* @param {CONTEXT=} opt_context
268
* @return {!Array.<VALUE>}
269
* @template CONTEXT, VALUE
270
*/
271
_.sortBy = function(obj, iterator, opt_context) {};
272
273
/**
274
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
275
* @param {string|function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
276
* @param {CONTEXT=} opt_context
277
* @return {!Object.<Array.<VALUE>>}
278
* @template CONTEXT, VALUE
279
*/
280
_.groupBy = function(obj, iterator, opt_context) {};
281
282
/**
283
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
284
* @param {string|function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
285
* @param {CONTEXT=} opt_context
286
* @return {!Object.<?, VALUE>}
287
* @template CONTEXT, VALUE
288
*/
289
_.indexBy = function(obj, iterator, opt_context) {};
290
291
/**
292
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
293
* @param {string|function(this:CONTEXT, VALUE, ?, ?) : ?} iterator
294
* @param {CONTEXT=} opt_context
295
* @return {!Object.<?, number>}
296
* @template CONTEXT, VALUE
297
*/
298
_.countBy = function(obj, iterator, opt_context) {};
299
300
/**
301
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
302
* @return {!Array.<VALUE>}
303
* @template VALUE
304
*/
305
_.shuffle = function(obj) {};
306
307
/**
308
* @param {Object.<?, VALUE>|Array.<VALUE>} obj
309
* @param {number=} opt_n
310
* @return {!VALUE|Array.<VALUE>}
311
* @template VALUE
312
*/
313
_.sample = function(obj, opt_n) {};
314
315
/**
316
* @param {*} iterable
317
* @return {!Array}
318
*/
319
_.toArray = function(iterable) {};
320
321
/**
322
* @param {Object|Array} obj
323
* @return {number}
324
*/
325
_.size = function(obj) {};
326
327
// Array functions
328
329
/**
330
* @param {Array.<VALUE>} array
331
* @param {number=} opt_n
332
* @return {VALUE|!Array.<VALUE>}
333
* @template VALUE
334
*/
335
_.first = function(array, opt_n) {};
336
337
/**
338
* @param {Array.<VALUE>} array
339
* @param {number=} opt_n
340
* @return {VALUE|!Array.<VALUE>}
341
* @template VALUE
342
*/
343
_.head = function(array, opt_n) {};
344
345
/**
346
* @param {Array.<VALUE>} array
347
* @param {number=} opt_n
348
* @return {VALUE|!Array.<VALUE>}
349
* @template VALUE
350
*/
351
_.take = function(array, opt_n) {};
352
353
/**
354
* @param {Array.<VALUE>} array
355
* @param {number} opt_n
356
* @return {!Array.<VALUE>}
357
* @template VALUE
358
*/
359
_.initial = function(array, opt_n) {};
360
361
/**
362
* @param {Array.<VALUE>} array
363
* @param {number=} opt_n
364
* @return {VALUE|!Array.<VALUE>}
365
* @template VALUE
366
*/
367
_.last = function(array, opt_n) {};
368
369
/**
370
* @param {Array.<VALUE>} array
371
* @param {number=} opt_n
372
* @return {!Array.<VALUE>}
373
* @template VALUE
374
*/
375
_.rest = function(array, opt_n) {};
376
377
/**
378
* @param {Array.<VALUE>} array
379
* @param {number=} opt_n
380
* @return {!Array.<VALUE>}
381
* @template VALUE
382
*/
383
_.tail = function(array, opt_n) {};
384
385
/**
386
* @param {Array.<VALUE>} array
387
* @param {number=} opt_n
388
* @return {!Array.<VALUE>}
389
* @template VALUE
390
*/
391
_.drop = function(array, opt_n) {};
392
393
/**
394
* @param {!Array.<VALUE>} array
395
* @return {!Array.<!VALUE>}
396
* @template VALUE
397
*/
398
_.compact = function(array) {};
399
400
/**
401
* @param {Array} array
402
* @param {boolean=} opt_shallow
403
* @return {!Array}
404
*/
405
_.flatten = function(array, opt_shallow) {};
406
407
/**
408
* @param {!Array.<VALUE>} array
409
* @param {...VALUE} var_args
410
* @return {!Array.<VALUE>}
411
* @template VALUE
412
*/
413
_.without = function(array, var_args) {};
414
415
/**
416
* @param {...Array} arrays
417
* @return {!Array}
418
*/
419
_.union = function(arrays) {};
420
421
/**
422
* @param {...Array} arrays
423
* @return {!Array}
424
*/
425
_.intersection = function(arrays) {};
426
427
/**
428
* @param {Array} array
429
* @param {...Array} arrays
430
* @return {!Array}
431
*/
432
_.difference = function(array, arrays) {};
433
434
/**
435
* @param {!Array.<VALUE>} array
436
* @param {boolean=} opt_isSorted
437
* @param {(function(this:CONTEXT, VALUE, ?, ?) : RETURN)=} opt_iterator
438
* @param {CONTEXT=} opt_context
439
* @return {!Array.<RETURN>}
440
* @template CONTEXT, VALUE, RETURN
441
*/
442
_.uniq = function(array, opt_isSorted, opt_iterator, opt_context) {};
443
444
/**
445
* @param {!Array.<VALUE>} array
446
* @param {boolean=} opt_isSorted
447
* @param {(function(this:CONTEXT, VALUE, ?, ?) : RETURN)=} opt_iterator
448
* @param {CONTEXT=} opt_context
449
* @return {!Array.<RETURN>}
450
* @template CONTEXT, VALUE, RETURN
451
*/
452
_.unique = function(array, opt_isSorted, opt_iterator, opt_context) {};
453
454
/**
455
* @param {...Array} arrays
456
* @return {!Array}
457
*/
458
_.zip = function(arrays) {};
459
460
/**
461
* @param {!Array} list
462
* @param {Array=} opt_values
463
* @return {!Object}
464
*/
465
_.object = function(list, opt_values) {};
466
467
/**
468
* @param {Array} array
469
* @param {*} item
470
* @param {boolean=} opt_isSorted
471
* @return {number}
472
*/
473
_.indexOf = function(array, item, opt_isSorted) {};
474
475
/**
476
* @param {Array} array
477
* @param {*} item
478
* @param {number=} opt_fromindex
479
* @return {number}
480
*/
481
_.lastIndexOf = function(array, item, opt_fromindex) {};
482
483
/**
484
* @param {Array.<VALUE>} list
485
* @param {VALUE} obj
486
* @param {(function(this:CONTEXT, VALUE) : ?)=} opt_iterator
487
* @param {CONTEXT=} opt_context
488
* @return {number}
489
* @template CONTEXT, VALUE
490
*/
491
_.sortedIndex = function(list, obj, opt_iterator, opt_context) {};
492
493
/**
494
* @param {number} start
495
* @param {number=} opt_stop
496
* @param {number=} opt_step
497
* @return {!Array.<number>}
498
*/
499
_.range = function(start, opt_stop, opt_step) {};
500
501
// Function (ahem) functions
502
503
/**
504
* @param {Object} obj
505
* @param {...string} methodNames
506
*/
507
_.bindAll = function(obj, methodNames) {};
508
509
/**
510
* @param {Function} func
511
* @param {...*} var_args
512
* @return {!Function}
513
*/
514
_.partial = function(func, var_args) {};
515
516
/**
517
* @param {Function} func
518
* @param {Function=} opt_hasher
519
*/
520
_.memoize = function(func, opt_hasher) {};
521
522
/**
523
* @param {Function} func
524
* @param {number} wait
525
* @param {...*} var_args
526
*/
527
_.delay = function(func, wait, var_args) {};
528
529
/**
530
* @param {Function} func
531
*/
532
_.defer = function(func) {};
533
534
/**
535
* @param {Function} func
536
* @param {number} wait
537
* @param {Object=} opt_options
538
* @return {!Function}
539
*/
540
_.throttle = function(func, wait, opt_options) {};
541
542
/**
543
* @param {Function} func
544
* @param {number} wait
545
* @param {boolean=} opt_immediate
546
* @return {!Function}
547
*/
548
_.debounce = function(func, wait, opt_immediate) {};
549
550
/**
551
* @param {Function} func
552
* @return {!Function}
553
*/
554
_.once = function(func) {};
555
556
/**
557
* @param {number} times
558
* @param {Function} func
559
* @return {!Function}
560
*/
561
_.after = function(times, func) {};
562
563
/**
564
* @param {Function} func
565
* @param {Function} wrapper
566
* @return {!Function}
567
*/
568
_.wrap = function(func, wrapper) {};
569
570
/**
571
* @param {...Function} funcs
572
* @return {!Function}
573
*/
574
_.compose = function(funcs) {};
575
576
// Object functions
577
578
/**
579
* @param {Object} obj
580
* @return {!Array.<string>}
581
*/
582
_.keys = function(obj) {};
583
584
/**
585
* @param {Object.<?, VALUE>} obj
586
* @return {!Array.<VALUE>}
587
* @template VALUE
588
*/
589
_.values = function(obj) {};
590
591
/**
592
* @param {Object} obj
593
* @return {!Array.<!Array>}
594
*/
595
_.pairs = function(obj) {};
596
597
/**
598
* @param {Object.<K, V>} obj
599
* @return {!Object.<V, K>}
600
* @template K, V
601
*/
602
_.invert = function(obj) {};
603
604
/**
605
* @param {Object} obj
606
* @return {!Array.<string>}
607
*/
608
_.functions = function(obj) {};
609
610
/**
611
* @param {Object} obj
612
* @return {!Array.<string>}
613
*/
614
_.methods = function(obj) {};
615
616
/**
617
* @param {Object} obj
618
* @param {...Object} objs
619
*/
620
_.extend = function(obj, objs) {};
621
622
/**
623
* @param {Object.<K, V>} obj
624
* @param {...K|Array.<K>} keys
625
* @return {Object.<K, V>}
626
* @template K, V
627
*/
628
_.pick = function(obj, keys) {};
629
630
/**
631
* @param {Object.<K, V>} obj
632
* @param {...string|Array.<string>} keys
633
* @return {Object.<K, V>}
634
* @template K, V
635
*/
636
_.omit = function(obj, keys) {};
637
638
/**
639
* @param {Object} obj
640
* @param {...Object} defs
641
*/
642
_.defaults = function(obj, defs) {};
643
644
/**
645
* @param {Object.<K, V>} obj
646
* @return {Object.<K, V>}
647
* @template K, V
648
*/
649
_.clone = function(obj) {};
650
651
/**
652
* @param {Object.<K, V>} obj
653
* @param {function(Object.<K, V>)} interceptor
654
* @return {Object.<K, V>} obj
655
* @template K, V
656
*/
657
_.tap = function(obj, interceptor) {};
658
659
/**
660
* @param {Object} obj
661
* @param {string} key
662
* @return {boolean}
663
*/
664
_.has = function(obj, key) {};
665
666
/**
667
* @param {Object} a
668
* @param {Object} b
669
* @return {boolean}
670
*/
671
_.isEqual = function(a, b) {};
672
673
/**
674
* @param {Object|Array|string} obj
675
* @return {boolean}
676
*/
677
_.isEmpty = function(obj) {};
678
679
/**
680
* @param {*} obj
681
* @return {boolean}
682
*/
683
_.isElement = function(obj) {};
684
685
/**
686
* @param {*} obj
687
* @return {boolean}
688
*/
689
_.isArray = function(obj) {};
690
691
/**
692
* @param {*} obj
693
* @return {boolean}
694
*/
695
_.isObject = function(obj) {};
696
697
/**
698
* @param {*} obj
699
* @return {boolean}
700
*/
701
_.isArguments = function(obj) {};
702
703
/**
704
* @param {*} obj
705
* @return {boolean}
706
*/
707
_.isFunction = function(obj) {};
708
709
/**
710
* @param {*} obj
711
* @return {boolean}
712
*/
713
_.isString = function(obj) {};
714
715
/**
716
* @param {*} obj
717
* @return {boolean}
718
*/
719
_.isNumber = function(obj) {};
720
721
/**
722
* @param {*} obj
723
* @return {boolean}
724
*/
725
_.isFinite = function(obj) {};
726
727
/**
728
* @param {*} obj
729
* @return {boolean}
730
*/
731
_.isBoolean = function(obj) {};
732
733
/**
734
* @param {*} obj
735
* @return {boolean}
736
*/
737
_.isDate = function(obj) {};
738
739
/**
740
* @param {*} obj
741
* @return {boolean}
742
*/
743
_.isRegExp = function(obj) {};
744
745
/**
746
* @param {*} obj
747
* @return {boolean}
748
*/
749
_.isNaN = function(obj) {};
750
751
/**
752
* @param {*} obj
753
* @return {boolean}
754
*/
755
_.isNull = function(obj) {};
756
757
/**
758
* @param {*} obj
759
* @return {boolean}
760
*/
761
_.isUndefined = function(obj) {};
762
763
// Utility functions
764
765
/**
766
* @return {_}
767
*/
768
_.noConflict = function() {};
769
770
/**
771
* @param {VALUE} value
772
* @return {VALUE}
773
* @template VALUE
774
*/
775
_.identity = function(value) {};
776
777
/**
778
* @param {number} n
779
* @param {Function} iterator
780
* @param {Object=} opt_context
781
* @return {Array}
782
*/
783
_.times = function(n, iterator, opt_context) {};
784
785
/**
786
* @param {number} min
787
* @param {number=} opt_max
788
* @return {number}
789
*/
790
_.random = function(min, opt_max) {};
791
792
/**
793
* @param {Object} obj
794
*/
795
_.mixin = function(obj) {};
796
797
/**
798
* @param {string=} opt_prefix
799
* @return {number|string}
800
*/
801
_.uniqueId = function(opt_prefix) {};
802
803
/**
804
* @param {string} s
805
* @return {string}
806
*/
807
_.escape = function(s) {};
808
809
/**
810
* @param {string} s
811
* @return {string}
812
*/
813
_.unescape = function(s) {};
814
815
/**
816
* @param {Object} obj
817
* @param {string|Function} property
818
* @return {*}
819
*/
820
_.result = function(obj, property) {};
821
822
/**
823
* @param {string} str
824
* @param {Object=} opt_data
825
* @param {Object=} opt_settings
826
*/
827
_.template = function(str, opt_data, opt_settings) {};
828
829
// Chaining functions
830
831
/**
832
* @param {Object} obj
833
* @return {Object}
834
*/
835
_.chain = function(obj) {};
836
837