UNPKG

google-closure-compiler

Version:

Check, compile, optimize and compress Javascript with Closure-Compiler

1,764 lines (1,527 loc) • 77.1 kB
/* * Copyright 2014 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 Definitions for ECMAScript 6 and later. * @see https://tc39.github.io/ecma262/ * @see https://www.khronos.org/registry/typedarray/specs/latest/ * @externs */ /** * Some es6 definitions: * Symbol, IIterableResult, Iterable, IteratorIterable, Iterator, * IteratorIterable moved to es3 file, because some base type requires them, and * we want to keep them together. If you add new externs related to those types * define them together in the es3 file. */ /** * TODO(b/142881197): TReturn and TNext are not yet used for anything. * https://github.com/google/closure-compiler/issues/3489 * @interface * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator * @extends {IteratorIterable<T, ?, *>} * @template T, TReturn, TNext */ function Generator() {} /** * @param {?=} opt_value * @return {!IIterableResult<T>} * @override */ Generator.prototype.next = function(opt_value) {}; /** * @param {T} value * @return {!IIterableResult<T>} */ Generator.prototype.return = function(value) {}; /** * @param {?} exception * @return {!IIterableResult<T>} */ Generator.prototype.throw = function(exception) {}; /** * @param {number} value * @return {number} * @nosideeffects */ Math.log10 = function(value) {}; /** * @param {number} value * @return {number} * @nosideeffects */ Math.log2 = function(value) {}; /** * @param {number} value * @return {number} * @nosideeffects */ Math.log1p = function(value) {}; /** * @param {number} value * @return {number} * @nosideeffects */ Math.expm1 = function(value) {}; /** * @param {number} value * @return {number} * @nosideeffects */ Math.cosh = function(value) {}; /** * @param {number} value * @return {number} * @nosideeffects */ Math.sinh = function(value) {}; /** * @param {number} value * @return {number} * @nosideeffects */ Math.tanh = function(value) {}; /** * @param {number} value * @return {number} * @nosideeffects */ Math.acosh = function(value) {}; /** * @param {number} value * @return {number} * @nosideeffects */ Math.asinh = function(value) {}; /** * @param {number} value * @return {number} * @nosideeffects */ Math.atanh = function(value) {}; /** * @param {number} value * @return {number} * @nosideeffects */ Math.trunc = function(value) {}; /** * @param {number} value * @return {number} * @nosideeffects */ Math.sign = function(value) {}; /** * @param {number} value * @return {number} * @nosideeffects */ Math.cbrt = function(value) {}; /** * @param {...number} var_args * @return {number} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/hypot */ Math.hypot = function(var_args) {}; /** * @param {number} value1 * @param {number} value2 * @return {number} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul */ Math.imul = function(value1, value2) {}; /** * @param {number} value * @return {number} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32 */ Math.clz32 = function(value) {}; /** * @param {number} value * @return {number} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround */ Math.fround = function(value) {}; /** * @param {*} a * @param {*} b * @return {boolean} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is */ Object.is = function(a, b) {}; /** * Returns a language-sensitive string representation of this number. * @param {(string|!Array<string>)=} opt_locales * @param {Object=} opt_options * @return {string} * @nosideeffects * @see https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.2.1 * @override */ Number.prototype.toLocaleString = function(opt_locales, opt_options) {}; /** * Returns the wrapped primitive value of this Number object. * @return {number} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/valueOf * @override */ Number.prototype.valueOf = function() {}; /** * NOTE: this is an ES2022 extern. * @param {number} index * @return {string} * @this {String|string} * @nosideeffects * @see https://tc39.github.io/ecma262/#sec-string.prototype.at */ String.prototype.at = function(index) {}; /** * Pads the end of the string so that it reaches the given length. * NOTE: this is an ES2017 (ES8) extern. * * @param {number} targetLength The target length. * @param {string=} opt_padString The string to pad with. * @this {String|string} * @return {string} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd */ String.prototype.padEnd = function(targetLength, opt_padString) {}; /** * Pads the start of the string so that it reaches the given length. * NOTE: this is an ES2017 (ES8) extern. * * @param {number} targetLength The target length. * @param {string=} opt_padString The string to pad with. * @this {String|string} * @return {string} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart */ String.prototype.padStart = function(targetLength, opt_padString) {}; /** * Repeats the string the given number of times. * * @param {number} count The number of times the string is repeated. * @this {String|string} * @return {string} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat */ String.prototype.repeat = function(count) {}; /** * @constructor * @extends {Array<string>} * @see http://www.ecma-international.org/ecma-262/6.0/#sec-gettemplateobject */ var ITemplateArray = function() {}; /** * @type {!Array<string>} */ ITemplateArray.prototype.raw; /** * @param {!ITemplateArray} template * @param {...*} var_args Substitution values. * @return {string} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw */ String.raw = function(template, var_args) {}; /** * @param {number} codePoint * @param {...number} var_args Additional codepoints * @return {string} */ String.fromCodePoint = function(codePoint, var_args) {}; /** * @param {number} index * @return {number} * @nosideeffects */ String.prototype.codePointAt = function(index) {}; /** * @param {string=} opt_form * @return {string} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize */ String.prototype.normalize = function(opt_form) {}; /** * @param {string} searchString * @param {number=} opt_position * @return {boolean} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith */ String.prototype.startsWith = function(searchString, opt_position) {}; /** * @param {!RegExp|string} searchValue * @param {?string|function(string, ...?):*} replacement * @return {string} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll */ String.prototype.replaceAll = function(searchValue, replacement) {}; /** * @param {string} searchString * @param {number=} opt_position * @return {boolean} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith */ String.prototype.endsWith = function(searchString, opt_position) {}; /** * @param {string} searchString * @param {number=} opt_position * @return {boolean} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes */ String.prototype.includes = function(searchString, opt_position) {}; /** * @this {String|string} * @return {string} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimStart */ String.prototype.trimStart = function() {}; /** * @this {String|string} * @return {string} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimEnd */ String.prototype.trimEnd = function() {}; /** * @this {String|string} * @param {!RegExp|string} regexp * @return {!IteratorIterable<!RegExpResult>} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/matchAll */ String.prototype.matchAll = function(regexp) {}; /** * @see http://dev.w3.org/html5/postmsg/ * @interface */ function Transferable() {} /** * @param {number} length The length in bytes * @constructor * @throws {Error} * @implements {Transferable} */ function ArrayBuffer(length) {} /** @type {number} */ ArrayBuffer.prototype.byteLength; /** * @param {number} begin * @param {number=} opt_end * @return {!ArrayBuffer} * @nosideeffects */ ArrayBuffer.prototype.slice = function(begin, opt_end) {}; /** * @param {*} arg * @return {boolean} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView */ ArrayBuffer.isView = function(arg) {}; /** * @constructor * @template TArrayBuffer (unused) */ function ArrayBufferView() {} /** @type {!ArrayBuffer} */ ArrayBufferView.prototype.buffer; /** @type {number} */ ArrayBufferView.prototype.byteOffset; /** @type {number} */ ArrayBufferView.prototype.byteLength; /** * @param {number} length The length in bytes * @constructor * @throws {Error} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer */ function SharedArrayBuffer(length) {} /** @type {number} */ SharedArrayBuffer.prototype.byteLength; /** * @param {number=} begin * @param {number=} end * @return {!SharedArrayBuffer} * @nosideeffects */ SharedArrayBuffer.prototype.slice = function(begin, end) {}; /** * @typedef {!ArrayBuffer|!ArrayBufferView} */ var BufferSource; /** * @typedef {!ArrayBuffer|!ArrayBufferView} */ var AllowSharedBufferSource; /** * @constructor * @implements {IArrayLike<number>} * @implements {Iterable<number>} * @extends {ArrayBufferView} * @template TArrayBuffer (unused) */ function TypedArray() {}; /** @const {number} */ TypedArray.prototype.BYTES_PER_ELEMENT; /** * NOTE: this is an ES2022 extern. * @param {number} index * @return {(number|undefined)} * @this {THIS} * @template THIS * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/at */ TypedArray.prototype.at = function(index) {}; /** * @param {number} target * @param {number} start * @param {number=} opt_end * @return {THIS} * @this {THIS} * @template THIS * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin */ TypedArray.prototype.copyWithin = function(target, start, opt_end) {}; /** * @return {!IteratorIterable<!Array<number>>} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/entries */ TypedArray.prototype.entries = function() {}; /** * @param {function(this:S, number, number, !TypedArray) : *} callback * @param {S=} opt_thisArg * @return {boolean} * @template S * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/every */ TypedArray.prototype.every = function(callback, opt_thisArg) {}; /** * @param {number} value * @param {number=} opt_begin * @param {number=} opt_end * @return {THIS} * @this {THIS} * @template THIS * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/fill */ TypedArray.prototype.fill = function(value, opt_begin, opt_end) {}; /** * @param {function(this:S, number, number, !TypedArray) : *} callback * @param {S=} opt_thisArg * @return {THIS} * @this {THIS} * @template THIS,S * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/filter */ TypedArray.prototype.filter = function(callback, opt_thisArg) {}; /** * @param {function(this:S, number, number, !TypedArray) : *} callback * @param {S=} opt_thisArg * @return {(number|undefined)} * @template S * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/find */ TypedArray.prototype.find = function(callback, opt_thisArg) {}; /** * @param {function(this:S, number, number, !TypedArray) : *} callback * @param {S=} opt_thisArg * @return {number} * @template S * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex */ TypedArray.prototype.findIndex = function(callback, opt_thisArg) {}; /** * @param {function(this:S, number, number, !TypedArray) : boolean} callback * @param {S=} opt_thisArg * @return {(number|undefined)} * @template S * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/findLast */ TypedArray.prototype.findLast = function(callback, opt_thisArg) {}; /** * @param {function(this:S, number, number, !TypedArray) : boolean} callback * @param {S=} opt_thisArg * @return {number} * @template S * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/findLastIndex */ TypedArray.prototype.findLastIndex = function(callback, opt_thisArg) {}; /** * @param {function(this:S, number, number, !TypedArray) : ?} callback * @param {S=} opt_thisArg * @return {undefined} * @template S * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/forEach */ TypedArray.prototype.forEach = function(callback, opt_thisArg) {}; /** * NOTE: this is an ES2016 (ES7) extern. * @param {number} searchElement * @param {number=} opt_fromIndex * @return {boolean} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/includes */ TypedArray.prototype.includes = function(searchElement, opt_fromIndex) {}; /** * @param {number} searchElement * @param {number=} opt_fromIndex * @return {number} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf */ TypedArray.prototype.indexOf = function(searchElement, opt_fromIndex) {}; /** * @param {string=} opt_separator * @return {string} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/join */ TypedArray.prototype.join = function(opt_separator) {}; /** * @return {!IteratorIterable<number>} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/keys */ TypedArray.prototype.keys = function() {}; /** * @param {number} searchElement * @param {number=} opt_fromIndex * @return {number} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf */ TypedArray.prototype.lastIndexOf = function(searchElement, opt_fromIndex) {}; /** @type {number} */ TypedArray.prototype.length; /** * @param {function(this:S, number, number, !TypedArray) : number} callback * @param {S=} opt_thisArg * @return {THIS} * @this {THIS} * @template THIS,S * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/map */ TypedArray.prototype.map = function(callback, opt_thisArg) {}; /** * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} * callback * @param {INIT=} opt_initialValue * @return {RET} * @template INIT,RET * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduce */ TypedArray.prototype.reduce = function(callback, opt_initialValue) {}; /** * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} * callback * @param {INIT=} opt_initialValue * @return {RET} * @template INIT,RET * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight */ TypedArray.prototype.reduceRight = function(callback, opt_initialValue) {}; /** * @return {THIS} * @this {THIS} * @template THIS * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reverse */ TypedArray.prototype.reverse = function() {}; /** * @param {!ArrayBufferView|!Array<number>} array * @param {number=} opt_offset * @return {undefined} * @throws {!RangeError} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set */ TypedArray.prototype.set = function(array, opt_offset) {}; /** * @param {number=} opt_begin * @param {number=} opt_end * @return {THIS} * @this {THIS} * @template THIS * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice */ TypedArray.prototype.slice = function(opt_begin, opt_end) {}; /** * @param {function(this:S, number, number, !TypedArray) : *} callback * @param {S=} opt_thisArg * @return {boolean} * @template S * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/some */ TypedArray.prototype.some = function(callback, opt_thisArg) {}; /** * @param {(function(number, number) : number)=} opt_compareFunction * @return {THIS} * @this {THIS} * @template THIS * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/sort */ TypedArray.prototype.sort = function(opt_compareFunction) {}; /** * @param {number} begin * @param {number=} opt_end * @return {THIS} * @this {THIS} * @template THIS * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray */ TypedArray.prototype.subarray = function(begin, opt_end) {}; /** * @return {!IteratorIterable<number>} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/values */ TypedArray.prototype.values = function() {}; /** * NOTE: this is an ES2023 extern. * @return {THIS} * @this {THIS} * @template THIS * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toReversed */ TypedArray.prototype.toReversed = function() {}; /** * NOTE: this is an ES2023 extern. * @param {function(number, number): number=} compareFn * @return {THIS} * @this {THIS} * @template THIS * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toSorted */ TypedArray.prototype.toSorted = function(compareFn) {}; /** * NOTE: this is an ES2023 extern. * @param {number} index * @param {number} value * @return {THIS} * @this {THIS} * @template THIS * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/with */ TypedArray.prototype.with = function(index, value) {}; /** * @return {string} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toLocaleString * @override */ TypedArray.prototype.toLocaleString = function() {}; /** * @return {string} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toString * @override */ TypedArray.prototype.toString = function() {}; /** @override */ TypedArray.prototype[Symbol.iterator] = function() {}; /** * @param {number|ArrayBufferView|Array<number>|ArrayBuffer|SharedArrayBuffer} * length or array or buffer * NOTE: We require that at least this first argument be present even though * the ECMAScript spec allows it to be absent, because this is better * for readability and detection of programmer errors. * @param {number=} opt_byteOffset * @param {number=} opt_length * @template TArrayBuffer (unused) * @constructor * @extends {TypedArray} * @throws {Error} * @modifies {arguments} If the user passes a backing array, then indexed * accesses will modify the backing array. JSCompiler does not model * this well. In other words, if you have: * <code> * var x = new ArrayBuffer(1); * var y = new Int8Array(x); * y[0] = 2; * </code> * JSCompiler will not recognize that the last assignment modifies x. * We workaround this by marking all these arrays as @modifies {arguments}, * to introduce the possibility that x aliases y. */ function Int8Array(length, opt_byteOffset, opt_length) {} /** @const {number} */ Int8Array.BYTES_PER_ELEMENT; /** * @param {string|!IArrayLike<number>|!Iterable<number>} source * @param {function(this:S, ?, number): number=} mapFn * @param {S=} thisArg * @template S * @return {!Int8Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from */ Int8Array.from = function(source, mapFn, thisArg) {}; /** * @param {...number} var_args * @return {!Int8Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of */ Int8Array.of = function(var_args) {}; /** * @param {number|ArrayBufferView|Array<number>|ArrayBuffer|SharedArrayBuffer} * length or array or buffer * NOTE: We require that at least this first argument be present even though * the ECMAScript spec allows it to be absent, because this is better * for readability and detection of programmer errors. * @param {number=} opt_byteOffset * @param {number=} opt_length * @template TArrayBuffer (unused) * @constructor * @extends {TypedArray} * @throws {Error} * @modifies {arguments} */ function Uint8Array(length, opt_byteOffset, opt_length) {} /** @const {number} */ Uint8Array.BYTES_PER_ELEMENT; /** * @param {string|!IArrayLike<number>|!Iterable<number>} source * @param {function(this:S, ?, number): number=} mapFn * @param {S=} thisArg * @template S * @return {!Uint8Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from */ Uint8Array.from = function(source, mapFn, thisArg) {}; /** * @param {...number} var_args * @return {!Uint8Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of */ Uint8Array.of = function(var_args) {}; /** * @param {number|ArrayBufferView|Array<number>|ArrayBuffer|SharedArrayBuffer} * length or array or buffer * NOTE: We require that at least this first argument be present even though * the ECMAScript spec allows it to be absent, because this is better * for readability and detection of programmer errors. * @param {number=} opt_byteOffset * @param {number=} opt_length * @template TArrayBuffer (unused) * @constructor * @extends {TypedArray} * @throws {Error} * @modifies {arguments} */ function Uint8ClampedArray(length, opt_byteOffset, opt_length) {} /** @const {number} */ Uint8ClampedArray.BYTES_PER_ELEMENT; /** * @param {string|!IArrayLike<number>|!Iterable<number>} source * @param {function(this:S, ?, number): number=} mapFn * @param {S=} thisArg * @template S * @return {!Uint8ClampedArray} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from */ Uint8ClampedArray.from = function(source, mapFn, thisArg) {}; /** * @param {...number} var_args * @return {!Uint8ClampedArray} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of */ Uint8ClampedArray.of = function(var_args) {}; /** * @typedef {Uint8ClampedArray} * @deprecated CanvasPixelArray has been replaced by Uint8ClampedArray * in the latest spec. * @see http://www.w3.org/TR/2dcontext/#imagedata */ var CanvasPixelArray; /** * @param {number|ArrayBufferView|Array<number>|ArrayBuffer|SharedArrayBuffer} * length or array or buffer * NOTE: We require that at least this first argument be present even though * the ECMAScript spec allows it to be absent, because this is better * for readability and detection of programmer errors. * @param {number=} opt_byteOffset * @param {number=} opt_length * @template TArrayBuffer (unused) * @constructor * @extends {TypedArray} * @throws {Error} * @modifies {arguments} */ function Int16Array(length, opt_byteOffset, opt_length) {} /** @const {number} */ Int16Array.BYTES_PER_ELEMENT; /** * @param {string|!IArrayLike<number>|!Iterable<number>} source * @param {function(this:S, ?, number): number=} mapFn * @param {S=} thisArg * @template S * @return {!Int16Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from */ Int16Array.from = function(source, mapFn, thisArg) {}; /** * @param {...number} var_args * @return {!Int16Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of */ Int16Array.of = function(var_args) {}; /** * @param {number|ArrayBufferView|Array<number>|ArrayBuffer|SharedArrayBuffer} * length or array or buffer * NOTE: We require that at least this first argument be present even though * the ECMAScript spec allows it to be absent, because this is better * for readability and detection of programmer errors. * @param {number=} opt_byteOffset * @param {number=} opt_length * @template TArrayBuffer (unused) * @constructor * @extends {TypedArray} * @throws {Error} * @modifies {arguments} */ function Uint16Array(length, opt_byteOffset, opt_length) {} /** @const {number} */ Uint16Array.BYTES_PER_ELEMENT; /** * @param {string|!IArrayLike<number>|!Iterable<number>} source * @param {function(this:S, ?, number): number=} mapFn * @param {S=} thisArg * @template S * @return {!Uint16Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from */ Uint16Array.from = function(source, mapFn, thisArg) {}; /** * @param {...number} var_args * @return {!Uint16Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of */ Uint16Array.of = function(var_args) {}; /** * @param {number|ArrayBufferView|Array<number>|ArrayBuffer|SharedArrayBuffer} * length or array or buffer * NOTE: We require that at least this first argument be present even though * the ECMAScript spec allows it to be absent, because this is better * for readability and detection of programmer errors. * @param {number=} opt_byteOffset * @param {number=} opt_length * @template TArrayBuffer (unused) * @constructor * @extends {TypedArray} * @throws {Error} * @modifies {arguments} */ function Int32Array(length, opt_byteOffset, opt_length) {} /** @const {number} */ Int32Array.BYTES_PER_ELEMENT; /** * @param {string|!IArrayLike<number>|!Iterable<number>} source * @param {function(this:S, ?, number): number=} mapFn * @param {S=} thisArg * @template S * @return {!Int32Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from */ Int32Array.from = function(source, mapFn, thisArg) {}; /** * @param {...number} var_args * @return {!Int32Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of */ Int32Array.of = function(var_args) {}; /** * @param {number|ArrayBufferView|Array<number>|ArrayBuffer|SharedArrayBuffer} * length or array or buffer * NOTE: We require that at least this first argument be present even though * the ECMAScript spec allows it to be absent, because this is better * for readability and detection of programmer errors. * @param {number=} opt_byteOffset * @param {number=} opt_length * @template TArrayBuffer (unused) * @constructor * @extends {TypedArray} * @throws {Error} * @modifies {arguments} */ function Uint32Array(length, opt_byteOffset, opt_length) {} /** @const {number} */ Uint32Array.BYTES_PER_ELEMENT; /** * @param {string|!IArrayLike<number>|!Iterable<number>} source * @param {function(this:S, ?, number): number=} mapFn * @param {S=} thisArg * @template S * @return {!Uint32Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from */ Uint32Array.from = function(source, mapFn, thisArg) {}; /** * @param {...number} var_args * @return {!Uint32Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of */ Uint32Array.of = function(var_args) {}; /** * @param {number|ArrayBufferView|Array<number>|ArrayBuffer|SharedArrayBuffer} * length or array or buffer * NOTE: We require that at least this first argument be present even though * the ECMAScript spec allows it to be absent, because this is better * for readability and detection of programmer errors. * @param {number=} opt_byteOffset * @param {number=} opt_length * @template TArrayBuffer (unused) * @constructor * @extends {TypedArray} * @throws {Error} * @modifies {arguments} */ function Float32Array(length, opt_byteOffset, opt_length) {} /** @const {number} */ Float32Array.BYTES_PER_ELEMENT; /** * @param {string|!IArrayLike<number>|!Iterable<number>} source * @param {function(this:S, ?, number): number=} mapFn * @param {S=} thisArg * @template S * @return {!Float32Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from */ Float32Array.from = function(source, mapFn, thisArg) {}; /** * @param {...number} var_args * @return {!Float32Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of */ Float32Array.of = function(var_args) {}; /** * @param {number|ArrayBufferView|Array<number>|ArrayBuffer|SharedArrayBuffer} * length or array or buffer * NOTE: We require that at least this first argument be present even though * the ECMAScript spec allows it to be absent, because this is better * for readability and detection of programmer errors. * @param {number=} opt_byteOffset * @param {number=} opt_length * @template TArrayBuffer (unused) * @constructor * @extends {TypedArray} * @throws {Error} * @modifies {arguments} */ function Float64Array(length, opt_byteOffset, opt_length) {} /** @const {number} */ Float64Array.BYTES_PER_ELEMENT; /** * @param {string|!IArrayLike<number>|!Iterable<number>} source * @param {function(this:S, ?, number): number=} mapFn * @param {S=} thisArg * @template S * @return {!Float64Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from */ Float64Array.from = function(source, mapFn, thisArg) {}; /** * @param {...number} var_args * @return {!Float64Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of */ Float64Array.of = function(var_args) {}; /** * @param {number|ArrayBufferView|Array<bigint>|ArrayBuffer|SharedArrayBuffer} * lengthOrArrayOrBuffer * NOTE: We require that at least this first argument be present even though * the ECMAScript spec allows it to be absent, because this is better * for readability and detection of programmer errors. * @param {number=} byteOffset * @param {number=} bufferLength * @template TArrayBuffer (unused) * @constructor * @extends {TypedArray} * @throws {Error} * @modifies {arguments} */ function BigInt64Array(lengthOrArrayOrBuffer, byteOffset, bufferLength) {} /** @const {number} */ BigInt64Array.BYTES_PER_ELEMENT; /** * @param {string|!IArrayLike<bigint>|!Iterable<bigint>} source * @param {function(this:S, ?, number): bigint=} mapFn * @param {S=} thisArg * @template S * @return {!BigInt64Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from */ BigInt64Array.from = function(source, mapFn, thisArg) {}; /** * @param {...bigint} var_args * @return {!BigInt64Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of */ BigInt64Array.of = function(var_args) {}; /** * @param {(function(bigint, bigint) : number)=} opt_compareFunction * @return {THIS} * @this {THIS} * @template THIS * @override * @suppress {checkTypes} The types are specialized in this override. * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/sort */ BigInt64Array.prototype.sort = function(opt_compareFunction) {}; /** * NOTE: this is an ES2023 extern. * @param {function(bigint, bigint): number=} compareFn * @return {!BigInt64Array} * @nosideeffects * @override * @suppress {checkTypes} The types are specialized in this override. * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toSorted */ BigInt64Array.prototype.toSorted = function(compareFn) {}; /** * NOTE: this is an ES2023 extern. * @param {number} index * @param {bigint} value * @return {!BigInt64Array} * @nosideeffects * @override * @suppress {checkTypes} The types are specialized in this override. * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/with */ BigInt64Array.prototype.with = function(index, value) {}; /** * @param {number|ArrayBufferView|Array<bigint>|ArrayBuffer|SharedArrayBuffer} * lengthOrArrayOrBuffer * NOTE: We require that at least this first argument be present even though * the ECMAScript spec allows it to be absent, because this is better * for readability and detection of programmer errors. * @param {number=} byteOffset * @param {number=} bufferLength * @template TArrayBuffer (unused) * @constructor * @extends {TypedArray} * @throws {Error} * @modifies {arguments} */ function BigUint64Array(lengthOrArrayOrBuffer, byteOffset, bufferLength) {} /** @const {number} */ BigUint64Array.BYTES_PER_ELEMENT; /** * @param {string|!IArrayLike<bigint>|!Iterable<bigint>} source * @param {function(this:S, ?, number): bigint=} mapFn * @param {S=} thisArg * @template S * @return {!BigUint64Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from */ BigUint64Array.from = function(source, mapFn, thisArg) {}; /** * @param {...bigint} var_args * @return {!BigUint64Array} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of */ BigUint64Array.of = function(var_args) {}; /** * @param {(function(bigint, bigint) : number)=} opt_compareFunction * @return {THIS} * @this {THIS} * @template THIS * @override * @suppress {checkTypes} The types are specialized in this override. * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/sort */ BigUint64Array.prototype.sort = function(opt_compareFunction) {}; /** * NOTE: this is an ES2023 extern. * @param {function(bigint, bigint): number=} compareFn * @return {!BigUint64Array} * @nosideeffects * @override * @suppress {checkTypes} The types are specialized in this override. * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toSorted */ BigUint64Array.prototype.toSorted = function(compareFn) {}; /** * NOTE: this is an ES2023 extern. * @param {number} index * @param {bigint} value * @return {!BigUint64Array} * @nosideeffects * @override * @suppress {checkTypes} The types are specialized in this override. * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/with */ BigUint64Array.prototype.with = function(index, value) {}; /** * @param {ArrayBuffer|SharedArrayBuffer} buffer * @param {number=} opt_byteOffset * @param {number=} opt_byteLength * @constructor * @extends {ArrayBufferView} * @throws {Error} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays/DataView */ function DataView(buffer, opt_byteOffset, opt_byteLength) {} /** * @param {number} byteOffset * @return {number} * @throws {Error} */ DataView.prototype.getInt8 = function(byteOffset) {}; /** * @param {number} byteOffset * @return {number} * @throws {Error} */ DataView.prototype.getUint8 = function(byteOffset) {}; /** * @param {number} byteOffset * @param {boolean=} opt_littleEndian * @return {number} * @throws {Error} */ DataView.prototype.getInt16 = function(byteOffset, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {boolean=} opt_littleEndian * @return {number} * @throws {Error} */ DataView.prototype.getUint16 = function(byteOffset, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {boolean=} opt_littleEndian * @return {number} * @throws {Error} */ DataView.prototype.getInt32 = function(byteOffset, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {boolean=} opt_littleEndian * @return {number} * @throws {Error} */ DataView.prototype.getUint32 = function(byteOffset, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {boolean=} opt_littleEndian * @return {number} * @throws {Error} */ DataView.prototype.getFloat32 = function(byteOffset, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {boolean=} opt_littleEndian * @return {number} * @throws {Error} */ DataView.prototype.getFloat64 = function(byteOffset, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {boolean=} littleEndian * @return {bigint} * @throws {Error} */ DataView.prototype.getBigInt64 = function(byteOffset, littleEndian) {}; /** * @param {number} byteOffset * @param {boolean=} littleEndian * @return {bigint} * @throws {Error} */ DataView.prototype.getBigUint64 = function(byteOffset, littleEndian) {}; /** * @param {number} byteOffset * @param {number} value * @throws {Error} * @return {undefined} */ DataView.prototype.setInt8 = function(byteOffset, value) {}; /** * @param {number} byteOffset * @param {number} value * @throws {Error} * @return {undefined} */ DataView.prototype.setUint8 = function(byteOffset, value) {}; /** * @param {number} byteOffset * @param {number} value * @param {boolean=} opt_littleEndian * @throws {Error} * @return {undefined} */ DataView.prototype.setInt16 = function(byteOffset, value, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {number} value * @param {boolean=} opt_littleEndian * @throws {Error} * @return {undefined} */ DataView.prototype.setUint16 = function(byteOffset, value, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {number} value * @param {boolean=} opt_littleEndian * @throws {Error} * @return {undefined} */ DataView.prototype.setInt32 = function(byteOffset, value, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {number} value * @param {boolean=} opt_littleEndian * @throws {Error} * @return {undefined} */ DataView.prototype.setUint32 = function(byteOffset, value, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {number} value * @param {boolean=} opt_littleEndian * @throws {Error} * @return {undefined} */ DataView.prototype.setFloat32 = function( byteOffset, value, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {number} value * @param {boolean=} opt_littleEndian * @throws {Error} * @return {undefined} */ DataView.prototype.setFloat64 = function( byteOffset, value, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {bigint} value * @param {boolean=} littleEndian * @throws {Error} * @return {undefined} */ DataView.prototype.setBigInt64 = function(byteOffset, value, littleEndian) {}; /** * @param {number} byteOffset * @param {bigint} value * @param {boolean=} littleEndian * @throws {Error} * @return {undefined} */ DataView.prototype.setBigUint64 = function(byteOffset, value, littleEndian) {}; /** * @see https://github.com/promises-aplus/promises-spec * @typedef {{then: ?}} */ var Thenable; /** * This is not an official DOM interface. It is used to add generic typing * and respective type inference where available. * {@see goog.Thenable} inherits from this making all promises * interoperate. * @record * @struct * @template TYPE */ function IThenable() {} /** * @param {?(function(TYPE):VALUE)=} opt_onFulfilled * @param {?(function(*): *)=} opt_onRejected * @return {RESULT} * @template VALUE * * When a `Thenable` is fulfilled or rejected with another `Thenable`, the * payload of the second is used as the payload of the first. * * @template RESULT := type('IThenable', * cond(isUnknown(VALUE), unknown(), * mapunion(VALUE, (V) => * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'), * templateTypeOf(V, 0), * cond(sub(V, 'Thenable'), * unknown(), * V))))) * =: */ IThenable.prototype.then = function(opt_onFulfilled, opt_onRejected) {}; /** * NOTE: For consistency with TypeScript, prefer `PromiseLike` over `IThenable`. * @record * @struct * @template TYPE * @extends {IThenable<TYPE>} */ function PromiseLike() {} /** * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise * @param {function( * function((TYPE|IThenable<TYPE>|Thenable|null)=), * function(*=))} resolver * @constructor * @implements {PromiseLike<TYPE>} * @template TYPE */ function Promise(resolver) {} /** * @param {VALUE=} opt_value * @return {RESULT} * @template VALUE * @template RESULT := type('Promise', * cond(isUnknown(VALUE), unknown(), * mapunion(VALUE, (V) => * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'), * templateTypeOf(V, 0), * cond(sub(V, 'Thenable'), * unknown(), * V))))) * =: */ Promise.resolve = function(opt_value) {}; /** * @param {*=} opt_error * @return {!Promise<?>} */ Promise.reject = function(opt_error) {}; /** * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise * @param {!Iterable<VALUE>} iterable * @return {!Promise<!Array<RESULT>>} * @template VALUE * @template RESULT := mapunion(VALUE, (V) => * cond(isUnknown(V), * unknown(), * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'), * templateTypeOf(V, 0), * cond(sub(V, 'Thenable'), unknown(), V)))) * =: */ Promise.all = function(iterable) {}; /** * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise * @param {!Iterable<VALUE>} iterable * @return {!Promise<RESULT>} * @template VALUE * @template RESULT := mapunion(VALUE, (V) => * cond(isUnknown(V), * unknown(), * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'), * templateTypeOf(V, 0), * cond(sub(V, 'Thenable'), unknown(), V)))) * =: */ Promise.any = function(iterable) {}; /** * Record type representing a single element of the array value one gets from * Promise.allSettled. * * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled * @record * @template VALUE */ Promise.AllSettledResultElement = function() {}; /** * 'fulfilled' or 'rejected' to indicate the final state of the corresponding * Promise. * @type {string} */ Promise.AllSettledResultElement.prototype.status; /** * Exists only if the status field is 'fulfilled' * @type {VALUE|undefined} */ Promise.AllSettledResultElement.prototype.value; /** * Exists only if the status field is 'rejected' * @type {*|undefined} */ Promise.AllSettledResultElement.prototype.reason; /** * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled * @param {!Iterable<VALUE>} iterable * @return {!Promise<!Array<!Promise.AllSettledResultElement<RESULT>>>} * @template VALUE * @template RESULT := mapunion(VALUE, (V) => * cond(isUnknown(V), * unknown(), * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'), * templateTypeOf(V, 0), * cond(sub(V, 'Thenable'), unknown(), V)))) * =: */ Promise.allSettled = function(iterable) {}; /** * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise * @param {!Iterable<VALUE>} iterable * @return {!Promise<RESULT>} * @template VALUE * @template RESULT := mapunion(VALUE, (V) => * cond(isUnknown(V), * unknown(), * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'), * templateTypeOf(V, 0), * cond(sub(V, 'Thenable'), unknown(), V)))) * =: */ Promise.race = function(iterable) {}; /** * Record type representing the return of Promise.withResolvers. * * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers * @record * @template VALUE */ Promise.PromiseWithResolvers = function() {}; /** * @type {!Promise<VALUE>} */ Promise.PromiseWithResolvers.prototype.promise; /** * @type {function((VALUE|IThenable<VALUE>|Thenable)=)} */ Promise.PromiseWithResolvers.prototype.resolve; /** * @type {function(*=)} */ Promise.PromiseWithResolvers.prototype.reject; /** * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers * @return {!Promise.PromiseWithResolvers<VALUE>} * @template VALUE */ Promise.withResolvers = function() {}; /** * @param {?(function(this:void, TYPE):VALUE)=} opt_onFulfilled * @param {?(function(this:void, *): *)=} opt_onRejected * @return {RESULT} * @template VALUE * * When a `Thenable` is fulfilled or rejected with another `Thenable`, the * payload of the second is used as the payload of the first. * * @template RESULT := type('Promise', * cond(isUnknown(VALUE), unknown(), * mapunion(VALUE, (V) => * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'), * templateTypeOf(V, 0), * cond(sub(V, 'Thenable'), * unknown(), * V))))) * =: * @override */ Promise.prototype.then = function(opt_onFulfilled, opt_onRejected) {}; /** * @param {function(*):VALUE} onRejected * @return {!Promise<TYPE|RESULT>} A Promise of the original type or a possibly * a different type depending on whether the parent promise was rejected. * * @template VALUE * * When a `Thenable` is rejected with another `Thenable`, the payload of the * second is used as the payload of the first. * * @template RESULT := cond( * isUnknown(VALUE), * unknown(), * mapunion(VALUE, (V) => * cond( * isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'), * templateTypeOf(V, 0), * cond( * sub(V, 'Thenable'), * unknown(), * V)))) * =: */ Promise.prototype.catch = function(onRejected) {}; /** * @param {function()} callback * @return {!Promise<TYPE>} */ Promise.prototype.finally = function(callback) {}; /** * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of * @param {...T} var_args * @return {!Array<T>} * @template T */ Array.of = function(var_args) {}; /** * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from * @param {string|!IArrayLike<T>|!Iterable<T>} arrayLike * @param {function(this:S, (string|T), number): R=} opt_mapFn * @param {S=} opt_this * @return {!Array<R>} * @template T,S,R */ Array.from = function(arrayLike, opt_mapFn, opt_this) {}; /** * @override * @return {!IteratorIterable<number>} */ Array.prototype.keys; /** * @override * @return {!IteratorIterable<T>} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values */ Array.prototype.values; /** * @override * @return {!IteratorIterable<!Array<number|T>>} Iterator of [key, value] pairs. */ Array.prototype.entries; /** * @override * @param {function(this:S, T, number, !Array<T>): *} predicateFn * @param {S=} opt_this * @return {T|undefined} * @this {IArrayLike<T>|string} * @template T,S * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.find */ Array.prototype.find = function(predicateFn, opt_this) {}; /** * @override * @param {function(this:S, T, number, !Array<T>): *} predicateFn * @param {S=} opt_this * @return {number} * @this {IArrayLike<T>|string} * @template T,S * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.findindex */ Array.pro