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

249 lines (189 loc) 7.58 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 _events = require("../../utils/events"); var _ModuleBase = _interopRequireDefault(require("../../utils/ModuleBase")); var _CollectionReference = _interopRequireDefault(require("./CollectionReference")); var _DocumentReference = _interopRequireDefault(require("./DocumentReference")); var _FieldPath = _interopRequireDefault(require("./FieldPath")); var _FieldValue = _interopRequireDefault(require("./FieldValue")); var _GeoPoint = _interopRequireDefault(require("./GeoPoint")); var _Blob = _interopRequireDefault(require("./Blob")); var _Path = _interopRequireDefault(require("./Path")); var _WriteBatch = _interopRequireDefault(require("./WriteBatch")); var _TransactionHandler = _interopRequireDefault(require("./TransactionHandler")); var _Transaction = _interopRequireDefault(require("./Transaction")); var _utils = require("../../utils"); var _native = require("../../utils/native"); 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 = ['firestore_transaction_event', 'firestore_document_sync_event', 'firestore_collection_sync_event']; const LogLevels = ['debug', 'error', 'silent']; const MODULE_NAME = 'RNFirebaseFirestore'; exports.MODULE_NAME = MODULE_NAME; const NAMESPACE = 'firestore'; /** * @class Firestore */ exports.NAMESPACE = NAMESPACE; class Firestore extends _ModuleBase.default { constructor(app) { super(app, { events: NATIVE_EVENTS, moduleName: MODULE_NAME, hasMultiAppSupport: true, hasCustomUrlSupport: false, namespace: NAMESPACE }); _defineProperty(this, "_referencePath", void 0); _defineProperty(this, "_transactionHandler", void 0); this._referencePath = new _Path.default([]); this._transactionHandler = new _TransactionHandler.default(this); _events.SharedEventEmitter.addListener( // sub to internal native event - this fans out to // public event name: onCollectionSnapshot (0, _events.getAppEventName)(this, 'firestore_collection_sync_event'), this._onCollectionSyncEvent.bind(this)); _events.SharedEventEmitter.addListener( // sub to internal native event - this fans out to // public event name: onDocumentSnapshot (0, _events.getAppEventName)(this, 'firestore_document_sync_event'), this._onDocumentSyncEvent.bind(this)); } /** * ------------- * PUBLIC API * ------------- */ /** * Creates a write batch, used for performing multiple writes as a single atomic operation. * * @returns {WriteBatch} */ batch() { return new _WriteBatch.default(this); } /** * Gets a CollectionReference instance that refers to the collection at the specified path. * * @param collectionPath * @returns {CollectionReference} */ collection(collectionPath) { const path = this._referencePath.child(collectionPath); if (!path.isCollection) { throw new Error('Argument "collectionPath" must point to a collection.'); } return new _CollectionReference.default(this, path); } disableNetwork() { return (0, _native.getNativeModule)(this).disableNetwork(); } /** * Gets a DocumentReference instance that refers to the document at the specified path. * * @param documentPath * @returns {DocumentReference} */ doc(documentPath) { const path = this._referencePath.child(documentPath); if (!path.isDocument) { throw new Error('Argument "documentPath" must point to a document.'); } return new _DocumentReference.default(this, path); } enableNetwork() { return (0, _native.getNativeModule)(this).enableNetwork(); } /** * Executes the given updateFunction and then attempts to commit the * changes applied within the transaction. If any document read within * the transaction has changed, Cloud Firestore retries the updateFunction. * * If it fails to commit after 5 attempts, the transaction fails. * * @param updateFunction * @returns {void|Promise<any>} */ runTransaction(updateFunction) { return this._transactionHandler._add(updateFunction); } settings(settings) { if (!(0, _utils.isObject)(settings)) { return Promise.reject(new Error('Firestore.settings failed: settings must be an object.')); } if ((0, _utils.hop)(settings, 'host') && !(0, _utils.isString)(settings.host)) { return Promise.reject(new Error('Firestore.settings failed: settings.host must be a string.')); } if ((0, _utils.hop)(settings, 'persistence') && !(0, _utils.isBoolean)(settings.persistence)) { return Promise.reject(new Error('Firestore.settings failed: settings.persistence must be boolean.')); } if ((0, _utils.hop)(settings, 'ssl') && !(0, _utils.isBoolean)(settings.ssl)) { return Promise.reject(new Error('Firestore.settings failed: settings.ssl must be boolean.')); } if ((0, _utils.hop)(settings, 'timestampsInSnapshots') && !(0, _utils.isBoolean)(settings.timestampsInSnapshots)) { return Promise.reject(new Error('Firestore.settings failed: settings.timestampsInSnapshots must be boolean.')); } return (0, _native.getNativeModule)(this).settings(settings); } /** * ------------- * UNSUPPORTED * ------------- */ enablePersistence() { console.warn('Due to restrictions in the native SDK, persistence must be configured in firebase.firestore().settings()'); return Promise.resolve(); } /** * ------------- * INTERNALS * ------------- */ /** * Internal collection sync listener * * @param event * @private */ _onCollectionSyncEvent(event) { if (event.error) { _events.SharedEventEmitter.emit((0, _events.getAppEventName)(this, `onQuerySnapshotError:${event.listenerId}`), event.error); } else { _events.SharedEventEmitter.emit((0, _events.getAppEventName)(this, `onQuerySnapshot:${event.listenerId}`), event.querySnapshot); } } /** * Internal document sync listener * * @param event * @private */ _onDocumentSyncEvent(event) { if (event.error) { _events.SharedEventEmitter.emit((0, _events.getAppEventName)(this, `onDocumentSnapshotError:${event.listenerId}`), event.error); } else { _events.SharedEventEmitter.emit((0, _events.getAppEventName)(this, `onDocumentSnapshot:${event.listenerId}`), event.documentSnapshot); } } } exports.default = Firestore; const statics = { Blob: _Blob.default, FieldPath: _FieldPath.default, FieldValue: _FieldValue.default, GeoPoint: _GeoPoint.default, enableLogging(enabled) { // DEPRECATED: Remove method in v4.1.0 console.warn('firebase.firestore.enableLogging is deprecated, use firebase.firestore().setLogLevel instead.'); this.setLogLevel(enabled ? 'debug' : 'silent'); }, setLogLevel(logLevel) { if (LogLevels.indexOf(logLevel) === -1) { throw new Error('Argument `logLevel` must be one of: `debug`, `error`, `silent`'); } if (_reactNative.NativeModules[MODULE_NAME]) { _reactNative.NativeModules[MODULE_NAME].setLogLevel(logLevel); } } }; exports.statics = statics;