Skip to content

Commit e714e3d

Browse files
authored
ref: Remove some unnecessary conditions (#14698)
I was playing around with finally enabling the [no-unnecessary-condition](https://typescript-eslint.io/rules/no-unnecessary-condition/) eslint rule, and figured to start fixing some of the stuff it found. These should mostly be straightforward things, or in some cases I adjusted tests to ensure we "correctly" check for stuff.
1 parent a5fc322 commit e714e3d

File tree

26 files changed

+82
-83
lines changed

26 files changed

+82
-83
lines changed

dev-packages/e2e-tests/lib/getTestMatrix.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ function addIncludesForTestApp(
101101
}
102102

103103
function getSentryDependencies(appName: string): string[] {
104-
const packageJson = getPackageJson(appName) || {};
104+
const packageJson = getPackageJson(appName);
105105

106106
const dependencies = {
107107
...packageJson.devDependencies,

packages/browser/test/sdk.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ describe('init', () => {
8989
expect(initAndBindSpy).toHaveBeenCalledTimes(1);
9090

9191
const optionsPassed = initAndBindSpy.mock.calls[0]?.[1];
92-
expect(optionsPassed?.integrations?.length).toBeGreaterThan(0);
92+
expect(optionsPassed?.integrations.length).toBeGreaterThan(0);
9393
});
9494

9595
test("doesn't install default integrations if told not to", () => {

packages/core/src/utils-hoist/vercelWaitUntil.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import { GLOBAL_OBJ } from './worldwide';
22

33
interface VercelRequestContextGlobal {
4-
get?(): {
5-
waitUntil?: (task: Promise<unknown>) => void;
6-
};
4+
get?():
5+
| {
6+
waitUntil?: (task: Promise<unknown>) => void;
7+
}
8+
| undefined;
79
}
810

911
/**

packages/core/src/utils/applyScopeDataToEvent.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,22 +113,22 @@ function applyDataToEvent(event: Event, data: ScopeData): void {
113113
const { extra, tags, user, contexts, level, transactionName } = data;
114114

115115
const cleanedExtra = dropUndefinedKeys(extra);
116-
if (cleanedExtra && Object.keys(cleanedExtra).length) {
116+
if (Object.keys(cleanedExtra).length) {
117117
event.extra = { ...cleanedExtra, ...event.extra };
118118
}
119119

120120
const cleanedTags = dropUndefinedKeys(tags);
121-
if (cleanedTags && Object.keys(cleanedTags).length) {
121+
if (Object.keys(cleanedTags).length) {
122122
event.tags = { ...cleanedTags, ...event.tags };
123123
}
124124

125125
const cleanedUser = dropUndefinedKeys(user);
126-
if (cleanedUser && Object.keys(cleanedUser).length) {
126+
if (Object.keys(cleanedUser).length) {
127127
event.user = { ...cleanedUser, ...event.user };
128128
}
129129

130130
const cleanedContexts = dropUndefinedKeys(contexts);
131-
if (cleanedContexts && Object.keys(cleanedContexts).length) {
131+
if (Object.keys(cleanedContexts).length) {
132132
event.contexts = { ...cleanedContexts, ...event.contexts };
133133
}
134134

@@ -190,7 +190,7 @@ function applyFingerprintToEvent(event: Event, fingerprint: ScopeData['fingerpri
190190
}
191191

192192
// If we have no data at all, remove empty array default
193-
if (event.fingerprint && !event.fingerprint.length) {
193+
if (!event.fingerprint.length) {
194194
delete event.fingerprint;
195195
}
196196
}

packages/core/src/utils/merge.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export function merge<T>(initialObj: T, mergeObj: T, levels = 2): T {
1313
}
1414

1515
// If the merge object is an empty object, and the initial object is not undefined, we return the initial object
16-
if (initialObj && mergeObj && Object.keys(mergeObj).length === 0) {
16+
if (initialObj && Object.keys(mergeObj).length === 0) {
1717
return initialObj;
1818
}
1919

packages/core/src/utils/prepareEvent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ export function applyDebugIds(event: Event, stackParser: StackParser): void {
179179
event!.exception!.values!.forEach(exception => {
180180
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
181181
exception.stacktrace!.frames!.forEach(frame => {
182-
if (filenameDebugIdMap && frame.filename) {
182+
if (frame.filename) {
183183
frame.debug_id = filenameDebugIdMap[frame.filename];
184184
}
185185
});

packages/core/src/utils/spanUtils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ export function spanToJSON(span: Span): Partial<SpanJSON> {
151151
}
152152

153153
function spanIsOpenTelemetrySdkTraceBaseSpan(span: Span): span is OpenTelemetrySdkTraceBaseSpan {
154-
const castSpan = span as OpenTelemetrySdkTraceBaseSpan;
154+
const castSpan = span as Partial<OpenTelemetrySdkTraceBaseSpan>;
155155
return !!castSpan.attributes && !!castSpan.startTime && !!castSpan.name && !!castSpan.endTime && !!castSpan.status;
156156
}
157157

packages/core/test/lib/envelope.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ describe('createSpanEnvelope', () => {
116116

117117
const spanEnvelope = createSpanEnvelope([span]);
118118

119-
const spanItem = spanEnvelope[1]?.[0]?.[1];
119+
const spanItem = spanEnvelope[1][0]?.[1];
120120
expect(spanItem).toEqual({
121121
data: {
122122
'sentry.origin': 'manual',
@@ -207,7 +207,7 @@ describe('createSpanEnvelope', () => {
207207

208208
expect(beforeSendSpan).toHaveBeenCalled();
209209

210-
const spanItem = spanEnvelope[1]?.[0]?.[1];
210+
const spanItem = spanEnvelope[1][0]?.[1];
211211
expect(spanItem).toEqual({
212212
data: {
213213
'sentry.origin': 'manual',
@@ -242,7 +242,7 @@ describe('createSpanEnvelope', () => {
242242

243243
expect(beforeSendSpan).toHaveBeenCalled();
244244

245-
const spanItem = spanEnvelope[1]?.[0]?.[1];
245+
const spanItem = spanEnvelope[1][0]?.[1];
246246
expect(spanItem).toEqual({
247247
data: {
248248
'sentry.origin': 'manual',

packages/core/test/lib/integrations/zoderrrors.test.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,7 @@ class ZodError extends Error {
2020
super();
2121

2222
const actualProto = new.target.prototype;
23-
if (Object.setPrototypeOf) {
24-
Object.setPrototypeOf(this, actualProto);
25-
} else {
26-
(this as any).__proto__ = actualProto;
27-
}
23+
Object.setPrototypeOf(this, actualProto);
2824

2925
this.name = 'ZodError';
3026
this.issues = issues;

packages/core/test/lib/tracing/trace.test.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,7 @@ describe('startSpan', () => {
152152
try {
153153
await startSpan({ name: 'GET users/[id]' }, () => {
154154
return startSpan({ name: 'SELECT * from users' }, childSpan => {
155-
if (childSpan) {
156-
childSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'db.query');
157-
}
155+
childSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'db.query');
158156
return callback();
159157
});
160158
});

packages/core/test/lib/transports/multiplexed.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ describe('makeMultiplexedTransport', () => {
118118
const makeTransport = makeMultiplexedTransport(
119119
createTestTransport((url, _, env) => {
120120
expect(url).toBe(DSN2_URL);
121-
expect(env[0]?.dsn).toBe(DSN2);
121+
expect(env[0].dsn).toBe(DSN2);
122122
}),
123123
() => [DSN2],
124124
);
@@ -134,7 +134,7 @@ describe('makeMultiplexedTransport', () => {
134134
createTestTransport((url, release, env) => {
135135
expect(url).toBe(DSN2_URL);
136136
expect(release).toBe('something@1.0.0');
137-
expect(env[0]?.dsn).toBe(DSN2);
137+
expect(env[0].dsn).toBe(DSN2);
138138
}),
139139
() => [{ dsn: DSN2, release: 'something@1.0.0' }],
140140
);
@@ -150,7 +150,7 @@ describe('makeMultiplexedTransport', () => {
150150
createTestTransport((url, release, env) => {
151151
expect(url).toBe('http://google.com');
152152
expect(release).toBe('something@1.0.0');
153-
expect(env[0]?.dsn).toBe(DSN2);
153+
expect(env[0].dsn).toBe(DSN2);
154154
}),
155155
() => [{ dsn: DSN2, release: 'something@1.0.0' }],
156156
);

packages/core/test/lib/transports/offline.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ describe('makeOfflineTransport', () => {
328328
// When it gets shifted out of the store, the sent_at header should be updated
329329
const envelopes = getSentEnvelopes().map(parseEnvelope) as EventEnvelope[];
330330
expect(envelopes[0]?.[0]).toBeDefined();
331-
const sent_at = new Date(envelopes[0]![0]?.sent_at);
331+
const sent_at = new Date(envelopes[0]![0].sent_at);
332332

333333
expect(sent_at.getTime()).toBeGreaterThan(testStartTime.getTime());
334334
},

packages/core/test/utils-hoist/envelope.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ describe('envelope', () => {
7171
measurements: { inp: { value: expect.any(Number), unit: expect.any(String) } },
7272
};
7373

74-
expect(spanEnvelopeItem[0]?.type).toBe('span');
74+
expect(spanEnvelopeItem[0].type).toBe('span');
7575
expect(spanEnvelopeItem[1]).toMatchObject(expectedObj);
7676
});
7777
});

packages/core/test/utils-hoist/misc.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ describe('addExceptionMechanism', () => {
215215

216216
addExceptionMechanism(event);
217217

218-
expect(event.exception.values[0]?.mechanism).toEqual(defaultMechanism);
218+
expect(event.exception.values[0].mechanism).toEqual(defaultMechanism);
219219
});
220220

221221
it('prefers current values to defaults', () => {
@@ -226,7 +226,7 @@ describe('addExceptionMechanism', () => {
226226

227227
addExceptionMechanism(event);
228228

229-
expect(event.exception.values[0]?.mechanism).toEqual(nonDefaultMechanism);
229+
expect(event.exception.values[0].mechanism).toEqual(nonDefaultMechanism);
230230
});
231231

232232
it('prefers incoming values to current values', () => {
@@ -239,7 +239,7 @@ describe('addExceptionMechanism', () => {
239239
addExceptionMechanism(event, newMechanism);
240240

241241
// the new `handled` value took precedence
242-
expect(event.exception.values[0]?.mechanism).toEqual({ type: 'instrument', handled: true, synthetic: true });
242+
expect(event.exception.values[0].mechanism).toEqual({ type: 'instrument', handled: true, synthetic: true });
243243
});
244244

245245
it('merges data values', () => {
@@ -251,7 +251,7 @@ describe('addExceptionMechanism', () => {
251251

252252
addExceptionMechanism(event, newMechanism);
253253

254-
expect(event.exception.values[0]?.mechanism.data).toEqual({
254+
expect(event.exception.values[0].mechanism.data).toEqual({
255255
function: 'addEventListener',
256256
handler: 'organizeShoes',
257257
target: 'closet',

packages/feedback/src/core/components/Actor.test.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ describe('Actor', () => {
2222
const actorComponent = feedback!.createWidget();
2323

2424
expect(actorComponent.el).toBeInstanceOf(HTMLButtonElement);
25-
expect(actorComponent.el?.textContent).toBe(TRIGGER_LABEL);
25+
expect(actorComponent.el.textContent).toBe(TRIGGER_LABEL);
2626
});
2727

2828
it('renders the correct aria label for the button', () => {
@@ -43,19 +43,19 @@ describe('Actor', () => {
4343
// aria label is the same as trigger label when the trigger label isn't empty
4444
const actorDefault = feedback!.createWidget({ triggerLabel: 'Button' });
4545

46-
expect(actorDefault.el?.textContent).toBe('Button');
47-
expect(actorDefault.el?.ariaLabel).toBe('Button');
46+
expect(actorDefault.el.textContent).toBe('Button');
47+
expect(actorDefault.el.ariaLabel).toBe('Button');
4848

4949
// aria label is default text when trigger label is empty and aria isn't configured
5050
const actorIcon = feedback!.createWidget({ triggerLabel: '' });
5151

52-
expect(actorIcon.el?.textContent).toBe('');
53-
expect(actorIcon.el?.ariaLabel).toBe(TRIGGER_LABEL);
52+
expect(actorIcon.el.textContent).toBe('');
53+
expect(actorIcon.el.ariaLabel).toBe(TRIGGER_LABEL);
5454

5555
// aria label is the triggerAriaLabel if it's configured
5656
const actorAria = feedback!.createWidget({ triggerLabel: 'Button', triggerAriaLabel: 'Aria' });
5757

58-
expect(actorAria.el?.textContent).toBe('Button');
59-
expect(actorAria.el?.ariaLabel).toBe('Aria');
58+
expect(actorAria.el.textContent).toBe('Button');
59+
expect(actorAria.el.ariaLabel).toBe('Aria');
6060
});
6161
});

packages/node/src/cron/node-cron.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export interface NodeCronOptions {
77
}
88

99
export interface NodeCron {
10-
schedule: (cronExpression: string, callback: () => void, options: NodeCronOptions) => unknown;
10+
schedule: (cronExpression: string, callback: () => void, options: NodeCronOptions | undefined) => unknown;
1111
}
1212

1313
/**
@@ -30,20 +30,23 @@ export interface NodeCron {
3030
*/
3131
export function instrumentNodeCron<T>(lib: Partial<NodeCron> & T): T {
3232
return new Proxy(lib, {
33-
get(target, prop: keyof NodeCron) {
33+
get(target, prop) {
3434
if (prop === 'schedule' && target.schedule) {
3535
// When 'get' is called for schedule, return a proxied version of the schedule function
3636
return new Proxy(target.schedule, {
3737
apply(target, thisArg, argArray: Parameters<NodeCron['schedule']>) {
3838
const [expression, callback, options] = argArray;
3939

40-
if (!options?.name) {
40+
const name = options?.name;
41+
const timezone = options?.timezone;
42+
43+
if (!name) {
4144
throw new Error('Missing "name" for scheduled job. A name is required for Sentry check-in monitoring.');
4245
}
4346

44-
async function monitoredCallback(): Promise<void> {
47+
const monitoredCallback = async (): Promise<void> => {
4548
return withMonitor(
46-
options.name,
49+
name,
4750
async () => {
4851
// We have to manually catch here and capture the exception because node-cron swallows errors
4952
// https://github.com/node-cron/node-cron/issues/399
@@ -56,16 +59,16 @@ export function instrumentNodeCron<T>(lib: Partial<NodeCron> & T): T {
5659
},
5760
{
5861
schedule: { type: 'crontab', value: replaceCronNames(expression) },
59-
timezone: options?.timezone,
62+
timezone,
6063
},
6164
);
62-
}
65+
};
6366

6467
return target.apply(thisArg, [expression, monitoredCallback, options]);
6568
},
6669
});
6770
} else {
68-
return target[prop];
71+
return target[prop as keyof T];
6972
}
7073
},
7174
});

packages/node/src/integrations/context.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,18 +123,18 @@ export const nodeContextIntegration = defineIntegration(_nodeContextIntegration)
123123
function _updateContext(contexts: Contexts): Contexts {
124124
// Only update properties if they exist
125125

126-
if (contexts?.app?.app_memory) {
126+
if (contexts.app?.app_memory) {
127127
contexts.app.app_memory = process.memoryUsage().rss;
128128
}
129129

130-
if (contexts?.app?.free_memory && typeof (process as ProcessWithCurrentValues).availableMemory === 'function') {
130+
if (contexts.app?.free_memory && typeof (process as ProcessWithCurrentValues).availableMemory === 'function') {
131131
const freeMemory = (process as ProcessWithCurrentValues).availableMemory?.();
132132
if (freeMemory != null) {
133133
contexts.app.free_memory = freeMemory;
134134
}
135135
}
136136

137-
if (contexts?.device?.free_memory) {
137+
if (contexts.device?.free_memory) {
138138
contexts.device.free_memory = os.freemem();
139139
}
140140

@@ -226,7 +226,7 @@ export function getDeviceContext(deviceOpt: DeviceContextOptions | true): Device
226226
// Sometimes os.uptime() throws due to lacking permissions: https://github.com/getsentry/sentry-javascript/issues/8202
227227
let uptime;
228228
try {
229-
uptime = os.uptime && os.uptime();
229+
uptime = os.uptime();
230230
} catch (e) {
231231
// noop
232232
}
@@ -246,7 +246,7 @@ export function getDeviceContext(deviceOpt: DeviceContextOptions | true): Device
246246
}
247247

248248
if (deviceOpt === true || deviceOpt.cpu) {
249-
const cpuInfo: os.CpuInfo[] | undefined = os.cpus();
249+
const cpuInfo = os.cpus() as os.CpuInfo[] | undefined;
250250
const firstCpu = cpuInfo && cpuInfo[0];
251251
if (firstCpu) {
252252
device.processor_count = cpuInfo.length;

0 commit comments

Comments
 (0)