Skip to content

Commit f220ca1

Browse files
committed
move everything inside parser
1 parent b057c6f commit f220ca1

File tree

7 files changed

+24050
-50
lines changed

7 files changed

+24050
-50
lines changed

package-lock.json

Lines changed: 24020 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/diff-parser.ts

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export interface DiffParserConfig {
55
srcPrefix?: string;
66
dstPrefix?: string;
77
diffMaxChanges?: number;
8+
diffTooBigMessage?: (fileIndex: number) => string;
89
}
910

1011
function getExtension(filename: string, language: string): string {
@@ -226,13 +227,6 @@ export function parse(diffInput: string, config: DiffParserConfig = {}): DiffFil
226227
currentLine.newNumber = newLine++;
227228
}
228229
currentBlock.lines.push(currentLine);
229-
if (
230-
typeof config.diffMaxChanges === 'number' &&
231-
currentFile.addedLines + currentFile.deletedLines > config.diffMaxChanges
232-
) {
233-
currentFile.isTooBig = true;
234-
currentFile.blocks = [];
235-
}
236230
}
237231

238232
/*
@@ -312,6 +306,25 @@ export function parse(diffInput: string, config: DiffParserConfig = {}): DiffFil
312306
return;
313307
}
314308

309+
if (
310+
currentFile &&
311+
typeof config.diffMaxChanges === 'number' &&
312+
currentFile.addedLines + currentFile.deletedLines > config.diffMaxChanges
313+
) {
314+
currentFile.isTooBig = true;
315+
currentFile.addedLines = 0;
316+
currentFile.deletedLines = 0;
317+
currentFile.blocks = [];
318+
currentBlock = null;
319+
320+
const message =
321+
typeof config.diffTooBigMessage === 'function'
322+
? config.diffTooBigMessage(files.length)
323+
: 'Diff too big to be displayed';
324+
startBlock(message);
325+
return;
326+
}
327+
315328
/*
316329
* We need to make sure that we have the three lines of the header.
317330
* This avoids cases like the ones described in:

src/line-by-line-renderer.ts

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,9 @@ export default class LineByLineRenderer {
4141

4242
render(diffFiles: DiffFile[]): string {
4343
const diffsHtml = diffFiles
44-
.map((file, fileIndex) => {
44+
.map(file => {
4545
let diffs;
46-
if (file.isTooBig) {
47-
diffs = this.generateTooBigDiff(fileIndex);
48-
} else if (file.blocks.length) {
46+
if (file.blocks.length) {
4947
diffs = this.generateFileHtml(file);
5048
} else {
5149
diffs = this.generateEmptyDiff();
@@ -81,14 +79,6 @@ export default class LineByLineRenderer {
8179
});
8280
}
8381

84-
generateTooBigDiff(fileIndex: number): string {
85-
return this.hoganUtils.render(genericTemplatesPath, 'too-big-diff', {
86-
contentClass: 'd2h-code-line',
87-
CSSLineClass: renderUtils.CSSLineClass,
88-
message: this.config.diffTooBigMessage(fileIndex),
89-
});
90-
}
91-
9282
generateEmptyDiff(): string {
9383
return this.hoganUtils.render(genericTemplatesPath, 'empty-diff', {
9484
contentClass: 'd2h-code-line',
@@ -105,7 +95,7 @@ export default class LineByLineRenderer {
10595
.map(block => {
10696
let lines = this.hoganUtils.render(genericTemplatesPath, 'block-header', {
10797
CSSLineClass: renderUtils.CSSLineClass,
108-
blockHeader: renderUtils.escapeForHtml(block.header),
98+
blockHeader: file.isTooBig ? block.header : renderUtils.escapeForHtml(block.header),
10999
lineClass: 'd2h-code-linenumber',
110100
contentClass: 'd2h-code-line',
111101
});

src/render-utils.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ export interface RenderConfig {
3636
matching?: LineMatchingType;
3737
matchWordsThreshold?: number;
3838
maxLineLengthHighlight?: number;
39-
diffTooBigMessage?: (fileIndex: number) => string;
4039
diffStyle?: DiffStyleType;
4140
}
4241

@@ -45,8 +44,6 @@ export const defaultRenderConfig = {
4544
matchWordsThreshold: 0.25,
4645
maxLineLengthHighlight: 10000,
4746
diffStyle: DiffStyleType.WORD,
48-
// eslint-disable-next-line
49-
diffTooBigMessage: (_fileIndex: number): string => 'Diff too big to be displayed',
5047
};
5148

5249
const separator = '/';

src/side-by-side-renderer.ts

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,9 @@ export default class SideBySideRenderer {
4141

4242
render(diffFiles: DiffFile[]): string {
4343
const diffsHtml = diffFiles
44-
.map((file, fileIndex) => {
44+
.map(file => {
4545
let diffs;
46-
if (file.isTooBig) {
47-
diffs = this.generateTooBigDiff(fileIndex);
48-
} else if (file.blocks.length) {
46+
if (file.blocks.length) {
4947
diffs = this.generateFileHtml(file);
5048
} else {
5149
diffs = this.generateEmptyDiff();
@@ -81,17 +79,6 @@ export default class SideBySideRenderer {
8179
});
8280
}
8381

84-
generateTooBigDiff(fileIndex: number): FileHtml {
85-
return {
86-
right: '',
87-
left: this.hoganUtils.render(genericTemplatesPath, 'too-big-diff', {
88-
contentClass: 'd2h-code-side-line',
89-
CSSLineClass: renderUtils.CSSLineClass,
90-
message: this.config.diffTooBigMessage(fileIndex),
91-
}),
92-
};
93-
}
94-
9582
generateEmptyDiff(): FileHtml {
9683
return {
9784
right: '',
@@ -110,7 +97,7 @@ export default class SideBySideRenderer {
11097
return file.blocks
11198
.map(block => {
11299
const fileHtml = {
113-
left: this.makeHeaderHtml(block.header),
100+
left: this.makeHeaderHtml(block.header, file),
114101
right: this.makeHeaderHtml(''),
115102
};
116103

@@ -216,10 +203,10 @@ export default class SideBySideRenderer {
216203
return doMatching ? matcher(oldLines, newLines) : [[oldLines, newLines]];
217204
}
218205

219-
makeHeaderHtml(blockHeader: string): string {
206+
makeHeaderHtml(blockHeader: string, file?: DiffFile): string {
220207
return this.hoganUtils.render(genericTemplatesPath, 'block-header', {
221208
CSSLineClass: renderUtils.CSSLineClass,
222-
blockHeader: renderUtils.escapeForHtml(blockHeader),
209+
blockHeader: file?.isTooBig ? blockHeader : renderUtils.escapeForHtml(blockHeader),
223210
lineClass: 'd2h-code-side-linenumber',
224211
contentClass: 'd2h-code-side-line',
225212
});

src/templates/generic-too-big-diff.mustache

Lines changed: 0 additions & 7 deletions
This file was deleted.

website/templates/pages/demo/demo.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,10 @@ function getConfiguration(urlParams: URLParams): Diff2HtmlUIConfig {
120120
// Removing `diff` and `diffTooBigMessage` form `urlParams` to avoid being inserted
121121
// eslint-disable-next-line @typescript-eslint/no-unused-vars
122122
const { diff, diffTooBigMessage, ...urlParamsRest } = urlParams;
123-
const config = ({
123+
const config: URLParams = {
124124
...defaultDiff2HtmlUIConfig,
125125
...urlParamsRest,
126-
} as unknown) as URLParams;
126+
};
127127

128128
return Object.entries(config).reduce((object, [k, v]) => {
129129
const newObject = !Number.isNaN(Number(v))

0 commit comments

Comments
 (0)