/* * 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. * @see http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts * @see https://www.khronos.org/registry/typedarray/specs/latest/ * @externs */ // TODO(johnlenz): symbol should be a primitive type. /** @typedef {?} */ var symbol; /** * @param {string} description * @return {symbol} */ function Symbol(description) {} /** @const {symbol} */ Symbol.iterator; /** * @interface * @template VALUE */ function Iterable() {} // TODO(johnlenz): remove this when the compiler understands "symbol" natively /** * @return {Iterator.} * @suppress {externsValidation} */ Iterable.prototype[Symbol.iterator] = function() {}; // TODO(johnlenz): Iterator should be a templated record type. /** * @interface * @template VALUE * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol */ function Iterator() {} /** * @param {VALUE=} value * @return {{value:VALUE, done:boolean}} */ Iterator.prototype.next; /** * @constructor * @see http://people.mozilla.org/~jorendorff/es6-draft.html#sec-generator-objects * @implements {Iterator} * @template VALUE */ var Generator = function() {}; /** * @param {?=} opt_value * @return {{value:VALUE, done:boolean}} * @override */ Generator.prototype.next = function(opt_value) {}; /** * @param {VALUE} value * @return {{value:VALUE, done:boolean}} */ Generator.prototype.return = function(value) {}; /** * @param {?} exception * @return {{value:VALUE, done:boolean}} */ Generator.prototype.throw = function(exception) {}; // TODO(johnlenz): Array should be Iterable. /** * @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} value1 * @param {...number} var_args * @return {number} * @nosideeffects * @see http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.hypot */ Math.hypot = function(value1, var_args) {}; /** * @param {*} a * @param {*} b * @return {boolean} * @see http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.is */ Object.is; /** * Returns a language-sensitive string representation of this number. * @param {(string|!Array)=} 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) {}; /** * @see http://dev.w3.org/html5/postmsg/ * @interface */ function Transferable() {} /** * @param {number} length The length in bytes * @constructor * @noalias * @throws {Error} * @nosideeffects * @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) {}; /** * @constructor * @noalias */ function ArrayBufferView() {} /** @type {!ArrayBuffer} */ ArrayBufferView.prototype.buffer; /** @type {number} */ ArrayBufferView.prototype.byteOffset; /** @type {number} */ ArrayBufferView.prototype.byteLength; /** * @param {number|ArrayBufferView|Array.|ArrayBuffer} length or array * or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @extends {ArrayBufferView} * @constructor * @noalias * @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: * * var x = new ArrayBuffer(1); * var y = new Int8Array(x); * y[0] = 2; * * 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) {} /** @type {number} */ Int8Array.BYTES_PER_ELEMENT; /** @type {number} */ Int8Array.prototype.BYTES_PER_ELEMENT; /** @type {number} */ Int8Array.prototype.length; /** * @param {ArrayBufferView|Array.} array * @param {number=} opt_offset */ Int8Array.prototype.set = function(array, opt_offset) {}; /** * @param {number} begin * @param {number=} opt_end * @return {!Int8Array} * @nosideeffects */ Int8Array.prototype.subarray = function(begin, opt_end) {}; /** * @param {number|ArrayBufferView|Array.|ArrayBuffer} length or array * or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @extends {ArrayBufferView} * @constructor * @noalias * @throws {Error} * @modifies {arguments} */ function Uint8Array(length, opt_byteOffset, opt_length) {} /** @type {number} */ Uint8Array.BYTES_PER_ELEMENT; /** @type {number} */ Uint8Array.prototype.BYTES_PER_ELEMENT; /** @type {number} */ Uint8Array.prototype.length; /** * @param {ArrayBufferView|Array.} array * @param {number=} opt_offset */ Uint8Array.prototype.set = function(array, opt_offset) {}; /** * @param {number} begin * @param {number=} opt_end * @return {!Uint8Array} * @nosideeffects */ Uint8Array.prototype.subarray = function(begin, opt_end) {}; /** * @param {number|ArrayBufferView|Array.|ArrayBuffer} length or array * or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @extends {ArrayBufferView} * @constructor * @noalias * @throws {Error} * @modifies {arguments} */ function Uint8ClampedArray(length, opt_byteOffset, opt_length) {} /** @type {number} */ Uint8ClampedArray.BYTES_PER_ELEMENT; /** @type {number} */ Uint8ClampedArray.prototype.BYTES_PER_ELEMENT; /** @type {number} */ Uint8ClampedArray.prototype.length; /** * @param {ArrayBufferView|Array.} array * @param {number=} opt_offset */ Uint8ClampedArray.prototype.set = function(array, opt_offset) {}; /** * @param {number} begin * @param {number=} opt_end * @return {!Uint8ClampedArray} * @nosideeffects */ Uint8ClampedArray.prototype.subarray = function(begin, opt_end) {}; /** * @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.|ArrayBuffer} length or array * or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @extends {ArrayBufferView} * @constructor * @noalias * @throws {Error} * @modifies {arguments} */ function Int16Array(length, opt_byteOffset, opt_length) {} /** @type {number} */ Int16Array.BYTES_PER_ELEMENT; /** @type {number} */ Int16Array.prototype.BYTES_PER_ELEMENT; /** @type {number} */ Int16Array.prototype.length; /** * @param {ArrayBufferView|Array.} array * @param {number=} opt_offset */ Int16Array.prototype.set = function(array, opt_offset) {}; /** * @param {number} begin * @param {number=} opt_end * @return {!Int16Array} * @nosideeffects */ Int16Array.prototype.subarray = function(begin, opt_end) {}; /** * @param {number|ArrayBufferView|Array.|ArrayBuffer} length or array * or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @extends {ArrayBufferView} * @constructor * @noalias * @throws {Error} * @modifies {arguments} */ function Uint16Array(length, opt_byteOffset, opt_length) {} /** @type {number} */ Uint16Array.BYTES_PER_ELEMENT; /** @type {number} */ Uint16Array.prototype.BYTES_PER_ELEMENT; /** @type {number} */ Uint16Array.prototype.length; /** * @param {ArrayBufferView|Array.} array * @param {number=} opt_offset */ Uint16Array.prototype.set = function(array, opt_offset) {}; /** * @param {number} begin * @param {number=} opt_end * @return {!Uint16Array} * @nosideeffects */ Uint16Array.prototype.subarray = function(begin, opt_end) {}; /** * @param {number|ArrayBufferView|Array.|ArrayBuffer} length or array * or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @extends {ArrayBufferView} * @constructor * @noalias * @throws {Error} * @modifies {arguments} */ function Int32Array(length, opt_byteOffset, opt_length) {} /** @type {number} */ Int32Array.BYTES_PER_ELEMENT; /** @type {number} */ Int32Array.prototype.BYTES_PER_ELEMENT; /** @type {number} */ Int32Array.prototype.length; /** * @param {ArrayBufferView|Array.} array * @param {number=} opt_offset */ Int32Array.prototype.set = function(array, opt_offset) {}; /** * @param {number} begin * @param {number=} opt_end * @return {!Int32Array} * @nosideeffects */ Int32Array.prototype.subarray = function(begin, opt_end) {}; /** * @param {number|ArrayBufferView|Array.|ArrayBuffer} length or array * or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @extends {ArrayBufferView} * @constructor * @noalias * @throws {Error} * @modifies {arguments} */ function Uint32Array(length, opt_byteOffset, opt_length) {} /** @type {number} */ Uint32Array.BYTES_PER_ELEMENT; /** @type {number} */ Uint32Array.prototype.BYTES_PER_ELEMENT; /** @type {number} */ Uint32Array.prototype.length; /** * @param {ArrayBufferView|Array.} array * @param {number=} opt_offset */ Uint32Array.prototype.set = function(array, opt_offset) {}; /** * @param {number} begin * @param {number=} opt_end * @return {!Uint32Array} * @nosideeffects */ Uint32Array.prototype.subarray = function(begin, opt_end) {}; /** * @param {number|ArrayBufferView|Array.|ArrayBuffer} length or array * or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @extends {ArrayBufferView} * @constructor * @noalias * @throws {Error} * @modifies {arguments} */ function Float32Array(length, opt_byteOffset, opt_length) {} /** @type {number} */ Float32Array.BYTES_PER_ELEMENT; /** @type {number} */ Float32Array.prototype.BYTES_PER_ELEMENT; /** @type {number} */ Float32Array.prototype.length; /** * @param {ArrayBufferView|Array.} array * @param {number=} opt_offset */ Float32Array.prototype.set = function(array, opt_offset) {}; /** * @param {number} begin * @param {number=} opt_end * @return {!Float32Array} * @nosideeffects */ Float32Array.prototype.subarray = function(begin, opt_end) {}; /** * @param {number|ArrayBufferView|Array.|ArrayBuffer} length or array * or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @extends {ArrayBufferView} * @constructor * @noalias * @throws {Error} * @modifies {arguments} */ function Float64Array(length, opt_byteOffset, opt_length) {} /** @type {number} */ Float64Array.BYTES_PER_ELEMENT; /** @type {number} */ Float64Array.prototype.BYTES_PER_ELEMENT; /** @type {number} */ Float64Array.prototype.length; /** * @param {ArrayBufferView|Array.} array * @param {number=} opt_offset */ Float64Array.prototype.set = function(array, opt_offset) {}; /** * @param {number} begin * @param {number=} opt_end * @return {!Float64Array} * @nosideeffects */ Float64Array.prototype.subarray = function(begin, opt_end) {}; /** * @param {ArrayBuffer} buffer * @param {number=} opt_byteOffset * @param {number=} opt_byteLength * @extends {ArrayBufferView} * @constructor * @noalias * @throws {Error} * @nosideeffects * @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} * @nosideeffects */ DataView.prototype.getInt8 = function(byteOffset) {}; /** * @param {number} byteOffset * @return {number} * @throws {Error} * @nosideeffects */ DataView.prototype.getUint8 = function(byteOffset) {}; /** * @param {number} byteOffset * @param {boolean=} opt_littleEndian * @return {number} * @throws {Error} * @nosideeffects */ DataView.prototype.getInt16 = function(byteOffset, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {boolean=} opt_littleEndian * @return {number} * @throws {Error} * @nosideeffects */ DataView.prototype.getUint16 = function(byteOffset, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {boolean=} opt_littleEndian * @return {number} * @throws {Error} * @nosideeffects */ DataView.prototype.getInt32 = function(byteOffset, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {boolean=} opt_littleEndian * @return {number} * @throws {Error} * @nosideeffects */ DataView.prototype.getUint32 = function(byteOffset, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {boolean=} opt_littleEndian * @return {number} * @throws {Error} * @nosideeffects */ DataView.prototype.getFloat32 = function(byteOffset, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {boolean=} opt_littleEndian * @return {number} * @throws {Error} * @nosideeffects */ DataView.prototype.getFloat64 = function(byteOffset, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {number} value * @throws {Error} */ DataView.prototype.setInt8 = function(byteOffset, value) {}; /** * @param {number} byteOffset * @param {number} value * @throws {Error} */ DataView.prototype.setUint8 = function(byteOffset, value) {}; /** * @param {number} byteOffset * @param {number} value * @param {boolean=} opt_littleEndian * @throws {Error} */ DataView.prototype.setInt16 = function(byteOffset, value, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {number} value * @param {boolean=} opt_littleEndian * @throws {Error} */ DataView.prototype.setUint16 = function(byteOffset, value, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {number} value * @param {boolean=} opt_littleEndian * @throws {Error} */ DataView.prototype.setInt32 = function(byteOffset, value, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {number} value * @param {boolean=} opt_littleEndian * @throws {Error} */ DataView.prototype.setUint32 = function(byteOffset, value, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {number} value * @param {boolean=} opt_littleEndian * @throws {Error} */ DataView.prototype.setFloat32 = function( byteOffset, value, opt_littleEndian) {}; /** * @param {number} byteOffset * @param {number} value * @param {boolean=} opt_littleEndian * @throws {Error} */ DataView.prototype.setFloat64 = function( byteOffset, value, opt_littleEndian) {}; /** * @see https://github.com/promises-aplus/promises-spec * @typedef {{then: !Function}} */ 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. * @interface * @template TYPE */ var IThenable = function() {}; /** * @param {?(function(TYPE): * (RESULT|IThenable.|Thenable))=} opt_onFulfilled * @param {?(function(*): *)=} opt_onRejected * @return {!IThenable.} * @template RESULT */ IThenable.prototype.then = function(opt_onFulfilled, opt_onRejected) {}; /** * @see https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects * @param {function( * function((TYPE|IThenable.|Thenable|null)=), * function(*=))} resolver * @constructor * @implements {IThenable.} * @template TYPE */ var Promise = function(resolver) {}; /** * @param {(TYPE|IThenable.)=} opt_value * @return {!Promise.} * @template TYPE */ Promise.resolve = function(opt_value) {}; /** * @param {*=} opt_error * @return {!Promise.} */ Promise.reject = function(opt_error) {}; /** * @template T * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise * @param {!Array>} iterable * @return {!Promise>} */ Promise.all = function(iterable) {}; /** * @template T * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise * @param {!Array.} iterable * @return {!Promise.} */ Promise.race = function(iterable) {}; /** * @param {?(function(TYPE): * (RESULT|IThenable.|Thenable))=} opt_onFulfilled * @param {?(function(*): *)=} opt_onRejected * @return {!Promise.} * @template RESULT * @override */ Promise.prototype.then = function(opt_onFulfilled, opt_onRejected) {}; /** * @param {function(*): RESULT} onRejected * @return {!Promise.} * @template RESULT */ Promise.prototype.catch = function(onRejected) {};