@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,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":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EACL,MAAM,EACN,UAAU,EACX,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,IAAI,MAAM,SAAS,CAAA;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,cAAc,EACf,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAOjD,MAAM,GAAG,GAAG,MAAM,CAAC,wCAAwC,CAAC,CAAA;AAQ5D,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,MAAiB,EAAE,UAAsB,EAAE,KAAe,EAAE,MAAmB,EAAE,OAAqB,EAA6B,EAAE;IAC7K,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;KAC9E;IAED,mCAAmC;IACnC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;IACnE,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC/C,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC;QACrB,IAAI,EAAE,wBAAwB;QAC9B,IAAI;QACJ,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE;QAC1B,QAAQ,EAAE,YAAY;QACtB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAA;IAEF,MAAM,CAAC,IAAI,GAAG;QACZ,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE;QACnB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;KACxE,CAAA;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACrC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACrC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAE5D,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;IAEvC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG;QACH,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;KACvE,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,UAAsB,EAAE,KAAe,EAAE,UAAuB,EAAE,YAAyB,EAAE,gBAAwB,EAAE,OAAqB,EAAwB,EAAE;IAC5M,kCAAkC;IAClC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACxB,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI;QAC9B,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI;KAC/B,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAA;IAClC,YAAY,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;IAEnD,MAAM,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAE1E,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,KAAe,EAAwB,EAAE;IACtF,MAAM,MAAM,GAAG,UAAU,CAAC;QACxB,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,cAAc;KACrB,CAAC,CAAA;IAEF,kFAAkF;IAClF,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;QACrB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAElC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YAElC,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC;gBAC3B,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;gBAC1B,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;aAC3B,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;YACf,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;YAEnC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YAAC,OAAM;SAChC;QAED,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YACtC,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,GAAG,EAAE,IAAI,CAAC,IAAI;SACf,CAAC,CAAA;IACJ,CAAC,CAAC,CACH,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,UAAsB,EAAE,KAAe,EAAE,MAAmB,EAAE,UAAuB,EAAE,OAAqB,EAAiB,EAAE;IACxK,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;QACrB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAElC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,GAAG,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAA;YACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YAClC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YACtD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAEhC,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC;gBAC3B,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI;gBAC9B,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI;aAC/B,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;YACf,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;YAEnC,MAAM,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;YAElF,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YAAC,OAAM;SAChC;QAED,MAAM,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YAC1C,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,GAAG,EAAE,IAAI,CAAC,IAAI;SACf,CAAC,CAAA;IACJ,CAAC,CAAC,CACH,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAU,EAAE;IACnD,OAAO,QAAQ;SACZ,QAAQ,CAAC,EAAE,CAAC;SACZ,WAAW,EAAE;SACb,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;SAChB,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACpB,CAAC,CAAA;AAWD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,MAAiB,EAAE,IAAY,EAAE,UAAsB,EAAE,OAAqB,EAAqB,EAAE;IACtI,+DAA+D;IAC/D,MAAM,UAAU,GAAG,MAAM,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpE,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;IAE5D,8BAA8B;IAC9B,MAAM,IAAI,GAAkE,CAAC;YAC3E,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;SAC/B,CAAC,CAAA;IACF,IAAI,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAA;IAEnC,OAAO,aAAa,KAAK,UAAU,EAAE;QACnC,IAAI,CAAC,IAAI,CAAC;YACR,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC;SAC7C,CAAC,CAAA;QAEF,qEAAqE;QACrE,aAAa,GAAG,aAAa,CAAC,OAAO,CAAA;KACtC;IAED,IAAI,CAAC,OAAO,EAAE,CAAA;IACd,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IAE1B,oCAAoC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAEvB,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;SAChD;QAED,uBAAuB;QACvB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK;aAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC;aACpE,GAAG,EAAE,CAAA;QAER,yBAAyB;QACzB,IAAI,IAAI,IAAI,IAAI,EAAE;YAChB,mEAAmE;YACnE,GAAG,CAAC,QAAQ,OAAO,CAAC,MAAM,GAAG,IAAI,gBAAgB,CAAC,CAAA;YAClD,cAAc;YACd,SAAQ;SACT;QAED,cAAc;QACd,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,EAAE,EAAE;YAC5C,GAAG,CAAC,QAAQ,OAAO,CAAC,MAAM,GAAG,IAAI,mBAAmB,CAAC,CAAA;YACrD,iEAAiE;YACjE,cAAc;YACd,SAAQ;SACT;QAED,iBAAiB;QACjB,GAAG,CAAC,kBAAkB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QACvC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACtD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAEhC,qEAAqE;QACrE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE;YACvB,GAAG,CAAC,uBAAuB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;YAE5C,MAAM,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;YAClH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;YAE5D,MAAM;YACN,IAAI,CAAC,IAAI,CAAC;gBACR,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC9B,IAAI;aACL,CAAC,CAAA;YAEF,SAAQ;SACT;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAE/B,mCAAmC;QACnC,MAAM,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;QAE3F,WAAW,CAAC,IAAI,GAAG,IAAI,CAAA;KACxB;IAED,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAEhC,IAAI,CAAC,OAAO,EAAE,CAAA;IAEd,OAAO;QACL,UAAU;QACV,IAAI;KACL,CAAA;AACH,CAAC,CAAA;AAOD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,UAAsB,EAAE,QAAyD,EAAE,UAA8B,EAAE,EAAyB,EAAE;IAC9K,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC;QAC3B,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,IAAI;QACT,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,EAAE,OAAO,CAAC,CAAA;IAEX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YACxC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;YACtB,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG;SACrB,CAAC,CAAA;KACH;IAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;IAE/C,IAAI,GAAG,IAAI,IAAI,EAAE;QACf,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;KACpD;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
@@ -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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"}