app/api/trailer-trips/route.ts:20: const ids = idsParam.split(',').map(Number).filter(n => !isNaN(n) && n > 0); app/api/trailer-trips/clients/route.ts:17: return NextResponse.json(rows.map(r => r.client).filter(Boolean)); app/api/data-export/route.ts:55: ? trips.map(t => ({ app/api/data-export/route.ts:83: ? trailerTrips.map(t => ({ app/api/data-export/route.ts:104: ? fuel.map(f => ({ app/api/data-export/route.ts:121: ? expenses.map(e => ({ app/api/data-export/route.ts:136: ? income.map(i => ({ app/api/trailer-trips/pdf/route.ts:28: for (let i = 0; i < arr.length; i += n) r.push(arr.slice(i, i + n)); app/api/trailer-trips/pdf/route.ts:63: const cols = activeFields.map(f => ``).join(''); app/api/trailer-trips/pdf/route.ts:64: const ths = activeFields.map(f => `${f.label}`).join(''); app/api/trailer-trips/pdf/route.ts:66: const dataRows = Array.from({ length: rows }).map((_, i) => { app/api/trailer-trips/pdf/route.ts:69: const tds = activeFields.map(f => { app/api/trailer-trips/pdf/route.ts:133: const body = (pages.length > 0 ? pages : [[]]).map( app/api/trailer-trips/pdf/route.ts:177: ? fieldsParam.split(',').map(k => TRAILER_FIELDS.find(f => f.key === k)).filter((f): f is FieldDef => !!f) app/api/trailer-trips/pdf/route.ts:182: const idList = idsParam.split(',').map(v => parseInt(v)).filter(n => !isNaN(n)); app/api/trailer-trips/bulk-pay/route.ts:29: where: { id: { in: trips.map(t => t.id) } }, app/api/trailer-trips/bulk-pay/route.ts:32: return NextResponse.json({ ok: true, groupId, updated: trips.map(t => t.id) }); app/api/trailer-trips/bulk-pay/route.ts:47: where: { id: { in: unpaid.map(t => t.id) } }, app/api/trailer-trips/bulk-pay/route.ts:62: return NextResponse.json({ ok: true, groupId, updated: unpaid.map(t => t.id) }); app/api/trailer-trips/calendar/route.ts:24: for (const trip of trips) { app/api/income/route.ts:57: const tripGroupIds = Array.from(new Set(rawLogs.map(l => l.tripGroupId).filter((x): x is string => !!x))); app/api/income/route.ts:58: const trailerGroupIds = Array.from(new Set(rawLogs.map(l => l.trailerGroupId).filter((x): x is string => !!x))); app/api/income/route.ts:76: for (const t of tripGroupRows) { app/api/income/route.ts:82: for (const t of trailerGroupRows) { app/api/income/route.ts:88: const incomeLogs = rawLogs.map(l => ({ app/api/trailer-trips/fields/route.ts:26: const values = [...new Set(trips.map((t: any) => t[field]).filter(Boolean))] as string[]; app/api/trips/analyze/route.ts:30: const imageBlocks = images.map(img => ({ app/api/trailer-trips/excel/route.ts:48: ws.columns = activeFields.map(f => ({ width: Math.max(5, Math.round(f.weight / totalWeight * 80)) })); app/api/trailer-trips/excel/route.ts:80: const hRow = ws.addRow(activeFields.map(f => f.label)); app/api/trailer-trips/excel/route.ts:85: trips.forEach((t, idx) => { app/api/trailer-trips/excel/route.ts:86: const row = ws.addRow(activeFields.map(f => getCellValue(t, f.key, idx + 1))); app/api/trailer-trips/excel/route.ts:129: ? fieldsParam.split(',').map(k => TRAILER_FIELDS.find(f => f.key === k)).filter((f): f is FieldDef => !!f) app/api/trailer-trips/excel/route.ts:134: const idList = idsParam.split(',').map(v => parseInt(v)).filter(n => !isNaN(n)); app/api/trips/bulk-pay/route.ts:42: where: { id: { in: trips.map(t => t.id) } }, app/api/trips/bulk-pay/route.ts:60: where: { id: { in: unpaid.map(t => t.id) } }, app/api/income/sources/route.ts:18: const tripIds = incomes.map(i => i.tripId).filter((x): x is number => x != null); app/api/income/sources/route.ts:19: const trailerTripIds = incomes.map(i => i.trailerTripId).filter((x): x is number => x != null); app/api/income/sources/route.ts:20: const tripGroupIds = Array.from(new Set(incomes.map(i => i.tripGroupId).filter((x): x is string => !!x))); app/api/income/sources/route.ts:21: const trailerGroupIds = Array.from(new Set(incomes.map(i => i.trailerGroupId).filter((x): x is string => !!x))); app/api/income/sources/route.ts:40: for (const rows of [tc, ttc, gtc, gttc]) { app/api/income/sources/route.ts:41: for (const r of rows) if (r.client) set.add(r.client); app/api/income/calendar/route.ts:25: for (const log of logs) { app/api/trips/route.ts:44: const ids = idsParam.split(',').map(Number).filter(n => !isNaN(n) && n > 0); app/api/trips/excel/route.ts:43: ws.columns = activeFields.map(f => ({ width: Math.max(5, Math.round(f.weight / totalWeight * 80)) })); app/api/trips/excel/route.ts:76: const hRow = ws.addRow(activeFields.map(f => f.label)); app/api/trips/excel/route.ts:81: trips.forEach((t, idx) => { app/api/trips/excel/route.ts:82: const row = ws.addRow(activeFields.map(f => getCellValue(t, f.key, idx + 1))); app/api/trips/excel/route.ts:132: ? fieldsParam.split(',').map(k => GENERAL_FIELDS.find(f => f.key === k)).filter((f): f is FieldDef => !!f) app/api/trips/excel/route.ts:137: const idList = idsParam.split(',').map(v => parseInt(v)).filter(n => !isNaN(n)); app/api/trips/clients/route.ts:17: const clients = rows.map(r => r.client!).filter(Boolean).sort((a, b) => a.localeCompare(b, 'ko')); app/api/expenses/route.ts:42: return NextResponse.json({ categories: rows.map(r => r.category) }); app/api/trips/pdf/route.ts:30: for (let i = 0; i < arr.length; i += n) r.push(arr.slice(i, i + n)); app/api/trips/pdf/route.ts:60: const cols = activeFields.map(f => ``).join(''); app/api/trips/pdf/route.ts:61: const ths = activeFields.map(f => `${f.label}`).join(''); app/api/trips/pdf/route.ts:63: const dataRows = Array.from({ length: rows }).map((_, i) => { app/api/trips/pdf/route.ts:66: const tds = activeFields.map(f => { app/api/trips/pdf/route.ts:136: const body = (pages.length > 0 ? pages : [[]]).map( app/api/trips/pdf/route.ts:181: ? fieldsParam.split(',').map(k => GENERAL_FIELDS.find(f => f.key === k)).filter((f): f is FieldDef => !!f) app/api/trips/pdf/route.ts:186: const idList = idsParam.split(',').map(v => parseInt(v)).filter(n => !isNaN(n)); app/api/trips/[id]/route.ts:51: for (const k of allowed) { app/api/clients/route.ts:24: .map(r => r.client) app/api/trips/calendar/route.ts:25: for (const trip of trips) { app/api/expenses/calendar/route.ts:25: for (const exp of expenses) { app/api/cron/purge-data-reset/route.ts:17: for (const p of due) { app/api/stats/route.ts:72: for (let i = 5; i >= 0; i--) { app/api/stats/route.ts:89: allTrips.forEach(t => { app/api/stats/route.ts:93: allExpenses.forEach(e => { app/api/stats/route.ts:98: const chartData = Object.entries(monthlyStats).map(([name, data]) => ({ app/api/data-import/route.ts:92: for (const sheetName of wb.SheetNames) { app/api/data-import/route.ts:98: const data = rows.map(r => ({ app/api/data-import/route.ts:129: const data = rows.map(r => ({ app/api/data-import/route.ts:147: const data = rows.map(r => ({ app/api/data-import/route.ts:161: const data = rows.map(r => { app/api/data-import/route.ts:192: const data = rows.map(r => ({ app/api/expenses/[id]/route.ts:32: for (const k of allowed) { app/api/user/default-view/route.ts:20: for (const k of ALLOWED_KEYS) { app/api/invoices/calendar/route.ts:25: for (const trip of trips) { app/api/fuel/analyze/route.ts:136: const items: FuelItem[] = parsed.items.map((it: FuelItem) => ({ ...autoCorrect(it), type: it.type ?? null })); app/api/fuel/subsidy/route.ts:47: for (const log of historyLogs) { app/api/fuel/subsidy/route.ts:53: for (let i = 11; i >= 0; i--) { app/api/fuel/calendar/route.ts:28: for (const log of logs) { app/api/locations/route.ts:27: loadingLocs.forEach(t => { if (t.loadingLoc) locSet.add(t.loadingLoc); }); app/api/locations/route.ts:28: unloadingLocs.forEach(t => { if (t.unloadingLoc) locSet.add(t.unloadingLoc); }); app/api/invoices/route.ts:50: for (const t of trailerTrips) { app/api/invoices/route.ts:60: for (const t of trips) { app/api/invoices/route.ts:68: ...tripIndividual.map(t => ({ app/api/invoices/route.ts:75: ...Array.from(tripGroupMap.entries()).map(([groupId, ts]) => { app/api/invoices/route.ts:85: ...trailerIndividual.map(t => ({ app/api/invoices/route.ts:92: ...Array.from(trailerGroupMap.entries()).map(([groupId, ts]) => { app/api/feature-requests/[id]/route.ts:62: return NextResponse.json({ error: parsed.error.issues.map(i => i.message).join(', ') }, { status: 400 }); app/api/maintenance/route.ts:48: data: details.map((d: { itemName: string; partsCost?: number; laborCost?: number; amount?: number }) => ({ app/api/maintenance/[id]/route.ts:39: data: details.map((d: { itemName: string; partsCost?: number; laborCost?: number; amount?: number }) => ({ app/api/maintenance/intervals/route.ts:31: data: settings.map(s => ({ app/api/admin/permissions/[userId]/route.ts:37: for (const key of TOGGLABLE_PERMISSIONS) { app/api/feature-requests/route.ts:50: return NextResponse.json({ error: parsed.error.issues.map(i => i.message).join(', ') }, { status: 400 }); app/api/admin/users/bulk/route.ts:74: ids.forEach(id => invalidateUserCache(id)); app/api/admin/users/bulk/route.ts:79: ids.forEach(id => invalidateUserCache(id)); app/api/admin/worklog/route.ts:49: return NextResponse.json({ error: parsed.error.issues.map(i => i.message).join(', ') }, { status: 400 }); app/api/admin/worklog/[id]/route.ts:31: return NextResponse.json({ error: parsed.error.issues.map(i => i.message).join(', ') }, { status: 400 }); app/api/help-ai/route.ts:22: if (hits.size > 200) for (const [k, v] of hits) if (v.every(t => now - t >= RATE_WINDOW_MS)) hits.delete(k); app/api/help-ai/route.ts:47: .map((m): ChatMsg | null => { lib/validators.ts:116: return err.issues.map(i => i.message).join(', '); lib/permissions.ts:124: for (const key of TOGGLABLE_PERMISSIONS) { lib/permissions.ts:141: for (const p of TOGGLABLE_PERMISSIONS) { lib/permissions.ts:145: for (const p of ADMIN_ONLY_PERMISSIONS) { lib/chosung.ts:5: return [...str].map(ch => { lib/helpAi.ts:28: const docs = articles.map(a => `### ${a.title}\n${a.content}`).join('\n\n'); lib/helpAi.ts:35: contents: messages.map(m => ({ role: m.role, parts: [{ text: m.text }] })), lib/authOptions.ts:19: for (const [k] of sorted.slice(0, userCache.size - USER_CACHE_MAX + 500)) userCache.delete(k); lib/rateLimit.ts:18: for (const [k] of toDelete) buckets.delete(k); lib/rateLimit.test.ts:19: for (let i = 0; i < 5; i++) { lib/rateLimit.test.ts:28: for (let i = 0; i < 5; i++) checkRateLimit(key, 5, 60_000); lib/rateLimit.test.ts:39: for (let i = 0; i < 5; i++) checkRateLimit(a, 5, 60_000); lib/fuelSubsidy.ts:19: for (let i = 0; i < TONNAGE_THRESHOLDS.length; i++) { lib/push.ts:62: await Promise.all(subs.map(async sub => { lib/fuelSubsidy.test.ts:15: for (let i = 1; i < TONNAGE_OPTIONS.length; i++) {