build: add `eslint.config.cjs` for JavaScript targets on ESLint v8 (gh54 part V) by Planeshifter · Pull Request #10967 · stdlib-js/stdlib

@Planeshifter Planeshifter changed the title build: add eslint.config.cjs for JavaScript targets on ESLint v8 build: add eslint.config.cjs for JavaScript targets on ESLint v8 (gh54 part V)

Mar 15, 2026
Add flat config alongside the legacy `.eslintrc.*` configuration:

- Create `eslint.config.cjs` with base JS config, override blocks
  for benchmarks, examples, tests, and REPL namespace files
- Inline stdlib rules as a runtime plugin object via
  `lib/node_modules/@stdlib/_tools/eslint/rules/scripts/plugin.js`
- Reuse existing rule definitions from `etc/eslint/rules/`
- Separate non-clonable rule options (remark plugin instances) from
  the main rules object to work around `structuredClone` limitations
  in ESLint's flat config internals
- Add `globals` package for flat config environment definitions
- Legacy `.eslintrc.*` files remain in place as the default workflow

Usage (requires ESLint v8 with flat config enabled):

    ESLINT_USE_FLAT_CONFIG=true npx eslint -c eslint.config.cjs <file>

Note: files under `lib/node_modules/` are hard-ignored by ESLint v8
flat config. Full `lib/` linting via flat config requires ESLint v9,
which allows `!**/node_modules/` ignore overrides.

Ref: stdlib-js/metr-issue-tracker#54
Add TypeScript-specific flat config blocks for `**/*.d.ts` and
`**/test/**/*.ts` files:

- Configure `@typescript-eslint/parser` with `parserOptions.project`
  pointing to the root `tsconfig.json`
- Register `@typescript-eslint`, `@stylistic/ts`, `jsdoc`, `import`,
  `expect-type`, and `stdlib` plugins
- Reuse the existing TypeScript rules from `etc/eslint/rules/typescript.js`
- Disable `jsdoc/require-jsdoc` for TypeScript test files

Ref: stdlib-js/metr-issue-tracker#54