All files / core/view ViewCache.ts

100% Statements 20/20
100% Branches 4/4
100% Functions 8/8
100% Lines 19/19
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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122                                12x 12x                   12x             2471x 2471x             12x                                     12x         928x                       12x         921x                 12x 7589x           12x 1633x               12x 6607x           12x 2141x       12x  
/**
 * 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 { ChildrenNode } from '../snap/ChildrenNode';
import { CacheNode } from './CacheNode';
import { Node } from '../snap/Node';
 
/**
 * Stores the data we have cached for a view.
 *
 * serverSnap is the cached server data, eventSnap is the cached event data (server data plus any local writes).
 *
 * @constructor
 */
export class ViewCache {
  /**
   *
   * @param {!CacheNode} eventCache_
   * @param {!CacheNode} serverCache_
   */
  constructor(
    private readonly eventCache_: CacheNode,
    private readonly serverCache_: CacheNode
  ) {}
 
  /**
   * @const
   * @type {ViewCache}
   */
  static Empty = new ViewCache(
    new CacheNode(
      ChildrenNode.EMPTY_NODE,
      /*fullyInitialized=*/ false,
      /*filtered=*/ false
    ),
    new CacheNode(
      ChildrenNode.EMPTY_NODE,
      /*fullyInitialized=*/ false,
      /*filtered=*/ false
    )
  );
 
  /**
   * @param {!Node} eventSnap
   * @param {boolean} complete
   * @param {boolean} filtered
   * @return {!ViewCache}
   */
  updateEventSnap(
    eventSnap: Node,
    complete: boolean,
    filtered: boolean
  ): ViewCache {
    return new ViewCache(
      new CacheNode(eventSnap, complete, filtered),
      this.serverCache_
    );
  }
 
  /**
   * @param {!Node} serverSnap
   * @param {boolean} complete
   * @param {boolean} filtered
   * @return {!ViewCache}
   */
  updateServerSnap(
    serverSnap: Node,
    complete: boolean,
    filtered: boolean
  ): ViewCache {
    return new ViewCache(
      this.eventCache_,
      new CacheNode(serverSnap, complete, filtered)
    );
  }
 
  /**
   * @return {!CacheNode}
   */
  getEventCache(): CacheNode {
    return this.eventCache_;
  }
 
  /**
   * @return {?Node}
   */
  getCompleteEventSnap(): Node | null {
    return this.eventCache_.isFullyInitialized()
      ? this.eventCache_.getNode()
      : null;
  }
 
  /**
   * @return {!CacheNode}
   */
  getServerCache(): CacheNode {
    return this.serverCache_;
  }
 
  /**
   * @return {?Node}
   */
  getCompleteServerSnap(): Node | null {
    return this.serverCache_.isFullyInitialized()
      ? this.serverCache_.getNode()
      : null;
  }
}