@helia/unixfs 1.0.3 → 1.0.5

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 (32) hide show
  1. package/dist/index.min.js +1 -1
  2. package/dist/src/commands/add.d.ts +1 -1
  3. package/dist/src/commands/add.d.ts.map +1 -1
  4. package/dist/src/commands/add.js +35 -5
  5. package/dist/src/commands/add.js.map +1 -1
  6. package/dist/src/commands/utils/add-link.d.ts +0 -7
  7. package/dist/src/commands/utils/add-link.d.ts.map +1 -1
  8. package/dist/src/commands/utils/add-link.js +97 -128
  9. package/dist/src/commands/utils/add-link.js.map +1 -1
  10. package/dist/src/commands/utils/consumable-hash.d.ts +25 -0
  11. package/dist/src/commands/utils/consumable-hash.d.ts.map +1 -0
  12. package/dist/src/commands/utils/consumable-hash.js +136 -0
  13. package/dist/src/commands/utils/consumable-hash.js.map +1 -0
  14. package/dist/src/commands/utils/hamt-utils.d.ts +17 -20
  15. package/dist/src/commands/utils/hamt-utils.d.ts.map +1 -1
  16. package/dist/src/commands/utils/hamt-utils.js +105 -164
  17. package/dist/src/commands/utils/hamt-utils.js.map +1 -1
  18. package/dist/src/commands/utils/persist.d.ts +1 -1
  19. package/dist/src/commands/utils/remove-link.d.ts.map +1 -1
  20. package/dist/src/commands/utils/remove-link.js +35 -91
  21. package/dist/src/commands/utils/remove-link.js.map +1 -1
  22. package/dist/src/commands/utils/resolve.d.ts.map +1 -1
  23. package/dist/src/commands/utils/resolve.js +5 -2
  24. package/dist/src/commands/utils/resolve.js.map +1 -1
  25. package/package.json +3 -3
  26. package/src/commands/add.ts +37 -6
  27. package/src/commands/utils/add-link.ts +107 -170
  28. package/src/commands/utils/consumable-hash.ts +174 -0
  29. package/src/commands/utils/hamt-utils.ts +140 -226
  30. package/src/commands/utils/persist.ts +1 -1
  31. package/src/commands/utils/remove-link.ts +38 -110
  32. package/src/commands/utils/resolve.ts +8 -3
@@ -1,32 +1,16 @@
1
- import { Bucket } from 'hamt-sharding';
1
+ import * as dagPB from '@ipld/dag-pb';
2
2
  import type { CID, Version } from 'multiformats/cid';
3
- import type { PBLink, PBNode } from '@ipld/dag-pb/interface';
4
3
  import type { Blockstore } from 'interface-blockstore';
5
4
  import type { Mtime } from 'ipfs-unixfs';
6
- import type { Directory } from './cid-to-directory.js';
7
5
  import type { AbortOptions } from '@libp2p/interfaces';
8
6
  import type { ImportResult } from 'ipfs-unixfs-importer';
9
- export interface UpdateHamtResult {
10
- node: PBNode;
11
- cid: CID;
12
- size: number;
13
- }
7
+ import { InfiniteHash } from './consumable-hash.js';
8
+ import SparseArray from 'sparse-array';
9
+ import type { PersistOptions } from './persist.js';
14
10
  export interface UpdateHamtDirectoryOptions extends AbortOptions {
15
11
  cidVersion: Version;
16
12
  }
17
- export declare const updateHamtDirectory: (pbNode: PBNode, blockstore: Blockstore, bucket: Bucket<any>, options: UpdateHamtDirectoryOptions) => Promise<UpdateHamtResult>;
18
- export declare const recreateHamtLevel: (blockstore: Blockstore, links: PBLink[], rootBucket: Bucket<any>, parentBucket: Bucket<any>, positionAtParent: number, options: AbortOptions) => Promise<Bucket<any>>;
19
- export declare const recreateInitialHamtLevel: (links: PBLink[]) => Promise<Bucket<any>>;
20
- export declare const addLinksToHamtBucket: (blockstore: Blockstore, links: PBLink[], bucket: Bucket<any>, rootBucket: Bucket<any>, options: AbortOptions) => Promise<void>;
21
13
  export declare const toPrefix: (position: number) => string;
22
- export interface HamtPathSegment {
23
- bucket?: Bucket<any>;
24
- prefix?: string;
25
- node?: PBNode;
26
- cid?: CID;
27
- size?: number;
28
- }
29
- export declare const generatePath: (root: Directory, name: string, blockstore: Blockstore, options: AbortOptions) => Promise<HamtPathSegment[]>;
30
14
  export interface CreateShardOptions {
31
15
  mtime?: Mtime;
32
16
  mode?: number;
@@ -37,4 +21,17 @@ export declare const createShard: (blockstore: Blockstore, contents: Array<{
37
21
  size: bigint;
38
22
  cid: CID;
39
23
  }>, options: CreateShardOptions) => Promise<ImportResult>;
24
+ export interface HAMTPath {
25
+ prefix: string;
26
+ children: SparseArray;
27
+ node: dagPB.PBNode;
28
+ }
29
+ export declare const updateShardedDirectory: (path: HAMTPath[], blockstore: Blockstore, options: PersistOptions) => Promise<{
30
+ cid: CID;
31
+ node: dagPB.PBNode;
32
+ }>;
33
+ export declare const recreateShardedDirectory: (cid: CID, fileName: string, blockstore: Blockstore, options: AbortOptions) => Promise<{
34
+ path: HAMTPath[];
35
+ hash: InfiniteHash;
36
+ }>;
40
37
  //# sourceMappingURL=hamt-utils.d.ts.map
@@ -1 +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,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAMpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC5D,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;AAKxD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,GAAG,CAAA;IACR,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,0BAA2B,SAAQ,YAAY;IAC9D,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,eAAO,MAAM,mBAAmB,WAAkB,MAAM,cAAc,UAAU,UAAU,OAAO,GAAG,CAAC,WAAW,0BAA0B,KAAG,QAAQ,gBAAgB,CA6BpK,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,CA8BnF,CAAA;AAED,eAAO,MAAM,oBAAoB,eAAsB,UAAU,SAAS,MAAM,EAAE,UAAU,OAAO,GAAG,CAAC,cAAc,OAAO,GAAG,CAAC,WAAW,YAAY,KAAG,QAAQ,IAAI,CA2BrK,CAAA;AAED,eAAO,MAAM,QAAQ,aAAc,MAAM,KAAG,MAM3C,CAAA;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,YAAY,SAAgB,SAAS,QAAQ,MAAM,cAAc,UAAU,WAAW,YAAY,KAAG,QAAQ,eAAe,EAAE,CAsG1I,CAAA;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,eAAO,MAAM,WAAW,eAAsB,UAAU,YAAY,MAAM;IAAE,MAAM,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,CAAC,WAAW,kBAAkB,KAAG,QAAQ,YAAY,CA2BtK,CAAA"}
1
+ {"version":3,"file":"hamt-utils.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/hamt-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAKrC,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAMpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,EAAE,YAAY,EAAY,MAAM,sBAAsB,CAAA;AAG7D,OAAO,WAAW,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAIlD,MAAM,WAAW,0BAA2B,SAAQ,YAAY;IAC9D,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,eAAO,MAAM,QAAQ,aAAc,MAAM,KAAG,MAM3C,CAAA;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,eAAO,MAAM,WAAW,eAAsB,UAAU,YAAY,MAAM;IAAE,MAAM,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,CAAC,WAAW,kBAAkB,KAAG,QAAQ,YAAY,CA2BtK,CAAA;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,WAAW,CAAA;IACrB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,sBAAsB,SAAgB,QAAQ,EAAE,cAAc,UAAU,WAAW,cAAc;SAAkB,GAAG;UAAQ,MAAM,MAAM;EAiEtJ,CAAA;AAED,eAAO,MAAM,wBAAwB,QAAe,GAAG,YAAY,MAAM,cAAc,UAAU,WAAW,YAAY;UAAmB,QAAQ,EAAE;UAAQ,YAAY;EA+DxK,CAAA"}
@@ -1,94 +1,15 @@
1
1
  import * as dagPB from '@ipld/dag-pb';
2
- import { Bucket, createHAMT } from 'hamt-sharding';
3
2
  import { DirSharded } from './dir-sharded.js';
4
3
  import { logger } from '@libp2p/logger';
5
4
  import { UnixFS } from 'ipfs-unixfs';
6
5
  import last from 'it-last';
7
6
  import { hamtHashCode, hamtHashFn, hamtBucketBits } from './hamt-constants.js';
8
7
  import { persist } from './persist.js';
8
+ import { wrapHash } from './consumable-hash.js';
9
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
10
+ // @ts-expect-error no types
11
+ import SparseArray from 'sparse-array';
9
12
  const log = logger('helia:unixfs:commands:utils:hamt-utils');
10
- export const updateHamtDirectory = async (pbNode, blockstore, bucket, options) => {
11
- if (pbNode.Data == null) {
12
- throw new Error('Could not update HAMT directory because parent had no data');
13
- }
14
- // update parent with new bit field
15
- const node = UnixFS.unmarshal(pbNode.Data);
16
- const dir = new UnixFS({
17
- type: 'hamt-sharded-directory',
18
- data: Uint8Array.from(bucket._children.bitField().reverse()),
19
- fanout: BigInt(bucket.tableSize()),
20
- hashType: hamtHashCode,
21
- mode: node.mode,
22
- mtime: node.mtime
23
- });
24
- const updatedPbNode = {
25
- Data: dir.marshal(),
26
- Links: pbNode.Links
27
- };
28
- const buf = dagPB.encode(dagPB.prepare(updatedPbNode));
29
- const cid = await persist(buf, blockstore, options);
30
- return {
31
- node: updatedPbNode,
32
- cid,
33
- size: pbNode.Links.reduce((sum, link) => sum + (link.Tsize ?? 0), buf.byteLength)
34
- };
35
- };
36
- export const recreateHamtLevel = async (blockstore, links, rootBucket, parentBucket, positionAtParent, options) => {
37
- // recreate this level of the HAMT
38
- const bucket = new Bucket({
39
- hash: rootBucket._options.hash,
40
- bits: rootBucket._options.bits
41
- }, parentBucket, positionAtParent);
42
- parentBucket._putObjectAt(positionAtParent, bucket);
43
- await addLinksToHamtBucket(blockstore, links, bucket, rootBucket, options);
44
- return bucket;
45
- };
46
- export const recreateInitialHamtLevel = async (links) => {
47
- const bucket = createHAMT({
48
- hashFn: hamtHashFn,
49
- bits: hamtBucketBits
50
- });
51
- // populate sub bucket but do not recurse as we do not want to load the whole shard
52
- await Promise.all(links.map(async (link) => {
53
- const linkName = (link.Name ?? '');
54
- if (linkName.length === 2) {
55
- const pos = parseInt(linkName, 16);
56
- const subBucket = new Bucket({
57
- hash: bucket._options.hash,
58
- bits: bucket._options.bits
59
- }, bucket, pos);
60
- bucket._putObjectAt(pos, subBucket);
61
- return;
62
- }
63
- await bucket.put(linkName.substring(2), {
64
- size: link.Tsize,
65
- cid: link.Hash
66
- });
67
- }));
68
- return bucket;
69
- };
70
- export const addLinksToHamtBucket = async (blockstore, links, bucket, rootBucket, options) => {
71
- await Promise.all(links.map(async (link) => {
72
- const linkName = (link.Name ?? '');
73
- if (linkName.length === 2) {
74
- log('Populating sub bucket', linkName);
75
- const pos = parseInt(linkName, 16);
76
- const block = await blockstore.get(link.Hash, options);
77
- const node = dagPB.decode(block);
78
- const subBucket = new Bucket({
79
- hash: rootBucket._options.hash,
80
- bits: rootBucket._options.bits
81
- }, bucket, pos);
82
- bucket._putObjectAt(pos, subBucket);
83
- await addLinksToHamtBucket(blockstore, node.Links, subBucket, rootBucket, options);
84
- return;
85
- }
86
- await rootBucket.put(linkName.substring(2), {
87
- size: link.Tsize,
88
- cid: link.Hash
89
- });
90
- }));
91
- };
92
13
  export const toPrefix = (position) => {
93
14
  return position
94
15
  .toString(16)
@@ -96,87 +17,6 @@ export const toPrefix = (position) => {
96
17
  .padStart(2, '0')
97
18
  .substring(0, 2);
98
19
  };
99
- export const generatePath = async (root, name, blockstore, options) => {
100
- // start at the root bucket and descend, loading nodes as we go
101
- const rootBucket = await recreateInitialHamtLevel(root.node.Links);
102
- const position = await rootBucket._findNewBucketAndPos(name);
103
- const path = [{
104
- bucket: position.bucket,
105
- prefix: toPrefix(position.pos)
106
- }];
107
- let currentBucket = position.bucket;
108
- while (currentBucket !== rootBucket) {
109
- path.push({
110
- bucket: currentBucket,
111
- prefix: toPrefix(currentBucket._posAtParent)
112
- });
113
- if (currentBucket._parent == null) {
114
- break;
115
- }
116
- currentBucket = currentBucket._parent;
117
- }
118
- // add the root bucket to the path
119
- path.push({
120
- bucket: rootBucket,
121
- node: root.node
122
- });
123
- path.reverse();
124
- // load PbNode for each path segment
125
- for (let i = 1; i < path.length; i++) {
126
- const segment = path[i];
127
- const previousSegment = path[i - 1];
128
- if (previousSegment.node == null) {
129
- throw new Error('Could not generate HAMT path');
130
- }
131
- // find prefix in links
132
- const link = previousSegment.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
- const linkName = link.Name ?? '';
143
- // found entry
144
- if (linkName === `${segment.prefix}${name}`) {
145
- log(`Link ${segment.prefix}${name} will be replaced`);
146
- // file already existed, file will be added to the current bucket
147
- // return path
148
- continue;
149
- }
150
- // found subshard
151
- log(`Found subshard ${segment.prefix}`);
152
- const block = await blockstore.get(link.Hash);
153
- const node = segment.node = dagPB.decode(block);
154
- // subshard hasn't been loaded, descend to the next level of the HAMT
155
- if (path[i + 1] == null) {
156
- log(`Loaded new subshard ${segment.prefix}`);
157
- if (segment.bucket == null || segment.prefix == null) {
158
- throw new Error('Shard was invalid');
159
- }
160
- await recreateHamtLevel(blockstore, node.Links, rootBucket, segment.bucket, parseInt(segment.prefix, 16), options);
161
- const position = await rootBucket._findNewBucketAndPos(name);
162
- // i--
163
- path.push({
164
- bucket: position.bucket,
165
- prefix: toPrefix(position.pos),
166
- node
167
- });
168
- continue;
169
- }
170
- if (segment.bucket == null) {
171
- throw new Error('Shard was invalid');
172
- }
173
- // add intermediate links to bucket
174
- await addLinksToHamtBucket(blockstore, node.Links, segment.bucket, rootBucket, options);
175
- }
176
- await rootBucket.put(name, true);
177
- path.reverse();
178
- return path;
179
- };
180
20
  export const createShard = async (blockstore, contents, options) => {
181
21
  const shard = new DirSharded({
182
22
  root: true,
@@ -201,4 +41,105 @@ export const createShard = async (blockstore, contents, options) => {
201
41
  }
202
42
  return res;
203
43
  };
44
+ export const updateShardedDirectory = async (path, blockstore, options) => {
45
+ // persist any metadata on the shard root
46
+ const shardRoot = UnixFS.unmarshal(path[0].node.Data ?? new Uint8Array(0));
47
+ // this is always the same
48
+ const fanout = BigInt(Math.pow(2, hamtBucketBits));
49
+ // start from the leaf and ascend to the root
50
+ path.reverse();
51
+ let cid;
52
+ let node;
53
+ for (let i = 0; i < path.length; i++) {
54
+ const isRoot = i === path.length - 1;
55
+ const segment = path[i];
56
+ // go-ipfs uses little endian, that's why we have to
57
+ // reverse the bit field before storing it
58
+ const data = Uint8Array.from(segment.children.bitField().reverse());
59
+ const dir = new UnixFS({
60
+ type: 'hamt-sharded-directory',
61
+ data,
62
+ fanout,
63
+ hashType: hamtHashCode
64
+ });
65
+ if (isRoot) {
66
+ dir.mtime = shardRoot.mtime;
67
+ dir.mode = shardRoot.mode;
68
+ }
69
+ node = {
70
+ Data: dir.marshal(),
71
+ Links: segment.node.Links
72
+ };
73
+ const block = dagPB.encode(dagPB.prepare(node));
74
+ cid = await persist(block, blockstore, options);
75
+ if (!isRoot) {
76
+ // update link in parent sub-shard
77
+ const nextSegment = path[i + 1];
78
+ if (nextSegment == null) {
79
+ throw new Error('Was not operating on shard root but also had no parent?');
80
+ }
81
+ log('updating link in parent sub-shard with prefix %s', nextSegment.prefix);
82
+ nextSegment.node.Links = nextSegment.node.Links.filter(l => l.Name !== nextSegment.prefix);
83
+ nextSegment.node.Links.push({
84
+ Name: nextSegment.prefix,
85
+ Hash: cid,
86
+ Tsize: segment.node.Links.reduce((acc, curr) => acc + (curr.Tsize ?? 0), block.byteLength)
87
+ });
88
+ }
89
+ }
90
+ if (cid == null || node == null) {
91
+ throw new Error('Noting persisted');
92
+ }
93
+ return { cid, node };
94
+ };
95
+ export const recreateShardedDirectory = async (cid, fileName, blockstore, options) => {
96
+ const wrapped = wrapHash(hamtHashFn);
97
+ const hash = wrapped(uint8ArrayFromString(fileName));
98
+ const path = [];
99
+ // descend the HAMT, loading each layer as we head towards the target child
100
+ while (true) {
101
+ const block = await blockstore.get(cid, options);
102
+ const node = dagPB.decode(block);
103
+ const children = new SparseArray();
104
+ const index = await hash.take(hamtBucketBits);
105
+ const prefix = toPrefix(index);
106
+ path.push({
107
+ prefix,
108
+ children,
109
+ node
110
+ });
111
+ let childLink;
112
+ // update sparsearray child layout - the bitfield is used as the data field for the
113
+ // intermediate DAG node so this is required to generate consistent hashes
114
+ for (const link of node.Links) {
115
+ const linkName = link.Name ?? '';
116
+ if (linkName.length < 2) {
117
+ throw new Error('Invalid HAMT - link name was too short');
118
+ }
119
+ const position = parseInt(linkName.substring(0, 2), 16);
120
+ children.set(position, true);
121
+ // we found the child we are looking for
122
+ if (linkName.startsWith(prefix)) {
123
+ childLink = link;
124
+ }
125
+ }
126
+ if (childLink == null) {
127
+ log('no link found with prefix %s for %s', prefix, fileName);
128
+ // hash.untake(hamtBucketBits)
129
+ break;
130
+ }
131
+ const linkName = childLink.Name ?? '';
132
+ if (linkName.length < 2) {
133
+ throw new Error('Invalid HAMT - link name was too short');
134
+ }
135
+ if (linkName.length === 2) {
136
+ // found sub-shard
137
+ cid = childLink.Hash;
138
+ log('descend into sub-shard with prefix %s', linkName);
139
+ continue;
140
+ }
141
+ break;
142
+ }
143
+ return { path, hash };
144
+ };
204
145
  //# sourceMappingURL=hamt-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hamt-utils.js","sourceRoot":"","sources":["../../../../src/commands/utils/hamt-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hamt-utils.js","sourceRoot":"","sources":["../../../../src/commands/utils/hamt-utils.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { CID } from 'multiformats/cid';
2
- import type { Blockstore } from 'interface-blockstore';
2
+ import type { Blockstore } from 'ipfs-unixfs-importer';
3
3
  import type { BlockCodec } from 'multiformats/codecs/interface';
4
4
  import type { Version as CIDVersion } from 'multiformats/cid';
5
5
  export interface PersistOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"remove-link.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/remove-link.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AASpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAQtD,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,wBAAwB,EAAE,MAAM,CAAA;IAChC,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,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,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwB5I"}
1
+ {"version":3,"file":"remove-link.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/remove-link.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAQpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAQtD,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,wBAAwB,EAAE,MAAM,CAAA;IAChC,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,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,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwB5I"}
@@ -1,7 +1,7 @@
1
1
  import * as dagPB from '@ipld/dag-pb';
2
2
  import { logger } from '@libp2p/logger';
3
3
  import { UnixFS } from 'ipfs-unixfs';
4
- import { generatePath, updateHamtDirectory } from './hamt-utils.js';
4
+ import { recreateShardedDirectory, updateShardedDirectory } from './hamt-utils.js';
5
5
  import { InvalidParametersError, InvalidPBNodeError } from './errors.js';
6
6
  import { exporter } from 'ipfs-unixfs-exporter';
7
7
  import { persist } from './persist.js';
@@ -41,102 +41,46 @@ const removeFromDirectory = async (parent, name, blockstore, options) => {
41
41
  };
42
42
  };
43
43
  const removeFromShardedDirectory = async (parent, name, blockstore, options) => {
44
- const path = await generatePath(parent, name, blockstore, options);
45
- // remove file from root bucket
46
- const rootBucket = path[path.length - 1].bucket;
47
- if (rootBucket == null) {
48
- throw new Error('Could not generate HAMT path');
44
+ const { path } = await recreateShardedDirectory(parent.cid, name, blockstore, options);
45
+ const finalSegment = path[path.length - 1];
46
+ if (finalSegment == null) {
47
+ throw new Error('Invalid HAMT, could not generate path');
49
48
  }
50
- await rootBucket.del(name);
51
- // update all nodes in the shard path
52
- return await updateShard(path, name, blockstore, options);
53
- };
54
- /**
55
- * The `path` param is a list of HAMT path segments starting with th
56
- */
57
- const updateShard = async (path, name, blockstore, options) => {
58
- const fileName = `${path[0].prefix}${name}`;
59
- // skip first path segment as it is the file to remove
60
- for (let i = 1; i < path.length; i++) {
61
- const lastPrefix = path[i - 1].prefix;
62
- const segment = path[i];
63
- if (segment.node == null) {
64
- throw new InvalidParametersError('Path segment had no associated PBNode');
65
- }
66
- const link = segment.node.Links
67
- .find(link => (link.Name ?? '').substring(0, 2) === lastPrefix);
68
- if (link == null) {
69
- throw new InvalidParametersError(`No link found with prefix ${lastPrefix} for file ${name}`);
70
- }
71
- if (link.Name == null) {
72
- throw new InvalidParametersError(`${lastPrefix} link had no name`);
73
- }
74
- if (link.Name === fileName) {
75
- log(`removing existing link ${link.Name}`);
76
- const links = segment.node.Links.filter((nodeLink) => {
77
- return nodeLink.Name !== link.Name;
78
- });
79
- if (segment.bucket == null) {
80
- throw new Error('Segment bucket was missing');
81
- }
82
- await segment.bucket.del(name);
83
- const result = await updateHamtDirectory({
84
- Data: segment.node.Data,
85
- Links: links
86
- }, blockstore, segment.bucket, options);
87
- segment.node = result.node;
88
- segment.cid = result.cid;
89
- segment.size = result.size;
90
- }
91
- if (link.Name === lastPrefix) {
92
- log(`updating subshard with prefix ${lastPrefix}`);
93
- const lastSegment = path[i - 1];
94
- if (lastSegment.node?.Links.length === 1) {
95
- log(`removing subshard for ${lastPrefix}`);
96
- // convert subshard back to normal file entry
97
- const link = lastSegment.node.Links[0];
98
- link.Name = `${lastPrefix}${(link.Name ?? '').substring(2)}`;
99
- // remove existing prefix
100
- segment.node.Links = segment.node.Links.filter((link) => {
101
- return link.Name !== lastPrefix;
102
- });
103
- // add new child
104
- segment.node.Links.push(link);
49
+ const linkName = finalSegment.node.Links.filter(l => (l.Name ?? '').substring(2) === name).map(l => l.Name).pop();
50
+ if (linkName == null) {
51
+ throw new Error('File not found');
52
+ }
53
+ const prefix = linkName.substring(0, 2);
54
+ const index = parseInt(prefix, 16);
55
+ // remove the file from the shard
56
+ finalSegment.node.Links = finalSegment.node.Links.filter(link => link.Name !== linkName);
57
+ finalSegment.children.unset(index);
58
+ if (finalSegment.node.Links.length === 1) {
59
+ // replace the subshard with the last remaining file in the parent
60
+ while (true) {
61
+ if (path.length === 1) {
62
+ break;
105
63
  }
106
- else {
107
- // replace subshard entry
108
- log(`replacing subshard for ${lastPrefix}`);
109
- // remove existing prefix
110
- segment.node.Links = segment.node.Links.filter((link) => {
111
- return link.Name !== lastPrefix;
112
- });
113
- if (lastSegment.cid == null) {
114
- throw new Error('Did not persist previous segment');
115
- }
116
- // add new child
117
- segment.node.Links.push({
118
- Name: lastPrefix,
119
- Hash: lastSegment.cid,
120
- Tsize: lastSegment.size
121
- });
64
+ const segment = path[path.length - 1];
65
+ if (segment == null || segment.node.Links.length > 1) {
66
+ break;
122
67
  }
123
- if (segment.bucket == null) {
124
- throw new Error('Segment bucket was missing');
68
+ // remove final segment
69
+ path.pop();
70
+ const nextSegment = path[path.length - 1];
71
+ if (nextSegment == null) {
72
+ break;
125
73
  }
126
- const result = await updateHamtDirectory(segment.node, blockstore, segment.bucket, options);
127
- segment.node = result.node;
128
- segment.cid = result.cid;
129
- segment.size = result.size;
74
+ const link = segment.node.Links[0];
75
+ nextSegment.node.Links = nextSegment.node.Links.filter(l => !(l.Name ?? '').startsWith(nextSegment.prefix));
76
+ nextSegment.node.Links.push({
77
+ Hash: link.Hash,
78
+ Name: `${nextSegment.prefix}${(link.Name ?? '').substring(2)}`,
79
+ Tsize: link.Tsize
80
+ });
130
81
  }
131
82
  }
132
- const rootSegment = path[path.length - 1];
133
- if (rootSegment == null || rootSegment.cid == null || rootSegment.node == null) {
134
- throw new InvalidParametersError('Failed to update shard');
135
- }
136
- return {
137
- cid: rootSegment.cid,
138
- node: rootSegment.node
139
- };
83
+ return await updateShardedDirectory(path, blockstore, options);
140
84
  };
141
85
  const convertToFlatDirectory = async (parent, blockstore, options) => {
142
86
  if (parent.node.Data == null) {
@@ -1 +1 @@
1
- {"version":3,"file":"remove-link.js","sourceRoot":"","sources":["../../../../src/commands/utils/remove-link.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remove-link.js","sourceRoot":"","sources":["../../../../src/commands/utils/remove-link.ts"],"names":[],"mappings":"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"}
@@ -1 +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;AAE3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAMtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAItD,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,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IACzD,wBAAwB,EAAE,MAAM,CAAA;CACjC;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,CAoC3I"}
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;AAE3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAMtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAItD,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,CA2DxI;AAED,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IACzD,wBAAwB,EAAE,MAAM,CAAA;CACjC;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,CAoC3I"}