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): IDiffCharacter[]

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 IDiffCharacter objects (explained below)

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

Compares two strings by character and returns the longest common subsequence

Types

IDiffCharacter

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

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

for (const character of diffCharacters("boopa", "boop beep boppy")) {
  let finalString = "";
  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