Description
When running npx --yes @sap-ux/create@latest convert eslint-config --config recommended-for-s4hana on a project whose .eslintrc.json only extends the fiori-tools plugin (no other rules or plugins), the generated eslint.config.mjs contains an invalid leading comma:
import fioriTools from '@sap-ux/eslint-plugin-fiori-tools';
import { defineConfig } from "eslint/config";
export default defineConfig([,
...fioriTools.configs['recommended-for-s4hana'],
]);
Root Cause
Package: @sap-ux/app-config-writer — src/eslint-config/convert.ts
The injectFioriToolsIntoMigratedConfig function always prepends a , before the spread entry:
content =
content.slice(0, lastBracketIndex) +
`,\n ...fioriTools.configs['${config}'],\n` +
content.slice(lastBracketIndex);
When .eslintrc.json only extends plugin:@sap-ux/eslint-plugin-fiori-tools/*, removeFioriToolsFromExistingConfig strips that entry, leaving { "root": true }. The root property has no flat-config equivalent, so @eslint/migrate-config produces an empty array:
import { defineConfig } from "eslint/config";
export default defineConfig([]);
Injecting ,\n ... before ]); into an empty array produces the invalid [, syntax.
Reproducing Input
.eslintrc.json:
{
"extends": "plugin:@sap-ux/eslint-plugin-fiori-tools/defaultJS",
"root": true
}
Fix
Detect an empty array before injecting and omit the leading comma:
const beforeBracket = content.slice(0, lastBracketIndex);
const isEmptyArray = /\[\s*$/.test(beforeBracket);
const separator = isEmptyArray ? '' : ',';
content =
beforeBracket +
`${separator}\n ...fioriTools.configs['${config}'],\n` +
content.slice(lastBracketIndex);
A fix with a regression test is available on branch fix/convert-cmd.
Description
When running
npx --yes @sap-ux/create@latest convert eslint-config --config recommended-for-s4hanaon a project whose.eslintrc.jsononly extends the fiori-tools plugin (no other rules or plugins), the generatedeslint.config.mjscontains an invalid leading comma:Root Cause
Package:
@sap-ux/app-config-writer—src/eslint-config/convert.tsThe
injectFioriToolsIntoMigratedConfigfunction always prepends a,before the spread entry:When
.eslintrc.jsononly extendsplugin:@sap-ux/eslint-plugin-fiori-tools/*,removeFioriToolsFromExistingConfigstrips that entry, leaving{ "root": true }. Therootproperty has no flat-config equivalent, so@eslint/migrate-configproduces an empty array:Injecting
,\n ...before]);into an empty array produces the invalid[,syntax.Reproducing Input
.eslintrc.json:{ "extends": "plugin:@sap-ux/eslint-plugin-fiori-tools/defaultJS", "root": true }Fix
Detect an empty array before injecting and omit the leading comma:
A fix with a regression test is available on branch
fix/convert-cmd.