move everything inside parser
This commit is contained in:
parent
b057c6f308
commit
f220ca11e4
7 changed files with 24050 additions and 50 deletions
24020
package-lock.json
generated
Normal file
24020
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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 = '/';
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
<tr>
|
||||
<td class="{{CSSLineClass.INFO}}">
|
||||
<div class="{{contentClass}} {{CSSLineClass.INFO}}">
|
||||
{{{message}}}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -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))
|
||||
|
|
|
|||
Loading…
Reference in a new issue