(args: OnSnapshotParameters<SnapshotType>)
| 21 | | [options: SnapshotListenOptions, onNext: (snapshot: SnapshotType) => void, onError?: (error: Error) => void, onCompletion?: () => void] |
| 22 | |
| 23 | export function parseOnSnapshotArgs<SnapshotType>(args: OnSnapshotParameters<SnapshotType>) { |
| 24 | const result: SnapshotListenOptions & Observer<SnapshotType> = { |
| 25 | includeMetadataChanges: false |
| 26 | } |
| 27 | for (let i = 0; i < args.length; ++i) { |
| 28 | if (args[i] instanceof Function) { |
| 29 | // Assign whichever of next, error, complete were passed starting here |
| 30 | const fnArgsMappingOrder = ['next', 'error', 'complete'] as const |
| 31 | args.slice(i).forEach((fn, idx) => result[fnArgsMappingOrder[idx]] = fn) |
| 32 | break |
| 33 | } else if (typeof args[i] === 'object') { |
| 34 | if ('includeMetadataChanges' in args[i]) { |
| 35 | result.includeMetadataChanges = Boolean((<SnapshotListenOptions>args[i]).includeMetadataChanges) |
| 36 | } else { // Must be Observer |
| 37 | Object.assign(result, args[i]) |
| 38 | } |
| 39 | } else { |
| 40 | throw new Error(`Invalid argument to onSnapshot at position ${i} of type ${typeof args[i]}: ${args[i]}`) |
| 41 | } |
| 42 | } |
| 43 | return result |
| 44 | } |
no test coverage detected
searching dependent graphs…