UNPKG

34.1 kBJavaScriptView Raw
1(function (global, factory) {
2 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('rxjs/operators'), require('@angular/fire'), require('firebase/database'), require('@angular/fire/auth'), require('firebase/app')) :
3 typeof define === 'function' && define.amd ? define('@angular/fire/database', ['exports', '@angular/core', 'rxjs', 'rxjs/operators', '@angular/fire', 'firebase/database', '@angular/fire/auth', 'firebase/app'], factory) :
4 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.angular = global.angular || {}, global.angular.fire = global.angular.fire || {}, global.angular.fire.database = {}), global.ng.core, global.rxjs, global.rxjs.operators, global.angular.fire, null, global.angular.fire.auth, global.firebase));
5}(this, (function (exports, i0, rxjs, operators, i1, database, i2, firebase) { 'use strict';
6
7 function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
9 function _interopNamespace(e) {
10 if (e && e.__esModule) return e;
11 var n = Object.create(null);
12 if (e) {
13 Object.keys(e).forEach(function (k) {
14 if (k !== 'default') {
15 var d = Object.getOwnPropertyDescriptor(e, k);
16 Object.defineProperty(n, k, d.get ? d : {
17 enumerable: true,
18 get: function () {
19 return e[k];
20 }
21 });
22 }
23 });
24 }
25 n['default'] = e;
26 return Object.freeze(n);
27 }
28
29 var i0__namespace = /*#__PURE__*/_interopNamespace(i0);
30 var i1__namespace = /*#__PURE__*/_interopNamespace(i1);
31 var i2__namespace = /*#__PURE__*/_interopNamespace(i2);
32 var firebase__default = /*#__PURE__*/_interopDefaultLegacy(firebase);
33
34 /*! *****************************************************************************
35 Copyright (c) Microsoft Corporation.
36
37 Permission to use, copy, modify, and/or distribute this software for any
38 purpose with or without fee is hereby granted.
39
40 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
41 REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
42 AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
43 INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
44 LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
45 OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
46 PERFORMANCE OF THIS SOFTWARE.
47 ***************************************************************************** */
48 /* global Reflect, Promise */
49 var extendStatics = function (d, b) {
50 extendStatics = Object.setPrototypeOf ||
51 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
52 function (d, b) { for (var p in b)
53 if (Object.prototype.hasOwnProperty.call(b, p))
54 d[p] = b[p]; };
55 return extendStatics(d, b);
56 };
57 function __extends(d, b) {
58 if (typeof b !== "function" && b !== null)
59 throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
60 extendStatics(d, b);
61 function __() { this.constructor = d; }
62 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
63 }
64 var __assign = function () {
65 __assign = Object.assign || function __assign(t) {
66 for (var s, i = 1, n = arguments.length; i < n; i++) {
67 s = arguments[i];
68 for (var p in s)
69 if (Object.prototype.hasOwnProperty.call(s, p))
70 t[p] = s[p];
71 }
72 return t;
73 };
74 return __assign.apply(this, arguments);
75 };
76 function __rest(s, e) {
77 var t = {};
78 for (var p in s)
79 if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
80 t[p] = s[p];
81 if (s != null && typeof Object.getOwnPropertySymbols === "function")
82 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
83 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
84 t[p[i]] = s[p[i]];
85 }
86 return t;
87 }
88 function __decorate(decorators, target, key, desc) {
89 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
90 if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
91 r = Reflect.decorate(decorators, target, key, desc);
92 else
93 for (var i = decorators.length - 1; i >= 0; i--)
94 if (d = decorators[i])
95 r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
96 return c > 3 && r && Object.defineProperty(target, key, r), r;
97 }
98 function __param(paramIndex, decorator) {
99 return function (target, key) { decorator(target, key, paramIndex); };
100 }
101 function __metadata(metadataKey, metadataValue) {
102 if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
103 return Reflect.metadata(metadataKey, metadataValue);
104 }
105 function __awaiter(thisArg, _arguments, P, generator) {
106 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
107 return new (P || (P = Promise))(function (resolve, reject) {
108 function fulfilled(value) { try {
109 step(generator.next(value));
110 }
111 catch (e) {
112 reject(e);
113 } }
114 function rejected(value) { try {
115 step(generator["throw"](value));
116 }
117 catch (e) {
118 reject(e);
119 } }
120 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
121 step((generator = generator.apply(thisArg, _arguments || [])).next());
122 });
123 }
124 function __generator(thisArg, body) {
125 var _ = { label: 0, sent: function () { if (t[0] & 1)
126 throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
127 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g;
128 function verb(n) { return function (v) { return step([n, v]); }; }
129 function step(op) {
130 if (f)
131 throw new TypeError("Generator is already executing.");
132 while (_)
133 try {
134 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
135 return t;
136 if (y = 0, t)
137 op = [op[0] & 2, t.value];
138 switch (op[0]) {
139 case 0:
140 case 1:
141 t = op;
142 break;
143 case 4:
144 _.label++;
145 return { value: op[1], done: false };
146 case 5:
147 _.label++;
148 y = op[1];
149 op = [0];
150 continue;
151 case 7:
152 op = _.ops.pop();
153 _.trys.pop();
154 continue;
155 default:
156 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
157 _ = 0;
158 continue;
159 }
160 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
161 _.label = op[1];
162 break;
163 }
164 if (op[0] === 6 && _.label < t[1]) {
165 _.label = t[1];
166 t = op;
167 break;
168 }
169 if (t && _.label < t[2]) {
170 _.label = t[2];
171 _.ops.push(op);
172 break;
173 }
174 if (t[2])
175 _.ops.pop();
176 _.trys.pop();
177 continue;
178 }
179 op = body.call(thisArg, _);
180 }
181 catch (e) {
182 op = [6, e];
183 y = 0;
184 }
185 finally {
186 f = t = 0;
187 }
188 if (op[0] & 5)
189 throw op[1];
190 return { value: op[0] ? op[1] : void 0, done: true };
191 }
192 }
193 var __createBinding = Object.create ? (function (o, m, k, k2) {
194 if (k2 === undefined)
195 k2 = k;
196 Object.defineProperty(o, k2, { enumerable: true, get: function () { return m[k]; } });
197 }) : (function (o, m, k, k2) {
198 if (k2 === undefined)
199 k2 = k;
200 o[k2] = m[k];
201 });
202 function __exportStar(m, o) {
203 for (var p in m)
204 if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p))
205 __createBinding(o, m, p);
206 }
207 function __values(o) {
208 var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
209 if (m)
210 return m.call(o);
211 if (o && typeof o.length === "number")
212 return {
213 next: function () {
214 if (o && i >= o.length)
215 o = void 0;
216 return { value: o && o[i++], done: !o };
217 }
218 };
219 throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
220 }
221 function __read(o, n) {
222 var m = typeof Symbol === "function" && o[Symbol.iterator];
223 if (!m)
224 return o;
225 var i = m.call(o), r, ar = [], e;
226 try {
227 while ((n === void 0 || n-- > 0) && !(r = i.next()).done)
228 ar.push(r.value);
229 }
230 catch (error) {
231 e = { error: error };
232 }
233 finally {
234 try {
235 if (r && !r.done && (m = i["return"]))
236 m.call(i);
237 }
238 finally {
239 if (e)
240 throw e.error;
241 }
242 }
243 return ar;
244 }
245 /** @deprecated */
246 function __spread() {
247 for (var ar = [], i = 0; i < arguments.length; i++)
248 ar = ar.concat(__read(arguments[i]));
249 return ar;
250 }
251 /** @deprecated */
252 function __spreadArrays() {
253 for (var s = 0, i = 0, il = arguments.length; i < il; i++)
254 s += arguments[i].length;
255 for (var r = Array(s), k = 0, i = 0; i < il; i++)
256 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
257 r[k] = a[j];
258 return r;
259 }
260 function __spreadArray(to, from) {
261 for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
262 to[j] = from[i];
263 return to;
264 }
265 function __await(v) {
266 return this instanceof __await ? (this.v = v, this) : new __await(v);
267 }
268 function __asyncGenerator(thisArg, _arguments, generator) {
269 if (!Symbol.asyncIterator)
270 throw new TypeError("Symbol.asyncIterator is not defined.");
271 var g = generator.apply(thisArg, _arguments || []), i, q = [];
272 return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
273 function verb(n) { if (g[n])
274 i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
275 function resume(n, v) { try {
276 step(g[n](v));
277 }
278 catch (e) {
279 settle(q[0][3], e);
280 } }
281 function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
282 function fulfill(value) { resume("next", value); }
283 function reject(value) { resume("throw", value); }
284 function settle(f, v) { if (f(v), q.shift(), q.length)
285 resume(q[0][0], q[0][1]); }
286 }
287 function __asyncDelegator(o) {
288 var i, p;
289 return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
290 function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
291 }
292 function __asyncValues(o) {
293 if (!Symbol.asyncIterator)
294 throw new TypeError("Symbol.asyncIterator is not defined.");
295 var m = o[Symbol.asyncIterator], i;
296 return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
297 function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
298 function settle(resolve, reject, d, v) { Promise.resolve(v).then(function (v) { resolve({ value: v, done: d }); }, reject); }
299 }
300 function __makeTemplateObject(cooked, raw) {
301 if (Object.defineProperty) {
302 Object.defineProperty(cooked, "raw", { value: raw });
303 }
304 else {
305 cooked.raw = raw;
306 }
307 return cooked;
308 }
309 ;
310 var __setModuleDefault = Object.create ? (function (o, v) {
311 Object.defineProperty(o, "default", { enumerable: true, value: v });
312 }) : function (o, v) {
313 o["default"] = v;
314 };
315 function __importStar(mod) {
316 if (mod && mod.__esModule)
317 return mod;
318 var result = {};
319 if (mod != null)
320 for (var k in mod)
321 if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
322 __createBinding(result, mod, k);
323 __setModuleDefault(result, mod);
324 return result;
325 }
326 function __importDefault(mod) {
327 return (mod && mod.__esModule) ? mod : { default: mod };
328 }
329 function __classPrivateFieldGet(receiver, state, kind, f) {
330 if (kind === "a" && !f)
331 throw new TypeError("Private accessor was defined without a getter");
332 if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
333 throw new TypeError("Cannot read private member from an object whose class did not declare it");
334 return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
335 }
336 function __classPrivateFieldSet(receiver, state, value, kind, f) {
337 if (kind === "m")
338 throw new TypeError("Private method is not writable");
339 if (kind === "a" && !f)
340 throw new TypeError("Private accessor was defined without a setter");
341 if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
342 throw new TypeError("Cannot write private member to an object whose class did not declare it");
343 return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
344 }
345
346 function isString(value) {
347 return typeof value === 'string';
348 }
349 function isFirebaseDataSnapshot(value) {
350 return typeof value.exportVal === 'function';
351 }
352 function isNil(obj) {
353 return obj === undefined || obj === null;
354 }
355 function isFirebaseRef(value) {
356 return typeof value.set === 'function';
357 }
358 /**
359 * Returns a database reference given a Firebase App and an
360 * absolute or relative path.
361 * @param database - Firebase Database
362 * @param pathRef - Database path, relative or absolute
363 */
364 function getRef(database, pathRef) {
365 // if a db ref was passed in, just return it
366 return isFirebaseRef(pathRef) ? pathRef
367 : database.ref(pathRef);
368 }
369 function checkOperationCases(item, cases) {
370 if (isString(item)) {
371 return cases.stringCase();
372 }
373 else if (isFirebaseRef(item)) {
374 return cases.firebaseCase();
375 }
376 else if (isFirebaseDataSnapshot(item)) {
377 return cases.snapshotCase();
378 }
379 throw new Error("Expects a string, snapshot, or reference. Got: " + typeof item);
380 }
381
382 /**
383 * Create an observable from a Database Reference or Database Query.
384 * @param ref Database Reference
385 * @param event Listen event type ('value', 'added', 'changed', 'removed', 'moved')
386 * @param listenType 'on' or 'once'
387 * @param scheduler - Rxjs scheduler
388 */
389 function fromRef(ref, event, listenType, scheduler) {
390 if (listenType === void 0) { listenType = 'on'; }
391 if (scheduler === void 0) { scheduler = rxjs.asyncScheduler; }
392 return new rxjs.Observable(function (subscriber) {
393 var fn = null;
394 fn = ref[listenType](event, function (snapshot, prevKey) {
395 scheduler.schedule(function () {
396 subscriber.next({ snapshot: snapshot, prevKey: prevKey });
397 });
398 if (listenType === 'once') {
399 scheduler.schedule(function () { return subscriber.complete(); });
400 }
401 }, function (err) {
402 scheduler.schedule(function () { return subscriber.error(err); });
403 });
404 if (listenType === 'on') {
405 return {
406 unsubscribe: function () {
407 if (fn != null) {
408 ref.off(event, fn);
409 }
410 }
411 };
412 }
413 else {
414 return {
415 unsubscribe: function () {
416 }
417 };
418 }
419 }).pipe(operators.map(function (payload) {
420 var snapshot = payload.snapshot, prevKey = payload.prevKey;
421 var key = null;
422 if (snapshot.exists()) {
423 key = snapshot.key;
424 }
425 return { type: event, payload: snapshot, prevKey: prevKey, key: key };
426 }), operators.share());
427 }
428
429 function listChanges(ref, events, scheduler) {
430 return fromRef(ref, 'value', 'once', scheduler).pipe(operators.switchMap(function (snapshotAction) {
431 var childEvent$ = [rxjs.of(snapshotAction)];
432 events.forEach(function (event) { return childEvent$.push(fromRef(ref, event, 'on', scheduler)); });
433 return rxjs.merge.apply(void 0, __spreadArray([], __read(childEvent$))).pipe(operators.scan(buildView, []));
434 }), operators.distinctUntilChanged());
435 }
436 function positionFor(changes, key) {
437 var len = changes.length;
438 for (var i = 0; i < len; i++) {
439 if (changes[i].payload.key === key) {
440 return i;
441 }
442 }
443 return -1;
444 }
445 function positionAfter(changes, prevKey) {
446 if (isNil(prevKey)) {
447 return 0;
448 }
449 else {
450 var i = positionFor(changes, prevKey);
451 if (i === -1) {
452 return changes.length;
453 }
454 else {
455 return i + 1;
456 }
457 }
458 }
459 function buildView(current, action) {
460 var payload = action.payload, prevKey = action.prevKey, key = action.key;
461 var currentKeyPosition = positionFor(current, key);
462 var afterPreviousKeyPosition = positionAfter(current, prevKey);
463 switch (action.type) {
464 case 'value':
465 if (action.payload && action.payload.exists()) {
466 var prevKey_1 = null;
467 action.payload.forEach(function (payload) {
468 var action = { payload: payload, type: 'value', prevKey: prevKey_1, key: payload.key };
469 prevKey_1 = payload.key;
470 current = __spreadArray(__spreadArray([], __read(current)), [action]);
471 return false;
472 });
473 }
474 return current;
475 case 'child_added':
476 if (currentKeyPosition > -1) {
477 // check that the previouskey is what we expect, else reorder
478 var previous = current[currentKeyPosition - 1];
479 if ((previous && previous.key || null) !== prevKey) {
480 current = current.filter(function (x) { return x.payload.key !== payload.key; });
481 current.splice(afterPreviousKeyPosition, 0, action);
482 }
483 }
484 else if (prevKey == null) {
485 return __spreadArray([action], __read(current));
486 }
487 else {
488 current = current.slice();
489 current.splice(afterPreviousKeyPosition, 0, action);
490 }
491 return current;
492 case 'child_removed':
493 return current.filter(function (x) { return x.payload.key !== payload.key; });
494 case 'child_changed':
495 return current.map(function (x) { return x.payload.key === key ? action : x; });
496 case 'child_moved':
497 if (currentKeyPosition > -1) {
498 var data = current.splice(currentKeyPosition, 1)[0];
499 current = current.slice();
500 current.splice(afterPreviousKeyPosition, 0, data);
501 return current;
502 }
503 return current;
504 // default will also remove null results
505 default:
506 return current;
507 }
508 }
509
510 function validateEventsArray(events) {
511 if (isNil(events) || events.length === 0) {
512 events = ['child_added', 'child_removed', 'child_changed', 'child_moved'];
513 }
514 return events;
515 }
516
517 function snapshotChanges(query, events, scheduler) {
518 events = validateEventsArray(events);
519 return listChanges(query, events, scheduler);
520 }
521
522 function stateChanges(query, events, scheduler) {
523 events = validateEventsArray(events);
524 var childEvent$ = events.map(function (event) { return fromRef(query, event, 'on', scheduler); });
525 return rxjs.merge.apply(void 0, __spreadArray([], __read(childEvent$)));
526 }
527
528 function auditTrail(query, events, scheduler) {
529 var auditTrail$ = stateChanges(query, events)
530 .pipe(operators.scan(function (current, action) { return __spreadArray(__spreadArray([], __read(current)), [action]); }, []));
531 return waitForLoaded(query, auditTrail$, scheduler);
532 }
533 function loadedData(query, scheduler) {
534 // Create an observable of loaded values to retrieve the
535 // known dataset. This will allow us to know what key to
536 // emit the "whole" array at when listening for child events.
537 return fromRef(query, 'value', 'on', scheduler)
538 .pipe(operators.map(function (data) {
539 // Store the last key in the data set
540 var lastKeyToLoad;
541 // Loop through loaded dataset to find the last key
542 data.payload.forEach(function (child) {
543 lastKeyToLoad = child.key;
544 return false;
545 });
546 // return data set and the current last key loaded
547 return { data: data, lastKeyToLoad: lastKeyToLoad };
548 }));
549 }
550 function waitForLoaded(query, action$, scheduler) {
551 var loaded$ = loadedData(query, scheduler);
552 return loaded$
553 .pipe(operators.withLatestFrom(action$),
554 // Get the latest values from the "loaded" and "child" datasets
555 // We can use both datasets to form an array of the latest values.
556 operators.map(function (_a) {
557 var _b = __read(_a, 2), loaded = _b[0], actions = _b[1];
558 // Store the last key in the data set
559 var lastKeyToLoad = loaded.lastKeyToLoad;
560 // Store all child keys loaded at this point
561 var loadedKeys = actions.map(function (snap) { return snap.key; });
562 return { actions: actions, lastKeyToLoad: lastKeyToLoad, loadedKeys: loadedKeys };
563 }),
564 // This is the magical part, only emit when the last load key
565 // in the dataset has been loaded by a child event. At this point
566 // we can assume the dataset is "whole".
567 operators.skipWhile(function (meta) { return meta.loadedKeys.indexOf(meta.lastKeyToLoad) === -1; }),
568 // Pluck off the meta data because the user only cares
569 // to iterate through the snapshots
570 operators.map(function (meta) { return meta.actions; }));
571 }
572
573 function createDataOperationMethod(ref, operation) {
574 return function dataOperation(item, value) {
575 return checkOperationCases(item, {
576 stringCase: function () { return ref.child(item)[operation](value); },
577 firebaseCase: function () { return item[operation](value); },
578 snapshotCase: function () { return item.ref[operation](value); }
579 });
580 };
581 }
582
583 // TODO(davideast): Find out why TS thinks this returns firebase.Primise
584 // instead of Promise.
585 function createRemoveMethod(ref) {
586 return function remove(item) {
587 if (!item) {
588 return ref.remove();
589 }
590 return checkOperationCases(item, {
591 stringCase: function () { return ref.child(item).remove(); },
592 firebaseCase: function () { return item.remove(); },
593 snapshotCase: function () { return item.ref.remove(); }
594 });
595 };
596 }
597
598 function createListReference(query, afDatabase) {
599 var outsideAngularScheduler = afDatabase.schedulers.outsideAngular;
600 var refInZone = afDatabase.schedulers.ngZone.run(function () { return query.ref; });
601 return {
602 query: query,
603 update: createDataOperationMethod(refInZone, 'update'),
604 set: createDataOperationMethod(refInZone, 'set'),
605 push: function (data) { return refInZone.push(data); },
606 remove: createRemoveMethod(refInZone),
607 snapshotChanges: function (events) {
608 return snapshotChanges(query, events, outsideAngularScheduler).pipe(afDatabase.keepUnstableUntilFirst);
609 },
610 stateChanges: function (events) {
611 return stateChanges(query, events, outsideAngularScheduler).pipe(afDatabase.keepUnstableUntilFirst);
612 },
613 auditTrail: function (events) {
614 return auditTrail(query, events, outsideAngularScheduler).pipe(afDatabase.keepUnstableUntilFirst);
615 },
616 valueChanges: function (events, options) {
617 var snapshotChanges$ = snapshotChanges(query, events, outsideAngularScheduler);
618 return snapshotChanges$.pipe(operators.map(function (actions) { return actions.map(function (a) {
619 var _a;
620 if (options && options.idField) {
621 return Object.assign(Object.assign({}, a.payload.val()), (_a = {},
622 _a[options.idField] = a.key,
623 _a));
624 }
625 else {
626 return a.payload.val();
627 }
628 }); }), afDatabase.keepUnstableUntilFirst);
629 }
630 };
631 }
632
633 function createObjectSnapshotChanges(query, scheduler) {
634 return function snapshotChanges() {
635 return fromRef(query, 'value', 'on', scheduler);
636 };
637 }
638
639 function createObjectReference(query, afDatabase) {
640 return {
641 query: query,
642 snapshotChanges: function () {
643 return createObjectSnapshotChanges(query, afDatabase.schedulers.outsideAngular)().pipe(afDatabase.keepUnstableUntilFirst);
644 },
645 update: function (data) { return query.ref.update(data); },
646 set: function (data) { return query.ref.set(data); },
647 remove: function () { return query.ref.remove(); },
648 valueChanges: function () {
649 var snapshotChanges$ = createObjectSnapshotChanges(query, afDatabase.schedulers.outsideAngular)();
650 return snapshotChanges$.pipe(afDatabase.keepUnstableUntilFirst, operators.map(function (action) { return action.payload.exists() ? action.payload.val() : null; }));
651 },
652 };
653 }
654
655 var URL = new i0.InjectionToken('angularfire2.realtimeDatabaseURL');
656 var USE_EMULATOR = new i0.InjectionToken('angularfire2.database.use-emulator');
657 var AngularFireDatabase = /** @class */ (function () {
658 function AngularFireDatabase(options, nameOrConfig, databaseURL,
659 // tslint:disable-next-line:ban-types
660 platformId, zone, _useEmulator, // tuple isn't working here
661 useAuthEmulator) {
662 this.schedulers = new i1.ɵAngularFireSchedulers(zone);
663 this.keepUnstableUntilFirst = i1.ɵkeepUnstableUntilFirstFactory(this.schedulers);
664 var useEmulator = _useEmulator;
665 var app = i1.ɵfirebaseAppFactory(options, zone, nameOrConfig);
666 if (!firebase__default['default'].auth && useAuthEmulator) {
667 i1.ɵlogAuthEmulatorError();
668 }
669 this.database = i1.ɵfetchInstance(app.name + ".database." + databaseURL, 'AngularFireDatabase', app, function () {
670 var database = zone.runOutsideAngular(function () { return app.database(databaseURL || undefined); });
671 if (useEmulator) {
672 database.useEmulator.apply(database, __spreadArray([], __read(useEmulator)));
673 }
674 return database;
675 }, [useEmulator]);
676 }
677 AngularFireDatabase.prototype.list = function (pathOrRef, queryFn) {
678 var _this = this;
679 var ref = this.schedulers.ngZone.runOutsideAngular(function () { return getRef(_this.database, pathOrRef); });
680 var query = ref;
681 if (queryFn) {
682 query = queryFn(ref);
683 }
684 return createListReference(query, this);
685 };
686 AngularFireDatabase.prototype.object = function (pathOrRef) {
687 var _this = this;
688 var ref = this.schedulers.ngZone.runOutsideAngular(function () { return getRef(_this.database, pathOrRef); });
689 return createObjectReference(ref, this);
690 };
691 AngularFireDatabase.prototype.createPushId = function () {
692 var _this = this;
693 var ref = this.schedulers.ngZone.runOutsideAngular(function () { return _this.database.ref(); });
694 return ref.push().key;
695 };
696 return AngularFireDatabase;
697 }());
698 /** @nocollapse */ AngularFireDatabase.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function AngularFireDatabase_Factory() { return new AngularFireDatabase(i0__namespace.ɵɵinject(i1__namespace.FIREBASE_OPTIONS), i0__namespace.ɵɵinject(i1__namespace.FIREBASE_APP_NAME, 8), i0__namespace.ɵɵinject(URL, 8), i0__namespace.ɵɵinject(i0__namespace.PLATFORM_ID), i0__namespace.ɵɵinject(i0__namespace.NgZone), i0__namespace.ɵɵinject(USE_EMULATOR, 8), i0__namespace.ɵɵinject(i2__namespace.USE_EMULATOR, 8)); }, token: AngularFireDatabase, providedIn: "any" });
699 AngularFireDatabase.decorators = [
700 { type: i0.Injectable, args: [{
701 providedIn: 'any'
702 },] }
703 ];
704 /** @nocollapse */
705 AngularFireDatabase.ctorParameters = function () { return [
706 { type: undefined, decorators: [{ type: i0.Inject, args: [i1.FIREBASE_OPTIONS,] }] },
707 { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [i1.FIREBASE_APP_NAME,] }] },
708 { type: String, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [URL,] }] },
709 { type: Object, decorators: [{ type: i0.Inject, args: [i0.PLATFORM_ID,] }] },
710 { type: i0.NgZone },
711 { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [USE_EMULATOR,] }] },
712 { type: undefined, decorators: [{ type: i0.Optional }, { type: i0.Inject, args: [i2.USE_EMULATOR,] }] }
713 ]; };
714
715 var AngularFireDatabaseModule = /** @class */ (function () {
716 function AngularFireDatabaseModule() {
717 }
718 return AngularFireDatabaseModule;
719 }());
720 AngularFireDatabaseModule.decorators = [
721 { type: i0.NgModule, args: [{
722 providers: [AngularFireDatabase]
723 },] }
724 ];
725
726 /**
727 * Generated bundle index. Do not edit.
728 */
729
730 exports.AngularFireDatabase = AngularFireDatabase;
731 exports.AngularFireDatabaseModule = AngularFireDatabaseModule;
732 exports.URL = URL;
733 exports.USE_EMULATOR = USE_EMULATOR;
734 exports.auditTrail = auditTrail;
735 exports.createListReference = createListReference;
736 exports.fromRef = fromRef;
737 exports.listChanges = listChanges;
738 exports.snapshotChanges = snapshotChanges;
739 exports.stateChanges = stateChanges;
740
741 Object.defineProperty(exports, '__esModule', { value: true });
742
743})));
744//# sourceMappingURL=angular-fire-database.umd.js.map