@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,22 @@
|
|
|
1
|
+
import { NoContentError, NotAFileError } from '@helia/interface/errors';
|
|
2
|
+
import { exporter } from 'ipfs-unixfs-exporter';
|
|
3
|
+
import { resolve } from './utils/resolve.js';
|
|
4
|
+
import mergeOpts from 'merge-options';
|
|
5
|
+
const mergeOptions = mergeOpts.bind({ ignoreUndefined: true });
|
|
6
|
+
const defaultOptions = {};
|
|
7
|
+
export async function* cat(cid, blockstore, options = {}) {
|
|
8
|
+
const opts = mergeOptions(defaultOptions, options);
|
|
9
|
+
const resolved = await resolve(cid, opts.path, blockstore, opts);
|
|
10
|
+
const result = await exporter(resolved.cid, blockstore, opts);
|
|
11
|
+
if (result.type !== 'file' && result.type !== 'raw') {
|
|
12
|
+
throw new NotAFileError();
|
|
13
|
+
}
|
|
14
|
+
if (result.content == null) {
|
|
15
|
+
throw new NoContentError();
|
|
16
|
+
}
|
|
17
|
+
yield* result.content({
|
|
18
|
+
offset: opts.offset,
|
|
19
|
+
length: opts.length
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=cat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cat.js","sourceRoot":"","sources":["../../../src/commands/cat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAc,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAG3D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,SAAS,MAAM,eAAe,CAAA;AAErC,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAA;AAE9D,MAAM,cAAc,GAAe,EAElC,CAAA;AAED,MAAM,CAAC,KAAK,SAAU,CAAC,CAAC,GAAG,CAAE,GAAQ,EAAE,UAAsB,EAAE,UAA+B,EAAE;IAC9F,MAAM,IAAI,GAAe,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAC9D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IAChE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IAE7D,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;QACnD,MAAM,IAAI,aAAa,EAAE,CAAA;KAC1B;IAED,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,EAAE;QAC1B,MAAM,IAAI,cAAc,EAAE,CAAA;KAC3B;IAED,KAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { CID } from 'multiformats/cid';
|
|
2
|
+
import type { ChmodOptions } from '../index.js';
|
|
3
|
+
import type { Blockstore } from 'interface-blockstore';
|
|
4
|
+
export declare function chmod(cid: CID, mode: number, blockstore: Blockstore, options?: Partial<ChmodOptions>): Promise<CID>;
|
|
5
|
+
//# sourceMappingURL=chmod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chmod.d.ts","sourceRoot":"","sources":["../../../src/commands/chmod.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAU/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAatD,wBAAsB,KAAK,CAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA2G9H"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { recursive } from 'ipfs-unixfs-exporter';
|
|
2
|
+
import { CID } from 'multiformats/cid';
|
|
3
|
+
import mergeOpts from 'merge-options';
|
|
4
|
+
import { logger } from '@libp2p/logger';
|
|
5
|
+
import { UnixFS } from 'ipfs-unixfs';
|
|
6
|
+
import { pipe } from 'it-pipe';
|
|
7
|
+
import { InvalidPBNodeError, NotUnixFSError, UnknownError } from './utils/errors.js';
|
|
8
|
+
import * as dagPB from '@ipld/dag-pb';
|
|
9
|
+
import { importer } from 'ipfs-unixfs-importer';
|
|
10
|
+
import { persist } from './utils/persist.js';
|
|
11
|
+
import last from 'it-last';
|
|
12
|
+
import { sha256 } from 'multiformats/hashes/sha2';
|
|
13
|
+
import { resolve, updatePathCids } from './utils/resolve.js';
|
|
14
|
+
import * as raw from 'multiformats/codecs/raw';
|
|
15
|
+
const mergeOptions = mergeOpts.bind({ ignoreUndefined: true });
|
|
16
|
+
const log = logger('helia:unixfs:chmod');
|
|
17
|
+
const defaultOptions = {
|
|
18
|
+
recursive: false
|
|
19
|
+
};
|
|
20
|
+
export async function chmod(cid, mode, blockstore, options = {}) {
|
|
21
|
+
const opts = mergeOptions(defaultOptions, options);
|
|
22
|
+
const resolved = await resolve(cid, opts.path, blockstore, options);
|
|
23
|
+
log('chmod %c %d', resolved.cid, mode);
|
|
24
|
+
if (opts.recursive) {
|
|
25
|
+
// recursively export from root CID, change perms of each entry then reimport
|
|
26
|
+
// but do not reimport files, only manipulate dag-pb nodes
|
|
27
|
+
const root = await pipe(async function* () {
|
|
28
|
+
for await (const entry of recursive(resolved.cid, blockstore)) {
|
|
29
|
+
let metadata;
|
|
30
|
+
let links = [];
|
|
31
|
+
if (entry.type === 'raw') {
|
|
32
|
+
// convert to UnixFS
|
|
33
|
+
metadata = new UnixFS({ type: 'file', data: entry.node });
|
|
34
|
+
}
|
|
35
|
+
else if (entry.type === 'file' || entry.type === 'directory') {
|
|
36
|
+
metadata = entry.unixfs;
|
|
37
|
+
links = entry.node.Links;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
throw new NotUnixFSError();
|
|
41
|
+
}
|
|
42
|
+
metadata.mode = mode;
|
|
43
|
+
const node = {
|
|
44
|
+
Data: metadata.marshal(),
|
|
45
|
+
Links: links
|
|
46
|
+
};
|
|
47
|
+
yield {
|
|
48
|
+
path: entry.path,
|
|
49
|
+
content: node
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
// @ts-expect-error we account for the incompatible source type with our custom dag builder below
|
|
54
|
+
(source) => importer(source, blockstore, {
|
|
55
|
+
...opts,
|
|
56
|
+
pin: false,
|
|
57
|
+
dagBuilder: async function* (source, block, opts) {
|
|
58
|
+
for await (const entry of source) {
|
|
59
|
+
yield async function () {
|
|
60
|
+
// @ts-expect-error cannot derive type
|
|
61
|
+
const node = entry.content;
|
|
62
|
+
const buf = dagPB.encode(node);
|
|
63
|
+
const cid = await persist(buf, block, opts);
|
|
64
|
+
if (node.Data == null) {
|
|
65
|
+
throw new InvalidPBNodeError(`${cid} had no data`);
|
|
66
|
+
}
|
|
67
|
+
const unixfs = UnixFS.unmarshal(node.Data);
|
|
68
|
+
return {
|
|
69
|
+
cid,
|
|
70
|
+
size: buf.length,
|
|
71
|
+
path: entry.path,
|
|
72
|
+
unixfs
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}), async (nodes) => await last(nodes));
|
|
78
|
+
if (root == null) {
|
|
79
|
+
throw new UnknownError(`Could not chmod ${resolved.cid.toString()}`);
|
|
80
|
+
}
|
|
81
|
+
return await updatePathCids(root.cid, resolved, blockstore, options);
|
|
82
|
+
}
|
|
83
|
+
const block = await blockstore.get(resolved.cid);
|
|
84
|
+
let metadata;
|
|
85
|
+
let links = [];
|
|
86
|
+
if (resolved.cid.code === raw.code) {
|
|
87
|
+
// convert to UnixFS
|
|
88
|
+
metadata = new UnixFS({ type: 'file', data: block });
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const node = dagPB.decode(block);
|
|
92
|
+
if (node.Data == null) {
|
|
93
|
+
throw new InvalidPBNodeError(`${resolved.cid.toString()} had no data`);
|
|
94
|
+
}
|
|
95
|
+
links = node.Links;
|
|
96
|
+
metadata = UnixFS.unmarshal(node.Data);
|
|
97
|
+
}
|
|
98
|
+
metadata.mode = mode;
|
|
99
|
+
const updatedBlock = dagPB.encode({
|
|
100
|
+
Data: metadata.marshal(),
|
|
101
|
+
Links: links
|
|
102
|
+
});
|
|
103
|
+
const hash = await sha256.digest(updatedBlock);
|
|
104
|
+
const updatedCid = CID.create(resolved.cid.version, dagPB.code, hash);
|
|
105
|
+
await blockstore.put(updatedCid, updatedBlock);
|
|
106
|
+
return await updatePathCids(updatedCid, resolved, blockstore, options);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=chmod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chmod.js","sourceRoot":"","sources":["../../../src/commands/chmod.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Blockstore } from 'ipfs-unixfs-exporter';
|
|
2
|
+
import type { CID } from 'multiformats/cid';
|
|
3
|
+
import type { CpOptions } from '../index.js';
|
|
4
|
+
export declare function cp(source: CID, target: CID, name: string, blockstore: Blockstore, options?: Partial<CpOptions>): Promise<CID>;
|
|
5
|
+
//# sourceMappingURL=cp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cp.d.ts","sourceRoot":"","sources":["../../../src/commands/cp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAc5C,wBAAsB,EAAE,CAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,OAAO,CAAC,SAAS,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAuBxI"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { InvalidParametersError } from '@helia/interface/errors';
|
|
2
|
+
import mergeOpts from 'merge-options';
|
|
3
|
+
import { logger } from '@libp2p/logger';
|
|
4
|
+
import { addLink } from './utils/add-link.js';
|
|
5
|
+
import { cidToPBLink } from './utils/cid-to-pblink.js';
|
|
6
|
+
import { cidToDirectory } from './utils/cid-to-directory.js';
|
|
7
|
+
const mergeOptions = mergeOpts.bind({ ignoreUndefined: true });
|
|
8
|
+
const log = logger('helia:unixfs:cp');
|
|
9
|
+
const defaultOptions = {
|
|
10
|
+
force: false
|
|
11
|
+
};
|
|
12
|
+
export async function cp(source, target, name, blockstore, options = {}) {
|
|
13
|
+
const opts = mergeOptions(defaultOptions, options);
|
|
14
|
+
if (name.includes('/')) {
|
|
15
|
+
throw new InvalidParametersError('Name must not have slashes');
|
|
16
|
+
}
|
|
17
|
+
const [directory, pblink] = await Promise.all([
|
|
18
|
+
cidToDirectory(target, blockstore, opts),
|
|
19
|
+
cidToPBLink(source, name, blockstore, opts)
|
|
20
|
+
]);
|
|
21
|
+
log('Adding %c as "%s" to %c', source, name, target);
|
|
22
|
+
const result = await addLink(directory, pblink, blockstore, {
|
|
23
|
+
allowOverwriting: opts.force,
|
|
24
|
+
...opts
|
|
25
|
+
});
|
|
26
|
+
return result.cid;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=cp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cp.js","sourceRoot":"","sources":["../../../src/commands/cp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAIhE,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAA;AAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAErC,MAAM,cAAc,GAAG;IACrB,KAAK,EAAE,KAAK;CACb,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,EAAE,CAAE,MAAW,EAAE,MAAW,EAAE,IAAY,EAAE,UAAsB,EAAE,UAA8B,EAAE;IACxH,MAAM,IAAI,GAAc,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAE7D,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACtB,MAAM,IAAI,sBAAsB,CAAC,4BAA4B,CAAC,CAAA;KAC/D;IAED,MAAM,CACJ,SAAS,EACT,MAAM,CACP,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC;QACxC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC;KAC5C,CAAC,CAAA;IAEF,GAAG,CAAC,yBAAyB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IAEpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;QAC1D,gBAAgB,EAAE,IAAI,CAAC,KAAK;QAC5B,GAAG,IAAI;KACR,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,GAAG,CAAA;AACnB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Blockstore, UnixFSEntry } from 'ipfs-unixfs-exporter';
|
|
2
|
+
import type { CID } from 'multiformats/cid';
|
|
3
|
+
import type { LsOptions } from '../index.js';
|
|
4
|
+
export declare function ls(cid: CID, blockstore: Blockstore, options?: Partial<LsOptions>): AsyncIterable<UnixFSEntry>;
|
|
5
|
+
//# sourceMappingURL=ls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../../src/commands/ls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAY,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACxE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAU5C,wBAAwB,EAAE,CAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,OAAO,CAAC,SAAS,CAAM,GAAG,aAAa,CAAC,WAAW,CAAC,CAsB1H"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { NoContentError, NotADirectoryError } from '@helia/interface/errors';
|
|
2
|
+
import { exporter } from 'ipfs-unixfs-exporter';
|
|
3
|
+
import { resolve } from './utils/resolve.js';
|
|
4
|
+
import mergeOpts from 'merge-options';
|
|
5
|
+
const mergeOptions = mergeOpts.bind({ ignoreUndefined: true });
|
|
6
|
+
const defaultOptions = {};
|
|
7
|
+
export async function* ls(cid, blockstore, options = {}) {
|
|
8
|
+
const opts = mergeOptions(defaultOptions, options);
|
|
9
|
+
const resolved = await resolve(cid, opts.path, blockstore, opts);
|
|
10
|
+
const result = await exporter(resolved.cid, blockstore);
|
|
11
|
+
if (result.type === 'file' || result.type === 'raw') {
|
|
12
|
+
yield result;
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (result.content == null) {
|
|
16
|
+
throw new NoContentError();
|
|
17
|
+
}
|
|
18
|
+
if (result.type !== 'directory') {
|
|
19
|
+
throw new NotADirectoryError();
|
|
20
|
+
}
|
|
21
|
+
yield* result.content({
|
|
22
|
+
offset: options.offset,
|
|
23
|
+
length: options.length
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=ls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../../src/commands/ls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAc,QAAQ,EAAe,MAAM,sBAAsB,CAAA;AAGxE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,SAAS,MAAM,eAAe,CAAA;AAErC,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAA;AAE9D,MAAM,cAAc,GAAG,EAEtB,CAAA;AAED,MAAM,CAAC,KAAK,SAAU,CAAC,CAAC,EAAE,CAAE,GAAQ,EAAE,UAAsB,EAAE,UAA8B,EAAE;IAC5F,MAAM,IAAI,GAAc,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAC7D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IAChE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;IAEvD,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;QACnD,MAAM,MAAM,CAAA;QACZ,OAAM;KACP;IAED,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,EAAE;QAC1B,MAAM,IAAI,cAAc,EAAE,CAAA;KAC3B;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE;QAC/B,MAAM,IAAI,kBAAkB,EAAE,CAAA;KAC/B;IAED,KAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { CID } from 'multiformats/cid';
|
|
2
|
+
import type { MkdirOptions } from '../index.js';
|
|
3
|
+
import type { Blockstore } from 'interface-blockstore';
|
|
4
|
+
export declare function mkdir(parentCid: CID, dirname: string, blockstore: Blockstore, options?: Partial<MkdirOptions>): Promise<CID>;
|
|
5
|
+
//# sourceMappingURL=mkdir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mkdir.d.ts","sourceRoot":"","sources":["../../../src/commands/mkdir.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAetD,wBAAsB,KAAK,CAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAgDvI"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { InvalidParametersError, NotADirectoryError } from '@helia/interface/errors';
|
|
2
|
+
import { CID } from 'multiformats/cid';
|
|
3
|
+
import mergeOpts from 'merge-options';
|
|
4
|
+
import { logger } from '@libp2p/logger';
|
|
5
|
+
import * as dagPB from '@ipld/dag-pb';
|
|
6
|
+
import { addLink } from './utils/add-link.js';
|
|
7
|
+
import { UnixFS } from 'ipfs-unixfs';
|
|
8
|
+
import { sha256 } from 'multiformats/hashes/sha2';
|
|
9
|
+
import { exporter } from 'ipfs-unixfs-exporter';
|
|
10
|
+
import { cidToDirectory } from './utils/cid-to-directory.js';
|
|
11
|
+
import { cidToPBLink } from './utils/cid-to-pblink.js';
|
|
12
|
+
const mergeOptions = mergeOpts.bind({ ignoreUndefined: true });
|
|
13
|
+
const log = logger('helia:unixfs:mkdir');
|
|
14
|
+
const defaultOptions = {
|
|
15
|
+
cidVersion: 1,
|
|
16
|
+
force: false
|
|
17
|
+
};
|
|
18
|
+
export async function mkdir(parentCid, dirname, blockstore, options = {}) {
|
|
19
|
+
const opts = mergeOptions(defaultOptions, options);
|
|
20
|
+
if (dirname.includes('/')) {
|
|
21
|
+
throw new InvalidParametersError('Path must not have slashes');
|
|
22
|
+
}
|
|
23
|
+
const entry = await exporter(parentCid, blockstore, options);
|
|
24
|
+
if (entry.type !== 'directory') {
|
|
25
|
+
throw new NotADirectoryError(`${parentCid.toString()} was not a UnixFS directory`);
|
|
26
|
+
}
|
|
27
|
+
log('creating %s', dirname);
|
|
28
|
+
const metadata = new UnixFS({
|
|
29
|
+
type: 'directory',
|
|
30
|
+
mode: opts.mode,
|
|
31
|
+
mtime: opts.mtime
|
|
32
|
+
});
|
|
33
|
+
// Persist the new parent PBNode
|
|
34
|
+
const node = {
|
|
35
|
+
Data: metadata.marshal(),
|
|
36
|
+
Links: []
|
|
37
|
+
};
|
|
38
|
+
const buf = dagPB.encode(node);
|
|
39
|
+
const hash = await sha256.digest(buf);
|
|
40
|
+
const emptyDirCid = CID.create(opts.cidVersion, dagPB.code, hash);
|
|
41
|
+
await blockstore.put(emptyDirCid, buf);
|
|
42
|
+
const [directory, pblink] = await Promise.all([
|
|
43
|
+
cidToDirectory(parentCid, blockstore, opts),
|
|
44
|
+
cidToPBLink(emptyDirCid, dirname, blockstore, opts)
|
|
45
|
+
]);
|
|
46
|
+
log('adding empty dir called %s to %c', dirname, parentCid);
|
|
47
|
+
const result = await addLink(directory, pblink, blockstore, {
|
|
48
|
+
...opts,
|
|
49
|
+
allowOverwriting: opts.force
|
|
50
|
+
});
|
|
51
|
+
return result.cid;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=mkdir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mkdir.js","sourceRoot":"","sources":["../../../src/commands/mkdir.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Blockstore } from 'ipfs-unixfs-exporter';
|
|
2
|
+
import type { CID } from 'multiformats/cid';
|
|
3
|
+
import type { RmOptions } from '../index.js';
|
|
4
|
+
export declare function rm(target: CID, name: string, blockstore: Blockstore, options?: Partial<RmOptions>): Promise<CID>;
|
|
5
|
+
//# sourceMappingURL=rm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rm.d.ts","sourceRoot":"","sources":["../../../src/commands/rm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAa5C,wBAAsB,EAAE,CAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,OAAO,CAAC,SAAS,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAc3H"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { InvalidParametersError } from '@helia/interface/errors';
|
|
2
|
+
import mergeOpts from 'merge-options';
|
|
3
|
+
import { logger } from '@libp2p/logger';
|
|
4
|
+
import { removeLink } from './utils/remove-link.js';
|
|
5
|
+
import { cidToDirectory } from './utils/cid-to-directory.js';
|
|
6
|
+
const mergeOptions = mergeOpts.bind({ ignoreUndefined: true });
|
|
7
|
+
const log = logger('helia:unixfs:rm');
|
|
8
|
+
const defaultOptions = {};
|
|
9
|
+
export async function rm(target, name, blockstore, options = {}) {
|
|
10
|
+
const opts = mergeOptions(defaultOptions, options);
|
|
11
|
+
if (name.includes('/')) {
|
|
12
|
+
throw new InvalidParametersError('Name must not have slashes');
|
|
13
|
+
}
|
|
14
|
+
const directory = await cidToDirectory(target, blockstore, opts);
|
|
15
|
+
log('Removing %s from %c', name, target);
|
|
16
|
+
const result = await removeLink(directory, name, blockstore, opts);
|
|
17
|
+
return result.cid;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=rm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rm.js","sourceRoot":"","sources":["../../../src/commands/rm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAIhE,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAA;AAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAErC,MAAM,cAAc,GAAG,EAEtB,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,EAAE,CAAE,MAAW,EAAE,IAAY,EAAE,UAAsB,EAAE,UAA8B,EAAE;IAC3G,MAAM,IAAI,GAAc,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAE7D,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACtB,MAAM,IAAI,sBAAsB,CAAC,4BAA4B,CAAC,CAAA;KAC/D;IAED,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IAEhE,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IAExC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IAElE,OAAO,MAAM,CAAC,GAAG,CAAA;AACnB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Blockstore } from 'ipfs-unixfs-exporter';
|
|
2
|
+
import type { CID } from 'multiformats/cid';
|
|
3
|
+
import type { StatOptions, UnixFSStats } from '../index.js';
|
|
4
|
+
export declare function stat(cid: CID, blockstore: Blockstore, options?: Partial<StatOptions>): Promise<UnixFSStats>;
|
|
5
|
+
//# sourceMappingURL=stat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stat.d.ts","sourceRoot":"","sources":["../../../src/commands/stat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAY,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAkB3D,wBAAsB,IAAI,CAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA8DtH"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { exporter } from 'ipfs-unixfs-exporter';
|
|
2
|
+
import mergeOpts from 'merge-options';
|
|
3
|
+
import { logger } from '@libp2p/logger';
|
|
4
|
+
import { UnixFS } from 'ipfs-unixfs';
|
|
5
|
+
import { InvalidPBNodeError, NotUnixFSError, UnknownError } from './utils/errors.js';
|
|
6
|
+
import * as dagPb from '@ipld/dag-pb';
|
|
7
|
+
import { resolve } from './utils/resolve.js';
|
|
8
|
+
import * as raw from 'multiformats/codecs/raw';
|
|
9
|
+
const mergeOptions = mergeOpts.bind({ ignoreUndefined: true });
|
|
10
|
+
const log = logger('helia:unixfs:stat');
|
|
11
|
+
const defaultOptions = {};
|
|
12
|
+
export async function stat(cid, blockstore, options = {}) {
|
|
13
|
+
const opts = mergeOptions(defaultOptions, options);
|
|
14
|
+
const resolved = await resolve(cid, options.path, blockstore, opts);
|
|
15
|
+
log('stat %c', resolved.cid);
|
|
16
|
+
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 = 0;
|
|
21
|
+
let dagSize = 0;
|
|
22
|
+
let localFileSize = 0;
|
|
23
|
+
let localDagSize = 0;
|
|
24
|
+
let blocks = 0;
|
|
25
|
+
let mode;
|
|
26
|
+
let mtime;
|
|
27
|
+
const type = result.type;
|
|
28
|
+
if (result.type === 'raw') {
|
|
29
|
+
fileSize = result.node.byteLength;
|
|
30
|
+
dagSize = result.node.byteLength;
|
|
31
|
+
localFileSize = result.node.byteLength;
|
|
32
|
+
localDagSize = result.node.byteLength;
|
|
33
|
+
blocks = 1;
|
|
34
|
+
}
|
|
35
|
+
if (result.type === 'directory') {
|
|
36
|
+
fileSize = 0;
|
|
37
|
+
dagSize = result.unixfs.marshal().byteLength;
|
|
38
|
+
localFileSize = 0;
|
|
39
|
+
localDagSize = dagSize;
|
|
40
|
+
blocks = 1;
|
|
41
|
+
mode = result.unixfs.mode;
|
|
42
|
+
mtime = result.unixfs.mtime;
|
|
43
|
+
}
|
|
44
|
+
if (result.type === 'file') {
|
|
45
|
+
const results = await inspectDag(resolved.cid, blockstore, opts);
|
|
46
|
+
fileSize = result.unixfs.fileSize();
|
|
47
|
+
dagSize = (result.node.Data?.byteLength ?? 0) + result.node.Links.reduce((acc, curr) => acc + (curr.Tsize ?? 0), 0);
|
|
48
|
+
localFileSize = results.localFileSize;
|
|
49
|
+
localDagSize = results.localDagSize;
|
|
50
|
+
blocks = results.blocks;
|
|
51
|
+
mode = result.unixfs.mode;
|
|
52
|
+
mtime = result.unixfs.mtime;
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
cid: resolved.cid,
|
|
56
|
+
mode,
|
|
57
|
+
mtime,
|
|
58
|
+
fileSize,
|
|
59
|
+
dagSize,
|
|
60
|
+
localFileSize,
|
|
61
|
+
localDagSize,
|
|
62
|
+
blocks,
|
|
63
|
+
type
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async function inspectDag(cid, blockstore, options) {
|
|
67
|
+
const results = {
|
|
68
|
+
localFileSize: 0,
|
|
69
|
+
localDagSize: 0,
|
|
70
|
+
blocks: 0
|
|
71
|
+
};
|
|
72
|
+
if (await blockstore.has(cid, options)) {
|
|
73
|
+
const block = await blockstore.get(cid, options);
|
|
74
|
+
results.blocks++;
|
|
75
|
+
results.localDagSize += block.byteLength;
|
|
76
|
+
if (cid.code === raw.code) {
|
|
77
|
+
results.localFileSize += block.byteLength;
|
|
78
|
+
}
|
|
79
|
+
else if (cid.code === dagPb.code) {
|
|
80
|
+
const pbNode = dagPb.decode(block);
|
|
81
|
+
if (pbNode.Links.length > 0) {
|
|
82
|
+
// intermediate node
|
|
83
|
+
for (const link of pbNode.Links) {
|
|
84
|
+
const linkResult = await inspectDag(link.Hash, blockstore, options);
|
|
85
|
+
results.localFileSize += linkResult.localFileSize;
|
|
86
|
+
results.localDagSize += linkResult.localDagSize;
|
|
87
|
+
results.blocks += linkResult.blocks;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// leaf node
|
|
92
|
+
if (pbNode.Data == null) {
|
|
93
|
+
throw new InvalidPBNodeError(`PBNode ${cid.toString()} had no data`);
|
|
94
|
+
}
|
|
95
|
+
const unixfs = UnixFS.unmarshal(pbNode.Data);
|
|
96
|
+
if (unixfs.data == null) {
|
|
97
|
+
throw new InvalidPBNodeError(`UnixFS node ${cid.toString()} had no data`);
|
|
98
|
+
}
|
|
99
|
+
results.localFileSize += unixfs.data.byteLength ?? 0;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
throw new UnknownError(`${cid.toString()} was neither DAG_PB nor RAW`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return results;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=stat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stat.js","sourceRoot":"","sources":["../../../src/commands/stat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { CID } from 'multiformats/cid';
|
|
2
|
+
import type { TouchOptions } from '../index.js';
|
|
3
|
+
import type { Blockstore } from 'interface-blockstore';
|
|
4
|
+
export declare function touch(cid: CID, blockstore: Blockstore, options?: Partial<TouchOptions>): Promise<CID>;
|
|
5
|
+
//# sourceMappingURL=touch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"touch.d.ts","sourceRoot":"","sources":["../../../src/commands/touch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAU/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAatD,wBAAsB,KAAK,CAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA8GhH"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { recursive } from 'ipfs-unixfs-exporter';
|
|
2
|
+
import { CID } from 'multiformats/cid';
|
|
3
|
+
import mergeOpts from 'merge-options';
|
|
4
|
+
import { logger } from '@libp2p/logger';
|
|
5
|
+
import { UnixFS } from 'ipfs-unixfs';
|
|
6
|
+
import { pipe } from 'it-pipe';
|
|
7
|
+
import { InvalidPBNodeError, NotUnixFSError, UnknownError } from './utils/errors.js';
|
|
8
|
+
import * as dagPB from '@ipld/dag-pb';
|
|
9
|
+
import { importer } from 'ipfs-unixfs-importer';
|
|
10
|
+
import { persist } from './utils/persist.js';
|
|
11
|
+
import last from 'it-last';
|
|
12
|
+
import { sha256 } from 'multiformats/hashes/sha2';
|
|
13
|
+
import { resolve, updatePathCids } from './utils/resolve.js';
|
|
14
|
+
import * as raw from 'multiformats/codecs/raw';
|
|
15
|
+
const mergeOptions = mergeOpts.bind({ ignoreUndefined: true });
|
|
16
|
+
const log = logger('helia:unixfs:touch');
|
|
17
|
+
const defaultOptions = {
|
|
18
|
+
recursive: false
|
|
19
|
+
};
|
|
20
|
+
export async function touch(cid, blockstore, options = {}) {
|
|
21
|
+
const opts = mergeOptions(defaultOptions, options);
|
|
22
|
+
const resolved = await resolve(cid, opts.path, blockstore, opts);
|
|
23
|
+
const mtime = opts.mtime ?? {
|
|
24
|
+
secs: Date.now() / 1000,
|
|
25
|
+
nsecs: 0
|
|
26
|
+
};
|
|
27
|
+
log('touch %c %o', resolved.cid, mtime);
|
|
28
|
+
if (opts.recursive) {
|
|
29
|
+
// recursively export from root CID, change perms of each entry then reimport
|
|
30
|
+
// but do not reimport files, only manipulate dag-pb nodes
|
|
31
|
+
const root = await pipe(async function* () {
|
|
32
|
+
for await (const entry of recursive(resolved.cid, blockstore)) {
|
|
33
|
+
let metadata;
|
|
34
|
+
let links;
|
|
35
|
+
if (entry.type === 'raw') {
|
|
36
|
+
metadata = new UnixFS({ data: entry.node });
|
|
37
|
+
links = [];
|
|
38
|
+
}
|
|
39
|
+
else if (entry.type === 'file' || entry.type === 'directory') {
|
|
40
|
+
metadata = entry.unixfs;
|
|
41
|
+
links = entry.node.Links;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
throw new NotUnixFSError();
|
|
45
|
+
}
|
|
46
|
+
metadata.mtime = mtime;
|
|
47
|
+
const node = {
|
|
48
|
+
Data: metadata.marshal(),
|
|
49
|
+
Links: links
|
|
50
|
+
};
|
|
51
|
+
yield {
|
|
52
|
+
path: entry.path,
|
|
53
|
+
content: node
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
// @ts-expect-error we account for the incompatible source type with our custom dag builder below
|
|
58
|
+
(source) => importer(source, blockstore, {
|
|
59
|
+
...opts,
|
|
60
|
+
pin: false,
|
|
61
|
+
dagBuilder: async function* (source, block, opts) {
|
|
62
|
+
for await (const entry of source) {
|
|
63
|
+
yield async function () {
|
|
64
|
+
// @ts-expect-error cannot derive type
|
|
65
|
+
const node = entry.content;
|
|
66
|
+
const buf = dagPB.encode(node);
|
|
67
|
+
const cid = await persist(buf, block, opts);
|
|
68
|
+
if (node.Data == null) {
|
|
69
|
+
throw new InvalidPBNodeError(`${cid} had no data`);
|
|
70
|
+
}
|
|
71
|
+
const unixfs = UnixFS.unmarshal(node.Data);
|
|
72
|
+
return {
|
|
73
|
+
cid,
|
|
74
|
+
size: buf.length,
|
|
75
|
+
path: entry.path,
|
|
76
|
+
unixfs
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}), async (nodes) => await last(nodes));
|
|
82
|
+
if (root == null) {
|
|
83
|
+
throw new UnknownError(`Could not chmod ${resolved.cid.toString()}`);
|
|
84
|
+
}
|
|
85
|
+
return await updatePathCids(root.cid, resolved, blockstore, options);
|
|
86
|
+
}
|
|
87
|
+
const block = await blockstore.get(resolved.cid);
|
|
88
|
+
let metadata;
|
|
89
|
+
let links = [];
|
|
90
|
+
if (resolved.cid.code === raw.code) {
|
|
91
|
+
metadata = new UnixFS({ data: block });
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
const node = dagPB.decode(block);
|
|
95
|
+
links = node.Links;
|
|
96
|
+
if (node.Data == null) {
|
|
97
|
+
throw new InvalidPBNodeError(`${resolved.cid.toString()} had no data`);
|
|
98
|
+
}
|
|
99
|
+
metadata = UnixFS.unmarshal(node.Data);
|
|
100
|
+
}
|
|
101
|
+
metadata.mtime = mtime;
|
|
102
|
+
const updatedBlock = dagPB.encode({
|
|
103
|
+
Data: metadata.marshal(),
|
|
104
|
+
Links: links
|
|
105
|
+
});
|
|
106
|
+
const hash = await sha256.digest(updatedBlock);
|
|
107
|
+
const updatedCid = CID.create(resolved.cid.version, dagPB.code, hash);
|
|
108
|
+
await blockstore.put(updatedCid, updatedBlock);
|
|
109
|
+
return await updatePathCids(updatedCid, resolved, blockstore, options);
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=touch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"touch.js","sourceRoot":"","sources":["../../../src/commands/touch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAEtC,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACpF,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C,OAAO,IAAI,MAAM,SAAS,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAA;AAE9C,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAA;AAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAA;AAExC,MAAM,cAAc,GAAG;IACrB,SAAS,EAAE,KAAK;CACjB,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAE,GAAQ,EAAE,UAAsB,EAAE,UAAiC,EAAE;IAChG,MAAM,IAAI,GAAiB,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAChE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IAChE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI;QAC1B,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;QACvB,KAAK,EAAE,CAAC;KACT,CAAA;IAED,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAEvC,IAAI,IAAI,CAAC,SAAS,EAAE;QAClB,6EAA6E;QAC7E,0DAA0D;QAC1D,MAAM,IAAI,GAAG,MAAM,IAAI,CACrB,KAAK,SAAU,CAAC;YACd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE;gBAC7D,IAAI,QAAgB,CAAA;gBACpB,IAAI,KAAe,CAAA;gBAEnB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;oBACxB,QAAQ,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;oBAC3C,KAAK,GAAG,EAAE,CAAA;iBACX;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;oBAC9D,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAA;oBACvB,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAA;iBACzB;qBAAM;oBACL,MAAM,IAAI,cAAc,EAAE,CAAA;iBAC3B;gBAED,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAA;gBAEtB,MAAM,IAAI,GAAG;oBACX,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE;oBACxB,KAAK,EAAE,KAAK;iBACb,CAAA;gBAED,MAAM;oBACJ,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,IAAI;iBACd,CAAA;aACF;QACH,CAAC;QACD,iGAAiG;QACjG,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE;YACvC,GAAG,IAAI;YACP,GAAG,EAAE,KAAK;YACV,UAAU,EAAE,KAAK,SAAU,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI;gBAC/C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE;oBAChC,MAAM,KAAK;wBACT,sCAAsC;wBACtC,MAAM,IAAI,GAAW,KAAK,CAAC,OAAO,CAAA;wBAElC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;wBAC9B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;wBAE3C,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;4BACrB,MAAM,IAAI,kBAAkB,CAAC,GAAG,GAAG,cAAc,CAAC,CAAA;yBACnD;wBAED,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;wBAE1C,OAAO;4BACL,GAAG;4BACH,IAAI,EAAE,GAAG,CAAC,MAAM;4BAChB,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,MAAM;yBACP,CAAA;oBACH,CAAC,CAAA;iBACF;YACH,CAAC;SACF,CAAC,EACF,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CACnC,CAAA;QAED,IAAI,IAAI,IAAI,IAAI,EAAE;YAChB,MAAM,IAAI,YAAY,CAAC,mBAAmB,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;SACrE;QAED,OAAO,MAAM,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;KACrE;IAED,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IAChD,IAAI,QAAgB,CAAA;IACpB,IAAI,KAAK,GAAa,EAAE,CAAA;IAExB,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE;QAClC,QAAQ,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;KACvC;SAAM;QACL,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAChC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAElB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;YACrB,MAAM,IAAI,kBAAkB,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;SACvE;QAED,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KACvC;IAED,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAA;IACtB,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC;QAChC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE;QACxB,KAAK,EAAE,KAAK;KACb,CAAC,CAAA;IAEF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IAC9C,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAErE,MAAM,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IAE9C,OAAO,MAAM,cAAc,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;AACxE,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CID } from 'multiformats/cid';
|
|
2
|
+
import type { Blockstore } from 'ipfs-unixfs-exporter';
|
|
3
|
+
import type { PBNode, PBLink } from '@ipld/dag-pb/interface';
|
|
4
|
+
import type { Bucket } from 'hamt-sharding';
|
|
5
|
+
import type { AbortOptions } from '@libp2p/interfaces';
|
|
6
|
+
import type { Directory } from './cid-to-directory.js';
|
|
7
|
+
export interface AddLinkResult {
|
|
8
|
+
node: PBNode;
|
|
9
|
+
cid: CID;
|
|
10
|
+
size: number;
|
|
11
|
+
}
|
|
12
|
+
export interface AddLinkOptions extends AbortOptions {
|
|
13
|
+
allowOverwriting: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function addLink(parent: Directory, child: Required<PBLink>, blockstore: Blockstore, options: AddLinkOptions): Promise<AddLinkResult>;
|
|
16
|
+
export interface BucketPath {
|
|
17
|
+
bucket: Bucket<any>;
|
|
18
|
+
prefix: string;
|
|
19
|
+
node?: PBNode;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=add-link.d.ts.map
|