@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.
Files changed (104) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +53 -0
  3. package/dist/index.min.js +3 -0
  4. package/dist/src/commands/add.d.ts +6 -0
  5. package/dist/src/commands/add.d.ts.map +1 -0
  6. package/dist/src/commands/add.js +38 -0
  7. package/dist/src/commands/add.js.map +1 -0
  8. package/dist/src/commands/cat.d.ts +5 -0
  9. package/dist/src/commands/cat.d.ts.map +1 -0
  10. package/dist/src/commands/cat.js +22 -0
  11. package/dist/src/commands/cat.js.map +1 -0
  12. package/dist/src/commands/chmod.d.ts +5 -0
  13. package/dist/src/commands/chmod.d.ts.map +1 -0
  14. package/dist/src/commands/chmod.js +108 -0
  15. package/dist/src/commands/chmod.js.map +1 -0
  16. package/dist/src/commands/cp.d.ts +5 -0
  17. package/dist/src/commands/cp.d.ts.map +1 -0
  18. package/dist/src/commands/cp.js +28 -0
  19. package/dist/src/commands/cp.js.map +1 -0
  20. package/dist/src/commands/ls.d.ts +5 -0
  21. package/dist/src/commands/ls.d.ts.map +1 -0
  22. package/dist/src/commands/ls.js +26 -0
  23. package/dist/src/commands/ls.js.map +1 -0
  24. package/dist/src/commands/mkdir.d.ts +5 -0
  25. package/dist/src/commands/mkdir.d.ts.map +1 -0
  26. package/dist/src/commands/mkdir.js +53 -0
  27. package/dist/src/commands/mkdir.js.map +1 -0
  28. package/dist/src/commands/rm.d.ts +5 -0
  29. package/dist/src/commands/rm.d.ts.map +1 -0
  30. package/dist/src/commands/rm.js +19 -0
  31. package/dist/src/commands/rm.js.map +1 -0
  32. package/dist/src/commands/stat.d.ts +5 -0
  33. package/dist/src/commands/stat.d.ts.map +1 -0
  34. package/dist/src/commands/stat.js +108 -0
  35. package/dist/src/commands/stat.js.map +1 -0
  36. package/dist/src/commands/touch.d.ts +5 -0
  37. package/dist/src/commands/touch.d.ts.map +1 -0
  38. package/dist/src/commands/touch.js +111 -0
  39. package/dist/src/commands/touch.js.map +1 -0
  40. package/dist/src/commands/utils/add-link.d.ts +21 -0
  41. package/dist/src/commands/utils/add-link.d.ts.map +1 -0
  42. package/dist/src/commands/utils/add-link.js +224 -0
  43. package/dist/src/commands/utils/add-link.js.map +1 -0
  44. package/dist/src/commands/utils/cid-to-directory.d.ts +10 -0
  45. package/dist/src/commands/utils/cid-to-directory.d.ts.map +1 -0
  46. package/dist/src/commands/utils/cid-to-directory.js +13 -0
  47. package/dist/src/commands/utils/cid-to-directory.js.map +1 -0
  48. package/dist/src/commands/utils/cid-to-pblink.d.ts +6 -0
  49. package/dist/src/commands/utils/cid-to-pblink.d.ts.map +1 -0
  50. package/dist/src/commands/utils/cid-to-pblink.js +19 -0
  51. package/dist/src/commands/utils/cid-to-pblink.js.map +1 -0
  52. package/dist/src/commands/utils/dir-sharded.d.ts +67 -0
  53. package/dist/src/commands/utils/dir-sharded.d.ts.map +1 -0
  54. package/dist/src/commands/utils/dir-sharded.js +136 -0
  55. package/dist/src/commands/utils/dir-sharded.js.map +1 -0
  56. package/dist/src/commands/utils/errors.d.ts +17 -0
  57. package/dist/src/commands/utils/errors.d.ts.map +1 -0
  58. package/dist/src/commands/utils/errors.js +27 -0
  59. package/dist/src/commands/utils/errors.js.map +1 -0
  60. package/dist/src/commands/utils/hamt-constants.d.ts +4 -0
  61. package/dist/src/commands/utils/hamt-constants.d.ts.map +1 -0
  62. package/dist/src/commands/utils/hamt-constants.js +13 -0
  63. package/dist/src/commands/utils/hamt-constants.js.map +1 -0
  64. package/dist/src/commands/utils/hamt-utils.d.ts +37 -0
  65. package/dist/src/commands/utils/hamt-utils.d.ts.map +1 -0
  66. package/dist/src/commands/utils/hamt-utils.js +202 -0
  67. package/dist/src/commands/utils/hamt-utils.js.map +1 -0
  68. package/dist/src/commands/utils/persist.d.ts +10 -0
  69. package/dist/src/commands/utils/persist.d.ts.map +1 -0
  70. package/dist/src/commands/utils/persist.js +12 -0
  71. package/dist/src/commands/utils/persist.js.map +1 -0
  72. package/dist/src/commands/utils/remove-link.d.ts +11 -0
  73. package/dist/src/commands/utils/remove-link.d.ts.map +1 -0
  74. package/dist/src/commands/utils/remove-link.js +92 -0
  75. package/dist/src/commands/utils/remove-link.js.map +1 -0
  76. package/dist/src/commands/utils/resolve.d.ts +28 -0
  77. package/dist/src/commands/utils/resolve.d.ts.map +1 -0
  78. package/dist/src/commands/utils/resolve.js +85 -0
  79. package/dist/src/commands/utils/resolve.js.map +1 -0
  80. package/dist/src/index.d.ts +97 -0
  81. package/dist/src/index.d.ts.map +1 -0
  82. package/dist/src/index.js +48 -0
  83. package/dist/src/index.js.map +1 -0
  84. package/package.json +166 -0
  85. package/src/commands/add.ts +46 -0
  86. package/src/commands/cat.ts +31 -0
  87. package/src/commands/chmod.ts +133 -0
  88. package/src/commands/cp.ts +41 -0
  89. package/src/commands/ls.ts +36 -0
  90. package/src/commands/mkdir.ts +71 -0
  91. package/src/commands/rm.ts +31 -0
  92. package/src/commands/stat.ts +137 -0
  93. package/src/commands/touch.ts +136 -0
  94. package/src/commands/utils/add-link.ts +319 -0
  95. package/src/commands/utils/cid-to-directory.ts +23 -0
  96. package/src/commands/utils/cid-to-pblink.ts +26 -0
  97. package/src/commands/utils/dir-sharded.ts +219 -0
  98. package/src/commands/utils/errors.ts +31 -0
  99. package/src/commands/utils/hamt-constants.ts +14 -0
  100. package/src/commands/utils/hamt-utils.ts +285 -0
  101. package/src/commands/utils/persist.ts +22 -0
  102. package/src/commands/utils/remove-link.ts +151 -0
  103. package/src/commands/utils/resolve.ts +130 -0
  104. 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":"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"}
@@ -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