{"_id":"@atlassian/jquery-eslint-runner","_rev":"5-368a751674377b84fb4ee452a0a16162","name":"@atlassian/jquery-eslint-runner","dist-tags":{"latest":"0.3.2"},"versions":{"0.1.0":{"name":"@atlassian/jquery-eslint-runner","version":"0.1.0","keywords":["eslint","jquery","migration","breaking-changes","linting","cli"],"author":{"name":"Atlassian"},"license":"Apache-2.0","_id":"@atlassian/jquery-eslint-runner@0.1.0","maintainers":[{"name":"atlassianartifactteam","email":"eng-development-tooling-secrets-and-artifacts@atlassian.com"}],"homepage":"https://www.npmjs.com/package/@atlassian/jquery-eslint-runner","bugs":{"url":"https://bitbucket.org/atlassian/jquery-migrate-eslint-runner/issues"},"bin":{"jquery-eslint-runner":"src/cli.js"},"dist":{"shasum":"00629f0ba835294d757e6e6b04ae9fa8a7e2b0b6","tarball":"https://registry.npmjs.org/@atlassian/jquery-eslint-runner/-/jquery-eslint-runner-0.1.0.tgz","fileCount":801,"integrity":"sha512-QEigiDWoFy1faerr7ek3FOV+dbJVM6LZMpS+N1tHEqE29Sy0e4E7e0ZRfjRmJ2FMsak/ijhpYgNxQStgg9EeGQ==","signatures":[{"sig":"MEUCIQCHL++h0RIPbWsi8aigd0Y5n4lKKcD6rE95Cj7xJMVFAgIgZrSZZO17QV7C9JgMG05RKtthREaMMWbBkljHxe9hkbI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6002520},"_from":"file:/tmp/package-1-69849481-2415883fb9e218e0174ca8c5-1.tgz","scripts":{"test":"echo \"Error: no test specified\" && exit 1","write-csv":"node src/cli.js write-csv","clone-and-lint":"node src/cli.js clone-and-lint","lint-directory":"node src/cli.js lint-directory","prepublishOnly":"copy-files-from-to"},"_npmUser":{"name":"atlassianartifactteam","email":"eng-development-tooling-secrets-and-artifacts@atlassian.com"},"_resolved":"/tmp/package-1-69849481-2415883fb9e218e0174ca8c5-1.tgz","copyFiles":[{"to":"eslint-configs/jira-dc/plugins/eslint-plugin-jquery-breaking-changes","from":"node_modules/eslint-plugin-jquery-breaking-changes"}],"_integrity":"sha512-QEigiDWoFy1faerr7ek3FOV+dbJVM6LZMpS+N1tHEqE29Sy0e4E7e0ZRfjRmJ2FMsak/ijhpYgNxQStgg9EeGQ==","repository":{"url":"git+https://bitbucket.org/atlassian/jquery-migrate-eslint-runner.git","type":"git"},"_npmVersion":"10.8.2","description":"Automated tool for running ESLint with jQuery breaking change detection rules across repositories or directories","directories":{},"_nodeVersion":"20.20.0","dependencies":{"eslint":"7.32.0","lodash":"^4.17.21","commander":"^13.1.0","babel-eslint":"^10.1.0","requireindex":"^1.2.0"},"publishConfig":{"registry":"https://packages.atlassian.com/api/npm/npm-public/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"7.32.0","babel-eslint":"^10.1.0","copy-files-from-to":"^3.14.0","eslint-plugin-jquery-breaking-changes":"git+ssh://git@bitbucket.org/atlassian/eslint-plugin-jquery-breaking-changes.git"},"copyFilesSettings":{"whenFileExists":"overwrite"},"_npmOperationalInternal":{"tmp":"tmp/jquery-eslint-runner_0.1.0_1770296457409_0.7389271738087517","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@atlassian/jquery-eslint-runner","version":"0.2.0","keywords":["eslint","jquery","migration","breaking-changes","linting","cli"],"author":{"name":"Atlassian"},"license":"Apache-2.0","_id":"@atlassian/jquery-eslint-runner@0.2.0","maintainers":[{"name":"atlassianartifactteam","email":"eng-development-tooling-secrets-and-artifacts@atlassian.com"}],"homepage":"https://www.npmjs.com/package/@atlassian/jquery-eslint-runner","bugs":{"url":"https://bitbucket.org/atlassian/jquery-migrate-eslint-runner/issues"},"bin":{"jquery-eslint-runner":"src/cli.js"},"dist":{"shasum":"02b1be74c88fc82e5aa03efafca42addd4d2cc3f","tarball":"https://registry.npmjs.org/@atlassian/jquery-eslint-runner/-/jquery-eslint-runner-0.2.0.tgz","fileCount":808,"integrity":"sha512-EWsRpgzqn8/4HS6pOMtjjvHDFKsjmzxcRcagIYgKNUVvw/F4iRq/W9b5xijphJLX/CGtjrhsH+hgY1d8blX+0A==","signatures":[{"sig":"MEUCIAo80f9CFncZPxgqR1YgUKYsdvW1nJaxMYVjfLvyVwqLAiEAuX2kBTcUxxs4SRXBgIp9NZQvv+sRbxfqt2G452H9NaE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31499678},"_from":"file:/tmp/package-1-6992dfe7-eecae1469cca3baef6a1d78a-1.tgz","scripts":{"test":"jest","write-csv":"node src/cli.js write-csv","clone-and-lint":"node src/cli.js clone-and-lint","lint-directory":"node src/cli.js lint-directory","prepublishOnly":"copy-files-from-to"},"_npmUser":{"name":"atlassianartifactteam","email":"eng-development-tooling-secrets-and-artifacts@atlassian.com"},"_resolved":"/tmp/package-1-6992dfe7-eecae1469cca3baef6a1d78a-1.tgz","copyFiles":[{"to":"eslint-configs/jira-dc/plugins/eslint-plugin-jquery-breaking-changes","from":"node_modules/eslint-plugin-jquery-breaking-changes"}],"_integrity":"sha512-EWsRpgzqn8/4HS6pOMtjjvHDFKsjmzxcRcagIYgKNUVvw/F4iRq/W9b5xijphJLX/CGtjrhsH+hgY1d8blX+0A==","repository":{"url":"git+https://bitbucket.org/atlassian/jquery-migrate-eslint-runner.git","type":"git"},"_npmVersion":"10.8.2","description":"Automated tool for running ESLint with jQuery breaking change detection rules across repositories or directories","directories":{},"_nodeVersion":"20.20.0","dependencies":{"eslint":"7.32.0","lodash":"^4.17.21","commander":"^13.1.0","babel-eslint":"^10.1.0","requireindex":"^1.2.0"},"publishConfig":{"registry":"https://packages.atlassian.com/api/npm/npm-public/"},"_hasShrinkwrap":false,"packageManager":"yarn@4.12.0","devDependencies":{"jest":"^29.7.0","eslint":"7.32.0","babel-eslint":"^10.1.0","copy-files-from-to":"^3.14.0","eslint-plugin-jquery-breaking-changes":"git+ssh://git@bitbucket.org/atlassian/eslint-plugin-jquery-breaking-changes.git"},"copyFilesSettings":{"whenFileExists":"overwrite"},"_npmOperationalInternal":{"tmp":"tmp/jquery-eslint-runner_0.2.0_1771233265632_0.9349856471690556","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@atlassian/jquery-eslint-runner","version":"0.3.0","keywords":["eslint","jquery","migration","breaking-changes","linting","cli"],"author":{"name":"Atlassian"},"license":"Apache-2.0","_id":"@atlassian/jquery-eslint-runner@0.3.0","maintainers":[{"name":"atlassianartifactteam","email":"eng-development-tooling-secrets-and-artifacts@atlassian.com"}],"homepage":"https://www.npmjs.com/package/@atlassian/jquery-eslint-runner","bugs":{"url":"https://bitbucket.org/atlassian/jquery-migrate-eslint-runner/issues"},"bin":{"jquery-eslint-runner":"src/cli.js"},"dist":{"shasum":"c3117fa4d77fd780b4fd8647a4bfc4f742f46f2b","tarball":"https://registry.npmjs.org/@atlassian/jquery-eslint-runner/-/jquery-eslint-runner-0.3.0.tgz","fileCount":147,"integrity":"sha512-cikkeo7qEeIxM1lExILbUK/0p4wWM8PgQqUIHSqkd65gUxUi2b0hc6n9xfqQAq/ulZ+QSNM4bK+yA1G1WEDOiQ==","signatures":[{"sig":"MEQCIBGzrv9fH4s+109myF1qlETcxfJzNDBRcBnNTQECm5TbAiA0+RqvanFniuCwWTtQ0kwWn9FwtHtZDi210IH/k3S2gg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":925002},"_from":"file:/tmp/package-1-69a830ec-c48b612d91dcc52c1f0a22e1-1.tgz","scripts":{"test":"jest","write-csv":"node src/cli.js write-csv","clone-and-lint":"node src/cli.js clone-and-lint","lint-directory":"node src/cli.js lint-directory","prepublishOnly":"copy-files-from-to"},"_npmUser":{"name":"atlassianartifactteam","email":"eng-development-tooling-secrets-and-artifacts@atlassian.com"},"_resolved":"/tmp/package-1-69a830ec-c48b612d91dcc52c1f0a22e1-1.tgz","copyFiles":[{"to":"eslint-configs/jira-dc/plugins/eslint-plugin-jquery-breaking-changes","from":"node_modules/eslint-plugin-jquery-breaking-changes"}],"_integrity":"sha512-cikkeo7qEeIxM1lExILbUK/0p4wWM8PgQqUIHSqkd65gUxUi2b0hc6n9xfqQAq/ulZ+QSNM4bK+yA1G1WEDOiQ==","repository":{"url":"git+https://bitbucket.org/atlassian/jquery-migrate-eslint-runner.git","type":"git"},"_npmVersion":"10.8.2","description":"Automated tool for running ESLint with jQuery breaking change detection rules across repositories or directories","directories":{},"_nodeVersion":"20.20.0","dependencies":{"eslint":"7.32.0","lodash":"^4.17.21","commander":"^13.1.0","babel-eslint":"^10.1.0","requireindex":"^1.2.0"},"publishConfig":{"registry":"https://packages.atlassian.com/api/npm/npm-public/"},"_hasShrinkwrap":false,"packageManager":"yarn@4.12.0","devDependencies":{"jest":"^29.7.0","eslint":"7.32.0","babel-eslint":"^10.1.0","copy-files-from-to":"^3.14.0","eslint-plugin-jquery-breaking-changes":"git+ssh://git@bitbucket.org/atlassian/eslint-plugin-jquery-breaking-changes.git"},"copyFilesSettings":{"whenFileExists":"overwrite"},"_npmOperationalInternal":{"tmp":"tmp/jquery-eslint-runner_0.3.0_1772630257098_0.3886241631988021","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@atlassian/jquery-eslint-runner","version":"0.3.1","keywords":["eslint","jquery","migration","breaking-changes","linting","cli"],"author":{"name":"Atlassian"},"license":"Apache-2.0","_id":"@atlassian/jquery-eslint-runner@0.3.1","maintainers":[{"name":"atlassianartifactteam","email":"eng-development-tooling-secrets-and-artifacts@atlassian.com"}],"homepage":"https://www.npmjs.com/package/@atlassian/jquery-eslint-runner","bugs":{"url":"https://bitbucket.org/atlassian/jquery-migrate-eslint-runner/issues"},"bin":{"jquery-eslint-runner":"src/cli.js"},"dist":{"shasum":"a547e7e1698c4a30c0b46731c3b3dfe0e9684d32","tarball":"https://registry.npmjs.org/@atlassian/jquery-eslint-runner/-/jquery-eslint-runner-0.3.1.tgz","fileCount":147,"integrity":"sha512-a8jvkwCo9dRT3Q6hrnhRiU7NY4VHYEh9ClYvfKeM2V7+th64bjNrB4gwJitMskW9IjcYRvfP2s2yi0kT832vow==","signatures":[{"sig":"MEUCIDuuJh4YxB1mrhDPOVv+IpsM1gRVbYyqTHwvaB6/gU7iAiEAz9XXC44sq6cfR5VKUYKg2WM74zqBW42u80s5tBfYQds=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":950700},"_from":"file:/tmp/package-1-69aeddea-6c0b85e80327613808bf37cb-1.tgz","scripts":{"test":"jest","write-csv":"node src/cli.js write-csv","clone-and-lint":"node src/cli.js clone-and-lint","lint-directory":"node src/cli.js lint-directory","prepublishOnly":"copy-files-from-to"},"_npmUser":{"name":"atlassianartifactteam","email":"eng-development-tooling-secrets-and-artifacts@atlassian.com"},"_resolved":"/tmp/package-1-69aeddea-6c0b85e80327613808bf37cb-1.tgz","copyFiles":[{"to":"eslint-configs/jira-dc/plugins/eslint-plugin-jquery-breaking-changes/","from":"node_modules/eslint-plugin-jquery-breaking-changes/**/*"}],"_integrity":"sha512-a8jvkwCo9dRT3Q6hrnhRiU7NY4VHYEh9ClYvfKeM2V7+th64bjNrB4gwJitMskW9IjcYRvfP2s2yi0kT832vow==","repository":{"url":"git+https://bitbucket.org/atlassian/jquery-migrate-eslint-runner.git","type":"git"},"_npmVersion":"10.8.2","description":"Automated tool for running ESLint with jQuery breaking change detection rules across repositories or directories","directories":{},"_nodeVersion":"20.20.0","dependencies":{"eslint":"7.32.0","lodash":"^4.17.21","commander":"^13.1.0","babel-eslint":"^10.1.0","requireindex":"^1.2.0"},"publishConfig":{"registry":"https://packages.atlassian.com/api/npm/npm-public/"},"_hasShrinkwrap":false,"packageManager":"yarn@4.12.0","devDependencies":{"jest":"^29.7.0","eslint":"7.32.0","babel-eslint":"^10.1.0","copy-files-from-to":"^4.0.0","eslint-plugin-jquery-breaking-changes":"git+ssh://git@bitbucket.org/atlassian/eslint-plugin-jquery-breaking-changes.git"},"copyFilesSettings":{"whenFileExists":"overwrite"},"_npmOperationalInternal":{"tmp":"tmp/jquery-eslint-runner_0.3.1_1773067758321_0.17275387881174753","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@atlassian/jquery-eslint-runner","version":"0.3.2","description":"Automated tool for running ESLint with jQuery breaking change detection rules across repositories or directories","bin":{"jquery-eslint-runner":"src/cli.js"},"scripts":{"test":"jest","write-csv":"node src/cli.js write-csv","clone-and-lint":"node src/cli.js clone-and-lint","lint-directory":"node src/cli.js lint-directory","prepublishOnly":"copy-files-from-to"},"author":{"name":"Atlassian"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://bitbucket.org/atlassian/jquery-migrate-eslint-runner.git"},"publishConfig":{"registry":"https://packages.atlassian.com/api/npm/npm-public/"},"homepage":"https://www.npmjs.com/package/@atlassian/jquery-eslint-runner","keywords":["eslint","jquery","migration","breaking-changes","linting","cli"],"devDependencies":{"babel-eslint":"^10.1.0","copy-files-from-to":"^4.0.0","eslint":"7.32.0","eslint-plugin-jquery-breaking-changes":"git+ssh://git@bitbucket.org/atlassian/eslint-plugin-jquery-breaking-changes.git","jest":"^29.7.0"},"dependencies":{"babel-eslint":"^10.1.0","commander":"^13.1.0","eslint":"7.32.0","lodash":"^4.17.21","requireindex":"^1.2.0"},"packageManager":"yarn@4.12.0","copyFiles":[{"from":"node_modules/eslint-plugin-jquery-breaking-changes/**/*","to":"eslint-configs/jira-dc/plugins/eslint-plugin-jquery-breaking-changes/"}],"copyFilesSettings":{"whenFileExists":"overwrite"},"_id":"@atlassian/jquery-eslint-runner@0.3.2","bugs":{"url":"https://bitbucket.org/atlassian/jquery-migrate-eslint-runner/issues"},"_integrity":"sha512-pY11Td0x83anyMX4CtD95uvtWYVoulniqeziflb0HMKcdWlD7LbW+myGF4tkF6czcIG5JsYyguTa1Pv4uGQp1w==","_resolved":"/tmp/package-1-69b13da1-3dfc438563ede7548d4d33d0-1.tgz","_from":"file:/tmp/package-1-69b13da1-3dfc438563ede7548d4d33d0-1.tgz","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-pY11Td0x83anyMX4CtD95uvtWYVoulniqeziflb0HMKcdWlD7LbW+myGF4tkF6czcIG5JsYyguTa1Pv4uGQp1w==","shasum":"28b5ddf7f23d12ce41db961dac1a975467890984","tarball":"https://registry.npmjs.org/@atlassian/jquery-eslint-runner/-/jquery-eslint-runner-0.3.2.tgz","fileCount":147,"unpackedSize":950835,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDn4+p1gBUewtlr3KNhtZM/Z+XO0tgOpuKzUym9ZnmSVAiBL7vphTJScXerFBOqKsNI177KXOqm1zVZ91gQ84QXg1w=="}]},"_npmUser":{"name":"atlassianartifactteam","email":"eng-development-tooling-secrets-and-artifacts@atlassian.com"},"directories":{},"maintainers":[{"name":"atlassianartifactteam","email":"eng-development-tooling-secrets-and-artifacts@atlassian.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/jquery-eslint-runner_0.3.2_1773223334431_0.4199067236340046"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-05T13:00:57.247Z","modified":"2026-03-11T10:02:14.839Z","0.1.0":"2026-02-05T13:00:57.700Z","0.2.0":"2026-02-16T09:14:26.129Z","0.3.0":"2026-03-04T13:17:37.347Z","0.3.1":"2026-03-09T14:49:18.492Z","0.3.2":"2026-03-11T10:02:14.606Z"},"bugs":{"url":"https://bitbucket.org/atlassian/jquery-migrate-eslint-runner/issues"},"author":{"name":"Atlassian"},"license":"Apache-2.0","homepage":"https://www.npmjs.com/package/@atlassian/jquery-eslint-runner","keywords":["eslint","jquery","migration","breaking-changes","linting","cli"],"repository":{"type":"git","url":"git+https://bitbucket.org/atlassian/jquery-migrate-eslint-runner.git"},"description":"Automated tool for running ESLint with jQuery breaking change detection rules across repositories or directories","maintainers":[{"name":"atlassianartifactteam","email":"eng-development-tooling-secrets-and-artifacts@atlassian.com"}],"readme":"# jQuery ESLint Runner\n\nAutomated tool for cloning multiple repositories and running ESLint with jQuery breaking change detection rules.\n\n## Quick Start\n\n### Running as a CLI Tool\n\n#### Option 1: NPX (After Publishing to NPM registry)\n\n```bash\nnpx @atlassian/jquery-eslint-runner --help\nnpx @atlassian/jquery-eslint-runner lint-directory --directory /path/to/code\n```\n\n#### Option 2: Direct Node Execution (Local Testing)\n\nRun individual commands directly:\n\n```bash\n# View help\nnode src/cli.js --help\n\n# Lint a single directory\nnode src/cli.js lint-directory --directory /path/to/code\n\n# Clone and lint repositories\nnode src/cli.js clone-and-lint\n\n# Convert results to CSV\nnode src/cli.js write-csv output.csv\n```\n\n### Available Commands\n\n#### `lint-directory` - Lint a Single Directory\n\nLint a directory with configurable ESLint settings:\n\n```bash\njquery-eslint-runner lint-directory \\\n  --directory /path/to/project \\\n  --format json \\\n  --output results.json\n```\n\n**Options:**\n- `--directory <path>` - Path to directory to lint (required)\n- `--linter-configuration <path>` - ESLint config file (default: `eslint-configs/jira-dc/jquery-v2.js`)\n- `--format <string>` - Output format: json, html, stylish, etc (default: `json`)\n- `--output <path>` - Output file path (default: `<directory-name>.<format>` in current directory)\n- `--fix` - Automatically fix fixable errors (default: false)\n\n**Example:**\n```bash\njquery-eslint-runner lint-directory \\\n  --directory ./src \\\n  --format json \\\n  --output lint-results.json \\\n  --fix\n```\n\n#### `clone-and-lint` - Clone and Lint Multiple Repositories\n\nAutomated workflow for cloning repositories and linting them:\n\n```bash\njquery-eslint-runner clone-and-lint \\\n  --repositoriesFile samples/repositories.json \\\n  --unified-report unified-report.json\n```\n\n**Options:**\n- `--repositoriesFile <path>` - Repositories config file (default: `samples/repositories.json`)\n- `--linter-configuration <path>` - ESLint config file (default: `../../eslint-configs/jira-dc/jquery-v2.js`)\n- `--tmp-dir <path>` - Temporary directory for clones (default: `tmp/jquery-eslint-reposetories`)\n- `--format <string>` - ESLint output format (default: `json`)\n- `--clone <boolean>` - Clone/pull repositories (default: true)\n- `--unified-report <path>` - Merged report path (default: `unified-report.json`)\n- `--rule-prefix <string>` - Filter by rule prefix, e.g., `jquery-jira` (optional)\n- `--max-source-lines <number>` - Max source lines around violations (default: 100)\n\n**Example:**\n```bash\njquery-eslint-runner clone-and-lint \\\n  --repositoriesFile samples/repositories.json \\\n  --unified-report unified-report.json \\\n  --rule-prefix jquery-jira \\\n  --max-source-lines 100\n```\n\n#### `write-csv` - Convert ESLint Results to CSV\n\nConvert JSON ESLint results to CSV format:\n\n```bash\njquery-eslint-runner write-csv output.csv \\\n  --tmp-dir tmp/jquery-eslint-reposetories \\\n  --filter-pattern jQuery\n```\n\n**Options:**\n- `<outputFile>` - Output CSV file path (required)\n- `--repositoriesFile <path>` - Repositories config file (default: `samples/repositories.json`)\n- `--tmp-dir <path>` - Temporary directory with results (default: `tmp/jquery-eslint-reposetories`)\n- `--filter-pattern <string>` - Filter pattern for rules (default: `jQuery`)\n- `--format <string>` - Input format of ESLint results (default: `json`)\n\n### Testing the Package\n\n#### Test lint-directory command:\n\n```bash\n# Lint the eslint-configs directory itself\njquery-eslint-runner lint-directory --directory ./eslint-configs --format json --output test-results.json\n\n# Check the results\ncat test-results.json\n```\n\n#### Test the CLI help commands:\n\n```bash\n# Main help\njquery-eslint-runner --help\n\n# Subcommand help\njquery-eslint-runner lint-directory --help\njquery-eslint-runner clone-and-lint --help\njquery-eslint-runner write-csv --help\n```\n\n#### Test with sample repositories:\n\n```bash\n# Run clone-and-lint with sample repositories (optional, requires git access)\njquery-eslint-runner clone-and-lint \\\n  --repositoriesFile samples/repositories.json \\\n  --tmp-dir ./tmp/test-repos \\\n  --format json\n```\n\n## How `yarn clone-and-lint` Works\n\nThe `yarn clone-and-lint` command automates the process of detecting jQuery 3.0 breaking changes across multiple repositories. It reads a repository configuration file (default: `samples/repositories.json`) containing Git repository names and URLs, then clones each repository into a temporary directory (or pulls latest changes if already cloned). For each repository, it spawns an ESLint process with a specified configuration file (default: jQuery v2 breaking changes rules), running with `--no-eslintrc` to ignore project-specific ESLint configs and `--quiet` to show only errors.\n\nThe linting results are saved per repository (e.g., `jira.json`, `jira-software.json`) in the specified format (JSON by default, also supports HTML, stylish). When using JSON format with the `--unified-report` option, it merges all individual reports into a single consolidated report, optionally filtering by rule prefix (e.g., `jquery-jira`). The tool intelligently trims source code context to center around violations (configurable via `--max-source-lines`), making reports more focused and manageable. Finally, it splits the unified report by project into individual files under `./report/` directory, organizing results for easier analysis and processing by downstream tools like the analyzer.\n\n**Key Features:**\n- Parallel repository cloning and linting\n- Configurable ESLint rules and output formats\n- Smart source code trimming around violations\n- Unified and per-project report generation\n- Rule prefix filtering for targeted analysis\n\n## Configuration\n\nCreate a `repositories.json` file with your repositories. You can specify a branch to clone/pull by appending `#<branch>` to the repository URL (similar to npm package.json syntax). If no branch is specified, it defaults to `master`.\n\n```json\n[\n  {\n    \"repository\": {\n      \"name\": \"bitbucket.org/atlassian/jira\",\n      \"url\": \"git@bitbucket.org:atlassian/jira.git\"\n    }\n  },\n  {\n    \"repository\": {\n      \"name\": \"bitbucket.org/atlassian/confluence\",\n      \"url\": \"git@bitbucket.org:atlassian/confluence.git#release/9.1\"\n    }\n  }\n]\n```\n\n## Command Options\n\n```bash\nyarn clone-and-lint \\\n  --repositoriesFile samples/repositories.json \\\n  --linter-configuration eslint-configs/jira-dc/jquery-v2.js \\\n  --tmp-dir tmp/repos \\\n  --format json \\\n  --clone true \\\n  --unified-report unified-report.json \\\n  --rule-prefix jquery-jira \\\n  --max-source-lines 100\n```\n\n- `--repositoriesFile`: Path to repositories JSON file (default: `samples/repositories.json`)\n- `--linter-configuration`: Path to ESLint config file (default: `../../eslint-configs/jira-dc/jquery-v2.js`)\n- `--tmp-dir`: Temporary directory for cloned repos (default: `tmp/jquery-eslint-repositories`)\n- `--format`: ESLint output format - json, html, stylish, etc (default: `json`)\n- `--clone`: Whether to clone/pull repositories (default: `true`)\n- `--unified-report`: Path for merged JSON report (default: `unified-report.json`)\n- `--rule-prefix`: Filter rules by prefix, e.g., `jquery-jira` (optional)\n- `--max-source-lines`: Max source lines to include around violations (default: `100`)\n\n## Output\n\n- Individual lint reports: `<repo-name>.json` (or specified format)\n- Unified report: `unified-report.json` (merged results from all repos)\n- Split reports: `./report/<project-name>/*.json` (organized by project)\n\n## ESLint Configuration - jira-dc Plugin\n\nThe `eslint-configs/jira-dc/` directory contains specialized ESLint configurations for detecting jQuery breaking changes in JIRA codebases.\n\n### Available Configurations\n\n**`jquery-v2.js`** - Detects jQuery 1.9+ breaking changes\n- Uses `plugin:jquery-breaking-changes/1.9` for standard jQuery 1.9 deprecations\n- Includes custom `jquery-jira` rules: `no-ajax-datatype-json`, `no-curcss`\n- Suitable for codebases migrating from jQuery 1.x to 2.x\n\n**`jquery-v3.js`** - Detects jQuery 3.0+ breaking changes\n- Extends `jquery-v2.js` and adds `plugin:jquery-breaking-changes/3.0`\n- Comprehensive `jquery-jira` rules covering:\n  - Event methods: `bind-removed`, `unbind-removed`, `delegate-removed`, `undelegate-removed`\n  - Utility functions: `jquery-parseJSON-deprecated`, `jquery-unique-deprecated`, `jquery-trim-deprecated`, `jquery-isArray-deprecated`, `jquery-isFunction-deprecated`\n  - Traversal methods: `andSelf-removed`\n- Disables noisy rules: `context-removed`, `selector-removed`, `return-values-on-empty-sets-are-undefined`, `select-multiple-returns-empty-array`\n\n### Custom Plugin: eslint-plugin-jquery-jira\n\nLocated in `eslint-configs/jira-dc/plugins/eslint-plugin-jquery-jira/`, this custom ESLint plugin provides intelligent jQuery detection with reduced false positives:\n\n**Smart Detection Features:**\n- **Non-jQuery library filtering**: Recognizes lodash, Backbone, Ramda patterns (e.g., `_.bind()`, `collection.size()`)\n- **Function.prototype.bind detection**: Distinguishes `func.bind(this)` from `$el.bind('click', handler)` by analyzing first argument patterns\n- **Variable name heuristics**: Uses naming patterns to identify jQuery objects (`$`, `$j`, `jq`, common element names)\n- **Context-aware analysis**: Reduces false positives by understanding code context\n\n**Rule Categories:**\n1. **Event bindings**: Detects deprecated `.bind()`, `.unbind()`, `.delegate()`, `.undelegate()`\n2. **Utility deprecations**: Flags `$.parseJSON()`, `$.unique()`, `$.trim()`, `$.isArray()`, `$.isFunction()`\n3. **JIRA-specific**: `no-ajax-datatype-json` (explicit dataType required), `no-curcss` (internal API usage)\n\n**How it’s bundled:** Plugins are loaded by path from the config (no `file:` dependencies). Their runtime dependencies are synced into the runner’s `package.json` by `scripts/sync-plugin-dependencies.js` (run automatically on `preinstall`). See “Bundled plugin dependencies” below.\n\n**Usage:**\n```javascript\n// In your ESLint config\nplugins: ['eslint-plugin-jquery-jira'],\nrules: {\n  'jquery-jira/bind-removed': 'error',\n  'jquery-jira/jquery-parseJSON-deprecated': 'error'\n}\n```\n\nThis plugin is specifically tuned for JIRA codebase patterns, significantly reducing false positives compared to generic jQuery linting rules.\n\n## Bundled plugin dependencies\n\nESLint configs load plugins by path (`eslint-configs/jira-dc/plugins/...`), so the runner must declare those plugins’ runtime dependencies.\n\n- **When adding a new plugin:** put it in `eslint-configs/jira-dc/plugins/<plugin-name>/` (or add a `copyFiles` entry if it’s copied from node_modules).\n\n## Release\n\n1. You'll need to first get package publishing permissions with `atlas packages permission grant`.\n2. Remember to add a changelog entry in `CHANGELOG.md` and create a tag in the repo matching the version.\n3. Run `npm publish --tag alpha` for testing version only in PAC or `npm publish --userconfig=~/.npmrc-public` for release to public PAC and npm (see https://hello.atlassian.net/wiki/spaces/~zxu2/pages/5795449397/How+to+locally+npm+publish+to+public+npm+2025+mid).\n4. Then create a PR bumping the package version in `package.json` for the next development iteration.\n\n## License\n\nCopyright (c) 2025 Atlassian US., Inc.\nApache 2.0 licensed, see [LICENSE](./LICENSE) file.","readmeFilename":"README.md"}