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;
}