{"version":3,"file":"main.js","names":[],"sources":["../../../src/checkers/biome/main.ts"],"sourcesContent":["import path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { parentPort } from 'node:worker_threads'\nimport chokidar from 'chokidar'\nimport { Checker } from '../../Checker.js'\nimport { FileDiagnosticManager } from '../../FileDiagnosticManager.js'\nimport {\n composeCheckerSummary,\n consoleLog,\n diagnosticToConsoleLevel,\n diagnosticToRuntimeError,\n diagnosticToTerminalLog,\n filterLogLevel,\n toClientPayload,\n} from '../../logger.js'\nimport {\n ACTION_TYPES,\n type CreateDiagnostic,\n DiagnosticLevel,\n} from '../../types.js'\nimport { applyBatchedDiagnostics } from '../_shared/applyBatchedDiagnostics.js'\nimport {\n createLintScheduler,\n DEFAULT_DEBOUNCE_MS,\n} from '../_shared/lintScheduler.js'\nimport { getBiomeCommand, runBiome, severityMap } from './cli.js'\n\nconst __filename = fileURLToPath(import.meta.url)\n\nconst manager = new FileDiagnosticManager()\nlet createServeAndBuild: any\n\nconst createDiagnostic: CreateDiagnostic<'biome'> = (pluginConfig) => {\n const biomeConfig = pluginConfig.biome\n let overlay = true\n let terminal = true\n\n let command = 'lint'\n let flags = ''\n\n if (typeof biomeConfig === 'object') {\n command = biomeConfig?.dev?.command || biomeConfig?.command || 'lint'\n flags = biomeConfig?.dev?.flags || biomeConfig?.flags || ''\n }\n\n return {\n config: async ({ enableOverlay, enableTerminal }) => {\n overlay = enableOverlay\n terminal = enableTerminal\n },\n async configureServer({ root }) {\n if (!biomeConfig) return\n\n const logLevel = (() => {\n if (typeof biomeConfig !== 'object') return undefined\n const userLogLevel = biomeConfig.dev?.logLevel\n if (!userLogLevel) return undefined\n\n return userLogLevel.map((l) => severityMap[l])\n })()\n\n const dispatchDiagnostics = () => {\n const diagnostics = filterLogLevel(manager.getDiagnostics(), logLevel)\n\n if (terminal) {\n for (const d of diagnostics) {\n consoleLog(\n diagnosticToTerminalLog(d, 'Biome'),\n diagnosticToConsoleLevel(d),\n )\n }\n\n const errorCount = diagnostics.filter(\n (d) => d.level === DiagnosticLevel.Error,\n ).length\n const warningCount = diagnostics.filter(\n (d) => d.level === DiagnosticLevel.Warning,\n ).length\n consoleLog(\n composeCheckerSummary('Biome', errorCount, warningCount),\n errorCount ? 'error' : warningCount ? 'warn' : 'info',\n )\n }\n\n if (overlay) {\n parentPort?.postMessage({\n type: ACTION_TYPES.overlayError,\n payload: toClientPayload(\n 'biome',\n diagnostics.map((d) => diagnosticToRuntimeError(d)),\n ),\n })\n }\n }\n\n const scheduler = createLintScheduler({\n debounceMs:\n (typeof biomeConfig === 'object'\n ? biomeConfig.dev?.debounceMs\n : undefined) ?? DEFAULT_DEBOUNCE_MS,\n onBatch: async (files) => {\n const hasConfigChange = files.some(\n (f) => path.basename(f) === 'biome.json',\n )\n if (hasConfigChange) {\n const diagnostics = await runBiome(\n getBiomeCommand(command, flags, [root]),\n root,\n )\n manager.initWith(diagnostics)\n } else {\n const diagnostics = await runBiome(\n getBiomeCommand(command, flags, files),\n root,\n )\n applyBatchedDiagnostics(manager, files, diagnostics, root)\n }\n dispatchDiagnostics()\n },\n })\n\n // initial check\n const diagnostics = await runBiome(\n getBiomeCommand(command, flags, [root]),\n root,\n )\n\n manager.initWith(diagnostics)\n dispatchDiagnostics()\n\n // watch lint\n let watchTarget: string | string[] = root\n if (typeof biomeConfig === 'object' && biomeConfig.watchPath) {\n if (Array.isArray(biomeConfig.watchPath)) {\n watchTarget = biomeConfig.watchPath.map((p) => path.resolve(root, p))\n } else {\n watchTarget = path.resolve(root, biomeConfig.watchPath)\n }\n }\n\n const watcher = chokidar.watch(watchTarget, {\n cwd: root,\n ignored: (p: string) => p.includes('node_modules'),\n })\n watcher.on('change', (filePath) => {\n scheduler.schedule(path.resolve(root, filePath))\n })\n watcher.on('unlink', (filePath) => {\n const absPath = path.resolve(root, filePath)\n manager.updateByFileId(absPath, [])\n dispatchDiagnostics()\n })\n },\n }\n}\n\nexport class BiomeChecker extends Checker<'biome'> {\n public constructor() {\n super({\n name: 'biome',\n absFilePath: __filename,\n build: {\n buildBin: (pluginConfig) => {\n if (typeof pluginConfig.biome === 'object') {\n const { command, flags } = pluginConfig.biome\n return ['biome', [command || 'check', flags || ''] as const]\n }\n return ['biome', ['check']]\n },\n },\n createDiagnostic,\n })\n }\n\n public init() {\n const _createServeAndBuild = super.initMainThread()\n createServeAndBuild = _createServeAndBuild\n super.initWorkerThread()\n }\n}\n\nexport { createServeAndBuild }\n\nconst biomeChecker = new BiomeChecker()\nbiomeChecker.prepare()\nbiomeChecker.init()\n"],"mappings":"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"}