UNPKG

chrome-remote-interface-extra

Version:

Bringing a puppeteer like API and more to the chrome-remote-interface by cyrus-and

130 lines (117 loc) 3.5 kB
const util = require('util') const EventEmitter = require('eventemitter3') const { assert, helper } = require('../helper') const Events = require('../Events') const Database = require('./Database') /** * @see https://chromedevtools.github.io/devtools-protocol/tot/Database * @since chrome-remote-interface-extra */ class DatabaseManager extends EventEmitter { /** * @param {Chrome|CRIConnection|CDPSession|Object} client */ constructor (client) { super() /** @type {Chrome|CRIConnection|CDPSession|Object} */ this._client = client /** * @type {boolean} * @private */ this._enabled = false /** * @type {Array<Object>} * @private */ this._clientListeners = null this._onDatabaseAdded = this._onDatabaseAdded.bind(this) } /** * @return {boolean} */ get enabled () { return this._enabled } /** * Enables database tracking, database events will now be delivered to the client. * @return {Promise<void>} * @see https://chromedevtools.github.io/devtools-protocol/tot/Database#method-enable */ async enable () { if (this._enabled) return await this._client.send('Database.enable') this._clientListeners = [ helper.addEventListener( this._client, 'Database.addDatabase', this._onDatabaseAdded ) ] this._enabled = true } /** * Disables database tracking, prevents database events from being sent to the client. * @return {Promise<void>} * @see https://chromedevtools.github.io/devtools-protocol/tot/Database#method-disable */ async disable () { if (!this._enabled) return await this._client.send('Database.disable') this._enabled = false if (this._clientListeners) { helper.removeEventListeners(this._clientListeners) } this._clientListeners = null } /** * @param {string} databaseId - Unique identifier of the Database * @return {Promise<Array<string>>} * @see https://chromedevtools.github.io/devtools-protocol/tot/Database#getDatabaseTableNames */ async getDatabaseTableNames (databaseId) { assert( helper.isString(databaseId), `The databaseId param must be of type "string", received ${typeof databaseId}` ) const { tableNames } = await this._client.send( 'Database.getDatabaseTableNames', { databaseId } ) return tableNames } /** * @param {string} databaseId - Unique identifier of the Database * @param {string} query - The SQL query * @return {Promise<SQLQueryResults>} * @see https://chromedevtools.github.io/devtools-protocol/tot/Database#method-executeSQL */ executeSQL (databaseId, query) { assert( helper.isString(databaseId), `The databaseId param must be of type "string", received ${typeof databaseId}` ) assert( helper.isString(query), `The query param must be of type "string", received ${typeof query}` ) return this._client.send('Database.executeSQL', { databaseId, query }) } /** * @param {CDPDatabase} database * @emits {Database.databaseAdded} * @private */ _onDatabaseAdded (database) { this.emit(Events.DataBase.added, new Database(this, database)) } /** @ignore */ // eslint-disable-next-line space-before-function-paren [util.inspect.custom](depth, options) { return options.stylize( `DatabaseManager<enabled=${this._enabled}>`, 'special' ) } } module.exports = DatabaseManager