-
Notifications
You must be signed in to change notification settings - Fork 0
/
barrels.ts
23 lines (20 loc) · 803 Bytes
/
barrels.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { readdirSync, writeFileSync } from 'fs';
import { resolve, basename } from 'path';
import { partition } from './src';
function writeBarrelAndTraverse(dir: string) {
const [dirs, files] = partition(readdirSync(dir, { withFileTypes: true }), (dirent) => dirent.isDirectory());
const barrelFile = resolve(dir, 'index.ts');
const fileImports = files.map(f => f.name.slice(0, -3)).filter(name => name !== 'index');
const dirImports = dirs.map(f => f.name);
writeFileSync(
barrelFile,
[...fileImports, ...dirImports]
.sort()
.map(name => `export * from './${name}';`)
.join('\n') + '\n',
'utf-8'
);
console.log(`✓ ${basename(dir)}`);
dirs.forEach(child => writeBarrelAndTraverse(resolve(dir, child.name)));
}
writeBarrelAndTraverse(resolve('./src'))