# All files / core snapshot_version.ts

100% Statements 24/24
100% Branches 0/0
100% Functions 10/10
100% Lines 23/23

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66

    2x

    2x
    2x

    2x
    5523x
    5523x
    5523x

    2x
    4538x

    2x
    823x

    10063x

    2x
    2631x

    2x
    4596x

    2x

    704x

    2x
    1774x

    2x
    2469x

    2x
     /**
     * Copyright 2017 Google Inc.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *   http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */

    import { Timestamp } from '../api/timestamp';

    /**
     * A version of a document in Firestore. This corresponds to the version
     * timestamp, such as update_time or read_time.
     */
    export class SnapshotVersion {
      static readonly MIN = new SnapshotVersion(new Timestamp(0, 0));

      // TODO(b/34176344): Once we no longer need to use the old alpha protos,
      // delete this constructor and use a timestamp-backed version everywhere.
      static fromMicroseconds(value: number): SnapshotVersion {
        const seconds = Math.floor(value / 1e6);
        const nanos = (value % 1e6) * 1e3;
        return new SnapshotVersion(new Timestamp(seconds, nanos));
      }

      static fromTimestamp(value: Timestamp): SnapshotVersion {
        return new SnapshotVersion(value);
      }

      static forDeletedDoc(): SnapshotVersion {
        return SnapshotVersion.MIN;
      }

      private constructor(private timestamp: Timestamp) {}

      compareTo(other: SnapshotVersion): number {
        return this.timestamp._compareTo(other.timestamp);
      }

      isEqual(other: SnapshotVersion): boolean {
        return this.timestamp.isEqual(other.timestamp);
      }

      /** Returns a number representation of the version for use in spec tests. */
      toMicroseconds(): number {
        // Convert to microseconds.
        return this.timestamp.seconds * 1e6 + this.timestamp.nanoseconds / 1000;
      }

      toString(): string {
        return 'SnapshotVersion(' + this.timestamp.toString() + ')';
      }

      toTimestamp(): Timestamp {
        return this.timestamp;
      }
    }