{
  "version": 3,
  "sources": ["../../src/cli-commands-lint.ts"],
  "sourcesContent": ["/**\n * QCObjects Framework CLI\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QCObjects is licensed under the MIT License\n * [LICENSE] (https://github.com/QCObjects/qcobjects-cli/blob/main/LICENSE.txt)\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n */\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport glob from \"glob\";\nimport { Linter } from \"eslint\";\nimport globals from \"globals\";\nimport * as tsParserModule from \"@typescript-eslint/parser\";\nimport * as tsPluginModule from \"@typescript-eslint/eslint-plugin\";\nimport { Package, InheritClass } from \"qcobjects\";\n\nconst tsParser = (tsParserModule as any).default ?? tsParserModule;\nconst tsPlugin = (tsPluginModule as any).default ?? tsPluginModule;\n\nconst DEFAULT_TARGETS = [\"src/**/*.ts\"];\n\nconst DEFAULT_IGNORES = [\n  \"node_modules/**\",\n  \"build/**\",\n  \"public/**\",\n  \"dist/**\",\n  \"coverage/**\",\n  \".git/**\",\n];\n\nconst DEFAULT_FLAT_CONFIG: any[] = [\n  {\n    files: [\"**/*.ts\", \"**/*.tsx\", \"**/*.js\", \"**/*.mjs\", \"**/*.cjs\"],\n    plugins: {\n      \"@typescript-eslint\": tsPlugin,\n    },\n    languageOptions: {\n      parser: tsParser,\n      ecmaVersion: \"latest\",\n      sourceType: \"module\",\n      globals: {\n        ...globals.browser,\n        ...globals.node,\n        ...globals.commonjs,\n      },\n    },\n    rules: {\n      \"no-undef\": \"error\",\n      \"no-unused-vars\": [\"warn\", { argsIgnorePattern: \"^_\", varsIgnorePattern: \"^_\" }],\n      \"no-empty\": \"off\",\n      \"no-constant-condition\": \"off\",\n      \"no-redeclare\": \"off\",\n      \"no-var\": \"off\",\n      \"no-mixed-operators\": \"off\",\n    },\n  },\n];\n\nexport class CommandHandler extends InheritClass {\n  choiceOption: {\n    lint: (targets: string[], options: { fix?: boolean; config?: string }) => Promise<void>;\n  };\n\n  constructor({\n    switchCommander\n  }: { switchCommander: any }) {\n    super({ switchCommander });\n    this.choiceOption = {\n      async lint(targets, options) {\n        try {\n          const cwd = process.cwd();\n          const requestedTargets = targets.length > 0 ? targets : DEFAULT_TARGETS;\n          const ignoreFlags = DEFAULT_IGNORES.map(ignored => new RegExp(ignored.replace(/\\*\\*/g, \".*\")));\n          const files = requestedTargets\n            .flatMap(target => glob.sync(target, { cwd, nodir: true }))\n            .filter((file: string) => !ignoreFlags.some(flag => flag.test(file)));\n\n          if (files.length === 0) {\n            console.warn(`No files matched: ${requestedTargets.join(\", \")}`);\n            process.exit(0);\n          }\n\n          let flatConfig = DEFAULT_FLAT_CONFIG;\n          const appConfigPath = [\"eslint.config.js\", \"eslint.config.mjs\", \"eslint.config.cjs\"]\n            .map(name => path.resolve(cwd, name))\n            .find(appConfigPath => fs.existsSync(appConfigPath));\n\n          if (options.config) {\n            const explicitConfigPath = path.resolve(cwd, options.config);\n            if (!fs.existsSync(explicitConfigPath)) {\n              console.warn(`Config file not found: ${explicitConfigPath}`);\n              process.exit(1);\n            }\n            flatConfig = (await import(pathToFileURL(explicitConfigPath).href)).default;\n            console.log(`Using config file: ${explicitConfigPath}`);\n          } else if (appConfigPath) {\n            flatConfig = (await import(pathToFileURL(appConfigPath).href)).default;\n            console.log(`Using app config file: ${appConfigPath}`);\n          } else if (fs.existsSync(path.resolve(cwd, \".eslintrc\")) || fs.existsSync(path.resolve(cwd, \".eslintrc.js\")) || fs.existsSync(path.resolve(cwd, \".eslintrc.cjs\")) || fs.existsSync(path.resolve(cwd, \".eslintrc.json\"))) {\n            console.warn(\"Legacy .eslintrc config detected but not supported; using built-in QCObjects settings. Migrate to eslint.config.mjs to override defaults.\");\n          } else {\n            console.log(\"No app eslint config found. Using built-in QCObjects settings (overridable with an eslint.config.mjs in your app).\");\n          }\n\n          const linter = new Linter({ cwd, configType: \"flat\" });\n          let errorCount = 0;\n          let warningCount = 0;\n          let fixedCount = 0;\n\n          for (const file of files) {\n            const absolutePath = path.resolve(cwd, file);\n            const source = fs.readFileSync(absolutePath, \"utf8\");\n            const result: { fixed: boolean; output: string; messages: any[] } = options.fix\n              ? linter.verifyAndFix(source, flatConfig, absolutePath)\n              : { fixed: false, output: source, messages: linter.verify(source, flatConfig, absolutePath) };\n            if (result.fixed) {\n              fixedCount++;\n              fs.writeFileSync(absolutePath, result.output);\n            }\n            for (const message of result.messages) {\n              const severity = message.severity === 2 ? \"error\" : message.severity === 1 ? \"warning\" : \"info\";\n              const output = `${file}:${message.line}:${message.column} ${severity} ${message.message} (${message.ruleId ?? \"parse\"})`;\n              if (message.severity === 2) {\n                errorCount++;\n                console.error(output);\n              } else if (message.severity === 1) {\n                warningCount++;\n                console.warn(output);\n              } else {\n                console.log(output);\n              }\n            }\n          }\n\n          const summary = `${files.length} file(s) linted, ${errorCount} error(s), ${warningCount} warning(s), ${fixedCount} file(s) fixed.`;\n          if (errorCount > 0) {\n            console.error(summary);\n            process.exit(1);\n          }\n          console.log(summary);\n          process.exit(0);\n        } catch (e: any) {\n          console.warn(`Something went wrong trying to lint: ${e.message}`);\n          process.exit(1);\n        }\n      }\n    };\n\n    const commandHandler = this;\n\n    const lintCommand = switchCommander.program.command(\"lint [targets...]\")\n      .allowExcessArguments(false)\n      .option(\"-f, --fix\", \"Automatically fix problems\")\n      .option(\"-c, --config <path>\", \"Use a specific eslint config file\")\n      .description(\"Lints JS/TS files using built-in QCObjects settings. Default target: src/**/*.ts\")\n      .action(function (targets: string[], options: { fix?: boolean; config?: string }) {\n        commandHandler.choiceOption.lint.call(commandHandler, targets ?? [], options);\n      });\n\n    }\n}\n\nPackage(\"com.qcobjects.cli.commands.lint\", [\n  CommandHandler\n]);"],
  "mappings": "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",
  "names": ["appConfigPath"]
}
