Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
e677e88
feat: bootstrap monorepo with ESM-only config packages and Changesets…
CharlieHelps Sep 1, 2025
87474d7
chore: convert .mjs entrypoints; ESLint deps cleanup; Prettier semi=f…
CharlieHelps Sep 1, 2025
be15b16
docs(tsconfig): document presets (base/node-library/node-test), Node …
CharlieHelps Sep 1, 2025
d0d331c
docs(tsconfig): align base preset to ES2023 target/lib and update REA…
CharlieHelps Sep 1, 2025
4bd9a67
merge: main into charlie/initial-monorepo-setup to resolve conflicts
CharlieHelps Sep 1, 2025
b407123
ci(gha): rely on pnpm/action-setup@v4 packageManager auto-pinning; dr…
CharlieHelps Sep 1, 2025
596f906
refactor(config): move eslint/prettier configs to config.mjs and re-e…
CharlieHelps Sep 1, 2025
00ca8d7
chore: add per-package ESLint/Prettier configs; format and lint packa…
CharlieHelps Sep 2, 2025
1b145ef
build(eslint-config): import Prettier config by package name in local…
CharlieHelps Sep 2, 2025
39a0ef2
chore(prettier-config): import sibling ESLint config by package name …
CharlieHelps Sep 2, 2025
3eec7ab
config(eslint/prettier): replace cross-package relative imports with …
CharlieHelps Sep 2, 2025
4c75482
merge: main into charlie/initial-monorepo-setup; resolve conflicts an…
CharlieHelps Sep 2, 2025
5c20a93
chore(lockfile): resolve merge conflicts in pnpm-lock.yaml and normal…
CharlieHelps Sep 2, 2025
0791c45
refactor: remove eslint-config subpath export; strip comments; switch…
CharlieHelps Sep 2, 2025
0798a46
eslint-config: split JS/TS overrides; scope TS parser/resolver to TS …
CharlieHelps Sep 4, 2025
5082da4
Merge branch 'main' into charlie/initial-monorepo-setup
mikecbrant Sep 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"devDependencies": {
"@changesets/cli": "^2.28.1",
"@typescript/native-preview": "^7.0.0-dev.0",
"@mikecbrant/prettier-config": "workspace:*",
"prettier": "^3.3.3",
"typescript": "^5.6.3"
}
Expand Down
72 changes: 59 additions & 13 deletions packages/eslint-config/config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -13,26 +13,18 @@ export default [
// SonarJS recommended (flat)
sonarjs.configs.recommended,

// Strict overlays and additional plugins
// TypeScript-specific strict overrides
{
name: '@mikecbrant/eslint-config/strict-overrides',
files: [
'**/*.js',
'**/*.mjs',
'**/*.jsx',
'**/*.ts',
'**/*.mts',
'**/*.tsx',
'**/*.d.ts',
],
name: '@mikecbrant/eslint-config/strict-overrides:ts',
files: ['**/*.{ts,tsx,mts}'],
plugins: {
'@typescript-eslint': tsPlugin,
import: importPlugin,
unicorn: unicornPlugin,
'unused-imports': unusedImports,
},
languageOptions: {
ecmaVersion: 'latest',
ecmaVersion: 2023,
sourceType: 'module',
parser: tsParser,
parserOptions: {
Expand All @@ -55,7 +47,7 @@ export default [
'max-depth': ['error', 3],
'max-params': ['error', 4],

// TS hygiene
// TS hygiene (TS-only)
'@typescript-eslint/consistent-type-imports': [
'error',
{ prefer: 'type-imports', fixStyle: 'inline-type-imports' },
Expand Down Expand Up @@ -91,6 +83,60 @@ export default [
},
},

// JavaScript-specific strict overrides (no TS parser)
{
name: '@mikecbrant/eslint-config/strict-overrides:js',
files: ['**/*.{js,mjs,jsx}'],
plugins: {
import: importPlugin,
unicorn: unicornPlugin,
'unused-imports': unusedImports,
},
languageOptions: {
ecmaVersion: 2023,
sourceType: 'module',
parserOptions: {
ecmaFeatures: { jsx: true },
},
},
rules: {
// Confirmed strict thresholds (errors)
'max-lines-per-function': [
'error',
{ max: 60, skipComments: true, skipBlankLines: true },
],
complexity: ['error', 10],
'max-depth': ['error', 3],
'max-params': ['error', 4],

// Imports hygiene & sorting (no TS type group here)
'import/no-duplicates': 'error',
'import/order': [
'error',
{
groups: [
['builtin', 'external'],
'internal',
'parent',
'sibling',
'index',
'object',
],
alphabetize: { order: 'asc', caseInsensitive: true },
'newlines-between': 'always',
},
],
'unused-imports/no-unused-imports': 'error',

// Misc
'no-console': 'error',

// Tame a few unicorn defaults
'unicorn/prevent-abbreviations': 'off',
'unicorn/no-null': 'off',
},
},

// Explicitly omit CommonJS and TypeScript CJS
{ ignores: ['**/*.cjs', '**/*.cts'] },
]
2 changes: 1 addition & 1 deletion packages/eslint-config/eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import unusedImports from 'eslint-plugin-unused-imports'

export default [
{
files: ['*.mjs'],
files: ['**/*.mjs'],
languageOptions: {
ecmaVersion: 2023,
sourceType: 'module',
Expand Down
6 changes: 5 additions & 1 deletion packages/eslint-config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@
"files": [
"index.mjs",
"config.mjs",
"eslint.config.mjs",
"README.md"
]
],
"devDependencies": {
"@mikecbrant/prettier-config": "workspace:*"
}
}
1 change: 0 additions & 1 deletion packages/eslint-config/prettier.config.mjs
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
// Delegate to the published Prettier config package by name to avoid cross-package relative paths.
export { default } from '@mikecbrant/prettier-config'
1 change: 0 additions & 1 deletion packages/prettier-config/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
// Delegate to the published sibling package to avoid cross-package relative imports.
export { default } from '@mikecbrant/eslint-config'
5 changes: 4 additions & 1 deletion packages/prettier-config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,8 @@
"index.mjs",
"config.mjs",
"README.md"
]
],
"devDependencies": {
"@mikecbrant/eslint-config": "workspace:*"
}
}
7 changes: 7 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.