/
normalizeDiffOptions.ts
69 lines (61 loc) · 1.92 KB
/
normalizeDiffOptions.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import type { CompareKeys } from 'pretty-format'
import { getColors } from '../colors'
import type { DiffOptions, DiffOptionsNormalized } from './types'
export const noColor = (string: string): string => string
const DIFF_CONTEXT_DEFAULT = 5
const DIFF_TRUNCATE_THRESHOLD_DEFAULT = 0 // not truncate
function getDefaultOptions(): DiffOptionsNormalized {
const c = getColors()
return {
aAnnotation: 'Expected',
aColor: c.green,
aIndicator: '-',
bAnnotation: 'Received',
bColor: c.red,
bIndicator: '+',
changeColor: c.inverse,
changeLineTrailingSpaceColor: noColor,
commonColor: c.dim,
commonIndicator: ' ',
commonLineTrailingSpaceColor: noColor,
compareKeys: undefined,
contextLines: DIFF_CONTEXT_DEFAULT,
emptyFirstOrLastLinePlaceholder: '',
expand: true,
includeChangeCounts: false,
omitAnnotationLines: false,
patchColor: c.yellow,
truncateThreshold: DIFF_TRUNCATE_THRESHOLD_DEFAULT,
truncateAnnotation: '... Diff result is truncated',
truncateAnnotationColor: noColor,
}
}
function getCompareKeys(compareKeys?: CompareKeys): CompareKeys {
return (compareKeys && typeof compareKeys === 'function')
? compareKeys
: undefined
}
function getContextLines(contextLines?: number): number {
return (
typeof contextLines === 'number'
&& Number.isSafeInteger(contextLines)
&& contextLines >= 0
)
? contextLines
: DIFF_CONTEXT_DEFAULT
}
// Pure function returns options with all properties.
export function normalizeDiffOptions(options: DiffOptions = {}): DiffOptionsNormalized {
return {
...getDefaultOptions(),
...options,
compareKeys: getCompareKeys(options.compareKeys),
contextLines: getContextLines(options.contextLines),
}
}