diff

Deno library for usage of diff Based on the O(n * m) DP solution to the LCS problem

import { diffCharacters } from "https://deno.land/x/diff/mod.ts";

diffCharacters("ABCBDAB", "BDCABA");

API

diffCharacters(oldString: string, newString: string, ignoreCase = false): DiffCharacter[]

Compares two strings by character and returns a list

oldString: The string to be transformed

newString: The string to be transformed into

ignoreCase: Whether case differences should be taken into account

Returns an array of DiffCharacter objects (explained below)

longestCommonSubsequence(a: string, b: string, ignoreCase = false)

Compares two strings by character and returns the longest common subsequence

Types

DiffCharacter

{
  character:
  string;
  wasAdded:
  boolean;
  wasRemoved:
  boolean;
}

The object contains the character and whether that character was removed, added, or neither. Here is example usage

let finalString = "";
for (const character of diffCharacters("boopa", "boop beep boppy")) {
  if (character.wasRemoved) {
    // print red if removed without newline
    finalString += `\x1b[31m${character.character}\x1b[0m`;
  } else if (character.wasAdded) {
    // print green if added
    finalString += `\x1b[32m${character.character}\x1b[0m`;
  } else {
    // print white if unchanged
    finalString += `\x1b[37m${character.character}\x1b[0m`;
  }
}
console.log(finalString);

image