export function outlineDiff(
  before: Record<string, any>,
  after: Record<string, any>
): string[] {
  const lines: string[] = [];

  const compareOutlines = (before: Record<string, any>, after: Record<string, any>, path: string) => {
    for (const key of Object.keys(after)) {
      if (!(key in before)) {
        lines.push(`added ${path}/${key}`);
      }
    }

    const commonKeys = Object.keys(before).filter(key => key in after);
    for (const key of commonKeys) {
      compareOutlines(before[key], after[key], `${path}/${key}`);
    }

    for (const key of Object.keys(before)) {
      if (!(key in after)) {
        lines.push(`removed ${path}/${key}`);
      }
    }
  };

  compareOutlines(before, after, "");

  return lines.sort();
}