@firebase/database-compat 0.1.8 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/util/util.ts","../src/util/validation.ts","../src/api/onDisconnect.ts","../src/api/TransactionResult.ts","../src/api/Reference.ts","../src/api/Database.ts","../src/api/internal.ts","../src/index.node.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Logger } from '@firebase/logger';\n\nconst logClient = new Logger('@firebase/database-compat');\n\nexport const warn = function (msg: string) {\n const message = 'FIREBASE WARNING: ' + msg;\n logClient.warn(message);\n};\n","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { errorPrefix as errorPrefixFxn } from '@firebase/util';\n\nexport const validateBoolean = function (\n fnName: string,\n argumentName: string,\n bool: unknown,\n optional: boolean\n) {\n if (optional && bool === undefined) {\n return;\n }\n if (typeof bool !== 'boolean') {\n throw new Error(\n errorPrefixFxn(fnName, argumentName) + 'must be a boolean.'\n );\n }\n};\n\nexport const validateEventType = function (\n fnName: string,\n eventType: string,\n optional: boolean\n) {\n if (optional && eventType === undefined) {\n return;\n }\n\n switch (eventType) {\n case 'value':\n case 'child_added':\n case 'child_removed':\n case 'child_changed':\n case 'child_moved':\n break;\n default:\n throw new Error(\n errorPrefixFxn(fnName, 'eventType') +\n 'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\n '\"child_changed\", or \"child_moved\".'\n );\n }\n};\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { OnDisconnect as ModularOnDisconnect } from '@firebase/database';\nimport { validateArgCount, validateCallback, Compat } from '@firebase/util';\n\nimport { warn } from '../util/util';\nexport class OnDisconnect implements Compat<ModularOnDisconnect> {\n constructor(readonly _delegate: ModularOnDisconnect) {}\n\n cancel(onComplete?: (a: Error | null) => void): Promise<void> {\n validateArgCount('OnDisconnect.cancel', 0, 1, arguments.length);\n validateCallback('OnDisconnect.cancel', 'onComplete', onComplete, true);\n const result = this._delegate.cancel();\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n remove(onComplete?: (a: Error | null) => void): Promise<void> {\n validateArgCount('OnDisconnect.remove', 0, 1, arguments.length);\n validateCallback('OnDisconnect.remove', 'onComplete', onComplete, true);\n const result = this._delegate.remove();\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n set(value: unknown, onComplete?: (a: Error | null) => void): Promise<void> {\n validateArgCount('OnDisconnect.set', 1, 2, arguments.length);\n validateCallback('OnDisconnect.set', 'onComplete', onComplete, true);\n const result = this._delegate.set(value);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n setWithPriority(\n value: unknown,\n priority: number | string | null,\n onComplete?: (a: Error | null) => void\n ): Promise<void> {\n validateArgCount('OnDisconnect.setWithPriority', 2, 3, arguments.length);\n validateCallback(\n 'OnDisconnect.setWithPriority',\n 'onComplete',\n onComplete,\n true\n );\n const result = this._delegate.setWithPriority(value, priority);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n update(\n objectToMerge: Record<string, unknown>,\n onComplete?: (a: Error | null) => void\n ): Promise<void> {\n validateArgCount('OnDisconnect.update', 1, 2, arguments.length);\n if (Array.isArray(objectToMerge)) {\n const newObjectToMerge: { [k: string]: unknown } = {};\n for (let i = 0; i < objectToMerge.length; ++i) {\n newObjectToMerge['' + i] = objectToMerge[i];\n }\n objectToMerge = newObjectToMerge;\n warn(\n 'Passing an Array to firebase.database.onDisconnect().update() is deprecated. Use set() if you want to overwrite the ' +\n 'existing data, or an Object with integer keys if you really do want to only update some of the children.'\n );\n }\n validateCallback('OnDisconnect.update', 'onComplete', onComplete, true);\n const result = this._delegate.update(objectToMerge);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { validateArgCount } from '@firebase/util';\n\nimport { DataSnapshot } from './Reference';\n\nexport class TransactionResult {\n /**\n * A type for the resolve value of Firebase.transaction.\n */\n constructor(public committed: boolean, public snapshot: DataSnapshot) {}\n\n // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\n // for end-users\n toJSON(): object {\n validateArgCount('TransactionResult.toJSON', 0, 1, arguments.length);\n return { committed: this.committed, snapshot: this.snapshot.toJSON() };\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n OnDisconnect as ModularOnDisconnect,\n off,\n onChildAdded,\n onChildChanged,\n onChildMoved,\n onChildRemoved,\n onValue,\n EventType,\n limitToFirst,\n query,\n limitToLast,\n orderByChild,\n orderByKey,\n orderByValue,\n orderByPriority,\n startAt,\n startAfter,\n endAt,\n endBefore,\n equalTo,\n get,\n set,\n update,\n setWithPriority,\n remove,\n setPriority,\n push,\n runTransaction,\n child,\n DataSnapshot as ModularDataSnapshot,\n Query as ExpQuery,\n DatabaseReference as ModularReference,\n _QueryImpl,\n _ReferenceImpl,\n _validatePathString,\n _validateWritablePath,\n _UserCallback,\n _QueryParams\n} from '@firebase/database';\nimport {\n Compat,\n Deferred,\n errorPrefix,\n validateArgCount,\n validateCallback,\n validateContextObject\n} from '@firebase/util';\n\nimport { warn } from '../util/util';\nimport { validateBoolean, validateEventType } from '../util/validation';\n\nimport { Database } from './Database';\nimport { OnDisconnect } from './onDisconnect';\nimport { TransactionResult } from './TransactionResult';\n\n/**\n * Class representing a firebase data snapshot. It wraps a SnapshotNode and\n * surfaces the public methods (val, forEach, etc.) we want to expose.\n */\nexport class DataSnapshot implements Compat<ModularDataSnapshot> {\n constructor(\n readonly _database: Database,\n readonly _delegate: ModularDataSnapshot\n ) {}\n\n /**\n * Retrieves the snapshot contents as JSON. Returns null if the snapshot is\n * empty.\n *\n * @returns JSON representation of the DataSnapshot contents, or null if empty.\n */\n val(): unknown {\n validateArgCount('DataSnapshot.val', 0, 0, arguments.length);\n return this._delegate.val();\n }\n\n /**\n * Returns the snapshot contents as JSON, including priorities of node. Suitable for exporting\n * the entire node contents.\n * @returns JSON representation of the DataSnapshot contents, or null if empty.\n */\n exportVal(): unknown {\n validateArgCount('DataSnapshot.exportVal', 0, 0, arguments.length);\n return this._delegate.exportVal();\n }\n\n // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\n // for end-users\n toJSON(): unknown {\n // Optional spacer argument is unnecessary because we're depending on recursion rather than stringifying the content\n validateArgCount('DataSnapshot.toJSON', 0, 1, arguments.length);\n return this._delegate.toJSON();\n }\n\n /**\n * Returns whether the snapshot contains a non-null value.\n *\n * @returns Whether the snapshot contains a non-null value, or is empty.\n */\n exists(): boolean {\n validateArgCount('DataSnapshot.exists', 0, 0, arguments.length);\n return this._delegate.exists();\n }\n\n /**\n * Returns a DataSnapshot of the specified child node's contents.\n *\n * @param path - Path to a child.\n * @returns DataSnapshot for child node.\n */\n child(path: string): DataSnapshot {\n validateArgCount('DataSnapshot.child', 0, 1, arguments.length);\n // Ensure the childPath is a string (can be a number)\n path = String(path);\n _validatePathString('DataSnapshot.child', 'path', path, false);\n return new DataSnapshot(this._database, this._delegate.child(path));\n }\n\n /**\n * Returns whether the snapshot contains a child at the specified path.\n *\n * @param path - Path to a child.\n * @returns Whether the child exists.\n */\n hasChild(path: string): boolean {\n validateArgCount('DataSnapshot.hasChild', 1, 1, arguments.length);\n _validatePathString('DataSnapshot.hasChild', 'path', path, false);\n return this._delegate.hasChild(path);\n }\n\n /**\n * Returns the priority of the object, or null if no priority was set.\n *\n * @returns The priority.\n */\n getPriority(): string | number | null {\n validateArgCount('DataSnapshot.getPriority', 0, 0, arguments.length);\n return this._delegate.priority;\n }\n\n /**\n * Iterates through child nodes and calls the specified action for each one.\n *\n * @param action - Callback function to be called\n * for each child.\n * @returns True if forEach was canceled by action returning true for\n * one of the child nodes.\n */\n forEach(action: (snapshot: DataSnapshot) => boolean | void): boolean {\n validateArgCount('DataSnapshot.forEach', 1, 1, arguments.length);\n validateCallback('DataSnapshot.forEach', 'action', action, false);\n return this._delegate.forEach(expDataSnapshot =>\n action(new DataSnapshot(this._database, expDataSnapshot))\n );\n }\n\n /**\n * Returns whether this DataSnapshot has children.\n * @returns True if the DataSnapshot contains 1 or more child nodes.\n */\n hasChildren(): boolean {\n validateArgCount('DataSnapshot.hasChildren', 0, 0, arguments.length);\n return this._delegate.hasChildren();\n }\n\n get key() {\n return this._delegate.key;\n }\n\n /**\n * Returns the number of children for this DataSnapshot.\n * @returns The number of children that this DataSnapshot contains.\n */\n numChildren(): number {\n validateArgCount('DataSnapshot.numChildren', 0, 0, arguments.length);\n return this._delegate.size;\n }\n\n /**\n * @returns The Firebase reference for the location this snapshot's data came\n * from.\n */\n getRef(): Reference {\n validateArgCount('DataSnapshot.ref', 0, 0, arguments.length);\n return new Reference(this._database, this._delegate.ref);\n }\n\n get ref(): Reference {\n return this.getRef();\n }\n}\n\nexport interface SnapshotCallback {\n (dataSnapshot: DataSnapshot, previousChildName?: string | null): unknown;\n}\n\n/**\n * A Query represents a filter to be applied to a firebase location. This object purely represents the\n * query expression (and exposes our public API to build the query). The actual query logic is in ViewBase.js.\n *\n * Since every Firebase reference is a query, Firebase inherits from this object.\n */\nexport class Query implements Compat<ExpQuery> {\n constructor(readonly database: Database, readonly _delegate: ExpQuery) {}\n\n on(\n eventType: string,\n callback: SnapshotCallback,\n cancelCallbackOrContext?: ((a: Error) => unknown) | object | null,\n context?: object | null\n ): SnapshotCallback {\n validateArgCount('Query.on', 2, 4, arguments.length);\n validateCallback('Query.on', 'callback', callback, false);\n\n const ret = Query.getCancelAndContextArgs_(\n 'Query.on',\n cancelCallbackOrContext,\n context\n );\n const valueCallback = (expSnapshot, previousChildName?) => {\n callback.call(\n ret.context,\n new DataSnapshot(this.database, expSnapshot),\n previousChildName\n );\n };\n valueCallback.userCallback = callback;\n valueCallback.context = ret.context;\n const cancelCallback = ret.cancel?.bind(ret.context);\n\n switch (eventType) {\n case 'value':\n onValue(this._delegate, valueCallback, cancelCallback);\n return callback;\n case 'child_added':\n onChildAdded(this._delegate, valueCallback, cancelCallback);\n return callback;\n case 'child_removed':\n onChildRemoved(this._delegate, valueCallback, cancelCallback);\n return callback;\n case 'child_changed':\n onChildChanged(this._delegate, valueCallback, cancelCallback);\n return callback;\n case 'child_moved':\n onChildMoved(this._delegate, valueCallback, cancelCallback);\n return callback;\n default:\n throw new Error(\n errorPrefix('Query.on', 'eventType') +\n 'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\n '\"child_changed\", or \"child_moved\".'\n );\n }\n }\n\n off(\n eventType?: string,\n callback?: SnapshotCallback,\n context?: object | null\n ): void {\n validateArgCount('Query.off', 0, 3, arguments.length);\n validateEventType('Query.off', eventType, true);\n validateCallback('Query.off', 'callback', callback, true);\n validateContextObject('Query.off', 'context', context, true);\n if (callback) {\n const valueCallback: _UserCallback = () => {};\n valueCallback.userCallback = callback;\n valueCallback.context = context;\n off(this._delegate, eventType as EventType, valueCallback);\n } else {\n off(this._delegate, eventType as EventType | undefined);\n }\n }\n\n /**\n * Get the server-value for this query, or return a cached value if not connected.\n */\n get(): Promise<DataSnapshot> {\n return get(this._delegate).then(expSnapshot => {\n return new DataSnapshot(this.database, expSnapshot);\n });\n }\n\n /**\n * Attaches a listener, waits for the first event, and then removes the listener\n */\n once(\n eventType: string,\n callback?: SnapshotCallback,\n failureCallbackOrContext?: ((a: Error) => void) | object | null,\n context?: object | null\n ): Promise<DataSnapshot> {\n validateArgCount('Query.once', 1, 4, arguments.length);\n validateCallback('Query.once', 'callback', callback, true);\n\n const ret = Query.getCancelAndContextArgs_(\n 'Query.once',\n failureCallbackOrContext,\n context\n );\n const deferred = new Deferred<DataSnapshot>();\n const valueCallback: _UserCallback = (expSnapshot, previousChildName?) => {\n const result = new DataSnapshot(this.database, expSnapshot);\n if (callback) {\n callback.call(ret.context, result, previousChildName);\n }\n deferred.resolve(result);\n };\n valueCallback.userCallback = callback;\n valueCallback.context = ret.context;\n const cancelCallback = (error: Error) => {\n if (ret.cancel) {\n ret.cancel.call(ret.context, error);\n }\n deferred.reject(error);\n };\n\n switch (eventType) {\n case 'value':\n onValue(this._delegate, valueCallback, cancelCallback, {\n onlyOnce: true\n });\n break;\n case 'child_added':\n onChildAdded(this._delegate, valueCallback, cancelCallback, {\n onlyOnce: true\n });\n break;\n case 'child_removed':\n onChildRemoved(this._delegate, valueCallback, cancelCallback, {\n onlyOnce: true\n });\n break;\n case 'child_changed':\n onChildChanged(this._delegate, valueCallback, cancelCallback, {\n onlyOnce: true\n });\n break;\n case 'child_moved':\n onChildMoved(this._delegate, valueCallback, cancelCallback, {\n onlyOnce: true\n });\n break;\n default:\n throw new Error(\n errorPrefix('Query.once', 'eventType') +\n 'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\n '\"child_changed\", or \"child_moved\".'\n );\n }\n\n return deferred.promise;\n }\n\n /**\n * Set a limit and anchor it to the start of the window.\n */\n limitToFirst(limit: number): Query {\n validateArgCount('Query.limitToFirst', 1, 1, arguments.length);\n return new Query(this.database, query(this._delegate, limitToFirst(limit)));\n }\n\n /**\n * Set a limit and anchor it to the end of the window.\n */\n limitToLast(limit: number): Query {\n validateArgCount('Query.limitToLast', 1, 1, arguments.length);\n return new Query(this.database, query(this._delegate, limitToLast(limit)));\n }\n\n /**\n * Given a child path, return a new query ordered by the specified grandchild path.\n */\n orderByChild(path: string): Query {\n validateArgCount('Query.orderByChild', 1, 1, arguments.length);\n return new Query(this.database, query(this._delegate, orderByChild(path)));\n }\n\n /**\n * Return a new query ordered by the KeyIndex\n */\n orderByKey(): Query {\n validateArgCount('Query.orderByKey', 0, 0, arguments.length);\n return new Query(this.database, query(this._delegate, orderByKey()));\n }\n\n /**\n * Return a new query ordered by the PriorityIndex\n */\n orderByPriority(): Query {\n validateArgCount('Query.orderByPriority', 0, 0, arguments.length);\n return new Query(this.database, query(this._delegate, orderByPriority()));\n }\n\n /**\n * Return a new query ordered by the ValueIndex\n */\n orderByValue(): Query {\n validateArgCount('Query.orderByValue', 0, 0, arguments.length);\n return new Query(this.database, query(this._delegate, orderByValue()));\n }\n\n startAt(\n value: number | string | boolean | null = null,\n name?: string | null\n ): Query {\n validateArgCount('Query.startAt', 0, 2, arguments.length);\n return new Query(\n this.database,\n query(this._delegate, startAt(value, name))\n );\n }\n\n startAfter(\n value: number | string | boolean | null = null,\n name?: string | null\n ): Query {\n validateArgCount('Query.startAfter', 0, 2, arguments.length);\n return new Query(\n this.database,\n query(this._delegate, startAfter(value, name))\n );\n }\n\n endAt(\n value: number | string | boolean | null = null,\n name?: string | null\n ): Query {\n validateArgCount('Query.endAt', 0, 2, arguments.length);\n return new Query(this.database, query(this._delegate, endAt(value, name)));\n }\n\n endBefore(\n value: number | string | boolean | null = null,\n name?: string | null\n ): Query {\n validateArgCount('Query.endBefore', 0, 2, arguments.length);\n return new Query(\n this.database,\n query(this._delegate, endBefore(value, name))\n );\n }\n\n /**\n * Load the selection of children with exactly the specified value, and, optionally,\n * the specified name.\n */\n equalTo(value: number | string | boolean | null, name?: string) {\n validateArgCount('Query.equalTo', 1, 2, arguments.length);\n return new Query(\n this.database,\n query(this._delegate, equalTo(value, name))\n );\n }\n\n /**\n * @returns URL for this location.\n */\n toString(): string {\n validateArgCount('Query.toString', 0, 0, arguments.length);\n return this._delegate.toString();\n }\n\n // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\n // for end-users.\n toJSON() {\n // An optional spacer argument is unnecessary for a string.\n validateArgCount('Query.toJSON', 0, 1, arguments.length);\n return this._delegate.toJSON();\n }\n\n /**\n * Return true if this query and the provided query are equivalent; otherwise, return false.\n */\n isEqual(other: Query): boolean {\n validateArgCount('Query.isEqual', 1, 1, arguments.length);\n if (!(other instanceof Query)) {\n const error =\n 'Query.isEqual failed: First argument must be an instance of firebase.database.Query.';\n throw new Error(error);\n }\n return this._delegate.isEqual(other._delegate);\n }\n\n /**\n * Helper used by .on and .once to extract the context and or cancel arguments.\n * @param fnName - The function name (on or once)\n *\n */\n private static getCancelAndContextArgs_(\n fnName: string,\n cancelOrContext?: ((a: Error) => void) | object | null,\n context?: object | null\n ): { cancel: ((a: Error) => void) | undefined; context: object | undefined } {\n const ret: {\n cancel: ((a: Error) => void) | null;\n context: object | null;\n } = { cancel: undefined, context: undefined };\n if (cancelOrContext && context) {\n ret.cancel = cancelOrContext as (a: Error) => void;\n validateCallback(fnName, 'cancel', ret.cancel, true);\n\n ret.context = context;\n validateContextObject(fnName, 'context', ret.context, true);\n } else if (cancelOrContext) {\n // we have either a cancel callback or a context.\n if (typeof cancelOrContext === 'object' && cancelOrContext !== null) {\n // it's a context!\n ret.context = cancelOrContext;\n } else if (typeof cancelOrContext === 'function') {\n ret.cancel = cancelOrContext as (a: Error) => void;\n } else {\n throw new Error(\n errorPrefix(fnName, 'cancelOrContext') +\n ' must either be a cancel callback or a context object.'\n );\n }\n }\n return ret;\n }\n\n get ref(): Reference {\n return new Reference(\n this.database,\n new _ReferenceImpl(this._delegate._repo, this._delegate._path)\n );\n }\n}\n\nexport class Reference extends Query implements Compat<ModularReference> {\n then: Promise<Reference>['then'];\n catch: Promise<Reference>['catch'];\n\n /**\n * Call options:\n * new Reference(Repo, Path) or\n * new Reference(url: string, string|RepoManager)\n *\n * Externally - this is the firebase.database.Reference type.\n */\n constructor(\n readonly database: Database,\n readonly _delegate: ModularReference\n ) {\n super(\n database,\n new _QueryImpl(\n _delegate._repo,\n _delegate._path,\n new _QueryParams(),\n false\n )\n );\n }\n\n /** @returns {?string} */\n getKey(): string | null {\n validateArgCount('Reference.key', 0, 0, arguments.length);\n return this._delegate.key;\n }\n\n child(pathString: string): Reference {\n validateArgCount('Reference.child', 1, 1, arguments.length);\n if (typeof pathString === 'number') {\n pathString = String(pathString);\n }\n return new Reference(this.database, child(this._delegate, pathString));\n }\n\n /** @returns {?Reference} */\n getParent(): Reference | null {\n validateArgCount('Reference.parent', 0, 0, arguments.length);\n const parent = this._delegate.parent;\n return parent ? new Reference(this.database, parent) : null;\n }\n\n /** @returns {!Reference} */\n getRoot(): Reference {\n validateArgCount('Reference.root', 0, 0, arguments.length);\n return new Reference(this.database, this._delegate.root);\n }\n\n set(\n newVal: unknown,\n onComplete?: (error: Error | null) => void\n ): Promise<void> {\n validateArgCount('Reference.set', 1, 2, arguments.length);\n validateCallback('Reference.set', 'onComplete', onComplete, true);\n const result = set(this._delegate, newVal);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n update(\n values: object,\n onComplete?: (a: Error | null) => void\n ): Promise<void> {\n validateArgCount('Reference.update', 1, 2, arguments.length);\n\n if (Array.isArray(values)) {\n const newObjectToMerge: { [k: string]: unknown } = {};\n for (let i = 0; i < values.length; ++i) {\n newObjectToMerge['' + i] = values[i];\n }\n values = newObjectToMerge;\n warn(\n 'Passing an Array to Firebase.update() is deprecated. ' +\n 'Use set() if you want to overwrite the existing data, or ' +\n 'an Object with integer keys if you really do want to ' +\n 'only update some of the children.'\n );\n }\n _validateWritablePath('Reference.update', this._delegate._path);\n validateCallback('Reference.update', 'onComplete', onComplete, true);\n\n const result = update(this._delegate, values);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n setWithPriority(\n newVal: unknown,\n newPriority: string | number | null,\n onComplete?: (a: Error | null) => void\n ): Promise<void> {\n validateArgCount('Reference.setWithPriority', 2, 3, arguments.length);\n validateCallback(\n 'Reference.setWithPriority',\n 'onComplete',\n onComplete,\n true\n );\n\n const result = setWithPriority(this._delegate, newVal, newPriority);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n remove(onComplete?: (a: Error | null) => void): Promise<void> {\n validateArgCount('Reference.remove', 0, 1, arguments.length);\n validateCallback('Reference.remove', 'onComplete', onComplete, true);\n\n const result = remove(this._delegate);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n transaction(\n transactionUpdate: (currentData: unknown) => unknown,\n onComplete?: (\n error: Error | null,\n committed: boolean,\n dataSnapshot: DataSnapshot | null\n ) => void,\n applyLocally?: boolean\n ): Promise<TransactionResult> {\n validateArgCount('Reference.transaction', 1, 3, arguments.length);\n validateCallback(\n 'Reference.transaction',\n 'transactionUpdate',\n transactionUpdate,\n false\n );\n validateCallback('Reference.transaction', 'onComplete', onComplete, true);\n validateBoolean(\n 'Reference.transaction',\n 'applyLocally',\n applyLocally,\n true\n );\n\n const result = runTransaction(this._delegate, transactionUpdate, {\n applyLocally\n }).then(\n transactionResult =>\n new TransactionResult(\n transactionResult.committed,\n new DataSnapshot(this.database, transactionResult.snapshot)\n )\n );\n if (onComplete) {\n result.then(\n transactionResult =>\n onComplete(\n null,\n transactionResult.committed,\n transactionResult.snapshot\n ),\n error => onComplete(error, false, null)\n );\n }\n return result;\n }\n\n setPriority(\n priority: string | number | null,\n onComplete?: (a: Error | null) => void\n ): Promise<void> {\n validateArgCount('Reference.setPriority', 1, 2, arguments.length);\n validateCallback('Reference.setPriority', 'onComplete', onComplete, true);\n\n const result = setPriority(this._delegate, priority);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n push(value?: unknown, onComplete?: (a: Error | null) => void): Reference {\n validateArgCount('Reference.push', 0, 2, arguments.length);\n validateCallback('Reference.push', 'onComplete', onComplete, true);\n\n const expPromise = push(this._delegate, value);\n const promise = expPromise.then(\n expRef => new Reference(this.database, expRef)\n );\n\n if (onComplete) {\n promise.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n\n const result = new Reference(this.database, expPromise);\n result.then = promise.then.bind(promise);\n result.catch = promise.catch.bind(promise, undefined);\n return result;\n }\n\n onDisconnect(): OnDisconnect {\n _validateWritablePath('Reference.onDisconnect', this._delegate._path);\n return new OnDisconnect(\n new ModularOnDisconnect(this._delegate._repo, this._delegate._path)\n );\n }\n\n get key(): string | null {\n return this.getKey();\n }\n\n get parent(): Reference | null {\n return this.getParent();\n }\n\n get root(): Reference {\n return this.getRoot();\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line import/no-extraneous-dependencies\n\nimport { FirebaseApp } from '@firebase/app-types';\nimport { FirebaseService } from '@firebase/app-types/private';\nimport {\n goOnline,\n connectDatabaseEmulator,\n goOffline,\n ref,\n refFromURL,\n increment,\n serverTimestamp,\n Database as ModularDatabase\n} from '@firebase/database';\nimport {\n validateArgCount,\n Compat,\n EmulatorMockTokenOptions\n} from '@firebase/util';\n\nimport { Reference } from './Reference';\n\n/**\n * Class representing a firebase database.\n */\nexport class Database implements FirebaseService, Compat<ModularDatabase> {\n static readonly ServerValue = {\n TIMESTAMP: serverTimestamp(),\n increment: (delta: number) => increment(delta)\n };\n\n /**\n * The constructor should not be called by users of our public API.\n */\n constructor(readonly _delegate: ModularDatabase, readonly app: FirebaseApp) {}\n\n INTERNAL = {\n delete: () => this._delegate._delete()\n };\n\n /**\n * Modify this instance to communicate with the Realtime Database emulator.\n *\n * <p>Note: This method must be called before performing any other operation.\n *\n * @param host - the emulator host (ex: localhost)\n * @param port - the emulator port (ex: 8080)\n * @param options.mockUserToken - the mock auth token to use for unit testing Security Rules\n */\n useEmulator(\n host: string,\n port: number,\n options: {\n mockUserToken?: EmulatorMockTokenOptions;\n } = {}\n ): void {\n connectDatabaseEmulator(this._delegate, host, port, options);\n }\n\n /**\n * Returns a reference to the root or to the path specified in the provided\n * argument.\n *\n * @param path - The relative string path or an existing Reference to a database\n * location.\n * @throws If a Reference is provided, throws if it does not belong to the\n * same project.\n * @returns Firebase reference.\n */\n ref(path?: string): Reference;\n ref(path?: Reference): Reference;\n ref(path?: string | Reference): Reference {\n validateArgCount('database.ref', 0, 1, arguments.length);\n if (path instanceof Reference) {\n const childRef = refFromURL(this._delegate, path.toString());\n return new Reference(this, childRef);\n } else {\n const childRef = ref(this._delegate, path);\n return new Reference(this, childRef);\n }\n }\n\n /**\n * Returns a reference to the root or the path specified in url.\n * We throw a exception if the url is not in the same domain as the\n * current repo.\n * @returns Firebase reference.\n */\n refFromURL(url: string): Reference {\n const apiName = 'database.refFromURL';\n validateArgCount(apiName, 1, 1, arguments.length);\n const childRef = refFromURL(this._delegate, url);\n return new Reference(this, childRef);\n }\n\n // Make individual repo go offline.\n goOffline(): void {\n validateArgCount('database.goOffline', 0, 0, arguments.length);\n return goOffline(this._delegate);\n }\n\n goOnline(): void {\n validateArgCount('database.goOnline', 0, 0, arguments.length);\n return goOnline(this._delegate);\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseApp } from '@firebase/app-types';\nimport {\n FirebaseAuthInternal,\n FirebaseAuthInternalName\n} from '@firebase/auth-interop-types';\nimport {\n Component,\n ComponentContainer,\n ComponentType,\n Provider\n} from '@firebase/component';\nimport {\n _repoManagerDatabaseFromApp,\n _setSDKVersion\n} from '@firebase/database';\nimport * as types from '@firebase/database-types';\n\nimport { Database } from './Database';\n\n/**\n * Used by console to create a database based on the app,\n * passed database URL and a custom auth implementation.\n *\n * @param app - A valid FirebaseApp-like object\n * @param url - A valid Firebase databaseURL\n * @param version - custom version e.g. firebase-admin version\n * @param customAuthImpl - custom auth implementation\n */\nexport function initStandalone<T>({\n app,\n url,\n version,\n customAuthImpl,\n namespace,\n nodeAdmin = false\n}: {\n app: FirebaseApp;\n url: string;\n version: string;\n customAuthImpl: FirebaseAuthInternal;\n namespace: T;\n nodeAdmin?: boolean;\n}): {\n instance: types.Database;\n namespace: T;\n} {\n _setSDKVersion(version);\n\n /**\n * ComponentContainer('database-standalone') is just a placeholder that doesn't perform\n * any actual function.\n */\n const authProvider = new Provider<FirebaseAuthInternalName>(\n 'auth-internal',\n new ComponentContainer('database-standalone')\n );\n authProvider.setComponent(\n new Component('auth-internal', () => customAuthImpl, ComponentType.PRIVATE)\n );\n\n return {\n instance: new Database(\n _repoManagerDatabaseFromApp(\n app,\n authProvider,\n /* appCheckProvider= */ undefined,\n url,\n nodeAdmin\n ),\n app\n ) as types.Database,\n namespace\n };\n}\n","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport firebase from '@firebase/app-compat';\nimport { FirebaseNamespace } from '@firebase/app-types';\nimport { _FirebaseNamespace } from '@firebase/app-types/private';\nimport { Component, ComponentType } from '@firebase/component';\nimport { enableLogging } from '@firebase/database';\nimport * as types from '@firebase/database-types';\n\nimport { name, version } from '../package.json';\nimport { Database } from '../src/api/Database';\nimport * as INTERNAL from '../src/api/internal';\nimport { DataSnapshot, Query, Reference } from '../src/api/Reference';\n\nconst ServerValue = Database.ServerValue;\n\nfunction registerDatabase(instance: FirebaseNamespace) {\n // Register the Database Service with the 'firebase' namespace.\n (instance as _FirebaseNamespace).INTERNAL.registerComponent(\n new Component(\n 'database-compat',\n (container, { instanceIdentifier: url }) => {\n /* Dependencies */\n // getImmediate for FirebaseApp will always succeed\n const app = container.getProvider('app-compat').getImmediate();\n const databaseExp = container\n .getProvider('database')\n .getImmediate({ identifier: url });\n return new Database(databaseExp, app);\n },\n ComponentType.PUBLIC\n )\n .setServiceProps(\n // firebase.database namespace properties\n {\n Reference,\n Query,\n Database,\n DataSnapshot,\n enableLogging,\n INTERNAL,\n ServerValue\n }\n )\n .setMultipleInstances(true)\n );\n\n instance.registerVersion(name, version, 'node');\n}\n\nregisterDatabase(firebase);\n\ndeclare module '@firebase/app-compat' {\n interface FirebaseNamespace {\n database?: {\n (app?: FirebaseApp): types.FirebaseDatabase;\n enableLogging: typeof types.enableLogging;\n ServerValue: types.ServerValue;\n Database: typeof types.FirebaseDatabase;\n };\n }\n interface FirebaseApp {\n database?(): types.FirebaseDatabase;\n }\n}\n"],"names":["Logger","errorPrefixFxn","validateArgCount","validateCallback","_validatePathString","onValue","onChildAdded","onChildRemoved","onChildChanged","onChildMoved","errorPrefix","validateContextObject","off","get","Deferred","query","limitToFirst","limitToLast","orderByChild","orderByKey","orderByPriority","orderByValue","startAt","startAfter","endAt","endBefore","equalTo","_ReferenceImpl","__extends","database","_QueryImpl","_QueryParams","child","set","_validateWritablePath","update","setWithPriority","remove","runTransaction","setPriority","push","ModularOnDisconnect","connectDatabaseEmulator","refFromURL","ref","goOffline","goOnline","serverTimestamp","increment","_setSDKVersion","Provider","ComponentContainer","Component","_repoManagerDatabaseFromApp","firebase"],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;AAmBA,IAAM,SAAS,GAAG,IAAIA,aAAM,CAAC,2BAA2B,CAAC,CAAC;AAEnD,IAAM,IAAI,GAAG,UAAU,GAAW;IACvC,IAAM,OAAO,GAAG,oBAAoB,GAAG,GAAG,CAAC;IAC3C,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC;;ACxBD;;;;;;;;;;;;;;;;AAmBO,IAAM,eAAe,GAAG,UAC7B,MAAc,EACd,YAAoB,EACpB,IAAa,EACb,QAAiB;IAEjB,IAAI,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE;QAClC,OAAO;KACR;IACD,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE;QAC7B,MAAM,IAAI,KAAK,CACbC,gBAAc,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,oBAAoB,CAC5D,CAAC;KACH;AACH,CAAC,CAAC;AAEK,IAAM,iBAAiB,GAAG,UAC/B,MAAc,EACd,SAAiB,EACjB,QAAiB;IAEjB,IAAI,QAAQ,IAAI,SAAS,KAAK,SAAS,EAAE;QACvC,OAAO;KACR;IAED,QAAQ,SAAS;QACf,KAAK,OAAO,CAAC;QACb,KAAK,aAAa,CAAC;QACnB,KAAK,eAAe,CAAC;QACrB,KAAK,eAAe,CAAC;QACrB,KAAK,aAAa;YAChB,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CACbA,gBAAc,CAAC,MAAM,EAAE,WAAW,CAAC;gBACjC,wEAAwE;gBACxE,oCAAoC,CACvC,CAAC;KACL;AACH,CAAC;;AC1DD;;;;;;;;;;;;;;;;AAqBA;IACE,sBAAqB,SAA8B;QAA9B,cAAS,GAAT,SAAS,CAAqB;KAAI;IAEvD,6BAAM,GAAN,UAAO,UAAsC;QAC3CC,qBAAgB,CAAC,qBAAqB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAChEC,qBAAgB,CAAC,qBAAqB,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACxE,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACvC,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,IAAI,CACT,cAAM,OAAA,UAAU,CAAC,IAAI,CAAC,GAAA,EACtB,UAAA,KAAK,IAAI,OAAA,UAAU,CAAC,KAAK,CAAC,GAAA,CAC3B,CAAC;SACH;QACD,OAAO,MAAM,CAAC;KACf;IAED,6BAAM,GAAN,UAAO,UAAsC;QAC3CD,qBAAgB,CAAC,qBAAqB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAChEC,qBAAgB,CAAC,qBAAqB,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACxE,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACvC,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,IAAI,CACT,cAAM,OAAA,UAAU,CAAC,IAAI,CAAC,GAAA,EACtB,UAAA,KAAK,IAAI,OAAA,UAAU,CAAC,KAAK,CAAC,GAAA,CAC3B,CAAC;SACH;QACD,OAAO,MAAM,CAAC;KACf;IAED,0BAAG,GAAH,UAAI,KAAc,EAAE,UAAsC;QACxDD,qBAAgB,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC7DC,qBAAgB,CAAC,kBAAkB,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACrE,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,IAAI,CACT,cAAM,OAAA,UAAU,CAAC,IAAI,CAAC,GAAA,EACtB,UAAA,KAAK,IAAI,OAAA,UAAU,CAAC,KAAK,CAAC,GAAA,CAC3B,CAAC;SACH;QACD,OAAO,MAAM,CAAC;KACf;IAED,sCAAe,GAAf,UACE,KAAc,EACd,QAAgC,EAChC,UAAsC;QAEtCD,qBAAgB,CAAC,8BAA8B,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACzEC,qBAAgB,CACd,8BAA8B,EAC9B,YAAY,EACZ,UAAU,EACV,IAAI,CACL,CAAC;QACF,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/D,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,IAAI,CACT,cAAM,OAAA,UAAU,CAAC,IAAI,CAAC,GAAA,EACtB,UAAA,KAAK,IAAI,OAAA,UAAU,CAAC,KAAK,CAAC,GAAA,CAC3B,CAAC;SACH;QACD,OAAO,MAAM,CAAC;KACf;IAED,6BAAM,GAAN,UACE,aAAsC,EACtC,UAAsC;QAEtCD,qBAAgB,CAAC,qBAAqB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;YAChC,IAAM,gBAAgB,GAA6B,EAAE,CAAC;YACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBAC7C,gBAAgB,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;aAC7C;YACD,aAAa,GAAG,gBAAgB,CAAC;YACjC,IAAI,CACF,sHAAsH;gBACpH,0GAA0G,CAC7G,CAAC;SACH;QACDC,qBAAgB,CAAC,qBAAqB,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACxE,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACpD,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,IAAI,CACT,cAAM,OAAA,UAAU,CAAC,IAAI,CAAC,GAAA,EACtB,UAAA,KAAK,IAAI,OAAA,UAAU,CAAC,KAAK,CAAC,GAAA,CAC3B,CAAC;SACH;QACD,OAAO,MAAM,CAAC;KACf;IACH,mBAAC;AAAD,CAAC;;AC/GD;;;;;;;;;;;;;;;;AAqBA;;;;IAIE,2BAAmB,SAAkB,EAAS,QAAsB;QAAjD,cAAS,GAAT,SAAS,CAAS;QAAS,aAAQ,GAAR,QAAQ,CAAc;KAAI;;;IAIxE,kCAAM,GAAN;QACED,qBAAgB,CAAC,0BAA0B,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACrE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;KACxE;IACH,wBAAC;AAAD,CAAC;;ACjCD;;;;;;;;;;;;;;;;AAyEA;;;;AAIA;IACE,sBACW,SAAmB,EACnB,SAA8B;QAD9B,cAAS,GAAT,SAAS,CAAU;QACnB,cAAS,GAAT,SAAS,CAAqB;KACrC;;;;;;;IAQJ,0BAAG,GAAH;QACEA,qBAAgB,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;KAC7B;;;;;;IAOD,gCAAS,GAAT;QACEA,qBAAgB,CAAC,wBAAwB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;KACnC;;;IAID,6BAAM,GAAN;;QAEEA,qBAAgB,CAAC,qBAAqB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;KAChC;;;;;;IAOD,6BAAM,GAAN;QACEA,qBAAgB,CAAC,qBAAqB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;KAChC;;;;;;;IAQD,4BAAK,GAAL,UAAM,IAAY;QAChBA,qBAAgB,CAAC,oBAAoB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;;QAE/D,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACpBE,4BAAmB,CAAC,oBAAoB,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/D,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;KACrE;;;;;;;IAQD,+BAAQ,GAAR,UAAS,IAAY;QACnBF,qBAAgB,CAAC,uBAAuB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAClEE,4BAAmB,CAAC,uBAAuB,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KACtC;;;;;;IAOD,kCAAW,GAAX;QACEF,qBAAgB,CAAC,0BAA0B,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;KAChC;;;;;;;;;IAUD,8BAAO,GAAP,UAAQ,MAAkD;QAA1D,iBAMC;QALCA,qBAAgB,CAAC,sBAAsB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACjEC,qBAAgB,CAAC,sBAAsB,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAA,eAAe;YAC3C,OAAA,MAAM,CAAC,IAAI,YAAY,CAAC,KAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;SAAA,CAC1D,CAAC;KACH;;;;;IAMD,kCAAW,GAAX;QACED,qBAAgB,CAAC,0BAA0B,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;KACrC;IAED,sBAAI,6BAAG;aAAP;YACE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;SAC3B;;;OAAA;;;;;IAMD,kCAAW,GAAX;QACEA,qBAAgB,CAAC,0BAA0B,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC5B;;;;;IAMD,6BAAM,GAAN;QACEA,qBAAgB,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC7D,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KAC1D;IAED,sBAAI,6BAAG;aAAP;YACE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;SACtB;;;OAAA;IACH,mBAAC;AAAD,CAAC,IAAA;AAMD;;;;;;AAMA;IACE,eAAqB,QAAkB,EAAW,SAAmB;QAAhD,aAAQ,GAAR,QAAQ,CAAU;QAAW,cAAS,GAAT,SAAS,CAAU;KAAI;IAEzE,kBAAE,GAAF,UACE,SAAiB,EACjB,QAA0B,EAC1B,uBAAiE,EACjE,OAAuB;QAJzB,iBAgDC;;QA1CCA,qBAAgB,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACrDC,qBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE1D,IAAM,GAAG,GAAG,KAAK,CAAC,wBAAwB,CACxC,UAAU,EACV,uBAAuB,EACvB,OAAO,CACR,CAAC;QACF,IAAM,aAAa,GAAG,UAAC,WAAW,EAAE,iBAAkB;YACpD,QAAQ,CAAC,IAAI,CACX,GAAG,CAAC,OAAO,EACX,IAAI,YAAY,CAAC,KAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAC5C,iBAAiB,CAClB,CAAC;SACH,CAAC;QACF,aAAa,CAAC,YAAY,GAAG,QAAQ,CAAC;QACtC,aAAa,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QACpC,IAAM,cAAc,GAAG,MAAA,GAAG,CAAC,MAAM,0CAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAErD,QAAQ,SAAS;YACf,KAAK,OAAO;gBACVE,gBAAO,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;gBACvD,OAAO,QAAQ,CAAC;YAClB,KAAK,aAAa;gBAChBC,qBAAY,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;gBAC5D,OAAO,QAAQ,CAAC;YAClB,KAAK,eAAe;gBAClBC,uBAAc,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;gBAC9D,OAAO,QAAQ,CAAC;YAClB,KAAK,eAAe;gBAClBC,uBAAc,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;gBAC9D,OAAO,QAAQ,CAAC;YAClB,KAAK,aAAa;gBAChBC,qBAAY,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;gBAC5D,OAAO,QAAQ,CAAC;YAClB;gBACE,MAAM,IAAI,KAAK,CACbC,gBAAW,CAAC,UAAU,EAAE,WAAW,CAAC;oBAClC,wEAAwE;oBACxE,oCAAoC,CACvC,CAAC;SACL;KACF;IAED,mBAAG,GAAH,UACE,SAAkB,EAClB,QAA2B,EAC3B,OAAuB;QAEvBR,qBAAgB,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACtD,iBAAiB,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAChDC,qBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1DQ,0BAAqB,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC7D,IAAI,QAAQ,EAAE;YACZ,IAAM,aAAa,GAAkB,eAAQ,CAAC;YAC9C,aAAa,CAAC,YAAY,GAAG,QAAQ,CAAC;YACtC,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC;YAChCC,YAAG,CAAC,IAAI,CAAC,SAAS,EAAE,SAAsB,EAAE,aAAa,CAAC,CAAC;SAC5D;aAAM;YACLA,YAAG,CAAC,IAAI,CAAC,SAAS,EAAE,SAAkC,CAAC,CAAC;SACzD;KACF;;;;IAKD,mBAAG,GAAH;QAAA,iBAIC;QAHC,OAAOC,YAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAA,WAAW;YACzC,OAAO,IAAI,YAAY,CAAC,KAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;SACrD,CAAC,CAAC;KACJ;;;;IAKD,oBAAI,GAAJ,UACE,SAAiB,EACjB,QAA2B,EAC3B,wBAA+D,EAC/D,OAAuB;QAJzB,iBAkEC;QA5DCX,qBAAgB,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACvDC,qBAAgB,CAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAE3D,IAAM,GAAG,GAAG,KAAK,CAAC,wBAAwB,CACxC,YAAY,EACZ,wBAAwB,EACxB,OAAO,CACR,CAAC;QACF,IAAM,QAAQ,GAAG,IAAIW,aAAQ,EAAgB,CAAC;QAC9C,IAAM,aAAa,GAAkB,UAAC,WAAW,EAAE,iBAAkB;YACnE,IAAM,MAAM,GAAG,IAAI,YAAY,CAAC,KAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC5D,IAAI,QAAQ,EAAE;gBACZ,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;aACvD;YACD,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SAC1B,CAAC;QACF,aAAa,CAAC,YAAY,GAAG,QAAQ,CAAC;QACtC,aAAa,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QACpC,IAAM,cAAc,GAAG,UAAC,KAAY;YAClC,IAAI,GAAG,CAAC,MAAM,EAAE;gBACd,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aACrC;YACD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACxB,CAAC;QAEF,QAAQ,SAAS;YACf,KAAK,OAAO;gBACVT,gBAAO,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE;oBACrD,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,aAAa;gBAChBC,qBAAY,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE;oBAC1D,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,eAAe;gBAClBC,uBAAc,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE;oBAC5D,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,eAAe;gBAClBC,uBAAc,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE;oBAC5D,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,aAAa;gBAChBC,qBAAY,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE;oBAC1D,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBACH,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CACbC,gBAAW,CAAC,YAAY,EAAE,WAAW,CAAC;oBACpC,wEAAwE;oBACxE,oCAAoC,CACvC,CAAC;SACL;QAED,OAAO,QAAQ,CAAC,OAAO,CAAC;KACzB;;;;IAKD,4BAAY,GAAZ,UAAa,KAAa;QACxBR,qBAAgB,CAAC,oBAAoB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAEa,cAAK,CAAC,IAAI,CAAC,SAAS,EAAEC,qBAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC7E;;;;IAKD,2BAAW,GAAX,UAAY,KAAa;QACvBd,qBAAgB,CAAC,mBAAmB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAEa,cAAK,CAAC,IAAI,CAAC,SAAS,EAAEE,oBAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC5E;;;;IAKD,4BAAY,GAAZ,UAAa,IAAY;QACvBf,qBAAgB,CAAC,oBAAoB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAEa,cAAK,CAAC,IAAI,CAAC,SAAS,EAAEG,qBAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC5E;;;;IAKD,0BAAU,GAAV;QACEhB,qBAAgB,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC7D,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAEa,cAAK,CAAC,IAAI,CAAC,SAAS,EAAEI,mBAAU,EAAE,CAAC,CAAC,CAAC;KACtE;;;;IAKD,+BAAe,GAAf;QACEjB,qBAAgB,CAAC,uBAAuB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAClE,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAEa,cAAK,CAAC,IAAI,CAAC,SAAS,EAAEK,wBAAe,EAAE,CAAC,CAAC,CAAC;KAC3E;;;;IAKD,4BAAY,GAAZ;QACElB,qBAAgB,CAAC,oBAAoB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAEa,cAAK,CAAC,IAAI,CAAC,SAAS,EAAEM,qBAAY,EAAE,CAAC,CAAC,CAAC;KACxE;IAED,uBAAO,GAAP,UACE,KAA8C,EAC9C,IAAoB;QADpB,sBAAA,EAAA,YAA8C;QAG9CnB,qBAAgB,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO,IAAI,KAAK,CACd,IAAI,CAAC,QAAQ,EACba,cAAK,CAAC,IAAI,CAAC,SAAS,EAAEO,gBAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAC5C,CAAC;KACH;IAED,0BAAU,GAAV,UACE,KAA8C,EAC9C,IAAoB;QADpB,sBAAA,EAAA,YAA8C;QAG9CpB,qBAAgB,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC7D,OAAO,IAAI,KAAK,CACd,IAAI,CAAC,QAAQ,EACba,cAAK,CAAC,IAAI,CAAC,SAAS,EAAEQ,mBAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAC/C,CAAC;KACH;IAED,qBAAK,GAAL,UACE,KAA8C,EAC9C,IAAoB;QADpB,sBAAA,EAAA,YAA8C;QAG9CrB,qBAAgB,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACxD,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAEa,cAAK,CAAC,IAAI,CAAC,SAAS,EAAES,cAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;KAC5E;IAED,yBAAS,GAAT,UACE,KAA8C,EAC9C,IAAoB;QADpB,sBAAA,EAAA,YAA8C;QAG9CtB,qBAAgB,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5D,OAAO,IAAI,KAAK,CACd,IAAI,CAAC,QAAQ,EACba,cAAK,CAAC,IAAI,CAAC,SAAS,EAAEU,kBAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAC9C,CAAC;KACH;;;;;IAMD,uBAAO,GAAP,UAAQ,KAAuC,EAAE,IAAa;QAC5DvB,qBAAgB,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO,IAAI,KAAK,CACd,IAAI,CAAC,QAAQ,EACba,cAAK,CAAC,IAAI,CAAC,SAAS,EAAEW,gBAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAC5C,CAAC;KACH;;;;IAKD,wBAAQ,GAAR;QACExB,qBAAgB,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;KAClC;;;IAID,sBAAM,GAAN;;QAEEA,qBAAgB,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;KAChC;;;;IAKD,uBAAO,GAAP,UAAQ,KAAY;QAClBA,qBAAgB,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,EAAE;YAC7B,IAAM,KAAK,GACT,sFAAsF,CAAC;YACzF,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SACxB;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;KAChD;;;;;;IAOc,8BAAwB,GAAvC,UACE,MAAc,EACd,eAAsD,EACtD,OAAuB;QAEvB,IAAM,GAAG,GAGL,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAC9C,IAAI,eAAe,IAAI,OAAO,EAAE;YAC9B,GAAG,CAAC,MAAM,GAAG,eAAqC,CAAC;YACnDC,qBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAErD,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;YACtBQ,0BAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SAC7D;aAAM,IAAI,eAAe,EAAE;;YAE1B,IAAI,OAAO,eAAe,KAAK,QAAQ,IAAI,eAAe,KAAK,IAAI,EAAE;;gBAEnE,GAAG,CAAC,OAAO,GAAG,eAAe,CAAC;aAC/B;iBAAM,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE;gBAChD,GAAG,CAAC,MAAM,GAAG,eAAqC,CAAC;aACpD;iBAAM;gBACL,MAAM,IAAI,KAAK,CACbD,gBAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC;oBACpC,wDAAwD,CAC3D,CAAC;aACH;SACF;QACD,OAAO,GAAG,CAAC;KACZ;IAED,sBAAI,sBAAG;aAAP;YACE,OAAO,IAAI,SAAS,CAClB,IAAI,CAAC,QAAQ,EACb,IAAIiB,uBAAc,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAC/D,CAAC;SACH;;;OAAA;IACH,YAAC;AAAD,CAAC,IAAA;AAED;IAA+BC,mCAAK;;;;;;;;IAWlC,mBACWC,UAAkB,EAClB,SAA2B;QAFtC,YAIE,kBACEA,UAAQ,EACR,IAAIC,mBAAU,CACZ,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,KAAK,EACf,IAAIC,qBAAY,EAAE,EAClB,KAAK,CACN,CACF,SACF;QAZU,cAAQ,GAARF,UAAQ,CAAU;QAClB,eAAS,GAAT,SAAS,CAAkB;;KAWrC;;IAGD,0BAAM,GAAN;QACE3B,qBAAgB,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;KAC3B;IAED,yBAAK,GAAL,UAAM,UAAkB;QACtBA,qBAAgB,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;SACjC;QACD,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE8B,cAAK,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;KACxE;;IAGD,6BAAS,GAAT;QACE9B,qBAAgB,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACrC,OAAO,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;KAC7D;;IAGD,2BAAO,GAAP;QACEA,qBAAgB,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3D,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KAC1D;IAED,uBAAG,GAAH,UACE,MAAe,EACf,UAA0C;QAE1CA,qBAAgB,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1DC,qBAAgB,CAAC,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAClE,IAAM,MAAM,GAAG8B,YAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC3C,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,IAAI,CACT,cAAM,OAAA,UAAU,CAAC,IAAI,CAAC,GAAA,EACtB,UAAA,KAAK,IAAI,OAAA,UAAU,CAAC,KAAK,CAAC,GAAA,CAC3B,CAAC;SACH;QACD,OAAO,MAAM,CAAC;KACf;IAED,0BAAM,GAAN,UACE,MAAc,EACd,UAAsC;QAEtC/B,qBAAgB,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAE7D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,IAAM,gBAAgB,GAA6B,EAAE,CAAC;YACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBACtC,gBAAgB,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;aACtC;YACD,MAAM,GAAG,gBAAgB,CAAC;YAC1B,IAAI,CACF,uDAAuD;gBACrD,2DAA2D;gBAC3D,uDAAuD;gBACvD,mCAAmC,CACtC,CAAC;SACH;QACDgC,8BAAqB,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAChE/B,qBAAgB,CAAC,kBAAkB,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAErE,IAAM,MAAM,GAAGgC,eAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,IAAI,CACT,cAAM,OAAA,UAAU,CAAC,IAAI,CAAC,GAAA,EACtB,UAAA,KAAK,IAAI,OAAA,UAAU,CAAC,KAAK,CAAC,GAAA,CAC3B,CAAC;SACH;QACD,OAAO,MAAM,CAAC;KACf;IAED,mCAAe,GAAf,UACE,MAAe,EACf,WAAmC,EACnC,UAAsC;QAEtCjC,qBAAgB,CAAC,2BAA2B,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACtEC,qBAAgB,CACd,2BAA2B,EAC3B,YAAY,EACZ,UAAU,EACV,IAAI,CACL,CAAC;QAEF,IAAM,MAAM,GAAGiC,wBAAe,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACpE,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,IAAI,CACT,cAAM,OAAA,UAAU,CAAC,IAAI,CAAC,GAAA,EACtB,UAAA,KAAK,IAAI,OAAA,UAAU,CAAC,KAAK,CAAC,GAAA,CAC3B,CAAC;SACH;QACD,OAAO,MAAM,CAAC;KACf;IAED,0BAAM,GAAN,UAAO,UAAsC;QAC3ClC,qBAAgB,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC7DC,qBAAgB,CAAC,kBAAkB,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAErE,IAAM,MAAM,GAAGkC,eAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,IAAI,CACT,cAAM,OAAA,UAAU,CAAC,IAAI,CAAC,GAAA,EACtB,UAAA,KAAK,IAAI,OAAA,UAAU,CAAC,KAAK,CAAC,GAAA,CAC3B,CAAC;SACH;QACD,OAAO,MAAM,CAAC;KACf;IAED,+BAAW,GAAX,UACE,iBAAoD,EACpD,UAIS,EACT,YAAsB;QAPxB,iBA6CC;QApCCnC,qBAAgB,CAAC,uBAAuB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAClEC,qBAAgB,CACd,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,CACN,CAAC;QACFA,qBAAgB,CAAC,uBAAuB,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC1E,eAAe,CACb,uBAAuB,EACvB,cAAc,EACd,YAAY,EACZ,IAAI,CACL,CAAC;QAEF,IAAM,MAAM,GAAGmC,uBAAc,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE;YAC/D,YAAY,cAAA;SACb,CAAC,CAAC,IAAI,CACL,UAAA,iBAAiB;YACf,OAAA,IAAI,iBAAiB,CACnB,iBAAiB,CAAC,SAAS,EAC3B,IAAI,YAAY,CAAC,KAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAC5D;SAAA,CACJ,CAAC;QACF,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,IAAI,CACT,UAAA,iBAAiB;gBACf,OAAA,UAAU,CACR,IAAI,EACJ,iBAAiB,CAAC,SAAS,EAC3B,iBAAiB,CAAC,QAAQ,CAC3B;aAAA,EACH,UAAA,KAAK,IAAI,OAAA,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,GAAA,CACxC,CAAC;SACH;QACD,OAAO,MAAM,CAAC;KACf;IAED,+BAAW,GAAX,UACE,QAAgC,EAChC,UAAsC;QAEtCpC,qBAAgB,CAAC,uBAAuB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAClEC,qBAAgB,CAAC,uBAAuB,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAE1E,IAAM,MAAM,GAAGoC,oBAAW,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,IAAI,CACT,cAAM,OAAA,UAAU,CAAC,IAAI,CAAC,GAAA,EACtB,UAAA,KAAK,IAAI,OAAA,UAAU,CAAC,KAAK,CAAC,GAAA,CAC3B,CAAC;SACH;QACD,OAAO,MAAM,CAAC;KACf;IAED,wBAAI,GAAJ,UAAK,KAAe,EAAE,UAAsC;QAA5D,iBAoBC;QAnBCrC,qBAAgB,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3DC,qBAAgB,CAAC,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAEnE,IAAM,UAAU,GAAGqC,aAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAC7B,UAAA,MAAM,IAAI,OAAA,IAAI,SAAS,CAAC,KAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAA,CAC/C,CAAC;QAEF,IAAI,UAAU,EAAE;YACd,OAAO,CAAC,IAAI,CACV,cAAM,OAAA,UAAU,CAAC,IAAI,CAAC,GAAA,EACtB,UAAA,KAAK,IAAI,OAAA,UAAU,CAAC,KAAK,CAAC,GAAA,CAC3B,CAAC;SACH;QAED,IAAM,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxD,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC;KACf;IAED,gCAAY,GAAZ;QACEN,8BAAqB,CAAC,wBAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtE,OAAO,IAAI,YAAY,CACrB,IAAIO,qBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CACpE,CAAC;KACH;IAED,sBAAI,0BAAG;aAAP;YACE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;SACtB;;;OAAA;IAED,sBAAI,6BAAM;aAAV;YACE,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;SACzB;;;OAAA;IAED,sBAAI,2BAAI;aAAR;YACE,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;SACvB;;;OAAA;IACH,gBAAC;AAAD,CAlPA,CAA+B,KAAK;;ACniBpC;;;;;;;;;;;;;;;;AAsCA;;;AAGA;;;;IASE,kBAAqB,SAA0B,EAAW,GAAgB;QAA1E,iBAA8E;QAAzD,cAAS,GAAT,SAAS,CAAiB;QAAW,QAAG,GAAH,GAAG,CAAa;QAE1E,aAAQ,GAAG;YACT,MAAM,EAAE,cAAM,OAAA,KAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAA;SACvC,CAAC;KAJ4E;;;;;;;;;;IAe9E,8BAAW,GAAX,UACE,IAAY,EACZ,IAAY,EACZ,OAEM;QAFN,wBAAA,EAAA,YAEM;QAENC,gCAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;KAC9D;IAcD,sBAAG,GAAH,UAAI,IAAyB;QAC3BxC,qBAAgB,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,IAAI,YAAY,SAAS,EAAE;YAC7B,IAAM,QAAQ,GAAGyC,mBAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7D,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SACtC;aAAM;YACL,IAAM,QAAQ,GAAGC,YAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC3C,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SACtC;KACF;;;;;;;IAQD,6BAAU,GAAV,UAAW,GAAW;QACpB,IAAM,OAAO,GAAG,qBAAqB,CAAC;QACtC1C,qBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAClD,IAAM,QAAQ,GAAGyC,mBAAU,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACjD,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACtC;;IAGD,4BAAS,GAAT;QACEzC,qBAAgB,CAAC,oBAAoB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO2C,kBAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAClC;IAED,2BAAQ,GAAR;QACE3C,qBAAgB,CAAC,mBAAmB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO4C,iBAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACjC;IA9Ee,oBAAW,GAAG;QAC5B,SAAS,EAAEC,wBAAe,EAAE;QAC5B,SAAS,EAAE,UAAC,KAAa,IAAK,OAAAC,kBAAS,CAAC,KAAK,CAAC,GAAA;KAC/C,CAAC;IA4EJ,eAAC;CAhFD;;ACzCA;;;;;;;;;;;;;;;;AAoCA;;;;;;;;;SASgB,cAAc,CAAI,EAcjC;QAbC,GAAG,SAAA,EACH,GAAG,SAAA,EACH,OAAO,aAAA,EACP,cAAc,oBAAA,EACd,SAAS,eAAA,EACT,iBAAiB,EAAjB,SAAS,mBAAG,KAAK,KAAA;IAYjBC,uBAAc,CAAC,OAAO,CAAC,CAAC;;;;;IAMxB,IAAM,YAAY,GAAG,IAAIC,kBAAQ,CAC/B,eAAe,EACf,IAAIC,4BAAkB,CAAC,qBAAqB,CAAC,CAC9C,CAAC;IACF,YAAY,CAAC,YAAY,CACvB,IAAIC,mBAAS,CAAC,eAAe,EAAE,cAAM,OAAA,cAAc,GAAA,0BAAwB,CAC5E,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,IAAI,QAAQ,CACpBC,oCAA2B,CACzB,GAAG,EACH,YAAY;gCACY,SAAS,EACjC,GAAG,EACH,SAAS,CACV,EACD,GAAG,CACc;QACnB,SAAS,WAAA;KACV,CAAC;AACJ;;;;;;;AC1FA;;;;;;;;;;;;;;;;AA4BA,IAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;AAEzC,SAAS,gBAAgB,CAAC,QAA2B;;IAElD,QAA+B,CAAC,QAAQ,CAAC,iBAAiB,CACzD,IAAID,mBAAS,CACX,iBAAiB,EACjB,UAAC,SAAS,EAAE,EAA2B;YAAL,GAAG,wBAAA;;;QAGnC,IAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,YAAY,EAAE,CAAC;QAC/D,IAAM,WAAW,GAAG,SAAS;aAC1B,WAAW,CAAC,UAAU,CAAC;aACvB,YAAY,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;QACrC,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;KACvC,wBAEF;SACE,eAAe;;IAEd;QACE,SAAS,WAAA;QACT,KAAK,OAAA;QACL,QAAQ,UAAA;QACR,YAAY,cAAA;QACZ,aAAa,wBAAA;QACb,QAAQ,UAAA;QACR,WAAW,aAAA;KACZ,CACF;SACA,oBAAoB,CAAC,IAAI,CAAC,CAC9B,CAAC;IAEF,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,gBAAgB,CAACE,4BAAQ,CAAC;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/util/util.ts","../src/util/validation.ts","../src/api/onDisconnect.ts","../src/api/TransactionResult.ts","../src/api/Reference.ts","../src/api/Database.ts","../src/api/internal.ts","../src/index.node.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Logger } from '@firebase/logger';\n\nconst logClient = new Logger('@firebase/database-compat');\n\nexport const warn = function (msg: string) {\n const message = 'FIREBASE WARNING: ' + msg;\n logClient.warn(message);\n};\n","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { errorPrefix as errorPrefixFxn } from '@firebase/util';\n\nexport const validateBoolean = function (\n fnName: string,\n argumentName: string,\n bool: unknown,\n optional: boolean\n) {\n if (optional && bool === undefined) {\n return;\n }\n if (typeof bool !== 'boolean') {\n throw new Error(\n errorPrefixFxn(fnName, argumentName) + 'must be a boolean.'\n );\n }\n};\n\nexport const validateEventType = function (\n fnName: string,\n eventType: string,\n optional: boolean\n) {\n if (optional && eventType === undefined) {\n return;\n }\n\n switch (eventType) {\n case 'value':\n case 'child_added':\n case 'child_removed':\n case 'child_changed':\n case 'child_moved':\n break;\n default:\n throw new Error(\n errorPrefixFxn(fnName, 'eventType') +\n 'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\n '\"child_changed\", or \"child_moved\".'\n );\n }\n};\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { OnDisconnect as ModularOnDisconnect } from '@firebase/database';\nimport { validateArgCount, validateCallback, Compat } from '@firebase/util';\n\nimport { warn } from '../util/util';\nexport class OnDisconnect implements Compat<ModularOnDisconnect> {\n constructor(readonly _delegate: ModularOnDisconnect) {}\n\n cancel(onComplete?: (a: Error | null) => void): Promise<void> {\n validateArgCount('OnDisconnect.cancel', 0, 1, arguments.length);\n validateCallback('OnDisconnect.cancel', 'onComplete', onComplete, true);\n const result = this._delegate.cancel();\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n remove(onComplete?: (a: Error | null) => void): Promise<void> {\n validateArgCount('OnDisconnect.remove', 0, 1, arguments.length);\n validateCallback('OnDisconnect.remove', 'onComplete', onComplete, true);\n const result = this._delegate.remove();\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n set(value: unknown, onComplete?: (a: Error | null) => void): Promise<void> {\n validateArgCount('OnDisconnect.set', 1, 2, arguments.length);\n validateCallback('OnDisconnect.set', 'onComplete', onComplete, true);\n const result = this._delegate.set(value);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n setWithPriority(\n value: unknown,\n priority: number | string | null,\n onComplete?: (a: Error | null) => void\n ): Promise<void> {\n validateArgCount('OnDisconnect.setWithPriority', 2, 3, arguments.length);\n validateCallback(\n 'OnDisconnect.setWithPriority',\n 'onComplete',\n onComplete,\n true\n );\n const result = this._delegate.setWithPriority(value, priority);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n update(\n objectToMerge: Record<string, unknown>,\n onComplete?: (a: Error | null) => void\n ): Promise<void> {\n validateArgCount('OnDisconnect.update', 1, 2, arguments.length);\n if (Array.isArray(objectToMerge)) {\n const newObjectToMerge: { [k: string]: unknown } = {};\n for (let i = 0; i < objectToMerge.length; ++i) {\n newObjectToMerge['' + i] = objectToMerge[i];\n }\n objectToMerge = newObjectToMerge;\n warn(\n 'Passing an Array to firebase.database.onDisconnect().update() is deprecated. Use set() if you want to overwrite the ' +\n 'existing data, or an Object with integer keys if you really do want to only update some of the children.'\n );\n }\n validateCallback('OnDisconnect.update', 'onComplete', onComplete, true);\n const result = this._delegate.update(objectToMerge);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { validateArgCount } from '@firebase/util';\n\nimport { DataSnapshot } from './Reference';\n\nexport class TransactionResult {\n /**\n * A type for the resolve value of Firebase.transaction.\n */\n constructor(public committed: boolean, public snapshot: DataSnapshot) {}\n\n // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\n // for end-users\n toJSON(): object {\n validateArgCount('TransactionResult.toJSON', 0, 1, arguments.length);\n return { committed: this.committed, snapshot: this.snapshot.toJSON() };\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n OnDisconnect as ModularOnDisconnect,\n off,\n onChildAdded,\n onChildChanged,\n onChildMoved,\n onChildRemoved,\n onValue,\n EventType,\n limitToFirst,\n query,\n limitToLast,\n orderByChild,\n orderByKey,\n orderByValue,\n orderByPriority,\n startAt,\n startAfter,\n endAt,\n endBefore,\n equalTo,\n get,\n set,\n update,\n setWithPriority,\n remove,\n setPriority,\n push,\n runTransaction,\n child,\n DataSnapshot as ModularDataSnapshot,\n Query as ExpQuery,\n DatabaseReference as ModularReference,\n _QueryImpl,\n _ReferenceImpl,\n _validatePathString,\n _validateWritablePath,\n _UserCallback,\n _QueryParams\n} from '@firebase/database';\nimport {\n Compat,\n Deferred,\n errorPrefix,\n validateArgCount,\n validateCallback,\n validateContextObject\n} from '@firebase/util';\n\nimport { warn } from '../util/util';\nimport { validateBoolean, validateEventType } from '../util/validation';\n\nimport { Database } from './Database';\nimport { OnDisconnect } from './onDisconnect';\nimport { TransactionResult } from './TransactionResult';\n\n/**\n * Class representing a firebase data snapshot. It wraps a SnapshotNode and\n * surfaces the public methods (val, forEach, etc.) we want to expose.\n */\nexport class DataSnapshot implements Compat<ModularDataSnapshot> {\n constructor(\n readonly _database: Database,\n readonly _delegate: ModularDataSnapshot\n ) {}\n\n /**\n * Retrieves the snapshot contents as JSON. Returns null if the snapshot is\n * empty.\n *\n * @returns JSON representation of the DataSnapshot contents, or null if empty.\n */\n val(): unknown {\n validateArgCount('DataSnapshot.val', 0, 0, arguments.length);\n return this._delegate.val();\n }\n\n /**\n * Returns the snapshot contents as JSON, including priorities of node. Suitable for exporting\n * the entire node contents.\n * @returns JSON representation of the DataSnapshot contents, or null if empty.\n */\n exportVal(): unknown {\n validateArgCount('DataSnapshot.exportVal', 0, 0, arguments.length);\n return this._delegate.exportVal();\n }\n\n // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\n // for end-users\n toJSON(): unknown {\n // Optional spacer argument is unnecessary because we're depending on recursion rather than stringifying the content\n validateArgCount('DataSnapshot.toJSON', 0, 1, arguments.length);\n return this._delegate.toJSON();\n }\n\n /**\n * Returns whether the snapshot contains a non-null value.\n *\n * @returns Whether the snapshot contains a non-null value, or is empty.\n */\n exists(): boolean {\n validateArgCount('DataSnapshot.exists', 0, 0, arguments.length);\n return this._delegate.exists();\n }\n\n /**\n * Returns a DataSnapshot of the specified child node's contents.\n *\n * @param path - Path to a child.\n * @returns DataSnapshot for child node.\n */\n child(path: string): DataSnapshot {\n validateArgCount('DataSnapshot.child', 0, 1, arguments.length);\n // Ensure the childPath is a string (can be a number)\n path = String(path);\n _validatePathString('DataSnapshot.child', 'path', path, false);\n return new DataSnapshot(this._database, this._delegate.child(path));\n }\n\n /**\n * Returns whether the snapshot contains a child at the specified path.\n *\n * @param path - Path to a child.\n * @returns Whether the child exists.\n */\n hasChild(path: string): boolean {\n validateArgCount('DataSnapshot.hasChild', 1, 1, arguments.length);\n _validatePathString('DataSnapshot.hasChild', 'path', path, false);\n return this._delegate.hasChild(path);\n }\n\n /**\n * Returns the priority of the object, or null if no priority was set.\n *\n * @returns The priority.\n */\n getPriority(): string | number | null {\n validateArgCount('DataSnapshot.getPriority', 0, 0, arguments.length);\n return this._delegate.priority;\n }\n\n /**\n * Iterates through child nodes and calls the specified action for each one.\n *\n * @param action - Callback function to be called\n * for each child.\n * @returns True if forEach was canceled by action returning true for\n * one of the child nodes.\n */\n forEach(action: (snapshot: DataSnapshot) => boolean | void): boolean {\n validateArgCount('DataSnapshot.forEach', 1, 1, arguments.length);\n validateCallback('DataSnapshot.forEach', 'action', action, false);\n return this._delegate.forEach(expDataSnapshot =>\n action(new DataSnapshot(this._database, expDataSnapshot))\n );\n }\n\n /**\n * Returns whether this DataSnapshot has children.\n * @returns True if the DataSnapshot contains 1 or more child nodes.\n */\n hasChildren(): boolean {\n validateArgCount('DataSnapshot.hasChildren', 0, 0, arguments.length);\n return this._delegate.hasChildren();\n }\n\n get key() {\n return this._delegate.key;\n }\n\n /**\n * Returns the number of children for this DataSnapshot.\n * @returns The number of children that this DataSnapshot contains.\n */\n numChildren(): number {\n validateArgCount('DataSnapshot.numChildren', 0, 0, arguments.length);\n return this._delegate.size;\n }\n\n /**\n * @returns The Firebase reference for the location this snapshot's data came\n * from.\n */\n getRef(): Reference {\n validateArgCount('DataSnapshot.ref', 0, 0, arguments.length);\n return new Reference(this._database, this._delegate.ref);\n }\n\n get ref(): Reference {\n return this.getRef();\n }\n}\n\nexport interface SnapshotCallback {\n (dataSnapshot: DataSnapshot, previousChildName?: string | null): unknown;\n}\n\n/**\n * A Query represents a filter to be applied to a firebase location. This object purely represents the\n * query expression (and exposes our public API to build the query). The actual query logic is in ViewBase.js.\n *\n * Since every Firebase reference is a query, Firebase inherits from this object.\n */\nexport class Query implements Compat<ExpQuery> {\n constructor(readonly database: Database, readonly _delegate: ExpQuery) {}\n\n on(\n eventType: string,\n callback: SnapshotCallback,\n cancelCallbackOrContext?: ((a: Error) => unknown) | object | null,\n context?: object | null\n ): SnapshotCallback {\n validateArgCount('Query.on', 2, 4, arguments.length);\n validateCallback('Query.on', 'callback', callback, false);\n\n const ret = Query.getCancelAndContextArgs_(\n 'Query.on',\n cancelCallbackOrContext,\n context\n );\n const valueCallback = (expSnapshot, previousChildName?) => {\n callback.call(\n ret.context,\n new DataSnapshot(this.database, expSnapshot),\n previousChildName\n );\n };\n valueCallback.userCallback = callback;\n valueCallback.context = ret.context;\n const cancelCallback = ret.cancel?.bind(ret.context);\n\n switch (eventType) {\n case 'value':\n onValue(this._delegate, valueCallback, cancelCallback);\n return callback;\n case 'child_added':\n onChildAdded(this._delegate, valueCallback, cancelCallback);\n return callback;\n case 'child_removed':\n onChildRemoved(this._delegate, valueCallback, cancelCallback);\n return callback;\n case 'child_changed':\n onChildChanged(this._delegate, valueCallback, cancelCallback);\n return callback;\n case 'child_moved':\n onChildMoved(this._delegate, valueCallback, cancelCallback);\n return callback;\n default:\n throw new Error(\n errorPrefix('Query.on', 'eventType') +\n 'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\n '\"child_changed\", or \"child_moved\".'\n );\n }\n }\n\n off(\n eventType?: string,\n callback?: SnapshotCallback,\n context?: object | null\n ): void {\n validateArgCount('Query.off', 0, 3, arguments.length);\n validateEventType('Query.off', eventType, true);\n validateCallback('Query.off', 'callback', callback, true);\n validateContextObject('Query.off', 'context', context, true);\n if (callback) {\n const valueCallback: _UserCallback = () => {};\n valueCallback.userCallback = callback;\n valueCallback.context = context;\n off(this._delegate, eventType as EventType, valueCallback);\n } else {\n off(this._delegate, eventType as EventType | undefined);\n }\n }\n\n /**\n * Get the server-value for this query, or return a cached value if not connected.\n */\n get(): Promise<DataSnapshot> {\n return get(this._delegate).then(expSnapshot => {\n return new DataSnapshot(this.database, expSnapshot);\n });\n }\n\n /**\n * Attaches a listener, waits for the first event, and then removes the listener\n */\n once(\n eventType: string,\n callback?: SnapshotCallback,\n failureCallbackOrContext?: ((a: Error) => void) | object | null,\n context?: object | null\n ): Promise<DataSnapshot> {\n validateArgCount('Query.once', 1, 4, arguments.length);\n validateCallback('Query.once', 'callback', callback, true);\n\n const ret = Query.getCancelAndContextArgs_(\n 'Query.once',\n failureCallbackOrContext,\n context\n );\n const deferred = new Deferred<DataSnapshot>();\n const valueCallback: _UserCallback = (expSnapshot, previousChildName?) => {\n const result = new DataSnapshot(this.database, expSnapshot);\n if (callback) {\n callback.call(ret.context, result, previousChildName);\n }\n deferred.resolve(result);\n };\n valueCallback.userCallback = callback;\n valueCallback.context = ret.context;\n const cancelCallback = (error: Error) => {\n if (ret.cancel) {\n ret.cancel.call(ret.context, error);\n }\n deferred.reject(error);\n };\n\n switch (eventType) {\n case 'value':\n onValue(this._delegate, valueCallback, cancelCallback, {\n onlyOnce: true\n });\n break;\n case 'child_added':\n onChildAdded(this._delegate, valueCallback, cancelCallback, {\n onlyOnce: true\n });\n break;\n case 'child_removed':\n onChildRemoved(this._delegate, valueCallback, cancelCallback, {\n onlyOnce: true\n });\n break;\n case 'child_changed':\n onChildChanged(this._delegate, valueCallback, cancelCallback, {\n onlyOnce: true\n });\n break;\n case 'child_moved':\n onChildMoved(this._delegate, valueCallback, cancelCallback, {\n onlyOnce: true\n });\n break;\n default:\n throw new Error(\n errorPrefix('Query.once', 'eventType') +\n 'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\n '\"child_changed\", or \"child_moved\".'\n );\n }\n\n return deferred.promise;\n }\n\n /**\n * Set a limit and anchor it to the start of the window.\n */\n limitToFirst(limit: number): Query {\n validateArgCount('Query.limitToFirst', 1, 1, arguments.length);\n return new Query(this.database, query(this._delegate, limitToFirst(limit)));\n }\n\n /**\n * Set a limit and anchor it to the end of the window.\n */\n limitToLast(limit: number): Query {\n validateArgCount('Query.limitToLast', 1, 1, arguments.length);\n return new Query(this.database, query(this._delegate, limitToLast(limit)));\n }\n\n /**\n * Given a child path, return a new query ordered by the specified grandchild path.\n */\n orderByChild(path: string): Query {\n validateArgCount('Query.orderByChild', 1, 1, arguments.length);\n return new Query(this.database, query(this._delegate, orderByChild(path)));\n }\n\n /**\n * Return a new query ordered by the KeyIndex\n */\n orderByKey(): Query {\n validateArgCount('Query.orderByKey', 0, 0, arguments.length);\n return new Query(this.database, query(this._delegate, orderByKey()));\n }\n\n /**\n * Return a new query ordered by the PriorityIndex\n */\n orderByPriority(): Query {\n validateArgCount('Query.orderByPriority', 0, 0, arguments.length);\n return new Query(this.database, query(this._delegate, orderByPriority()));\n }\n\n /**\n * Return a new query ordered by the ValueIndex\n */\n orderByValue(): Query {\n validateArgCount('Query.orderByValue', 0, 0, arguments.length);\n return new Query(this.database, query(this._delegate, orderByValue()));\n }\n\n startAt(\n value: number | string | boolean | null = null,\n name?: string | null\n ): Query {\n validateArgCount('Query.startAt', 0, 2, arguments.length);\n return new Query(\n this.database,\n query(this._delegate, startAt(value, name))\n );\n }\n\n startAfter(\n value: number | string | boolean | null = null,\n name?: string | null\n ): Query {\n validateArgCount('Query.startAfter', 0, 2, arguments.length);\n return new Query(\n this.database,\n query(this._delegate, startAfter(value, name))\n );\n }\n\n endAt(\n value: number | string | boolean | null = null,\n name?: string | null\n ): Query {\n validateArgCount('Query.endAt', 0, 2, arguments.length);\n return new Query(this.database, query(this._delegate, endAt(value, name)));\n }\n\n endBefore(\n value: number | string | boolean | null = null,\n name?: string | null\n ): Query {\n validateArgCount('Query.endBefore', 0, 2, arguments.length);\n return new Query(\n this.database,\n query(this._delegate, endBefore(value, name))\n );\n }\n\n /**\n * Load the selection of children with exactly the specified value, and, optionally,\n * the specified name.\n */\n equalTo(value: number | string | boolean | null, name?: string) {\n validateArgCount('Query.equalTo', 1, 2, arguments.length);\n return new Query(\n this.database,\n query(this._delegate, equalTo(value, name))\n );\n }\n\n /**\n * @returns URL for this location.\n */\n toString(): string {\n validateArgCount('Query.toString', 0, 0, arguments.length);\n return this._delegate.toString();\n }\n\n // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\n // for end-users.\n toJSON() {\n // An optional spacer argument is unnecessary for a string.\n validateArgCount('Query.toJSON', 0, 1, arguments.length);\n return this._delegate.toJSON();\n }\n\n /**\n * Return true if this query and the provided query are equivalent; otherwise, return false.\n */\n isEqual(other: Query): boolean {\n validateArgCount('Query.isEqual', 1, 1, arguments.length);\n if (!(other instanceof Query)) {\n const error =\n 'Query.isEqual failed: First argument must be an instance of firebase.database.Query.';\n throw new Error(error);\n }\n return this._delegate.isEqual(other._delegate);\n }\n\n /**\n * Helper used by .on and .once to extract the context and or cancel arguments.\n * @param fnName - The function name (on or once)\n *\n */\n private static getCancelAndContextArgs_(\n fnName: string,\n cancelOrContext?: ((a: Error) => void) | object | null,\n context?: object | null\n ): { cancel: ((a: Error) => void) | undefined; context: object | undefined } {\n const ret: {\n cancel: ((a: Error) => void) | null;\n context: object | null;\n } = { cancel: undefined, context: undefined };\n if (cancelOrContext && context) {\n ret.cancel = cancelOrContext as (a: Error) => void;\n validateCallback(fnName, 'cancel', ret.cancel, true);\n\n ret.context = context;\n validateContextObject(fnName, 'context', ret.context, true);\n } else if (cancelOrContext) {\n // we have either a cancel callback or a context.\n if (typeof cancelOrContext === 'object' && cancelOrContext !== null) {\n // it's a context!\n ret.context = cancelOrContext;\n } else if (typeof cancelOrContext === 'function') {\n ret.cancel = cancelOrContext as (a: Error) => void;\n } else {\n throw new Error(\n errorPrefix(fnName, 'cancelOrContext') +\n ' must either be a cancel callback or a context object.'\n );\n }\n }\n return ret;\n }\n\n get ref(): Reference {\n return new Reference(\n this.database,\n new _ReferenceImpl(this._delegate._repo, this._delegate._path)\n );\n }\n}\n\nexport class Reference extends Query implements Compat<ModularReference> {\n then: Promise<Reference>['then'];\n catch: Promise<Reference>['catch'];\n\n /**\n * Call options:\n * new Reference(Repo, Path) or\n * new Reference(url: string, string|RepoManager)\n *\n * Externally - this is the firebase.database.Reference type.\n */\n constructor(\n readonly database: Database,\n readonly _delegate: ModularReference\n ) {\n super(\n database,\n new _QueryImpl(\n _delegate._repo,\n _delegate._path,\n new _QueryParams(),\n false\n )\n );\n }\n\n /** @returns {?string} */\n getKey(): string | null {\n validateArgCount('Reference.key', 0, 0, arguments.length);\n return this._delegate.key;\n }\n\n child(pathString: string): Reference {\n validateArgCount('Reference.child', 1, 1, arguments.length);\n if (typeof pathString === 'number') {\n pathString = String(pathString);\n }\n return new Reference(this.database, child(this._delegate, pathString));\n }\n\n /** @returns {?Reference} */\n getParent(): Reference | null {\n validateArgCount('Reference.parent', 0, 0, arguments.length);\n const parent = this._delegate.parent;\n return parent ? new Reference(this.database, parent) : null;\n }\n\n /** @returns {!Reference} */\n getRoot(): Reference {\n validateArgCount('Reference.root', 0, 0, arguments.length);\n return new Reference(this.database, this._delegate.root);\n }\n\n set(\n newVal: unknown,\n onComplete?: (error: Error | null) => void\n ): Promise<void> {\n validateArgCount('Reference.set', 1, 2, arguments.length);\n validateCallback('Reference.set', 'onComplete', onComplete, true);\n const result = set(this._delegate, newVal);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n update(\n values: object,\n onComplete?: (a: Error | null) => void\n ): Promise<void> {\n validateArgCount('Reference.update', 1, 2, arguments.length);\n\n if (Array.isArray(values)) {\n const newObjectToMerge: { [k: string]: unknown } = {};\n for (let i = 0; i < values.length; ++i) {\n newObjectToMerge['' + i] = values[i];\n }\n values = newObjectToMerge;\n warn(\n 'Passing an Array to Firebase.update() is deprecated. ' +\n 'Use set() if you want to overwrite the existing data, or ' +\n 'an Object with integer keys if you really do want to ' +\n 'only update some of the children.'\n );\n }\n _validateWritablePath('Reference.update', this._delegate._path);\n validateCallback('Reference.update', 'onComplete', onComplete, true);\n\n const result = update(this._delegate, values);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n setWithPriority(\n newVal: unknown,\n newPriority: string | number | null,\n onComplete?: (a: Error | null) => void\n ): Promise<void> {\n validateArgCount('Reference.setWithPriority', 2, 3, arguments.length);\n validateCallback(\n 'Reference.setWithPriority',\n 'onComplete',\n onComplete,\n true\n );\n\n const result = setWithPriority(this._delegate, newVal, newPriority);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n remove(onComplete?: (a: Error | null) => void): Promise<void> {\n validateArgCount('Reference.remove', 0, 1, arguments.length);\n validateCallback('Reference.remove', 'onComplete', onComplete, true);\n\n const result = remove(this._delegate);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n transaction(\n transactionUpdate: (currentData: unknown) => unknown,\n onComplete?: (\n error: Error | null,\n committed: boolean,\n dataSnapshot: DataSnapshot | null\n ) => void,\n applyLocally?: boolean\n ): Promise<TransactionResult> {\n validateArgCount('Reference.transaction', 1, 3, arguments.length);\n validateCallback(\n 'Reference.transaction',\n 'transactionUpdate',\n transactionUpdate,\n false\n );\n validateCallback('Reference.transaction', 'onComplete', onComplete, true);\n validateBoolean(\n 'Reference.transaction',\n 'applyLocally',\n applyLocally,\n true\n );\n\n const result = runTransaction(this._delegate, transactionUpdate, {\n applyLocally\n }).then(\n transactionResult =>\n new TransactionResult(\n transactionResult.committed,\n new DataSnapshot(this.database, transactionResult.snapshot)\n )\n );\n if (onComplete) {\n result.then(\n transactionResult =>\n onComplete(\n null,\n transactionResult.committed,\n transactionResult.snapshot\n ),\n error => onComplete(error, false, null)\n );\n }\n return result;\n }\n\n setPriority(\n priority: string | number | null,\n onComplete?: (a: Error | null) => void\n ): Promise<void> {\n validateArgCount('Reference.setPriority', 1, 2, arguments.length);\n validateCallback('Reference.setPriority', 'onComplete', onComplete, true);\n\n const result = setPriority(this._delegate, priority);\n if (onComplete) {\n result.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n return result;\n }\n\n push(value?: unknown, onComplete?: (a: Error | null) => void): Reference {\n validateArgCount('Reference.push', 0, 2, arguments.length);\n validateCallback('Reference.push', 'onComplete', onComplete, true);\n\n const expPromise = push(this._delegate, value);\n const promise = expPromise.then(\n expRef => new Reference(this.database, expRef)\n );\n\n if (onComplete) {\n promise.then(\n () => onComplete(null),\n error => onComplete(error)\n );\n }\n\n const result = new Reference(this.database, expPromise);\n result.then = promise.then.bind(promise);\n result.catch = promise.catch.bind(promise, undefined);\n return result;\n }\n\n onDisconnect(): OnDisconnect {\n _validateWritablePath('Reference.onDisconnect', this._delegate._path);\n return new OnDisconnect(\n new ModularOnDisconnect(this._delegate._repo, this._delegate._path)\n );\n }\n\n get key(): string | null {\n return this.getKey();\n }\n\n get parent(): Reference | null {\n return this.getParent();\n }\n\n get root(): Reference {\n return this.getRoot();\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line import/no-extraneous-dependencies\n\nimport { FirebaseApp } from '@firebase/app-types';\nimport { FirebaseService } from '@firebase/app-types/private';\nimport {\n forceLongPolling,\n forceWebSockets,\n goOnline,\n connectDatabaseEmulator,\n goOffline,\n ref,\n refFromURL,\n increment,\n serverTimestamp,\n Database as ModularDatabase\n} from '@firebase/database';\nimport {\n validateArgCount,\n Compat,\n EmulatorMockTokenOptions\n} from '@firebase/util';\n\nimport { Reference } from './Reference';\n\n/**\n * Class representing a firebase database.\n */\nexport class Database implements FirebaseService, Compat<ModularDatabase> {\n static readonly ServerValue = {\n TIMESTAMP: serverTimestamp(),\n increment: (delta: number) => increment(delta)\n };\n\n /**\n * The constructor should not be called by users of our public API.\n */\n constructor(readonly _delegate: ModularDatabase, readonly app: FirebaseApp) {}\n\n INTERNAL = {\n delete: () => this._delegate._delete(),\n forceWebSockets,\n forceLongPolling\n };\n\n /**\n * Modify this instance to communicate with the Realtime Database emulator.\n *\n * <p>Note: This method must be called before performing any other operation.\n *\n * @param host - the emulator host (ex: localhost)\n * @param port - the emulator port (ex: 8080)\n * @param options.mockUserToken - the mock auth token to use for unit testing Security Rules\n */\n useEmulator(\n host: string,\n port: number,\n options: {\n mockUserToken?: EmulatorMockTokenOptions;\n } = {}\n ): void {\n connectDatabaseEmulator(this._delegate, host, port, options);\n }\n\n /**\n * Returns a reference to the root or to the path specified in the provided\n * argument.\n *\n * @param path - The relative string path or an existing Reference to a database\n * location.\n * @throws If a Reference is provided, throws if it does not belong to the\n * same project.\n * @returns Firebase reference.\n */\n ref(path?: string): Reference;\n ref(path?: Reference): Reference;\n ref(path?: string | Reference): Reference {\n validateArgCount('database.ref', 0, 1, arguments.length);\n if (path instanceof Reference) {\n const childRef = refFromURL(this._delegate, path.toString());\n return new Reference(this, childRef);\n } else {\n const childRef = ref(this._delegate, path);\n return new Reference(this, childRef);\n }\n }\n\n /**\n * Returns a reference to the root or the path specified in url.\n * We throw a exception if the url is not in the same domain as the\n * current repo.\n * @returns Firebase reference.\n */\n refFromURL(url: string): Reference {\n const apiName = 'database.refFromURL';\n validateArgCount(apiName, 1, 1, arguments.length);\n const childRef = refFromURL(this._delegate, url);\n return new Reference(this, childRef);\n }\n\n // Make individual repo go offline.\n goOffline(): void {\n validateArgCount('database.goOffline', 0, 0, arguments.length);\n return goOffline(this._delegate);\n }\n\n goOnline(): void {\n validateArgCount('database.goOnline', 0, 0, arguments.length);\n return goOnline(this._delegate);\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseApp } from '@firebase/app-types';\nimport {\n FirebaseAuthInternal,\n FirebaseAuthInternalName\n} from '@firebase/auth-interop-types';\nimport {\n Component,\n ComponentContainer,\n ComponentType,\n Provider\n} from '@firebase/component';\nimport {\n _repoManagerDatabaseFromApp,\n _setSDKVersion\n} from '@firebase/database';\nimport * as types from '@firebase/database-types';\n\nimport { Database } from './Database';\n\n/**\n * Used by console to create a database based on the app,\n * passed database URL and a custom auth implementation.\n *\n * @param app - A valid FirebaseApp-like object\n * @param url - A valid Firebase databaseURL\n * @param version - custom version e.g. firebase-admin version\n * @param customAuthImpl - custom auth implementation\n */\nexport function initStandalone<T>({\n app,\n url,\n version,\n customAuthImpl,\n namespace,\n nodeAdmin = false\n}: {\n app: FirebaseApp;\n url: string;\n version: string;\n customAuthImpl: FirebaseAuthInternal;\n namespace: T;\n nodeAdmin?: boolean;\n}): {\n instance: types.Database;\n namespace: T;\n} {\n _setSDKVersion(version);\n\n /**\n * ComponentContainer('database-standalone') is just a placeholder that doesn't perform\n * any actual function.\n */\n const authProvider = new Provider<FirebaseAuthInternalName>(\n 'auth-internal',\n new ComponentContainer('database-standalone')\n );\n authProvider.setComponent(\n new Component('auth-internal', () => customAuthImpl, ComponentType.PRIVATE)\n );\n\n return {\n instance: new Database(\n _repoManagerDatabaseFromApp(\n app,\n authProvider,\n /* appCheckProvider= */ undefined,\n url,\n nodeAdmin\n ),\n app\n ) as types.Database,\n namespace\n };\n}\n","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport firebase from '@firebase/app-compat';\nimport { FirebaseNamespace } from '@firebase/app-types';\nimport { _FirebaseNamespace } from '@firebase/app-types/private';\nimport { Component, ComponentType } from '@firebase/component';\nimport { enableLogging } from '@firebase/database';\nimport * as types from '@firebase/database-types';\n\nimport { name, version } from '../package.json';\nimport { Database } from '../src/api/Database';\nimport * as INTERNAL from '../src/api/internal';\nimport { DataSnapshot, Query, Reference } from '../src/api/Reference';\n\nconst ServerValue = Database.ServerValue;\n\nfunction registerDatabase(instance: FirebaseNamespace) {\n // Register the Database Service with the 'firebase' namespace.\n (instance as _FirebaseNamespace).INTERNAL.registerComponent(\n new Component(\n 'database-compat',\n (container, { instanceIdentifier: url }) => {\n /* Dependencies */\n // getImmediate for FirebaseApp will always succeed\n const app = container.getProvider('app-compat').getImmediate();\n const databaseExp = container\n .getProvider('database')\n .getImmediate({ identifier: url });\n return new Database(databaseExp, app);\n },\n ComponentType.PUBLIC\n )\n .setServiceProps(\n // firebase.database namespace properties\n {\n Reference,\n Query,\n Database,\n DataSnapshot,\n enableLogging,\n INTERNAL,\n ServerValue\n }\n )\n .setMultipleInstances(true)\n );\n\n instance.registerVersion(name, version, 'node');\n}\n\nregisterDatabase(firebase);\n\ndeclare module '@firebase/app-compat' {\n interface FirebaseNamespace {\n database?: {\n (app?: FirebaseApp): types.FirebaseDatabase;\n enableLogging: typeof types.enableLogging;\n ServerValue: types.ServerValue;\n Database: typeof types.FirebaseDatabase;\n };\n }\n interface FirebaseApp {\n database?(): types.FirebaseDatabase;\n }\n}\n"],"names":["Logger","errorPrefixFxn","validateArgCount","validateCallback","_validatePathString","onValue","onChildAdded","onChildRemoved","onChildChanged","onChildMoved","errorPrefix","validateContextObject","off","get","Deferred","query","limitToFirst","limitToLast","orderByChild","orderByKey","orderByPriority","orderByValue","startAt","startAfter","endAt","endBefore","equalTo","_ReferenceImpl","__extends","database","_QueryImpl","_QueryParams","child","set","_validateWritablePath","update","setWithPriority","remove","runTransaction","setPriority","push","ModularOnDisconnect","connectDatabaseEmulator","refFromURL","ref","goOffline","goOnline","serverTimestamp","increment","_setSDKVersion","Provider","ComponentContainer","Component","_repoManagerDatabaseFromApp","firebase"],"mappings":"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"}
@@ -4333,7 +4333,7 @@ var WebSocketConnection = /** @class */ (function () {
4333
4333
  this.bytesReceived = 0;
4334
4334
  this.log_ = logWrapper(this.connId);
4335
4335
  this.stats_ = statsManagerGetCollection(repoInfo);
4336
- this.connURL = WebSocketConnection.connectionURL_(repoInfo, transportSessionId, lastSessionId, appCheckToken);
4336
+ this.connURL = WebSocketConnection.connectionURL_(repoInfo, transportSessionId, lastSessionId, appCheckToken, applicationId);
4337
4337
  this.nodeAdmin = repoInfo.nodeAdmin;
4338
4338
  }
4339
4339
  /**
@@ -4343,7 +4343,7 @@ var WebSocketConnection = /** @class */ (function () {
4343
4343
  * @param lastSessionId - Optional lastSessionId if there was a previous connection
4344
4344
  * @returns connection url
4345
4345
  */
4346
- WebSocketConnection.connectionURL_ = function (repoInfo, transportSessionId, lastSessionId, appCheckToken) {
4346
+ WebSocketConnection.connectionURL_ = function (repoInfo, transportSessionId, lastSessionId, appCheckToken, applicationId) {
4347
4347
  var urlParams = {};
4348
4348
  urlParams[VERSION_PARAM] = PROTOCOL_VERSION;
4349
4349
  if (!util.isNodeSdk() &&
@@ -4361,6 +4361,9 @@ var WebSocketConnection = /** @class */ (function () {
4361
4361
  if (appCheckToken) {
4362
4362
  urlParams[APP_CHECK_TOKEN_PARAM] = appCheckToken;
4363
4363
  }
4364
+ if (applicationId) {
4365
+ urlParams[APPLICATION_ID_PARAM] = applicationId;
4366
+ }
4364
4367
  return repoInfoConnectionURL(repoInfo, WEBSOCKET, urlParams);
4365
4368
  };
4366
4369
  /**
@@ -4376,10 +4379,11 @@ var WebSocketConnection = /** @class */ (function () {
4376
4379
  // Assume failure until proven otherwise.
4377
4380
  PersistentStorage.set('previous_websocket_failure', true);
4378
4381
  try {
4382
+ var options = void 0;
4379
4383
  if (util.isNodeSdk()) {
4380
4384
  var device = this.nodeAdmin ? 'AdminNode' : 'Node';
4381
4385
  // UA Format: Firebase/<wire_protocol>/<sdk_version>/<platform>/<device>
4382
- var options = {
4386
+ var options_1 = {
4383
4387
  headers: {
4384
4388
  'User-Agent': "Firebase/" + PROTOCOL_VERSION + "/" + SDK_VERSION + "/" + process.platform + "/" + device,
4385
4389
  'X-Firebase-GMPID': this.applicationId || ''
@@ -4391,10 +4395,10 @@ var WebSocketConnection = /** @class */ (function () {
4391
4395
  // Note that this header is just used to bypass appcheck, and the token should still be sent
4392
4396
  // through the websocket connection once it is established.
4393
4397
  if (this.authToken) {
4394
- options.headers['Authorization'] = "Bearer " + this.authToken;
4398
+ options_1.headers['Authorization'] = "Bearer " + this.authToken;
4395
4399
  }
4396
4400
  if (this.appCheckToken) {
4397
- options.headers['X-Firebase-AppCheck'] = this.appCheckToken;
4401
+ options_1.headers['X-Firebase-AppCheck'] = this.appCheckToken;
4398
4402
  }
4399
4403
  // Plumb appropriate http_proxy environment variable into faye-websocket if it exists.
4400
4404
  var env = process['env'];
@@ -4402,19 +4406,10 @@ var WebSocketConnection = /** @class */ (function () {
4402
4406
  ? env['HTTPS_PROXY'] || env['https_proxy']
4403
4407
  : env['HTTP_PROXY'] || env['http_proxy'];
4404
4408
  if (proxy) {
4405
- options['proxy'] = { origin: proxy };
4409
+ options_1['proxy'] = { origin: proxy };
4406
4410
  }
4407
- this.mySock = new WebSocketImpl(this.connURL, [], options);
4408
- }
4409
- else {
4410
- var options = {
4411
- headers: {
4412
- 'X-Firebase-GMPID': this.applicationId || '',
4413
- 'X-Firebase-AppCheck': this.appCheckToken || ''
4414
- }
4415
- };
4416
- this.mySock = new WebSocketImpl(this.connURL, [], options);
4417
4411
  }
4412
+ this.mySock = new WebSocketImpl(this.connURL, [], options);
4418
4413
  }
4419
4414
  catch (e) {
4420
4415
  this.log_('Error instantiating WebSocket.');
@@ -5567,6 +5562,17 @@ var TransportManager = /** @class */ (function () {
5567
5562
  enumerable: false,
5568
5563
  configurable: true
5569
5564
  });
5565
+ Object.defineProperty(TransportManager, "IS_TRANSPORT_INITIALIZED", {
5566
+ /**
5567
+ * Returns whether transport has been selected to ensure WebSocketConnection or BrowserPollConnection are not called after
5568
+ * TransportManager has already set up transports_
5569
+ */
5570
+ get: function () {
5571
+ return this.globalTransportInitialized_;
5572
+ },
5573
+ enumerable: false,
5574
+ configurable: true
5575
+ });
5570
5576
  TransportManager.prototype.initTransports_ = function (repoInfo) {
5571
5577
  var e_1, _a;
5572
5578
  var isWebSocketsAvailable = WebSocketConnection && WebSocketConnection['isAvailable']();
@@ -5597,6 +5603,7 @@ var TransportManager = /** @class */ (function () {
5597
5603
  }
5598
5604
  finally { if (e_1) throw e_1.error; }
5599
5605
  }
5606
+ TransportManager.globalTransportInitialized_ = true;
5600
5607
  }
5601
5608
  };
5602
5609
  /**
@@ -5621,6 +5628,8 @@ var TransportManager = /** @class */ (function () {
5621
5628
  return null;
5622
5629
  }
5623
5630
  };
5631
+ // Keeps track of whether the TransportManager has already chosen a transport to use
5632
+ TransportManager.globalTransportInitialized_ = false;
5624
5633
  return TransportManager;
5625
5634
  }());
5626
5635
 
@@ -17471,6 +17480,26 @@ var Database$1 = /** @class */ (function () {
17471
17480
  };
17472
17481
  return Database;
17473
17482
  }());
17483
+ function checkTransportInit() {
17484
+ if (TransportManager.IS_TRANSPORT_INITIALIZED) {
17485
+ warn$1('Transport has already been initialized. Please call this function before calling ref or setting up a listener');
17486
+ }
17487
+ }
17488
+ /**
17489
+ * Force the use of websockets instead of longPolling.
17490
+ */
17491
+ function forceWebSockets() {
17492
+ checkTransportInit();
17493
+ BrowserPollConnection.forceDisallow();
17494
+ }
17495
+ /**
17496
+ * Force the use of longPolling instead of websockets. This will be ignored if websocket protocol is used in databaseURL.
17497
+ */
17498
+ function forceLongPolling() {
17499
+ checkTransportInit();
17500
+ WebSocketConnection.forceDisallow();
17501
+ BrowserPollConnection.forceAllow();
17502
+ }
17474
17503
  /**
17475
17504
  * Modify the provided instance to communicate with the Realtime Database
17476
17505
  * emulator.
@@ -17778,6 +17807,8 @@ var enableLogging_1 = index_standalone.enableLogging = enableLogging;
17778
17807
  var endAt_1 = index_standalone.endAt = endAt;
17779
17808
  var endBefore_1 = index_standalone.endBefore = endBefore;
17780
17809
  var equalTo_1 = index_standalone.equalTo = equalTo;
17810
+ var forceLongPolling_1 = index_standalone.forceLongPolling = forceLongPolling;
17811
+ var forceWebSockets_1 = index_standalone.forceWebSockets = forceWebSockets;
17781
17812
  var get_1 = index_standalone.get = get;
17782
17813
  var goOffline_1 = index_standalone.goOffline = goOffline;
17783
17814
  var goOnline_1 = index_standalone.goOnline = goOnline;
@@ -18574,7 +18605,9 @@ var Database = /** @class */ (function () {
18574
18605
  this._delegate = _delegate;
18575
18606
  this.app = app;
18576
18607
  this.INTERNAL = {
18577
- delete: function () { return _this._delegate._delete(); }
18608
+ delete: function () { return _this._delegate._delete(); },
18609
+ forceWebSockets: forceWebSockets_1,
18610
+ forceLongPolling: forceLongPolling_1
18578
18611
  };
18579
18612
  }
18580
18613
  /**