@helia/unixfs 4.0.3 → 5.0.0-bb2ab74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js +2 -1
- package/dist/index.min.js.map +7 -0
- package/dist/src/commands/add.d.ts +7 -6
- package/dist/src/commands/add.d.ts.map +1 -1
- package/dist/src/commands/add.js +35 -13
- package/dist/src/commands/add.js.map +1 -1
- package/dist/src/commands/stat.d.ts +3 -2
- package/dist/src/commands/stat.d.ts.map +1 -1
- package/dist/src/commands/stat.js +125 -63
- package/dist/src/commands/stat.js.map +1 -1
- package/dist/src/index.d.ts +151 -29
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/unixfs.d.ts +4 -3
- package/dist/src/unixfs.d.ts.map +1 -1
- package/dist/src/unixfs.js.map +1 -1
- package/dist/src/utils/glob-source.d.ts +19 -0
- package/dist/src/utils/glob-source.d.ts.map +1 -1
- package/dist/src/utils/glob-source.js +19 -0
- package/dist/src/utils/glob-source.js.map +1 -1
- package/dist/src/utils/url-source.d.ts +48 -2
- package/dist/src/utils/url-source.d.ts.map +1 -1
- package/dist/src/utils/url-source.js +50 -0
- package/dist/src/utils/url-source.js.map +1 -1
- package/package.json +4 -3
- package/src/commands/add.ts +47 -17
- package/src/commands/stat.ts +149 -73
- package/src/index.ts +162 -29
- package/src/unixfs.ts +5 -3
- package/src/utils/glob-source.ts +19 -0
- package/src/utils/url-source.ts +55 -2
- package/dist/typedoc-urls.json +0 -56
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { FileCandidate, AddOptions, AddFileOptions } from '../index.js';
|
|
2
2
|
import type { PutStore } from '../unixfs.js';
|
|
3
|
+
import type { ByteStream, DirectoryCandidate, ImportCandidateStream, ImportResult } from 'ipfs-unixfs-importer';
|
|
3
4
|
import type { CID } from 'multiformats/cid';
|
|
4
|
-
export declare function addAll(source: ImportCandidateStream, blockstore: PutStore, options?: Partial<
|
|
5
|
-
export declare function addBytes(bytes: Uint8Array, blockstore: PutStore, options?: Partial<
|
|
6
|
-
export declare function addByteStream(bytes: ByteStream, blockstore: PutStore, options?: Partial<
|
|
7
|
-
export declare function addFile(file: FileCandidate, blockstore: PutStore, options?: Partial<
|
|
8
|
-
export declare function addDirectory(dir: Partial<DirectoryCandidate>, blockstore: PutStore, options?: Partial<
|
|
5
|
+
export declare function addAll(source: ImportCandidateStream, blockstore: PutStore, options?: Partial<AddOptions>): AsyncGenerator<ImportResult, void, unknown>;
|
|
6
|
+
export declare function addBytes(bytes: Uint8Array, blockstore: PutStore, options?: Partial<AddFileOptions>): Promise<CID>;
|
|
7
|
+
export declare function addByteStream(bytes: ByteStream, blockstore: PutStore, options?: Partial<AddFileOptions>): Promise<CID>;
|
|
8
|
+
export declare function addFile(file: FileCandidate, blockstore: PutStore, options?: Partial<AddFileOptions>): Promise<CID>;
|
|
9
|
+
export declare function addDirectory(dir: Partial<DirectoryCandidate>, blockstore: PutStore, options?: Partial<AddFileOptions>): Promise<CID>;
|
|
9
10
|
//# sourceMappingURL=add.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/commands/add.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/commands/add.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAC/G,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAgB3C,wBAAwB,MAAM,CAAE,MAAM,EAAE,qBAAqB,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,CAKnK;AAED,wBAAsB,QAAQ,CAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAO5H;AAED,wBAAsB,aAAa,CAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAOjI;AAED,wBAAsB,OAAO,CAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAoB7H;AAED,wBAAsB,YAAY,CAAE,GAAG,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAsB/I"}
|
package/dist/src/commands/add.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { importBytes, importByteStream,
|
|
1
|
+
import { importBytes, importByteStream, importer } from 'ipfs-unixfs-importer';
|
|
2
2
|
import { fixedSize } from 'ipfs-unixfs-importer/chunker';
|
|
3
3
|
import { balanced } from 'ipfs-unixfs-importer/layout';
|
|
4
|
+
import first from 'it-first';
|
|
5
|
+
import last from 'it-last';
|
|
6
|
+
import { InvalidParametersError } from '../errors.js';
|
|
4
7
|
/**
|
|
5
8
|
* Default importer settings match Filecoin
|
|
6
9
|
*/
|
|
@@ -11,7 +14,7 @@ const defaultImporterSettings = {
|
|
|
11
14
|
maxChildrenPerNode: 1024
|
|
12
15
|
}),
|
|
13
16
|
chunker: fixedSize({
|
|
14
|
-
chunkSize:
|
|
17
|
+
chunkSize: 1_048_576
|
|
15
18
|
})
|
|
16
19
|
};
|
|
17
20
|
export async function* addAll(source, blockstore, options = {}) {
|
|
@@ -35,20 +38,39 @@ export async function addByteStream(bytes, blockstore, options = {}) {
|
|
|
35
38
|
return cid;
|
|
36
39
|
}
|
|
37
40
|
export async function addFile(file, blockstore, options = {}) {
|
|
38
|
-
|
|
41
|
+
if (file.path == null) {
|
|
42
|
+
throw new InvalidParametersError('path is required');
|
|
43
|
+
}
|
|
44
|
+
if (file.content == null) {
|
|
45
|
+
throw new InvalidParametersError('content is required');
|
|
46
|
+
}
|
|
47
|
+
const result = await last(addAll([file], blockstore, {
|
|
39
48
|
...defaultImporterSettings,
|
|
40
|
-
...options
|
|
41
|
-
|
|
42
|
-
|
|
49
|
+
...options,
|
|
50
|
+
wrapWithDirectory: true
|
|
51
|
+
}));
|
|
52
|
+
if (result == null) {
|
|
53
|
+
throw new InvalidParametersError('Nothing imported');
|
|
54
|
+
}
|
|
55
|
+
return result.cid;
|
|
43
56
|
}
|
|
44
57
|
export async function addDirectory(dir, blockstore, options = {}) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
58
|
+
// @ts-expect-error field is not in the types
|
|
59
|
+
if (dir.content != null) {
|
|
60
|
+
throw new InvalidParametersError('Directories cannot have content, use addFile instead');
|
|
61
|
+
}
|
|
62
|
+
const ord = dir.path == null ? first : last;
|
|
63
|
+
const result = await ord(addAll([{
|
|
64
|
+
...dir,
|
|
65
|
+
path: dir.path ?? '-'
|
|
66
|
+
}], blockstore, {
|
|
49
67
|
...defaultImporterSettings,
|
|
50
|
-
...options
|
|
51
|
-
|
|
52
|
-
|
|
68
|
+
...options,
|
|
69
|
+
wrapWithDirectory: dir.path != null
|
|
70
|
+
}));
|
|
71
|
+
if (result == null) {
|
|
72
|
+
throw new InvalidParametersError('Nothing imported');
|
|
73
|
+
}
|
|
74
|
+
return result.cid;
|
|
53
75
|
}
|
|
54
76
|
//# sourceMappingURL=add.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { StatOptions,
|
|
1
|
+
import type { ExtendedStatOptions, ExtendedDirectoryStats, ExtendedFileStats, StatOptions, DirectoryStats, FileStats, RawStats, ExtendedRawStats } from '../index.js';
|
|
2
2
|
import type { GetStore, HasStore } from '../unixfs.js';
|
|
3
3
|
import type { CID } from 'multiformats/cid';
|
|
4
|
-
export declare function stat(cid: CID, blockstore: GetStore & HasStore, options?:
|
|
4
|
+
export declare function stat(cid: CID, blockstore: GetStore & HasStore, options?: StatOptions): Promise<FileStats | DirectoryStats | RawStats>;
|
|
5
|
+
export declare function stat(cid: CID, blockstore: GetStore & HasStore, options?: ExtendedStatOptions): Promise<ExtendedFileStats | ExtendedDirectoryStats | ExtendedRawStats>;
|
|
5
6
|
//# sourceMappingURL=stat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stat.d.ts","sourceRoot":"","sources":["../../../src/commands/stat.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stat.d.ts","sourceRoot":"","sources":["../../../src/commands/stat.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACrK,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAa3C,wBAAsB,IAAI,CAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,cAAc,GAAG,QAAQ,CAAC,CAAA;AAC7I,wBAAsB,IAAI,CAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,GAAG,sBAAsB,GAAG,gBAAgB,CAAC,CAAA"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import * as dagPb from '@ipld/dag-pb';
|
|
2
2
|
import { logger } from '@libp2p/logger';
|
|
3
|
+
import { ScalableCuckooFilter } from '@libp2p/utils/filters';
|
|
3
4
|
import { UnixFS } from 'ipfs-unixfs';
|
|
4
5
|
import { exporter } from 'ipfs-unixfs-exporter';
|
|
5
6
|
import mergeOpts from 'merge-options';
|
|
6
7
|
import * as raw from 'multiformats/codecs/raw';
|
|
7
8
|
import { InvalidPBNodeError, NotUnixFSError, UnknownError } from '../errors.js';
|
|
8
9
|
import { resolve } from './utils/resolve.js';
|
|
10
|
+
// https://github.com/ipfs/specs/blob/main/UNIXFS.md#metadata
|
|
11
|
+
const DEFAULT_DIR_MODE = 0x755;
|
|
12
|
+
const DEFAULT_FILE_MODE = 0x644;
|
|
9
13
|
const mergeOptions = mergeOpts.bind({ ignoreUndefined: true });
|
|
10
14
|
const log = logger('helia:unixfs:stat');
|
|
11
15
|
const defaultOptions = {};
|
|
@@ -14,99 +18,157 @@ export async function stat(cid, blockstore, options = {}) {
|
|
|
14
18
|
const resolved = await resolve(cid, options.path, blockstore, opts);
|
|
15
19
|
log('stat %c', resolved.cid);
|
|
16
20
|
const result = await exporter(resolved.cid, blockstore, opts);
|
|
17
|
-
if (result.type !== 'file' && result.type !== 'directory' && result.type !== 'raw') {
|
|
18
|
-
throw new NotUnixFSError();
|
|
19
|
-
}
|
|
20
|
-
let fileSize = 0n;
|
|
21
|
-
let dagSize = 0n;
|
|
22
|
-
let localFileSize = 0n;
|
|
23
|
-
let localDagSize = 0n;
|
|
24
|
-
let blocks = 0;
|
|
25
|
-
let mode;
|
|
26
|
-
let mtime;
|
|
27
|
-
const type = result.type;
|
|
28
|
-
let unixfs;
|
|
29
21
|
if (result.type === 'raw') {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
blocks = 1;
|
|
35
|
-
}
|
|
36
|
-
if (result.type === 'directory') {
|
|
37
|
-
fileSize = 0n;
|
|
38
|
-
dagSize = BigInt(result.unixfs.marshal().byteLength);
|
|
39
|
-
localFileSize = 0n;
|
|
40
|
-
localDagSize = dagSize;
|
|
41
|
-
blocks = 1;
|
|
42
|
-
mode = result.unixfs.mode;
|
|
43
|
-
mtime = result.unixfs.mtime;
|
|
44
|
-
unixfs = result.unixfs;
|
|
22
|
+
if (options.extended === true) {
|
|
23
|
+
return createExtendedRawStats(result);
|
|
24
|
+
}
|
|
25
|
+
return createRawStats(result);
|
|
45
26
|
}
|
|
46
|
-
if (result.type === 'file') {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
localDagSize = BigInt(results.localDagSize);
|
|
52
|
-
blocks = results.blocks;
|
|
53
|
-
mode = result.unixfs.mode;
|
|
54
|
-
mtime = result.unixfs.mtime;
|
|
55
|
-
unixfs = result.unixfs;
|
|
27
|
+
else if (result.type === 'file' || result.type === 'directory') {
|
|
28
|
+
if (options.extended === true) {
|
|
29
|
+
return createExtendedStats(result, blockstore, options.filter ?? new ScalableCuckooFilter({ filterSize: 1024 }), options);
|
|
30
|
+
}
|
|
31
|
+
return createStats(result);
|
|
56
32
|
}
|
|
33
|
+
throw new NotUnixFSError();
|
|
34
|
+
}
|
|
35
|
+
function createStats(entry) {
|
|
36
|
+
return {
|
|
37
|
+
type: entry.type,
|
|
38
|
+
cid: entry.cid,
|
|
39
|
+
unixfs: entry.unixfs,
|
|
40
|
+
mode: entry.unixfs.mode ?? (entry.unixfs.isDirectory() ? DEFAULT_DIR_MODE : DEFAULT_FILE_MODE),
|
|
41
|
+
mtime: entry.unixfs.mtime,
|
|
42
|
+
size: entry.unixfs.fileSize()
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
async function createExtendedStats(entry, blockstore, filter, options) {
|
|
46
|
+
const stats = await inspectDag(entry.cid, blockstore, false, filter, options);
|
|
47
|
+
return {
|
|
48
|
+
type: entry.type,
|
|
49
|
+
cid: entry.cid,
|
|
50
|
+
unixfs: entry.unixfs,
|
|
51
|
+
size: entry.unixfs.isDirectory() ? stats.dirSize : entry.unixfs.fileSize(),
|
|
52
|
+
mode: entry.unixfs.mode ?? (entry.unixfs.isDirectory() ? DEFAULT_DIR_MODE : DEFAULT_FILE_MODE),
|
|
53
|
+
mtime: entry.unixfs.mtime,
|
|
54
|
+
localSize: stats.localSize,
|
|
55
|
+
dagSize: stats.dagSize,
|
|
56
|
+
deduplicatedDagSize: stats.deduplicatedDagSize,
|
|
57
|
+
blocks: stats.blocks,
|
|
58
|
+
uniqueBlocks: stats.uniqueBlocks
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function createRawStats(entry) {
|
|
62
|
+
return {
|
|
63
|
+
type: entry.type,
|
|
64
|
+
cid: entry.cid,
|
|
65
|
+
unixfs: undefined,
|
|
66
|
+
mode: DEFAULT_FILE_MODE,
|
|
67
|
+
mtime: undefined,
|
|
68
|
+
size: BigInt(entry.node.byteLength)
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function createExtendedRawStats(entry) {
|
|
57
72
|
return {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
73
|
+
type: entry.type,
|
|
74
|
+
cid: entry.cid,
|
|
75
|
+
unixfs: undefined,
|
|
76
|
+
mode: DEFAULT_FILE_MODE,
|
|
77
|
+
mtime: undefined,
|
|
78
|
+
size: BigInt(entry.node.byteLength),
|
|
79
|
+
localSize: BigInt(entry.node.byteLength),
|
|
80
|
+
dagSize: BigInt(entry.node.byteLength),
|
|
81
|
+
deduplicatedDagSize: BigInt(entry.node.byteLength),
|
|
82
|
+
blocks: 1n,
|
|
83
|
+
uniqueBlocks: 1n
|
|
68
84
|
};
|
|
69
85
|
}
|
|
70
|
-
async function inspectDag(cid, blockstore, options) {
|
|
86
|
+
async function inspectDag(cid, blockstore, isFile, filter, options) {
|
|
71
87
|
const results = {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
88
|
+
dirSize: 0n,
|
|
89
|
+
localSize: 0n,
|
|
90
|
+
dagSize: 0n,
|
|
91
|
+
deduplicatedDagSize: 0n,
|
|
92
|
+
blocks: 0n,
|
|
93
|
+
uniqueBlocks: 0n
|
|
75
94
|
};
|
|
76
|
-
|
|
95
|
+
try {
|
|
96
|
+
const alreadyTraversed = filter.has(cid.bytes);
|
|
97
|
+
filter.add(cid.bytes);
|
|
77
98
|
const block = await blockstore.get(cid, options);
|
|
78
99
|
results.blocks++;
|
|
79
|
-
results.
|
|
100
|
+
results.dagSize += BigInt(block.byteLength);
|
|
101
|
+
if (!alreadyTraversed) {
|
|
102
|
+
results.uniqueBlocks++;
|
|
103
|
+
results.deduplicatedDagSize += BigInt(block.byteLength);
|
|
104
|
+
}
|
|
80
105
|
if (cid.code === raw.code) {
|
|
81
|
-
results.
|
|
106
|
+
results.localSize += BigInt(block.byteLength);
|
|
107
|
+
if (isFile) {
|
|
108
|
+
results.dirSize += BigInt(block.byteLength);
|
|
109
|
+
}
|
|
82
110
|
}
|
|
83
111
|
else if (cid.code === dagPb.code) {
|
|
84
112
|
const pbNode = dagPb.decode(block);
|
|
113
|
+
let unixfs;
|
|
114
|
+
if (pbNode.Data != null) {
|
|
115
|
+
unixfs = UnixFS.unmarshal(pbNode.Data);
|
|
116
|
+
}
|
|
85
117
|
if (pbNode.Links.length > 0) {
|
|
86
118
|
// intermediate node
|
|
87
119
|
for (const link of pbNode.Links) {
|
|
88
|
-
const linkResult = await inspectDag(link.Hash, blockstore, options);
|
|
89
|
-
results.
|
|
90
|
-
results.
|
|
120
|
+
const linkResult = await inspectDag(link.Hash, blockstore, linkIsFile(link, unixfs), filter, options);
|
|
121
|
+
results.localSize += linkResult.localSize;
|
|
122
|
+
results.dagSize += linkResult.dagSize;
|
|
123
|
+
results.deduplicatedDagSize += linkResult.deduplicatedDagSize;
|
|
91
124
|
results.blocks += linkResult.blocks;
|
|
125
|
+
results.uniqueBlocks += linkResult.uniqueBlocks;
|
|
126
|
+
results.dirSize += linkResult.dirSize;
|
|
127
|
+
}
|
|
128
|
+
// multi-block file node
|
|
129
|
+
if (isFile && unixfs != null) {
|
|
130
|
+
results.dirSize += unixfs.fileSize();
|
|
92
131
|
}
|
|
93
132
|
}
|
|
94
133
|
else {
|
|
95
|
-
|
|
96
|
-
if (pbNode.Data == null) {
|
|
134
|
+
if (unixfs == null) {
|
|
97
135
|
throw new InvalidPBNodeError(`PBNode ${cid.toString()} had no data`);
|
|
98
136
|
}
|
|
99
|
-
|
|
100
|
-
if (unixfs.data
|
|
101
|
-
|
|
137
|
+
// multi-block file leaf node
|
|
138
|
+
if (unixfs.data != null) {
|
|
139
|
+
results.localSize += BigInt(unixfs.data.byteLength ?? 0);
|
|
140
|
+
}
|
|
141
|
+
// single-block file node
|
|
142
|
+
if (isFile) {
|
|
143
|
+
results.dirSize += unixfs.fileSize();
|
|
102
144
|
}
|
|
103
|
-
results.localFileSize += unixfs.data.byteLength ?? 0;
|
|
104
145
|
}
|
|
105
146
|
}
|
|
106
147
|
else {
|
|
107
148
|
throw new UnknownError(`${cid.toString()} was neither DAG_PB nor RAW`);
|
|
108
149
|
}
|
|
109
150
|
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
if (err.name !== 'NotFoundError' || options.offline !== true) {
|
|
153
|
+
throw err;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
110
156
|
return results;
|
|
111
157
|
}
|
|
158
|
+
function linkIsFile(link, parent) {
|
|
159
|
+
if (parent == null) {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
const name = link.Name;
|
|
163
|
+
if (name == null) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
if (parent.type === 'directory') {
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
else if (parent.type === 'hamt-sharded-directory' && name.length > 2) {
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
112
174
|
//# sourceMappingURL=stat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stat.js","sourceRoot":"","sources":["../../../src/commands/stat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"stat.js","sourceRoot":"","sources":["../../../src/commands/stat.ts"],"names":[],"mappings":"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"}
|