@baseplate-dev/sync
Version:
Library for syncing Baseplate descriptions
28 lines • 948 B
JavaScript
import jsonPatch from 'fast-json-patch';
/**
* Merges JSON strings using a 3-way merge algorithm
*/
export const jsonMergeAlgorithm = (input) => {
try {
const originalJson = JSON.parse(input.previousGeneratedText);
const newJson = JSON.parse(input.currentGeneratedText);
const existingJson = JSON.parse(input.previousWorkingText);
const diff = jsonPatch.compare(originalJson, newJson, true);
if (diff.length === 0) {
return {
mergedText: input.previousWorkingText,
hasConflict: false,
};
}
const result = JSON.stringify(jsonPatch.applyPatch(existingJson, diff, true, false).newDocument, null, 2);
return {
mergedText: result,
hasConflict: false,
};
}
catch {
// default to merge strings method if patching fails
return null;
}
};
//# sourceMappingURL=json.js.map