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
JavaScript
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;
;