Prettier: Upgrade to 2 (#30387)

* Updated package json but not updated source files

* Update eslint plugin

* updated files
This commit is contained in:
Torkel Ödegaard
2021-01-20 07:59:48 +01:00
committed by GitHub
parent f27450ed94
commit 1d689888b0
1069 changed files with 4370 additions and 5260 deletions
@@ -41,8 +41,8 @@ function getAccessors() {
getBottomRowIndexVisible: jest.fn(),
getTopRowIndexVisible: jest.fn(),
getRowPosition: jest.fn(),
mapRowIndexToSpanIndex: jest.fn(n => n),
mapSpanIndexToRowIndex: jest.fn(n => n),
mapRowIndexToSpanIndex: jest.fn((n) => n),
mapSpanIndexToRowIndex: jest.fn((n) => n),
};
}
@@ -158,7 +158,7 @@ export default class ScrollManager {
const childrenAreHidden = _collapsed ? new Set(_collapsed) : null;
// use empty Map as fallback to make flow happy
const spansMap: Map<string, TraceSpan> = childrenAreHidden
? new Map(spans.map(s => [s.spanID, s] as [string, TraceSpan]))
? new Map(spans.map((s) => [s.spanID, s] as [string, TraceSpan]))
: new Map();
const boundary = direction < 0 ? -1 : spans.length;
let nextSpanIndex: number | undefined;
@@ -178,7 +178,7 @@ export default class ScrollManager {
// make sure the span is not collapsed
const { isHidden, parentIDs } = isSpanHidden(span, childrenAreHidden, spansMap);
if (isHidden) {
parentIDs.forEach(id => childrenAreHidden.add(id));
parentIDs.forEach((id) => childrenAreHidden.add(id));
continue;
}
}
@@ -195,7 +195,7 @@ export default class ScrollManager {
do {
const { isHidden, parentIDs } = isSpanHidden(spans[nextSpanIndex], childrenAreHidden, spansMap);
if (isHidden) {
parentIDs.forEach(id => childrenAreHidden.add(id));
parentIDs.forEach((id) => childrenAreHidden.add(id));
nextSpanIndex--;
}
isFallbackHidden = isHidden;
+1 -1
View File
@@ -130,7 +130,7 @@ type WrappedWithThemeComponent<Props> = React.ComponentType<Omit<Props, 'theme'>
export const withTheme = <Props extends { theme: Theme }, Statics extends {} = {}>(
Component: React.ComponentType<Props>
): WrappedWithThemeComponent<Props> => {
let WithTheme: React.ComponentType<Omit<Props, 'theme'>> = props => {
let WithTheme: React.ComponentType<Omit<Props, 'theme'>> = (props) => {
return (
<ThemeConsumer>
{(theme: Theme) => {
@@ -231,7 +231,7 @@ describe('<SpanGraph>', () => {
viewRangeUpdate: { shiftEnd: value },
},
];
cases.forEach(_case => {
cases.forEach((_case) => {
instance._handleScrubberDragUpdate(_case.dragUpdate);
expect(props.updateNextViewRangeTime).lastCalledWith(_case.viewRangeUpdate);
});
@@ -260,7 +260,7 @@ describe('<SpanGraph>', () => {
viewRangeUpdate: [viewStart, value],
},
];
cases.forEach(_case => {
cases.forEach((_case) => {
const { manager } = _case.dragUpdate;
wrapper.setState({ preventCursorLine: true });
expect(wrapper.state('preventCursorLine')).toBe(true);
@@ -66,7 +66,7 @@ describe('<SpanGraph>', () => {
it('passes items to CanvasSpanGraph', () => {
const canvasGraph = wrapper.find(CanvasSpanGraph).first();
const items = trace.spans.map(span => ({
const items = trace.spans.map((span) => ({
valueOffset: span.relativeStartTime,
valueWidth: span.duration,
serviceName: span.process.serviceName,
@@ -25,7 +25,7 @@ import renderIntoCanvas, {
} from './render-into-canvas';
const getCanvasWidth = () => window.innerWidth * 2;
const getBgFillRect = items => ({
const getBgFillRect = (items) => ({
fillStyle: BG_COLOR,
height: !items || items.length < MIN_TOTAL_HEIGHT ? MIN_TOTAL_HEIGHT : Math.min(MAX_TOTAL_HEIGHT, items.length),
width: getCanvasWidth(),
@@ -163,7 +163,7 @@ describe('renderIntoCanvas()', () => {
it('draws the map', () => {
const totalValueWidth = 4000;
const items = _range(MIN_TOTAL_HEIGHT * 10).map(i => ({
const items = _range(MIN_TOTAL_HEIGHT * 10).map((i) => ({
valueWidth: i,
valueOffset: i,
serviceName: `service-name-${i}`,
@@ -51,9 +51,7 @@ export default function renderIntoCanvas(
}
let fillStyle = fillCache.get(serviceName);
if (!fillStyle) {
fillStyle = `rgba(${getFillColor(serviceName)
.concat(ITEM_ALPHA)
.join()})`;
fillStyle = `rgba(${getFillColor(serviceName).concat(ITEM_ALPHA).join()})`;
fillCache.set(serviceName, fillStyle);
}
ctx.fillStyle = fillStyle;
@@ -185,7 +185,7 @@ export const HEADER_ITEMS = [
{
key: 'service-count',
label: 'Services',
renderer: (trace: Trace) => new Set(_values(trace.processes).map(p => p.serviceName)).size,
renderer: (trace: Trace) => new Set(_values(trace.processes).map((p) => p.serviceName)).size,
},
{
key: 'depth',
@@ -237,7 +237,7 @@ export default function TracePageHeader(props: TracePageHeaderEmbedProps) {
const summaryItems =
!hideSummary &&
!slimView &&
HEADER_ITEMS.map(item => {
HEADER_ITEMS.map((item) => {
const { renderer, ...rest } = item;
return { ...rest, value: renderer(trace, styles) };
});
@@ -52,7 +52,7 @@ describe('<TracePageSearchBar>', () => {
it('renders buttons', () => {
const buttons = wrapper.find('UIButton');
expect(buttons.length).toBe(4);
buttons.forEach(button => {
buttons.forEach((button) => {
expect(button.hasClass(getStyles().TracePageSearchBarBtn)).toBe(true);
expect(button.hasClass(getStyles().TracePageSearchBarBtnDisabled)).toBe(false);
expect(button.prop('disabled')).toBe(false);
@@ -82,7 +82,7 @@ describe('<TracePageSearchBar>', () => {
it('renders buttons', () => {
const buttons = wrapper.find('UIButton');
expect(buttons.length).toBe(4);
buttons.forEach(button => {
buttons.forEach((button) => {
expect(button.hasClass(getStyles().TracePageSearchBarBtn)).toBe(true);
expect(button.hasClass(getStyles().TracePageSearchBarBtnDisabled)).toBe(true);
expect(button.prop('disabled')).toBe(true);
@@ -16,7 +16,7 @@ import Positions from './Positions';
describe('Positions', () => {
const bufferLen = 1;
const getHeight = i => i * 2 + 2;
const getHeight = (i) => i * 2 + 2;
let ps;
beforeEach(() => {
@@ -236,7 +236,7 @@ describe('Positions', () => {
it('cascades difference in observed height vs known height to known y-values', () => {
const getLargerHeight = () => simpleGetHeight() + 2;
const knownYs = ps.ys.slice();
const expectedYValues = knownYs.map(value => (value ? value + 2 : value));
const expectedYValues = knownYs.map((value) => (value ? value + 2 : value));
ps.confirmHeight(0, getLargerHeight);
expect(ps.ys).toEqual(expectedYValues);
});
@@ -114,7 +114,7 @@ describe('<ListView>', () => {
let oldRender;
let oldInitWrapper;
const initWrapperMock = jest.fn(elm => {
const initWrapperMock = jest.fn((elm) => {
if (elm != null) {
// jsDom requires `defineProperties` instead of just setting the props
Object.defineProperties(elm, {
@@ -201,7 +201,7 @@ describe('<ListView>', () => {
expect(eventListeners.scroll).toEqual([instance._onScroll]);
});
it('calls _positionList when the document is scrolled', done => {
it('calls _positionList when the document is scrolled', (done) => {
const event = new Event('scroll');
const fn = jest.spyOn(instance, '_positionList');
expect(instance._isScrolledOrResized).toBe(false);
@@ -81,12 +81,8 @@ describe(ReferencesButton, () => {
submenuItems.forEach((submenuItem, i) => {
expect(submenuItem.find(ReferenceLink).prop('reference')).toBe(moreReferences[i]);
});
expect(
submenuItems
.at(2)
.find(ReferenceLink)
.childAt(0)
.text()
).toBe(`(another trace) - ${moreReferences[2].spanID}`);
expect(submenuItems.at(2).find(ReferenceLink).childAt(0).text()).toBe(
`(another trace) - ${moreReferences[2].spanID}`
);
});
});
@@ -55,7 +55,7 @@ export default class ReferencesButton extends React.PureComponent<TReferencesBut
const styles = getStyles();
return (
<UIMenu>
{references.map(ref => {
{references.map((ref) => {
const { span, spanID } = ref;
return (
<UIMenuItem key={`${spanID}`}>
@@ -29,7 +29,7 @@ describe('<SpanBar>', () => {
hintSide: 'right',
viewEnd: 1,
viewStart: 0,
getViewedBounds: s => {
getViewedBounds: (s) => {
// Log entries
if (s === 10) {
return { start: 0.1, end: 0.1 };
@@ -150,7 +150,7 @@ function SpanBar(props: TInnerProps) {
labelClassName,
} = props;
// group logs based on timestamps
const logGroups = _groupBy(span.logs, log => {
const logGroups = _groupBy(span.logs, (log) => {
const posPercent = getViewedBounds(log.timestamp, log.timestamp).start;
// round to the nearest 0.2%
return toPercent(Math.round(posPercent * 500) / 500);
@@ -180,7 +180,7 @@ function SpanBar(props: TInnerProps) {
</div>
</div>
<div>
{Object.keys(logGroups).map(positionKey => (
{Object.keys(logGroups).map((positionKey) => (
<UIPopover
key={positionKey}
arrowPointAtCenter
@@ -453,7 +453,7 @@ export class UnthemedSpanBarRow extends React.PureComponent<SpanBarRowProps> {
rel="noopener noreferrer"
onClick={
link.onClick
? event => {
? (event) => {
if (!(event.ctrlKey || event.metaKey || event.shiftKey) && link.onClick) {
event.preventDefault();
link.onClick(event);
@@ -47,8 +47,8 @@ describe('<KeyValuesSummary>', () => {
});
it('renders the data as text', () => {
const texts = wrapper.find('li').map(node => node.text());
const expectedTexts = tags.map(tag => `${tag.key}=${tag.value}`);
const texts = wrapper.find('li').map((node) => node.text());
const expectedTexts = tags.map((tag) => `${tag.key}=${tag.value}`);
expect(texts).toEqual(expectedTexts);
});
});
@@ -87,7 +87,7 @@ export function References(props: ReferenceItemProps) {
return (
<div className={cx(styles.ReferencesList)}>
<ul className={styles.list}>
{data.map(reference => {
{data.map((reference) => {
return (
<li className={styles.item} key={`${reference.spanID}`}>
<ReferenceLink reference={reference} focusSpan={focusSpan}>
@@ -89,13 +89,7 @@ describe('<KeyValuesTable>', () => {
expect(anchor).toHaveLength(1);
expect(anchor.prop('href')).toBe('http://example.com/?kind=client');
expect(anchor.prop('title')).toBe('More info about client');
expect(
anchor
.closest('tr')
.find('td')
.first()
.text()
).toBe('span.kind');
expect(anchor.closest('tr').find('td').first().text()).toBe('span.kind');
});
it('renders multiple links correctly', () => {
@@ -127,13 +121,7 @@ describe('<KeyValuesTable>', () => {
const secondAnchor = anchors.last();
expect(secondAnchor.prop('href')).toBe('http://example.com/2?kind=client');
expect(secondAnchor.children().text()).toBe('Example 2');
expect(
dropdown
.closest('tr')
.find('td')
.first()
.text()
).toBe('span.kind');
expect(dropdown.closest('tr').find('td').first().text()).toBe('span.kind');
});
it('renders a <CopyIcon /> with correct copyText for each data element', () => {
@@ -32,11 +32,7 @@ describe('<SpanDetail>', () => {
// use `transformTraceData` on a fake trace to get a fully processed span
const span = transformTraceData(traceGenerator.trace({ numberOfSpans: 1 })).spans[0];
const detailState = new DetailState()
.toggleLogs()
.toggleProcess()
.toggleReferences()
.toggleTags();
const detailState = new DetailState().toggleLogs().toggleProcess().toggleReferences().toggleTags();
const traceStartTime = 5;
const props = {
detailState,
@@ -133,7 +129,7 @@ describe('<SpanDetail>', () => {
expect(
overview
.prop('items')
.map(item => item.label)
.map((item) => item.label)
.sort()
).toEqual(words);
});
@@ -185,11 +181,6 @@ describe('<SpanDetail>', () => {
});
it('renders CopyIcon with deep link URL', () => {
expect(
wrapper
.find(CopyIcon)
.prop('copyText')
.includes(`?uiFind=${props.span.spanID}`)
).toBe(true);
expect(wrapper.find(CopyIcon).prop('copyText').includes(`?uiFind=${props.span.spanID}`)).toBe(true);
});
});
@@ -206,7 +206,7 @@ export default function SpanDetail(props: SpanDetailProps) {
isOpen={logsState.isOpen}
openedItems={logsState.openedItems}
onToggle={() => logsToggle(spanID)}
onItemToggle={logItem => logItemToggle(spanID, logItem)}
onItemToggle={(logItem) => logItemToggle(spanID, logItem)}
timestamp={traceStartTime}
/>
)}
@@ -225,7 +225,7 @@ export default function SpanDetail(props: SpanDetailProps) {
label="Stack trace"
data={stackTraces}
isOpen={isStackTracesOpen}
TextComponent={textComponentProps => {
TextComponent={(textComponentProps) => {
let text;
if (textComponentProps.data?.length > 1) {
text = textComponentProps.data
@@ -141,7 +141,7 @@ export class UnthemedSpanTreeOffset extends React.PureComponent<TProps> {
const styles = getStyles(theme);
return (
<span className={cx(styles.SpanTreeOffset, { [styles.SpanTreeOffsetParent]: hasChildren })} {...wrapperProps}>
{this.ancestorIds.map(ancestorId => (
{this.ancestorIds.map((ancestorId) => (
<span
key={ancestorId}
className={cx(styles.indentGuide, {
@@ -149,15 +149,15 @@ export class UnthemedSpanTreeOffset extends React.PureComponent<TProps> {
})}
data-ancestor-id={ancestorId}
data-test-id="SpanTreeOffset--indentGuide"
onMouseEnter={event => this.handleMouseEnter(event, ancestorId)}
onMouseLeave={event => this.handleMouseLeave(event, ancestorId)}
onMouseEnter={(event) => this.handleMouseEnter(event, ancestorId)}
onMouseLeave={(event) => this.handleMouseLeave(event, ancestorId)}
/>
))}
{icon && (
<span
className={styles.iconWrapper}
onMouseEnter={event => this.handleMouseEnter(event, spanID)}
onMouseLeave={event => this.handleMouseLeave(event, spanID)}
onMouseEnter={(event) => this.handleMouseEnter(event, spanID)}
onMouseLeave={(event) => this.handleMouseLeave(event, spanID)}
data-test-id="icon-wrapper"
>
{icon}
@@ -84,7 +84,7 @@ describe('<VirtualizedTraceViewImpl>', () => {
beforeEach(() => {
SpanTreeOffset.mockReturnValue(<div />);
Object.keys(props).forEach(key => {
Object.keys(props).forEach((key) => {
if (typeof props[key] === 'function') {
props[key].mockReset();
}
@@ -71,7 +71,7 @@ describe('TraceTimelineViewer/utils', () => {
{ fn: isErrorSpan, name: 'isErrorSpan', key: 'error', value: 'true' },
];
spanTypeTestCases.forEach(testCase => {
spanTypeTestCases.forEach((testCase) => {
const msg = `${testCase.name}() is true only when a ${testCase.key}=${testCase.value} tag is present`;
it(msg, () => {
const span = { tags: traceGenerator.tags() };
@@ -85,7 +85,7 @@ describe('TraceTimelineViewer/utils', () => {
describe('spanContainsErredSpan()', () => {
it('returns true only when a descendant has an error tag', () => {
const errorTag = { key: 'error', type: 'bool', value: true };
const getTags = withError => (withError ? traceGenerator.tags().concat(errorTag) : traceGenerator.tags());
const getTags = (withError) => (withError ? traceGenerator.tags().concat(errorTag) : traceGenerator.tags());
// Using a string to generate the test spans. Each line results in a span. The
// left number indicates whether or not the generated span has a descendant
@@ -107,10 +107,10 @@ describe('TraceTimelineViewer/utils', () => {
`
.trim()
.split('\n')
.map(s => s.trim());
.map((s) => s.trim());
// Get the expectation, str -> number -> bool
const expectations = config.map(s => Boolean(Number(s[0])));
const spans = config.map(line => ({
const expectations = config.map((s) => Boolean(Number(s[0])));
const spans = config.map((line) => ({
depth: line.length,
tags: getTags(+line.slice(-1)),
}));
@@ -61,7 +61,7 @@ export function spanHasTag(key: string, value: any, span: TraceSpan) {
if (!Array.isArray(span.tags) || !span.tags.length) {
return false;
}
return span.tags.some(tag => tag.key === key && tag.value === value);
return span.tags.some((tag) => tag.key === key && tag.value === value);
}
export const isClientSpan = spanHasTag.bind(null, 'span.kind', 'client');
@@ -111,7 +111,7 @@ describe('Tween', () => {
describe('_frameCallback', () => {
it('freezes the callback argument', () => {
let current;
const fn = jest.fn(_current => {
const fn = jest.fn((_current) => {
current = _current;
});
const tween = new Tween({ ...baseOptions, onUpdate: fn });
@@ -38,7 +38,7 @@ describe('UiFindInput', () => {
let wrapper;
beforeAll(() => {
debounceMock.mockImplementation(fn => {
debounceMock.mockImplementation((fn) => {
function debounceFunction(...args) {
fn(...args);
}
@@ -53,7 +53,7 @@ export default class UiFindInput extends React.PureComponent<Props> {
autosize={null}
placeholder="Find..."
{...inputProps}
onChange={e => this.props.onChange(e.target.value)}
onChange={(e) => this.props.onChange(e.target.value)}
suffix={suffix}
value={value}
/>
@@ -52,7 +52,8 @@ function getParentSpanId(span, levels) {
function attachReferences(spans, depth, spansPerLevel) {
let levels = [[getSpanId(spans[0])]];
const duplicateLevelFilter = currentLevels => span => !currentLevels.find(level => level.indexOf(span.spanID) >= 0);
const duplicateLevelFilter = (currentLevels) => (span) =>
!currentLevels.find((level) => level.indexOf(span.spanID) >= 0);
while (levels.length < depth) {
const remainingSpans = spans.filter(duplicateLevelFilter(levels));
@@ -64,9 +65,9 @@ function attachReferences(spans, depth, spansPerLevel) {
}
// filter out empty levels
levels = levels.filter(level => level.length > 0);
levels = levels.filter((level) => level.length > 0);
return spans.map(span => {
return spans.map((span) => {
const parentSpanId = getParentSpanId(span, levels);
return parentSpanId
? {
@@ -39,7 +39,7 @@ function getInstance(): Combokeys {
export function merge(callbacks: ShortcutCallbacks) {
const inst = getInstance();
Object.keys(callbacks).forEach(name => {
Object.keys(callbacks).forEach((name) => {
const keysHandler = callbacks[name];
if (keysHandler) {
inst.bind(keyboardMappings[name].binding, keysHandler);
@@ -107,7 +107,7 @@ export default class PathElem {
...this.toJSONHelper(),
memberOf: {
focalIdx: this.memberOf.focalIdx,
members: this.memberOf.members.map(member => member.toJSONHelper()),
members: this.memberOf.members.map((member) => member.toJSONHelper()),
},
};
}
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
export const simplePayloadElemMaker = label => ({
export const simplePayloadElemMaker = (label) => ({
operation: `${label}Operation`,
service: `${label}Service`,
});
@@ -24,7 +24,7 @@ const sameFocalServicePayloadElem = {
service: focalPayloadElem.service,
};
const pathLengthener = path => {
const pathLengthener = (path) => {
const prequels = [];
const sequels = [];
path.forEach(({ operation, service }) => {
@@ -116,6 +116,6 @@ export const generationPaths = [
[generationPayloadElems.target, generationPayloadElems.beforeFocalMid, focalPayloadElem],
];
export const wrap = paths => ({
dependencies: paths.map(path => ({ path, attributes: [] })),
export const wrap = (paths) => ({
dependencies: paths.map((path) => ({ path, attributes: [] })),
});
@@ -27,7 +27,7 @@ describe('processTemplate()', () => {
it('correctly replaces variables', () => {
const processedTemplate = processTemplate(
'this is a test with #{oneVariable}#{anotherVariable} and the same #{oneVariable}',
a => a
(a) => a
);
expect(processedTemplate.parameters).toEqual(['oneVariable', 'anotherVariable']);
expect(processedTemplate.template({ oneVariable: 'MYFIRSTVAR', anotherVariable: 'SECOND' })).toBe(
@@ -38,7 +38,7 @@ describe('processTemplate()', () => {
it('correctly uses the encoding function', () => {
const processedTemplate = processTemplate(
'this is a test with #{oneVariable}#{anotherVariable} and the same #{oneVariable}',
e => `/${e}\\`
(e) => `/${e}\\`
);
expect(processedTemplate.parameters).toEqual(['oneVariable', 'anotherVariable']);
expect(processedTemplate.template({ oneVariable: 'MYFIRSTVAR', anotherVariable: 'SECOND' })).toBe(
@@ -64,9 +64,9 @@ describe('processTemplate()', () => {
expect(() =>
processTemplate(
{
template: data => `a${data.b}c`,
template: (data) => `a${data.b}c`,
},
a => a
(a) => a
)
).toThrow();
expect(() =>
@@ -74,10 +74,10 @@ describe('processTemplate()', () => {
{
parameters: ['b'],
},
a => a
(a) => a
)
).toThrow();
expect(() => processTemplate({}, a => a)).toThrow();
expect(() => processTemplate({}, (a) => a)).toThrow();
});
});
@@ -120,7 +120,7 @@ export function processLinkPattern(pattern: any): ProcessedLinkPattern | TNil {
export function getParameterInArray(name: string, array: TraceKeyValuePair[]) {
if (array) {
return array.find(entry => entry.key === name);
return array.find((entry) => entry.key === name);
}
return undefined;
}
@@ -144,14 +144,14 @@ function callTemplate(template: ProcessedTemplate, data: any) {
export function computeTraceLink(linkPatterns: ProcessedLinkPattern[], trace: Trace) {
const result: TLinksRV = [];
const validKeys = (Object.keys(trace) as Array<keyof Trace>).filter(
key => typeof trace[key] === 'string' || trace[key] === 'number'
(key) => typeof trace[key] === 'string' || trace[key] === 'number'
);
linkPatterns
.filter(pattern => pattern.type('traces'))
.forEach(pattern => {
.filter((pattern) => pattern.type('traces'))
.forEach((pattern) => {
const parameterValues: Record<string, any> = {};
const allParameters = pattern.parameters.every(parameter => {
const allParameters = pattern.parameters.every((parameter) => {
const key = parameter as keyof Trace;
if (validKeys.includes(key)) {
// At this point is safe to access to trace object using parameter variable because
@@ -189,10 +189,10 @@ export function computeLinks(
type = 'tags';
}
const result: Array<{ url: string; text: string }> = [];
linkPatterns.forEach(pattern => {
linkPatterns.forEach((pattern) => {
if (pattern.type(type) && pattern.key(item.key) && pattern.value(item.value)) {
const parameterValues: Record<string, any> = {};
const allParameters = pattern.parameters.every(parameter => {
const allParameters = pattern.parameters.every((parameter) => {
let entry = getParameterInArray(parameter, items);
if (!entry && !processTags) {
// do not look in ancestors for process tags because the same object may appear in different places in the hierarchy
@@ -20,6 +20,6 @@ import { TraceSpan } from '@grafana/data';
* @returns {TraceSpan|null} The parent span if there is one, null otherwise.
*/
export function getParent(span: TraceSpan) {
const parentRef = span.references ? span.references.find(ref => ref.refType === 'CHILD_OF') : null;
const parentRef = span.references ? span.references.find((ref) => ref.refType === 'CHILD_OF') : null;
return parentRef ? parentRef.span : null;
}
@@ -15,6 +15,6 @@
import { TraceSpan } from '@grafana/data';
export function getTraceName(spans: TraceSpan[]): string {
const span = spans.filter(sp => !sp.references || !sp.references.length)[0];
const span = spans.filter((sp) => !sp.references || !sp.references.length)[0];
return span ? `${span.process.serviceName}: ${span.operationName}` : '';
}
@@ -25,7 +25,7 @@ import TreeNode from '../utils/TreeNode';
export function deduplicateTags(spanTags: TraceKeyValuePair[]) {
const warningsHash: Map<string, string> = new Map<string, string>();
const tags: TraceKeyValuePair[] = spanTags.reduce<TraceKeyValuePair[]>((uniqueTags, tag) => {
if (!uniqueTags.some(t => t.key === tag.key && t.value === tag.value)) {
if (!uniqueTags.some((t) => t.key === tag.key && t.value === tag.value)) {
uniqueTags.push(tag);
} else {
warningsHash.set(`${tag.key}:${tag.value}`, `Duplicate tag "${tag.key}:${tag.value}"`);
@@ -83,7 +83,7 @@ export default function transformTraceData(data: TraceViewData | undefined): Tra
const spanMap = new Map<string, TraceSpan>();
// filter out spans with empty start times
// eslint-disable-next-line no-param-reassign
data.spans = data.spans.filter(span => Boolean(span.startTime));
data.spans = data.spans.filter((span) => Boolean(span.startTime));
const max = data.spans.length;
for (let i = 0; i < max; i++) {
@@ -166,7 +166,7 @@ export default function transformTraceData(data: TraceViewData | undefined): Tra
});
spans.push(span);
});
const services = Object.keys(svcCounts).map(name => ({ name, numberOfSpans: svcCounts[name] }));
const services = Object.keys(svcCounts).map((name) => ({ name, numberOfSpans: svcCounts[name] }));
return {
services,
spans,
@@ -26,9 +26,9 @@ describe('scroll-by', () => {
window.scrollY = 100;
tweenInstances.length = 0;
Tween.mockClear();
Tween.mockImplementation(opts => {
Tween.mockImplementation((opts) => {
const rv = { to: opts.to, onUpdate: opts.onUpdate };
Object.keys(Tween.prototype).forEach(name => {
Object.keys(Tween.prototype).forEach((name) => {
if (name !== 'constructor') {
rv[name] = jest.fn();
}
@@ -12,5 +12,5 @@
// See the License for the specific language governing permissions and
// limitations under the License.
export const getProcessServiceName = proc => proc.serviceName;
export const getProcessTags = proc => proc.tags;
export const getProcessServiceName = (proc) => proc.serviceName;
export const getProcessTags = (proc) => proc.tags;
@@ -17,23 +17,23 @@ import fuzzy from 'fuzzy';
import { getProcessServiceName } from './process';
export const getSpanId = span => span.spanID;
export const getSpanName = span => span.operationName;
export const getSpanDuration = span => span.duration;
export const getSpanTimestamp = span => span.startTime;
export const getSpanProcessId = span => span.processID;
export const getSpanReferences = span => span.references || [];
export const getSpanId = (span) => span.spanID;
export const getSpanName = (span) => span.operationName;
export const getSpanDuration = (span) => span.duration;
export const getSpanTimestamp = (span) => span.startTime;
export const getSpanProcessId = (span) => span.processID;
export const getSpanReferences = (span) => span.references || [];
export const getSpanReferenceByType = createSelector(
createSelector(({ span }) => span, getSpanReferences),
({ type }) => type,
(references, type) => references.find(ref => ref.refType === type)
(references, type) => references.find((ref) => ref.refType === type)
);
export const getSpanParentId = createSelector(
span => getSpanReferenceByType({ span, type: 'CHILD_OF' }),
childOfRef => (childOfRef ? childOfRef.spanID : null)
(span) => getSpanReferenceByType({ span, type: 'CHILD_OF' }),
(childOfRef) => (childOfRef ? childOfRef.spanID : null)
);
export const getSpanProcess = span => {
export const getSpanProcess = (span) => {
if (!span.process) {
throw new Error(
`
@@ -53,7 +53,7 @@ export const filterSpansForTimestamps = createSelector(
({ leftBound }) => leftBound,
({ rightBound }) => rightBound,
(spans, leftBound, rightBound) =>
spans.filter(span => getSpanTimestamp(span) >= leftBound && getSpanTimestamp(span) <= rightBound)
spans.filter((span) => getSpanTimestamp(span) >= leftBound && getSpanTimestamp(span) <= rightBound)
);
export const filterSpansForText = createSelector(
@@ -62,12 +62,12 @@ export const filterSpansForText = createSelector(
(spans, text) =>
fuzzy
.filter(text, spans, {
extract: span => `${getSpanServiceName(span)} ${getSpanName(span)}`,
extract: (span) => `${getSpanServiceName(span)} ${getSpanName(span)}`,
})
.map(({ original }) => original)
);
const getTextFilterdSpansAsMap = createSelector(filterSpansForText, matchingSpans =>
const getTextFilterdSpansAsMap = createSelector(filterSpansForText, (matchingSpans) =>
matchingSpans.reduce(
(obj, span) => ({
...obj,
@@ -81,7 +81,7 @@ export const highlightSpansForTextFilter = createSelector(
({ spans }) => spans,
getTextFilterdSpansAsMap,
(spans, textFilteredSpansMap) =>
spans.map(span => ({
spans.map((span) => ({
...span,
muted: !textFilteredSpansMap[getSpanId(span)],
}))
@@ -27,22 +27,22 @@ import { formatMillisecondTime, formatSecondTime, ONE_SECOND } from '../utils/da
import { numberSortComparator } from '../utils/sort';
import TreeNode from '../utils/TreeNode';
export const getTraceId = trace => trace.traceID;
export const getTraceId = (trace) => trace.traceID;
export const getTraceSpans = trace => trace.spans;
export const getTraceSpans = (trace) => trace.spans;
const getTraceProcesses = trace => trace.processes;
const getTraceProcesses = (trace) => trace.processes;
const getSpanWithProcess = createSelector(
state => state.span,
state => state.processes,
(state) => state.span,
(state) => state.processes,
(span, processes) => ({
...span,
process: processes[getSpanProcessId(span)],
})
);
export const getTraceSpansAsMap = createSelector(getTraceSpans, spans =>
export const getTraceSpansAsMap = createSelector(getTraceSpans, (spans) =>
spans.reduce((map, span) => map.set(getSpanId(span), span), new Map())
);
@@ -63,10 +63,10 @@ export const TREE_ROOT_ID = '__root__';
* between spans in the trace.
*/
export function getTraceSpanIdsAsTree(trace) {
const nodesById = new Map(trace.spans.map(span => [span.spanID, new TreeNode(span.spanID)]));
const spansById = new Map(trace.spans.map(span => [span.spanID, span]));
const nodesById = new Map(trace.spans.map((span) => [span.spanID, new TreeNode(span.spanID)]));
const spansById = new Map(trace.spans.map((span) => [span.spanID, span]));
const root = new TreeNode(TREE_ROOT_ID);
trace.spans.forEach(span => {
trace.spans.forEach((span) => {
const node = nodesById.get(span.spanID);
if (Array.isArray(span.references) && span.references.length) {
const { refType, spanID: parentID } = span.references[0];
@@ -85,7 +85,7 @@ export function getTraceSpanIdsAsTree(trace) {
const b = spansById.get(nodeB.value);
return +(a.startTime > b.startTime) || +(a.startTime === b.startTime) - 1;
};
trace.spans.forEach(span => {
trace.spans.forEach((span) => {
const node = nodesById.get(span.spanID);
if (node.children.length > 1) {
node.children.sort(comparator);
@@ -96,19 +96,19 @@ export function getTraceSpanIdsAsTree(trace) {
}
// attach "process" as an object to each span.
export const hydrateSpansWithProcesses = trace => {
export const hydrateSpansWithProcesses = (trace) => {
const spans = getTraceSpans(trace);
const processes = getTraceProcesses(trace);
return {
...trace,
spans: spans.map(span => getSpanWithProcess({ span, processes })),
spans: spans.map((span) => getSpanWithProcess({ span, processes })),
};
};
export const getTraceSpanCount = createSelector(getTraceSpans, spans => spans.length);
export const getTraceSpanCount = createSelector(getTraceSpans, (spans) => spans.length);
export const getTraceTimestamp = createSelector(getTraceSpans, spans =>
export const getTraceTimestamp = createSelector(getTraceSpans, (spans) =>
spans.reduce(
(prevTimestamp, span) => (prevTimestamp ? Math.min(prevTimestamp, getSpanTimestamp(span)) : getSpanTimestamp(span)),
null
@@ -136,26 +136,26 @@ export const getParentSpan = createSelector(
getTraceSpansAsMap,
(tree, spanMap) =>
tree.children
.map(node => spanMap.get(node.value))
.map((node) => spanMap.get(node.value))
.sort((spanA, spanB) => numberSortComparator(getSpanTimestamp(spanA), getSpanTimestamp(spanB)))[0]
);
export const getTraceDepth = createSelector(getTraceSpanIdsAsTree, spanTree => spanTree.depth - 1);
export const getTraceDepth = createSelector(getTraceSpanIdsAsTree, (spanTree) => spanTree.depth - 1);
export const getSpanDepthForTrace = createSelector(
createSelector(state => state.trace, getTraceSpanIdsAsTree),
createSelector(state => state.span, getSpanId),
createSelector((state) => state.trace, getTraceSpanIdsAsTree),
createSelector((state) => state.span, getSpanId),
(node, spanID) => node.getPath(spanID).length - 1
);
export const getTraceServices = createSelector(getTraceProcesses, processes =>
export const getTraceServices = createSelector(getTraceProcesses, (processes) =>
Object.keys(processes).reduce(
(services, processID) => services.add(getProcessServiceName(processes[processID])),
new Set()
)
);
export const getTraceServiceCount = createSelector(getTraceServices, services => services.size);
export const getTraceServiceCount = createSelector(getTraceServices, (services) => services.size);
// establish constants to determine how math should be handled
// for nanosecond-to-millisecond conversions.
@@ -164,7 +164,7 @@ export const DURATION_FORMATTERS = {
s: formatSecondTime,
};
const getDurationFormatterForTrace = createSelector(getTraceDuration, totalDuration =>
const getDurationFormatterForTrace = createSelector(getTraceDuration, (totalDuration) =>
totalDuration >= ONE_SECOND ? DURATION_FORMATTERS.s : DURATION_FORMATTERS.ms
);
@@ -188,16 +188,16 @@ export const getSortedSpans = createSelector(
[...spans].sort((spanA, spanB) => dir * comparator(selector(spanA, trace), selector(spanB, trace)))
);
const getTraceSpansByHierarchyPosition = createSelector(getTraceSpanIdsAsTree, tree => {
const getTraceSpansByHierarchyPosition = createSelector(getTraceSpanIdsAsTree, (tree) => {
const hierarchyPositionMap = new Map();
let i = 0;
tree.walk(spanID => hierarchyPositionMap.set(spanID, i++));
tree.walk((spanID) => hierarchyPositionMap.set(spanID, i++));
return hierarchyPositionMap;
});
export const getTreeSizeForTraceSpan = createSelector(
createSelector(state => state.trace, getTraceSpanIdsAsTree),
createSelector(state => state.span, getSpanId),
createSelector((state) => state.trace, getTraceSpanIdsAsTree),
createSelector((state) => state.span, getSpanId),
(tree, spanID) => {
const node = tree.find(spanID);
if (!node) {
@@ -230,11 +230,11 @@ export const omitCollapsedSpans = createSelector(
({ collapsed }) => collapsed,
(spans, tree, collapse) => {
const hiddenSpanIds = collapse.reduce((result, collapsedSpanId) => {
tree.find(collapsedSpanId).walk(id => id !== collapsedSpanId && result.add(id));
tree.find(collapsedSpanId).walk((id) => id !== collapsedSpanId && result.add(id));
return result;
}, new Set());
return hiddenSpanIds.size > 0 ? spans.filter(span => !hiddenSpanIds.has(getSpanId(span))) : spans;
return hiddenSpanIds.size > 0 ? spans.filter((span) => !hiddenSpanIds.has(getSpanId(span))) : spans;
}
);
@@ -250,7 +250,7 @@ export const getTicksForTrace = createSelector(
width
// timestamps will be spaced over the interval, starting from the initial timestamp
) =>
[...Array(interval + 1).keys()].map(num => ({
[...Array(interval + 1).keys()].map((num) => ({
timestamp: getTraceTimestamp(trace) + getTraceDuration(trace) * (num / interval),
width,
}))
@@ -259,7 +259,7 @@ export const getTicksForTrace = createSelector(
// TODO: delete this when the backend can ensure uniqueness
/* istanbul ignore next */
export const enforceUniqueSpanIds = createSelector(
/* istanbul ignore next */ trace => trace,
/* istanbul ignore next */ (trace) => trace,
getTraceSpans,
/* istanbul ignore next */ (trace, spans) => {
const map = new Map();
@@ -286,10 +286,10 @@ export const enforceUniqueSpanIds = createSelector(
// TODO: delete this when the backend can ensure uniqueness
export const dropEmptyStartTimeSpans = createSelector(
/* istanbul ignore next */ trace => trace,
/* istanbul ignore next */ (trace) => trace,
getTraceSpans,
/* istanbul ignore next */ (trace, spans) => ({
...trace,
spans: spans.filter(span => !!getSpanTimestamp(span)),
spans: spans.filter((span) => !!getSpanTimestamp(span)),
})
);
@@ -37,15 +37,15 @@ it('getTraceId() should return the traceID', () => {
it('hydrateSpansWithProcesses() should return the trace with processes on each span', () => {
const hydratedTrace = traceSelectors.hydrateSpansWithProcesses(generatedTrace);
hydratedTrace.spans.forEach(span =>
hydratedTrace.spans.forEach((span) =>
expect(getSpanProcess(span)).toBe(generatedTrace.processes[getSpanProcessId(span)])
);
});
it('getTraceSpansAsMap() should return a map of all of the spans', () => {
const spanMap = traceSelectors.getTraceSpansAsMap(generatedTrace);
[...spanMap.entries()].forEach(pair => {
expect(pair[1]).toEqual(generatedTrace.spans.find(span => getSpanId(span) === pair[0]));
[...spanMap.entries()].forEach((pair) => {
expect(pair[1]).toEqual(generatedTrace.spans.find((span) => getSpanId(span) === pair[0]));
});
});
@@ -56,7 +56,7 @@ describe('getTraceSpanIdsAsTree()', () => {
tree.walk((value, node) => {
const expectedParentValue = value === traceSelectors.TREE_ROOT_ID ? null : value;
node.children.forEach(childNode => {
node.children.forEach((childNode) => {
expect(getSpanParentId(spanMap.get(childNode.value))).toBe(expectedParentValue);
});
});
@@ -134,7 +134,7 @@ it('getSpanDepthForTrace() should determine the depth of a given span in the par
let depth = 2;
let currentId = getSpanParentId(span);
const findCurrentSpanById = item => getSpanId(item) === currentId;
const findCurrentSpanById = (item) => getSpanId(item) === currentId;
while (currentId !== getSpanId(generatedTrace.spans[0])) {
depth++;
currentId = getSpanParentId(generatedTrace.spans.find(findCurrentSpanById));
@@ -159,7 +159,7 @@ it('getSpanDepthForTrace() should determine the depth of a given span in the par
it('getTraceServices() should return an unique array of all services in the trace', () => {
const svcs = [...traceSelectors.getTraceServices(generatedTrace)].sort();
const set = new Set(_values(generatedTrace.processes).map(v => v.serviceName));
const set = new Set(_values(generatedTrace.processes).map((v) => v.serviceName));
const setSvcs = [...set.values()].sort();
expect(svcs).toEqual(setSvcs);
});
@@ -37,7 +37,7 @@ export default function ReferenceLink(props: ReferenceLinkProps) {
return (
<ExternalLinkContext.Consumer>
{createLinkToExternalSpan => {
{(createLinkToExternalSpan) => {
if (!createLinkToExternalSpan) {
throw new Error("ExternalLinkContext does not have a value, you probably forgot to setup it's provider");
}
@@ -126,7 +126,7 @@ describe('DraggableManager', () => {
() => instance.handleMouseMove({ ...baseMouseEvt, type }),
() => instance.handleMouseLeave({ ...baseMouseEvt, type }),
];
throwers.forEach(thrower => expect(thrower).toThrow());
throwers.forEach((thrower) => expect(thrower).toThrow());
});
it('does nothing if already dragging', () => {
@@ -170,7 +170,7 @@ describe('DraggableManager', () => {
},
];
cases.forEach(testCase => {
cases.forEach((testCase) => {
const { type, handler, callback, updateType } = testCase;
const event = { ...baseMouseEvt, type };
handler(event);
@@ -288,7 +288,7 @@ describe('DraggableManager', () => {
},
];
cases.forEach(testCase => {
cases.forEach((testCase) => {
const { type, handler, callback, updateType } = testCase;
const event = { ...baseMouseEvt, type };
handler(event);
@@ -58,7 +58,7 @@ export default class DraggableManagerDemo extends React.PureComponent<{}, Dragga
<section className="DraggableManagerDemo--scenario">
<h2>Dragging a Sub-Region</h2>
<p>Click and drag horizontally somewhere in the colored area, below.</p>
<p>Value: {regionDragging && regionDragging.map(n => n.toFixed(3)).join(', ')}</p>
<p>Value: {regionDragging && regionDragging.map((n) => n.toFixed(3)).join(', ')}</p>
<div className="DraggableManagerDemo--realm">
<RegionDemo regionCursor={regionCursor} regionDragging={regionDragging} updateState={this._updateState} />
</div>
@@ -14,7 +14,7 @@
export default class TreeNode {
static iterFunction(fn, depth = 0) {
return node => fn(node.value, node, depth);
return (node) => fn(node.value, node, depth);
}
static searchFunction(search) {
@@ -119,7 +119,7 @@ it('find() should return the found item for a function', () => {
treeRoot.addChild(11);
treeRoot.addChild(12);
expect(treeRoot.find(value => value === 6)).toEqual(secondChildNode);
expect(treeRoot.find((value) => value === 6)).toEqual(secondChildNode);
expect(treeRoot.find(12)).toEqual(new TreeNode(12));
});
@@ -183,7 +183,7 @@ it('find() should return null for none found', () => {
treeRoot.addChild(12);
expect(treeRoot.find(13)).toBe(null);
expect(treeRoot.find(value => value === 'foo')).toBe(null);
expect(treeRoot.find((value) => value === 'foo')).toBe(null);
});
it('getPath() should return the path to the node', () => {
@@ -262,7 +262,7 @@ it('walk() should iterate over every item once in the right order', () => {
let i = 0;
treeRoot.walk(value => expect(value).toBe(++i));
treeRoot.walk((value) => expect(value).toBe(++i));
});
it('walk() should iterate over every item and compute the right deep on each node', () => {
@@ -30,7 +30,7 @@ export default function filterSpans(textFilter: string, spans: TraceSpan[] | TNi
textFilter
.split(/\s+/)
.filter(Boolean)
.forEach(w => {
.forEach((w) => {
if (w[0] === '-') {
excludeKeys.push(w.substr(1).toLowerCase());
} else {
@@ -39,11 +39,11 @@ export default function filterSpans(textFilter: string, spans: TraceSpan[] | TNi
});
const isTextInFilters = (filters: string[], text: string) =>
filters.some(filter => text.toLowerCase().includes(filter));
filters.some((filter) => text.toLowerCase().includes(filter));
const isTextInKeyValues = (kvs: TraceKeyValuePair[]) =>
kvs
? kvs.some(kv => {
? kvs.some((kv) => {
// ignore checking key and value for a match if key is in excludeKeys
if (isTextInFilters(excludeKeys, kv.key)) {
return false;
@@ -57,9 +57,9 @@ export default function filterSpans(textFilter: string, spans: TraceSpan[] | TNi
isTextInFilters(includeFilters, span.operationName) ||
isTextInFilters(includeFilters, span.process.serviceName) ||
isTextInKeyValues(span.tags) ||
span.logs.some(log => isTextInKeyValues(log.fields)) ||
span.logs.some((log) => isTextInKeyValues(log.fields)) ||
isTextInKeyValues(span.process.tags) ||
includeFilters.some(filter => filter === span.spanID);
includeFilters.some((filter) => filter === span.spanID);
// declare as const because need to disambiguate the type
const rv: Set<string> = new Set(spans.filter(isSpanAMatch).map((span: TraceSpan) => span.spanID));
@@ -30,7 +30,7 @@ export function polyfill(target, msElapse = DEFAULT_ELAPSE) {
_target.requestAnimationFrame = requestAnimationFrame;
} else {
// eslint-disable-next-line no-param-reassign, no-shadow
_target.requestAnimationFrame = callback => setTimeout(callback, msElapse);
_target.requestAnimationFrame = (callback) => setTimeout(callback, msElapse);
}
}
if (!_target.cancelAnimationFrame) {