Я хочу воссоздать программу ls -AlF
, но так, как мне нравится, и я хочу использовать для этого NoFlo.
Это график (graphs/ListDirectory.fbp
), который я сделал:
ReadDir(filesystem/ReadDir)
Stat(filesystem/Stat)
SplitByStatType(SplitByStatType)
Display(core/Output)
ReadDir OUT -> IN Stat
ReadDir ERROR -> IN Display
Stat OUT -> IN SplitByStatType
Stat ERROR -> IN Display
SplitByStatType DIRECTORY -> IN Display
SplitByStatType FILE -> IN Display
'.' -> SOURCE ReadDir
Это компонент components/SplitByStatType.js
:
const noflo = require('noflo')
exports.getComponent = () => {
const component = new noflo.Component()
component.description = 'Splits directories and files.'
component.icon = 'directory'
component.inPorts.add('in', {
datatype: 'object',
})
component.outPorts.add('file', {
datatype: 'object',
})
component.outPorts.add('directory', {
datatype: 'object',
})
component.outPorts.add('blockdevice', {
datatype: 'object',
})
component.outPorts.add('characterdevice', {
datatype: 'object',
})
component.outPorts.add('fifo', {
datatype: 'object',
})
component.outPorts.add('socket', {
datatype: 'object',
})
component.outPorts.add('error', {
datatype: 'object',
})
component.process((input, output) => {
if (!input.hasData('in')) return
const data = input.getData('in')
const { isFile, isDirectory, isBlockDevice, isCharacterDevice, isFifo, isSocket } = data
if (isFile) {
output.send({
file: data,
})
}
if (isDirectory) {
output.send({
directory: data,
})
}
if (isBlockDevice) {
output.send({
blockdevice: data,
})
}
if (isCharacterDevice) {
output.send({
characterdevice: data,
})
}
if (isFifo) {
output.send({
fifo: data,
})
}
if (isSocket) {
output.send({
socket: data,
})
}
// TODO: Else, error?
output.done()
})
return component
}
- Как бы вы назвали этот компонент и/или кто-то уже сделал его?
- Могу ли я сделать это без реализации собственного компонента с использованием других уже существующих компонентов?
- Как мне связать вместе имя файла и статистику, чтобы я мог обрабатывать их в другом компоненте и печатать по одной строке для каждого?
В итоге я хочу получить одну строку на узел с каталогами сначала (отсортированными и с /) и последними файлами (также отсортированными и файлами, начинающимися с '.').