43 lines
1.7 KiB
TypeScript
43 lines
1.7 KiB
TypeScript
import * as DiffParser from './diff-parser';
|
|
import * as fileListPrinter from './file-list-renderer';
|
|
import LineByLineRenderer, { LineByLineRendererConfig, defaultLineByLineRendererConfig } from './line-by-line-renderer';
|
|
import SideBySideRenderer, { SideBySideRendererConfig, defaultSideBySideRendererConfig } from './side-by-side-renderer';
|
|
import { DiffFile, OutputFormatType } from './types';
|
|
import HoganJsUtils, { HoganJsUtilsConfig } from './hoganjs-utils';
|
|
|
|
export interface Diff2HtmlConfig
|
|
extends DiffParser.DiffParserConfig,
|
|
LineByLineRendererConfig,
|
|
SideBySideRendererConfig,
|
|
HoganJsUtilsConfig {
|
|
outputFormat?: OutputFormatType;
|
|
drawFileList?: boolean;
|
|
}
|
|
|
|
export const defaultDiff2HtmlConfig = {
|
|
...defaultLineByLineRendererConfig,
|
|
...defaultSideBySideRendererConfig,
|
|
outputFormat: OutputFormatType.LINE_BY_LINE,
|
|
drawFileList: true,
|
|
};
|
|
|
|
export function parse(diffInput: string, configuration: Diff2HtmlConfig = {}): DiffFile[] {
|
|
return DiffParser.parse(diffInput, { ...defaultDiff2HtmlConfig, ...configuration });
|
|
}
|
|
|
|
export function html(diffInput: string | DiffFile[], configuration: Diff2HtmlConfig = {}): string {
|
|
const config = { ...defaultDiff2HtmlConfig, ...configuration };
|
|
|
|
const diffJson = typeof diffInput === 'string' ? DiffParser.parse(diffInput, config) : diffInput;
|
|
|
|
const hoganUtils = new HoganJsUtils(config);
|
|
|
|
const fileList = config.drawFileList ? fileListPrinter.render(diffJson, hoganUtils) : '';
|
|
|
|
const diffOutput =
|
|
config.outputFormat === 'side-by-side'
|
|
? new SideBySideRenderer(hoganUtils, config).render(diffJson)
|
|
: new LineByLineRenderer(hoganUtils, config).render(diffJson);
|
|
|
|
return fileList + diffOutput;
|
|
}
|