Skip to content

Commit ca511e6

Browse files
dannyshmueliclaude
andcommitted
fix: resolve all remaining eslint errors (76 → 0)
- Convert all require() to ES imports for package.json, fs, os, path - Fix async Promise executor in interactive-menu.ts - Add eslint-disable for intentional control character regex patterns 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 5678f72 commit ca511e6

File tree

7 files changed

+38
-34
lines changed

7 files changed

+38
-34
lines changed

src/commands/send.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,25 @@
1-
import { SendOrchestrator, SendOptions } from '../lib/orchestrators/send-orchestrator';
1+
import chalk from 'chalk';
2+
import { execSync } from 'child_process';
3+
import { promises as fs } from 'fs';
4+
import os from 'os';
5+
import path from 'path';
6+
import packageJson from '../../package.json';
7+
import { isNetworkError, createNetworkError } from '../lib/errors/network-errors';
28
import { BackgroundSendOrchestrator } from '../lib/orchestrators/background-send-orchestrator';
39
import { HookSendOrchestrator } from '../lib/orchestrators/hook-send-orchestrator';
4-
import { SendProgressUI } from '../lib/ui/send/send-progress';
5-
import { SendSummaryUI } from '../lib/ui/send/send-summary';
6-
import { SendConfirmationUI } from '../lib/ui/send/send-confirmation';
10+
import { SendOrchestrator, SendOptions } from '../lib/orchestrators/send-orchestrator';
711
import { showPrivacyPreview } from '../lib/ui/privacy-preview';
812
import { parseProjectName } from '../lib/ui/project-display';
913
import { countTotalRedactions } from '../lib/ui/sanitization-display';
14+
import { SendConfirmationUI } from '../lib/ui/send/send-confirmation';
15+
import { SendProgressUI } from '../lib/ui/send/send-progress';
16+
import { SendSummaryUI } from '../lib/ui/send/send-summary';
1017
import { showUploadResults } from '../lib/ui';
1118
import { VibelogError } from '../utils/errors';
1219
import { logger } from '../utils/logger';
13-
import { isNetworkError, createNetworkError } from '../lib/errors/network-errors';
14-
import { checkForUpdate, shouldSpawnLatestForHook, VersionCheckResult } from '../utils/version-check';
15-
import { tryAcquireUpdateLock, UpdateLock } from '../utils/update-lock';
1620
import { clearNpxCache, checkNpxCacheHealth } from '../utils/npx-cache';
17-
import { execSync } from 'child_process';
18-
import chalk from 'chalk';
21+
import { tryAcquireUpdateLock, UpdateLock } from '../utils/update-lock';
22+
import { checkForUpdate, shouldSpawnLatestForHook, VersionCheckResult } from '../utils/version-check';
1923

2024
/**
2125
* Send session data to Vibelog API
@@ -44,7 +48,7 @@ export async function send(options: SendOptions): Promise<void> {
4448
// When triggered by hooks, check for updates but don't block session processing.
4549
// Updates happen in background while current version continues processing.
4650
if (options.hookTrigger && !process.env.VIBE_LOG_SKIP_UPDATE) {
47-
const currentVersion = process.env.SIMULATE_OLD_VERSION || require('../../package.json').version;
51+
const currentVersion = process.env.SIMULATE_OLD_VERSION || packageJson.version;
4852
logger.debug(`Checking version update: hookTrigger=${options.hookTrigger}, currentVersion=${currentVersion}`);
4953

5054
const versionCheck = await checkForUpdate(currentVersion);
@@ -378,10 +382,6 @@ async function updateInBackground(
378382
* Log update events to update log file
379383
*/
380384
async function logUpdateEvent(message: string): Promise<void> {
381-
const fs = require('fs').promises;
382-
const path = require('path');
383-
const os = require('os');
384-
385385
const updateLogPath = path.join(os.homedir(), '.vibe-log', 'update.log');
386386
const timestamp = new Date().toISOString();
387387
const logLine = `[${timestamp}] ${message}\n`;

src/lib/api-client.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import axios, { AxiosInstance, AxiosError } from 'axios';
2+
import crypto from 'crypto';
3+
import packageJson from '../../package.json';
4+
import { claudeSettingsManager } from './claude-settings-manager';
25
import { getToken, getApiUrl, getStatusLinePersonality } from './config';
3-
import { VibelogError } from '../utils/errors';
4-
import { validateUrl } from './input-validator';
5-
import { logger } from '../utils/logger';
66
import { isNetworkError, createNetworkError } from './errors/network-errors';
7-
import { claudeSettingsManager } from './claude-settings-manager';
8-
import crypto from 'crypto';
7+
import { validateUrl } from './input-validator';
98
import type { CliTelemetry } from './telemetry';
9+
import { VibelogError } from '../utils/errors';
10+
import { logger } from '../utils/logger';
1011

1112
export interface Session {
1213
tool: 'claude_code' | 'cursor' | 'vscode';
@@ -98,7 +99,7 @@ async function gatherCLIConfiguration(origin?: string): Promise<CLIConfiguration
9899
const featureStatus = await claudeSettingsManager.getFeatureStatus();
99100

100101
return {
101-
version: require('../../package.json').version,
102+
version: packageJson.version,
102103
origin: origin || null, // No fallback - must be explicitly set
103104
statusline: {
104105
personality: statuslineConfig.personality,
@@ -128,7 +129,7 @@ class SecureApiClient {
128129
timeout: 30000,
129130
headers: {
130131
'Content-Type': 'application/json',
131-
'User-Agent': `vibe-log-CLI/${require('../../package.json').version}`,
132+
'User-Agent': `vibe-log-CLI/${packageJson.version}`,
132133
'X-Client-Version': '1.0.0',
133134
},
134135
// Prevent automatic redirects to avoid SSRF

src/lib/auth/browser.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,12 +321,14 @@ function isValidTokenFormat(token: string): boolean {
321321
}
322322

323323
// Check for common injection patterns
324+
/* eslint-disable no-control-regex */
324325
const dangerousPatterns = [
325326
/[<>]/, // HTML injection
326327
/[`${}]/, // Template injection
327-
/[\u0000-\u001F]/, // Control characters eslint-disable-line no-control-regex
328+
/[\u0000-\u001F]/, // Control characters
328329
/['";\\]/, // SQL/Command injection
329330
];
331+
/* eslint-enable no-control-regex */
330332

331333
return !dangerousPatterns.some(pattern => pattern.test(token));
332334
}

src/lib/input-validator.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,12 +219,14 @@ export function validateAuthToken(token: string): string {
219219
}
220220

221221
// Check for common injection patterns
222+
/* eslint-disable no-control-regex */
222223
const dangerousPatterns = [
223224
/[<>]/, // HTML injection
224225
/[`${}]/, // Template injection
225-
/[\u0000-\u001F]/, // Control characters eslint-disable-line no-control-regex
226+
/[\u0000-\u001F]/, // Control characters
226227
/[';\\]/, // SQL/Command injection
227228
];
229+
/* eslint-enable no-control-regex */
228230

229231
for (const pattern of dangerousPatterns) {
230232
if (pattern.test(trimmed)) {

src/lib/telemetry.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1+
import packageJson from '../../package.json';
12
import { getToken, getStatusLinePersonality } from './config';
23
import { detectSetupState } from './detector';
34
import { getHooksStatus } from './hooks/hooks-controller';
45
import { logger } from '../utils/logger';
56

6-
const pkg = require('../../package.json');
7-
87
export interface CliTelemetry {
98
// Installation state
109
hooksInstalled: boolean;
@@ -43,7 +42,7 @@ export async function collectTelemetry(): Promise<CliTelemetry | null> {
4342
trackedProjectCount: state.trackedProjectCount,
4443
statusLineInstalled: state.hasStatusLine,
4544
statusLinePersonality: statusLine?.personality || 'gordon',
46-
cliVersion: pkg.version,
45+
cliVersion: packageJson.version,
4746
hookVersion: hookStatus.sessionStartHook?.version || hookStatus.preCompactHook?.version, // Deprecated
4847
sessionStartHookVersion: hookStatus.sessionStartHook?.version,
4948
preCompactHookVersion: hookStatus.preCompactHook?.version,

src/lib/ui/first-time-welcome.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
import chalk from 'chalk';
12
import inquirer from 'inquirer';
3+
import packageJson from '../../../package.json';
24
import { colors } from './styles';
3-
import chalk from 'chalk';
45
import { InteractiveMenu, MenuOption } from './interactive-menu';
56

67
export type WelcomeChoice = 'standup' | 'local' | 'cloud' | 'statusline' | 'exit';
@@ -80,8 +81,7 @@ export async function showFirstTimeWelcome(): Promise<WelcomeChoice> {
8081

8182
// Show logo and slogan
8283
const { showLogo } = await import('../ui');
83-
const pkg = require('../../../package.json');
84-
const version = process.env.SIMULATE_OLD_VERSION || pkg.version;
84+
const version = process.env.SIMULATE_OLD_VERSION || packageJson.version;
8585
await showLogo(version);
8686

8787
console.log();

src/lib/ui/interactive-menu.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import readline from 'readline';
21
import chalk from 'chalk';
2+
import readline from 'readline';
3+
import packageJson from '../../../package.json';
34
import { colors } from './styles';
45

56
export interface MenuOption {
@@ -39,8 +40,7 @@ export class InteractiveMenu {
3940

4041
// Show logo first
4142
const { showLogo } = await import('../ui');
42-
const pkg = require('../../../package.json');
43-
const version = process.env.SIMULATE_OLD_VERSION || pkg.version;
43+
const version = process.env.SIMULATE_OLD_VERSION || packageJson.version;
4444
await showLogo(version);
4545

4646
// Slogan as single line, left-aligned
@@ -75,9 +75,9 @@ export class InteractiveMenu {
7575
}
7676

7777
async show(): Promise<string | null> {
78-
return new Promise(async (resolve) => {
79-
await this.render();
78+
await this.render();
8079

80+
return new Promise((resolve) => {
8181
const handleKeypress = async (_str: string | undefined, key: any) => {
8282
if (key) {
8383
if (key.name === 'up') {

0 commit comments

Comments
 (0)