@helia/unixfs 0.0.0
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/LICENSE +4 -0
- package/README.md +53 -0
- package/dist/index.min.js +3 -0
- package/dist/src/commands/add.d.ts +6 -0
- package/dist/src/commands/add.d.ts.map +1 -0
- package/dist/src/commands/add.js +38 -0
- package/dist/src/commands/add.js.map +1 -0
- package/dist/src/commands/cat.d.ts +5 -0
- package/dist/src/commands/cat.d.ts.map +1 -0
- package/dist/src/commands/cat.js +22 -0
- package/dist/src/commands/cat.js.map +1 -0
- package/dist/src/commands/chmod.d.ts +5 -0
- package/dist/src/commands/chmod.d.ts.map +1 -0
- package/dist/src/commands/chmod.js +108 -0
- package/dist/src/commands/chmod.js.map +1 -0
- package/dist/src/commands/cp.d.ts +5 -0
- package/dist/src/commands/cp.d.ts.map +1 -0
- package/dist/src/commands/cp.js +28 -0
- package/dist/src/commands/cp.js.map +1 -0
- package/dist/src/commands/ls.d.ts +5 -0
- package/dist/src/commands/ls.d.ts.map +1 -0
- package/dist/src/commands/ls.js +26 -0
- package/dist/src/commands/ls.js.map +1 -0
- package/dist/src/commands/mkdir.d.ts +5 -0
- package/dist/src/commands/mkdir.d.ts.map +1 -0
- package/dist/src/commands/mkdir.js +53 -0
- package/dist/src/commands/mkdir.js.map +1 -0
- package/dist/src/commands/rm.d.ts +5 -0
- package/dist/src/commands/rm.d.ts.map +1 -0
- package/dist/src/commands/rm.js +19 -0
- package/dist/src/commands/rm.js.map +1 -0
- package/dist/src/commands/stat.d.ts +5 -0
- package/dist/src/commands/stat.d.ts.map +1 -0
- package/dist/src/commands/stat.js +108 -0
- package/dist/src/commands/stat.js.map +1 -0
- package/dist/src/commands/touch.d.ts +5 -0
- package/dist/src/commands/touch.d.ts.map +1 -0
- package/dist/src/commands/touch.js +111 -0
- package/dist/src/commands/touch.js.map +1 -0
- package/dist/src/commands/utils/add-link.d.ts +21 -0
- package/dist/src/commands/utils/add-link.d.ts.map +1 -0
- package/dist/src/commands/utils/add-link.js +224 -0
- package/dist/src/commands/utils/add-link.js.map +1 -0
- package/dist/src/commands/utils/cid-to-directory.d.ts +10 -0
- package/dist/src/commands/utils/cid-to-directory.d.ts.map +1 -0
- package/dist/src/commands/utils/cid-to-directory.js +13 -0
- package/dist/src/commands/utils/cid-to-directory.js.map +1 -0
- package/dist/src/commands/utils/cid-to-pblink.d.ts +6 -0
- package/dist/src/commands/utils/cid-to-pblink.d.ts.map +1 -0
- package/dist/src/commands/utils/cid-to-pblink.js +19 -0
- package/dist/src/commands/utils/cid-to-pblink.js.map +1 -0
- package/dist/src/commands/utils/dir-sharded.d.ts +67 -0
- package/dist/src/commands/utils/dir-sharded.d.ts.map +1 -0
- package/dist/src/commands/utils/dir-sharded.js +136 -0
- package/dist/src/commands/utils/dir-sharded.js.map +1 -0
- package/dist/src/commands/utils/errors.d.ts +17 -0
- package/dist/src/commands/utils/errors.d.ts.map +1 -0
- package/dist/src/commands/utils/errors.js +27 -0
- package/dist/src/commands/utils/errors.js.map +1 -0
- package/dist/src/commands/utils/hamt-constants.d.ts +4 -0
- package/dist/src/commands/utils/hamt-constants.d.ts.map +1 -0
- package/dist/src/commands/utils/hamt-constants.js +13 -0
- package/dist/src/commands/utils/hamt-constants.js.map +1 -0
- package/dist/src/commands/utils/hamt-utils.d.ts +37 -0
- package/dist/src/commands/utils/hamt-utils.d.ts.map +1 -0
- package/dist/src/commands/utils/hamt-utils.js +202 -0
- package/dist/src/commands/utils/hamt-utils.js.map +1 -0
- package/dist/src/commands/utils/persist.d.ts +10 -0
- package/dist/src/commands/utils/persist.d.ts.map +1 -0
- package/dist/src/commands/utils/persist.js +12 -0
- package/dist/src/commands/utils/persist.js.map +1 -0
- package/dist/src/commands/utils/remove-link.d.ts +11 -0
- package/dist/src/commands/utils/remove-link.d.ts.map +1 -0
- package/dist/src/commands/utils/remove-link.js +92 -0
- package/dist/src/commands/utils/remove-link.js.map +1 -0
- package/dist/src/commands/utils/resolve.d.ts +28 -0
- package/dist/src/commands/utils/resolve.d.ts.map +1 -0
- package/dist/src/commands/utils/resolve.js +85 -0
- package/dist/src/commands/utils/resolve.js.map +1 -0
- package/dist/src/index.d.ts +97 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +48 -0
- package/dist/src/index.js.map +1 -0
- package/package.json +166 -0
- package/src/commands/add.ts +46 -0
- package/src/commands/cat.ts +31 -0
- package/src/commands/chmod.ts +133 -0
- package/src/commands/cp.ts +41 -0
- package/src/commands/ls.ts +36 -0
- package/src/commands/mkdir.ts +71 -0
- package/src/commands/rm.ts +31 -0
- package/src/commands/stat.ts +137 -0
- package/src/commands/touch.ts +136 -0
- package/src/commands/utils/add-link.ts +319 -0
- package/src/commands/utils/cid-to-directory.ts +23 -0
- package/src/commands/utils/cid-to-pblink.ts +26 -0
- package/src/commands/utils/dir-sharded.ts +219 -0
- package/src/commands/utils/errors.ts +31 -0
- package/src/commands/utils/hamt-constants.ts +14 -0
- package/src/commands/utils/hamt-utils.ts +285 -0
- package/src/commands/utils/persist.ts +22 -0
- package/src/commands/utils/remove-link.ts +151 -0
- package/src/commands/utils/resolve.ts +130 -0
- package/src/index.ts +174 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Bucket } from 'hamt-sharding';
|
|
2
|
+
import { CID } from 'multiformats/cid';
|
|
3
|
+
import type { PBLink, PBNode } from '@ipld/dag-pb/interface';
|
|
4
|
+
import type { Blockstore } from 'interface-blockstore';
|
|
5
|
+
import type { Mtime } from 'ipfs-unixfs';
|
|
6
|
+
import type { Directory } from './cid-to-directory.js';
|
|
7
|
+
import type { AbortOptions } from '@libp2p/interfaces';
|
|
8
|
+
import type { ImportResult } from 'ipfs-unixfs-importer';
|
|
9
|
+
export interface UpdateHamtResult {
|
|
10
|
+
node: PBNode;
|
|
11
|
+
cid: CID;
|
|
12
|
+
size: number;
|
|
13
|
+
}
|
|
14
|
+
export declare const updateHamtDirectory: (parent: Directory, blockstore: Blockstore, links: PBLink[], bucket: Bucket<any>, options: AbortOptions) => Promise<UpdateHamtResult>;
|
|
15
|
+
export declare const recreateHamtLevel: (blockstore: Blockstore, links: PBLink[], rootBucket: Bucket<any>, parentBucket: Bucket<any>, positionAtParent: number, options: AbortOptions) => Promise<Bucket<any>>;
|
|
16
|
+
export declare const recreateInitialHamtLevel: (links: PBLink[]) => Promise<Bucket<any>>;
|
|
17
|
+
export declare const addLinksToHamtBucket: (blockstore: Blockstore, links: PBLink[], bucket: Bucket<any>, rootBucket: Bucket<any>, options: AbortOptions) => Promise<void>;
|
|
18
|
+
export declare const toPrefix: (position: number) => string;
|
|
19
|
+
export interface HamtPath {
|
|
20
|
+
rootBucket: Bucket<any>;
|
|
21
|
+
path: Array<{
|
|
22
|
+
bucket: Bucket<any>;
|
|
23
|
+
prefix: string;
|
|
24
|
+
node?: PBNode;
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
export declare const generatePath: (parent: Directory, name: string, blockstore: Blockstore, options: AbortOptions) => Promise<HamtPath>;
|
|
28
|
+
export interface CreateShardOptions {
|
|
29
|
+
mtime?: Mtime;
|
|
30
|
+
mode?: number;
|
|
31
|
+
}
|
|
32
|
+
export declare const createShard: (blockstore: Blockstore, contents: Array<{
|
|
33
|
+
name: string;
|
|
34
|
+
size: number;
|
|
35
|
+
cid: CID;
|
|
36
|
+
}>, options?: CreateShardOptions) => Promise<ImportResult>;
|
|
37
|
+
//# sourceMappingURL=hamt-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hamt-utils.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/hamt-utils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,MAAM,EAEP,MAAM,eAAe,CAAA;AAKtB,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAMtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAIxD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,GAAG,CAAA;IACR,IAAI,EAAE,MAAM,CAAA;CACb;AAED,eAAO,MAAM,mBAAmB,WAAkB,SAAS,cAAc,UAAU,SAAS,MAAM,EAAE,UAAU,OAAO,GAAG,CAAC,WAAW,YAAY,KAAG,QAAQ,gBAAgB,CAgC1K,CAAA;AAED,eAAO,MAAM,iBAAiB,eAAsB,UAAU,SAAS,MAAM,EAAE,cAAc,OAAO,GAAG,CAAC,gBAAgB,OAAO,GAAG,CAAC,oBAAoB,MAAM,WAAW,YAAY,KAAG,QAAQ,OAAO,GAAG,CAAC,CAWzM,CAAA;AAED,eAAO,MAAM,wBAAwB,UAAiB,MAAM,EAAE,KAAG,QAAQ,OAAO,GAAG,CAAC,CA+BnF,CAAA;AAED,eAAO,MAAM,oBAAoB,eAAsB,UAAU,SAAS,MAAM,EAAE,UAAU,OAAO,GAAG,CAAC,cAAc,OAAO,GAAG,CAAC,WAAW,YAAY,KAAG,QAAQ,IAAI,CA4BrK,CAAA;AAED,eAAO,MAAM,QAAQ,aAAc,MAAM,KAAG,MAM3C,CAAA;AAED,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;IACvB,IAAI,EAAE,KAAK,CAAC;QACV,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QACnB,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAC,CAAA;CACH;AAED,eAAO,MAAM,YAAY,WAAkB,SAAS,QAAQ,MAAM,cAAc,UAAU,WAAW,YAAY,KAAG,QAAQ,QAAQ,CA4FnI,CAAA;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,WAAW,eAAsB,UAAU,YAAY,MAAM;IAAE,MAAM,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,CAAC,YAAW,kBAAkB,KAAQ,QAAQ,YAAY,CA2B3K,CAAA"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import * as dagPB from '@ipld/dag-pb';
|
|
2
|
+
import { Bucket, createHAMT } from 'hamt-sharding';
|
|
3
|
+
import { DirSharded } from './dir-sharded.js';
|
|
4
|
+
import { logger } from '@libp2p/logger';
|
|
5
|
+
import { UnixFS } from 'ipfs-unixfs';
|
|
6
|
+
import last from 'it-last';
|
|
7
|
+
import { CID } from 'multiformats/cid';
|
|
8
|
+
import { hamtHashCode, hamtHashFn, hamtBucketBits } from './hamt-constants.js';
|
|
9
|
+
import { sha256 } from 'multiformats/hashes/sha2';
|
|
10
|
+
const log = logger('helia:unixfs:commands:utils:hamt-utils');
|
|
11
|
+
export const updateHamtDirectory = async (parent, blockstore, links, bucket, options) => {
|
|
12
|
+
if (parent.node.Data == null) {
|
|
13
|
+
throw new Error('Could not update HAMT directory because parent had no data');
|
|
14
|
+
}
|
|
15
|
+
// update parent with new bit field
|
|
16
|
+
const data = Uint8Array.from(bucket._children.bitField().reverse());
|
|
17
|
+
const node = UnixFS.unmarshal(parent.node.Data);
|
|
18
|
+
const dir = new UnixFS({
|
|
19
|
+
type: 'hamt-sharded-directory',
|
|
20
|
+
data,
|
|
21
|
+
fanout: bucket.tableSize(),
|
|
22
|
+
hashType: hamtHashCode,
|
|
23
|
+
mode: node.mode,
|
|
24
|
+
mtime: node.mtime
|
|
25
|
+
});
|
|
26
|
+
parent.node = {
|
|
27
|
+
Data: dir.marshal(),
|
|
28
|
+
Links: links.sort((a, b) => (a.Name ?? '').localeCompare(b.Name ?? ''))
|
|
29
|
+
};
|
|
30
|
+
const buf = dagPB.encode(parent.node);
|
|
31
|
+
const hash = await sha256.digest(buf);
|
|
32
|
+
const cid = CID.create(parent.cid.version, dagPB.code, hash);
|
|
33
|
+
await blockstore.put(cid, buf, options);
|
|
34
|
+
return {
|
|
35
|
+
node: parent.node,
|
|
36
|
+
cid,
|
|
37
|
+
size: links.reduce((sum, link) => sum + (link.Tsize ?? 0), buf.length)
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
export const recreateHamtLevel = async (blockstore, links, rootBucket, parentBucket, positionAtParent, options) => {
|
|
41
|
+
// recreate this level of the HAMT
|
|
42
|
+
const bucket = new Bucket({
|
|
43
|
+
hash: rootBucket._options.hash,
|
|
44
|
+
bits: rootBucket._options.bits
|
|
45
|
+
}, parentBucket, positionAtParent);
|
|
46
|
+
parentBucket._putObjectAt(positionAtParent, bucket);
|
|
47
|
+
await addLinksToHamtBucket(blockstore, links, bucket, rootBucket, options);
|
|
48
|
+
return bucket;
|
|
49
|
+
};
|
|
50
|
+
export const recreateInitialHamtLevel = async (links) => {
|
|
51
|
+
const bucket = createHAMT({
|
|
52
|
+
hashFn: hamtHashFn,
|
|
53
|
+
bits: hamtBucketBits
|
|
54
|
+
});
|
|
55
|
+
// populate sub bucket but do not recurse as we do not want to pull whole shard in
|
|
56
|
+
await Promise.all(links.map(async (link) => {
|
|
57
|
+
const linkName = (link.Name ?? '');
|
|
58
|
+
if (linkName.length === 2) {
|
|
59
|
+
const pos = parseInt(linkName, 16);
|
|
60
|
+
const subBucket = new Bucket({
|
|
61
|
+
hash: bucket._options.hash,
|
|
62
|
+
bits: bucket._options.bits
|
|
63
|
+
}, bucket, pos);
|
|
64
|
+
bucket._putObjectAt(pos, subBucket);
|
|
65
|
+
await Promise.resolve();
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
await bucket.put(linkName.substring(2), {
|
|
69
|
+
size: link.Tsize,
|
|
70
|
+
cid: link.Hash
|
|
71
|
+
});
|
|
72
|
+
}));
|
|
73
|
+
return bucket;
|
|
74
|
+
};
|
|
75
|
+
export const addLinksToHamtBucket = async (blockstore, links, bucket, rootBucket, options) => {
|
|
76
|
+
await Promise.all(links.map(async (link) => {
|
|
77
|
+
const linkName = (link.Name ?? '');
|
|
78
|
+
if (linkName.length === 2) {
|
|
79
|
+
log('Populating sub bucket', linkName);
|
|
80
|
+
const pos = parseInt(linkName, 16);
|
|
81
|
+
const block = await blockstore.get(link.Hash, options);
|
|
82
|
+
const node = dagPB.decode(block);
|
|
83
|
+
const subBucket = new Bucket({
|
|
84
|
+
hash: rootBucket._options.hash,
|
|
85
|
+
bits: rootBucket._options.bits
|
|
86
|
+
}, bucket, pos);
|
|
87
|
+
bucket._putObjectAt(pos, subBucket);
|
|
88
|
+
await addLinksToHamtBucket(blockstore, node.Links, subBucket, rootBucket, options);
|
|
89
|
+
await Promise.resolve();
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
await rootBucket.put(linkName.substring(2), {
|
|
93
|
+
size: link.Tsize,
|
|
94
|
+
cid: link.Hash
|
|
95
|
+
});
|
|
96
|
+
}));
|
|
97
|
+
};
|
|
98
|
+
export const toPrefix = (position) => {
|
|
99
|
+
return position
|
|
100
|
+
.toString(16)
|
|
101
|
+
.toUpperCase()
|
|
102
|
+
.padStart(2, '0')
|
|
103
|
+
.substring(0, 2);
|
|
104
|
+
};
|
|
105
|
+
export const generatePath = async (parent, name, blockstore, options) => {
|
|
106
|
+
// start at the root bucket and descend, loading nodes as we go
|
|
107
|
+
const rootBucket = await recreateInitialHamtLevel(parent.node.Links);
|
|
108
|
+
const position = await rootBucket._findNewBucketAndPos(name);
|
|
109
|
+
// the path to the root bucket
|
|
110
|
+
const path = [{
|
|
111
|
+
bucket: position.bucket,
|
|
112
|
+
prefix: toPrefix(position.pos)
|
|
113
|
+
}];
|
|
114
|
+
let currentBucket = position.bucket;
|
|
115
|
+
while (currentBucket !== rootBucket) {
|
|
116
|
+
path.push({
|
|
117
|
+
bucket: currentBucket,
|
|
118
|
+
prefix: toPrefix(currentBucket._posAtParent)
|
|
119
|
+
});
|
|
120
|
+
// @ts-expect-error - only the root bucket's parent will be undefined
|
|
121
|
+
currentBucket = currentBucket._parent;
|
|
122
|
+
}
|
|
123
|
+
path.reverse();
|
|
124
|
+
path[0].node = parent.node;
|
|
125
|
+
// load PbNode for each path segment
|
|
126
|
+
for (let i = 0; i < path.length; i++) {
|
|
127
|
+
const segment = path[i];
|
|
128
|
+
if (segment.node == null) {
|
|
129
|
+
throw new Error('Could not generate HAMT path');
|
|
130
|
+
}
|
|
131
|
+
// find prefix in links
|
|
132
|
+
const link = segment.node.Links
|
|
133
|
+
.filter(link => (link.Name ?? '').substring(0, 2) === segment.prefix)
|
|
134
|
+
.pop();
|
|
135
|
+
// entry was not in shard
|
|
136
|
+
if (link == null) {
|
|
137
|
+
// reached bottom of tree, file will be added to the current bucket
|
|
138
|
+
log(`Link ${segment.prefix}${name} will be added`);
|
|
139
|
+
// return path
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
// found entry
|
|
143
|
+
if (link.Name === `${segment.prefix}${name}`) {
|
|
144
|
+
log(`Link ${segment.prefix}${name} will be replaced`);
|
|
145
|
+
// file already existed, file will be added to the current bucket
|
|
146
|
+
// return path
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
// found subshard
|
|
150
|
+
log(`Found subshard ${segment.prefix}`);
|
|
151
|
+
const block = await blockstore.get(link.Hash, options);
|
|
152
|
+
const node = dagPB.decode(block);
|
|
153
|
+
// subshard hasn't been loaded, descend to the next level of the HAMT
|
|
154
|
+
if (path[i + 1] == null) {
|
|
155
|
+
log(`Loaded new subshard ${segment.prefix}`);
|
|
156
|
+
await recreateHamtLevel(blockstore, node.Links, rootBucket, segment.bucket, parseInt(segment.prefix, 16), options);
|
|
157
|
+
const position = await rootBucket._findNewBucketAndPos(name);
|
|
158
|
+
// i--
|
|
159
|
+
path.push({
|
|
160
|
+
bucket: position.bucket,
|
|
161
|
+
prefix: toPrefix(position.pos),
|
|
162
|
+
node
|
|
163
|
+
});
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
const nextSegment = path[i + 1];
|
|
167
|
+
// add intermediate links to bucket
|
|
168
|
+
await addLinksToHamtBucket(blockstore, node.Links, nextSegment.bucket, rootBucket, options);
|
|
169
|
+
nextSegment.node = node;
|
|
170
|
+
}
|
|
171
|
+
await rootBucket.put(name, true);
|
|
172
|
+
path.reverse();
|
|
173
|
+
return {
|
|
174
|
+
rootBucket,
|
|
175
|
+
path
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
export const createShard = async (blockstore, contents, options = {}) => {
|
|
179
|
+
const shard = new DirSharded({
|
|
180
|
+
root: true,
|
|
181
|
+
dir: true,
|
|
182
|
+
parent: undefined,
|
|
183
|
+
parentKey: undefined,
|
|
184
|
+
path: '',
|
|
185
|
+
dirty: true,
|
|
186
|
+
flat: false,
|
|
187
|
+
mtime: options.mtime,
|
|
188
|
+
mode: options.mode
|
|
189
|
+
}, options);
|
|
190
|
+
for (let i = 0; i < contents.length; i++) {
|
|
191
|
+
await shard._bucket.put(contents[i].name, {
|
|
192
|
+
size: contents[i].size,
|
|
193
|
+
cid: contents[i].cid
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
const res = await last(shard.flush(blockstore));
|
|
197
|
+
if (res == null) {
|
|
198
|
+
throw new Error('Flushing shard yielded no result');
|
|
199
|
+
}
|
|
200
|
+
return res;
|
|
201
|
+
};
|
|
202
|
+
//# sourceMappingURL=hamt-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hamt-utils.js","sourceRoot":"","sources":["../../../../src/commands/utils/hamt-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { CID, Version } from 'multiformats/cid';
|
|
2
|
+
import type { BlockCodec } from 'multiformats/codecs/interface';
|
|
3
|
+
import type { AbortOptions } from '@libp2p/interfaces';
|
|
4
|
+
import type { Blockstore } from 'interface-blockstore';
|
|
5
|
+
export interface PersistOptions extends AbortOptions {
|
|
6
|
+
codec?: BlockCodec<any, any>;
|
|
7
|
+
cidVersion?: Version;
|
|
8
|
+
}
|
|
9
|
+
export declare const persist: (buffer: Uint8Array, blockstore: Blockstore, options?: PersistOptions) => Promise<CID>;
|
|
10
|
+
//# sourceMappingURL=persist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persist.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/persist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,KAAK,CAAC,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,eAAO,MAAM,OAAO,WAAkB,UAAU,cAAc,UAAU,YAAW,cAAc,KAAQ,QAAQ,GAAG,CASnH,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CID } from 'multiformats/cid';
|
|
2
|
+
import * as dagPB from '@ipld/dag-pb';
|
|
3
|
+
import { sha256 } from 'multiformats/hashes/sha2';
|
|
4
|
+
export const persist = async (buffer, blockstore, options = {}) => {
|
|
5
|
+
const multihash = await sha256.digest(buffer);
|
|
6
|
+
const cid = CID.create(options.cidVersion ?? 1, dagPB.code, multihash);
|
|
7
|
+
await blockstore.put(cid, buffer, {
|
|
8
|
+
signal: options.signal
|
|
9
|
+
});
|
|
10
|
+
return cid;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=persist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persist.js","sourceRoot":"","sources":["../../../../src/commands/utils/persist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAUjD,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,MAAkB,EAAE,UAAsB,EAAE,UAA0B,EAAE,EAAgB,EAAE;IACtH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAEtE,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CID } from 'multiformats/cid';
|
|
2
|
+
import type { PBNode } from '@ipld/dag-pb';
|
|
3
|
+
import type { Blockstore } from 'interface-blockstore';
|
|
4
|
+
import type { Directory } from './cid-to-directory.js';
|
|
5
|
+
import type { AbortOptions } from '@libp2p/interfaces';
|
|
6
|
+
export interface RemoveLinkResult {
|
|
7
|
+
node: PBNode;
|
|
8
|
+
cid: CID;
|
|
9
|
+
}
|
|
10
|
+
export declare function removeLink(parent: Directory, name: string, blockstore: Blockstore, options: AbortOptions): Promise<RemoveLinkResult>;
|
|
11
|
+
//# sourceMappingURL=remove-link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-link.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/remove-link.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAQtC,OAAO,KAAK,EAAE,MAAM,EAAU,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAMtD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,GAAG,CAAA;CACT;AAED,wBAAsB,UAAU,CAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgB3I"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import * as dagPB from '@ipld/dag-pb';
|
|
2
|
+
import { CID } from 'multiformats/cid';
|
|
3
|
+
import { logger } from '@libp2p/logger';
|
|
4
|
+
import { UnixFS } from 'ipfs-unixfs';
|
|
5
|
+
import { generatePath, updateHamtDirectory } from './hamt-utils.js';
|
|
6
|
+
import { sha256 } from 'multiformats/hashes/sha2';
|
|
7
|
+
import { InvalidPBNodeError } from './errors.js';
|
|
8
|
+
import { InvalidParametersError } from '@helia/interface/errors';
|
|
9
|
+
const log = logger('helia:unixfs:utils:remove-link');
|
|
10
|
+
export async function removeLink(parent, name, blockstore, options) {
|
|
11
|
+
if (parent.node.Data == null) {
|
|
12
|
+
throw new InvalidPBNodeError('Parent node had no data');
|
|
13
|
+
}
|
|
14
|
+
const meta = UnixFS.unmarshal(parent.node.Data);
|
|
15
|
+
if (meta.type === 'hamt-sharded-directory') {
|
|
16
|
+
log(`Removing ${name} from sharded directory`);
|
|
17
|
+
return await removeFromShardedDirectory(parent, name, blockstore, options);
|
|
18
|
+
}
|
|
19
|
+
log(`Removing link ${name} regular directory`);
|
|
20
|
+
return await removeFromDirectory(parent, name, blockstore, options);
|
|
21
|
+
}
|
|
22
|
+
const removeFromDirectory = async (parent, name, blockstore, options) => {
|
|
23
|
+
// Remove existing link if it exists
|
|
24
|
+
parent.node.Links = parent.node.Links.filter((link) => {
|
|
25
|
+
return link.Name !== name;
|
|
26
|
+
});
|
|
27
|
+
const parentBlock = dagPB.encode(parent.node);
|
|
28
|
+
const hash = await sha256.digest(parentBlock);
|
|
29
|
+
const parentCid = CID.create(parent.cid.version, dagPB.code, hash);
|
|
30
|
+
await blockstore.put(parentCid, parentBlock, options);
|
|
31
|
+
log(`Updated regular directory ${parentCid}`);
|
|
32
|
+
return {
|
|
33
|
+
node: parent.node,
|
|
34
|
+
cid: parentCid
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
const removeFromShardedDirectory = async (parent, name, blockstore, options) => {
|
|
38
|
+
const { rootBucket, path } = await generatePath(parent, name, blockstore, options);
|
|
39
|
+
await rootBucket.del(name);
|
|
40
|
+
const { node } = await updateShard(parent, blockstore, path, name, options);
|
|
41
|
+
return await updateHamtDirectory(parent, blockstore, node.Links, rootBucket, options);
|
|
42
|
+
};
|
|
43
|
+
const updateShard = async (parent, blockstore, positions, name, options) => {
|
|
44
|
+
const last = positions.pop();
|
|
45
|
+
if (last == null) {
|
|
46
|
+
throw new InvalidParametersError('Could not find parent');
|
|
47
|
+
}
|
|
48
|
+
const { bucket, prefix, node } = last;
|
|
49
|
+
if (node == null) {
|
|
50
|
+
throw new InvalidParametersError('Could not find parent');
|
|
51
|
+
}
|
|
52
|
+
const link = node.Links
|
|
53
|
+
.find(link => (link.Name ?? '').substring(0, 2) === prefix);
|
|
54
|
+
if (link == null) {
|
|
55
|
+
throw new InvalidParametersError(`No link found with prefix ${prefix} for file ${name}`);
|
|
56
|
+
}
|
|
57
|
+
if (link.Name === `${prefix}${name}`) {
|
|
58
|
+
log(`Removing existing link ${link.Name}`);
|
|
59
|
+
const links = node.Links.filter((nodeLink) => {
|
|
60
|
+
return nodeLink.Name !== link.Name;
|
|
61
|
+
});
|
|
62
|
+
await bucket.del(name);
|
|
63
|
+
parent.node = node;
|
|
64
|
+
return await updateHamtDirectory(parent, blockstore, links, bucket, options);
|
|
65
|
+
}
|
|
66
|
+
log(`Descending into sub-shard ${link.Name} for ${prefix}${name}`);
|
|
67
|
+
const result = await updateShard(parent, blockstore, positions, name, options);
|
|
68
|
+
const child = {
|
|
69
|
+
Hash: result.cid,
|
|
70
|
+
Tsize: result.size,
|
|
71
|
+
Name: prefix
|
|
72
|
+
};
|
|
73
|
+
if (result.node.Links.length === 1) {
|
|
74
|
+
log(`Removing subshard for ${prefix}`);
|
|
75
|
+
// convert shard back to normal dir
|
|
76
|
+
const link = result.node.Links[0];
|
|
77
|
+
child.Name = `${prefix}${(link.Name ?? '').substring(2)}`;
|
|
78
|
+
child.Hash = link.Hash;
|
|
79
|
+
child.Tsize = link.Tsize ?? 0;
|
|
80
|
+
}
|
|
81
|
+
log(`Updating shard ${prefix} with name ${child.Name}`);
|
|
82
|
+
return await updateShardParent(parent, child, prefix, blockstore, bucket, options);
|
|
83
|
+
};
|
|
84
|
+
const updateShardParent = async (parent, child, oldName, blockstore, bucket, options) => {
|
|
85
|
+
// Remove existing link if it exists
|
|
86
|
+
const parentLinks = parent.node.Links.filter((link) => {
|
|
87
|
+
return link.Name !== oldName;
|
|
88
|
+
});
|
|
89
|
+
parentLinks.push(child);
|
|
90
|
+
return await updateHamtDirectory(parent, blockstore, parentLinks, bucket, options);
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=remove-link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-link.js","sourceRoot":"","sources":["../../../../src/commands/utils/remove-link.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { CID } from 'multiformats/cid';
|
|
2
|
+
import { Blockstore } from 'ipfs-unixfs-exporter';
|
|
3
|
+
import type { AbortOptions } from '@libp2p/interfaces';
|
|
4
|
+
export interface Segment {
|
|
5
|
+
name: string;
|
|
6
|
+
cid: CID;
|
|
7
|
+
size: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ResolveResult {
|
|
10
|
+
/**
|
|
11
|
+
* The CID at the end of the path
|
|
12
|
+
*/
|
|
13
|
+
cid: CID;
|
|
14
|
+
path?: string;
|
|
15
|
+
/**
|
|
16
|
+
* If present, these are the CIDs and path segments that were traversed through to reach the final CID
|
|
17
|
+
*
|
|
18
|
+
* If not present, there was no path passed or the path was an empty string
|
|
19
|
+
*/
|
|
20
|
+
segments?: Segment[];
|
|
21
|
+
}
|
|
22
|
+
export declare function resolve(cid: CID, path: string | undefined, blockstore: Blockstore, options: AbortOptions): Promise<ResolveResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Where we have descended into a DAG to update a child node, ascend up the DAG creating
|
|
25
|
+
* new hashes and blocks for the changed content
|
|
26
|
+
*/
|
|
27
|
+
export declare function updatePathCids(cid: CID, result: ResolveResult, blockstore: Blockstore, options: AbortOptions): Promise<CID>;
|
|
28
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAY,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAUtD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,GAAG,CAAA;IACR,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,GAAG,EAAE,GAAG,CAAA;IAER,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;CACrB;AAED,wBAAsB,OAAO,CAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAsDxI;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAmClI"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { exporter } from 'ipfs-unixfs-exporter';
|
|
2
|
+
import { InvalidParametersError } from '@helia/interface/errors';
|
|
3
|
+
import { logger } from '@libp2p/logger';
|
|
4
|
+
import { DoesNotExistError } from './errors.js';
|
|
5
|
+
import { addLink } from './add-link.js';
|
|
6
|
+
import { cidToDirectory } from './cid-to-directory.js';
|
|
7
|
+
import { cidToPBLink } from './cid-to-pblink.js';
|
|
8
|
+
const log = logger('helia:unixfs:components:utils:add-link');
|
|
9
|
+
export async function resolve(cid, path, blockstore, options) {
|
|
10
|
+
log('resolve "%s" under %c', path, cid);
|
|
11
|
+
if (path == null || path === '') {
|
|
12
|
+
return { cid };
|
|
13
|
+
}
|
|
14
|
+
const parts = path.split('/').filter(Boolean);
|
|
15
|
+
const segments = [{
|
|
16
|
+
name: '',
|
|
17
|
+
cid,
|
|
18
|
+
size: 0
|
|
19
|
+
}];
|
|
20
|
+
for (let i = 0; i < parts.length; i++) {
|
|
21
|
+
const part = parts[i];
|
|
22
|
+
const result = await exporter(cid, blockstore, options);
|
|
23
|
+
if (result.type === 'file') {
|
|
24
|
+
if (i < parts.length - 1) {
|
|
25
|
+
throw new InvalidParametersError('Path was invalid');
|
|
26
|
+
}
|
|
27
|
+
cid = result.cid;
|
|
28
|
+
}
|
|
29
|
+
else if (result.type === 'directory') {
|
|
30
|
+
let dirCid;
|
|
31
|
+
for await (const entry of result.content()) {
|
|
32
|
+
if (entry.name === part) {
|
|
33
|
+
dirCid = entry.cid;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (dirCid == null) {
|
|
37
|
+
throw new DoesNotExistError('Could not find path in directory');
|
|
38
|
+
}
|
|
39
|
+
cid = dirCid;
|
|
40
|
+
segments.push({
|
|
41
|
+
name: part,
|
|
42
|
+
cid,
|
|
43
|
+
size: result.size
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
throw new InvalidParametersError('Could not resolve path');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
cid,
|
|
52
|
+
path,
|
|
53
|
+
segments
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Where we have descended into a DAG to update a child node, ascend up the DAG creating
|
|
58
|
+
* new hashes and blocks for the changed content
|
|
59
|
+
*/
|
|
60
|
+
export async function updatePathCids(cid, result, blockstore, options) {
|
|
61
|
+
if (result.segments == null || result.segments.length === 0) {
|
|
62
|
+
return cid;
|
|
63
|
+
}
|
|
64
|
+
let child = result.segments.pop();
|
|
65
|
+
if (child == null) {
|
|
66
|
+
throw new Error('Insufficient segments');
|
|
67
|
+
}
|
|
68
|
+
child.cid = cid;
|
|
69
|
+
result.segments.reverse();
|
|
70
|
+
for (const parent of result.segments) {
|
|
71
|
+
const [directory, pblink] = await Promise.all([
|
|
72
|
+
cidToDirectory(parent.cid, blockstore, options),
|
|
73
|
+
cidToPBLink(child.cid, child.name, blockstore, options)
|
|
74
|
+
]);
|
|
75
|
+
const result = await addLink(directory, pblink, blockstore, {
|
|
76
|
+
...options,
|
|
77
|
+
allowOverwriting: true
|
|
78
|
+
});
|
|
79
|
+
cid = result.cid;
|
|
80
|
+
parent.cid = cid;
|
|
81
|
+
child = parent;
|
|
82
|
+
}
|
|
83
|
+
return cid;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../../src/commands/utils/resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type { CID, Version } from 'multiformats/cid';
|
|
2
|
+
import type { Blockstore } from 'interface-blockstore';
|
|
3
|
+
import type { AbortOptions } from '@libp2p/interfaces';
|
|
4
|
+
import type { ImportCandidate, ImportResult, UserImporterOptions } from 'ipfs-unixfs-importer';
|
|
5
|
+
import type { Mtime } from 'ipfs-unixfs';
|
|
6
|
+
import type { UnixFSEntry } from 'ipfs-unixfs-exporter';
|
|
7
|
+
export interface UnixFSComponents {
|
|
8
|
+
blockstore: Blockstore;
|
|
9
|
+
}
|
|
10
|
+
export interface CatOptions extends AbortOptions {
|
|
11
|
+
offset?: number;
|
|
12
|
+
length?: number;
|
|
13
|
+
path?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ChmodOptions extends AbortOptions {
|
|
16
|
+
recursive: boolean;
|
|
17
|
+
path?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface CpOptions extends AbortOptions {
|
|
20
|
+
force: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface LsOptions extends AbortOptions {
|
|
23
|
+
path?: string;
|
|
24
|
+
offset?: number;
|
|
25
|
+
length?: number;
|
|
26
|
+
}
|
|
27
|
+
export interface MkdirOptions extends AbortOptions {
|
|
28
|
+
cidVersion: Version;
|
|
29
|
+
force: boolean;
|
|
30
|
+
mode?: number;
|
|
31
|
+
mtime?: Mtime;
|
|
32
|
+
}
|
|
33
|
+
export interface RmOptions extends AbortOptions {
|
|
34
|
+
}
|
|
35
|
+
export interface StatOptions extends AbortOptions {
|
|
36
|
+
path?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface UnixFSStats {
|
|
39
|
+
/**
|
|
40
|
+
* The file or directory CID
|
|
41
|
+
*/
|
|
42
|
+
cid: CID;
|
|
43
|
+
/**
|
|
44
|
+
* The file or directory mode
|
|
45
|
+
*/
|
|
46
|
+
mode?: number;
|
|
47
|
+
/**
|
|
48
|
+
* The file or directory mtime
|
|
49
|
+
*/
|
|
50
|
+
mtime?: Mtime;
|
|
51
|
+
/**
|
|
52
|
+
* The size of the file in bytes
|
|
53
|
+
*/
|
|
54
|
+
fileSize: number;
|
|
55
|
+
/**
|
|
56
|
+
* The size of the DAG that holds the file in bytes
|
|
57
|
+
*/
|
|
58
|
+
dagSize: number;
|
|
59
|
+
/**
|
|
60
|
+
* How much of the file is in the local block store
|
|
61
|
+
*/
|
|
62
|
+
localFileSize: number;
|
|
63
|
+
/**
|
|
64
|
+
* How much of the DAG that holds the file is in the local blockstore
|
|
65
|
+
*/
|
|
66
|
+
localDagSize: number;
|
|
67
|
+
/**
|
|
68
|
+
* How many blocks make up the DAG - nb. this will only be accurate
|
|
69
|
+
* if all blocks are present in the local blockstore
|
|
70
|
+
*/
|
|
71
|
+
blocks: number;
|
|
72
|
+
/**
|
|
73
|
+
* The type of file
|
|
74
|
+
*/
|
|
75
|
+
type: 'file' | 'directory' | 'raw';
|
|
76
|
+
}
|
|
77
|
+
export interface TouchOptions extends AbortOptions {
|
|
78
|
+
mtime?: Mtime;
|
|
79
|
+
path?: string;
|
|
80
|
+
recursive: boolean;
|
|
81
|
+
}
|
|
82
|
+
export interface UnixFS {
|
|
83
|
+
add: (source: Uint8Array | Iterator<Uint8Array> | AsyncIterator<Uint8Array> | ImportCandidate, options?: Partial<UserImporterOptions>) => Promise<CID>;
|
|
84
|
+
addStream: (source: Iterable<ImportCandidate> | AsyncIterable<ImportCandidate>, options?: Partial<UserImporterOptions>) => AsyncGenerator<ImportResult>;
|
|
85
|
+
cat: (cid: CID, options?: Partial<CatOptions>) => AsyncIterable<Uint8Array>;
|
|
86
|
+
chmod: (source: CID, mode: number, options?: Partial<ChmodOptions>) => Promise<CID>;
|
|
87
|
+
cp: (source: CID, target: CID, name: string, options?: Partial<CpOptions>) => Promise<CID>;
|
|
88
|
+
ls: (cid: CID, options?: Partial<LsOptions>) => AsyncIterable<UnixFSEntry>;
|
|
89
|
+
mkdir: (cid: CID, dirname: string, options?: Partial<MkdirOptions>) => Promise<CID>;
|
|
90
|
+
rm: (cid: CID, path: string, options?: Partial<RmOptions>) => Promise<CID>;
|
|
91
|
+
stat: (cid: CID, options?: Partial<StatOptions>) => Promise<UnixFSStats>;
|
|
92
|
+
touch: (cid: CID, options?: Partial<TouchOptions>) => Promise<CID>;
|
|
93
|
+
}
|
|
94
|
+
export declare function unixfs(helia: {
|
|
95
|
+
blockstore: Blockstore;
|
|
96
|
+
}): UnixFS;
|
|
97
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|