blob: 2993f2cfa9b8db561d47d1e3b3ab94df400ea681 [file] [log] [blame]
Blink Reformat4c46d092018-04-07 15:32:371/*
2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the
13 * distribution.
14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
Erik Luo66e332c2018-04-09 18:00:1431// Blink Web Facing API
Blink Reformat4c46d092018-04-07 15:32:3732
33/**
34 * @param {!Object} object
35 * @param {!Function} callback
36 */
37Object.observe = function(object, callback) {};
38
39/** @type {boolean} */
40Event.prototype.isMetaOrCtrlForTest;
41
42/** @type {string} */
43Event.prototype.code;
44
45/**
46 * TODO(luoe): MouseEvent properties movementX and movementY from the
47 * PointerLock API are not yet standard. Once they are included in
48 * Closure Compiler, these custom externs can be removed.
49 */
50/** @type {number} */
51MouseEvent.prototype.movementX;
52
53/** @type {number} */
54MouseEvent.prototype.movementY;
55
56/**
57 * @type {number}
58 */
59KeyboardEvent.DOM_KEY_LOCATION_NUMPAD;
60
61/**
62 * @param {!T} value
63 * @param {boolean=} onlyFirst
64 * @this {Array.<T>}
65 * @template T
66 */
67Array.prototype.remove = function(value, onlyFirst) {};
68/**
69 * @param {!Array.<!T>} array
70 * @this {Array.<!T>}
71 * @template T
72 */
73Array.prototype.pushAll = function(array) {};
74/**
75 * @return {!Object.<string, boolean>}
76 * @this {Array.<T>}
77 * @template T
78 */
79Array.prototype.keySet = function() {};
80/**
81 * @param {number} index
82 * @return {!Array.<!T>}
83 * @this {Array.<T>}
84 * @template T
85 */
86Array.prototype.rotate = function(index) {};
87/**
88 * @this {Array.<number>}
89 */
90Array.prototype.sortNumbers = function() {};
91/**
92 * @param {!S} object
93 * @param {function(!S,!T):number=} comparator
94 * @param {number=} left
95 * @param {number=} right
96 * @return {number}
97 * @this {Array.<T>}
98 * @template S
99 */
100Array.prototype.lowerBound = function(object, comparator, left, right) {};
101/**
102 * @param {!S} object
103 * @param {function(!S,!T):number=} comparator
104 * @param {number=} left
105 * @param {number=} right
106 * @return {number}
107 * @this {Array.<T>}
108 * @template S
109 */
110Array.prototype.upperBound = function(object, comparator, left, right) {};
111/**
112 * @param {!S} value
113 * @param {function(!S,!T):number} comparator
114 * @return {number}
115 * @this {Array.<T>}
116 * @template S
117 */
118Array.prototype.binaryIndexOf = function(value, comparator) {};
119/**
120 * @param {function(number, number): number} comparator
121 * @param {number} leftBound
122 * @param {number} rightBound
123 * @param {number} sortWindowLeft
124 * @param {number} sortWindowRight
125 * @return {!Array.<number>}
126 * @this {Array.<number>}
127 */
128Array.prototype.sortRange = function(comparator, leftBound, rightBound, sortWindowLeft, sortWindowRight) {};
129
130/**
131 * @param {function(!T,!T): number=} comparator
132 * @return {!Array.<T>}
133 * @this {Array.<T>}
134 * @template T
135 */
136Array.prototype.stableSort = function(comparator) {};
137
138/**
139 * @this {Array.<number>}
140 * @param {function(number,number):boolean} comparator
141 * @param {number} left
142 * @param {number} right
143 * @param {number} pivotIndex
144 * @return {number}
145 */
146Array.prototype.partition = function(comparator, left, right, pivotIndex) {};
147
148/**
149 * @this {Array.<number>}
150 * @param {number} k
151 * @param {function(number,number):boolean=} comparator
152 * @return {number}
153 */
154Array.prototype.qselect = function(k, comparator) {};
155
156/**
157 * @param {string} field
158 * @return {!Array.<!T>}
159 * @this {Array.<!Object.<string,T>>}
160 * @template T
161 */
162Array.prototype.select = function(field) {};
163
164/**
165 * @return {!T|undefined}
166 * @this {Array.<T>}
167 * @template T
168 */
169Array.prototype.peekLast = function() {};
170
171/**
172 * @param {!Array.<T>} array
173 * @param {function(T,T):number} comparator
174 * @return {!Array.<T>}
175 * @this {!Array.<T>}
176 * @template T
177 */
178Array.prototype.intersectOrdered = function(array, comparator) {};
179
180/**
181 * @param {!Array.<T>} array
182 * @param {function(T,T):number} comparator
183 * @return {!Array.<T>}
184 * @this {!Array.<T>}
185 * @template T
186 */
187Array.prototype.mergeOrdered = function(array, comparator) {};
188
189/**
190 * @param {number} object
191 * @param {function(number, number):number=} comparator
192 * @param {number=} left
193 * @param {number=} right
194 * @return {number}
195 */
196Int32Array.prototype.lowerBound = function(object, comparator, left, right) {};
197
198// TODO(luoe): remove these BigInt types once closure supports them.
199/**
200 * @param {number|string} value
201 */
202const BigInt = function(value) {};
203
204/** @typedef {*} */
205const bigint = null;
206
207// File System API
208/**
209 * @constructor
210 */
211function DOMFileSystem() {
212}
213
214/**
215 * @type {DirectoryEntry}
216 */
217DOMFileSystem.prototype.root = null;
218
219/**
220 * @type {*}
221 */
222window.domAutomationController;
223
224const DevToolsHost = function() {};
225
226/** @typedef {{type:string, id:(number|undefined),
227 label:(string|undefined), enabled:(boolean|undefined), checked:(boolean|undefined),
228 subItems:(!Array.<!DevToolsHost.ContextMenuDescriptor>|undefined)}} */
229DevToolsHost.ContextMenuDescriptor;
230
231/**
232 * @return {number}
233 */
234DevToolsHost.zoomFactor = function() {};
235
236/**
237 * @param {string} text
238 */
239DevToolsHost.copyText = function(text) {};
240
241/**
242 * @return {string}
243 */
244DevToolsHost.platform = function() {};
245
246/**
247 * @param {number} x
248 * @param {number} y
249 * @param {!Array.<!DevToolsHost.ContextMenuDescriptor>} items
250 * @param {!Document} document
251 */
252DevToolsHost.showContextMenuAtPoint = function(x, y, items, document) {};
253
254/**
255 * @param {string} message
256 */
257DevToolsHost.sendMessageToEmbedder = function(message) {};
258
259/**
260 * @return {string}
261 */
262DevToolsHost.getSelectionBackgroundColor = function() {};
263
264/**
265 * @return {string}
266 */
267DevToolsHost.getSelectionForegroundColor = function() {};
268
269/**
270 * @return {string}
271 */
272DevToolsHost.getInactiveSelectionBackgroundColor = function() {};
273
274/**
275 * @return {string}
276 */
277DevToolsHost.getInactiveSelectionForegroundColor = function() {};
278
279/**
280 * @return {boolean}
281 */
282DevToolsHost.isHostedMode = function() {};
283
284/**
285 * @param {string} fileSystemId
286 * @param {string} registeredName
287 * @return {?DOMFileSystem}
288 */
289DevToolsHost.isolatedFileSystem = function(fileSystemId, registeredName) {};
290
291/**
292 * @param {!FileSystem} fileSystem
293 */
294DevToolsHost.upgradeDraggedFileSystemPermissions = function(fileSystem) {};
295
296/** Extensions API */
297
298/** @constructor */
299function EventSink() {
300}
301/** @constructor */
302function ExtensionSidebarPane() {
303}
304/** @constructor */
305function Panel() {
306}
307/** @constructor */
308function PanelWithSidebar() {
309}
310/** @constructor */
311function Resource() {
312}
313
314let extensionServer;
315
316/**
317 * @constructor
318 */
319function ExtensionDescriptor() {
320 this.startPage = '';
321 this.name = '';
322 this.exposeExperimentalAPIs = false;
323}
324
325/**
326 * @constructor
327 */
328function ExtensionReloadOptions() {
329 this.ignoreCache = false;
330 this.injectedScript = '';
331 this.userAgent = '';
332}
333
334const Adb = {};
335/** @typedef {{id: string, name: string, url: string, attached: boolean}} */
336Adb.Page;
337/** @typedef {{id: string, adbBrowserChromeVersion: string, compatibleVersion: boolean, adbBrowserName: string, source: string, adbBrowserVersion: string, pages: !Array<!Adb.Page>}} */
338Adb.Browser;
339/** @typedef {{id: string, adbModel: string, adbSerial: string, browsers: !Array.<!Adb.Browser>, adbPortStatus: !Array.<number>, adbConnected: boolean}} */
340Adb.Device;
341/** @typedef {!Object.<string, string>} */
342Adb.PortForwardingConfig;
343/** @typedef {!{port: string, address: string}} */
344Adb.PortForwardingRule;
345/** @typedef {{ports: !Object<string, number>, browserId: string}} */
346Adb.DevicePortForwardingStatus;
347/** @typedef {!Object<string, !Adb.DevicePortForwardingStatus>} */
348Adb.PortForwardingStatus;
349/** @typedef {!Array<string>} */
350Adb.NetworkDiscoveryConfig;
351/**
352 * @typedef {!{
353 * discoverUsbDevices: boolean,
354 * portForwardingEnabled: boolean,
355 * portForwardingConfig: !Adb.PortForwardingConfig,
356 * networkDiscoveryEnabled: boolean,
357 * networkDiscoveryConfig: !Adb.NetworkDiscoveryConfig
358 * }}
359 */
360Adb.Config;
361
362/** @const */
363const module = {};
364
365/**
366 * @constructor
367 */
368function diff_match_patch() {
369}
370
371diff_match_patch.prototype = {
372 /**
373 * @param {string} text1
374 * @param {string} text2
375 * @return {!Array.<!{0: number, 1: string}>}
376 */
377 diff_main: function(text1, text2) {},
378
379 /**
380 * @param {!Array.<!{0: number, 1: string}>} diff
381 */
382 diff_cleanupSemantic(diff) {}
383};
384
385/** @constructor */
386const Doc = function() {};
387Doc.prototype = {
388 /** @type {number} */
389 scrollLeft: 0,
390 /** @type {number} */
391 scrollTop: 0
392};
393
394/** @constructor */
395const CodeMirror = function(element, config) {};
396CodeMirror.on = function(obj, type, handler) {};
397CodeMirror.prototype = {
398 /** @type {!Doc} */
399 doc: null,
400 addKeyMap: function(map) {},
401 addLineClass: function(handle, where, cls) {},
402 /**
403 * @param {?Object=} options
404 * @return {!CodeMirror.LineWidget}
405 */
406 addLineWidget: function(handle, node, options) {},
407 /**
408 * @param {string|!Object} spec
409 * @param {!Object=} options
410 */
411 addOverlay: function(spec, options) {},
412 addWidget: function(pos, node, scroll, vert, horiz) {},
Joel Einbinderd7595c72018-05-15 17:41:54413 /** @param {boolean=} isClosed bv */
414 changeGeneration: function(isClosed) {},
Blink Reformat4c46d092018-04-07 15:32:37415 charCoords: function(pos, mode) {},
416 clearGutter: function(gutterID) {},
417 clearHistory: function() {},
418 clipPos: function(pos) {},
419 /** @param {string=} mode */
420 coordsChar: function(coords, mode) {},
421 /** @param {string=} mode */
422 cursorCoords: function(start, mode) {},
423 defaultCharWidth: function() {},
424 defaultTextHeight: function() {},
425 deleteH: function(dir, unit) {},
426 /**
427 * @param {*=} to
428 * @param {*=} op
429 */
430 eachLine: function(from, to, op) {},
431 execCommand: function(cmd) {},
432 extendSelection: function(from, to) {},
433 findMarks: function(from, to) {},
434 findMarksAt: function(pos) {},
435 /**
436 * @param {!CodeMirror.Pos} from
437 * @param {boolean=} strict
438 * @param {Object=} config
439 */
440 findMatchingBracket: function(from, strict, config) {},
441 findPosH: function(from, amount, unit, visually) {},
442 findPosV: function(from, amount, unit, goalColumn) {},
443 firstLine: function() {},
444 focus: function() {},
445 getAllMarks: function() {},
446 /** @param {string=} start */
447 getCursor: function(start) {},
448 getDoc: function() {},
449 getGutterElement: function() {},
450 getHistory: function() {},
451 getInputField: function() {},
452 getLine: function(line) {},
453 /**
454 * @return {!{wrapClass: string, height: number}}
455 */
456 getLineHandle: function(line) {},
457 getLineNumber: function(line) {},
458 /**
459 * @return {!{token: function(CodeMirror.StringStream, Object):string}}
460 */
461 getMode: function() {},
462 getOption: function(option) {},
463 /** @param {*=} lineSep */
464 getRange: function(from, to, lineSep) {},
465 /**
466 * @return {!{left: number, top: number, width: number, height: number, clientWidth: number, clientHeight: number}}
467 */
468 getScrollInfo: function() {},
469 getScrollerElement: function() {},
470 getSelection: function() {},
471 getSelections: function() {},
472 getStateAfter: function(line) {},
473 getTokenAt: function(pos) {},
474 /** @param {*=} lineSep */
475 getValue: function(lineSep) {},
476 getViewport: function() {},
477 getWrapperElement: function() {},
478 hasFocus: function() {},
479 historySize: function() {},
480 indentLine: function(n, dir, aggressive) {},
481 indentSelection: function(how) {},
482 indexFromPos: function(coords) {},
Joel Einbinderd7595c72018-05-15 17:41:54483 /** @param {number=} generation */
484 isClean: function(generation) {},
Blink Reformat4c46d092018-04-07 15:32:37485 iterLinkedDocs: function(f) {},
486 lastLine: function() {},
487 lineCount: function() {},
488 lineInfo: function(line) {},
489 /**
490 * @param {number} height
491 * @param {string=} mode
492 */
493 lineAtHeight: function(height, mode) {},
494 linkedDoc: function(options) {},
495 listSelections: function() {},
496 markClean: function() {},
497 markText: function(from, to, options) {},
498 moveH: function(dir, unit) {},
499 moveV: function(dir, unit) {},
500 off: function(type, f) {},
501 on: function(type, f) {},
502 operation: function(f) {},
503 posFromIndex: function(off) {},
504 redo: function() {},
505 refresh: function() {},
506 removeKeyMap: function(map) {},
507 removeLine: function(line) {},
508 removeLineClass: function(handle, where, cls) {},
509 removeLineWidget: function(widget) {},
510 removeOverlay: function(spec) {},
511 /** @param {*=} origin */
512 replaceRange: function(code, from, to, origin) {},
513 /**
514 * @param {string} replacement
515 * @param {string=} select
516 */
517 replaceSelection: function(replacement, select) {},
518 /**
519 * @param {!Array.<string>} textPerSelection
520 */
521 replaceSelections: function(textPerSelection) {},
522 /** @param {*=} margin */
523 scrollIntoView: function(pos, margin) {},
524 scrollTo: function(x, y) {},
525 setBookmark: function(pos, options) {},
526 setCursor: function(line, ch, extend) {},
527 setExtending: function(val) {},
528 setGutterMarker: function(line, gutterID, value) {},
529 setHistory: function(histData) {},
530 setLine: function(line, text) {},
531 setOption: function(option, value) {},
Joel Einbinder5d6cc6e2018-05-05 06:29:47532 setSelection: function(anchor, head, options) {},
Blink Reformat4c46d092018-04-07 15:32:37533 /**
534 * @param {number=} primaryIndex
535 * @param {?Object=} config
536 */
537 setSelections: function(selections, primaryIndex, config) {},
538 setSize: function(width, height) {},
539 setValue: function(code) {},
540 somethingSelected: function() {},
541 swapDoc: function(doc) {},
542 undo: function() {},
543 unlinkDoc: function(other) {}
544};
545/** @type {!{cursorDiv: Element, lineSpace: Element}} */
546CodeMirror.prototype.display;
547/** @type {!{mode: string}} */
548CodeMirror.prototype.options;
549/** @type {!Object} */
550CodeMirror.Pass;
551CodeMirror.showHint = function(codeMirror, hintintFunction) {};
552CodeMirror.commands = {};
553CodeMirror.modes = {};
554CodeMirror.mimeModes = {};
555CodeMirror.getMode = function(options, spec) {};
556CodeMirror.overlayMode = function(mode1, mode2, squashSpans) {};
557CodeMirror.defineMode = function(modeName, modeConstructor) {};
558CodeMirror.startState = function(mode) {};
559CodeMirror.copyState = function(mode, state) {};
560
561/** @typedef {{canceled: boolean, from: !CodeMirror.Pos, to: !CodeMirror.Pos, text: string, origin: string, cancel: function()}} */
562CodeMirror.BeforeChangeObject;
563
564/** @typedef {{from: !CodeMirror.Pos, to: !CodeMirror.Pos, origin: string, text: !Array.<string>, removed: !Array.<string>}} */
565CodeMirror.ChangeObject;
566
567/** @constructor */
568CodeMirror.Pos = function(line, ch) {};
569/** @type {number} */
570CodeMirror.Pos.prototype.line;
571/** @type {number} */
572CodeMirror.Pos.prototype.ch;
573
574/**
575 * @param {!CodeMirror.Pos} pos1
576 * @param {!CodeMirror.Pos} pos2
577 * @return {number}
578 */
579CodeMirror.cmpPos = function(pos1, pos2) {};
580
581/** @constructor */
582CodeMirror.StringStream = function(line) {
583 this.pos = 0;
584 this.start = 0;
585};
586CodeMirror.StringStream.prototype = {
587 backUp: function(n) {},
588 column: function() {},
589 current: function() {},
590 eat: function(match) {},
591 eatSpace: function() {},
592 eatWhile: function(match) {},
593 eol: function() {},
594 indentation: function() {},
595 /**
596 * @param {!RegExp|string} pattern
597 * @param {boolean=} consume
598 * @param {boolean=} caseInsensitive
599 */
600 match: function(pattern, consume, caseInsensitive) {},
601 next: function() {},
602 peek: function() {},
603 skipTo: function(ch) {},
604 skipToEnd: function() {},
605 sol: function() {}
606};
607
608/** @constructor */
609CodeMirror.TextMarker = function(doc, type) {};
610CodeMirror.TextMarker.prototype = {
611 clear: function() {},
612 find: function() {},
613 changed: function() {}
614};
615
616/** @constructor */
617CodeMirror.LineWidget = function() {};
618CodeMirror.LineWidget.prototype = {
619 clear: function() {}
620};
621
622/** @type {Object.<string, !Object.<string, string>>} */
623CodeMirror.keyMap;
624
625/** @type {{scrollLeft: number, scrollTop: number}} */
626CodeMirror.doc;
627
628/**
629 * @param {string} mime
630 * @param {string} mode
631 */
632CodeMirror.defineMIME = function(mime, mode) {};
633
634/** @type {boolean} */
635window.dispatchStandaloneTestRunnerMessages;
636
637/**
638 * @param {Array.<Object>} keyframes
639 * @param {number|Object} timing
640 * @return {Object}
641 */
642Element.prototype.animate = function(keyframes, timing) {};
643
644/**
645 * @param {...!Node} nodes
646 * @return {undefined}
647 * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend
648 */
649Element.prototype.prepend = function(nodes) {};
650
651/**
652 * @override
653 * @param {string} type
654 * @param {(!EventListener|!function (!Event): (boolean|undefined)|null)} listener
655 * @param {(boolean|!{capture: (boolean|undefined), once: (boolean|undefined), passive: (boolean|undefined)})=} options
656 * @this {EventTarget}
657 */
658Element.prototype.addEventListener = function(type, listener, options) {};
659
660/**
661 * @override
662 * @param {string} type
663 * @param {(!EventListener|!function (!Event): (boolean|undefined)|null)} listener
664 * @param {(boolean|!{capture: (boolean|undefined), once: (boolean|undefined), passive: (boolean|undefined)})=} options
665 * @this {EventTarget}
666 */
667Element.prototype.removeEventListener = function(type, listener, options) {};
668
669const acorn = {
670 /**
671 * @param {string} text
672 * @param {Object.<string, boolean>} options
673 * @return {!ESTree.Node}
674 */
675 parse: function(text, options) {},
676
677 /**
678 * @param {string} text
679 * @param {Object.<string, boolean>} options
680 * @return {!ESTree.Node}
681 */
682 parse_dammit: function(text, options) {},
683
684 /**
685 * @param {string} text
686 * @param {Object.<string, boolean>} options
687 * @return {!Acorn.Tokenizer}
688 */
689 tokenizer: function(text, options) {},
690
691 tokTypes: {
692 _true: new Acorn.TokenType(),
693 _false: new Acorn.TokenType(),
694 _null: new Acorn.TokenType(),
695 num: new Acorn.TokenType(),
696 regexp: new Acorn.TokenType(),
697 string: new Acorn.TokenType(),
698 name: new Acorn.TokenType(),
699 eof: new Acorn.TokenType()
700 }
701};
702
703const Acorn = {};
704/**
705 * @constructor
706 */
707Acorn.Tokenizer = function() {
708 /** @type {function():!Acorn.Token} */
709 this.getToken;
710};
711
712/**
713 * @constructor
714 */
715Acorn.TokenType = function() {
716 /** @type {string} */
717 this.label;
718 /** @type {(string|undefined)} */
719 this.keyword;
720};
721
722/**
723 * @typedef {{type: !Acorn.TokenType, value: string, start: number, end: number}}
724 */
725Acorn.Token;
726
727/**
728 * @typedef {{type: string, value: string, start: number, end: number}}
729 */
730Acorn.Comment;
731
732/**
733 * @typedef {(!Acorn.Token|!Acorn.Comment)}
734 */
735Acorn.TokenOrComment;
736
737const ESTree = {};
738
739/**
740 * @constructor
741 */
742ESTree.Node = function() {
743 /** @type {number} */
744 this.start;
745 /** @type {number} */
746 this.end;
747 /** @type {string} */
748 this.type;
749 /** @type {(!ESTree.Node|undefined)} */
750 this.body;
751 /** @type {(!Array.<!ESTree.Node>|undefined)} */
752 this.declarations;
753 /** @type {(!Array.<!ESTree.Node>|undefined)} */
754 this.properties;
755 /** @type {(!ESTree.Node|undefined)} */
756 this.init;
757 /** @type {(!Array.<!ESTree.Node>|undefined)} */
758 this.params;
759 /** @type {(string|undefined)} */
760 this.name;
761 /** @type {(?ESTree.Node|undefined)} */
762 this.id;
763 /** @type {(number|undefined)} */
764 this.length;
765 /** @type {(?ESTree.Node|undefined)} */
766 this.argument;
767 /** @type {(string|undefined)} */
768 this.operator;
769 /** @type {(!ESTree.Node|undefined)} */
770 this.right;
771 /** @type {(!ESTree.Node|undefined)} */
772 this.left;
773 /** @type {(string|undefined)} */
774 this.kind;
775 /** @type {(!ESTree.Node|undefined)} */
776 this.property;
777 /** @type {(!ESTree.Node|undefined)} */
778 this.object;
779 /** @type {(string|undefined)} */
780 this.raw;
781 /** @type {(boolean|undefined)} */
782 this.computed;
783};
784
785/**
786 * @extends {ESTree.Node}
787 * @constructor
788 */
789ESTree.TemplateLiteralNode = function() {
790 /** @type {!Array.<!ESTree.Node>} */
791 this.quasis;
792 /** @type {!Array.<!ESTree.Node>} */
793 this.expressions;
794};
795
796/**
797 * @type {string}
798 * @see http://heycam.github.io/webidl/#es-DOMException-prototype-object
799 * TODO(jsbell): DOMException should be a subclass of Error.
800 */
801DOMException.prototype.message;
802/** @type {number} */
803DOMException.ABORT_ERR;
804
805/**
806 * @constructor
807 * @param {!Object} params
808 */
809const Terminal = function(params) {};
810
811Terminal.prototype = {
812 fit: function() {},
813 linkify: function() {},
814 /** @param {!Element} element */
815 open: function(element) {},
816 /** @param {string} eventName * @param {!Function} handler */
817 on: function(eventName, handler) {}
818};
819
820/**
821 * @param {string} context
822 * @return {!Console}
823 */
824Console.prototype.context = function(context) {};
825
826
827/**
828 * @param {!Array<string>|string} strings
829 * @param {...*} vararg
830 * @return {string}
831 */
832const ls = function(strings, vararg) {};
833
834/**
835 * @constructor
836 * @param {function(!Array<*>)} callback
837 */
838const ResizeObserver = function(callback) {};