UNPKG

react-native-firebase-compiled

Version:

A well tested, feature rich Firebase implementation for React Native, supporting iOS & Android. Individual module support for Admob, Analytics, Auth, Crash Reporting, Cloud Firestore, Database, Dynamic Links, Functions, Messaging (FCM), Remote Config, Sto

147 lines (109 loc) 3.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.statics = exports.default = exports.NAMESPACE = exports.MODULE_NAME = void 0; var _reactNative = require("react-native"); var _Reference = _interopRequireDefault(require("./Reference")); var _transaction = _interopRequireDefault(require("./transaction")); var _ModuleBase = _interopRequireDefault(require("../../utils/ModuleBase")); var _native = require("../../utils/native"); var _firebase = _interopRequireDefault(require("../core/firebase")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } const NATIVE_EVENTS = ['database_transaction_event']; const MODULE_NAME = 'RNFirebaseDatabase'; exports.MODULE_NAME = MODULE_NAME; const NAMESPACE = 'database'; /** * @class Database */ exports.NAMESPACE = NAMESPACE; class Database extends _ModuleBase.default { constructor(appOrCustomUrl, customUrl) { let app; let url; if (typeof appOrCustomUrl === 'string') { app = _firebase.default.app(); url = appOrCustomUrl; } else { app = appOrCustomUrl; url = customUrl || app.options.databaseURL; } // enforce trailing slash url = url.endsWith('/') ? url : `${url}/`; super(app, { events: NATIVE_EVENTS, moduleName: MODULE_NAME, hasMultiAppSupport: true, hasCustomUrlSupport: true, namespace: NAMESPACE }, url); _defineProperty(this, "_databaseURL", void 0); _defineProperty(this, "_offsetRef", void 0); _defineProperty(this, "_serverTimeOffset", void 0); _defineProperty(this, "_transactionHandler", void 0); this._serverTimeOffset = 0; this._databaseURL = url; this._transactionHandler = new _transaction.default(this); if (app.options.persistence) { (0, _native.getNativeModule)(this).setPersistence(app.options.persistence); } // server time listener // setTimeout used to avoid setPersistence race conditions // todo move this and persistence to native side, create a db configure() method natively perhaps? // todo and then native can call setPersistence and then emit offset events setTimeout(() => { this._offsetRef = this.ref('.info/serverTimeOffset'); this._offsetRef.on('value', snapshot => { this._serverTimeOffset = snapshot.val() || this._serverTimeOffset; }); }, 1); } /** * * @return {number} */ getServerTime() { return new Date(Date.now() + this._serverTimeOffset); } /** * */ goOnline() { (0, _native.getNativeModule)(this).goOnline(); } /** * */ goOffline() { (0, _native.getNativeModule)(this).goOffline(); } /** * Returns a new firebase reference instance * @param path * @returns {Reference} */ ref(path) { return new _Reference.default(this, path); } /** * Returns the database url * @returns {string} */ get databaseUrl() { return this._databaseURL; } } exports.default = Database; const statics = { ServerValue: _reactNative.NativeModules.RNFirebaseDatabase ? { TIMESTAMP: _reactNative.NativeModules.RNFirebaseDatabase.serverValueTimestamp || { '.sv': 'timestamp' } } : {}, enableLogging(enabled) { if (_reactNative.NativeModules[MODULE_NAME]) { _reactNative.NativeModules[MODULE_NAME].enableLogging(enabled); } } }; exports.statics = statics;