{"_id":"@acme-skunkworks/eslint-config","_rev":"10-a8446c1cce91d84b9eb72aea40216b91","name":"@acme-skunkworks/eslint-config","dist-tags":{"latest":"1.1.3"},"versions":{"1.0.0":{"name":"@acme-skunkworks/eslint-config","version":"1.0.0","keywords":["eslint","eslint-config","linting","typescript","astro","code-quality"],"author":{"url":"https://github.com/RobEasthope","name":"Rob Easthope"},"license":"MIT","_id":"@acme-skunkworks/eslint-config@1.0.0","maintainers":[{"name":"robeasthope","email":"hello@robeasthope.com"}],"homepage":"https://github.com/acme-skunkworks/eslint-config#readme","bugs":{"url":"https://github.com/acme-skunkworks/eslint-config/issues"},"dist":{"shasum":"efaf9e4aa1c2c861cfa2aa1d3416ce6176dcb901","tarball":"https://registry.npmjs.org/@acme-skunkworks/eslint-config/-/eslint-config-1.0.0.tgz","fileCount":48,"integrity":"sha512-gcb+wYaTjXNhhoXiVQKzKG4p6mpxwqJfKb3nHj1RiipE3uN91NzMXI6RhrO3pItCk8DPghiNhb8VtKD/hL0M7g==","signatures":[{"sig":"MEYCIQC02nDaP6FlB9FsIxPEpkWJys6AgMxH2KswYBvc6qyoQwIhANs/1tBQREgPzVNz/40egOs0nNcGwcWwPbM/Oz02giRI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49154},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"879d3a94b2454dcc397f177db0fd1e28d8105e7c","scripts":{"tsc":"tsc --noEmit","lint":"eslint 'index.ts' 'rules/**/*.ts' --cache --cache-location ./.eslintcache","build":"tsc","clean":"rimraf node_modules dist","format":"npx prettier --write .","lint:md":"markdownlint-cli2 '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","release":"pnpm run build && changeset publish","version":"changeset version","lint:fix":"eslint 'index.ts' 'rules/**/*.ts' --fix --cache --cache-location ./.eslintcache","lint:md:fix":"markdownlint-cli2 --fix '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","sort-pkg-json":"npx sort-package-json","prepublishOnly":"pnpm run build","release:manual":"pnpm run build && npm publish --access public --provenance=false","lint:fix-staged":"eslint 'index.ts' 'rules/**/*.ts' --fix --max-warnings=Infinity --cache --cache-location ./.eslintcache || true","release:manual:dry":"pnpm run build && npm publish --access public --provenance=false --dry-run"},"_npmUser":{"name":"robeasthope","email":"hello@robeasthope.com"},"repository":{"url":"git+https://github.com/acme-skunkworks/eslint-config.git","type":"git"},"_npmVersion":"11.12.1","description":"Shared ESLint configuration with TypeScript and React support","directories":{},"_nodeVersion":"25.9.0","dependencies":{"globals":"^17.5.0","eslint-plugin-n":"^17.23.1","typescript-eslint":"^8.46.0","astro-eslint-parser":"^1.0.0","eslint-plugin-astro":"^1.0.0","eslint-plugin-jsdoc":"^62.9.0","eslint-plugin-react":"^7.37.5","eslint-plugin-regexp":"^3.1.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-unicorn":"^64.0.0","eslint-plugin-import-x":"^4.16.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.4","eslint-config-canonical":"^47.4.2","eslint-plugin-react-hooks":"^7.0.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","typescript":"^6.0.3","@types/node":"^25.6.0","@types/eslint":"^9.6.1","@changesets/cli":"^2.31.0","prettier-plugin-tailwindcss":"^0.8.0","@robeasthope/markdownlint-config":"^1.1.1","eslint-import-resolver-typescript":"^4.4.4"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0","prettier":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.0.0_1777654627681_0.5994126011656173","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@acme-skunkworks/eslint-config","version":"1.0.1","keywords":["eslint","eslint-config","linting","typescript","astro","code-quality"],"author":{"url":"https://github.com/RobEasthope","name":"Rob Easthope"},"license":"MIT","_id":"@acme-skunkworks/eslint-config@1.0.1","maintainers":[{"name":"robeasthope","email":"hello@robeasthope.com"}],"homepage":"https://github.com/acme-skunkworks/eslint-config#readme","bugs":{"url":"https://github.com/acme-skunkworks/eslint-config/issues"},"dist":{"shasum":"3b3aaae4795d781595fe07fa6fbe124ed3fbb4c7","tarball":"https://registry.npmjs.org/@acme-skunkworks/eslint-config/-/eslint-config-1.0.1.tgz","fileCount":54,"integrity":"sha512-0l521xrxbqjmOuV2fN7LgAjbR57N8BP0dllBYKoEuMUJA5Fbr6Apjdlq02IF2ggRJwzZxdMuQbLUkkyOnOqCQA==","signatures":[{"sig":"MEQCIBUhPnf0g9erWkqIAaB2UE3AhsG24YcgALzFfVhFWhrMAiBPf6B82XPXl7S4xm3XVaxJ9LBQV6/dIH4fcVYtF5mA0g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@acme-skunkworks%2feslint-config@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":70883},"main":"./dist/index.js","pnpm":{"onlyBuiltDependencies":["unrs-resolver"]},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"f1460de0c779c4def0bc52434112a69b9d7f2f60","scripts":{"tsc":"tsc --noEmit","lint":"eslint 'index.ts' 'rules/**/*.ts' 'infrastructure/scripts/**/*.ts' --cache --cache-location ./.eslintcache","test":"vitest run","build":"tsc","clean":"rimraf node_modules dist","act:ci":"act pull_request -W .github/workflows/ci.yml --eventpath .github/act-events/pull_request.json","format":"npx prettier --write .","ci:list":"gh run list --limit 10","ci:view":"gh run view","lint:md":"markdownlint-cli2 '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","lint:sh":"bash -c 'if command -v shellcheck >/dev/null 2>&1; then shellcheck infrastructure/scripts/*.sh .husky/pre-commit .husky/pre-push .husky/commit-msg; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  shellcheck not installed — skipping. Install: brew install shellcheck\"; else echo \"⚠️  shellcheck not installed — skipping. Install: apt-get install shellcheck\"; fi'","prepare":"husky","release":"pnpm run build && changeset publish","test:sh":"bash -c 'if command -v bats >/dev/null 2>&1; then bats infrastructure/tests/*.bats; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  bats not installed — skipping. Install: brew install bats-core\"; else echo \"⚠️  bats not installed — skipping. Install: apt-get install bats\"; fi'","version":"changeset version","act:list":"act --list","ci:watch":"gh run watch $(gh run list -L 1 --json databaseId -q '.[0].databaseId // empty')","lint:fix":"eslint 'index.ts' 'rules/**/*.ts' 'infrastructure/scripts/**/*.ts' --fix --cache --cache-location ./.eslintcache","lint:yaml":"yamllint .","test:watch":"vitest","lint:md:fix":"markdownlint-cli2 --fix '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","sort-pkg-json":"sort-package-json","lint:workflows":"actionlint","prepublishOnly":"pnpm run build","release:manual":"pnpm run build && npm publish --access public --provenance=false","act:release:dry":"act push -W .github/workflows/release.yml","release:manual:dry":"pnpm run build && npm publish --access public --provenance=false --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:76b4c27d-8722-4547-8577-8355dec2c725"}},"repository":{"url":"git+https://github.com/acme-skunkworks/eslint-config.git","type":"git"},"_npmVersion":"11.14.1","description":"Shared ESLint configuration with TypeScript and React support","directories":{},"lint-staged":{"**/*":["prettier --write --ignore-unknown"],"**/*.{md,mdx}":["bash -c 'markdownlint-cli2 --fix --config ./.markdownlint-cli2.jsonc \"$@\" || true' --"],"**/*.{yml,yaml}":["bash -c 'if command -v yamllint >/dev/null 2>&1; then yamllint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  yamllint not installed — skipping. Install with: brew install yamllint\"; else echo \"⚠️  yamllint not installed — skipping. Install with: pip install --user yamllint==1.37.1\"; fi' --"],"**/package.json":["bash -c 'sort-package-json \"$@\" || true' --","bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],"**/*.{ts,tsx,js,mjs,cjs}":["bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],".github/workflows/*.{yml,yaml}":["bash -c 'if command -v actionlint >/dev/null 2>&1; then actionlint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  actionlint not installed — skipping. Install with: brew install actionlint\"; else echo \"⚠️  actionlint not installed — skipping. Install via: bash <(curl -fsSL https://raw.githubusercontent.com/rhysd/actionlint/v1.7.5/scripts/download-actionlint.bash)\"; fi' --"]},"_nodeVersion":"22.22.2","dependencies":{"globals":"^17.6.0","eslint-plugin-n":"^17.23.1","typescript-eslint":"^8.46.0","astro-eslint-parser":"^1.0.0","eslint-plugin-astro":"^1.0.0","eslint-plugin-jsdoc":"^62.9.0","eslint-plugin-react":"^7.37.5","eslint-plugin-regexp":"^3.1.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-unicorn":"^64.0.0","eslint-plugin-import-x":"^4.16.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.4","eslint-config-canonical":"^47.4.2","eslint-plugin-react-hooks":"^7.0.1","prettier-plugin-tailwindcss":"^0.8.0","eslint-import-resolver-typescript":"^4.4.4"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.1","husky":"^9.1.7","rimraf":"^6.0.1","vitest":"^4.1.6","typescript":"^6.0.3","@types/node":"^25.6.0","lint-staged":"^16.3.2","@types/eslint":"^9.6.1","@changesets/cli":"^2.31.0","markdownlint-cli2":"^0.18.1","sort-package-json":"^3.6.1","@robeasthope/markdownlint-config":"^1.1.1"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0","prettier":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.0.1_1778854003642_0.4215204244582931","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@acme-skunkworks/eslint-config","version":"1.0.2","keywords":["eslint","eslint-config","linting","typescript","astro","code-quality"],"author":{"url":"https://github.com/RobEasthope","name":"Rob Easthope"},"license":"MIT","_id":"@acme-skunkworks/eslint-config@1.0.2","maintainers":[{"name":"robeasthope","email":"hello@robeasthope.com"}],"homepage":"https://github.com/acme-skunkworks/eslint-config#readme","bugs":{"url":"https://github.com/acme-skunkworks/eslint-config/issues"},"dist":{"shasum":"e9ad4a6f0a02878b552ef7a8dbbcb7ed7d620053","tarball":"https://registry.npmjs.org/@acme-skunkworks/eslint-config/-/eslint-config-1.0.2.tgz","fileCount":54,"integrity":"sha512-2SjgJOjtfz1sYI+biRXe+FGB0eR00J1qH0wEE3PD+GvJt8gm+uIF3SpYBrgzCQdC21h/XG3fjFJuaYtoRzVw3w==","signatures":[{"sig":"MEYCIQDcOcXSxiZv9IJk75d1p8wmwCgmpSlLI7LUFiaXKSaplAIhAN4xTEzSOhSIdMHbumcMZC0Jccn3+9qVO9cpIttUJQB1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@acme-skunkworks%2feslint-config@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":71024},"main":"./dist/index.js","pnpm":{"onlyBuiltDependencies":["unrs-resolver"]},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"1f089103415f0d7e000e7b0a4e13f932eeb8008d","scripts":{"tsc":"tsc --noEmit","lint":"eslint 'index.ts' 'rules/**/*.ts' 'infrastructure/scripts/**/*.ts' 'infrastructure/send-it/**/*.ts' --cache --cache-location ./.eslintcache","test":"vitest run","build":"tsc","clean":"rimraf node_modules dist","act:ci":"act pull_request -W .github/workflows/ci.yml --eventpath .github/act-events/pull_request.json","format":"npx prettier --write .","ci:list":"gh run list --limit 10","ci:view":"gh run view","lint:md":"markdownlint-cli2 '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","lint:sh":"bash -c 'if command -v shellcheck >/dev/null 2>&1; then shellcheck infrastructure/scripts/*.sh .husky/pre-commit .husky/pre-push .husky/commit-msg; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  shellcheck not installed — skipping. Install: brew install shellcheck\"; else echo \"⚠️  shellcheck not installed — skipping. Install: apt-get install shellcheck\"; fi'","prepare":"husky","release":"pnpm run build && changeset publish","test:sh":"bash -c 'if command -v bats >/dev/null 2>&1; then bats infrastructure/tests/*.bats; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  bats not installed — skipping. Install: brew install bats-core\"; else echo \"⚠️  bats not installed — skipping. Install: apt-get install bats\"; fi'","version":"changeset version","act:list":"act --list","ci:watch":"gh run watch $(gh run list -L 1 --json databaseId -q '.[0].databaseId // empty')","lint:fix":"eslint 'index.ts' 'rules/**/*.ts' 'infrastructure/scripts/**/*.ts' 'infrastructure/send-it/**/*.ts' --fix --cache --cache-location ./.eslintcache","lint:yaml":"yamllint .","test:watch":"vitest","lint:md:fix":"markdownlint-cli2 --fix '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","sort-pkg-json":"sort-package-json","lint:workflows":"actionlint","prepublishOnly":"pnpm run build","release:manual":"pnpm run build && npm publish --access public --provenance=false","act:release:dry":"act push -W .github/workflows/release.yml","release:manual:dry":"pnpm run build && npm publish --access public --provenance=false --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:76b4c27d-8722-4547-8577-8355dec2c725"}},"repository":{"url":"git+https://github.com/acme-skunkworks/eslint-config.git","type":"git"},"_npmVersion":"11.14.1","description":"Shared ESLint configuration with TypeScript and React support","directories":{},"lint-staged":{"**/*":["prettier --write --ignore-unknown"],"**/*.{md,mdx}":["bash -c 'markdownlint-cli2 --fix --config ./.markdownlint-cli2.jsonc \"$@\" || true' --"],"**/*.{yml,yaml}":["bash -c 'if command -v yamllint >/dev/null 2>&1; then yamllint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  yamllint not installed — skipping. Install with: brew install yamllint\"; else echo \"⚠️  yamllint not installed — skipping. Install with: pip install --user yamllint==1.37.1\"; fi' --"],"**/package.json":["bash -c 'sort-package-json \"$@\" || true' --","bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],"**/*.{ts,tsx,js,mjs,cjs}":["bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],".github/workflows/*.{yml,yaml}":["bash -c 'if command -v actionlint >/dev/null 2>&1; then actionlint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  actionlint not installed — skipping. Install with: brew install actionlint\"; else echo \"⚠️  actionlint not installed — skipping. Install via: bash <(curl -fsSL https://raw.githubusercontent.com/rhysd/actionlint/v1.7.5/scripts/download-actionlint.bash)\"; fi' --"]},"_nodeVersion":"22.22.2","dependencies":{"globals":"^17.6.0","eslint-plugin-n":"^17.23.1","typescript-eslint":"^8.46.0","astro-eslint-parser":"^1.0.0","eslint-plugin-astro":"^1.0.0","eslint-plugin-jsdoc":"^62.9.0","eslint-plugin-react":"^7.37.5","eslint-plugin-regexp":"^3.1.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-unicorn":"^64.0.0","eslint-plugin-import-x":"^4.16.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.4","eslint-config-canonical":"^47.4.2","eslint-plugin-react-hooks":"^7.0.1","prettier-plugin-tailwindcss":"^0.8.0","eslint-import-resolver-typescript":"^4.4.4"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.1","husky":"^9.1.7","rimraf":"^6.0.1","vitest":"^4.1.6","typescript":"^6.0.3","@types/node":"^25.6.0","lint-staged":"^16.3.2","@types/eslint":"^9.6.1","@changesets/cli":"^2.31.0","markdownlint-cli2":"^0.18.1","sort-package-json":"^3.6.1","@robeasthope/markdownlint-config":"^1.1.1"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0","prettier":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.0.2_1778878763420_0.0576666105148107","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@acme-skunkworks/eslint-config","version":"1.0.3","keywords":["eslint","eslint-config","linting","typescript","astro","code-quality"],"author":{"url":"https://github.com/RobEasthope","name":"Rob Easthope"},"license":"MIT","_id":"@acme-skunkworks/eslint-config@1.0.3","maintainers":[{"name":"robeasthope","email":"hello@robeasthope.com"}],"homepage":"https://github.com/acme-skunkworks/eslint-config#readme","bugs":{"url":"https://github.com/acme-skunkworks/eslint-config/issues"},"dist":{"shasum":"bf4da3473dcf45cfba62fd0c3f247cf16c6ba396","tarball":"https://registry.npmjs.org/@acme-skunkworks/eslint-config/-/eslint-config-1.0.3.tgz","fileCount":54,"integrity":"sha512-Iv9IMxrmcw1U8ZaACCPdFfHRsn5Pq29TJBYhwdstkPWXIEPDS6d/UEUhTtB95cS345ll75UiBuRRoUbSFpYqJg==","signatures":[{"sig":"MEUCIQD8/Sh/eGB0JaBXiInhSUle3YsL2jm+1tLU7aN5RWrQXAIgQkBIZeF7fWL73mNayDjDbiaPeV2/y3wtCk+lcCQS5y8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@acme-skunkworks%2feslint-config@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78752},"main":"./dist/index.js","pnpm":{"onlyBuiltDependencies":["unrs-resolver"]},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"1b48c6861201f87210d0584abeab58ceb24d5b0a","scripts":{"tsc":"tsc --noEmit","lint":"eslint 'index.ts' 'rules/**/*.ts' 'infrastructure/scripts/**/*.ts' 'infrastructure/send-it/**/*.ts' --cache --cache-location ./.eslintcache","test":"vitest run","build":"tsc","clean":"rimraf node_modules dist","act:ci":"act pull_request -W .github/workflows/ci.yml --eventpath .github/act-events/pull_request.json","format":"npx prettier --write .","ci:list":"gh run list --limit 10","ci:view":"gh run view","lint:md":"markdownlint-cli2 '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","lint:sh":"bash -c 'if command -v shellcheck >/dev/null 2>&1; then shellcheck infrastructure/scripts/*.sh .husky/pre-commit .husky/pre-push .husky/commit-msg; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  shellcheck not installed — skipping. Install: brew install shellcheck\"; else echo \"⚠️  shellcheck not installed — skipping. Install: apt-get install shellcheck\"; fi'","prepare":"husky","release":"pnpm run build && changeset publish","test:sh":"bash -c 'if command -v bats >/dev/null 2>&1; then bats infrastructure/tests/*.bats; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  bats not installed — skipping. Install: brew install bats-core\"; else echo \"⚠️  bats not installed — skipping. Install: apt-get install bats\"; fi'","version":"changeset version","act:list":"act --list","ci:watch":"gh run watch $(gh run list -L 1 --json databaseId -q '.[0].databaseId // empty')","lint:fix":"eslint 'index.ts' 'rules/**/*.ts' 'infrastructure/scripts/**/*.ts' 'infrastructure/send-it/**/*.ts' --fix --cache --cache-location ./.eslintcache","lint:yaml":"yamllint .","test:watch":"vitest","lint:md:fix":"markdownlint-cli2 --fix '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","sort-pkg-json":"sort-package-json","lint:workflows":"actionlint","prepublishOnly":"pnpm run build","release:manual":"pnpm run build && npm publish --access public --provenance=false","act:release:dry":"act push -W .github/workflows/release.yml","release:manual:dry":"pnpm run build && npm publish --access public --provenance=false --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:76b4c27d-8722-4547-8577-8355dec2c725"}},"repository":{"url":"git+https://github.com/acme-skunkworks/eslint-config.git","type":"git"},"_npmVersion":"11.14.1","description":"Shared ESLint configuration with TypeScript and React support","directories":{},"lint-staged":{"**/*":["prettier --write --ignore-unknown"],"**/*.{md,mdx}":["bash -c 'markdownlint-cli2 --fix --config ./.markdownlint-cli2.jsonc \"$@\" || true' --"],"**/*.{yml,yaml}":["bash -c 'if command -v yamllint >/dev/null 2>&1; then yamllint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  yamllint not installed — skipping. Install with: brew install yamllint\"; else echo \"⚠️  yamllint not installed — skipping. Install with: pip install --user yamllint==1.37.1\"; fi' --"],"**/package.json":["bash -c 'sort-package-json \"$@\" || true' --","bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],"**/*.{ts,tsx,js,mjs,cjs}":["bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],".github/workflows/*.{yml,yaml}":["bash -c 'if command -v actionlint >/dev/null 2>&1; then actionlint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  actionlint not installed — skipping. Install with: brew install actionlint\"; else echo \"⚠️  actionlint not installed — skipping. Install via: bash <(curl -fsSL https://raw.githubusercontent.com/rhysd/actionlint/v1.7.5/scripts/download-actionlint.bash)\"; fi' --"]},"_nodeVersion":"22.22.3","dependencies":{"globals":"^17.6.0","eslint-plugin-n":"^17.23.1","typescript-eslint":"^8.46.0","astro-eslint-parser":"^1.0.0","eslint-plugin-astro":"^1.0.0","eslint-plugin-jsdoc":"^62.9.0","eslint-plugin-react":"^7.37.5","eslint-plugin-regexp":"^3.1.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-unicorn":"^64.0.0","eslint-plugin-import-x":"^4.16.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.4","eslint-config-canonical":"^47.4.2","eslint-plugin-react-hooks":"^7.0.1","prettier-plugin-tailwindcss":"^0.8.0","eslint-import-resolver-typescript":"^4.4.4"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.1","husky":"^9.1.7","rimraf":"^6.0.1","vitest":"^4.1.6","typescript":"^6.0.3","@types/node":"^25.6.0","lint-staged":"^16.3.2","@types/eslint":"^9.6.1","@changesets/cli":"^2.31.0","markdownlint-cli2":"^0.18.1","sort-package-json":"^3.6.1","@acme-skunkworks/markdownlint-config":"^2.0.0"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0","prettier":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.0.3_1779548137255_0.08553448211514025","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@acme-skunkworks/eslint-config","version":"1.0.4","keywords":["eslint","eslint-config","linting","typescript","react","astro","sanity","storybook","code-quality"],"author":{"url":"https://github.com/RobEasthope","name":"Rob Easthope"},"license":"MIT","_id":"@acme-skunkworks/eslint-config@1.0.4","maintainers":[{"name":"robeasthope","email":"hello@robeasthope.com"}],"homepage":"https://github.com/acme-skunkworks/eslint-config#readme","bugs":{"url":"https://github.com/acme-skunkworks/eslint-config/issues"},"dist":{"shasum":"eea83c3bd59a569d3cc10657305149e3fbe4e6ef","tarball":"https://registry.npmjs.org/@acme-skunkworks/eslint-config/-/eslint-config-1.0.4.tgz","fileCount":66,"integrity":"sha512-M3nLHCwnvTki7ezVNBOutdTpz4/XSPNgMFaRQr49Zv87+TzbzXbgrRIM4aBOjOw8YJXoDJlxr6n3slxHfj3ZaA==","signatures":[{"sig":"MEUCIBiyIbf1bFu/RDP55LzYTYb/6SgozeTZZWFQuw0nB3rmAiEAiXq5uDrOzPzDEWXlYaaJQIRU6cdilkSUWypEC3v8628=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@acme-skunkworks%2feslint-config@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":101671},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"fdb219eaa79f4f223ef3b628b010002de56dba40","scripts":{"tsc":"tsc --noEmit","lint":"eslint 'index.ts' 'rules/**/*.ts' 'infrastructure/scripts/**/*.ts' 'infrastructure/send-it/**/*.ts' --cache --cache-location ./.eslintcache","test":"vitest run","build":"tsc","clean":"rimraf node_modules dist","act:ci":"act pull_request -W .github/workflows/ci.yml --eventpath .github/act-events/pull_request.json","format":"npx prettier --write .","ci:list":"gh run list --limit 10","ci:view":"gh run view","lint:md":"markdownlint-cli2 '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**' '!**/CHANGELOG.md'","lint:sh":"bash -c 'if command -v shellcheck >/dev/null 2>&1; then shellcheck infrastructure/scripts/*.sh .husky/pre-commit .husky/pre-push .husky/commit-msg; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  shellcheck not installed — skipping. Install: brew install shellcheck\"; else echo \"⚠️  shellcheck not installed — skipping. Install: apt-get install shellcheck\"; fi'","prepare":"husky","release":"pnpm run build && changeset publish","test:sh":"bash -c 'if command -v bats >/dev/null 2>&1; then bats infrastructure/tests/*.bats; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  bats not installed — skipping. Install: brew install bats-core\"; else echo \"⚠️  bats not installed — skipping. Install: apt-get install bats\"; fi'","version":"changeset version","act:list":"act --list","ci:watch":"gh run watch $(gh run list -L 1 --json databaseId -q '.[0].databaseId // empty')","lint:fix":"eslint 'index.ts' 'rules/**/*.ts' 'infrastructure/scripts/**/*.ts' 'infrastructure/send-it/**/*.ts' --fix --cache --cache-location ./.eslintcache","lint:yaml":"yamllint .","test:watch":"vitest","lint:md:fix":"markdownlint-cli2 --fix '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**' '!**/CHANGELOG.md'","sort-pkg-json":"sort-package-json","lint:workflows":"actionlint","prepublishOnly":"pnpm run build","release:manual":"pnpm run build && npm publish --access public --provenance=false","act:release:dry":"act push -W .github/workflows/release.yml","changeset:version":"changeset version && pnpm changelog:finalise","changelog:finalise":"tsx infrastructure/scripts/finalise-changelog.ts","release:manual:dry":"pnpm run build && npm publish --access public --provenance=false --dry-run","validate:changelog":"tsx infrastructure/scripts/validate-changelog.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:76b4c27d-8722-4547-8577-8355dec2c725"}},"repository":{"url":"git+https://github.com/acme-skunkworks/eslint-config.git","type":"git"},"_npmVersion":"11.14.1","description":"Shared ESLint flat-config preset with TypeScript, React, Astro, Sanity, and Storybook support","directories":{},"lint-staged":{"**/*":["prettier --write --ignore-unknown"],"**/*.{md,mdx}":["bash -c 'markdownlint-cli2 --fix --config ./.markdownlint-cli2.jsonc \"$@\" || true' --"],"**/*.{yml,yaml}":["bash -c 'if command -v yamllint >/dev/null 2>&1; then yamllint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  yamllint not installed — skipping. Install with: brew install yamllint\"; else echo \"⚠️  yamllint not installed — skipping. Install with: pip install --user yamllint==1.37.1\"; fi' --"],"**/package.json":["bash -c 'sort-package-json \"$@\" || true' --","bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],"**/*.{ts,tsx,js,mjs,cjs}":["bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],".github/workflows/*.{yml,yaml}":["bash -c 'if command -v actionlint >/dev/null 2>&1; then actionlint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  actionlint not installed — skipping. Install with: brew install actionlint\"; else echo \"⚠️  actionlint not installed — skipping. Install via: bash <(curl -fsSL https://raw.githubusercontent.com/rhysd/actionlint/v1.7.5/scripts/download-actionlint.bash)\"; fi' --"]},"_nodeVersion":"22.22.3","dependencies":{"globals":"^17.6.0","eslint-plugin-n":"^17.23.1","typescript-eslint":"^8.46.0","astro-eslint-parser":"^1.0.0","eslint-plugin-astro":"^1.0.0","eslint-plugin-jsdoc":"^62.9.0","eslint-plugin-react":"^7.37.5","eslint-plugin-regexp":"^3.1.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-unicorn":"^64.0.0","eslint-plugin-import-x":"^4.16.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.4","eslint-config-canonical":"^47.4.2","eslint-plugin-react-hooks":"^7.0.1","prettier-plugin-tailwindcss":"^0.8.0","eslint-import-resolver-typescript":"^4.4.4"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.1","husky":"^9.1.7","rimraf":"^6.0.1","vitest":"^4.1.6","typescript":"^6.0.3","@types/node":"^25.6.0","gray-matter":"^4.0.3","lint-staged":"^16.3.2","@types/eslint":"^9.6.1","@changesets/cli":"^2.31.0","markdownlint-cli2":"^0.18.1","sort-package-json":"^3.6.1","@acme-skunkworks/markdownlint-config":"^2.0.0"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0","prettier":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.0.4_1780131757899_0.5516083174897681","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@acme-skunkworks/eslint-config","version":"1.0.5","keywords":["eslint","eslint-config","linting","typescript","react","astro","sanity","storybook","code-quality"],"author":{"url":"https://github.com/RobEasthope","name":"Rob Easthope"},"license":"MIT","_id":"@acme-skunkworks/eslint-config@1.0.5","maintainers":[{"name":"robeasthope","email":"hello@robeasthope.com"}],"homepage":"https://github.com/acme-skunkworks/eslint-config#readme","bugs":{"url":"https://github.com/acme-skunkworks/eslint-config/issues"},"dist":{"shasum":"be77a7abd188d40dc7c11a3b5f73634eddb2389e","tarball":"https://registry.npmjs.org/@acme-skunkworks/eslint-config/-/eslint-config-1.0.5.tgz","fileCount":69,"integrity":"sha512-wHrV2SmwvmKhzJVc0XkSKybcMRZs+G5EOA6NSLnxGz38uVTPbQC+JUu2qvGPDOEOsCFIYtE11uGLCsqAfhKbpQ==","signatures":[{"sig":"MEQCICqXtjD9UKi/Ppnxd37cRJHI5XETz5evpPIpNflGByy7AiAP+j8KhBY5ejAneXeT75jiVEH9VSsHU+WY9IuCDSNwog==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@acme-skunkworks%2feslint-config@1.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106416},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/eslint-config/eslint-config/.artifact/acme-skunkworks-eslint-config-1.0.5.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"tsc":"tsc --noEmit","lint":"eslint 'index.ts' 'rules/**/*.ts' 'infrastructure/scripts/**/*.ts' 'infrastructure/send-it/**/*.ts' --cache --cache-location ./.eslintcache","test":"vitest run","build":"tsc","clean":"rimraf node_modules dist","act:ci":"act pull_request -W .github/workflows/ci.yml --eventpath .github/act-events/pull_request.json","format":"npx prettier --write .","ci:list":"gh run list --limit 10","ci:view":"gh run view","lint:md":"markdownlint-cli2 '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","lint:sh":"bash -c 'if command -v shellcheck >/dev/null 2>&1; then shellcheck infrastructure/scripts/*.sh .husky/pre-commit .husky/pre-push .husky/commit-msg; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  shellcheck not installed — skipping. Install: brew install shellcheck\"; else echo \"⚠️  shellcheck not installed — skipping. Install: apt-get install shellcheck\"; fi'","prepare":"husky","test:sh":"bash -c 'if command -v bats >/dev/null 2>&1; then bats infrastructure/tests/*.bats; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  bats not installed — skipping. Install: brew install bats-core\"; else echo \"⚠️  bats not installed — skipping. Install: apt-get install bats\"; fi'","act:list":"act --list","ci:watch":"gh run watch $(gh run list -L 1 --json databaseId -q '.[0].databaseId // empty')","lint:fix":"eslint 'index.ts' 'rules/**/*.ts' 'infrastructure/scripts/**/*.ts' 'infrastructure/send-it/**/*.ts' --fix --cache --cache-location ./.eslintcache","lint:yaml":"yamllint .","test:watch":"vitest","lint:md:fix":"markdownlint-cli2 --fix '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","sort-pkg-json":"sort-package-json","lint:workflows":"actionlint","prepublishOnly":"pnpm run build","release:manual":"pnpm run build && npm publish --access public --provenance=false","act:release:dry":"act push -W .github/workflows/release.yml","changelog:finalise":"tsx infrastructure/scripts/finalise-changelog.ts","release:manual:dry":"pnpm run build && npm publish --access public --provenance=false --dry-run","validate:changelog":"tsx infrastructure/scripts/validate-changelog.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:76b4c27d-8722-4547-8577-8355dec2c725"}},"_resolved":"/home/runner/work/eslint-config/eslint-config/.artifact/acme-skunkworks-eslint-config-1.0.5.tgz","_integrity":"sha512-wHrV2SmwvmKhzJVc0XkSKybcMRZs+G5EOA6NSLnxGz38uVTPbQC+JUu2qvGPDOEOsCFIYtE11uGLCsqAfhKbpQ==","repository":{"url":"git+https://github.com/acme-skunkworks/eslint-config.git","type":"git"},"_npmVersion":"11.14.1","description":"Shared ESLint flat-config preset with TypeScript, React, Astro, Sanity, and Storybook support","directories":{},"lint-staged":{"**/*":["prettier --write --ignore-unknown"],"**/*.{md,mdx}":["bash -c 'markdownlint-cli2 --fix --config ./.markdownlint-cli2.jsonc \"$@\" || true' --"],"**/*.{yml,yaml}":["bash -c 'if command -v yamllint >/dev/null 2>&1; then yamllint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  yamllint not installed — skipping. Install with: brew install yamllint\"; else echo \"⚠️  yamllint not installed — skipping. Install with: pip install --user yamllint==1.37.1\"; fi' --"],"**/package.json":["bash -c 'sort-package-json \"$@\" || true' --","bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],"**/*.{ts,tsx,js,mjs,cjs}":["bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],".github/workflows/*.{yml,yaml}":["bash -c 'if command -v actionlint >/dev/null 2>&1; then actionlint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  actionlint not installed — skipping. Install with: brew install actionlint\"; else echo \"⚠️  actionlint not installed — skipping. Install via: bash <(curl -fsSL https://raw.githubusercontent.com/rhysd/actionlint/v1.7.5/scripts/download-actionlint.bash)\"; fi' --"]},"_nodeVersion":"22.22.3","dependencies":{"globals":"^17.6.0","eslint-plugin-n":"^17.23.1","typescript-eslint":"^8.46.0","astro-eslint-parser":"^1.0.0","eslint-plugin-astro":"^1.0.0","eslint-plugin-jsdoc":"^62.9.0","eslint-plugin-react":"^7.37.5","eslint-plugin-regexp":"^3.1.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-unicorn":"^64.0.0","eslint-plugin-import-x":"^4.16.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.4","eslint-config-canonical":"^47.4.2","eslint-plugin-react-hooks":"^7.0.1","prettier-plugin-tailwindcss":"^0.8.0","eslint-import-resolver-typescript":"^4.4.4"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.1","husky":"^9.1.7","rimraf":"^6.0.1","vitest":"^4.1.6","typescript":"^6.0.3","@types/node":"^25.6.0","gray-matter":"^4.0.3","lint-staged":"^16.3.2","@types/eslint":"^9.6.1","markdownlint-cli2":"^0.18.1","sort-package-json":"^3.6.1","@acme-skunkworks/markdownlint-config":"^2.0.0"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0","prettier":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.0.5_1782242965833_0.3096243442394435","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@acme-skunkworks/eslint-config","version":"1.1.0","keywords":["eslint","eslint-config","linting","typescript","react","astro","sanity","storybook","code-quality"],"author":{"url":"https://github.com/RobEasthope","name":"Rob Easthope"},"license":"MIT","_id":"@acme-skunkworks/eslint-config@1.1.0","maintainers":[{"name":"robeasthope","email":"hello@robeasthope.com"}],"homepage":"https://github.com/acme-skunkworks/eslint-config#readme","bugs":{"url":"https://github.com/acme-skunkworks/eslint-config/issues"},"dist":{"shasum":"0a80edd9458acb5bdf19ac8a104423f4339e0e7d","tarball":"https://registry.npmjs.org/@acme-skunkworks/eslint-config/-/eslint-config-1.1.0.tgz","fileCount":72,"integrity":"sha512-0s/PSqITokTFqd65Z5SItbFrOSku2LNbSBjWQSaCDnYDLwct0v2D+3lwQLa+dGx/DpaM60GlL74IZhdG3U+bIg==","signatures":[{"sig":"MEQCIEq4c04TSE6lnxjii8tAXieEXXTA+kz5j+qDSOA3azIRAiBoWpC0I9nmp894MHL27MkB2U8FWbjLGYcrvSsbvDkZZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@acme-skunkworks%2feslint-config@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":113760},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/eslint-config/eslint-config/.artifact/acme-skunkworks-eslint-config-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"tsc":"tsc --noEmit","lint":"eslint 'index.ts' 'rules/**/*.ts' 'infrastructure/scripts/**/*.ts' 'infrastructure/send-it/**/*.ts' --cache --cache-location ./.eslintcache","test":"vitest run","build":"tsc","clean":"rimraf node_modules dist","act:ci":"act pull_request -W .github/workflows/ci.yml --eventpath .github/act-events/pull_request.json","format":"npx prettier --write .","ci:list":"gh run list --limit 10","ci:view":"gh run view","lint:md":"markdownlint-cli2 '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","lint:sh":"bash -c 'if command -v shellcheck >/dev/null 2>&1; then shellcheck infrastructure/scripts/*.sh .husky/pre-commit .husky/pre-push .husky/commit-msg; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  shellcheck not installed — skipping. Install: brew install shellcheck\"; else echo \"⚠️  shellcheck not installed — skipping. Install: apt-get install shellcheck\"; fi'","prepare":"husky","test:sh":"bash -c 'if command -v bats >/dev/null 2>&1; then bats infrastructure/tests/*.bats; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  bats not installed — skipping. Install: brew install bats-core\"; else echo \"⚠️  bats not installed — skipping. Install: apt-get install bats\"; fi'","act:list":"act --list","ci:watch":"gh run watch $(gh run list -L 1 --json databaseId -q '.[0].databaseId // empty')","lint:fix":"eslint 'index.ts' 'rules/**/*.ts' 'infrastructure/scripts/**/*.ts' 'infrastructure/send-it/**/*.ts' --fix --cache --cache-location ./.eslintcache","lint:yaml":"yamllint .","test:watch":"vitest","lint:md:fix":"markdownlint-cli2 --fix '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","sort-pkg-json":"sort-package-json","lint:workflows":"actionlint","prepublishOnly":"pnpm run build","release:manual":"pnpm run build && npm publish --access public --provenance=false","act:release:dry":"act push -W .github/workflows/release.yml","changelog:finalise":"tsx infrastructure/scripts/finalise-changelog.ts","release:manual:dry":"pnpm run build && npm publish --access public --provenance=false --dry-run","validate:changelog":"tsx infrastructure/scripts/validate-changelog.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:76b4c27d-8722-4547-8577-8355dec2c725"}},"_resolved":"/home/runner/work/eslint-config/eslint-config/.artifact/acme-skunkworks-eslint-config-1.1.0.tgz","_integrity":"sha512-0s/PSqITokTFqd65Z5SItbFrOSku2LNbSBjWQSaCDnYDLwct0v2D+3lwQLa+dGx/DpaM60GlL74IZhdG3U+bIg==","repository":{"url":"git+https://github.com/acme-skunkworks/eslint-config.git","type":"git"},"_npmVersion":"11.14.1","description":"Shared ESLint flat-config preset with TypeScript, React, Astro, Sanity, and Storybook support","directories":{},"lint-staged":{"**/*":["prettier --write --ignore-unknown"],"**/*.{md,mdx}":["bash -c 'markdownlint-cli2 --fix --config ./.markdownlint-cli2.jsonc \"$@\" || true' --"],"**/*.{yml,yaml}":["bash -c 'if command -v yamllint >/dev/null 2>&1; then yamllint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  yamllint not installed — skipping. Install with: brew install yamllint\"; else echo \"⚠️  yamllint not installed — skipping. Install with: pip install --user yamllint==1.37.1\"; fi' --"],"**/package.json":["bash -c 'sort-package-json \"$@\" || true' --","bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],"**/*.{ts,tsx,js,mjs,cjs}":["bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],".github/workflows/*.{yml,yaml}":["bash -c 'if command -v actionlint >/dev/null 2>&1; then actionlint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  actionlint not installed — skipping. Install with: brew install actionlint\"; else echo \"⚠️  actionlint not installed — skipping. Install via: bash <(curl -fsSL https://raw.githubusercontent.com/rhysd/actionlint/v1.7.5/scripts/download-actionlint.bash)\"; fi' --"]},"_nodeVersion":"22.23.0","dependencies":{"globals":"^17.6.0","eslint-plugin-n":"^17.23.1","typescript-eslint":"^8.46.0","astro-eslint-parser":"^1.0.0","eslint-plugin-astro":"^1.0.0","eslint-plugin-jsdoc":"^62.9.0","eslint-plugin-react":"^7.37.5","eslint-plugin-regexp":"^3.1.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-unicorn":"^64.0.0","eslint-plugin-import-x":"^4.16.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.4","eslint-config-canonical":"^47.4.2","eslint-plugin-react-hooks":"^7.0.1","prettier-plugin-tailwindcss":"^0.8.0","eslint-import-resolver-typescript":"^4.4.4"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.1","husky":"^9.1.7","rimraf":"^6.0.1","vitest":"^4.1.6","typescript":"^6.0.3","@types/node":"^25.6.0","gray-matter":"^4.0.3","lint-staged":"^16.3.2","@types/eslint":"^9.6.1","markdownlint-cli2":"^0.18.1","sort-package-json":"^3.6.1","@acme-skunkworks/markdownlint-config":"^2.0.0"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0","prettier":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.1.0_1782487249852_0.988973225587527","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@acme-skunkworks/eslint-config","version":"1.1.1","keywords":["eslint","eslint-config","linting","typescript","react","astro","sanity","storybook","code-quality"],"author":{"url":"https://github.com/RobEasthope","name":"Rob Easthope"},"license":"MIT","_id":"@acme-skunkworks/eslint-config@1.1.1","maintainers":[{"name":"robeasthope","email":"hello@robeasthope.com"}],"homepage":"https://github.com/acme-skunkworks/eslint-config#readme","bugs":{"url":"https://github.com/acme-skunkworks/eslint-config/issues"},"dist":{"shasum":"7de3b1331b7a12ce075b78b5d321faad09e234c3","tarball":"https://registry.npmjs.org/@acme-skunkworks/eslint-config/-/eslint-config-1.1.1.tgz","fileCount":72,"integrity":"sha512-22m8fdd5ILtC0VYftISr8i1MdErgZVDgH7Ks0uHkVV8dPXgHVTyjXZU2U5T8S+0cN/H09Xq6rHKdVj2X0a5NuQ==","signatures":[{"sig":"MEQCIDqUEt+o+oxyLPEF8vEILQs9qw4PXSC0Vl2v8R00NcXgAiADhI4Ru0uN0queWX1/hz/8tyTJBrrItZplERP9r9LWYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@acme-skunkworks%2feslint-config@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":112818},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/eslint-config/eslint-config/.artifact/acme-skunkworks-eslint-config-1.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"tsc":"tsc --noEmit","lint":"eslint 'index.ts' 'rules/**/*.ts' 'infrastructure/scripts/**/*.ts' --cache --cache-location ./.eslintcache","test":"vitest run","build":"tsc","clean":"rimraf node_modules dist","act:ci":"act pull_request -W .github/workflows/ci.yml --eventpath .github/act-events/pull_request.json","format":"npx prettier --write .","ci:list":"gh run list --limit 10","ci:view":"gh run view","lint:md":"markdownlint-cli2 '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","lint:sh":"bash -c 'if command -v shellcheck >/dev/null 2>&1; then shellcheck infrastructure/scripts/*.sh .husky/pre-commit .husky/pre-push .husky/commit-msg; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  shellcheck not installed — skipping. Install: brew install shellcheck\"; else echo \"⚠️  shellcheck not installed — skipping. Install: apt-get install shellcheck\"; fi'","prepare":"husky","test:sh":"bash -c 'if command -v bats >/dev/null 2>&1; then bats infrastructure/tests/*.bats; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  bats not installed — skipping. Install: brew install bats-core\"; else echo \"⚠️  bats not installed — skipping. Install: apt-get install bats\"; fi'","act:list":"act --list","ci:watch":"gh run watch $(gh run list -L 1 --json databaseId -q '.[0].databaseId // empty')","lint:fix":"eslint 'index.ts' 'rules/**/*.ts' 'infrastructure/scripts/**/*.ts' --fix --cache --cache-location ./.eslintcache","lint:yaml":"yamllint .","test:watch":"vitest","lint:md:fix":"markdownlint-cli2 --fix '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","sort-pkg-json":"sort-package-json","lint:workflows":"actionlint","prepublishOnly":"pnpm run build","release:manual":"pnpm run build && npm publish --access public --provenance=false","act:release:dry":"act push -W .github/workflows/pkg-release.yml","changelog:finalise":"tsx infrastructure/scripts/finalise-changelog.ts","release:manual:dry":"pnpm run build && npm publish --access public --provenance=false --dry-run","validate:changelog":"tsx infrastructure/scripts/validate-changelog.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ba4eb8ad-c642-4aac-9c97-c9f43b60bf8e"}},"_resolved":"/home/runner/work/eslint-config/eslint-config/.artifact/acme-skunkworks-eslint-config-1.1.1.tgz","_integrity":"sha512-22m8fdd5ILtC0VYftISr8i1MdErgZVDgH7Ks0uHkVV8dPXgHVTyjXZU2U5T8S+0cN/H09Xq6rHKdVj2X0a5NuQ==","repository":{"url":"git+https://github.com/acme-skunkworks/eslint-config.git","type":"git"},"_npmVersion":"11.14.1","description":"Shared ESLint flat-config preset with TypeScript, React, Astro, Sanity, and Storybook support","directories":{},"lint-staged":{"**/*":["prettier --write --ignore-unknown"],"**/*.{md,mdx}":["bash -c 'markdownlint-cli2 --fix --config ./.markdownlint-cli2.jsonc \"$@\" || true' --"],"**/*.{yml,yaml}":["bash -c 'if command -v yamllint >/dev/null 2>&1; then yamllint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  yamllint not installed — skipping. Install with: brew install yamllint\"; else echo \"⚠️  yamllint not installed — skipping. Install with: pip install --user yamllint==1.37.1\"; fi' --"],"**/package.json":["bash -c 'sort-package-json \"$@\" || true' --","bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],"**/*.{ts,tsx,js,mjs,cjs}":["bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],".github/workflows/*.{yml,yaml}":["bash -c 'if command -v actionlint >/dev/null 2>&1; then actionlint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  actionlint not installed — skipping. Install with: brew install actionlint\"; else echo \"⚠️  actionlint not installed — skipping. Install via: bash <(curl -fsSL https://raw.githubusercontent.com/rhysd/actionlint/v1.7.5/scripts/download-actionlint.bash)\"; fi' --"]},"_nodeVersion":"22.23.1","dependencies":{"globals":"^17.6.0","eslint-plugin-n":"^17.23.1","typescript-eslint":"^8.46.0","astro-eslint-parser":"^1.0.0","eslint-plugin-astro":"^1.0.0","eslint-plugin-jsdoc":"^62.9.0","eslint-plugin-react":"^7.37.5","eslint-plugin-regexp":"^3.1.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-unicorn":"^64.0.0","eslint-plugin-import-x":"^4.16.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.4","eslint-config-canonical":"^47.4.2","eslint-plugin-react-hooks":"^7.0.1","prettier-plugin-tailwindcss":"^0.8.0","eslint-import-resolver-typescript":"^4.4.4"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.1","bats":"1.13.0","husky":"^9.1.7","rimraf":"^6.0.1","vitest":"^4.1.6","typescript":"^6.0.3","@types/node":"^25.6.0","gray-matter":"^4.0.3","lint-staged":"^16.3.2","@types/eslint":"^9.6.1","markdownlint-cli2":"^0.18.1","sort-package-json":"^3.6.1","@acme-skunkworks/markdownlint-config":"^2.0.0"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0","prettier":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.1.1_1782849558779_0.9971759997079339","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@acme-skunkworks/eslint-config","version":"1.1.2","keywords":["eslint","eslint-config","linting","typescript","react","astro","sanity","storybook","code-quality"],"author":{"url":"https://github.com/RobEasthope","name":"Rob Easthope"},"license":"MIT","_id":"@acme-skunkworks/eslint-config@1.1.2","maintainers":[{"name":"robeasthope","email":"hello@robeasthope.com"}],"homepage":"https://github.com/acme-skunkworks/eslint-config#readme","bugs":{"url":"https://github.com/acme-skunkworks/eslint-config/issues"},"dist":{"shasum":"7c8f1a983d4ebe78e0c0a78f2f4664555c561f87","tarball":"https://registry.npmjs.org/@acme-skunkworks/eslint-config/-/eslint-config-1.1.2.tgz","fileCount":54,"integrity":"sha512-OohTTf2+UZCTkU8WsZTkrEqS+x5X+899hv/jifu6aRa64tMWQ46MOqvbktOyJ2hMf7HrkLk1970qWOIx7Q/Aww==","signatures":[{"sig":"MEYCIQDvh9IbWCtS9GNS/j7Nc96EhRrtq4khFOUtdmN6UlWU4QIhAJnAT8eEPrjnNu5RWdEapzRWGyTkR3fLLMs7MsxlRQQv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@acme-skunkworks%2feslint-config@1.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":83327},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/eslint-config/eslint-config/.artifact/acme-skunkworks-eslint-config-1.1.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"tsc":"tsc --noEmit","lint":"eslint 'index.ts' 'rules/**/*.ts' --cache --cache-location ./.eslintcache","test":"vitest run","build":"tsc","clean":"rimraf node_modules dist","act:ci":"act pull_request -W .github/workflows/ci.yml --eventpath .github/act-events/pull_request.json","format":"npx prettier --write .","ci:list":"gh run list --limit 10","ci:view":"gh run view","lint:md":"markdownlint-cli2 '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","lint:sh":"bash -c 'if command -v shellcheck >/dev/null 2>&1; then shellcheck infrastructure/scripts/*.sh .husky/pre-commit .husky/pre-push .husky/commit-msg; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  shellcheck not installed — skipping. Install: brew install shellcheck\"; else echo \"⚠️  shellcheck not installed — skipping. Install: apt-get install shellcheck\"; fi'","prepare":"husky","test:sh":"bash -c 'if command -v bats >/dev/null 2>&1; then bats infrastructure/tests/*.bats; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  bats not installed — skipping. Install: brew install bats-core\"; else echo \"⚠️  bats not installed — skipping. Install: apt-get install bats\"; fi'","act:list":"act --list","ci:watch":"gh run watch $(gh run list -L 1 --json databaseId -q '.[0].databaseId // empty')","lint:fix":"eslint 'index.ts' 'rules/**/*.ts' --fix --cache --cache-location ./.eslintcache","lint:yaml":"yamllint .","test:watch":"vitest","lint:md:fix":"markdownlint-cli2 --fix '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","sort-pkg-json":"sort-package-json","lint:workflows":"actionlint","prepublishOnly":"pnpm run build","release:manual":"pnpm run build && npm publish --access public --provenance=false","act:release:dry":"act push -W .github/workflows/pkg-release.yml","release:manual:dry":"pnpm run build && npm publish --access public --provenance=false --dry-run","validate:changelog":"pnpm exec changelog-core validate"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ba4eb8ad-c642-4aac-9c97-c9f43b60bf8e"}},"_resolved":"/home/runner/work/eslint-config/eslint-config/.artifact/acme-skunkworks-eslint-config-1.1.2.tgz","_integrity":"sha512-OohTTf2+UZCTkU8WsZTkrEqS+x5X+899hv/jifu6aRa64tMWQ46MOqvbktOyJ2hMf7HrkLk1970qWOIx7Q/Aww==","repository":{"url":"git+https://github.com/acme-skunkworks/eslint-config.git","type":"git"},"_npmVersion":"11.14.1","description":"Shared ESLint flat-config preset with TypeScript, React, Astro, Sanity, and Storybook support","directories":{},"lint-staged":{"**/*":["prettier --write --ignore-unknown"],"**/*.{md,mdx}":["bash -c 'markdownlint-cli2 --fix --config ./.markdownlint-cli2.jsonc \"$@\" || true' --"],"**/*.{yml,yaml}":["bash -c 'if command -v yamllint >/dev/null 2>&1; then yamllint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  yamllint not installed — skipping. Install with: brew install yamllint\"; else echo \"⚠️  yamllint not installed — skipping. Install with: pip install --user yamllint==1.37.1\"; fi' --"],"**/package.json":["bash -c 'sort-package-json \"$@\" || true' --","bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],"**/*.{ts,tsx,js,mjs,cjs}":["bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],".github/workflows/*.{yml,yaml}":["bash -c 'if command -v actionlint >/dev/null 2>&1; then actionlint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  actionlint not installed — skipping. Install with: brew install actionlint\"; else echo \"⚠️  actionlint not installed — skipping. Install via: bash <(curl -fsSL https://raw.githubusercontent.com/rhysd/actionlint/v1.7.5/scripts/download-actionlint.bash)\"; fi' --"]},"_nodeVersion":"22.23.1","dependencies":{"globals":"^17.6.0","eslint-plugin-n":"^17.23.1","typescript-eslint":"^8.46.0","astro-eslint-parser":"^1.0.0","eslint-plugin-astro":"^1.0.0","eslint-plugin-jsdoc":"^62.9.0","eslint-plugin-react":"^7.37.5","eslint-plugin-regexp":"^3.1.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-unicorn":"^64.0.0","eslint-plugin-import-x":"^4.16.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.4","eslint-config-canonical":"^47.4.2","eslint-plugin-react-hooks":"^7.0.1","prettier-plugin-tailwindcss":"^0.8.0","eslint-import-resolver-typescript":"^4.4.4"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.1","bats":"1.13.0","husky":"^9.1.7","rimraf":"^6.0.1","vitest":"^4.1.6","typescript":"^6.0.3","@types/node":"^25.6.0","lint-staged":"^16.3.2","@types/eslint":"^9.6.1","markdownlint-cli2":"^0.18.1","sort-package-json":"^3.6.1","@acme-skunkworks/changelog-core":"^1.1.0","@acme-skunkworks/markdownlint-config":"^2.0.0"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0","prettier":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.1.2_1784809436367_0.5385986277553168","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@acme-skunkworks/eslint-config","version":"1.1.3","description":"Shared ESLint flat-config preset with TypeScript, React, Astro, Sanity, and Storybook support","keywords":["eslint","eslint-config","linting","typescript","react","astro","sanity","storybook","code-quality"],"homepage":"https://github.com/acme-skunkworks/eslint-config#readme","bugs":{"url":"https://github.com/acme-skunkworks/eslint-config/issues"},"repository":{"type":"git","url":"git+https://github.com/acme-skunkworks/eslint-config.git"},"license":"MIT","author":{"name":"Rob Easthope","url":"https://github.com/RobEasthope"},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"act:ci":"act pull_request -W .github/workflows/ci.yml --eventpath .github/act-events/pull_request.json","act:list":"act --list","act:release:dry":"act push -W .github/workflows/pkg-release.yml","build":"tsc","ci:list":"gh run list --limit 10","ci:view":"gh run view","ci:watch":"gh run watch $(gh run list -L 1 --json databaseId -q '.[0].databaseId // empty')","clean":"rimraf node_modules dist","format":"npx prettier --write .","lint":"eslint 'index.ts' 'rules/**/*.ts' --cache --cache-location ./.eslintcache","lint:fix":"eslint 'index.ts' 'rules/**/*.ts' --fix --cache --cache-location ./.eslintcache","lint:md":"markdownlint-cli2 '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","lint:md:fix":"markdownlint-cli2 --fix '**/*.{md,mdx}' '!**/node_modules/**' '!**/dist/**' '!**/.turbo/**' '!**/.astro/**'","lint:sh":"bash -c 'if command -v shellcheck >/dev/null 2>&1; then shellcheck infrastructure/scripts/*.sh .husky/pre-commit .husky/pre-push .husky/commit-msg; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  shellcheck not installed — skipping. Install: brew install shellcheck\"; else echo \"⚠️  shellcheck not installed — skipping. Install: apt-get install shellcheck\"; fi'","lint:workflows":"actionlint","lint:yaml":"yamllint .","prepare":"husky","prepublishOnly":"pnpm run build","release:manual":"pnpm run build && npm publish --access public --provenance=false","release:manual:dry":"pnpm run build && npm publish --access public --provenance=false --dry-run","sort-pkg-json":"sort-package-json","test":"vitest run","test:sh":"bash -c 'if command -v bats >/dev/null 2>&1; then bats infrastructure/tests/*.bats; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  bats not installed — skipping. Install: brew install bats-core\"; else echo \"⚠️  bats not installed — skipping. Install: apt-get install bats\"; fi'","test:watch":"vitest","tsc":"tsc --noEmit","validate:changelog":"pnpm exec changelog-core validate"},"lint-staged":{"**/*":["prettier --write --ignore-unknown"],"**/*.{ts,tsx,js,mjs,cjs}":["bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],"**/package.json":["bash -c 'sort-package-json \"$@\" || true' --","bash -c 'pnpm exec eslint --fix --cache --cache-location ./.eslintcache \"$@\" || true' --"],"**/*.{md,mdx}":["bash -c 'markdownlint-cli2 --fix --config ./.markdownlint-cli2.jsonc \"$@\" || true' --"],"**/*.{yml,yaml}":["bash -c 'if command -v yamllint >/dev/null 2>&1; then yamllint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  yamllint not installed — skipping. Install with: brew install yamllint\"; else echo \"⚠️  yamllint not installed — skipping. Install with: pip install --user yamllint==1.37.1\"; fi' --"],".github/workflows/*.{yml,yaml}":["bash -c 'if command -v actionlint >/dev/null 2>&1; then actionlint \"$@\"; elif [ \"$(uname -s)\" = \"Darwin\" ]; then echo \"⚠️  actionlint not installed — skipping. Install with: brew install actionlint\"; else echo \"⚠️  actionlint not installed — skipping. Install via: bash <(curl -fsSL https://raw.githubusercontent.com/rhysd/actionlint/v1.7.5/scripts/download-actionlint.bash)\"; fi' --"]},"dependencies":{"astro-eslint-parser":"^1.0.0","eslint-config-canonical":"^47.4.2","eslint-import-resolver-typescript":"^4.4.4","eslint-plugin-astro":"^1.0.0","eslint-plugin-import-x":"^4.16.1","eslint-plugin-jsdoc":"^62.9.0","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-n":"^17.23.1","eslint-plugin-prettier":"^5.5.4","eslint-plugin-promise":"^7.2.1","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-regexp":"^3.1.0","eslint-plugin-unicorn":"^64.0.0","globals":"^17.6.0","prettier-plugin-tailwindcss":"^0.8.0","typescript-eslint":"^8.46.0"},"devDependencies":{"@acme-skunkworks/changelog-core":"^1.1.0","@acme-skunkworks/commitlint-config":"^1.0.0","@acme-skunkworks/markdownlint-config":"^2.0.0","@commitlint/cli":"^21.2.1","@types/eslint":"^9.6.1","@types/node":"^25.6.0","bats":"1.13.0","husky":"^9.1.7","lint-staged":"^16.3.2","markdownlint-cli2":"^0.18.1","rimraf":"^6.0.1","sort-package-json":"^3.6.1","tsx":"^4.21.1","typescript":"^6.0.3","vitest":"^4.1.6"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0","prettier":"^3.0.0"},"packageManager":"pnpm@10.33.0","engines":{"node":">=22"},"publishConfig":{"access":"public","provenance":true},"_id":"@acme-skunkworks/eslint-config@1.1.3","_integrity":"sha512-ab+W+UAk+dJh3mSkMjU/mU7zcLMRNwMiew8UaqFbLg1d6gdg11fUjHvu9NZZc+4zzYQ7mFzPcv+NkuUoJ+kj+w==","_resolved":"/home/runner/work/eslint-config/eslint-config/.artifact/acme-skunkworks-eslint-config-1.1.3.tgz","_from":"file:/home/runner/work/eslint-config/eslint-config/.artifact/acme-skunkworks-eslint-config-1.1.3.tgz","_nodeVersion":"22.23.1","_npmVersion":"11.14.1","dist":{"integrity":"sha512-ab+W+UAk+dJh3mSkMjU/mU7zcLMRNwMiew8UaqFbLg1d6gdg11fUjHvu9NZZc+4zzYQ7mFzPcv+NkuUoJ+kj+w==","shasum":"d687d58cb2df3f1c85844a9199c1d63d1f23c648","tarball":"https://registry.npmjs.org/@acme-skunkworks/eslint-config/-/eslint-config-1.1.3.tgz","fileCount":54,"unpackedSize":83405,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@acme-skunkworks%2feslint-config@1.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICkQ1vh4PX0vnq/5Fk9+4lGvWVhGz6tdly5hBxNLmQhzAiEAl7PfoQ3SfDGrDp1cJAKkOGcAMQNhRozHc2UoIzPm274="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ba4eb8ad-c642-4aac-9c97-c9f43b60bf8e"}},"directories":{},"maintainers":[{"name":"robeasthope","email":"hello@robeasthope.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-config_1.1.3_1786105177766_0.8678216011346347"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-01T16:57:07.547Z","modified":"2026-08-07T12:19:38.271Z","1.0.0":"2026-05-01T16:57:07.824Z","1.0.1":"2026-05-15T14:06:43.828Z","1.0.2":"2026-05-15T20:59:23.571Z","1.0.3":"2026-05-23T14:55:37.405Z","1.0.4":"2026-05-30T09:02:38.033Z","1.0.5":"2026-06-23T19:29:25.978Z","1.1.0":"2026-06-26T15:20:50.006Z","1.1.1":"2026-06-30T19:59:18.905Z","1.1.2":"2026-07-23T12:23:56.497Z","1.1.3":"2026-08-07T12:19:37.929Z"},"bugs":{"url":"https://github.com/acme-skunkworks/eslint-config/issues"},"author":{"name":"Rob Easthope","url":"https://github.com/RobEasthope"},"license":"MIT","homepage":"https://github.com/acme-skunkworks/eslint-config#readme","keywords":["eslint","eslint-config","linting","typescript","react","astro","sanity","storybook","code-quality"],"repository":{"type":"git","url":"git+https://github.com/acme-skunkworks/eslint-config.git"},"description":"Shared ESLint flat-config preset with TypeScript, React, Astro, Sanity, and Storybook support","maintainers":[{"name":"robeasthope","email":"hello@robeasthope.com"}],"readme":"# @acme-skunkworks/eslint-config\n\n> A shared ESLint v9 flat-config **preset composer** for TypeScript and React projects — import named-export presets and compose only the ones you need.\n\n[![npm version](https://img.shields.io/npm/v/@acme-skunkworks/eslint-config?logo=npm)](https://www.npmjs.com/package/@acme-skunkworks/eslint-config)\n[![Provenance: built and signed on GitHub Actions](https://img.shields.io/badge/provenance-built%20%26%20signed%20on%20GitHub%20Actions-2ea44f?logo=github)](https://www.npmjs.com/package/@acme-skunkworks/eslint-config#provenance)\n[![License: MIT](https://img.shields.io/npm/l/@acme-skunkworks/eslint-config)](LICENSE)\n[![Node engine](https://img.shields.io/node/v/@acme-skunkworks/eslint-config?logo=node.js)](https://www.npmjs.com/package/@acme-skunkworks/eslint-config)\n\nEvery release is published to npm via OIDC Trusted Publishing with a **provenance attestation** — the artefact is built and signed on GitHub Actions, so consumers can verify exactly which commit and workflow produced it.\n\n## Install\n\n```bash\npnpm add -D @acme-skunkworks/eslint-config eslint prettier\n```\n\n`eslint` (`^8.57.0 || ^9.0.0`) and `prettier` (`^3.0.0`) are **required peer dependencies** — install them alongside. Every ESLint plugin the config uses ships as a regular dependency, so you don't install plugins separately. Node 22+ is required.\n\n> **ESLint v8 users:** flat config isn't the default in v8 — set `ESLINT_USE_FLAT_CONFIG=1` so ESLint reads your `eslint.config.js`. ESLint v9 uses flat config by default, so no flag is needed.\n\n## Quick start\n\nThe package exposes each preset as a named export. Compose them in your `eslint.config.js`:\n\n```js\nimport {\n  base,\n  typescript,\n  frameworkRouting,\n} from \"@acme-skunkworks/eslint-config\";\n\nexport default [\n  ...base,\n  typescript,\n  ...frameworkRouting,\n  // your overrides last so they win\n  { rules: { \"@typescript-eslint/no-explicit-any\": \"warn\" } },\n];\n```\n\nPull in only the presets your project needs. Array presets are spread with `...`; single-config presets are added as-is — the table below notes which is which.\n\n## Presets\n\n**Core** — the everyday stack:\n\n| Preset             | Shape         | What it covers                                                                                                                                                                                                                                                                                                                                                                                         |\n| ------------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| `base`             | array (`...`) | Plugin-alias hack, global ignores, the canonical baseline, `package.json` lint config, CommonJS **and ESM** file overrides (Node + ES globals for `.cjs` / `.mjs` so standalone scripts parse without `no-undef`), and the `preferences` block (top-level type imports, `func-style: declaration`, Prettier integration, import resolver, `no-console` warn). The \"you almost always want this\" stack. |\n| `typescript`       | single        | Overrides for `**/*.{ts,tsx}` — disables `react/no-unused-prop-types` and `react/prop-types`, which are redundant under TypeScript.                                                                                                                                                                                                                                                                    |\n| `frameworkRouting` | array (`...`) | Turns off `canonical/filename-match-exported` for routing dirs — `routes/**`, `app/**`, `pages/**` (Next.js), `src/routes/**` (SvelteKit), `src/pages/**` (Astro) — and re-allows arrow functions on `root.tsx` / `*.route.tsx`. Spread **after** `base` (see Gotchas).                                                                                                                                |\n| `testing`          | single        | Relaxes strict TypeScript rules and `import/no-extraneous-dependencies` for `**/*.{test,spec}.*`, `__tests__/**`, and setup files.                                                                                                                                                                                                                                                                     |\n\n**Opt-in** — pull in per project:\n\n| Preset            | Shape         | What it covers                                                                                                      |\n| ----------------- | ------------- | ------------------------------------------------------------------------------------------------------------------- |\n| `astro`           | array (`...`) | `eslint-plugin-astro/flat/recommended` plus Astro-specific overrides.                                               |\n| `sanity`          | array (`...`) | Schema property ordering for `*.schema.ts` and structure-file exceptions, for Sanity Studio projects.               |\n| `storybook`       | single        | Overrides for `**/*.stories.{ts,tsx}`.                                                                              |\n| `complexity`      | array (`...`) | Raises the cyclomatic-complexity threshold to 40 for `**/scripts/**`, where orchestration scripts run linearly.     |\n| `e2e`             | single        | Disables `react-hooks/rules-of-hooks` for `**/e2e/**` — Playwright `test.extend` callbacks are false positives.     |\n| `tableComponents` | single        | Disables `react/no-unstable-nested-components` for `**/*Table.tsx` — TanStack Table / Refine column-cell renderers. |\n\n> A deprecated **default export** still bundles the v6.x composition for back-compat during migration. New code should use the named exports above. See the [migration guide](MIGRATION_FROM_PROTOMOLECULE.md).\n\n## Gotchas\n\nTwo ordering rules are easy to get wrong and fail **silently** — the config still loads, but the intended override never wins:\n\n- **Spread `frameworkRouting` _after_ `...base`.** Its `func-style` override must come later in the array than the `preferences` block (which `base` includes), or `base` wins and the React Router 7 typed-export pattern breaks.\n- **`frameworkRouting` is an ordered pair of configs** for the same reason — its second element (the React Router exceptions) must stay after its first, which in turn must follow `preferences`. If you ever expand the spread into individual elements, preserve their order.\n\nFull rationale (and the protomolecule issues behind it) is in [`CLAUDE.md`](CLAUDE.md).\n\n## Links\n\n- [Changelog](CHANGELOG.md)\n- [Migration guide](MIGRATION_FROM_PROTOMOLECULE.md) — moving from `@robeasthope/eslint-config`\n- [Repository](https://github.com/acme-skunkworks/eslint-config)\n- [Licence](LICENSE) — MIT\n","readmeFilename":"README.md"}