Configuration
qoq.config.js exports a single configuration object. Every section is optional and falls back to opinionated defaults.
General
srcPath(default./src) — fallback path used when a tool isn't given explicit sources.configPaths— override where the CLI looks for each tool's config. Each override must begin with a leading/, which resolves relative toprocess.cwd().
{
srcPath: './src',
configPaths: {
eslint: '/eslint.config.js',
prettier: '/.prettierrc',
stylelint: '/stylelint.config.js',
},
}
For example, an ESLint config stored at configs/eslint.config.local.js is referenced as /configs/eslint.config.local.js.
NPM
{
npm: {
checkOutdatedEvery: 1, // days between outdated-dependency checks (default 1)
},
}
Prettier
{
prettier: {
sources: ['.'], // paths to format; defaults to [srcPath]
},
}
Execution respects your .prettierignore.
JSCPD
{
jscpd: {
format: [...], // see jscpd docs
ignore: [...], // see jscpd docs
threshold: 2, // max allowed duplication %, default 2
},
}
Knip
{
knip: {
entry: [...], // default: [${srcPath}/{index,cli,main,root}.{ts,tsx,js,jsx}]
project: [...], // default: [${srcPath}/**/*.{ts,tsx,js,jsx}]
ignore: [...],
ignoreDependencies: [...], // default: ['@ladamczyk/qoq-*']
ignoreBinaries: [...],
},
}
File extensions in the entry/project defaults are derived from the QoQ modules you have installed.
ESLint
Use standard ESLint flat config objects, and extend a QoQ preset through the template property (any @ladamczyk/qoq-eslint-v9-* package):
{
eslint: [
{
template: '@ladamczyk/qoq-eslint-v9-ts',
files: ['packages/**/src/**/*.ts'],
ignores: ['**/*.spec.ts'],
},
{
template: '@ladamczyk/qoq-eslint-v9-ts-vitest',
files: ['packages/**/src/**/*.spec.ts'],
},
],
}
Stylelint
Use a standard Stylelint config object and extend a QoQ preset via template (any @ladamczyk/qoq-stylelint-* package):
{
stylelint: {
strict: false,
template: '@ladamczyk/qoq-stylelint-css',
},
}