UNPKG

nativescript-firebase-updated-new

Version:
175 lines 6.4 kB
import { firebase } from "../../firebase"; import { nextPushId } from "./util/NextPushId"; export var database; (function (database) { class Query { constructor(path) { this.path = path; } on(eventType, callback, cancelCallbackOrContext, context) { const onValueEvent = result => { if (result.error) { callback(result); } else { callback({ key: result.key, val: () => result.value, exists: () => !!result.value }); } }; firebase.addValueEventListener(onValueEvent, this.path).then((result) => { if (!Query.registeredListeners.has(this.path)) { Query.registeredListeners.set(this.path, []); } Query.registeredListeners.set(this.path, Query.registeredListeners.get(this.path).concat(result.listeners)); }, error => { console.log("firebase.database().on error: " + error); }); if (!Query.registeredCallbacks.has(this.path)) { Query.registeredCallbacks.set(this.path, []); } Query.registeredCallbacks.get(this.path).push(callback); return null; } off(eventType, callback, context) { if (Query.registeredListeners.has(this.path)) { firebase.removeEventListeners(Query.registeredListeners.get(this.path), this.path).then(result => Query.registeredListeners.delete(this.path), error => console.log("firebase.database().off error: " + error)); } Query.registeredCallbacks.delete(this.path); return null; } once(eventType, successCallback, failureCallbackOrContext, context) { return new Promise((resolve, reject) => { firebase.getValue(this.path).then(result => { resolve({ key: result.key, val: () => result.value, exists: () => !!result.value }); }); }); } getOnValueEventHandler() { return result => { const callbacks = Query.registeredCallbacks.get(this.path); callbacks && callbacks.map(callback => { callback({ key: result.key, val: () => result.value, exists: () => !!result.value }); }); }; } orderByChild(child) { firebase.query(this.getOnValueEventHandler(), this.path, { orderBy: { type: firebase.QueryOrderByType.CHILD, value: child } }); return this; } orderByKey() { firebase.query(this.getOnValueEventHandler(), this.path, { orderBy: { type: firebase.QueryOrderByType.KEY } }); return this; } orderByPriority() { firebase.query(this.getOnValueEventHandler(), this.path, { orderBy: { type: firebase.QueryOrderByType.PRIORITY } }); return this; } orderByValue() { firebase.query(this.getOnValueEventHandler(), this.path, { orderBy: { type: firebase.QueryOrderByType.VALUE } }); return this; } } Query.registeredListeners = new Map(); Query.registeredCallbacks = new Map(); database.Query = Query; class Reference extends Query { getKey() { if (!this.path) { return null; } else { return this.path.lastIndexOf("/") === -1 ? this.path : this.path.substring(this.path.lastIndexOf("/") + 1); } } get key() { return this.getKey(); } set(value, onComplete) { return new Promise((resolve, reject) => { firebase.setValue(this.path, value).then(() => { onComplete && onComplete(null); resolve(null); }).catch(err => { onComplete && onComplete(err); reject(err); }); }); } child(path) { return new Reference(this.path ? `${this.path}/${path}` : path); } push(value, onComplete) { const now = new Date().getTime(); const name = nextPushId(now); const thennablePushRef = this.child(name); const pushRef = this.child(name); let promise; if (value != null) { promise = thennablePushRef.set(value, onComplete).then(() => pushRef); } else { promise = Promise.resolve(pushRef); } thennablePushRef.then = promise.then.bind(promise); thennablePushRef.catch = promise.then.bind(promise, undefined); if (typeof onComplete === 'function') { promise.catch(() => { }); } return thennablePushRef; } remove(onComplete) { return new Promise((resolve, reject) => { firebase.remove(this.path).then(() => { onComplete && onComplete(null); resolve(null); }).catch(err => { onComplete && onComplete(err); reject(err); }); }); } onDisconnect() { return firebase.onDisconnect(this.path); } transaction(transactionUpdate, onComplete, applyLocally) { return firebase.transaction(this.path, transactionUpdate, onComplete); } } database.Reference = Reference; class Database { ref(path) { return new Reference(path); } } database.Database = Database; })(database || (database = {})); //# sourceMappingURL=index.js.map