inquirer-file-tree-selection
inquirer-file-tree-selection copied to clipboard
Make directories "valid" by default but not selectable
Say you want to display only files of a specific extension, like .js this could be your code:
// execute with "ts-node ./demo.ts"
import inquirer from 'inquirer';
import inquirerFileTreeSelection from 'inquirer-file-tree-selection-prompt';
import { extname } from 'path';
import { lstat, PathLike } from 'fs';
inquirer.registerPrompt('file-tree-selection', inquirerFileTreeSelection);
inquirer.prompt({
type: 'file-tree-selection',
name: 'file',
message: 'Please select a JS file',
onlyShowValid: true,
multiple: false,
pageSize: 10,
root: './db',
validate: async (item) => {
return extname(item) === '.js' || await isDirectory(item);
}
}).then(
({file}) =>
console.log('selected', file)
);
async function isDirectory(path: PathLike) {
return new Promise((resolve) => {
lstat(path,
(err, stat) => {
if (!err) {
resolve(stat.isDirectory());
} else {
resolve(false);
}
});
});
}
However, this will show folders and these folders will now be valid selections!
It would be better, if you could not select folders using enter
but still benefit from onlyShowValid
.
Hey @jookshub, do you find any solution?
I would love this too!