public mergeItem()

in lib/generator/exampleCache.ts [101:136]


  public mergeItem(target: CacheItem, source: CacheItem): CacheItem {
    const result = target;
    if (!source || !target) {
      return target ? target : source;
    }

    if (Array.isArray(result.child) && Array.isArray(source.child)) {
      const resultArr = result.child as CacheItem[];
      const sourceArr = source.child as CacheItem[];
      if (resultArr.length === 0 || sourceArr.length === 0) {
        return resultArr.length === 0 ? source : result;
      }
      // only when source is not mocked and target is mocked , choose source cache.
      if (resultArr[0].isMocked && !sourceArr[0].isMocked) {
        return source;
      }
      for (let i = 0; i < resultArr.length; i++) {
        if (i < sourceArr.length) {
          resultArr[i] = this.mergeItem(resultArr[i], sourceArr[i]);
        }
      }
    } else if (source.child && result.child) {
      const resultObj = result.child as CacheItemObject;
      const sourceObj = source.child as CacheItemObject;
      for (const key of Object.keys(sourceObj)) {
        if (!resultObj[key]) {
          resultObj[key] = sourceObj[key];
        } else {
          resultObj[key] = this.mergeItem(resultObj[key], sourceObj[key]);
        }
      }
    } else {
      return result.isMocked && !source.isMocked ? source : result;
    }
    return result;
  }