{
  "version": 3,
  "sources": ["../src/chunky-lint.ts", "../src/lib/chunker.ts", "../src/lib/errors.ts", "../src/lib/eslint-loader.ts", "../src/lib/file-scanner.ts", "../src/lib/logger.ts"],
  "sourcesContent": ["/**\n * ESLint Chunker - Auto-chunking ESLint runner with incremental cache updates.\n *\n * @example\n *\n * ```typescript\n * import { ESLintChunker } from \"eslint-chunker\";\n *\n * const chunker = new ESLintChunker({\n *     size: 150,\n *     cacheLocation: \".cache/.eslintcache\",\n *     fix: true,\n *     verbose: true,\n * });\n *\n * const stats = await chunker.run();\n * ```\n */\n\nimport type {\n    ChunkerOptions as ChunkerOptionsType,\n    ChunkingStats as ChunkingStatsType,\n    ChunkResult as ChunkResultType,\n    FileDiscoveryOptions as FileDiscoveryOptionsType,\n    Logger as LoggerType,\n    ProgressCallback as ProgressCallbackType,\n} from \"./types/chunky-lint-types.js\";\n\nimport { ESLintChunker } from \"./lib/chunker.js\";\n\nexport { ESLintChunker } from \"./lib/chunker.js\";\nexport { FileScanner } from \"./lib/file-scanner.js\";\nexport { ConsoleLogger } from \"./lib/logger.js\";\n\n/**\n * Chunker options contract.\n */\nexport type ChunkerOptions = ChunkerOptionsType;\n\n/**\n * Chunker summary statistics.\n */\nexport type ChunkingStats = ChunkingStatsType;\n\n/**\n * Result for a single processed chunk.\n */\nexport type ChunkResult = ChunkResultType;\n\n/**\n * File discovery options contract.\n */\nexport type FileDiscoveryOptions = FileDiscoveryOptionsType;\n\n/**\n * Logger interface used by runtime components.\n */\nexport type Logger = LoggerType;\n\n/**\n * Progress callback signature.\n */\nexport type ProgressCallback = ProgressCallbackType;\n\n/**\n * Default export for convenience.\n */\nexport default ESLintChunker;\n", "import type { ESLint as ESLintType } from \"eslint\";\nimport type { Except } from \"type-fest\";\n\nimport { performance } from \"node:perf_hooks\";\nimport pLimit from \"p-limit\";\nimport { isEmpty, isInteger, safeCastTo, stringSplit } from \"ts-extras\";\nimport colors from \"yoctocolors\";\n\nimport type {\n    ChunkerOptions,\n    ChunkingStats,\n    ChunkResult,\n    Logger,\n    ProgressCallback,\n} from \"../types/chunky-lint-types.js\";\n\nimport { getErrorMessage } from \"./errors.js\";\nimport { loadESLintModule } from \"./eslint-loader.js\";\nimport { FileScanner } from \"./file-scanner.js\";\nimport { ConsoleLogger } from \"./logger.js\";\n\ntype NormalizedChunkerOptions = Except<\n    Required<ChunkerOptions>,\n    \"config\" | \"ignore\" | \"include\"\n> & {\n    config?: string;\n    ignore?: string[];\n    include?: string[];\n};\n\n/**\n * ESLint Chunker - main orchestrator for chunked ESLint execution.\n */\nexport class ESLintChunker {\n    private readonly fileScanner: FileScanner;\n    private readonly logger: Logger;\n    private readonly options: NormalizedChunkerOptions;\n\n    public constructor(options: Readonly<ChunkerOptions> = {}) {\n        this.options = ESLintChunker.normalizeOptions(options);\n        this.logger = new ConsoleLogger(\n            this.options.verbose,\n            this.options.quiet\n        );\n        this.fileScanner = new FileScanner(this.logger);\n    }\n\n    private static createStats(\n        chunkResults: readonly Readonly<ChunkResult>[],\n        totalFiles: number,\n        totalTime: number\n    ): ChunkingStats {\n        const failedChunks = chunkResults.filter(\n            (chunk) => !chunk.success\n        ).length;\n        const filesFixed = chunkResults.reduce(\n            (sum, chunk) => sum + chunk.fixedCount,\n            0\n        );\n        const filesWithErrors = chunkResults.reduce(\n            (sum, chunk) =>\n                sum + (chunk.errorCount > 0 ? chunk.files.length : 0),\n            0\n        );\n        const filesWithWarnings = chunkResults.reduce(\n            (sum, chunk) =>\n                sum + (chunk.warningCount > 0 ? chunk.files.length : 0),\n            0\n        );\n\n        return {\n            failedChunks,\n            filesFixed,\n            filesWithErrors,\n            filesWithWarnings,\n            totalChunks: chunkResults.length,\n            totalFiles,\n            totalTime,\n        };\n    }\n\n    private static getEslintMajorVersion(ESLint: unknown): null | number {\n        if (typeof ESLint !== \"object\" || ESLint === null) {\n            return null;\n        }\n\n        const version =\n            safeCastTo<Readonly<{ version?: unknown }>>(ESLint).version;\n\n        if (typeof version !== \"string\") {\n            return null;\n        }\n\n        const [majorSegment] = stringSplit(version, \".\");\n        const major = Number(majorSegment);\n\n        return isInteger(major) ? major : null;\n    }\n\n    private static normalizeOptions(\n        options: Readonly<ChunkerOptions>\n    ): NormalizedChunkerOptions {\n        const normalized: NormalizedChunkerOptions = {\n            cacheLocation: options.cacheLocation ?? \".eslintcache\",\n            chunkLogs: options.chunkLogs ?? true,\n            concurrency: Math.max(1, options.concurrency ?? 1),\n            continueOnError: options.continueOnError ?? false,\n            cwd: options.cwd ?? process.cwd(),\n            fix: options.fix ?? false,\n            fixTypes: options.fixTypes ?? [\n                \"problem\",\n                \"suggestion\",\n                \"layout\",\n            ],\n            maxWorkers: options.maxWorkers ?? \"off\",\n            quiet: options.quiet ?? false,\n            size: Math.max(1, options.size ?? 200),\n            verbose: options.verbose ?? false,\n            warnIgnored: options.warnIgnored !== false,\n        };\n\n        if (typeof options.config === \"string\" && options.config.length > 0) {\n            normalized.config = options.config;\n        }\n\n        if (Array.isArray(options.include)) {\n            normalized.include = [...options.include];\n        }\n\n        if (Array.isArray(options.ignore)) {\n            normalized.ignore = [...options.ignore];\n        }\n\n        return normalized;\n    }\n\n    /**\n     * Run ESLint in chunked mode.\n     *\n     * @throws - When ESLint loading, file discovery, or chunk processing fails.\n     */\n    public async run(\n        progressCallback?: ProgressCallback\n    ): Promise<ChunkingStats> {\n        const startTime = performance.now();\n        this.logger.info(\"Starting ESLint chunker...\");\n\n        try {\n            const files = await this.fileScanner.scanFiles(\n                this.createFileDiscoveryOptions()\n            );\n\n            if (isEmpty(files)) {\n                this.logger.warn(\"No files found to lint\");\n                return ESLintChunker.createStats(\n                    [],\n                    0,\n                    performance.now() - startTime\n                );\n            }\n\n            const chunks = this.fileScanner.chunkFiles(\n                files,\n                this.options.size\n            );\n            this.logger.info(\n                `Processing ${files.length.toString()} files in ${chunks.length.toString()} chunks of ~${this.options.size.toString()} files each`\n            );\n\n            const chunkResults = await this.processChunks(\n                chunks,\n                progressCallback\n            );\n            const endTime = performance.now();\n            const stats = ESLintChunker.createStats(\n                chunkResults,\n                files.length,\n                endTime - startTime\n            );\n\n            this.logFinalStats(stats);\n            return stats;\n        } catch (error) {\n            this.logger.error(\"ESLint chunker failed:\", error);\n            throw error;\n        }\n    }\n\n    private createFileDiscoveryOptions(): {\n        config?: string;\n        cwd: string;\n        ignore?: string[];\n        include?: string[];\n    } {\n        const fileDiscoveryOptions: {\n            config?: string;\n            cwd: string;\n            ignore?: string[];\n            include?: string[];\n        } = { cwd: this.options.cwd };\n\n        if (\n            typeof this.options.config === \"string\" &&\n            this.options.config.length > 0\n        ) {\n            fileDiscoveryOptions.config = this.options.config;\n        }\n\n        if (Array.isArray(this.options.include)) {\n            fileDiscoveryOptions.include = this.options.include;\n        }\n\n        if (Array.isArray(this.options.ignore)) {\n            fileDiscoveryOptions.ignore = this.options.ignore;\n        }\n\n        return fileDiscoveryOptions;\n    }\n\n    private async lintChunkFiles(\n        files: readonly string[]\n    ): Promise<ESLintType.LintResult[]> {\n        const { ESLint } = await loadESLintModule();\n        const eslintMajorVersion = ESLintChunker.getEslintMajorVersion(ESLint);\n\n        const eslintOptions: ESLintType.Options = {\n            cache: true,\n            cacheLocation: this.options.cacheLocation,\n            cwd: this.options.cwd,\n            fix: this.options.fix,\n            fixTypes: this.options.fixTypes,\n            warnIgnored: this.options.warnIgnored,\n        };\n\n        if (eslintMajorVersion !== null && eslintMajorVersion >= 10) {\n            eslintOptions.concurrency = this.options.maxWorkers;\n        }\n\n        if (\n            typeof this.options.config === \"string\" &&\n            this.options.config.length > 0\n        ) {\n            eslintOptions.overrideConfigFile = this.options.config;\n        }\n\n        const eslint = new ESLint(eslintOptions);\n        const results = await eslint.lintFiles([...files]);\n\n        if (this.options.fix) {\n            await ESLint.outputFixes(results);\n        }\n\n        return results;\n    }\n\n    private logChunkProgress(\n        result: Readonly<ChunkResult>,\n        completed: number,\n        total: number\n    ): void {\n        const progress = Math.round((completed / total) * 100);\n        const statusIcon = result.success ? \"\u2705\" : \"\u274C\";\n\n        let message = `${statusIcon} Chunk ${completed.toString()}/${total.toString()} (${progress.toString()}%)`;\n\n        if (result.success) {\n            const time = Math.round(result.processingTime);\n            message += ` - ${result.files.length.toString()} files, ${time.toString()}ms`;\n\n            if (result.errorCount > 0) {\n                message += colors.red(\n                    ` - ${result.errorCount.toString()} errors`\n                );\n            }\n\n            if (result.warningCount > 0) {\n                message += colors.yellow(\n                    ` - ${result.warningCount.toString()} warnings`\n                );\n            }\n\n            if (result.fixedCount > 0) {\n                message += colors.green(\n                    ` - ${result.fixedCount.toString()} fixed`\n                );\n            }\n        } else {\n            message += colors.red(\n                ` - FAILED: ${result.error ?? \"Unknown failure\"}`\n            );\n        }\n\n        this.logger.info(message);\n    }\n\n    private logFinalStats(stats: Readonly<ChunkingStats>): void {\n        if (this.options.quiet) {\n            return;\n        }\n\n        const avgTimePerFile =\n            stats.totalFiles > 0\n                ? Math.round(stats.totalTime / stats.totalFiles)\n                : 0;\n        const totalTime = Math.round(stats.totalTime);\n\n        this.logger.info(\"\");\n        this.logger.info(colors.green(\"\u2705 ESLint chunker completed!\"));\n        this.logger.info(\n            `\uD83D\uDCCA Processed ${stats.totalFiles.toString()} files in ${stats.totalChunks.toString()} chunks`\n        );\n        this.logger.info(\n            `\u23F1\uFE0F  Total time: ${totalTime.toString()}ms (~${avgTimePerFile.toString()}ms per file)`\n        );\n\n        if (stats.filesWithErrors > 0) {\n            this.logger.info(\n                colors.red(\n                    `\u274C Files with errors: ${stats.filesWithErrors.toString()}`\n                )\n            );\n        }\n\n        if (stats.filesWithWarnings > 0) {\n            this.logger.info(\n                colors.yellow(\n                    `\u26A0\uFE0F  Files with warnings: ${stats.filesWithWarnings.toString()}`\n                )\n            );\n        }\n\n        if (stats.filesFixed > 0) {\n            this.logger.info(\n                colors.green(`\uD83D\uDD27 Files fixed: ${stats.filesFixed.toString()}`)\n            );\n        }\n\n        if (stats.failedChunks > 0) {\n            this.logger.info(\n                colors.red(`\uD83D\uDCA5 Failed chunks: ${stats.failedChunks.toString()}`)\n            );\n        }\n    }\n\n    private async processChunk(\n        files: readonly string[],\n        chunkIndex: number\n    ): Promise<ChunkResult> {\n        const startTime = performance.now();\n\n        this.logger.verbose(\n            `Processing chunk ${(chunkIndex + 1).toString()} with ${files.length.toString()} files`\n        );\n\n        let results: ESLintType.LintResult[];\n        try {\n            results = await this.lintChunkFiles(files);\n        } catch (error) {\n            const processingTime = performance.now() - startTime;\n            return {\n                chunkIndex,\n                error: getErrorMessage(error),\n                errorCount: 0,\n                files: [...files],\n                fixedCount: 0,\n                processingTime,\n                success: false,\n                warningCount: 0,\n            };\n        }\n\n        const errorCount = results.reduce(\n            (sum: number, result: Readonly<ESLintType.LintResult>) =>\n                sum + result.errorCount,\n            0\n        );\n        const fixedCount = results.reduce(\n            (sum: number, result: Readonly<ESLintType.LintResult>) =>\n                sum + (typeof result.output === \"string\" ? 1 : 0),\n            0\n        );\n        const warningCount = results.reduce(\n            (sum: number, result: Readonly<ESLintType.LintResult>) =>\n                sum + result.warningCount,\n            0\n        );\n        const processingTime = performance.now() - startTime;\n\n        return {\n            chunkIndex,\n            errorCount,\n            files: [...files],\n            fixedCount,\n            processingTime,\n            success: true,\n            warningCount,\n        };\n    }\n\n    private async processChunks(\n        chunks: readonly (readonly string[])[],\n        progressCallback?: ProgressCallback\n    ): Promise<ChunkResult[]> {\n        const limit = pLimit(this.options.concurrency);\n        const chunkPromises = chunks.map((chunk, index) =>\n            limit(() => this.processChunk(chunk, index))\n        );\n\n        const resolvedResults = await Promise.all(chunkPromises);\n        const results: ChunkResult[] = [];\n        for (const result of resolvedResults) {\n            results.push(result);\n\n            const completed = results.length;\n\n            if (this.options.chunkLogs && !this.options.quiet) {\n                this.logChunkProgress(result, completed, chunks.length);\n            }\n\n            if (typeof progressCallback === \"function\") {\n                progressCallback(completed, chunks.length, result);\n            }\n\n            if (!result.success && !this.options.continueOnError) {\n                throw new Error(result.error ?? \"Chunk processing failed\");\n            }\n        }\n\n        return results;\n    }\n}\n", "import type { UnknownRecord } from \"type-fest\";\n\nimport { inspect } from \"node:util\";\nimport { keyIn } from \"ts-extras\";\n\nconst isUnknownRecord = (value: unknown): value is UnknownRecord =>\n    typeof value === \"object\" && value !== null;\n\nconst hasStringMessage = (\n    value: unknown\n): value is Readonly<{ message: string }> =>\n    isUnknownRecord(value) &&\n    keyIn(value, \"message\") &&\n    typeof value[\"message\"] === \"string\";\n\nconst hasStringStack = (value: unknown): value is Readonly<{ stack: string }> =>\n    isUnknownRecord(value) &&\n    keyIn(value, \"stack\") &&\n    typeof value[\"stack\"] === \"string\";\n\n/**\n * Convert an unknown caught value into a useful message string.\n */\nexport const getErrorMessage = (error: unknown): string => {\n    if (hasStringMessage(error)) return error.message;\n    if (typeof error === \"string\") return error;\n    return inspect(error);\n};\n\n/**\n * Return a stack trace when an unknown caught value exposes one.\n */\nexport const getErrorStack = (error: unknown): string | undefined =>\n    hasStringStack(error) ? error.stack : undefined;\n", "import type { ESLint as ESLintClass } from \"eslint\";\n\nimport { getErrorMessage } from \"./errors.js\";\n\n/**\n * Shape of the dynamically-loaded `eslint` module used by this package.\n *\n * @remarks\n * Defined as a structural interface (rather than `typeof import(\"eslint\")`) to\n * avoid inline `import()` type annotations that are disallowed by\n * `@typescript-eslint/consistent-type-imports`.\n */\nexport interface ESLintModule {\n    readonly ESLint: {\n        readonly outputFixes: typeof ESLintClass.outputFixes;\n        new (options?: Readonly<ESLintClass.Options>): ESLintClass;\n    };\n}\n\n/**\n * Loads ESLint at runtime and provides a friendly error when the peer\n * dependency is missing from the consuming project.\n */\ntype ESLintImporter = () => Promise<ESLintModule>;\n\nconst importESLint: ESLintImporter = async () => import(\"eslint\");\n\n/**\n * Load the ESLint module using the provided importer function.\n *\n * @throws - When ESLint cannot be imported.\n */\nexport async function loadESLintModule(\n    importer: ESLintImporter = importESLint\n): Promise<ESLintModule> {\n    try {\n        return await importer();\n    } catch (error) {\n        const message = getErrorMessage(error),\n            normalizedMessage = message.toLowerCase();\n\n        const isMissingEslint =\n            normalizedMessage.includes(\"cannot find package 'eslint'\") ||\n            normalizedMessage.includes('cannot find package \"eslint\"') ||\n            normalizedMessage.includes(\"cannot find module 'eslint'\") ||\n            normalizedMessage.includes('cannot find module \"eslint\"');\n\n        if (isMissingEslint) {\n            throw new Error(\n                \"Missing peer dependency 'eslint'. Install it in your project (for example: npm i -D eslint@^10).\",\n                { cause: error }\n            );\n        }\n\n        throw error;\n    }\n}\n", "import type { ESLint } from \"eslint\";\nimport type { UnknownRecord } from \"type-fest\";\n\nimport * as path from \"node:path\";\nimport { glob } from \"tinyglobby\";\nimport { objectHasOwn, safeCastTo } from \"ts-extras\";\n\nimport type {\n    FileDiscoveryOptions,\n    Logger,\n} from \"../types/chunky-lint-types.js\";\n\nimport { getErrorMessage } from \"./errors.js\";\nimport { loadESLintModule } from \"./eslint-loader.js\";\n\n/**\n * Default include patterns for common file extensions\n */\nconst /**\n     * Default ignore patterns\n     */\n    DEFAULT_IGNORE_PATTERNS = [\n        \"node_modules/**\",\n        \"dist/**\",\n        \"build/**\",\n        \"coverage/**\",\n        \".git/**\",\n        \"**/*.min.js\",\n        \"**/*.bundle.js\",\n    ],\n    DEFAULT_INCLUDE_PATTERNS = [\n        \"**/*.js\",\n        \"**/*.jsx\",\n        \"**/*.ts\",\n        \"**/*.tsx\",\n        \"**/*.mjs\",\n        \"**/*.cjs\",\n        \"**/*.vue\",\n    ];\n\nconst extractIgnorePatterns = (config: unknown): string[] => {\n    const ignorePatterns: string[] = [];\n\n    if (\n        config !== null &&\n        typeof config === \"object\" &&\n        objectHasOwn(config, \"ignorePatterns\")\n    ) {\n        const patterns = safeCastTo<UnknownRecord>(config)[\"ignorePatterns\"];\n        if (Array.isArray(patterns)) {\n            ignorePatterns.push(\n                ...patterns.filter(\n                    (pattern): pattern is string => typeof pattern === \"string\"\n                )\n            );\n        }\n    }\n\n    return ignorePatterns;\n};\n\n/**\n * File scanner that discovers files to lint based on ESLint configuration\n */\nexport class FileScanner {\n    private readonly logger: Logger;\n\n    public constructor(logger: Readonly<Logger>) {\n        this.logger = logger;\n    }\n\n    /**\n     * Split files into chunks\n     *\n     * @throws - When `chunkSize` is less than 1.\n     */\n    public chunkFiles(files: readonly string[], chunkSize: number): string[][] {\n        if (chunkSize <= 0) {\n            throw new Error(\"Chunk size must be greater than 0\");\n        }\n\n        const chunks: string[][] = [];\n        for (let index = 0; index < files.length; index += chunkSize) {\n            chunks.push(files.slice(index, index + chunkSize));\n        }\n\n        this.logger.debug(\n            `Split ${files.length.toString()} files into ${chunks.length.toString()} chunks of ~${chunkSize.toString()} files each`\n        );\n\n        return chunks;\n    }\n\n    /**\n     * Scan and discover files to lint\n     *\n     * @throws - When ESLint loading or file discovery fails.\n     */\n    public async scanFiles(\n        options: Readonly<FileDiscoveryOptions> = {}\n    ): Promise<string[]> {\n        const {\n            config,\n            cwd = process.cwd(),\n            followSymlinks = false,\n            ignore = DEFAULT_IGNORE_PATTERNS,\n            include = DEFAULT_INCLUDE_PATTERNS,\n        } = options;\n\n        this.logger.verbose(\"Starting file discovery...\");\n        this.logger.debug(\"Discovery options:\", {\n            config: config ?? \"auto-detect (ESLint default)\",\n            cwd,\n            ignore,\n            include,\n        });\n\n        try {\n            const { ESLint } = await loadESLintModule();\n\n            // Create ESLint instance to get configuration\n            const eslintOptions: ESLint.Options = {\n                cwd,\n                ignore: true,\n            };\n\n            // Only set overrideConfigFile if config is explicitly provided\n            if (typeof config === \"string\" && config.length > 0) {\n                eslintOptions.overrideConfigFile = config;\n            }\n\n            const eslint = new ESLint(eslintOptions);\n            // Get ignore patterns from ESLint configuration\n            const eslintIgnorePatterns = await this.getESLintIgnorePatterns(\n                eslint,\n                cwd\n            );\n            // Combine ignore patterns\n            const allIgnorePatterns = [\n                ...ignore,\n                ...eslintIgnorePatterns,\n            ].filter((pattern): pattern is string => pattern.length > 0);\n\n            this.logger.debug(\"Combined ignore patterns:\", allIgnorePatterns);\n\n            // Use fast-glob to find files\n            const files = await glob(include, {\n                absolute: true,\n                cwd,\n                followSymbolicLinks: followSymlinks,\n                ignore: allIgnorePatterns,\n                onlyFiles: true,\n            });\n            // Filter out files that ESLint would ignore\n            const filteredFiles = await this.filterIgnoredFiles(eslint, files);\n\n            this.logger.info(\n                `Discovered ${filteredFiles.length.toString()} files to lint (${(\n                    files.length - filteredFiles.length\n                ).toString()} ignored)`\n            );\n            this.logger.verbose(\"Files found:\", filteredFiles);\n\n            return filteredFiles;\n        } catch (error) {\n            this.logger.error(\"Error during file discovery:\", error);\n            throw new Error(\n                `File discovery failed: ${getErrorMessage(error)}`,\n                { cause: error }\n            );\n        }\n    }\n\n    /**\n     * Filter out files that ESLint would ignore\n     */\n    private async filterIgnoredFiles(\n        eslint: ESLint,\n        files: readonly string[]\n    ): Promise<string[]> {\n        const filteredFiles: string[] = [];\n\n        /* eslint-disable no-await-in-loop -- ESLint ignore checks must be awaited per file to preserve deterministic behavior. */\n        for (const file of files) {\n            try {\n                const isIgnored = await eslint.isPathIgnored(file);\n                if (isIgnored) {\n                    this.logger.verbose(`File ignored by ESLint: ${file}`);\n                } else {\n                    filteredFiles.push(file);\n                }\n            } catch (error) {\n                // If we can't determine if a file is ignored, include it\n                this.logger.debug(\n                    `Could not check if file is ignored: ${file}`,\n                    error\n                );\n                filteredFiles.push(file);\n            }\n        }\n        /* eslint-enable no-await-in-loop -- Restore the default rule after sequential ignore checks. */\n\n        return filteredFiles;\n    }\n\n    /**\n     * Get ignore patterns from ESLint configuration\n     */\n    private async getESLintIgnorePatterns(\n        eslint: ESLint,\n        cwd: string\n    ): Promise<string[]> {\n        try {\n            // Try to get ignore patterns from a sample file\n            const sampleFile = path.resolve(cwd, \"package.json\");\n\n            const config: unknown =\n                await eslint.calculateConfigForFile(sampleFile);\n\n            return extractIgnorePatterns(config);\n        } catch (error) {\n            this.logger.debug(\n                \"Could not extract ignore patterns from ESLint config:\",\n                error\n            );\n            return [];\n        }\n    }\n}\n", "import type { UnknownArray } from \"type-fest\";\n\nimport { formatWithOptions } from \"node:util\";\nimport colors from \"yoctocolors\";\n\nimport type { Logger } from \"../types/chunky-lint-types.js\";\n\n/**\n * Console logger implementation with colored output\n */\nexport class ConsoleLogger implements Logger {\n    private quietMode: boolean;\n    private verboseMode: boolean;\n\n    public constructor(isVerbose = false, isQuiet = false) {\n        this.verboseMode = isVerbose;\n        this.quietMode = isQuiet;\n    }\n\n    private static writeStderr(\n        prefix: string,\n        message: string,\n        ...args: Readonly<UnknownArray>\n    ): void {\n        process.stderr.write(\n            `${formatWithOptions({ colors: true }, \"%s %s\", prefix, message)}${\n                args.length > 0\n                    ? ` ${formatWithOptions({ colors: true }, \"%o\", args)}`\n                    : \"\"\n            }\\n`\n        );\n    }\n\n    private static writeStdout(\n        prefix: string,\n        message: string,\n        ...args: Readonly<UnknownArray>\n    ): void {\n        process.stdout.write(\n            `${formatWithOptions({ colors: true }, \"%s %s\", prefix, message)}${\n                args.length > 0\n                    ? ` ${formatWithOptions({ colors: true }, \"%o\", args)}`\n                    : \"\"\n            }\\n`\n        );\n    }\n\n    public debug(message: string, ...args: Readonly<UnknownArray>): void {\n        if (this.verboseMode && !this.quietMode) {\n            ConsoleLogger.writeStdout(colors.gray(\"\uD83D\uDC1B\"), message, ...args);\n        }\n    }\n\n    public error(message: string, ...args: Readonly<UnknownArray>): void {\n        if (this.quietMode) {\n            // Keep errors visible even in quiet mode.\n        }\n\n        ConsoleLogger.writeStderr(colors.red(\"\u2716\"), message, ...args);\n    }\n\n    public info(message: string, ...args: Readonly<UnknownArray>): void {\n        if (this.quietMode) {\n            return;\n        }\n\n        ConsoleLogger.writeStdout(colors.blue(\"\u2139\"), message, ...args);\n    }\n\n    public setQuiet(isQuiet: boolean): void {\n        this.quietMode = isQuiet;\n    }\n\n    public setVerbose(isVerbose: boolean): void {\n        this.verboseMode = isVerbose;\n    }\n\n    public verbose(message: string, ...args: Readonly<UnknownArray>): void {\n        if (this.verboseMode && !this.quietMode) {\n            ConsoleLogger.writeStdout(colors.gray(\"\uD83D\uDCDD\"), message, ...args);\n        }\n    }\n\n    public warn(message: string, ...args: Readonly<UnknownArray>): void {\n        if (this.quietMode) {\n            return;\n        }\n\n        ConsoleLogger.writeStderr(colors.yellow(\"\u26A0\"), message, ...args);\n    }\n}\n"],
  "mappings": "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",
  "names": ["import_ts_extras", "import_yoctocolors", "import_ts_extras", "import_node_util", "colors", "colors", "processingTime", "pLimit"]
}
