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;
|
srcPrefix?: string;
|
||||||
dstPrefix?: string;
|
dstPrefix?: string;
|
||||||
diffMaxChanges?: number;
|
diffMaxChanges?: number;
|
||||||
|
diffTooBigMessage?: (fileIndex: number) => string;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getExtension(filename: string, language: string): string {
|
function getExtension(filename: string, language: string): string {
|
||||||
|
|
@ -226,13 +227,6 @@ export function parse(diffInput: string, config: DiffParserConfig = {}): DiffFil
|
||||||
currentLine.newNumber = newLine++;
|
currentLine.newNumber = newLine++;
|
||||||
}
|
}
|
||||||
currentBlock.lines.push(currentLine);
|
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;
|
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.
|
* We need to make sure that we have the three lines of the header.
|
||||||
* This avoids cases like the ones described in:
|
* This avoids cases like the ones described in:
|
||||||
|
|
|
||||||
|
|
@ -41,11 +41,9 @@ export default class LineByLineRenderer {
|
||||||
|
|
||||||
render(diffFiles: DiffFile[]): string {
|
render(diffFiles: DiffFile[]): string {
|
||||||
const diffsHtml = diffFiles
|
const diffsHtml = diffFiles
|
||||||
.map((file, fileIndex) => {
|
.map(file => {
|
||||||
let diffs;
|
let diffs;
|
||||||
if (file.isTooBig) {
|
if (file.blocks.length) {
|
||||||
diffs = this.generateTooBigDiff(fileIndex);
|
|
||||||
} else if (file.blocks.length) {
|
|
||||||
diffs = this.generateFileHtml(file);
|
diffs = this.generateFileHtml(file);
|
||||||
} else {
|
} else {
|
||||||
diffs = this.generateEmptyDiff();
|
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 {
|
generateEmptyDiff(): string {
|
||||||
return this.hoganUtils.render(genericTemplatesPath, 'empty-diff', {
|
return this.hoganUtils.render(genericTemplatesPath, 'empty-diff', {
|
||||||
contentClass: 'd2h-code-line',
|
contentClass: 'd2h-code-line',
|
||||||
|
|
@ -105,7 +95,7 @@ export default class LineByLineRenderer {
|
||||||
.map(block => {
|
.map(block => {
|
||||||
let lines = this.hoganUtils.render(genericTemplatesPath, 'block-header', {
|
let lines = this.hoganUtils.render(genericTemplatesPath, 'block-header', {
|
||||||
CSSLineClass: renderUtils.CSSLineClass,
|
CSSLineClass: renderUtils.CSSLineClass,
|
||||||
blockHeader: renderUtils.escapeForHtml(block.header),
|
blockHeader: file.isTooBig ? block.header : renderUtils.escapeForHtml(block.header),
|
||||||
lineClass: 'd2h-code-linenumber',
|
lineClass: 'd2h-code-linenumber',
|
||||||
contentClass: 'd2h-code-line',
|
contentClass: 'd2h-code-line',
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,6 @@ export interface RenderConfig {
|
||||||
matching?: LineMatchingType;
|
matching?: LineMatchingType;
|
||||||
matchWordsThreshold?: number;
|
matchWordsThreshold?: number;
|
||||||
maxLineLengthHighlight?: number;
|
maxLineLengthHighlight?: number;
|
||||||
diffTooBigMessage?: (fileIndex: number) => string;
|
|
||||||
diffStyle?: DiffStyleType;
|
diffStyle?: DiffStyleType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -45,8 +44,6 @@ export const defaultRenderConfig = {
|
||||||
matchWordsThreshold: 0.25,
|
matchWordsThreshold: 0.25,
|
||||||
maxLineLengthHighlight: 10000,
|
maxLineLengthHighlight: 10000,
|
||||||
diffStyle: DiffStyleType.WORD,
|
diffStyle: DiffStyleType.WORD,
|
||||||
// eslint-disable-next-line
|
|
||||||
diffTooBigMessage: (_fileIndex: number): string => 'Diff too big to be displayed',
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const separator = '/';
|
const separator = '/';
|
||||||
|
|
|
||||||
|
|
@ -41,11 +41,9 @@ export default class SideBySideRenderer {
|
||||||
|
|
||||||
render(diffFiles: DiffFile[]): string {
|
render(diffFiles: DiffFile[]): string {
|
||||||
const diffsHtml = diffFiles
|
const diffsHtml = diffFiles
|
||||||
.map((file, fileIndex) => {
|
.map(file => {
|
||||||
let diffs;
|
let diffs;
|
||||||
if (file.isTooBig) {
|
if (file.blocks.length) {
|
||||||
diffs = this.generateTooBigDiff(fileIndex);
|
|
||||||
} else if (file.blocks.length) {
|
|
||||||
diffs = this.generateFileHtml(file);
|
diffs = this.generateFileHtml(file);
|
||||||
} else {
|
} else {
|
||||||
diffs = this.generateEmptyDiff();
|
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 {
|
generateEmptyDiff(): FileHtml {
|
||||||
return {
|
return {
|
||||||
right: '',
|
right: '',
|
||||||
|
|
@ -110,7 +97,7 @@ export default class SideBySideRenderer {
|
||||||
return file.blocks
|
return file.blocks
|
||||||
.map(block => {
|
.map(block => {
|
||||||
const fileHtml = {
|
const fileHtml = {
|
||||||
left: this.makeHeaderHtml(block.header),
|
left: this.makeHeaderHtml(block.header, file),
|
||||||
right: this.makeHeaderHtml(''),
|
right: this.makeHeaderHtml(''),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -216,10 +203,10 @@ export default class SideBySideRenderer {
|
||||||
return doMatching ? matcher(oldLines, newLines) : [[oldLines, newLines]];
|
return doMatching ? matcher(oldLines, newLines) : [[oldLines, newLines]];
|
||||||
}
|
}
|
||||||
|
|
||||||
makeHeaderHtml(blockHeader: string): string {
|
makeHeaderHtml(blockHeader: string, file?: DiffFile): string {
|
||||||
return this.hoganUtils.render(genericTemplatesPath, 'block-header', {
|
return this.hoganUtils.render(genericTemplatesPath, 'block-header', {
|
||||||
CSSLineClass: renderUtils.CSSLineClass,
|
CSSLineClass: renderUtils.CSSLineClass,
|
||||||
blockHeader: renderUtils.escapeForHtml(blockHeader),
|
blockHeader: file?.isTooBig ? blockHeader : renderUtils.escapeForHtml(blockHeader),
|
||||||
lineClass: 'd2h-code-side-linenumber',
|
lineClass: 'd2h-code-side-linenumber',
|
||||||
contentClass: 'd2h-code-side-line',
|
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
|
// Removing `diff` and `diffTooBigMessage` form `urlParams` to avoid being inserted
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
const { diff, diffTooBigMessage, ...urlParamsRest } = urlParams;
|
const { diff, diffTooBigMessage, ...urlParamsRest } = urlParams;
|
||||||
const config = ({
|
const config: URLParams = {
|
||||||
...defaultDiff2HtmlUIConfig,
|
...defaultDiff2HtmlUIConfig,
|
||||||
...urlParamsRest,
|
...urlParamsRest,
|
||||||
} as unknown) as URLParams;
|
};
|
||||||
|
|
||||||
return Object.entries(config).reduce((object, [k, v]) => {
|
return Object.entries(config).reduce((object, [k, v]) => {
|
||||||
const newObject = !Number.isNaN(Number(v))
|
const newObject = !Number.isNaN(Number(v))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue