{"version":3,"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 { 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 handleFileChange = async (\n filePath: string,\n type: 'change' | 'unlink',\n ) => {\n const absPath = path.resolve(root, filePath)\n\n if (type === 'unlink') {\n manager.updateByFileId(absPath, [])\n } else if (type === 'change') {\n const isConfigFile = path.basename(absPath) === 'biome.json'\n\n if (isConfigFile) {\n const runCommand = getBiomeCommand(command, flags, root)\n const diagnostics = await runBiome(runCommand, root)\n manager.initWith(diagnostics)\n } else {\n const runCommand = getBiomeCommand(command, flags, absPath)\n const diagnosticsOfChangedFile = await runBiome(runCommand, root)\n manager.updateByFileId(absPath, diagnosticsOfChangedFile)\n }\n }\n\n dispatchDiagnostics()\n }\n\n // initial check\n const runCommand = getBiomeCommand(command, flags, root)\n const diagnostics = await runBiome(runCommand, root)\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: (path: string) => path.includes('node_modules'),\n })\n watcher.on('change', async (filePath) => {\n handleFileChange(filePath, 'change')\n })\n watcher.on('unlink', async (filePath) => {\n handleFileChange(filePath, 'unlink')\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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","names":["_a","diagnostics","runCommand","path"]}