From 6ff13369bb18045657d0f84ddc86b540340603a1 Mon Sep 17 00:00:00 2001 From: Jarek Radosz Date: Tue, 28 Jan 2025 23:06:01 +0100 Subject: [PATCH] fix: add parser metadata for eslint 9 cache (#74791) When using `eslint-config-next` on eslint 9.x with a flat config (as per next.js [docs](https://nextjs.org/docs/app/api-reference/config/eslint#specifying-a-root-directory-within-a-monorepo)) and with the `--cache` flag - eslint would fail: ``` > ./node_modules/.bin/eslint --cache Oops! Something went wrong! :( ESLint: 9.17.0 TypeError: Cannot serialize key "parse" in parser: Function values are not supported. at languageOptionsToJSON (.../next-eslint-issue/node_modules/eslint/lib/config/config.js:113:23) at languageOptionsToJSON (.../next-eslint-issue/node_modules/eslint/lib/config/config.js:107:35) at Config.toJSON (.../next-eslint-issue/node_modules/eslint/lib/config/config.js:260:30) at stringify (.../next-eslint-issue/node_modules/json-stable-stringify-without-jsonify/index.js:25:25) at module.exports (.../next-eslint-issue/node_modules/json-stable-stringify-without-jsonify/index.js:68:7) at hashOfConfigFor (.../next-eslint-issue/node_modules/eslint/lib/cli-engine/lint-result-cache.js:50:75) at LintResultCache.getCachedLintResults (.../next-eslint-issue/node_modules/eslint/lib/cli-engine/lint-result-cache.js:116:30) at .../next-eslint-issue/node_modules/eslint/lib/eslint/eslint.js:783:41 at async Promise.all (index 0) at async ESLint.lintFiles (.../next-eslint-issue/node_modules/eslint/lib/eslint/eslint.js:759:25) ``` (see a minimal repro here: https://github.com/CvX/next-eslint-issue) This happens because eslint is unable to serialize the `parser` object in the config. Adding metadata fixes that. The issue was originally reported over at eslint repo in: https://github.com/eslint/eslint/issues/19322 --- packages/eslint-config-next/parser.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/eslint-config-next/parser.js b/packages/eslint-config-next/parser.js index 9e9fd22cfc073..b0366825e3542 100644 --- a/packages/eslint-config-next/parser.js +++ b/packages/eslint-config-next/parser.js @@ -2,8 +2,13 @@ const { parse, parseForESLint, } = require('next/dist/compiled/babel/eslint-parser') +const { version } = require('./package.json') module.exports = { parse, parseForESLint, + meta: { + name: 'eslint-config-next/parser', + version, + }, }