diff --git a/lighthouse-core/gather/connections/connection.js b/lighthouse-core/gather/connections/connection.js index 3a687f352c93..17e868db8648 100644 --- a/lighthouse-core/gather/connections/connection.js +++ b/lighthouse-core/gather/connections/connection.js @@ -9,10 +9,13 @@ const EventEmitter = require('events').EventEmitter; const log = require('lighthouse-logger'); const LHError = require('../../lib/errors'); +// TODO(bckenny): CommandCallback properties should be tied by command type after +// https://github.com/Microsoft/TypeScript/pull/22348. See driver.js TODO. /** - * @typedef {LH.StrictEventEmitter<{'protocolevent': LH.Protocol.RawEventMessage}>} CrdpEventMessageEmitter + * @typedef {{'protocolevent': [LH.Protocol.RawEventMessage]}} ProtocolEventRecord + * @typedef {LH.Protocol.StrictEventEmitter} CrdpEventMessageEmitter * @typedef {LH.CrdpCommands[keyof LH.CrdpCommands]} CommandInfo - * @typedef {{resolve: function(Promise): void, method: keyof LH.CrdpCommands, options: {silent?: boolean}}} CommandCallback + * @typedef {{resolve: function(Promise): void, method: keyof LH.CrdpCommands}} CommandCallback */ class Connection { @@ -21,8 +24,7 @@ class Connection { /** @type {Map} */ this._callbacks = new Map(); - /** @type {?CrdpEventMessageEmitter} */ - this._eventEmitter = new EventEmitter(); + this._eventEmitter = /** @type {?CrdpEventMessageEmitter} */ (new EventEmitter()); } /** @@ -46,6 +48,27 @@ class Connection { return Promise.reject(new Error('Not implemented')); } + /** + * Call protocol methods + * @template {keyof LH.CrdpCommands} C + * @param {C} method + * @param {LH.CrdpCommands[C]['paramsType']} paramArgs, + * @return {Promise} + */ + sendCommand(method, ...paramArgs) { + // Reify params since we need it as a property so can't just spread again. + const params = paramArgs.length ? paramArgs[0] : undefined; + + log.formatProtocol('method => browser', {method, params}, 'verbose'); + const id = ++this._lastCommandId; + const message = JSON.stringify({id, method, params}); + this.sendRawMessage(message); + + return new Promise(resolve => { + this._callbacks.set(id, {method, resolve}); + }); + } + /** * Bind listeners for connection events. * @param {'protocolevent'} eventName @@ -94,12 +117,9 @@ class Connection { if (callback) { this._callbacks.delete(object.id); - // @ts-ignore since can't convince compiler that callback.resolve's return - // type and object.result are matching since only linked by object.id. return callback.resolve(Promise.resolve().then(_ => { if (object.error) { - const logLevel = callback.options.silent ? 'verbose' : 'error'; - log.formatProtocol('method <= browser ERR', {method: callback.method}, logLevel); + log.formatProtocol('method <= browser ERR', {method: callback.method}, 'error'); throw LHError.fromProtocolMessage(callback.method, object.error); } @@ -138,33 +158,4 @@ class Connection { } } -// Declared outside class body because function expressions can be typed via coercive @type -/** - * Looser-typed internal implementation of `Connection.sendCommand` which is - * strictly typed externally on exposed Connection interface. See - * `Driver.sendCommand` for explanation. - * @this {Connection} - * @param {keyof LH.CrdpCommands} method - * @param {CommandInfo['paramsType']=} params, - * @param {{silent?: boolean}=} cmdOpts - * @return {Promise} - */ -function _sendCommand(method, params, cmdOpts = {}) { - /* eslint-disable no-invalid-this */ - log.formatProtocol('method => browser', {method, params}, 'verbose'); - const id = ++this._lastCommandId; - const message = JSON.stringify({id, method, params}); - this.sendRawMessage(message); - return new Promise(resolve => { - this._callbacks.set(id, {resolve, method, options: cmdOpts}); - }); - /* eslint-enable no-invalid-this */ -} - -/** - * Call protocol methods. - * @type {LH.Protocol.SendCommand} - */ -Connection.prototype.sendCommand = _sendCommand; - module.exports = Connection; diff --git a/lighthouse-core/gather/connections/extension.js b/lighthouse-core/gather/connections/extension.js index 71ab954f88d0..e97b346de42b 100644 --- a/lighthouse-core/gather/connections/extension.js +++ b/lighthouse-core/gather/connections/extension.js @@ -107,6 +107,45 @@ class ExtensionConnection extends Connection { }).then(_ => this._detachCleanup()); } + /** + * Call protocol methods. + * @template {keyof LH.CrdpCommands} C + * @param {C} method + * @param {LH.CrdpCommands[C]['paramsType']} paramArgs, + * @return {Promise} + */ + sendCommand(method, ...paramArgs) { + // Reify params since we need it as a property so can't just spread again. + const params = paramArgs.length ? paramArgs[0] : undefined; + + return new Promise((resolve, reject) => { + log.formatProtocol('method => browser', {method, params}, 'verbose'); + if (!this._tabId) { + log.error('ExtensionConnection', 'No tabId set for sendCommand'); + return reject(new Error('No tabId set for sendCommand')); + } + + chrome.debugger.sendCommand({tabId: this._tabId}, method, params || {}, result => { + if (chrome.runtime.lastError) { + // The error from the extension has a `message` property that is the + // stringified version of the actual protocol error object. + const message = chrome.runtime.lastError.message || ''; + let errorMessage; + try { + errorMessage = JSON.parse(message).message; + } catch (e) {} + errorMessage = errorMessage || message || 'Unknown debugger protocol error.'; + + log.formatProtocol('method <= browser ERR', {method}, 'error'); + return reject(new Error(`Protocol error (${method}): ${errorMessage}`)); + } + + log.formatProtocol('method <= browser OK', {method, params: result}, 'verbose'); + resolve(result); + }); + }); + } + /** * @return {Promise} * @private @@ -172,53 +211,4 @@ class ExtensionConnection extends Connection { } } -/** - * @typedef {LH.CrdpCommands[keyof LH.CrdpCommands]} CommandInfo - */ -// Declared outside class body because function expressions can be typed via coercive @type -/** - * Looser-typed internal implementation of `ExtensionConnection.sendCommand` - * which is strictly typed externally on exposed ExtensionConnection interface. - * See `Driver.sendCommand` for explanation. - * @this {ExtensionConnection} - * @param {keyof LH.CrdpCommands} method - * @param {CommandInfo['paramsType']=} params, - * @return {Promise} - */ -function _sendCommand(method, params) { - return new Promise((resolve, reject) => { - log.formatProtocol('method => browser', {method, params}, 'verbose'); - if (!this._tabId) { // eslint-disable-line no-invalid-this - log.error('ExtensionConnection', 'No tabId set for sendCommand'); - return reject(new Error('No tabId set for sendCommand')); - } - - // eslint-disable-next-line no-invalid-this - chrome.debugger.sendCommand({tabId: this._tabId}, method, params || {}, result => { - if (chrome.runtime.lastError) { - // The error from the extension has a `message` property that is the - // stringified version of the actual protocol error object. - const message = chrome.runtime.lastError.message || ''; - let errorMessage; - try { - errorMessage = JSON.parse(message).message; - } catch (e) {} - errorMessage = errorMessage || message || 'Unknown debugger protocol error.'; - - log.formatProtocol('method <= browser ERR', {method}, 'error'); - return reject(new Error(`Protocol error (${method}): ${errorMessage}`)); - } - - log.formatProtocol('method <= browser OK', {method, params: result}, 'verbose'); - resolve(result); - }); - }); -} - -/** - * Call protocol methods. - * @type {LH.Protocol.SendCommand} - */ -ExtensionConnection.prototype.sendCommand = _sendCommand; - module.exports = ExtensionConnection; diff --git a/lighthouse-core/gather/driver.js b/lighthouse-core/gather/driver.js index 98b161423b43..693d4b1c925b 100644 --- a/lighthouse-core/gather/driver.js +++ b/lighthouse-core/gather/driver.js @@ -32,7 +32,7 @@ const DEFAULT_NETWORK_QUIET_THRESHOLD = 5000; const DEFAULT_CPU_QUIET_THRESHOLD = 0; /** - * @typedef {LH.StrictEventEmitter} CrdpEventEmitter + * @typedef {LH.Protocol.StrictEventEmitter} CrdpEventEmitter */ class Driver { @@ -43,9 +43,8 @@ class Driver { this._traceCategories = Driver.traceCategories; /** * An event emitter that enforces mapping between Crdp event names and payload types. - * @type {CrdpEventEmitter} */ - this._eventEmitter = new EventEmitter(); + this._eventEmitter = /** @type {CrdpEventEmitter} */ (new EventEmitter()); this._connection = connection; // currently only used by WPT where just Page and Network are needed this._devtoolsLog = new DevtoolsLog(/^(Page|Network)\./); @@ -74,6 +73,10 @@ class Driver { if (this._networkStatusMonitor) { this._networkStatusMonitor.dispatch(event); } + + // @ts-ignore TODO(bckenny): tsc can't type event.params correctly yet, + // typing as property of union instead of narrowing from union of + // properties. See https://github.com/Microsoft/TypeScript/pull/22348. this._eventEmitter.emit(event.method, event.params); }); } @@ -138,6 +141,52 @@ class Driver { return this._connection.wsEndpoint(); } + /** + * Bind listeners for protocol events. + * @template {keyof LH.CrdpEvents} E + * @param {E} eventName + * @param {(...args: LH.CrdpEvents[E]) => void} cb + */ + on(eventName, cb) { + if (this._eventEmitter === null) { + throw new Error('connect() must be called before attempting to listen to events.'); + } + + // log event listeners being bound + log.formatProtocol('listen for event =>', {method: eventName}, 'verbose'); + this._eventEmitter.on(eventName, cb); + } + + /** + * Bind a one-time listener for protocol events. Listener is removed once it + * has been called. + * @template {keyof LH.CrdpEvents} E + * @param {E} eventName + * @param {(...args: LH.CrdpEvents[E]) => void} cb + */ + once(eventName, cb) { + if (this._eventEmitter === null) { + throw new Error('connect() must be called before attempting to listen to events.'); + } + // log event listeners being bound + log.formatProtocol('listen once for event =>', {method: eventName}, 'verbose'); + this._eventEmitter.once(eventName, cb); + } + + /** + * Unbind event listener. + * @template {keyof LH.CrdpEvents} E + * @param {E} eventName + * @param {Function} cb + */ + off(eventName, cb) { + if (this._eventEmitter === null) { + throw new Error('connect() must be called before attempting to remove an event listener.'); + } + + this._eventEmitter.removeListener(eventName, cb); + } + /** * Debounce enabling or disabling domains to prevent driver users from * stomping on each other. Maintains an internal count of the times a domain @@ -167,6 +216,25 @@ class Driver { } } + /** + * Call protocol methods. + * @template {keyof LH.CrdpCommands} C + * @param {C} method + * @param {LH.CrdpCommands[C]['paramsType']} params, + * @return {Promise} + */ + sendCommand(method, ...params) { + const domainCommand = /^(\w+)\.(enable|disable)$/.exec(method); + if (domainCommand) { + const enable = domainCommand[2] === 'enable'; + if (!this._shouldToggleDomain(domainCommand[1], enable)) { + return Promise.resolve(); + } + } + + return this._connection.sendCommand(method, ...params); + } + /** * Returns whether a domain is currently enabled. * @param {string} domain @@ -863,9 +931,6 @@ class Driver { // Enable Page domain to wait for Page.loadEventFired return this.sendCommand('Page.enable') - // ensure tracing is stopped before we can start - // see https://github.com/GoogleChrome/lighthouse/issues/1091 - .then(_ => this.endTraceIfStarted()) .then(_ => this.sendCommand('Tracing.start', { categories: uniqueCategories.join(','), transferMode: 'ReturnAsStream', @@ -873,20 +938,6 @@ class Driver { })); } - /** - * @return {Promise} - */ - endTraceIfStarted() { - return new Promise((resolve) => { - const traceCallback = () => resolve(); - this.once('Tracing.tracingComplete', traceCallback); - return this.sendCommand('Tracing.end', undefined, {silent: true}).catch(() => { - this.off('Tracing.tracingComplete', traceCallback); - traceCallback(); - }); - }); - } - /** * @return {Promise} */ @@ -1124,81 +1175,4 @@ class Driver { } } -// Declared outside class body because function expressions can be typed via more expressive @type -/** - * Bind listeners for protocol events. - * @type {CrdpEventEmitter['on']} - */ -Driver.prototype.on = function on(eventName, cb) { - if (this._eventEmitter === null) { - throw new Error('connect() must be called before attempting to listen to events.'); - } - - // log event listeners being bound - log.formatProtocol('listen for event =>', {method: eventName}, 'verbose'); - this._eventEmitter.on(eventName, cb); -}; - -/** - * Bind a one-time listener for protocol events. Listener is removed once it - * has been called. - * @type {CrdpEventEmitter['once']} - */ -Driver.prototype.once = function once(eventName, cb) { - if (this._eventEmitter === null) { - throw new Error('connect() must be called before attempting to listen to events.'); - } - // log event listeners being bound - log.formatProtocol('listen once for event =>', {method: eventName}, 'verbose'); - this._eventEmitter.once(eventName, cb); -}; - -/** - * Unbind event listener. - * @type {CrdpEventEmitter['removeListener']} - */ -Driver.prototype.off = function off(eventName, cb) { - if (this._eventEmitter === null) { - throw new Error('connect() must be called before attempting to remove an event listener.'); - } - - this._eventEmitter.removeListener(eventName, cb); -}; - -/** @typedef {LH.CrdpCommands[keyof LH.CrdpCommands]['returnType']} CommandReturnTypes */ - -/** - * Loosely-typed internal implementation of `Driver.sendCommand` which is - * strictly typed externally on exposed Driver interface. Type tightening occurs - * when assigned to `Driver.prototype` below and typed with - * `LH.Protocol.SendCommand`. - * Necessitated by `params` only being optional for some values of `method`. - * See https://github.com/Microsoft/TypeScript/issues/5453 for needed variadic - * primitive. - * @this {Driver} - * @param {any} method - * @param {any=} params, - * @param {{silent?: boolean}=} cmdOpts - * @return {Promise} - */ -function _sendCommand(method, params, cmdOpts = {}) { - const domainCommand = /^(\w+)\.(enable|disable)$/.exec(method); - if (domainCommand) { - const enable = domainCommand[2] === 'enable'; - // eslint-disable-next-line no-invalid-this - if (!this._shouldToggleDomain(domainCommand[1], enable)) { - return Promise.resolve(); - } - } - - // eslint-disable-next-line no-invalid-this - return this._connection.sendCommand(method, params, cmdOpts); -} - -/** - * Call protocol methods. - * @type {LH.Protocol.SendCommand} - */ -Driver.prototype.sendCommand = _sendCommand; - module.exports = Driver; diff --git a/lighthouse-core/lib/network-request.js b/lighthouse-core/lib/network-request.js index e1430bcfe0dd..f823ac03eea3 100644 --- a/lighthouse-core/lib/network-request.js +++ b/lighthouse-core/lib/network-request.js @@ -43,6 +43,9 @@ const RESOURCE_TYPES = { WebSocket: 'WebSocket', Other: 'Other', Manifest: 'Manifest', + SignedExchange: 'SignedExchange', + Ping: 'Ping', + CSPViolationReport: 'CSPViolationReport', }; module.exports = class NetworkRequest { diff --git a/lighthouse-core/scripts/extract-crdp-mapping.js b/lighthouse-core/scripts/extract-crdp-mapping.js deleted file mode 100644 index 710d6a536712..000000000000 --- a/lighthouse-core/scripts/extract-crdp-mapping.js +++ /dev/null @@ -1,389 +0,0 @@ -/** - * @license Copyright 2018 Google Inc. All Rights Reserved. - * 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. - */ -'use strict'; - -/** - * @fileOverview Used to pull a mapping of Chrome Remote Debugging Protocol - * event and command requests and responses for type checking of interactions. - * See typings/protocol.d.ts for how these are used. - */ - -const fs = require('fs'); -const path = require('path'); -const ts = require('typescript'); - -const crdpTypingFile = require.resolve('vscode-chrome-debug-core/lib/crdp/crdp.d.ts'); -const lhCrdpExternsOutputFile = path.resolve(__dirname, '../../typings/crdp-mapping.d.ts'); - -/* eslint-disable max-len */ -const headerBlock = `/** - * @license Copyright 2018 Google Inc. All Rights Reserved. - * 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. - */ - -// Generated by \`yarn update:crdp-typings\` -`; -/* eslint-enable max-len */ - -const OUTPUT_EVENTS_NAME = 'CrdpEvents'; -const OUTPUT_COMMANDS_NAME = 'CrdpCommands'; - -/** - * DFS of AST, returning the first interface or module found with matching - * target name. - * @param {ts.Node} rootNode - * @param {string} targetName - * @return {ts.Node|undefined} - */ -function findFirstInterfaceOrModule(rootNode, targetName) { - /** - * @param {ts.Node} node - * @return {ts.Node|undefined} - */ - function walker(node) { - if (ts.isInterfaceDeclaration(node) || ts.isModuleDeclaration(node)) { - if (node.name.text === targetName) { - return node; - } - } - - return ts.forEachChild(node, walker); - } - - return walker(rootNode); -} - -/** - * Expects to start at root node. - * @param {ts.Node} node - * @return {Array} - */ -function getCrdpDomainNames(node) { - const crdpClientInterface = findFirstInterfaceOrModule(node, 'CrdpClient'); - if (!crdpClientInterface) { - throw new Error('no `interface CrdpClient` found in typing file'); - } - - /** @type {Array} */ - const domainProperties = []; - ts.forEachChild(crdpClientInterface, node => { - if (ts.isPropertySignature(node)) { - if (ts.isIdentifier(node.name)) { - domainProperties.push(node.name.text); - } - } - }); - - return domainProperties; -} - -/** - * Returns the qualified name of the type node. - * @param {ts.TypeReferenceNode} typeNode - * @param {string} debugName A name to print for type if error is found. - * @return {{domain: string, type: string}} - */ -function getTypeName(typeNode, debugName) { - if (ts.isQualifiedName(typeNode.typeName)) { - if (ts.isQualifiedName(typeNode.typeName.left)) { - throw new Error(`unsupported triple nested type name in ${debugName}`); - } - const domain = typeNode.typeName.left.text; - const type = typeNode.typeName.right.text; - - return {domain, type}; - } - - throw new Error(`unexpected type node in ${debugName}`); -} - -/** - * Asserts that this is a function that has zero or one parameters and returns - * null or the parameter's type, respectively. - * @param {ts.FunctionTypeNode} functionNode - * @param {string} debugName A name to print for function if error is found. - * @return {?ts.TypeReferenceNode} - */ -function getParamType(functionNode, debugName) { - const paramCount = functionNode.parameters.length; - - if (paramCount === 1) { - const paramType = functionNode.parameters[0].type; - if (paramType && ts.isTypeReferenceNode(paramType)) { - return paramType; - } - - throw new Error(`unexpected param passed to ${debugName}`); - } else if (paramCount > 1) { - throw new Error(`found ${paramCount} parameters passed to ${debugName}.`); - } - - return null; -} - -/** - * Validates that this is an event listener we're expecting and returns the - * type of its expected payload (or null if none expected). - * @param {ts.MethodSignature} methodNode - * @param {string} methodName - * @return {?ts.TypeReferenceNode} - */ -function getEventListenerParamType(methodNode, methodName) { - if (methodNode.parameters.length > 1) { - throw new Error(`found ${methodNode.parameters.length} parameters passed to ${methodName}.`); - } - const listenerTypeNode = methodNode.parameters[0].type; - if (!listenerTypeNode || !ts.isFunctionTypeNode(listenerTypeNode)) { - throw new Error(`found unexpected argument passed to ${methodName}.`); - } - - return getParamType(listenerTypeNode, methodName); -} - -/** - * Returns a Map of events for given domain - * @param {ts.Node} sourceRoot - * @param {string} domainName - * @return {Map} - */ -function getEventMap(sourceRoot, domainName) { - // We want 'DomainNameClient' interface, sibling to domain module, for event info. - const eventInterfaceName = domainName + 'Client'; - const eventInterface = findFirstInterfaceOrModule(sourceRoot, eventInterfaceName); - - if (!eventInterface || !ts.isInterfaceDeclaration(eventInterface)) { - throw new Error(`Events interface not found for domain '${domainName}'.`); - } - - /** @type {Map} */ - const eventMap = new Map(); - - for (const member of eventInterface.members) { - if (!ts.isMethodSignature(member)) { - continue; - } - - if (!ts.isIdentifier(member.name)) { - throw new Error('Bad event method found' + member); - } - const methodName = member.name.text; - if (!/^on[A-Z]/.test(methodName)) { - throw new Error('bad method name found: ' + methodName); - } - const eventString = methodName[2].toLowerCase() + methodName.slice(3); - const eventName = `${domainName}.${eventString}`; - - const rawEventType = getEventListenerParamType(member, methodName); - let eventType = 'void'; - if (rawEventType !== null) { - const {domain, type} = getTypeName(rawEventType, methodName); - eventType = `Crdp.${domain}.${type}`; - } - - eventMap.set(eventName, eventType); - } - - return eventMap; -} - -/** - * Asserts that this is a function returning a promised value and returns the - * type of that value. - * @param {ts.FunctionTypeNode} functionNode - * @param {string} debugName A name to print for function if error is found. - * @return {string} - */ -function getPromisedReturnType(functionNode, debugName) { - const returnTypeNode = functionNode.type; - if (returnTypeNode && ts.isTypeReferenceNode(returnTypeNode)) { - // Check returning a promise. - if (!ts.isIdentifier(returnTypeNode.typeName) || - returnTypeNode.typeName.text !== 'Promise' || - !returnTypeNode.typeArguments) { - throw new Error(`command ${debugName} has unexpected return type`); - } - - // Get promise's payload - if (returnTypeNode.typeArguments.length !== 1) { - throw new Error(`unexpected param(s) passed to ${debugName}`); - } - - const payloadType = returnTypeNode.typeArguments[0]; - - if (payloadType.kind === ts.SyntaxKind.VoidKeyword) { - return 'void'; - } else if (ts.isTypeReferenceNode(payloadType)) { - const {domain, type} = getTypeName(payloadType, debugName); - return `${domain}.${type}`; - } - } - - throw new Error(`unexpected return type for ${debugName}`); -} - -/** - * Returns true if all properties on interface are optional. Does simple search - * for interface declaration, assuming top level domain name and interface - * defined at the top level within. - * @param {ts.Node} sourceRoot - * @param {string} domainName - * @param {string} interfaceName - * @return {boolean} - */ -function isWeakInterface(sourceRoot, domainName, interfaceName) { - const domainInterface = findFirstInterfaceOrModule(sourceRoot, domainName); - if (!domainInterface || !ts.isModuleDeclaration(domainInterface)) { - throw new Error(`domain ${domainName} not found`); - } - const targetInterface = findFirstInterfaceOrModule(domainInterface, interfaceName); - if (!targetInterface || !ts.isInterfaceDeclaration(targetInterface)) { - throw new Error(`interface ${interfaceName} not found within ${domainName} domain`); - } - - return targetInterface.members.every(member => { - if (!ts.isPropertySignature(member)) { - return true; - } - - return member.questionToken !== undefined; - }); -} - -/** - * Returns a Map of events to params and return type for given domain. - * @param {ts.Node} sourceRoot - * @param {string} domainName - * @return {Map} - */ -function getCommandMap(sourceRoot, domainName) { - // We want 'DomainNameCommands' interface, sibling to domain module, for event info. - const commandInterfaceName = domainName + 'Commands'; - const commandInterface = findFirstInterfaceOrModule(sourceRoot, commandInterfaceName); - - if (!commandInterface || !ts.isInterfaceDeclaration(commandInterface)) { - throw new Error(`Command interface not found for domain '${domainName}'.`); - } - - /** @type {Map} */ - const commandMap = new Map(); - - for (const member of commandInterface.members) { - if (!ts.isPropertySignature(member)) { - continue; - } - - if (!ts.isIdentifier(member.name) ) { - throw new Error('Bad event method found ' + member); - } - const commandName = `${domainName}.${member.name.text}`; - - const commandFn = member.type; - if (!commandFn || !ts.isFunctionTypeNode(commandFn)) { - throw new Error(`Command ${commandName} did not have an assigned function`); - } - - const rawParamsTypeNode = getParamType(commandFn, commandName); - let paramsType = 'void'; - if (rawParamsTypeNode !== null) { - const {domain, type} = getTypeName(rawParamsTypeNode, commandName); - paramsType = `Crdp.${domain}.${type}`; - - // if paramsType is entirely optional methods, allow void so it can be - // called without params - if (isWeakInterface(sourceRoot, domain, type)) { - paramsType = 'void | ' + paramsType; - } - } - - const rawReturnTypeName = getPromisedReturnType(commandFn, commandName); - const returnType = rawReturnTypeName === 'void' ? 'void' : - `Crdp.${rawReturnTypeName}`; - - commandMap.set(commandName, {paramsType, returnType}); - } - - return commandMap; -} - -/** - * @param {number} indentLevel - */ -function newline(indentLevel) { - return '\n' + ' '.repeat(indentLevel); -} - -/** - * Append map of all events to outputStr, properly indented. - * @param {ts.Node} sourceRoot - * @param {Array} domainNames - * @param {number} indentLevel - * @return {string} - */ -function outputEventMap(sourceRoot, domainNames, indentLevel) { - let outputStr = newline(indentLevel) + `export interface ${OUTPUT_EVENTS_NAME} {`; - - for (const domainName of domainNames) { - const eventMap = getEventMap(sourceRoot, domainName); - for (const [eventName, eventType] of eventMap) { - outputStr += newline(indentLevel + 1) + `'${eventName}': ${eventType};`; - } - } - - outputStr += newline(indentLevel) + '}'; - - return outputStr; -} - -/** - * Append map of all comand params/return types to outputStr, properly indented. - * @param {ts.Node} sourceRoot - * @param {Array} domainNames - * @param {number} indentLevel - * @return {string} - */ -function outputCommandMap(sourceRoot, domainNames, indentLevel) { - let outputStr = newline(indentLevel) + `export interface ${OUTPUT_COMMANDS_NAME} {`; - - for (const domainName of domainNames) { - const commandsMap = getCommandMap(sourceRoot, domainName); - for (const [commandName, {paramsType, returnType}] of commandsMap) { - outputStr += newline(indentLevel + 1) + `'${commandName}': {`; - outputStr += newline(indentLevel + 2) + `paramsType: ${paramsType},`; - outputStr += newline(indentLevel + 2) + `returnType: ${returnType}`; - outputStr += newline(indentLevel + 1) + '};'; - } - } - - outputStr += newline(indentLevel) + '}'; - - return outputStr; -} - -const source = fs.readFileSync(crdpTypingFile, 'utf8'); -const sourceRoot = ts.createSourceFile(crdpTypingFile, source, ts.ScriptTarget.ES2017, false); -const crdpDomainNames = getCrdpDomainNames(sourceRoot); - -let crdpStr = headerBlock; -crdpStr += ` -declare global { - module LH {`; - -crdpStr += outputEventMap(sourceRoot, crdpDomainNames, 2); -crdpStr += '\n'; -crdpStr += outputCommandMap(sourceRoot, crdpDomainNames, 2); - -crdpStr += ` - } -} - -// empty export to keep file a module -export {} -`; - -// eslint-disable-next-line no-console -console.log('crdp mappings generated'); -fs.writeFileSync(lhCrdpExternsOutputFile, crdpStr); diff --git a/lighthouse-core/test/gather/driver-test.js b/lighthouse-core/test/gather/driver-test.js index e97debc037a1..0f04bdc230c4 100644 --- a/lighthouse-core/test/gather/driver-test.js +++ b/lighthouse-core/test/gather/driver-test.js @@ -223,21 +223,6 @@ describe('Browser Driver', () => { }); }); - it('waits for tracingComplete when tracing already started', () => { - const fakeConnection = new Connection(); - const fakeDriver = new Driver(fakeConnection); - const commands = []; - fakeConnection.sendCommand = evt => { - commands.push(evt); - return Promise.resolve(); - }; - - fakeDriver.once = createOnceStub({'Tracing.tracingComplete': {}}); - return fakeDriver.beginTrace().then(() => { - assert.deepEqual(commands, ['Page.enable', 'Tracing.end', 'Tracing.start']); - }); - }); - it('will request default traceCategories', () => { return driverStub.beginTrace().then(() => { const traceCmd = sendCommandParams.find(obj => obj.command === 'Tracing.start'); diff --git a/package.json b/package.json index 1ded9eb55e5d..407b112411fa 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,6 @@ "update:sample-artifacts": "node lighthouse-core/scripts/update-report-fixtures.js -G", "update:sample-json": "yarn i18n:collect-strings && node ./lighthouse-cli -A=./lighthouse-core/test/results/artifacts --throttling-method=devtools --output=json --output-path=./lighthouse-core/test/results/sample_v2.json && node lighthouse-core/scripts/cleanup-LHR-for-diff.js ./lighthouse-core/test/results/sample_v2.json --only-remove-timing", "diff:sample-json": "yarn i18n:checks && bash lighthouse-core/scripts/assert-golden-lhr-unchanged.sh", - "update:crdp-typings": "node lighthouse-core/scripts/extract-crdp-mapping.js", "ultradumbBenchmark": "./lighthouse-core/scripts/benchmark.js", "mixed-content": "./lighthouse-cli/index.js --chrome-flags='--headless' --preset=mixed-content", "minify-latest-run": "./lighthouse-core/scripts/lantern/minify-trace.js ./latest-run/defaultPass.trace.json ./latest-run/defaultPass.trace.min.json && ./lighthouse-core/scripts/lantern/minify-devtoolslog.js ./latest-run/defaultPass.devtoolslog.json ./latest-run/defaultPass.devtoolslog.min.json" @@ -91,6 +90,7 @@ "coveralls": "^2.11.9", "csv-validator": "^0.0.3", "cz-customizable": "^5.2.0", + "devtools-protocol": "0.0.588129", "eslint": "^4.19.1", "eslint-config-google": "^0.9.1", "gulp": "^3.9.1", @@ -107,7 +107,6 @@ "puppeteer": "1.4.0", "sinon": "^2.3.5", "typescript": "3.1.0-dev.20180831", - "vscode-chrome-debug-core": "^3.23.8", "zone.js": "^0.7.3" }, "dependencies": { diff --git a/third-party/strict-event-emitter-types/LICENSE b/third-party/strict-event-emitter-types/LICENSE deleted file mode 100644 index 5de634ee5354..000000000000 --- a/third-party/strict-event-emitter-types/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright 2018 Brian Terlson - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. \ No newline at end of file diff --git a/third-party/strict-event-emitter-types/index.d.ts b/third-party/strict-event-emitter-types/index.d.ts deleted file mode 100644 index 01cc94d76713..000000000000 --- a/third-party/strict-event-emitter-types/index.d.ts +++ /dev/null @@ -1,78 +0,0 @@ -// Modified from -// https://github.com/bterlson/strict-event-emitter-types/blob/96b30cae8d128c166b575c4c9a524c997ab4f040/src/index.ts -// for better JSDoc support (as of TS 2.8, JSDoc does not support method overrides -// in JS, so not possible to implement the original OverriddenMethods). - -// Returns any keys of TRecord with the type of TMatch -export type MatchingKeys< - TRecord, - TMatch, - K extends keyof TRecord = keyof TRecord - > = K extends (TRecord[K] extends TMatch ? K : never) ? K : never; - -// Returns any property keys of Record with a void type -export type VoidKeys = MatchingKeys; - -// TODO: Stash under a symbol key once TS compiler bug is fixed -export interface TypeRecord { - ' _emitterType'?: T, - ' _eventsType'?: U, - ' _emitType'?: V -} - - -// EventEmitter method overrides, modified so no overloaded methods. -export type OverriddenMethods< - TEventRecord, - TEmitRecord = TEventRecord - > = { - on

(event: P, listener: TEventRecord[P] extends void ? () => void : (m: TEventRecord[P], ...args: any[]) => void): void - - addListener

(event: P, listener: TEventRecord[P] extends void ? () => void : (m: TEventRecord[P], ...args: any[]) => void): void - - addEventListener

(event: P, listener: TEventRecord[P] extends void ? () => void : (m: TEventRecord[P], ...args: any[]) => void): void - - removeListener

(event: P, listener: Function): any; - - once

(event: P, listener: TEventRecord[P] extends void ? () => void : (m: TEventRecord[P], ...args: any[]) => void): void - - // TODO(bckenny): breaking change from original. A void TEmitRecord[P] meant - // no second parameter, but now a second one is always required and must - // extend `void` (e.g. `undefined`). - emit

(event: P, request: TEmitRecord[P]): void; - } - -export type OverriddenKeys = keyof OverriddenMethods - -export type StrictEventEmitter< - TEmitterType, - TEventRecord, - TEmitRecord = TEventRecord, - UnneededMethods extends Exclude - = Exclude, - NeededMethods extends Exclude - = Exclude - > = - // Store the type parameters we've instantiated with so we can refer to them later - TypeRecord & - - // Pick all the methods on the original type we aren't going to override - Pick> & - - // Finally, pick the needed overrides (taking care not to add an override for a method - // that doesn't exist) - Pick, NeededMethods>; - -export default StrictEventEmitter; - -export type NoUndefined = T extends undefined ? never : T; - -export type StrictBroadcast< - TEmitter extends TypeRecord, - TEmitRecord extends NoUndefined = NoUndefined, - VK extends VoidKeys = VoidKeys, - NVK extends Exclude = Exclude - > = { - (event: E, request: TEmitRecord[E]): void; - (event: E): void; - } diff --git a/typings/crdp-mapping.d.ts b/typings/crdp-mapping.d.ts deleted file mode 100644 index 8ab9ff3e0e47..000000000000 --- a/typings/crdp-mapping.d.ts +++ /dev/null @@ -1,1620 +0,0 @@ -/** - * @license Copyright 2018 Google Inc. All Rights Reserved. - * 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. - */ - -// Generated by `yarn update:crdp-typings` - -declare global { - module LH { - export interface CrdpEvents { - 'Console.messageAdded': Crdp.Console.MessageAddedEvent; - 'Debugger.breakpointResolved': Crdp.Debugger.BreakpointResolvedEvent; - 'Debugger.paused': Crdp.Debugger.PausedEvent; - 'Debugger.resumed': void; - 'Debugger.scriptFailedToParse': Crdp.Debugger.ScriptFailedToParseEvent; - 'Debugger.scriptParsed': Crdp.Debugger.ScriptParsedEvent; - 'HeapProfiler.addHeapSnapshotChunk': Crdp.HeapProfiler.AddHeapSnapshotChunkEvent; - 'HeapProfiler.heapStatsUpdate': Crdp.HeapProfiler.HeapStatsUpdateEvent; - 'HeapProfiler.lastSeenObjectId': Crdp.HeapProfiler.LastSeenObjectIdEvent; - 'HeapProfiler.reportHeapSnapshotProgress': Crdp.HeapProfiler.ReportHeapSnapshotProgressEvent; - 'HeapProfiler.resetProfiles': void; - 'Profiler.consoleProfileFinished': Crdp.Profiler.ConsoleProfileFinishedEvent; - 'Profiler.consoleProfileStarted': Crdp.Profiler.ConsoleProfileStartedEvent; - 'Runtime.consoleAPICalled': Crdp.Runtime.ConsoleAPICalledEvent; - 'Runtime.exceptionRevoked': Crdp.Runtime.ExceptionRevokedEvent; - 'Runtime.exceptionThrown': Crdp.Runtime.ExceptionThrownEvent; - 'Runtime.executionContextCreated': Crdp.Runtime.ExecutionContextCreatedEvent; - 'Runtime.executionContextDestroyed': Crdp.Runtime.ExecutionContextDestroyedEvent; - 'Runtime.executionContextsCleared': void; - 'Runtime.inspectRequested': Crdp.Runtime.InspectRequestedEvent; - 'Animation.animationCanceled': Crdp.Animation.AnimationCanceledEvent; - 'Animation.animationCreated': Crdp.Animation.AnimationCreatedEvent; - 'Animation.animationStarted': Crdp.Animation.AnimationStartedEvent; - 'ApplicationCache.applicationCacheStatusUpdated': Crdp.ApplicationCache.ApplicationCacheStatusUpdatedEvent; - 'ApplicationCache.networkStateUpdated': Crdp.ApplicationCache.NetworkStateUpdatedEvent; - 'CSS.fontsUpdated': void; - 'CSS.mediaQueryResultChanged': void; - 'CSS.styleSheetAdded': Crdp.CSS.StyleSheetAddedEvent; - 'CSS.styleSheetChanged': Crdp.CSS.StyleSheetChangedEvent; - 'CSS.styleSheetRemoved': Crdp.CSS.StyleSheetRemovedEvent; - 'DOM.attributeModified': Crdp.DOM.AttributeModifiedEvent; - 'DOM.attributeRemoved': Crdp.DOM.AttributeRemovedEvent; - 'DOM.characterDataModified': Crdp.DOM.CharacterDataModifiedEvent; - 'DOM.childNodeCountUpdated': Crdp.DOM.ChildNodeCountUpdatedEvent; - 'DOM.childNodeInserted': Crdp.DOM.ChildNodeInsertedEvent; - 'DOM.childNodeRemoved': Crdp.DOM.ChildNodeRemovedEvent; - 'DOM.distributedNodesUpdated': Crdp.DOM.DistributedNodesUpdatedEvent; - 'DOM.documentUpdated': void; - 'DOM.inlineStyleInvalidated': Crdp.DOM.InlineStyleInvalidatedEvent; - 'DOM.pseudoElementAdded': Crdp.DOM.PseudoElementAddedEvent; - 'DOM.pseudoElementRemoved': Crdp.DOM.PseudoElementRemovedEvent; - 'DOM.setChildNodes': Crdp.DOM.SetChildNodesEvent; - 'DOM.shadowRootPopped': Crdp.DOM.ShadowRootPoppedEvent; - 'DOM.shadowRootPushed': Crdp.DOM.ShadowRootPushedEvent; - 'DOMStorage.domStorageItemAdded': Crdp.DOMStorage.DomStorageItemAddedEvent; - 'DOMStorage.domStorageItemRemoved': Crdp.DOMStorage.DomStorageItemRemovedEvent; - 'DOMStorage.domStorageItemUpdated': Crdp.DOMStorage.DomStorageItemUpdatedEvent; - 'DOMStorage.domStorageItemsCleared': Crdp.DOMStorage.DomStorageItemsClearedEvent; - 'Database.addDatabase': Crdp.Database.AddDatabaseEvent; - 'Emulation.virtualTimeAdvanced': Crdp.Emulation.VirtualTimeAdvancedEvent; - 'Emulation.virtualTimeBudgetExpired': void; - 'Emulation.virtualTimePaused': Crdp.Emulation.VirtualTimePausedEvent; - 'HeadlessExperimental.mainFrameReadyForScreenshots': void; - 'HeadlessExperimental.needsBeginFramesChanged': Crdp.HeadlessExperimental.NeedsBeginFramesChangedEvent; - 'Inspector.detached': Crdp.Inspector.DetachedEvent; - 'Inspector.targetCrashed': void; - 'LayerTree.layerPainted': Crdp.LayerTree.LayerPaintedEvent; - 'LayerTree.layerTreeDidChange': Crdp.LayerTree.LayerTreeDidChangeEvent; - 'Log.entryAdded': Crdp.Log.EntryAddedEvent; - 'Network.dataReceived': Crdp.Network.DataReceivedEvent; - 'Network.eventSourceMessageReceived': Crdp.Network.EventSourceMessageReceivedEvent; - 'Network.loadingFailed': Crdp.Network.LoadingFailedEvent; - 'Network.loadingFinished': Crdp.Network.LoadingFinishedEvent; - 'Network.requestIntercepted': Crdp.Network.RequestInterceptedEvent; - 'Network.requestServedFromCache': Crdp.Network.RequestServedFromCacheEvent; - 'Network.requestWillBeSent': Crdp.Network.RequestWillBeSentEvent; - 'Network.resourceChangedPriority': Crdp.Network.ResourceChangedPriorityEvent; - 'Network.responseReceived': Crdp.Network.ResponseReceivedEvent; - 'Network.webSocketClosed': Crdp.Network.WebSocketClosedEvent; - 'Network.webSocketCreated': Crdp.Network.WebSocketCreatedEvent; - 'Network.webSocketFrameError': Crdp.Network.WebSocketFrameErrorEvent; - 'Network.webSocketFrameReceived': Crdp.Network.WebSocketFrameReceivedEvent; - 'Network.webSocketFrameSent': Crdp.Network.WebSocketFrameSentEvent; - 'Network.webSocketHandshakeResponseReceived': Crdp.Network.WebSocketHandshakeResponseReceivedEvent; - 'Network.webSocketWillSendHandshakeRequest': Crdp.Network.WebSocketWillSendHandshakeRequestEvent; - 'Overlay.inspectNodeRequested': Crdp.Overlay.InspectNodeRequestedEvent; - 'Overlay.nodeHighlightRequested': Crdp.Overlay.NodeHighlightRequestedEvent; - 'Overlay.screenshotRequested': Crdp.Overlay.ScreenshotRequestedEvent; - 'Page.domContentEventFired': Crdp.Page.DomContentEventFiredEvent; - 'Page.frameAttached': Crdp.Page.FrameAttachedEvent; - 'Page.frameClearedScheduledNavigation': Crdp.Page.FrameClearedScheduledNavigationEvent; - 'Page.frameDetached': Crdp.Page.FrameDetachedEvent; - 'Page.frameNavigated': Crdp.Page.FrameNavigatedEvent; - 'Page.frameResized': void; - 'Page.frameScheduledNavigation': Crdp.Page.FrameScheduledNavigationEvent; - 'Page.frameStartedLoading': Crdp.Page.FrameStartedLoadingEvent; - 'Page.frameStoppedLoading': Crdp.Page.FrameStoppedLoadingEvent; - 'Page.interstitialHidden': void; - 'Page.interstitialShown': void; - 'Page.javascriptDialogClosed': Crdp.Page.JavascriptDialogClosedEvent; - 'Page.javascriptDialogOpening': Crdp.Page.JavascriptDialogOpeningEvent; - 'Page.lifecycleEvent': Crdp.Page.LifecycleEventEvent; - 'Page.loadEventFired': Crdp.Page.LoadEventFiredEvent; - 'Page.screencastFrame': Crdp.Page.ScreencastFrameEvent; - 'Page.screencastVisibilityChanged': Crdp.Page.ScreencastVisibilityChangedEvent; - 'Page.windowOpen': Crdp.Page.WindowOpenEvent; - 'Performance.metrics': Crdp.Performance.MetricsEvent; - 'Security.certificateError': Crdp.Security.CertificateErrorEvent; - 'Security.securityStateChanged': Crdp.Security.SecurityStateChangedEvent; - 'ServiceWorker.workerErrorReported': Crdp.ServiceWorker.WorkerErrorReportedEvent; - 'ServiceWorker.workerRegistrationUpdated': Crdp.ServiceWorker.WorkerRegistrationUpdatedEvent; - 'ServiceWorker.workerVersionUpdated': Crdp.ServiceWorker.WorkerVersionUpdatedEvent; - 'Storage.cacheStorageContentUpdated': Crdp.Storage.CacheStorageContentUpdatedEvent; - 'Storage.cacheStorageListUpdated': Crdp.Storage.CacheStorageListUpdatedEvent; - 'Storage.indexedDBContentUpdated': Crdp.Storage.IndexedDBContentUpdatedEvent; - 'Storage.indexedDBListUpdated': Crdp.Storage.IndexedDBListUpdatedEvent; - 'Target.attachedToTarget': Crdp.Target.AttachedToTargetEvent; - 'Target.detachedFromTarget': Crdp.Target.DetachedFromTargetEvent; - 'Target.receivedMessageFromTarget': Crdp.Target.ReceivedMessageFromTargetEvent; - 'Target.targetCreated': Crdp.Target.TargetCreatedEvent; - 'Target.targetDestroyed': Crdp.Target.TargetDestroyedEvent; - 'Target.targetInfoChanged': Crdp.Target.TargetInfoChangedEvent; - 'Tethering.accepted': Crdp.Tethering.AcceptedEvent; - 'Tracing.bufferUsage': Crdp.Tracing.BufferUsageEvent; - 'Tracing.dataCollected': Crdp.Tracing.DataCollectedEvent; - 'Tracing.tracingComplete': Crdp.Tracing.TracingCompleteEvent; - } - - export interface CrdpCommands { - 'Console.clearMessages': { - paramsType: void, - returnType: void - }; - 'Console.disable': { - paramsType: void, - returnType: void - }; - 'Console.enable': { - paramsType: void, - returnType: void - }; - 'Debugger.continueToLocation': { - paramsType: Crdp.Debugger.ContinueToLocationRequest, - returnType: void - }; - 'Debugger.disable': { - paramsType: void, - returnType: void - }; - 'Debugger.enable': { - paramsType: void, - returnType: Crdp.Debugger.EnableResponse - }; - 'Debugger.evaluateOnCallFrame': { - paramsType: Crdp.Debugger.EvaluateOnCallFrameRequest, - returnType: Crdp.Debugger.EvaluateOnCallFrameResponse - }; - 'Debugger.getPossibleBreakpoints': { - paramsType: Crdp.Debugger.GetPossibleBreakpointsRequest, - returnType: Crdp.Debugger.GetPossibleBreakpointsResponse - }; - 'Debugger.getScriptSource': { - paramsType: Crdp.Debugger.GetScriptSourceRequest, - returnType: Crdp.Debugger.GetScriptSourceResponse - }; - 'Debugger.getStackTrace': { - paramsType: Crdp.Debugger.GetStackTraceRequest, - returnType: Crdp.Debugger.GetStackTraceResponse - }; - 'Debugger.pause': { - paramsType: void, - returnType: void - }; - 'Debugger.pauseOnAsyncCall': { - paramsType: Crdp.Debugger.PauseOnAsyncCallRequest, - returnType: void - }; - 'Debugger.removeBreakpoint': { - paramsType: Crdp.Debugger.RemoveBreakpointRequest, - returnType: void - }; - 'Debugger.restartFrame': { - paramsType: Crdp.Debugger.RestartFrameRequest, - returnType: Crdp.Debugger.RestartFrameResponse - }; - 'Debugger.resume': { - paramsType: void, - returnType: void - }; - 'Debugger.scheduleStepIntoAsync': { - paramsType: void, - returnType: void - }; - 'Debugger.searchInContent': { - paramsType: Crdp.Debugger.SearchInContentRequest, - returnType: Crdp.Debugger.SearchInContentResponse - }; - 'Debugger.setAsyncCallStackDepth': { - paramsType: Crdp.Debugger.SetAsyncCallStackDepthRequest, - returnType: void - }; - 'Debugger.setBlackboxPatterns': { - paramsType: Crdp.Debugger.SetBlackboxPatternsRequest, - returnType: void - }; - 'Debugger.setBlackboxedRanges': { - paramsType: Crdp.Debugger.SetBlackboxedRangesRequest, - returnType: void - }; - 'Debugger.setBreakpoint': { - paramsType: Crdp.Debugger.SetBreakpointRequest, - returnType: Crdp.Debugger.SetBreakpointResponse - }; - 'Debugger.setBreakpointByUrl': { - paramsType: Crdp.Debugger.SetBreakpointByUrlRequest, - returnType: Crdp.Debugger.SetBreakpointByUrlResponse - }; - 'Debugger.setBreakpointsActive': { - paramsType: Crdp.Debugger.SetBreakpointsActiveRequest, - returnType: void - }; - 'Debugger.setPauseOnExceptions': { - paramsType: Crdp.Debugger.SetPauseOnExceptionsRequest, - returnType: void - }; - 'Debugger.setReturnValue': { - paramsType: Crdp.Debugger.SetReturnValueRequest, - returnType: void - }; - 'Debugger.setScriptSource': { - paramsType: Crdp.Debugger.SetScriptSourceRequest, - returnType: Crdp.Debugger.SetScriptSourceResponse - }; - 'Debugger.setSkipAllPauses': { - paramsType: Crdp.Debugger.SetSkipAllPausesRequest, - returnType: void - }; - 'Debugger.setVariableValue': { - paramsType: Crdp.Debugger.SetVariableValueRequest, - returnType: void - }; - 'Debugger.stepInto': { - paramsType: void | Crdp.Debugger.StepIntoRequest, - returnType: void - }; - 'Debugger.stepOut': { - paramsType: void, - returnType: void - }; - 'Debugger.stepOver': { - paramsType: void, - returnType: void - }; - 'HeapProfiler.addInspectedHeapObject': { - paramsType: Crdp.HeapProfiler.AddInspectedHeapObjectRequest, - returnType: void - }; - 'HeapProfiler.collectGarbage': { - paramsType: void, - returnType: void - }; - 'HeapProfiler.disable': { - paramsType: void, - returnType: void - }; - 'HeapProfiler.enable': { - paramsType: void, - returnType: void - }; - 'HeapProfiler.getHeapObjectId': { - paramsType: Crdp.HeapProfiler.GetHeapObjectIdRequest, - returnType: Crdp.HeapProfiler.GetHeapObjectIdResponse - }; - 'HeapProfiler.getObjectByHeapObjectId': { - paramsType: Crdp.HeapProfiler.GetObjectByHeapObjectIdRequest, - returnType: Crdp.HeapProfiler.GetObjectByHeapObjectIdResponse - }; - 'HeapProfiler.getSamplingProfile': { - paramsType: void, - returnType: Crdp.HeapProfiler.GetSamplingProfileResponse - }; - 'HeapProfiler.startSampling': { - paramsType: void | Crdp.HeapProfiler.StartSamplingRequest, - returnType: void - }; - 'HeapProfiler.startTrackingHeapObjects': { - paramsType: void | Crdp.HeapProfiler.StartTrackingHeapObjectsRequest, - returnType: void - }; - 'HeapProfiler.stopSampling': { - paramsType: void, - returnType: Crdp.HeapProfiler.StopSamplingResponse - }; - 'HeapProfiler.stopTrackingHeapObjects': { - paramsType: void | Crdp.HeapProfiler.StopTrackingHeapObjectsRequest, - returnType: void - }; - 'HeapProfiler.takeHeapSnapshot': { - paramsType: void | Crdp.HeapProfiler.TakeHeapSnapshotRequest, - returnType: void - }; - 'Profiler.disable': { - paramsType: void, - returnType: void - }; - 'Profiler.enable': { - paramsType: void, - returnType: void - }; - 'Profiler.getBestEffortCoverage': { - paramsType: void, - returnType: Crdp.Profiler.GetBestEffortCoverageResponse - }; - 'Profiler.setSamplingInterval': { - paramsType: Crdp.Profiler.SetSamplingIntervalRequest, - returnType: void - }; - 'Profiler.start': { - paramsType: void, - returnType: void - }; - 'Profiler.startPreciseCoverage': { - paramsType: void | Crdp.Profiler.StartPreciseCoverageRequest, - returnType: void - }; - 'Profiler.startTypeProfile': { - paramsType: void, - returnType: void - }; - 'Profiler.stop': { - paramsType: void, - returnType: Crdp.Profiler.StopResponse - }; - 'Profiler.stopPreciseCoverage': { - paramsType: void, - returnType: void - }; - 'Profiler.stopTypeProfile': { - paramsType: void, - returnType: void - }; - 'Profiler.takePreciseCoverage': { - paramsType: void, - returnType: Crdp.Profiler.TakePreciseCoverageResponse - }; - 'Profiler.takeTypeProfile': { - paramsType: void, - returnType: Crdp.Profiler.TakeTypeProfileResponse - }; - 'Runtime.awaitPromise': { - paramsType: Crdp.Runtime.AwaitPromiseRequest, - returnType: Crdp.Runtime.AwaitPromiseResponse - }; - 'Runtime.callFunctionOn': { - paramsType: Crdp.Runtime.CallFunctionOnRequest, - returnType: Crdp.Runtime.CallFunctionOnResponse - }; - 'Runtime.compileScript': { - paramsType: Crdp.Runtime.CompileScriptRequest, - returnType: Crdp.Runtime.CompileScriptResponse - }; - 'Runtime.disable': { - paramsType: void, - returnType: void - }; - 'Runtime.discardConsoleEntries': { - paramsType: void, - returnType: void - }; - 'Runtime.enable': { - paramsType: void, - returnType: void - }; - 'Runtime.evaluate': { - paramsType: Crdp.Runtime.EvaluateRequest, - returnType: Crdp.Runtime.EvaluateResponse - }; - 'Runtime.getProperties': { - paramsType: Crdp.Runtime.GetPropertiesRequest, - returnType: Crdp.Runtime.GetPropertiesResponse - }; - 'Runtime.globalLexicalScopeNames': { - paramsType: void | Crdp.Runtime.GlobalLexicalScopeNamesRequest, - returnType: Crdp.Runtime.GlobalLexicalScopeNamesResponse - }; - 'Runtime.queryObjects': { - paramsType: Crdp.Runtime.QueryObjectsRequest, - returnType: Crdp.Runtime.QueryObjectsResponse - }; - 'Runtime.releaseObject': { - paramsType: Crdp.Runtime.ReleaseObjectRequest, - returnType: void - }; - 'Runtime.releaseObjectGroup': { - paramsType: Crdp.Runtime.ReleaseObjectGroupRequest, - returnType: void - }; - 'Runtime.runIfWaitingForDebugger': { - paramsType: void, - returnType: void - }; - 'Runtime.runScript': { - paramsType: Crdp.Runtime.RunScriptRequest, - returnType: Crdp.Runtime.RunScriptResponse - }; - 'Runtime.setCustomObjectFormatterEnabled': { - paramsType: Crdp.Runtime.SetCustomObjectFormatterEnabledRequest, - returnType: void - }; - 'Schema.getDomains': { - paramsType: void, - returnType: Crdp.Schema.GetDomainsResponse - }; - 'Accessibility.getPartialAXTree': { - paramsType: Crdp.Accessibility.GetPartialAXTreeRequest, - returnType: Crdp.Accessibility.GetPartialAXTreeResponse - }; - 'Animation.disable': { - paramsType: void, - returnType: void - }; - 'Animation.enable': { - paramsType: void, - returnType: void - }; - 'Animation.getCurrentTime': { - paramsType: Crdp.Animation.GetCurrentTimeRequest, - returnType: Crdp.Animation.GetCurrentTimeResponse - }; - 'Animation.getPlaybackRate': { - paramsType: void, - returnType: Crdp.Animation.GetPlaybackRateResponse - }; - 'Animation.releaseAnimations': { - paramsType: Crdp.Animation.ReleaseAnimationsRequest, - returnType: void - }; - 'Animation.resolveAnimation': { - paramsType: Crdp.Animation.ResolveAnimationRequest, - returnType: Crdp.Animation.ResolveAnimationResponse - }; - 'Animation.seekAnimations': { - paramsType: Crdp.Animation.SeekAnimationsRequest, - returnType: void - }; - 'Animation.setPaused': { - paramsType: Crdp.Animation.SetPausedRequest, - returnType: void - }; - 'Animation.setPlaybackRate': { - paramsType: Crdp.Animation.SetPlaybackRateRequest, - returnType: void - }; - 'Animation.setTiming': { - paramsType: Crdp.Animation.SetTimingRequest, - returnType: void - }; - 'ApplicationCache.enable': { - paramsType: void, - returnType: void - }; - 'ApplicationCache.getApplicationCacheForFrame': { - paramsType: Crdp.ApplicationCache.GetApplicationCacheForFrameRequest, - returnType: Crdp.ApplicationCache.GetApplicationCacheForFrameResponse - }; - 'ApplicationCache.getFramesWithManifests': { - paramsType: void, - returnType: Crdp.ApplicationCache.GetFramesWithManifestsResponse - }; - 'ApplicationCache.getManifestForFrame': { - paramsType: Crdp.ApplicationCache.GetManifestForFrameRequest, - returnType: Crdp.ApplicationCache.GetManifestForFrameResponse - }; - 'Audits.getEncodedResponse': { - paramsType: Crdp.Audits.GetEncodedResponseRequest, - returnType: Crdp.Audits.GetEncodedResponseResponse - }; - 'Browser.close': { - paramsType: void, - returnType: void - }; - 'Browser.getVersion': { - paramsType: void, - returnType: Crdp.Browser.GetVersionResponse - }; - 'Browser.getHistograms': { - paramsType: void | Crdp.Browser.GetHistogramsRequest, - returnType: Crdp.Browser.GetHistogramsResponse - }; - 'Browser.getHistogram': { - paramsType: Crdp.Browser.GetHistogramRequest, - returnType: Crdp.Browser.GetHistogramResponse - }; - 'Browser.getWindowBounds': { - paramsType: Crdp.Browser.GetWindowBoundsRequest, - returnType: Crdp.Browser.GetWindowBoundsResponse - }; - 'Browser.getWindowForTarget': { - paramsType: Crdp.Browser.GetWindowForTargetRequest, - returnType: Crdp.Browser.GetWindowForTargetResponse - }; - 'Browser.setWindowBounds': { - paramsType: Crdp.Browser.SetWindowBoundsRequest, - returnType: void - }; - 'CSS.addRule': { - paramsType: Crdp.CSS.AddRuleRequest, - returnType: Crdp.CSS.AddRuleResponse - }; - 'CSS.collectClassNames': { - paramsType: Crdp.CSS.CollectClassNamesRequest, - returnType: Crdp.CSS.CollectClassNamesResponse - }; - 'CSS.createStyleSheet': { - paramsType: Crdp.CSS.CreateStyleSheetRequest, - returnType: Crdp.CSS.CreateStyleSheetResponse - }; - 'CSS.disable': { - paramsType: void, - returnType: void - }; - 'CSS.enable': { - paramsType: void, - returnType: void - }; - 'CSS.forcePseudoState': { - paramsType: Crdp.CSS.ForcePseudoStateRequest, - returnType: void - }; - 'CSS.getBackgroundColors': { - paramsType: Crdp.CSS.GetBackgroundColorsRequest, - returnType: Crdp.CSS.GetBackgroundColorsResponse - }; - 'CSS.getComputedStyleForNode': { - paramsType: Crdp.CSS.GetComputedStyleForNodeRequest, - returnType: Crdp.CSS.GetComputedStyleForNodeResponse - }; - 'CSS.getInlineStylesForNode': { - paramsType: Crdp.CSS.GetInlineStylesForNodeRequest, - returnType: Crdp.CSS.GetInlineStylesForNodeResponse - }; - 'CSS.getMatchedStylesForNode': { - paramsType: Crdp.CSS.GetMatchedStylesForNodeRequest, - returnType: Crdp.CSS.GetMatchedStylesForNodeResponse - }; - 'CSS.getMediaQueries': { - paramsType: void, - returnType: Crdp.CSS.GetMediaQueriesResponse - }; - 'CSS.getPlatformFontsForNode': { - paramsType: Crdp.CSS.GetPlatformFontsForNodeRequest, - returnType: Crdp.CSS.GetPlatformFontsForNodeResponse - }; - 'CSS.getStyleSheetText': { - paramsType: Crdp.CSS.GetStyleSheetTextRequest, - returnType: Crdp.CSS.GetStyleSheetTextResponse - }; - 'CSS.setEffectivePropertyValueForNode': { - paramsType: Crdp.CSS.SetEffectivePropertyValueForNodeRequest, - returnType: void - }; - 'CSS.setKeyframeKey': { - paramsType: Crdp.CSS.SetKeyframeKeyRequest, - returnType: Crdp.CSS.SetKeyframeKeyResponse - }; - 'CSS.setMediaText': { - paramsType: Crdp.CSS.SetMediaTextRequest, - returnType: Crdp.CSS.SetMediaTextResponse - }; - 'CSS.setRuleSelector': { - paramsType: Crdp.CSS.SetRuleSelectorRequest, - returnType: Crdp.CSS.SetRuleSelectorResponse - }; - 'CSS.setStyleSheetText': { - paramsType: Crdp.CSS.SetStyleSheetTextRequest, - returnType: Crdp.CSS.SetStyleSheetTextResponse - }; - 'CSS.setStyleTexts': { - paramsType: Crdp.CSS.SetStyleTextsRequest, - returnType: Crdp.CSS.SetStyleTextsResponse - }; - 'CSS.startRuleUsageTracking': { - paramsType: void, - returnType: void - }; - 'CSS.stopRuleUsageTracking': { - paramsType: void, - returnType: Crdp.CSS.StopRuleUsageTrackingResponse - }; - 'CSS.takeCoverageDelta': { - paramsType: void, - returnType: Crdp.CSS.TakeCoverageDeltaResponse - }; - 'CacheStorage.deleteCache': { - paramsType: Crdp.CacheStorage.DeleteCacheRequest, - returnType: void - }; - 'CacheStorage.deleteEntry': { - paramsType: Crdp.CacheStorage.DeleteEntryRequest, - returnType: void - }; - 'CacheStorage.requestCacheNames': { - paramsType: Crdp.CacheStorage.RequestCacheNamesRequest, - returnType: Crdp.CacheStorage.RequestCacheNamesResponse - }; - 'CacheStorage.requestCachedResponse': { - paramsType: Crdp.CacheStorage.RequestCachedResponseRequest, - returnType: Crdp.CacheStorage.RequestCachedResponseResponse - }; - 'CacheStorage.requestEntries': { - paramsType: Crdp.CacheStorage.RequestEntriesRequest, - returnType: Crdp.CacheStorage.RequestEntriesResponse - }; - 'DOM.collectClassNamesFromSubtree': { - paramsType: Crdp.DOM.CollectClassNamesFromSubtreeRequest, - returnType: Crdp.DOM.CollectClassNamesFromSubtreeResponse - }; - 'DOM.copyTo': { - paramsType: Crdp.DOM.CopyToRequest, - returnType: Crdp.DOM.CopyToResponse - }; - 'DOM.describeNode': { - paramsType: void | Crdp.DOM.DescribeNodeRequest, - returnType: Crdp.DOM.DescribeNodeResponse - }; - 'DOM.disable': { - paramsType: void, - returnType: void - }; - 'DOM.discardSearchResults': { - paramsType: Crdp.DOM.DiscardSearchResultsRequest, - returnType: void - }; - 'DOM.enable': { - paramsType: void, - returnType: void - }; - 'DOM.focus': { - paramsType: void | Crdp.DOM.FocusRequest, - returnType: void - }; - 'DOM.getAttributes': { - paramsType: Crdp.DOM.GetAttributesRequest, - returnType: Crdp.DOM.GetAttributesResponse - }; - 'DOM.getBoxModel': { - paramsType: void | Crdp.DOM.GetBoxModelRequest, - returnType: Crdp.DOM.GetBoxModelResponse - }; - 'DOM.getDocument': { - paramsType: void | Crdp.DOM.GetDocumentRequest, - returnType: Crdp.DOM.GetDocumentResponse - }; - 'DOM.getFlattenedDocument': { - paramsType: void | Crdp.DOM.GetFlattenedDocumentRequest, - returnType: Crdp.DOM.GetFlattenedDocumentResponse - }; - 'DOM.getNodeForLocation': { - paramsType: Crdp.DOM.GetNodeForLocationRequest, - returnType: Crdp.DOM.GetNodeForLocationResponse - }; - 'DOM.getOuterHTML': { - paramsType: void | Crdp.DOM.GetOuterHTMLRequest, - returnType: Crdp.DOM.GetOuterHTMLResponse - }; - 'DOM.getRelayoutBoundary': { - paramsType: Crdp.DOM.GetRelayoutBoundaryRequest, - returnType: Crdp.DOM.GetRelayoutBoundaryResponse - }; - 'DOM.getSearchResults': { - paramsType: Crdp.DOM.GetSearchResultsRequest, - returnType: Crdp.DOM.GetSearchResultsResponse - }; - 'DOM.hideHighlight': { - paramsType: void, - returnType: void - }; - 'DOM.highlightNode': { - paramsType: void, - returnType: void - }; - 'DOM.highlightRect': { - paramsType: void, - returnType: void - }; - 'DOM.markUndoableState': { - paramsType: void, - returnType: void - }; - 'DOM.moveTo': { - paramsType: Crdp.DOM.MoveToRequest, - returnType: Crdp.DOM.MoveToResponse - }; - 'DOM.performSearch': { - paramsType: Crdp.DOM.PerformSearchRequest, - returnType: Crdp.DOM.PerformSearchResponse - }; - 'DOM.pushNodeByPathToFrontend': { - paramsType: Crdp.DOM.PushNodeByPathToFrontendRequest, - returnType: Crdp.DOM.PushNodeByPathToFrontendResponse - }; - 'DOM.pushNodesByBackendIdsToFrontend': { - paramsType: Crdp.DOM.PushNodesByBackendIdsToFrontendRequest, - returnType: Crdp.DOM.PushNodesByBackendIdsToFrontendResponse - }; - 'DOM.querySelector': { - paramsType: Crdp.DOM.QuerySelectorRequest, - returnType: Crdp.DOM.QuerySelectorResponse - }; - 'DOM.querySelectorAll': { - paramsType: Crdp.DOM.QuerySelectorAllRequest, - returnType: Crdp.DOM.QuerySelectorAllResponse - }; - 'DOM.redo': { - paramsType: void, - returnType: void - }; - 'DOM.removeAttribute': { - paramsType: Crdp.DOM.RemoveAttributeRequest, - returnType: void - }; - 'DOM.removeNode': { - paramsType: Crdp.DOM.RemoveNodeRequest, - returnType: void - }; - 'DOM.requestChildNodes': { - paramsType: Crdp.DOM.RequestChildNodesRequest, - returnType: void - }; - 'DOM.requestNode': { - paramsType: Crdp.DOM.RequestNodeRequest, - returnType: Crdp.DOM.RequestNodeResponse - }; - 'DOM.resolveNode': { - paramsType: void | Crdp.DOM.ResolveNodeRequest, - returnType: Crdp.DOM.ResolveNodeResponse - }; - 'DOM.setAttributeValue': { - paramsType: Crdp.DOM.SetAttributeValueRequest, - returnType: void - }; - 'DOM.setAttributesAsText': { - paramsType: Crdp.DOM.SetAttributesAsTextRequest, - returnType: void - }; - 'DOM.setFileInputFiles': { - paramsType: Crdp.DOM.SetFileInputFilesRequest, - returnType: void - }; - 'DOM.setInspectedNode': { - paramsType: Crdp.DOM.SetInspectedNodeRequest, - returnType: void - }; - 'DOM.setNodeName': { - paramsType: Crdp.DOM.SetNodeNameRequest, - returnType: Crdp.DOM.SetNodeNameResponse - }; - 'DOM.setNodeValue': { - paramsType: Crdp.DOM.SetNodeValueRequest, - returnType: void - }; - 'DOM.setOuterHTML': { - paramsType: Crdp.DOM.SetOuterHTMLRequest, - returnType: void - }; - 'DOM.undo': { - paramsType: void, - returnType: void - }; - 'DOMDebugger.getEventListeners': { - paramsType: Crdp.DOMDebugger.GetEventListenersRequest, - returnType: Crdp.DOMDebugger.GetEventListenersResponse - }; - 'DOMDebugger.removeDOMBreakpoint': { - paramsType: Crdp.DOMDebugger.RemoveDOMBreakpointRequest, - returnType: void - }; - 'DOMDebugger.removeEventListenerBreakpoint': { - paramsType: Crdp.DOMDebugger.RemoveEventListenerBreakpointRequest, - returnType: void - }; - 'DOMDebugger.removeInstrumentationBreakpoint': { - paramsType: Crdp.DOMDebugger.RemoveInstrumentationBreakpointRequest, - returnType: void - }; - 'DOMDebugger.removeXHRBreakpoint': { - paramsType: Crdp.DOMDebugger.RemoveXHRBreakpointRequest, - returnType: void - }; - 'DOMDebugger.setDOMBreakpoint': { - paramsType: Crdp.DOMDebugger.SetDOMBreakpointRequest, - returnType: void - }; - 'DOMDebugger.setEventListenerBreakpoint': { - paramsType: Crdp.DOMDebugger.SetEventListenerBreakpointRequest, - returnType: void - }; - 'DOMDebugger.setInstrumentationBreakpoint': { - paramsType: Crdp.DOMDebugger.SetInstrumentationBreakpointRequest, - returnType: void - }; - 'DOMDebugger.setXHRBreakpoint': { - paramsType: Crdp.DOMDebugger.SetXHRBreakpointRequest, - returnType: void - }; - 'DOMSnapshot.getSnapshot': { - paramsType: Crdp.DOMSnapshot.GetSnapshotRequest, - returnType: Crdp.DOMSnapshot.GetSnapshotResponse - }; - 'DOMStorage.clear': { - paramsType: Crdp.DOMStorage.ClearRequest, - returnType: void - }; - 'DOMStorage.disable': { - paramsType: void, - returnType: void - }; - 'DOMStorage.enable': { - paramsType: void, - returnType: void - }; - 'DOMStorage.getDOMStorageItems': { - paramsType: Crdp.DOMStorage.GetDOMStorageItemsRequest, - returnType: Crdp.DOMStorage.GetDOMStorageItemsResponse - }; - 'DOMStorage.removeDOMStorageItem': { - paramsType: Crdp.DOMStorage.RemoveDOMStorageItemRequest, - returnType: void - }; - 'DOMStorage.setDOMStorageItem': { - paramsType: Crdp.DOMStorage.SetDOMStorageItemRequest, - returnType: void - }; - 'Database.disable': { - paramsType: void, - returnType: void - }; - 'Database.enable': { - paramsType: void, - returnType: void - }; - 'Database.executeSQL': { - paramsType: Crdp.Database.ExecuteSQLRequest, - returnType: Crdp.Database.ExecuteSQLResponse - }; - 'Database.getDatabaseTableNames': { - paramsType: Crdp.Database.GetDatabaseTableNamesRequest, - returnType: Crdp.Database.GetDatabaseTableNamesResponse - }; - 'DeviceOrientation.clearDeviceOrientationOverride': { - paramsType: void, - returnType: void - }; - 'DeviceOrientation.setDeviceOrientationOverride': { - paramsType: Crdp.DeviceOrientation.SetDeviceOrientationOverrideRequest, - returnType: void - }; - 'Emulation.canEmulate': { - paramsType: void, - returnType: Crdp.Emulation.CanEmulateResponse - }; - 'Emulation.clearDeviceMetricsOverride': { - paramsType: void, - returnType: void - }; - 'Emulation.clearGeolocationOverride': { - paramsType: void, - returnType: void - }; - 'Emulation.resetPageScaleFactor': { - paramsType: void, - returnType: void - }; - 'Emulation.setCPUThrottlingRate': { - paramsType: Crdp.Emulation.SetCPUThrottlingRateRequest, - returnType: void - }; - 'Emulation.setDefaultBackgroundColorOverride': { - paramsType: void | Crdp.Emulation.SetDefaultBackgroundColorOverrideRequest, - returnType: void - }; - 'Emulation.setDeviceMetricsOverride': { - paramsType: Crdp.Emulation.SetDeviceMetricsOverrideRequest, - returnType: void - }; - 'Emulation.setEmitTouchEventsForMouse': { - paramsType: Crdp.Emulation.SetEmitTouchEventsForMouseRequest, - returnType: void - }; - 'Emulation.setEmulatedMedia': { - paramsType: Crdp.Emulation.SetEmulatedMediaRequest, - returnType: void - }; - 'Emulation.setGeolocationOverride': { - paramsType: void | Crdp.Emulation.SetGeolocationOverrideRequest, - returnType: void - }; - 'Emulation.setNavigatorOverrides': { - paramsType: Crdp.Emulation.SetNavigatorOverridesRequest, - returnType: void - }; - 'Emulation.setPageScaleFactor': { - paramsType: Crdp.Emulation.SetPageScaleFactorRequest, - returnType: void - }; - 'Emulation.setScriptExecutionDisabled': { - paramsType: Crdp.Emulation.SetScriptExecutionDisabledRequest, - returnType: void - }; - 'Emulation.setTouchEmulationEnabled': { - paramsType: Crdp.Emulation.SetTouchEmulationEnabledRequest, - returnType: void - }; - 'Emulation.setVirtualTimePolicy': { - paramsType: Crdp.Emulation.SetVirtualTimePolicyRequest, - returnType: Crdp.Emulation.SetVirtualTimePolicyResponse - }; - 'Emulation.setVisibleSize': { - paramsType: Crdp.Emulation.SetVisibleSizeRequest, - returnType: void - }; - 'HeadlessExperimental.beginFrame': { - paramsType: void | Crdp.HeadlessExperimental.BeginFrameRequest, - returnType: Crdp.HeadlessExperimental.BeginFrameResponse - }; - 'HeadlessExperimental.disable': { - paramsType: void, - returnType: void - }; - 'HeadlessExperimental.enable': { - paramsType: void, - returnType: void - }; - 'IO.close': { - paramsType: Crdp.IO.CloseRequest, - returnType: void - }; - 'IO.read': { - paramsType: Crdp.IO.ReadRequest, - returnType: Crdp.IO.ReadResponse - }; - 'IO.resolveBlob': { - paramsType: Crdp.IO.ResolveBlobRequest, - returnType: Crdp.IO.ResolveBlobResponse - }; - 'IndexedDB.clearObjectStore': { - paramsType: Crdp.IndexedDB.ClearObjectStoreRequest, - returnType: void - }; - 'IndexedDB.deleteDatabase': { - paramsType: Crdp.IndexedDB.DeleteDatabaseRequest, - returnType: void - }; - 'IndexedDB.deleteObjectStoreEntries': { - paramsType: Crdp.IndexedDB.DeleteObjectStoreEntriesRequest, - returnType: void - }; - 'IndexedDB.disable': { - paramsType: void, - returnType: void - }; - 'IndexedDB.enable': { - paramsType: void, - returnType: void - }; - 'IndexedDB.requestData': { - paramsType: Crdp.IndexedDB.RequestDataRequest, - returnType: Crdp.IndexedDB.RequestDataResponse - }; - 'IndexedDB.requestDatabase': { - paramsType: Crdp.IndexedDB.RequestDatabaseRequest, - returnType: Crdp.IndexedDB.RequestDatabaseResponse - }; - 'IndexedDB.requestDatabaseNames': { - paramsType: Crdp.IndexedDB.RequestDatabaseNamesRequest, - returnType: Crdp.IndexedDB.RequestDatabaseNamesResponse - }; - 'Input.dispatchKeyEvent': { - paramsType: Crdp.Input.DispatchKeyEventRequest, - returnType: void - }; - 'Input.dispatchMouseEvent': { - paramsType: Crdp.Input.DispatchMouseEventRequest, - returnType: void - }; - 'Input.dispatchTouchEvent': { - paramsType: Crdp.Input.DispatchTouchEventRequest, - returnType: void - }; - 'Input.emulateTouchFromMouseEvent': { - paramsType: Crdp.Input.EmulateTouchFromMouseEventRequest, - returnType: void - }; - 'Input.setIgnoreInputEvents': { - paramsType: Crdp.Input.SetIgnoreInputEventsRequest, - returnType: void - }; - 'Input.synthesizePinchGesture': { - paramsType: Crdp.Input.SynthesizePinchGestureRequest, - returnType: void - }; - 'Input.synthesizeScrollGesture': { - paramsType: Crdp.Input.SynthesizeScrollGestureRequest, - returnType: void - }; - 'Input.synthesizeTapGesture': { - paramsType: Crdp.Input.SynthesizeTapGestureRequest, - returnType: void - }; - 'Inspector.disable': { - paramsType: void, - returnType: void - }; - 'Inspector.enable': { - paramsType: void, - returnType: void - }; - 'LayerTree.compositingReasons': { - paramsType: Crdp.LayerTree.CompositingReasonsRequest, - returnType: Crdp.LayerTree.CompositingReasonsResponse - }; - 'LayerTree.disable': { - paramsType: void, - returnType: void - }; - 'LayerTree.enable': { - paramsType: void, - returnType: void - }; - 'LayerTree.loadSnapshot': { - paramsType: Crdp.LayerTree.LoadSnapshotRequest, - returnType: Crdp.LayerTree.LoadSnapshotResponse - }; - 'LayerTree.makeSnapshot': { - paramsType: Crdp.LayerTree.MakeSnapshotRequest, - returnType: Crdp.LayerTree.MakeSnapshotResponse - }; - 'LayerTree.profileSnapshot': { - paramsType: Crdp.LayerTree.ProfileSnapshotRequest, - returnType: Crdp.LayerTree.ProfileSnapshotResponse - }; - 'LayerTree.releaseSnapshot': { - paramsType: Crdp.LayerTree.ReleaseSnapshotRequest, - returnType: void - }; - 'LayerTree.replaySnapshot': { - paramsType: Crdp.LayerTree.ReplaySnapshotRequest, - returnType: Crdp.LayerTree.ReplaySnapshotResponse - }; - 'LayerTree.snapshotCommandLog': { - paramsType: Crdp.LayerTree.SnapshotCommandLogRequest, - returnType: Crdp.LayerTree.SnapshotCommandLogResponse - }; - 'Log.clear': { - paramsType: void, - returnType: void - }; - 'Log.disable': { - paramsType: void, - returnType: void - }; - 'Log.enable': { - paramsType: void, - returnType: void - }; - 'Log.startViolationsReport': { - paramsType: Crdp.Log.StartViolationsReportRequest, - returnType: void - }; - 'Log.stopViolationsReport': { - paramsType: void, - returnType: void - }; - 'Memory.getDOMCounters': { - paramsType: void, - returnType: Crdp.Memory.GetDOMCountersResponse - }; - 'Memory.prepareForLeakDetection': { - paramsType: void, - returnType: void - }; - 'Memory.setPressureNotificationsSuppressed': { - paramsType: Crdp.Memory.SetPressureNotificationsSuppressedRequest, - returnType: void - }; - 'Memory.simulatePressureNotification': { - paramsType: Crdp.Memory.SimulatePressureNotificationRequest, - returnType: void - }; - 'Network.canClearBrowserCache': { - paramsType: void, - returnType: Crdp.Network.CanClearBrowserCacheResponse - }; - 'Network.canClearBrowserCookies': { - paramsType: void, - returnType: Crdp.Network.CanClearBrowserCookiesResponse - }; - 'Network.canEmulateNetworkConditions': { - paramsType: void, - returnType: Crdp.Network.CanEmulateNetworkConditionsResponse - }; - 'Network.clearBrowserCache': { - paramsType: void, - returnType: void - }; - 'Network.clearBrowserCookies': { - paramsType: void, - returnType: void - }; - 'Network.continueInterceptedRequest': { - paramsType: Crdp.Network.ContinueInterceptedRequestRequest, - returnType: void - }; - 'Network.deleteCookies': { - paramsType: Crdp.Network.DeleteCookiesRequest, - returnType: void - }; - 'Network.disable': { - paramsType: void, - returnType: void - }; - 'Network.emulateNetworkConditions': { - paramsType: Crdp.Network.EmulateNetworkConditionsRequest, - returnType: void - }; - 'Network.enable': { - paramsType: void | Crdp.Network.EnableRequest, - returnType: void - }; - 'Network.getAllCookies': { - paramsType: void, - returnType: Crdp.Network.GetAllCookiesResponse - }; - 'Network.getCertificate': { - paramsType: Crdp.Network.GetCertificateRequest, - returnType: Crdp.Network.GetCertificateResponse - }; - 'Network.getCookies': { - paramsType: void | Crdp.Network.GetCookiesRequest, - returnType: Crdp.Network.GetCookiesResponse - }; - 'Network.getResponseBody': { - paramsType: Crdp.Network.GetResponseBodyRequest, - returnType: Crdp.Network.GetResponseBodyResponse - }; - 'Network.getRequestPostData': { - paramsType: Crdp.Network.GetRequestPostDataRequest, - returnType: Crdp.Network.GetRequestPostDataResponse - }; - 'Network.getResponseBodyForInterception': { - paramsType: Crdp.Network.GetResponseBodyForInterceptionRequest, - returnType: Crdp.Network.GetResponseBodyForInterceptionResponse - }; - 'Network.replayXHR': { - paramsType: Crdp.Network.ReplayXHRRequest, - returnType: void - }; - 'Network.searchInResponseBody': { - paramsType: Crdp.Network.SearchInResponseBodyRequest, - returnType: Crdp.Network.SearchInResponseBodyResponse - }; - 'Network.setBlockedURLs': { - paramsType: Crdp.Network.SetBlockedURLsRequest, - returnType: void - }; - 'Network.setBypassServiceWorker': { - paramsType: Crdp.Network.SetBypassServiceWorkerRequest, - returnType: void - }; - 'Network.setCacheDisabled': { - paramsType: Crdp.Network.SetCacheDisabledRequest, - returnType: void - }; - 'Network.setCookie': { - paramsType: Crdp.Network.SetCookieRequest, - returnType: Crdp.Network.SetCookieResponse - }; - 'Network.setCookies': { - paramsType: Crdp.Network.SetCookiesRequest, - returnType: void - }; - 'Network.setDataSizeLimitsForTest': { - paramsType: Crdp.Network.SetDataSizeLimitsForTestRequest, - returnType: void - }; - 'Network.setExtraHTTPHeaders': { - paramsType: Crdp.Network.SetExtraHTTPHeadersRequest, - returnType: void - }; - 'Network.setRequestInterception': { - paramsType: Crdp.Network.SetRequestInterceptionRequest, - returnType: void - }; - 'Network.setUserAgentOverride': { - paramsType: Crdp.Network.SetUserAgentOverrideRequest, - returnType: void - }; - 'Overlay.disable': { - paramsType: void, - returnType: void - }; - 'Overlay.enable': { - paramsType: void, - returnType: void - }; - 'Overlay.getHighlightObjectForTest': { - paramsType: Crdp.Overlay.GetHighlightObjectForTestRequest, - returnType: Crdp.Overlay.GetHighlightObjectForTestResponse - }; - 'Overlay.hideHighlight': { - paramsType: void, - returnType: void - }; - 'Overlay.highlightFrame': { - paramsType: Crdp.Overlay.HighlightFrameRequest, - returnType: void - }; - 'Overlay.highlightNode': { - paramsType: Crdp.Overlay.HighlightNodeRequest, - returnType: void - }; - 'Overlay.highlightQuad': { - paramsType: Crdp.Overlay.HighlightQuadRequest, - returnType: void - }; - 'Overlay.highlightRect': { - paramsType: Crdp.Overlay.HighlightRectRequest, - returnType: void - }; - 'Overlay.setInspectMode': { - paramsType: Crdp.Overlay.SetInspectModeRequest, - returnType: void - }; - 'Overlay.setPausedInDebuggerMessage': { - paramsType: void | Crdp.Overlay.SetPausedInDebuggerMessageRequest, - returnType: void - }; - 'Overlay.setShowDebugBorders': { - paramsType: Crdp.Overlay.SetShowDebugBordersRequest, - returnType: void - }; - 'Overlay.setShowFPSCounter': { - paramsType: Crdp.Overlay.SetShowFPSCounterRequest, - returnType: void - }; - 'Overlay.setShowPaintRects': { - paramsType: Crdp.Overlay.SetShowPaintRectsRequest, - returnType: void - }; - 'Overlay.setShowScrollBottleneckRects': { - paramsType: Crdp.Overlay.SetShowScrollBottleneckRectsRequest, - returnType: void - }; - 'Overlay.setShowViewportSizeOnResize': { - paramsType: Crdp.Overlay.SetShowViewportSizeOnResizeRequest, - returnType: void - }; - 'Overlay.setSuspended': { - paramsType: Crdp.Overlay.SetSuspendedRequest, - returnType: void - }; - 'Page.addScriptToEvaluateOnLoad': { - paramsType: Crdp.Page.AddScriptToEvaluateOnLoadRequest, - returnType: Crdp.Page.AddScriptToEvaluateOnLoadResponse - }; - 'Page.addScriptToEvaluateOnNewDocument': { - paramsType: Crdp.Page.AddScriptToEvaluateOnNewDocumentRequest, - returnType: Crdp.Page.AddScriptToEvaluateOnNewDocumentResponse - }; - 'Page.bringToFront': { - paramsType: void, - returnType: void - }; - 'Page.captureScreenshot': { - paramsType: void | Crdp.Page.CaptureScreenshotRequest, - returnType: Crdp.Page.CaptureScreenshotResponse - }; - 'Page.clearDeviceMetricsOverride': { - paramsType: void, - returnType: void - }; - 'Page.clearDeviceOrientationOverride': { - paramsType: void, - returnType: void - }; - 'Page.clearGeolocationOverride': { - paramsType: void, - returnType: void - }; - 'Page.createIsolatedWorld': { - paramsType: Crdp.Page.CreateIsolatedWorldRequest, - returnType: Crdp.Page.CreateIsolatedWorldResponse - }; - 'Page.deleteCookie': { - paramsType: Crdp.Page.DeleteCookieRequest, - returnType: void - }; - 'Page.disable': { - paramsType: void, - returnType: void - }; - 'Page.enable': { - paramsType: void, - returnType: void - }; - 'Page.getAppManifest': { - paramsType: void, - returnType: Crdp.Page.GetAppManifestResponse - }; - 'Page.getCookies': { - paramsType: void, - returnType: Crdp.Page.GetCookiesResponse - }; - 'Page.getFrameTree': { - paramsType: void, - returnType: Crdp.Page.GetFrameTreeResponse - }; - 'Page.getLayoutMetrics': { - paramsType: void, - returnType: Crdp.Page.GetLayoutMetricsResponse - }; - 'Page.getNavigationHistory': { - paramsType: void, - returnType: Crdp.Page.GetNavigationHistoryResponse - }; - 'Page.getResourceContent': { - paramsType: Crdp.Page.GetResourceContentRequest, - returnType: Crdp.Page.GetResourceContentResponse - }; - 'Page.getResourceTree': { - paramsType: void, - returnType: Crdp.Page.GetResourceTreeResponse - }; - 'Page.handleJavaScriptDialog': { - paramsType: Crdp.Page.HandleJavaScriptDialogRequest, - returnType: void - }; - 'Page.navigate': { - paramsType: Crdp.Page.NavigateRequest, - returnType: Crdp.Page.NavigateResponse - }; - 'Page.navigateToHistoryEntry': { - paramsType: Crdp.Page.NavigateToHistoryEntryRequest, - returnType: void - }; - 'Page.printToPDF': { - paramsType: void | Crdp.Page.PrintToPDFRequest, - returnType: Crdp.Page.PrintToPDFResponse - }; - 'Page.reload': { - paramsType: void | Crdp.Page.ReloadRequest, - returnType: void - }; - 'Page.removeScriptToEvaluateOnLoad': { - paramsType: Crdp.Page.RemoveScriptToEvaluateOnLoadRequest, - returnType: void - }; - 'Page.removeScriptToEvaluateOnNewDocument': { - paramsType: Crdp.Page.RemoveScriptToEvaluateOnNewDocumentRequest, - returnType: void - }; - 'Page.requestAppBanner': { - paramsType: void, - returnType: void - }; - 'Page.screencastFrameAck': { - paramsType: Crdp.Page.ScreencastFrameAckRequest, - returnType: void - }; - 'Page.searchInResource': { - paramsType: Crdp.Page.SearchInResourceRequest, - returnType: Crdp.Page.SearchInResourceResponse - }; - 'Page.setAdBlockingEnabled': { - paramsType: Crdp.Page.SetAdBlockingEnabledRequest, - returnType: void - }; - 'Page.setDeviceMetricsOverride': { - paramsType: Crdp.Page.SetDeviceMetricsOverrideRequest, - returnType: void - }; - 'Page.setDeviceOrientationOverride': { - paramsType: Crdp.Page.SetDeviceOrientationOverrideRequest, - returnType: void - }; - 'Page.setDocumentContent': { - paramsType: Crdp.Page.SetDocumentContentRequest, - returnType: void - }; - 'Page.setDownloadBehavior': { - paramsType: Crdp.Page.SetDownloadBehaviorRequest, - returnType: void - }; - 'Page.setGeolocationOverride': { - paramsType: void | Crdp.Page.SetGeolocationOverrideRequest, - returnType: void - }; - 'Page.setLifecycleEventsEnabled': { - paramsType: Crdp.Page.SetLifecycleEventsEnabledRequest, - returnType: void - }; - 'Page.setTouchEmulationEnabled': { - paramsType: Crdp.Page.SetTouchEmulationEnabledRequest, - returnType: void - }; - 'Page.startScreencast': { - paramsType: void | Crdp.Page.StartScreencastRequest, - returnType: void - }; - 'Page.stopLoading': { - paramsType: void, - returnType: void - }; - 'Page.crash': { - paramsType: void, - returnType: void - }; - 'Page.stopScreencast': { - paramsType: void, - returnType: void - }; - 'Performance.disable': { - paramsType: void, - returnType: void - }; - 'Performance.enable': { - paramsType: void, - returnType: void - }; - 'Performance.getMetrics': { - paramsType: void, - returnType: Crdp.Performance.GetMetricsResponse - }; - 'Security.disable': { - paramsType: void, - returnType: void - }; - 'Security.enable': { - paramsType: void, - returnType: void - }; - 'Security.setIgnoreCertificateErrors': { - paramsType: Crdp.Security.SetIgnoreCertificateErrorsRequest, - returnType: void - }; - 'Security.handleCertificateError': { - paramsType: Crdp.Security.HandleCertificateErrorRequest, - returnType: void - }; - 'Security.setOverrideCertificateErrors': { - paramsType: Crdp.Security.SetOverrideCertificateErrorsRequest, - returnType: void - }; - 'ServiceWorker.deliverPushMessage': { - paramsType: Crdp.ServiceWorker.DeliverPushMessageRequest, - returnType: void - }; - 'ServiceWorker.disable': { - paramsType: void, - returnType: void - }; - 'ServiceWorker.dispatchSyncEvent': { - paramsType: Crdp.ServiceWorker.DispatchSyncEventRequest, - returnType: void - }; - 'ServiceWorker.enable': { - paramsType: void, - returnType: void - }; - 'ServiceWorker.inspectWorker': { - paramsType: Crdp.ServiceWorker.InspectWorkerRequest, - returnType: void - }; - 'ServiceWorker.setForceUpdateOnPageLoad': { - paramsType: Crdp.ServiceWorker.SetForceUpdateOnPageLoadRequest, - returnType: void - }; - 'ServiceWorker.skipWaiting': { - paramsType: Crdp.ServiceWorker.SkipWaitingRequest, - returnType: void - }; - 'ServiceWorker.startWorker': { - paramsType: Crdp.ServiceWorker.StartWorkerRequest, - returnType: void - }; - 'ServiceWorker.stopAllWorkers': { - paramsType: void, - returnType: void - }; - 'ServiceWorker.stopWorker': { - paramsType: Crdp.ServiceWorker.StopWorkerRequest, - returnType: void - }; - 'ServiceWorker.unregister': { - paramsType: Crdp.ServiceWorker.UnregisterRequest, - returnType: void - }; - 'ServiceWorker.updateRegistration': { - paramsType: Crdp.ServiceWorker.UpdateRegistrationRequest, - returnType: void - }; - 'Storage.clearDataForOrigin': { - paramsType: Crdp.Storage.ClearDataForOriginRequest, - returnType: void - }; - 'Storage.getUsageAndQuota': { - paramsType: Crdp.Storage.GetUsageAndQuotaRequest, - returnType: Crdp.Storage.GetUsageAndQuotaResponse - }; - 'Storage.trackCacheStorageForOrigin': { - paramsType: Crdp.Storage.TrackCacheStorageForOriginRequest, - returnType: void - }; - 'Storage.trackIndexedDBForOrigin': { - paramsType: Crdp.Storage.TrackIndexedDBForOriginRequest, - returnType: void - }; - 'Storage.untrackCacheStorageForOrigin': { - paramsType: Crdp.Storage.UntrackCacheStorageForOriginRequest, - returnType: void - }; - 'Storage.untrackIndexedDBForOrigin': { - paramsType: Crdp.Storage.UntrackIndexedDBForOriginRequest, - returnType: void - }; - 'SystemInfo.getInfo': { - paramsType: void, - returnType: Crdp.SystemInfo.GetInfoResponse - }; - 'Target.activateTarget': { - paramsType: Crdp.Target.ActivateTargetRequest, - returnType: void - }; - 'Target.attachToTarget': { - paramsType: Crdp.Target.AttachToTargetRequest, - returnType: Crdp.Target.AttachToTargetResponse - }; - 'Target.closeTarget': { - paramsType: Crdp.Target.CloseTargetRequest, - returnType: Crdp.Target.CloseTargetResponse - }; - 'Target.createBrowserContext': { - paramsType: void, - returnType: Crdp.Target.CreateBrowserContextResponse - }; - 'Target.createTarget': { - paramsType: Crdp.Target.CreateTargetRequest, - returnType: Crdp.Target.CreateTargetResponse - }; - 'Target.detachFromTarget': { - paramsType: void | Crdp.Target.DetachFromTargetRequest, - returnType: void - }; - 'Target.disposeBrowserContext': { - paramsType: Crdp.Target.DisposeBrowserContextRequest, - returnType: Crdp.Target.DisposeBrowserContextResponse - }; - 'Target.getTargetInfo': { - paramsType: Crdp.Target.GetTargetInfoRequest, - returnType: Crdp.Target.GetTargetInfoResponse - }; - 'Target.getTargets': { - paramsType: void, - returnType: Crdp.Target.GetTargetsResponse - }; - 'Target.sendMessageToTarget': { - paramsType: Crdp.Target.SendMessageToTargetRequest, - returnType: void - }; - 'Target.setAttachToFrames': { - paramsType: Crdp.Target.SetAttachToFramesRequest, - returnType: void - }; - 'Target.setAutoAttach': { - paramsType: Crdp.Target.SetAutoAttachRequest, - returnType: void - }; - 'Target.setDiscoverTargets': { - paramsType: Crdp.Target.SetDiscoverTargetsRequest, - returnType: void - }; - 'Target.setRemoteLocations': { - paramsType: Crdp.Target.SetRemoteLocationsRequest, - returnType: void - }; - 'Tethering.bind': { - paramsType: Crdp.Tethering.BindRequest, - returnType: void - }; - 'Tethering.unbind': { - paramsType: Crdp.Tethering.UnbindRequest, - returnType: void - }; - 'Tracing.end': { - paramsType: void, - returnType: void - }; - 'Tracing.getCategories': { - paramsType: void, - returnType: Crdp.Tracing.GetCategoriesResponse - }; - 'Tracing.recordClockSyncMarker': { - paramsType: Crdp.Tracing.RecordClockSyncMarkerRequest, - returnType: void - }; - 'Tracing.requestMemoryDump': { - paramsType: void, - returnType: Crdp.Tracing.RequestMemoryDumpResponse - }; - 'Tracing.start': { - paramsType: void | Crdp.Tracing.StartRequest, - returnType: void - }; - } - } -} - -// empty export to keep file a module -export {} diff --git a/typings/externs.d.ts b/typings/externs.d.ts index bae9a77db794..381880326e49 100644 --- a/typings/externs.d.ts +++ b/typings/externs.d.ts @@ -4,9 +4,8 @@ * 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. */ -import _Crdp from 'vscode-chrome-debug-core/lib/crdp/crdp'; -import _StrictEventEmitter from '../third-party/strict-event-emitter-types/index'; -import { EventEmitter } from 'events'; +import _Crdp from 'devtools-protocol/types/protocol'; +import _CrdpMappings from 'devtools-protocol/types/protocol-mapping' declare global { // Augment global Error type to include node's optional `code` property @@ -55,8 +54,8 @@ declare global { module LH { // re-export useful type modules under global LH module. export import Crdp = _Crdp; - export type StrictEventEmitter = - _StrictEventEmitter; + export import CrdpEvents = _CrdpMappings.Events; + export import CrdpCommands = _CrdpMappings.Commands; interface ThrottlingSettings { // simulation settings diff --git a/typings/protocol.d.ts b/typings/protocol.d.ts index 5f7ec52912f2..e80525c24c93 100644 --- a/typings/protocol.d.ts +++ b/typings/protocol.d.ts @@ -9,12 +9,6 @@ declare global { /** * Union of raw (over the wire) message format of all possible Crdp events, * of the form `{method: 'Domain.event', params: eventPayload}`. - * TODO(bckenny): currently any `void` payloads are defined as having value - * `undefined`, even though CrdpEventEmitter will treat those payloads as - * not existing. This is due to how we have to expose these emitters to JS. - * See https://github.com/bterlson/strict-event-emitter-types/issues/1 for - * search for the fix here. Complication should be entirely isolated to - * connection.js. */ export type RawEventMessage = RawEventMessageRecord[keyof RawEventMessageRecord]; @@ -37,12 +31,24 @@ declare global { export type RawMessage = RawCommandMessage | RawEventMessage; /** - * Strict overloaded typing for calling protocol methods with and without - * params object. + * A more strictly-typed EventEmitter interface that checks the association + * of event name and listener payload. TEventRecord should be a record mapping + * event names to tuples that can contain zero or more items, which will + * serve as the arguments to event listener callbacks. + * Inspired by work from https://github.com/bterlson/strict-event-emitter-types. */ - export type SendCommand = { - (method: C, params?: void, cmdOpts?: {silent?: boolean}): Promise; - (method: C, params: CrdpCommands[C]['paramsType']): Promise + export type StrictEventEmitter> = { + on(event: E, listener: (...args: TEventRecord[E]) => void): void; + + addListener(event: E, listener: (...args: TEventRecord[E]) => void): void; + + removeListener(event: E, listener: Function): void; + + removeAllListeners(event?: E): void; + + once(event: E, listener: (...args: TEventRecord[E]) => void): void; + + emit(event: E, ...request: TEventRecord[E]): void; } } } @@ -57,28 +63,10 @@ declare global { type RawEventMessageRecord = { [K in keyof LH.CrdpEvents]: { method: K, - // Drop void for `undefined` (so a JS value is valid). See above TODO - params: LH.CrdpEvents[K] extends void ? undefined: LH.CrdpEvents[K] + // Drop [] for `undefined` (so a JS value is valid). + params: LH.CrdpEvents[K] extends [] ? undefined: LH.CrdpEvents[K][number] }; } -/** - * An intermediate type that's the union of all command names where a `params` - * object is not required (represented by `void` when no params object or a - * union with `void` if all properties on params object are optional). - */ -type VoidParamsKeys = { - [P in keyof LH.CrdpCommands]: void extends LH.CrdpCommands[P]['paramsType'] ? P : never; -}[keyof LH.CrdpCommands]; - -/** - * An intermediate type that's the union of all command names that require a - * `params` object (no void in union). Note that `VoidParamsKeys` and - * `NonVoidParamsKeys` are not disjoint. - */ -type NonVoidParamsKeys = { - [P in keyof LH.CrdpCommands]: LH.CrdpCommands[P]['paramsType'] extends void ? never : P; -}[keyof LH.CrdpCommands]; - // empty export to keep file a module export {} diff --git a/yarn.lock b/yarn.lock index aa8296119f03..ae72338ab116 100644 --- a/yarn.lock +++ b/yarn.lock @@ -195,10 +195,6 @@ version "5.5.0" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-5.5.0.tgz#146c2a29ee7d3bae4bf2fcb274636e264c813c45" -"@types/source-map@^0.1.27": - version "0.1.29" - resolved "https://registry.yarnpkg.com/@types/source-map/-/source-map-0.1.29.tgz#d7048a60180b09f8aa6d53bda311c6b51cbd7018" - "@types/through@*": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.29.tgz#72943aac922e179339c651fa34a4428a4d722f93" @@ -1697,6 +1693,10 @@ detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" +devtools-protocol@0.0.588129: + version "0.0.588129" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.588129.tgz#b93d05b01679471639f2882077f77d4e96eecc18" + devtools-timeline-model@1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/devtools-timeline-model/-/devtools-timeline-model-1.1.6.tgz#7be51a73b55d727b597bb30dd1ed2e8e210639a5" @@ -4515,10 +4515,6 @@ node-uuid@~1.4.7: version "1.4.7" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" -noice-json-rpc@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/noice-json-rpc/-/noice-json-rpc-1.0.1.tgz#5e7289a60a1c20880489cb15101552bac392266e" - nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -6365,38 +6361,6 @@ vinyl@^0.5.0: clone-stats "^0.0.1" replace-ext "0.0.1" -vscode-chrome-debug-core@^3.23.8: - version "3.23.8" - resolved "https://registry.yarnpkg.com/vscode-chrome-debug-core/-/vscode-chrome-debug-core-3.23.8.tgz#f0fd1582b6d7653d327171104b9c8e2eebb6bf41" - dependencies: - "@types/source-map" "^0.1.27" - glob "^7.0.6" - noice-json-rpc "1.0.1" - source-map "^0.6.1" - vscode-debugadapter "^1.28.0-pre.2" - vscode-debugprotocol "^1.28.0-pre.1" - vscode-nls "^3.2.1" - ws "^3.3.2" - -vscode-debugadapter@^1.28.0-pre.2: - version "1.28.0-pre.2" - resolved "https://registry.yarnpkg.com/vscode-debugadapter/-/vscode-debugadapter-1.28.0-pre.2.tgz#165ccd179f5a43319c8d6a3dc77832e9392ae254" - dependencies: - vscode-debugprotocol "1.28.0-pre.1" - vscode-uri "1.0.1" - -vscode-debugprotocol@1.28.0-pre.1, vscode-debugprotocol@^1.28.0-pre.1: - version "1.28.0-pre.1" - resolved "https://registry.yarnpkg.com/vscode-debugprotocol/-/vscode-debugprotocol-1.28.0-pre.1.tgz#2641b753cbb78416e897a2f1653e7bc391d2db0b" - -vscode-nls@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.2.tgz#3817eca5b985c2393de325197cf4e15eb2aa5350" - -vscode-uri@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.1.tgz#11a86befeac3c4aa3ec08623651a3c81a6d0bbc8" - w3c-hr-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" @@ -6577,7 +6541,7 @@ ws@3.3.2: safe-buffer "~5.1.0" ultron "~1.1.0" -ws@^3.0.0, ws@^3.3.2: +ws@^3.0.0: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" dependencies: