move everything inside parser

This commit is contained in:
Pierric Cistac 2021-03-01 14:47:59 -05:00
parent b057c6f308
commit f220ca11e4
No known key found for this signature in database
GPG key ID: 9D98B3AF93C7362D
7 changed files with 24050 additions and 50 deletions

24020
package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -5,6 +5,7 @@ export interface DiffParserConfig {
srcPrefix?: string;
dstPrefix?: string;
diffMaxChanges?: number;
diffTooBigMessage?: (fileIndex: number) => string;
}
function getExtension(filename: string, language: string): string {
@ -226,13 +227,6 @@ export function parse(diffInput: string, config: DiffParserConfig = {}): DiffFil
currentLine.newNumber = newLine++;
}
currentBlock.lines.push(currentLine);
if (
typeof config.diffMaxChanges === 'number' &&
currentFile.addedLines + currentFile.deletedLines > config.diffMaxChanges
) {
currentFile.isTooBig = true;
currentFile.blocks = [];
}
}
/*
@ -312,6 +306,25 @@ export function parse(diffInput: string, config: DiffParserConfig = {}): DiffFil
return;
}
if (
currentFile &&
typeof config.diffMaxChanges === 'number' &&
currentFile.addedLines + currentFile.deletedLines > config.diffMaxChanges
) {
currentFile.isTooBig = true;
currentFile.addedLines = 0;
currentFile.deletedLines = 0;
currentFile.blocks = [];
currentBlock = null;
const message =
typeof config.diffTooBigMessage === 'function'
? config.diffTooBigMessage(files.length)
: 'Diff too big to be displayed';
startBlock(message);
return;
}
/*
* We need to make sure that we have the three lines of the header.
* This avoids cases like the ones described in:

View file

@ -41,11 +41,9 @@ export default class LineByLineRenderer {
render(diffFiles: DiffFile[]): string {
const diffsHtml = diffFiles
.map((file, fileIndex) => {
.map(file => {
let diffs;
if (file.isTooBig) {
diffs = this.generateTooBigDiff(fileIndex);
} else if (file.blocks.length) {
if (file.blocks.length) {
diffs = this.generateFileHtml(file);
} else {
diffs = this.generateEmptyDiff();
@ -81,14 +79,6 @@ export default class LineByLineRenderer {
});
}
generateTooBigDiff(fileIndex: number): string {
return this.hoganUtils.render(genericTemplatesPath, 'too-big-diff', {
contentClass: 'd2h-code-line',
CSSLineClass: renderUtils.CSSLineClass,
message: this.config.diffTooBigMessage(fileIndex),
});
}
generateEmptyDiff(): string {
return this.hoganUtils.render(genericTemplatesPath, 'empty-diff', {
contentClass: 'd2h-code-line',
@ -105,7 +95,7 @@ export default class LineByLineRenderer {
.map(block => {
let lines = this.hoganUtils.render(genericTemplatesPath, 'block-header', {
CSSLineClass: renderUtils.CSSLineClass,
blockHeader: renderUtils.escapeForHtml(block.header),
blockHeader: file.isTooBig ? block.header : renderUtils.escapeForHtml(block.header),
lineClass: 'd2h-code-linenumber',
contentClass: 'd2h-code-line',
});

View file

@ -36,7 +36,6 @@ export interface RenderConfig {
matching?: LineMatchingType;
matchWordsThreshold?: number;
maxLineLengthHighlight?: number;
diffTooBigMessage?: (fileIndex: number) => string;
diffStyle?: DiffStyleType;
}
@ -45,8 +44,6 @@ export const defaultRenderConfig = {
matchWordsThreshold: 0.25,
maxLineLengthHighlight: 10000,
diffStyle: DiffStyleType.WORD,
// eslint-disable-next-line
diffTooBigMessage: (_fileIndex: number): string => 'Diff too big to be displayed',
};
const separator = '/';

View file

@ -41,11 +41,9 @@ export default class SideBySideRenderer {
render(diffFiles: DiffFile[]): string {
const diffsHtml = diffFiles
.map((file, fileIndex) => {
.map(file => {
let diffs;
if (file.isTooBig) {
diffs = this.generateTooBigDiff(fileIndex);
} else if (file.blocks.length) {
if (file.blocks.length) {
diffs = this.generateFileHtml(file);
} else {
diffs = this.generateEmptyDiff();
@ -81,17 +79,6 @@ export default class SideBySideRenderer {
});
}
generateTooBigDiff(fileIndex: number): FileHtml {
return {
right: '',
left: this.hoganUtils.render(genericTemplatesPath, 'too-big-diff', {
contentClass: 'd2h-code-side-line',
CSSLineClass: renderUtils.CSSLineClass,
message: this.config.diffTooBigMessage(fileIndex),
}),
};
}
generateEmptyDiff(): FileHtml {
return {
right: '',
@ -110,7 +97,7 @@ export default class SideBySideRenderer {
return file.blocks
.map(block => {
const fileHtml = {
left: this.makeHeaderHtml(block.header),
left: this.makeHeaderHtml(block.header, file),
right: this.makeHeaderHtml(''),
};
@ -216,10 +203,10 @@ export default class SideBySideRenderer {
return doMatching ? matcher(oldLines, newLines) : [[oldLines, newLines]];
}
makeHeaderHtml(blockHeader: string): string {
makeHeaderHtml(blockHeader: string, file?: DiffFile): string {
return this.hoganUtils.render(genericTemplatesPath, 'block-header', {
CSSLineClass: renderUtils.CSSLineClass,
blockHeader: renderUtils.escapeForHtml(blockHeader),
blockHeader: file?.isTooBig ? blockHeader : renderUtils.escapeForHtml(blockHeader),
lineClass: 'd2h-code-side-linenumber',
contentClass: 'd2h-code-side-line',
});

View file

@ -1,7 +0,0 @@
<tr>
<td class="{{CSSLineClass.INFO}}">
<div class="{{contentClass}} {{CSSLineClass.INFO}}">
{{{message}}}
</div>
</td>
</tr>

View file

@ -120,10 +120,10 @@ function getConfiguration(urlParams: URLParams): Diff2HtmlUIConfig {
// Removing `diff` and `diffTooBigMessage` form `urlParams` to avoid being inserted
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { diff, diffTooBigMessage, ...urlParamsRest } = urlParams;
const config = ({
const config: URLParams = {
...defaultDiff2HtmlUIConfig,
...urlParamsRest,
} as unknown) as URLParams;
};
return Object.entries(config).reduce((object, [k, v]) => {
const newObject = !Number.isNaN(Number(v))