Merge pull request #751 from actions/copilot/update-eslint-dependencies

Consolidate ESLint 9 and TypeScript ESLint 8 dependency updates
This commit is contained in:
Tyler Dixon
2025-11-20 16:06:33 +00:00
committed by GitHub
8 changed files with 616 additions and 1003 deletions

View File

@@ -1,5 +0,0 @@
dist/
lib/
node_modules/
jest.config.js
fix-regex.js

View File

@@ -1,26 +0,0 @@
{
"root": true,
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint", "github", "jest", "prettier"],
"extends": [
"plugin:github/recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
"prettier"
],
"parserOptions": {
"ecmaVersion": 2019,
"sourceType": "module"
},
"env": {
"node": true,
"es6": true,
"jest/globals": true
},
"rules": {
"filenames/match-regex": "off",
"github/no-then": "off",
"i18n-text/no-en": "off",
"import/no-namespace": "off"
}
}

View File

@@ -6,32 +6,32 @@ summary: Parse HTTP Content-Type header according to RFC 7231
homepage: https://github.com/fastify/fast-content-type-parse#readme homepage: https://github.com/fastify/fast-content-type-parse#readme
license: other license: other
licenses: licenses:
- sources: LICENSE - sources: LICENSE
text: |- text: |-
MIT License MIT License
Copyright (c) 2023 The Fastify Team Copyright (c) 2023 The Fastify Team
The Fastify team members are listed at https://github.com/fastify/fastify#team The Fastify team members are listed at https://github.com/fastify/fastify#team
and in the README file. and in the README file.
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions: furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software. copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. SOFTWARE.
- sources: README.md - sources: README.md
text: Licensed under [MIT](./LICENSE). text: Licensed under [MIT](./LICENSE).
notices: [] notices: []

View File

@@ -137,7 +137,6 @@ Using these events ensure that a given issue or pull request, in the workflow's
## Creating a PAT and adding it to your repository ## Creating a PAT and adding it to your repository
- Create a new [personal access token](https://github.com/settings/tokens/new). _See [Creating a personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) for more information_ - Create a new [personal access token](https://github.com/settings/tokens/new). _See [Creating a personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) for more information_
- For **Tokens (classic)** include the `project` scope; for private repos you will also need `repo` scope. - For **Tokens (classic)** include the `project` scope; for private repos you will also need `repo` scope.
- For **Fine-grained tokens**, you must first select the appropriate _owner_ and associated _repositories_. Then select _Organization permissions -> `projects` `read & write`_, and _Repository permissions -> `issues` `read-only`_ and _`pull requests` `read-only`_. - For **Fine-grained tokens**, you must first select the appropriate _owner_ and associated _repositories_. Then select _Organization permissions -> `projects` `read & write`_, and _Repository permissions -> `issues` `read-only`_ and _`pull requests` `read-only`_.

78
eslint.config.mjs Normal file
View File

@@ -0,0 +1,78 @@
import eslint from '@eslint/js'
import tseslint from 'typescript-eslint'
import github from 'eslint-plugin-github'
import jest from 'eslint-plugin-jest'
import globals from 'globals'
export default [
// Ignore patterns
{
ignores: ['dist/**', 'lib/**', 'node_modules/**', '__tests__/fixtures/**', 'eslint.config.mjs'],
},
// Base ESLint recommended rules
eslint.configs.recommended,
// TypeScript ESLint recommended rules
...tseslint.configs.recommended,
// GitHub plugin recommended rules
github.getFlatConfigs().recommended,
// Configuration for CommonJS JavaScript files
{
files: ['**/*.js'],
languageOptions: {
ecmaVersion: 2019,
sourceType: 'script',
globals: {
...globals.node,
...globals.es6,
},
},
rules: {
// Disable specific rules for CommonJS files
'github/filenames-match-regex': 'off',
'import/no-commonjs': 'off',
'@typescript-eslint/no-require-imports': 'off',
'i18n-text/no-en': 'off',
'import/no-namespace': 'off',
'no-implicit-globals': 'off',
'github/no-implicit-buggy-globals': 'off',
},
},
// Configuration for TypeScript files
{
files: ['**/*.ts'],
languageOptions: {
parser: tseslint.parser,
parserOptions: {
ecmaVersion: 2019,
sourceType: 'module',
},
globals: {
...globals.node,
...globals.es6,
},
},
rules: {
// Disable specific rules as in the original config
'github/filenames-match-regex': 'off',
'github/no-then': 'off',
'i18n-text/no-en': 'off',
'import/no-namespace': 'off',
},
},
// Jest-specific configuration
{
files: ['**/*.test.ts', '**/*.test.js', '__tests__/**/*.ts'],
...jest.configs['flat/recommended'],
languageOptions: {
globals: {
...globals.jest,
},
},
},
]

View File

@@ -8,9 +8,9 @@
const fs = require('fs') const fs = require('fs')
const filesToFix = [ const filesToFix = [
'node_modules/@actions/github/node_modules/@octokit/request/dist-src/fetch-wrapper.js', 'node_modules/@actions/github/node_modules/@octokit/request/dist-src/fetch-wrapper.js',
'node_modules/@actions/github/node_modules/@octokit/request/dist-node/index.js', 'node_modules/@actions/github/node_modules/@octokit/request/dist-node/index.js',
'node_modules/@actions/github/node_modules/@octokit/request/dist-web/index.js', 'node_modules/@actions/github/node_modules/@octokit/request/dist-web/index.js',
] ]
/** /**
@@ -19,13 +19,13 @@ const filesToFix = [
* @returns {string} - The fixed content * @returns {string} - The fixed content
*/ */
function applyRegexFix(content) { function applyRegexFix(content) {
let fixedContent = content let fixedContent = content
// Fix the problematic regex pattern - add proper grouping to fix operator precedence // Fix the problematic regex pattern - add proper grouping to fix operator precedence
fixedContent = fixedContent.replace(/\/\^text\\?\/\|charset=utf-8\$?\//g, '/^(text\\/|charset=utf-8)$/') fixedContent = fixedContent.replace(/\/\^text\\?\/\|charset=utf-8\$?\//g, '/^(text\\/|charset=utf-8)$/')
fixedContent = fixedContent.replace(/\/\^text\/\|charset=utf-8\$?\//g, '/^(text/|charset=utf-8)$/') fixedContent = fixedContent.replace(/\/\^text\/\|charset=utf-8\$?\//g, '/^(text/|charset=utf-8)$/')
return fixedContent return fixedContent
} }
/** /**
@@ -34,20 +34,20 @@ function applyRegexFix(content) {
* @returns {{fixed: boolean, error: string|null}} - Result of the fix operation * @returns {{fixed: boolean, error: string|null}} - Result of the fix operation
*/ */
function fixFile(filePath) { function fixFile(filePath) {
try { try {
const content = fs.readFileSync(filePath, 'utf8') const content = fs.readFileSync(filePath, 'utf8')
const originalContent = content const originalContent = content
const fixedContent = applyRegexFix(content) const fixedContent = applyRegexFix(content)
if (fixedContent !== originalContent) { if (fixedContent !== originalContent) {
fs.writeFileSync(filePath, fixedContent, 'utf8') fs.writeFileSync(filePath, fixedContent, 'utf8')
return { fixed: true, error: null } return {fixed: true, error: null}
} else { } else {
return { fixed: false, error: null } return {fixed: false, error: null}
}
} catch (error) {
return { fixed: false, error: error.message }
} }
} catch (error) {
return {fixed: false, error: error.message}
}
} }
/** /**
@@ -56,50 +56,50 @@ function fixFile(filePath) {
* @returns {{filesFixed: number, results: Array}} - Summary of fix operations * @returns {{filesFixed: number, results: Array}} - Summary of fix operations
*/ */
function fixAllFiles(files = filesToFix) { function fixAllFiles(files = filesToFix) {
const results = [] const results = []
let filesFixed = 0 let filesFixed = 0
for (const filePath of files) { for (const filePath of files) {
const result = fixFile(filePath) const result = fixFile(filePath)
results.push({ filePath, ...result }) results.push({filePath, ...result})
if (result.fixed) { if (result.fixed) {
filesFixed++ filesFixed++
}
} }
}
return { filesFixed, results } return {filesFixed, results}
} }
// Main execution when run as script // Main execution when run as script
if (require.main === module) { if (require.main === module) {
process.stdout.write('🔧 Applying regex fix for @octokit/request...\n') process.stdout.write('🔧 Applying regex fix for @octokit/request...\n')
const { filesFixed, results } = fixAllFiles() const {filesFixed, results} = fixAllFiles()
for (const result of results) { for (const result of results) {
if (result.error) { if (result.error) {
if (result.error.includes('ENOENT') || result.error.includes('no such file')) { if (result.error.includes('ENOENT') || result.error.includes('no such file')) {
process.stdout.write(`⚠️ File not found: ${result.filePath}\n`) process.stdout.write(`⚠️ File not found: ${result.filePath}\n`)
} else { } else {
process.stderr.write(`❌ Error fixing ${result.filePath}: ${result.error}\n`) process.stderr.write(`❌ Error fixing ${result.filePath}: ${result.error}\n`)
} }
} else if (result.fixed) { } else if (result.fixed) {
process.stdout.write(`✅ Fixed: ${result.filePath}\n`) process.stdout.write(`✅ Fixed: ${result.filePath}\n`)
} else { } else {
process.stdout.write(` No changes needed: ${result.filePath}\n`) process.stdout.write(` No changes needed: ${result.filePath}\n`)
}
} }
}
process.stdout.write(`\n🎉 Fix complete! ${filesFixed} files updated.\n`) process.stdout.write(`\n🎉 Fix complete! ${filesFixed} files updated.\n`)
if (filesFixed > 0) { if (filesFixed > 0) {
process.stdout.write('Run "npm run build:package" to rebuild with the fix.\n') process.stdout.write('Run "npm run build:package" to rebuild with the fix.\n')
} }
} }
// Export functions for testing // Export functions for testing
module.exports = { module.exports = {
applyRegexFix, applyRegexFix,
fixFile, fixFile,
fixAllFiles fixAllFiles,
} }

1340
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -15,21 +15,24 @@
"npm": ">= 8.0.0" "npm": ">= 8.0.0"
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.39.1",
"@github/prettier-config": "^0.0.6", "@github/prettier-config": "^0.0.6",
"@types/jest": "^30.0.0", "@types/jest": "^30.0.0",
"@types/node": "24.5.2", "@types/node": "^24.10.1",
"@typescript-eslint/eslint-plugin": "^7.14.1", "@typescript-eslint/eslint-plugin": "^8.47.0",
"@typescript-eslint/parser": "^7.18.0", "@typescript-eslint/parser": "^8.47.0",
"@vercel/ncc": "^0.38.3", "@vercel/ncc": "^0.38.3",
"concurrently": "^9.2.1", "concurrently": "^9.2.1",
"eslint": "^8.57.0", "eslint": "^9.39.1",
"eslint-plugin-github": "^5.0.1", "eslint-plugin-github": "^6.0.0",
"eslint-plugin-jest": "^28.11.0", "eslint-plugin-jest": "^29.1.0",
"eslint-plugin-prettier": "^5.2.5", "eslint-plugin-prettier": "^5.2.5",
"globals": "^15.14.0",
"jest": "^30.2.0", "jest": "^30.2.0",
"prettier": "3.6.2", "prettier": "3.6.2",
"ts-jest": "^29.4.5", "ts-jest": "^29.4.5",
"typescript": "^5.5.2" "typescript": "^5.9.3",
"typescript-eslint": "^8.47.0"
}, },
"keywords": [ "keywords": [
"actions", "actions",