Skip to content

Commit df7bde0

Browse files
committed
feature(readify) add support of archives
1 parent 42dea85 commit df7bde0

File tree

3 files changed

+60
-7
lines changed

3 files changed

+60
-7
lines changed

README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
[NPMURL]: https://npmjs.org/package/readify "npm"
99
[DependencyStatusURL]: https://david-dm.org/coderaiser/readify "Dependency Status"
1010
[LicenseURL]: https://tldrlegal.com/license/mit-license "MIT License"
11+
[CoverageURL]: https://coveralls.io/github/coderaiser/readify?branch=master
12+
[CoverageIMGURL]: https://coveralls.io/repos/coderaiser/readify/badge.svg?branch=master&service=github
1113

1214
Read directory content with file attributes: size, date, owner, mode and type.
1315

@@ -82,6 +84,3 @@ readify('/', {type: 'raw', sort: 'size', order: 'desc'}).then(console.log);
8284
## License
8385

8486
MIT
85-
86-
[CoverageURL]: https://coveralls.io/github/coderaiser/readify?branch=master
87-
[CoverageIMGURL]: https://coveralls.io/repos/coderaiser/readify/badge.svg?branch=master&service=github

lib/readdir.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
const {join} = require('path');
3+
const {join, extname} = require('path');
44
const {readdir} = require('fs/promises');
55

66
const tryToCatch = require('try-to-catch');
@@ -41,25 +41,35 @@ function empty(name) {
4141
}
4242

4343
function parseStat(stat) {
44+
const {name} = stat;
4445
const isDir = stat.isDirectory();
4546
const isLink = stat.isSymbolicLink();
4647

4748
return {
48-
name: stat.name,
49+
name,
4950
size: stat.size,
5051
date: stat.mtime,
5152
owner: stat.uid,
5253
mode: stat.mode,
5354
type: getType({
55+
name,
5456
isDir,
5557
isLink,
5658
}),
5759
};
5860
}
5961

60-
function getType({isDir, isLink}) {
62+
function getType({name, isDir, isLink}) {
63+
let type;
64+
65+
if (isDir)
66+
type = 'directory';
67+
else if (extname(name) === '.zip')
68+
type = 'archive';
69+
else
70+
type = 'file';
71+
6172
const link = isLink ? '-link' : '';
62-
const type = isDir ? 'directory' : 'file';
6373

6474
return `${type}${link}`;
6575
}

test/readdir.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,50 @@ test('readdir: result: directory link', async (t) => {
171171
t.end();
172172
});
173173

174+
test('readdir: result: zip link', async (t) => {
175+
const name = 'hello.zip';
176+
const mode = 16_893;
177+
const size = 1024;
178+
const mtime = new Date();
179+
const uid = 1000;
180+
181+
const readdir = () => [name];
182+
183+
const info = {
184+
isDirectory: stub().returns(false),
185+
isSymbolicLink: stub().returns(true),
186+
name,
187+
mode,
188+
size,
189+
mtime,
190+
uid,
191+
ino: 1337,
192+
dev: 1337,
193+
};
194+
195+
mockRequire('fs/promises', {
196+
readdir,
197+
});
198+
mockRequire('superstat', async () => info);
199+
200+
const expected = [{
201+
name,
202+
size,
203+
date: mtime,
204+
owner: uid,
205+
mode,
206+
type: 'archive-link',
207+
}];
208+
209+
const _readdir = reRequire('../lib/readdir');
210+
const [, result] = await tryToCatch(_readdir, '.');
211+
212+
stopAll();
213+
214+
t.deepEqual(result, expected, 'should get raw values');
215+
t.end();
216+
});
217+
174218
test('readdir: result: directory link: no error', async (t) => {
175219
const {readdir} = fs.promises;
176220

0 commit comments

Comments
 (0)