Files
mygit/.lintstagedrc.cjs
DuckQ1u 93d1b7c3d3
Copilot Setup Steps / copilot-setup-steps (push) Has been cancelled
first commit
2026-04-22 19:51:20 +07:00

70 lines
1.9 KiB
JavaScript

const path = require('path');
const SCOPED_WORKSPACES = [
'e2e',
'apps/admin',
'apps/posts',
'apps/shade'
];
function normalize(file) {
return file.split(path.sep).join('/');
}
function isInWorkspace(file, workspace) {
const normalizedFile = normalize(path.relative(process.cwd(), file));
const normalizedWorkspace = normalize(workspace);
return normalizedFile === normalizedWorkspace || normalizedFile.startsWith(`${normalizedWorkspace}/`);
}
function shellQuote(value) {
return `'${value.replace(/'/g, `'\\''`)}'`;
}
function buildScopedEslintCommand(workspace, files) {
if (files.length === 0) {
return null;
}
const relativeFiles = files
.map(file => normalize(path.relative(workspace, file)))
.map(shellQuote)
.join(' ');
return `pnpm --dir ${shellQuote(workspace)} exec eslint --cache ${relativeFiles}`;
}
function buildRootEslintCommand(files) {
if (files.length === 0) {
return null;
}
const quotedFiles = files.map(file => shellQuote(normalize(file))).join(' ');
return `eslint --cache ${quotedFiles}`;
}
module.exports = {
'*.{js,ts,tsx,jsx,cjs}': (files) => {
const workspaceGroups = new Map(SCOPED_WORKSPACES.map(workspace => [workspace, []]));
const rootFiles = [];
for (const file of files) {
const workspace = SCOPED_WORKSPACES.find(candidate => isInWorkspace(file, candidate));
if (workspace) {
workspaceGroups.get(workspace).push(file);
} else {
rootFiles.push(file);
}
}
return [
...SCOPED_WORKSPACES
.map(workspace => buildScopedEslintCommand(workspace, workspaceGroups.get(workspace)))
.filter(Boolean),
buildRootEslintCommand(rootFiles)
].filter(Boolean);
}
};