-
Notifications
You must be signed in to change notification settings - Fork 1
/
lint-staged.config.mjs
65 lines (53 loc) · 1.54 KB
/
lint-staged.config.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import { globby } from 'globby';
const packages = async () =>
await globby('packages/*', {
onlyDirectories: true,
});
const lintPackages = async () =>
(await packages()).reduce(
(acc, pack) => ({
...acc,
[`${pack}/**/*.(js|jsx|ts|tsx)`]: [
`repka --cwd ${pack} lint`,
`prettier --write`,
],
[`${pack}/**/*.(yaml|yml|json)`]: `prettier --write`,
}),
{}
);
async function buildRegularLintStagedConfig() {
return {
...(await lintPackages()),
'./*.(js|mjs|cjs|ts|mts|cts|jsx|tsx|yaml|yml|json)': `prettier --write`,
};
}
async function isPackageJsonChanged() {
const changedFiles = await globby('**/package.json', {
gitignore: true,
onlyFiles: true,
onlyDirectories: false,
ignore: ['**/node_modules/**/*'],
});
return changedFiles.length > 0;
}
async function execAsync(command) {
const { exec } = await import('child_process');
const { promisify } = await import('util');
const execAsyncFn = promisify(exec);
await execAsyncFn(command);
}
async function pnpmInstall() {
await execAsync('pnpm install');
}
async function gitAdd() {
await execAsync('git add .');
}
async function maybePnpmInstallAndBuildConfig() {
const changed = await isPackageJsonChanged();
if (changed) {
await pnpmInstall();
await gitAdd();
}
return await buildRegularLintStagedConfig();
}
export default await maybePnpmInstallAndBuildConfig();