Changelog
All notable changes to eslint-config-mocg are documented here.
The format follows Keep a Changelog, and this project adheres to Semantic Versioning. See the versioning policy for what counts as a major, minor, or patch.
Unreleased
Added
- CI release workflow (
.github/workflows/release.yml): publishes to npm on a published GitHub Release (withworkflow_dispatchfor manual recovery), guarded by a tag↔package.jsonversion check. Prereleases publish under thenextdist-tag so they never displacelatest.
Changed
- Repository metadata now points at the canonical
moc-global/eslint-config(previouslydmytro-vakulenko-moc/eslint-config):package.jsonrepository/homepage/bugs, plus the README, docs, changelog footer, and issue-template links.repository.urlis now the publicgit+httpsform andhomepagepoints at the documentation site. The package name remainseslint-config-mocg.
2.2.0
Renames the package to its canonical company identity. Breaking — the package name, the umbrella export, and the CLI bin all change, so consumers must update their dependency and import lines. Behavior (the rules themselves) is unchanged.
Changed
- BREAKING: the package is now published as
eslint-config-mocg(unscoped), replacing the former scoped@moc-global/eslint-config. Update your dependency and every import specifier (eslint-config-mocg,eslint-config-mocg/react, …). - BREAKING: the umbrella export is renamed
moc()→mocg()(and its options typeMocOptions→MocgOptions). Update toimport { mocg } from 'eslint-config-mocg'andexport default mocg(). Subpath exports and thecreate*Configfactories keep their names. - BREAKING: the CLI bin is renamed
moc-eslint→eslint-config-mocg(npx eslint-config-mocg init).
The repository, homepage, and issue URLs are unchanged.
2.1.0
Adds a first-class Next.js stack and makes the React stack bundler-agnostic.
Added
- Next.js stack (
moc({ next: true }), auto-detected fromnext): the React config plus the official@next/eslint-plugin-nextCore Web Vitals rules, Next-aware Fast Refresh export names (App Router and Pages Router), ajsdoc/require-jsdocrelaxation forroute.ts/middleware.ts, and ignores for.next/,out/, andnext-env.d.ts. Uses@next/eslint-plugin-nextdirectly (noteslint-config-next, which would duplicate-bundle react/react-hooks/ typescript-eslint). New optional peer dependency@next/eslint-plugin-next. viteadd-on (moc({ vite: true }), auto-detected fromvite): supplies React Fast Refresh viaeslint-plugin-react-refresh'svitepreset.- Subpath exports
/next(createNextConfig) and/vite; newnext/vitemoc()flags;nextoffered by the installer wizard and--preset. - A runnable
examples/next-appconsumer (App Router + Pages Router) under theverify:examplesgate.
Changed
createReactConfigis now pristine (bundler-agnostic). Fast Refresh is no longer baked into the React stack — it is a bundler/HMR concern now supplied by theviteadd-on (for Vite projects) or thenextstack.nextis removed from the React stack's auto-detection; a Next.js project resolves to the Next stack, which supersedes React and applies the React layer exactly once.- Note for direct
/react-subpath importers (notmoc()users): if you import@moc-global/eslint-config/reactdirectly and relied on the previously-bundled Vite Fast Refresh, add@moc-global/eslint-config/vitealongside it.moc()users are unaffected — theviteadd-on is auto-detected from thevitedependency.
2.0.0
A ground-up rework into a standalone, shareable package. Breaking — the distribution model, layout, and minimum tooling versions all changed.
Added
moc()umbrella with dependency-based stack auto-detection — zero-configexport default moc()resolves the right stack and reads tsconfig path aliases.- Stacks: Node/TypeScript (base), NestJS, React, Vue (with
vueTsfor type-aware SFCs). Add-ons: Vitest, Jest, Zod, i18next, Tailwind CSS. - Interactive installer (
npx @moc-global/eslint-config init) and adoctordiagnostics command. - Subpath exports for hand-composition (
/node,/react,/vue,/nest,/vitest,/jest,/zod,/i18n,/tailwind,/stacks), plus an opt-in/react-compilerexport. - Type declarations (
.d.ts) formoc()and every subpath. - Four runnable example consumers under
examples/and averify:examplescheck; framework-stack dogfood tests; a husky pre-push gate.
Changed
- BREAKING: authored in TypeScript and shipped as a compiled
dist/(JavaScript +.d.ts);src/restructured intoconfig/(rules),core/(machinery), andcli/(installer) layers, enforced witheslint-plugin-boundaries. - BREAKING: flat-config only; minimum ESLint
^9.24 || ^10and Node^22.21 || >=24.10. - Plugin version ranges are sourced from
peerDependenciesas the single source of truth for the manifest, installer, anddoctor.
Fixed
- React stack no longer crashes a clean consumer install:
react-compileris an opt-in (not required) peer so it can't pull azod-validation-errorwithout the./v4export, and the React version is resolved concretely instead of via'detect'(which called a removed ESLint API). - Vue stack works on a standard project: SFC PascalCase is enforced on the filename only (not directories),
n/no-missing-importno longer false-flags aliased SFC imports, Prettier solely owns SFC formatting, andvueTs: trueimplies the Vue stack. - Rule policy accepts idiomatic, type-safe code: allows the
*Propsconvention and full words likeinfo; reconcilesno-voidwithno-floating-promises; removes duplicate ReDoS/deprecation reports; disables the false-positive-pronedetect-object-injection; and relaxesmax-classes-per-file.