Skip to content

Commit f432093

Browse files
authored
chore: prefer direct iteration and function callback types (#4677)
## Summary Enable lint rules that prefer direct iteration and concise function callback types. The existing code now uses direct iteration where no index is needed, and callback contracts use function types consistently. Base: [#4675](#4675)
1 parent 8572e8e commit f432093

9 files changed

Lines changed: 32 additions & 39 deletions

File tree

.oxlintrc.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@
5858
"react/jsx-fragments": "error",
5959
"react/self-closing-comp": "error",
6060
"no-lone-blocks": "error",
61+
"typescript/prefer-function-type": "error",
62+
"typescript/prefer-for-of": "error",
6163
"trigger/no-thrown-unawaited-redirect": "error",
6264
"trigger-prisma/no-unbounded-list-filter": "error",
6365
"trigger-prisma/no-unbounded-list-filter-in-args-helper": "error"

apps/webapp/app/services/realtime/redisRealtimeStreams.server.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,7 @@ export class RedisRealtimeStreams implements StreamIngestor, StreamResponder {
117117
const [_key, entries] = messages[0];
118118
let foundData = false;
119119

120-
for (let i = 0; i < entries.length; i++) {
121-
const [id, fields] = entries[i];
120+
for (const [id, fields] of entries) {
122121
lastId = id;
123122

124123
if (fields && fields.length >= 2) {

apps/webapp/app/v3/eventRepository/sanitizeRowsOnParseError.server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ export function sanitizeUnknownInPlace(value: unknown): { value: unknown; fixed:
172172
export function sanitizeRows<T extends object>(rows: T[]): SanitizeResult {
173173
const result: SanitizeResult = { rowsTouched: 0, fieldsSanitized: 0 };
174174

175-
for (let i = 0; i < rows.length; i++) {
176-
const { fixed } = sanitizeUnknownInPlace(rows[i]);
175+
for (const row of rows) {
176+
const { fixed } = sanitizeUnknownInPlace(row);
177177
if (fixed > 0) {
178178
result.rowsTouched++;
179179
result.fieldsSanitized += fixed;

internal-packages/clickhouse/src/client/client.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -897,8 +897,8 @@ export class ClickhouseClient implements ClickhouseReader, ClickhouseWriter {
897897

898898
// Build compact format: [columns, ...rows]
899899
const compactData: any[] = [Array.from(req.columns)];
900-
for (let i = 0; i < eventsArray.length; i++) {
901-
compactData.push(req.toArray(eventsArray[i]));
900+
for (const event of eventsArray) {
901+
compactData.push(req.toArray(event));
902902
}
903903

904904
const [clickhouseError, result] = await tryCatch(

internal-packages/run-engine/src/run-queue/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,9 +216,9 @@ export type RunQueueOptions = {
216216
};
217217
};
218218

219-
interface ConcurrencySweeperCallback {
220-
(runIds: string[]): Promise<Array<{ id: string; orgId: string }>>;
221-
}
219+
type ConcurrencySweeperCallback = (
220+
runIds: string[]
221+
) => Promise<Array<{ id: string; orgId: string }>>;
222222

223223
type DequeuedMessage = {
224224
messageId: string;

internal-packages/schedule-engine/src/engine/types.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,11 @@ export type TriggerScheduledTaskParams = {
2727

2828
export type TriggerScheduledTaskErrorType = "QUEUE_LIMIT" | "OUT_OF_ENTITLEMENTS" | "SYSTEM_ERROR";
2929

30-
export interface TriggerScheduledTaskCallback {
31-
(params: TriggerScheduledTaskParams): Promise<{
32-
success: boolean;
33-
error?: string;
34-
errorType?: TriggerScheduledTaskErrorType;
35-
}>;
36-
}
30+
export type TriggerScheduledTaskCallback = (params: TriggerScheduledTaskParams) => Promise<{
31+
success: boolean;
32+
error?: string;
33+
errorType?: TriggerScheduledTaskErrorType;
34+
}>;
3735

3836
export interface ScheduleEngineOptions {
3937
logger?: Logger;

internal-packages/webhook-engine/src/engine/types.ts

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,12 @@ export type TriggerWebhookTaskParams = {
1616
endpointMetadata: unknown; // endpoint.metadata -> run metadata
1717
};
1818

19-
export interface TriggerWebhookTaskCallback {
20-
(params: TriggerWebhookTaskParams): Promise<{
21-
success: boolean;
22-
runId?: string; // persisted onto WebhookDelivery.runId on success
23-
error?: string;
24-
errorType?: WebhookDeliverTaskErrorType;
25-
}>;
26-
}
19+
export type TriggerWebhookTaskCallback = (params: TriggerWebhookTaskParams) => Promise<{
20+
success: boolean;
21+
runId?: string; // persisted onto WebhookDelivery.runId on success
22+
error?: string;
23+
errorType?: WebhookDeliverTaskErrorType;
24+
}>;
2725

2826
export interface WebhookEngineOptions {
2927
logger?: Logger;
@@ -82,16 +80,14 @@ export type DeliverWebhookToSessionParams = {
8280
isSessionStart: boolean;
8381
};
8482

85-
export interface DeliverWebhookToSessionCallback {
86-
(params: DeliverWebhookToSessionParams): Promise<{
87-
success: boolean;
88-
runId?: string; // the session's current run, persisted onto WebhookDelivery.runId
89-
error?: string;
90-
errorType?: WebhookDeliverTaskErrorType;
91-
skipped?: boolean; // resume-only and no session existed: recorded FILTERED, not routed
92-
skippedReason?: string;
93-
}>;
94-
}
83+
export type DeliverWebhookToSessionCallback = (params: DeliverWebhookToSessionParams) => Promise<{
84+
success: boolean;
85+
runId?: string; // the session's current run, persisted onto WebhookDelivery.runId
86+
error?: string;
87+
errorType?: WebhookDeliverTaskErrorType;
88+
skipped?: boolean; // resume-only and no session existed: recorded FILTERED, not routed
89+
skippedReason?: string;
90+
}>;
9591

9692
export type IngestInput = {
9793
opaqueId: string; // Q2: globally unique, so ingest resolves the endpoint (and its env id + type) from it

packages/redis-worker/src/mollifier/drainer.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1310,7 +1310,7 @@ describe("MollifierDrainer per-tick org cap", () => {
13101310
// Cursor advances by 1 each tick. Over envs.length ticks every env
13111311
// appears in exactly `sliceSize` of them (slices overlap — intentional,
13121312
// see the head-of-line fairness test below).
1313-
for (let i = 0; i < allEnvs.length; i++) {
1313+
for (const _ of allEnvs) {
13141314
await drainer.runOnce();
13151315
}
13161316

@@ -1356,7 +1356,7 @@ describe("MollifierDrainer per-tick org cap", () => {
13561356
logger: new Logger("test-drainer", "log"),
13571357
});
13581358

1359-
for (let tick = 0; tick < allEnvs.length; tick++) {
1359+
for (const _ of allEnvs) {
13601360
currentTick = [];
13611361
await drainer.runOnce();
13621362
currentTick.forEach((env, position) => {

packages/trigger-sdk/src/v3/retry.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -434,9 +434,7 @@ const getRetryStrategyForResponse = async (
434434
const statusCodes = Object.keys(retry);
435435
const clonedResponse = response.clone();
436436

437-
for (let i = 0; i < statusCodes.length; i++) {
438-
const statusRange = statusCodes[i];
439-
437+
for (const statusRange of statusCodes) {
440438
if (!statusRange) {
441439
continue;
442440
}

0 commit comments

Comments
 (0)