@angular/fire
Version:
The official Angular library for Firebase.
47 lines • 5.93 kB
JavaScript
import { asyncScheduler, Observable } from 'rxjs';
import { map, share } from 'rxjs/operators';
/**
* Create an observable from a Database Reference or Database Query.
* @param ref Database Reference
* @param event Listen event type ('value', 'added', 'changed', 'removed', 'moved')
* @param listenType 'on' or 'once'
* @param scheduler - Rxjs scheduler
*/
export function fromRef(ref, event, listenType = 'on', scheduler = asyncScheduler) {
return new Observable(subscriber => {
let fn = null;
fn = ref[listenType](event, (snapshot, prevKey) => {
scheduler.schedule(() => {
subscriber.next({ snapshot, prevKey });
});
if (listenType === 'once') {
scheduler.schedule(() => subscriber.complete());
}
}, err => {
scheduler.schedule(() => subscriber.error(err));
});
if (listenType === 'on') {
return {
unsubscribe() {
if (fn != null) {
ref.off(event, fn);
}
}
};
}
else {
return {
unsubscribe() {
}
};
}
}).pipe(map(payload => {
const { snapshot, prevKey } = payload;
let key = null;
if (snapshot.exists()) {
key = snapshot.key;
}
return { type: event, payload: snapshot, prevKey, key };
}), share());
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbVJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wYXQvZGF0YWJhc2Uvb2JzZXJ2YWJsZS9mcm9tUmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFpQixNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTzVDOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUksR0FBa0IsRUFDbEIsS0FBa0IsRUFDbEIsVUFBVSxHQUFHLElBQUksRUFDakIsWUFBMkIsY0FBYztJQUVsRSxPQUFPLElBQUksVUFBVSxDQUFxQixVQUFVLENBQUMsRUFBRTtRQUNyRCxJQUFJLEVBQUUsR0FBZSxJQUFJLENBQUM7UUFDMUIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3RCLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtnQkFDekIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQzthQUNqRDtRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNQLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQ3ZCLE9BQU87Z0JBQ0wsV0FBVztvQkFDVCxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7d0JBQ2QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7cUJBQ3BCO2dCQUNILENBQUM7YUFDRixDQUFDO1NBQ0g7YUFBTTtZQUNMLE9BQU87Z0JBQ0wsV0FBVztnQkFDWCxDQUFDO2FBQ0YsQ0FBQztTQUNIO0lBQ0gsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNaLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ3RDLElBQUksR0FBRyxHQUFrQixJQUFJLENBQUM7UUFDOUIsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDckIsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7U0FDcEI7UUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMxRCxDQUFDLENBQUMsRUFDRixLQUFLLEVBQUUsQ0FDUixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFuZ3VsYXJGaXJlQWN0aW9uLCBEYXRhYmFzZVF1ZXJ5LCBEYXRhYmFzZVNuYXBzaG90LCBMaXN0ZW5FdmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgYXN5bmNTY2hlZHVsZXIsIE9ic2VydmFibGUsIFNjaGVkdWxlckxpa2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc2hhcmUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmludGVyZmFjZSBTbmFwc2hvdFByZXZLZXk8VD4ge1xuICBzbmFwc2hvdDogRGF0YWJhc2VTbmFwc2hvdDxUPjtcbiAgcHJldktleTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gb2JzZXJ2YWJsZSBmcm9tIGEgRGF0YWJhc2UgUmVmZXJlbmNlIG9yIERhdGFiYXNlIFF1ZXJ5LlxuICogQHBhcmFtIHJlZiBEYXRhYmFzZSBSZWZlcmVuY2VcbiAqIEBwYXJhbSBldmVudCBMaXN0ZW4gZXZlbnQgdHlwZSAoJ3ZhbHVlJywgJ2FkZGVkJywgJ2NoYW5nZWQnLCAncmVtb3ZlZCcsICdtb3ZlZCcpXG4gKiBAcGFyYW0gbGlzdGVuVHlwZSAnb24nIG9yICdvbmNlJ1xuICogQHBhcmFtIHNjaGVkdWxlciAtIFJ4anMgc2NoZWR1bGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUmVmPFQ+KHJlZjogRGF0YWJhc2VRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiBMaXN0ZW5FdmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlblR5cGUgPSAnb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVyOiBTY2hlZHVsZXJMaWtlID0gYXN5bmNTY2hlZHVsZXJcbik6IE9ic2VydmFibGU8QW5ndWxhckZpcmVBY3Rpb248RGF0YWJhc2VTbmFwc2hvdDxUPj4+IHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFNuYXBzaG90UHJldktleTxUPj4oc3Vic2NyaWJlciA9PiB7XG4gICAgbGV0IGZuOiBhbnkgfCBudWxsID0gbnVsbDtcbiAgICBmbiA9IHJlZltsaXN0ZW5UeXBlXShldmVudCwgKHNuYXBzaG90LCBwcmV2S2V5KSA9PiB7XG4gICAgICBzY2hlZHVsZXIuc2NoZWR1bGUoKCkgPT4ge1xuICAgICAgICBzdWJzY3JpYmVyLm5leHQoeyBzbmFwc2hvdCwgcHJldktleSB9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGxpc3RlblR5cGUgPT09ICdvbmNlJykge1xuICAgICAgICBzY2hlZHVsZXIuc2NoZWR1bGUoKCkgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpKTtcbiAgICAgIH1cbiAgICB9LCBlcnIgPT4ge1xuICAgICAgc2NoZWR1bGVyLnNjaGVkdWxlKCgpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyKSk7XG4gICAgfSk7XG5cbiAgICBpZiAobGlzdGVuVHlwZSA9PT0gJ29uJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgICAgaWYgKGZuICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJlZi5vZmYoZXZlbnQsIGZuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVuc3Vic2NyaWJlKCkge1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSkucGlwZShcbiAgICBtYXAocGF5bG9hZCA9PiB7XG4gICAgICBjb25zdCB7IHNuYXBzaG90LCBwcmV2S2V5IH0gPSBwYXlsb2FkO1xuICAgICAgbGV0IGtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAoc25hcHNob3QuZXhpc3RzKCkpIHtcbiAgICAgICAga2V5ID0gc25hcHNob3Qua2V5O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgdHlwZTogZXZlbnQsIHBheWxvYWQ6IHNuYXBzaG90LCBwcmV2S2V5LCBrZXkgfTtcbiAgICB9KSxcbiAgICBzaGFyZSgpXG4gICk7XG59XG4iXX0=