Skip to content

Commit c31c2bc

Browse files
authoredNov 2, 2023
Group unpublished files in folders (#716)
1 parent 1cb22e0 commit c31c2bc

File tree

3 files changed

+56
-1
lines changed

3 files changed

+56
-1
lines changed
 

Diff for: ‎source/ui.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ const checkNewFilesAndDependencies = async (pkg, rootDir) => {
9393

9494
const messages = [];
9595
if (newFiles.unpublished.length > 0) {
96-
messages.push(`The following new files will not be part of your published package:\n${util.joinList(newFiles.unpublished)}\n\nIf you intended to publish them, add them to the \`files\` field in package.json.`);
96+
messages.push(`The following new files will not be part of your published package:\n${util.groupFilesInFolders(newFiles.unpublished)}\n\nIf you intended to publish them, add them to the \`files\` field in package.json.`);
9797
}
9898

9999
if (newFiles.firstTime.length > 0) {

Diff for: ‎source/util.js

+22
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,28 @@ export const getTagVersionPrefix = pMemoize(async options => {
7676

7777
export const joinList = list => chalk.reset(list.map(item => `- ${item}`).join('\n'));
7878

79+
export const groupFilesInFolders = (files, groupingMinimumDepth = 1, groupingThresholdCount = 5) => {
80+
const groups = {};
81+
for (const file of files) {
82+
const groupKey = path.join(...file.split(path.sep).slice(0, groupingMinimumDepth));
83+
groups[groupKey] = [...groups[groupKey] ?? [], file];
84+
}
85+
86+
const lines = [];
87+
for (const [folder, filesInFolder] of Object.entries(groups)) {
88+
if (filesInFolder.length > groupingThresholdCount) {
89+
lines.push(`- ${folder}/* ${chalk.bold.white(`(${filesInFolder.length} files)`)}`);
90+
continue;
91+
}
92+
93+
for (const file of filesInFolder) {
94+
lines.push(`- ${file}`);
95+
}
96+
}
97+
98+
return chalk.reset(lines.join('\n'));
99+
};
100+
79101
export const getNewFiles = async rootDir => {
80102
const listNewFiles = await git.newFilesSinceLastRelease(rootDir);
81103
const listPkgFiles = await npm.getFilesToBePacked(rootDir);

Diff for: ‎test/util/auto-group-list.js

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import test from 'ava';
2+
import stripAnsi from 'strip-ansi';
3+
import {groupFilesInFolders} from '../../source/util.js';
4+
5+
const testJoinList = test.macro((t, {list, expected}) => {
6+
const output = groupFilesInFolders(list);
7+
t.is(stripAnsi(output), expected);
8+
});
9+
10+
test('one item', testJoinList, {
11+
list: [
12+
'scripts/a.sh',
13+
],
14+
expected: '- scripts/a.sh',
15+
});
16+
17+
test('mix of collapsed and expanded folders', testJoinList, {
18+
list: [
19+
'scripts/a.sh',
20+
'scripts/b.sh',
21+
'scripts/c.sh',
22+
'test/_utils-1.js',
23+
'test/_utils-2.js',
24+
'test/_utils-3.js',
25+
'test/_utils-4.js',
26+
'test/_utils-5.js',
27+
'test/_utils-6.js',
28+
],
29+
expected: `- scripts/a.sh
30+
- scripts/b.sh
31+
- scripts/c.sh
32+
- test/* (6 files)`,
33+
});

0 commit comments

Comments
 (0)
Please sign in to comment.