UNPKG

stream-chat-react-native-core

Version:

The official React Native and Expo components for Stream Chat, a service for building chat applications

203 lines 7.01 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.SqliteClient = void 0; var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _constants = require("./constants"); var _schema = require("./schema"); var _createCreateTableQuery = require("./sqlite-utils/createCreateTableQuery"); var _SqliteClient; var sqlite; try { sqlite = require('@op-engineering/op-sqlite'); } catch (e) { var isRemoteDebuggerError = e instanceof Error && e.message.includes('Failed to install'); if (isRemoteDebuggerError) { throw e; } } var SqliteClient = exports.SqliteClient = (0, _createClass2.default)(function SqliteClient() { (0, _classCallCheck2.default)(this, SqliteClient); }); _SqliteClient = SqliteClient; SqliteClient.dbVersion = 16; SqliteClient.dbName = _constants.DB_NAME; SqliteClient.dbLocation = _constants.DB_LOCATION; SqliteClient.getDbVersion = () => _SqliteClient.dbVersion; SqliteClient.setDbVersion = version => _SqliteClient.dbVersion = version; SqliteClient.openDB = (0, _asyncToGenerator2.default)(function* () { try { if (sqlite === undefined) { throw new Error('Please install "@op-engineering/op-sqlite" package to enable offline support'); } _SqliteClient.db = sqlite.open({ location: _SqliteClient.dbLocation, name: _SqliteClient.dbName }); yield _SqliteClient.db?.execute('PRAGMA foreign_keys = ON', []); } catch (e) { _SqliteClient.logger?.('error', `Error opening database ${_SqliteClient.dbName}`, { error: e }); console.error(`Error opening database ${_SqliteClient.dbName}: ${e}`); } }); SqliteClient.closeDB = () => { try { if (!_SqliteClient.db) { throw new Error('DB is not open or initialized.'); } _SqliteClient.db.close(); _SqliteClient.db = undefined; } catch (e) { _SqliteClient.logger?.('error', `Error closing database ${_SqliteClient.dbName}`, { error: e }); console.error(`Error closing database ${_SqliteClient.dbName}: ${e}`); } }; SqliteClient.executeSqlBatch = function () { var _ref2 = (0, _asyncToGenerator2.default)(function* (queries) { if (!queries || !queries.length) { return; } try { if (!_SqliteClient.db) { throw new Error('DB is not open or initialized.'); } var finalQueries = queries.map(query => { if (query.length === 1) { query.push([]); } return query; }); yield _SqliteClient.db.executeBatch(finalQueries); } catch (e) { _SqliteClient.logger?.('error', 'SqlBatch queries failed', { error: e, queries }); throw new Error(`Queries failed: ${e}`); } }); return function (_x) { return _ref2.apply(this, arguments); }; }(); SqliteClient.executeSql = function () { var _ref3 = (0, _asyncToGenerator2.default)(function* (query, params) { try { if (!_SqliteClient.db) { throw new Error('DB is not open or initialized.'); } var _yield$_SqliteClient$ = yield _SqliteClient.db.execute(query, params), rows = _yield$_SqliteClient$.rows; return rows ? rows : []; } catch (e) { _SqliteClient.logger?.('error', 'Sql single query failed', { error: e, query }); throw new Error(`Query failed: ${e}: `); } }); return function (_x2, _x3) { return _ref3.apply(this, arguments); }; }(); SqliteClient.dropTables = (0, _asyncToGenerator2.default)(function* () { var queries = Object.keys(_schema.tables).map(table => [`DROP TABLE IF EXISTS ${table}`, []]); _SqliteClient.logger?.('info', 'Dropping tables', { tables: Object.keys(_schema.tables) }); yield _SqliteClient.executeSqlBatch(queries); }); SqliteClient.deleteDatabase = () => { _SqliteClient.logger?.('info', 'deleteDatabase', { dbLocation: _SqliteClient.dbLocation, dbname: _SqliteClient.dbName }); try { if (!_SqliteClient.db) { throw new Error('DB is not open or initialized.'); } _SqliteClient.db.delete(); } catch (e) { _SqliteClient.logger?.('error', 'Error deleting DB', { dbLocation: _SqliteClient.dbLocation, dbname: _SqliteClient.dbName, error: e }); throw new Error(`Error deleting DB: ${e}`); } return true; }; SqliteClient.initializeDatabase = (0, _asyncToGenerator2.default)(function* () { try { yield _SqliteClient.openDB(); var version = yield _SqliteClient.getUserPragmaVersion(); if (version !== _SqliteClient.dbVersion) { _SqliteClient.logger?.('info', 'DB version mismatch'); yield _SqliteClient.dropTables(); yield _SqliteClient.updateUserPragmaVersion(_SqliteClient.dbVersion); } _SqliteClient.logger?.('info', 'create tables if not exists', { tables: Object.keys(_schema.tables) }); var q = Object.keys(_schema.tables).reduce((queriesSoFar, tableName) => { queriesSoFar.push(...(0, _createCreateTableQuery.createCreateTableQuery)(tableName)); return queriesSoFar; }, []); yield _SqliteClient.executeSqlBatch(q); return true; } catch (e) { console.log('Error initializing DB', e); _SqliteClient.logger?.('error', 'Error initializing DB', { dbLocation: _SqliteClient.dbLocation, dbname: _SqliteClient.dbName, error: e }); return false; } }); SqliteClient.updateUserPragmaVersion = function () { var _ref6 = (0, _asyncToGenerator2.default)(function* (version) { _SqliteClient.logger?.('info', `updateUserPragmaVersion to ${version}`); if (!_SqliteClient.db) { throw new Error('DB is not open or initialized.'); } yield _SqliteClient.db.execute(`PRAGMA user_version = ${version}`, []); }); return function (_x4) { return _ref6.apply(this, arguments); }; }(); SqliteClient.getUserPragmaVersion = (0, _asyncToGenerator2.default)(function* () { try { if (!_SqliteClient.db) { throw new Error('DB is not open or initialized.'); } var _yield$_SqliteClient$2 = yield _SqliteClient.db.execute('PRAGMA user_version', []), rows = _yield$_SqliteClient$2.rows; var result = rows ? rows : []; _SqliteClient.logger?.('info', 'getUserPragmaVersion', { result }); return result[0].user_version; } catch (e) { console.log('Error getting user_version', e); throw new Error(`Querying for user_version failed: ${e}`); } }); SqliteClient.resetDB = (0, _asyncToGenerator2.default)(function* () { _SqliteClient.logger?.('info', 'resetDB'); if (_SqliteClient.db) { yield _SqliteClient.dropTables(); _SqliteClient.closeDB(); } yield _SqliteClient.initializeDatabase(); }); //# sourceMappingURL=SqliteClient.js.map