@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.
@@ -1,9 +1,10 @@
1
- import { type ByteStream, type DirectoryCandidate, type FileCandidate, type ImportCandidateStream, type ImporterOptions, type ImportResult } from 'ipfs-unixfs-importer';
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<ImporterOptions>): AsyncGenerator<ImportResult, void, unknown>;
5
- export declare function addBytes(bytes: Uint8Array, blockstore: PutStore, options?: Partial<ImporterOptions>): Promise<CID>;
6
- export declare function addByteStream(bytes: ByteStream, blockstore: PutStore, options?: Partial<ImporterOptions>): Promise<CID>;
7
- export declare function addFile(file: FileCandidate, blockstore: PutStore, options?: Partial<ImporterOptions>): Promise<CID>;
8
- export declare function addDirectory(dir: Partial<DirectoryCandidate>, blockstore: PutStore, options?: Partial<ImporterOptions>): Promise<CID>;
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":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAiC,KAAK,qBAAqB,EAA6B,KAAK,eAAe,EAAc,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAG9O,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAgB3C,wBAAwB,MAAM,CAAE,MAAM,EAAE,qBAAqB,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAE,OAAO,CAAC,eAAe,CAAM,GAAG,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,CAKxK;AAED,wBAAsB,QAAQ,CAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAE,OAAO,CAAC,eAAe,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAO7H;AAED,wBAAsB,aAAa,CAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAE,OAAO,CAAC,eAAe,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAOlI;AAED,wBAAsB,OAAO,CAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAE,OAAO,CAAC,eAAe,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAO9H;AAED,wBAAsB,YAAY,CAAE,GAAG,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAE,OAAO,CAAC,eAAe,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAUhJ"}
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"}
@@ -1,6 +1,9 @@
1
- import { importBytes, importByteStream, importDirectory, importer, importFile } from 'ipfs-unixfs-importer';
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: 1048576
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
- const { cid } = await importFile(file, blockstore, {
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
- return cid;
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
- const { cid } = await importDirectory({
46
- ...dir,
47
- path: dir.path ?? '-'
48
- }, blockstore, {
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
- return cid;
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,EAAgE,WAAW,EAAE,gBAAgB,EAA8B,eAAe,EAAE,QAAQ,EAAwB,UAAU,EAAqB,MAAM,sBAAsB,CAAA;AAC9O,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAItD;;GAEG;AACH,MAAM,uBAAuB,GAAoB;IAC/C,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,QAAQ,CAAC;QACf,kBAAkB,EAAE,IAAI;KACzB,CAAC;IACF,OAAO,EAAE,SAAS,CAAC;QACjB,SAAS,EAAE,OAAO;KACnB,CAAC;CACH,CAAA;AAED,MAAM,CAAC,KAAK,SAAU,CAAC,CAAC,MAAM,CAAE,MAA6B,EAAE,UAAoB,EAAE,UAAoC,EAAE;IACzH,KAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE;QACnC,GAAG,uBAAuB;QAC1B,GAAG,OAAO;KACX,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAE,KAAiB,EAAE,UAAoB,EAAE,UAAoC,EAAE;IAC7G,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE;QACnD,GAAG,uBAAuB;QAC1B,GAAG,OAAO;KACX,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAE,KAAiB,EAAE,UAAoB,EAAE,UAAoC,EAAE;IAClH,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE;QACxD,GAAG,uBAAuB;QAC1B,GAAG,OAAO;KACX,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAE,IAAmB,EAAE,UAAoB,EAAE,UAAoC,EAAE;IAC9G,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE;QACjD,GAAG,uBAAuB;QAC1B,GAAG,OAAO;KACX,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAE,GAAgC,EAAE,UAAoB,EAAE,UAAoC,EAAE;IAChI,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,eAAe,CAAC;QACpC,GAAG,GAAG;QACN,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG;KACtB,EAAE,UAAU,EAAE;QACb,GAAG,uBAAuB;QAC1B,GAAG,OAAO;KACX,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
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, UnixFSStats } from '../index.js';
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?: Partial<StatOptions>): Promise<UnixFSStats>;
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":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAGtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAS3C,wBAAsB,IAAI,CAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,GAAG,QAAQ,EAAE,OAAO,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAkE/H"}
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
- fileSize = BigInt(result.node.byteLength);
31
- dagSize = BigInt(result.node.byteLength);
32
- localFileSize = BigInt(result.node.byteLength);
33
- localDagSize = BigInt(result.node.byteLength);
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
- const results = await inspectDag(resolved.cid, blockstore, opts);
48
- fileSize = result.unixfs.fileSize();
49
- dagSize = BigInt((result.node.Data?.byteLength ?? 0) + result.node.Links.reduce((acc, curr) => acc + (curr.Tsize ?? 0), 0));
50
- localFileSize = BigInt(results.localFileSize);
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
- cid: resolved.cid,
59
- mode,
60
- mtime,
61
- fileSize,
62
- dagSize,
63
- localFileSize,
64
- localDagSize,
65
- blocks,
66
- type,
67
- unixfs
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
- localFileSize: 0,
73
- localDagSize: 0,
74
- blocks: 0
88
+ dirSize: 0n,
89
+ localSize: 0n,
90
+ dagSize: 0n,
91
+ deduplicatedDagSize: 0n,
92
+ blocks: 0n,
93
+ uniqueBlocks: 0n
75
94
  };
76
- if (await blockstore.has(cid, options)) {
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.localDagSize += block.byteLength;
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.localFileSize += block.byteLength;
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.localFileSize += linkResult.localFileSize;
90
- results.localDagSize += linkResult.localDagSize;
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
- // leaf node
96
- if (pbNode.Data == null) {
134
+ if (unixfs == null) {
97
135
  throw new InvalidPBNodeError(`PBNode ${cid.toString()} had no data`);
98
136
  }
99
- const unixfs = UnixFS.unmarshal(pbNode.Data);
100
- if (unixfs.data == null) {
101
- throw new InvalidPBNodeError(`UnixFS node ${cid.toString()} had no data`);
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":"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"}
1
+ {"version":3,"file":"stat.js","sourceRoot":"","sources":["../../../src/commands/stat.ts"],"names":[],"mappings":"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"}