@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 @@
1
+ {"version":3,"file":"add-link.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/add-link.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAatC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAI3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAItD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,GAAG,CAAA;IACR,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAED,wBAAsB,OAAO,CAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA6BlJ;AAiOD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;CACd"}
@@ -0,0 +1,224 @@
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 { DirSharded } from './dir-sharded.js';
6
+ import { updateHamtDirectory, recreateHamtLevel, recreateInitialHamtLevel, createShard, toPrefix, addLinksToHamtBucket } from './hamt-utils.js';
7
+ import last from 'it-last';
8
+ import { sha256 } from 'multiformats/hashes/sha2';
9
+ import { AlreadyExistsError, InvalidPBNodeError } from './errors.js';
10
+ import { InvalidParametersError } from '@helia/interface/errors';
11
+ const log = logger('helia:unixfs:components:utils:add-link');
12
+ export async function addLink(parent, child, blockstore, options) {
13
+ if (parent.node.Data == null) {
14
+ throw new InvalidParametersError('Invalid parent passed to addLink');
15
+ }
16
+ // FIXME: this should work on block size not number of links
17
+ if (parent.node.Links.length >= 1000) {
18
+ log('converting directory to sharded directory');
19
+ const result = await convertToShardedDirectory(parent, blockstore);
20
+ parent.cid = result.cid;
21
+ parent.node = dagPB.decode(await blockstore.get(result.cid));
22
+ }
23
+ if (parent.node.Data == null) {
24
+ throw new InvalidParametersError('Invalid parent passed to addLink');
25
+ }
26
+ const meta = UnixFS.unmarshal(parent.node.Data);
27
+ if (meta.type === 'hamt-sharded-directory') {
28
+ log('adding link to sharded directory');
29
+ return await addToShardedDirectory(parent, child, blockstore, options);
30
+ }
31
+ log(`adding ${child.Name} (${child.Hash}) to regular directory`);
32
+ return await addToDirectory(parent, child, blockstore, options);
33
+ }
34
+ const convertToShardedDirectory = async (parent, blockstore) => {
35
+ if (parent.node.Data == null) {
36
+ throw new InvalidParametersError('Invalid parent passed to convertToShardedDirectory');
37
+ }
38
+ const unixfs = UnixFS.unmarshal(parent.node.Data);
39
+ const result = await createShard(blockstore, parent.node.Links.map(link => ({
40
+ name: (link.Name ?? ''),
41
+ size: link.Tsize ?? 0,
42
+ cid: link.Hash
43
+ })), {
44
+ mode: unixfs.mode,
45
+ mtime: unixfs.mtime
46
+ });
47
+ log(`Converted directory to sharded directory ${result.cid}`);
48
+ return result;
49
+ };
50
+ const addToDirectory = async (parent, child, blockstore, options) => {
51
+ // Remove existing link if it exists
52
+ const parentLinks = parent.node.Links.filter((link) => {
53
+ const matches = link.Name === child.Name;
54
+ if (matches && !options.allowOverwriting) {
55
+ throw new AlreadyExistsError();
56
+ }
57
+ return !matches;
58
+ });
59
+ parentLinks.push(child);
60
+ if (parent.node.Data == null) {
61
+ throw new InvalidPBNodeError('Parent node with no data passed to addToDirectory');
62
+ }
63
+ const node = UnixFS.unmarshal(parent.node.Data);
64
+ let data;
65
+ if (node.mtime != null) {
66
+ // Update mtime if previously set
67
+ const ms = Date.now();
68
+ const secs = Math.floor(ms / 1000);
69
+ node.mtime = {
70
+ secs,
71
+ nsecs: (ms - (secs * 1000)) * 1000
72
+ };
73
+ data = node.marshal();
74
+ }
75
+ else {
76
+ data = parent.node.Data;
77
+ }
78
+ parent.node = dagPB.prepare({
79
+ Data: data,
80
+ Links: parentLinks
81
+ });
82
+ // Persist the new parent PbNode
83
+ const buf = dagPB.encode(parent.node);
84
+ const hash = await sha256.digest(buf);
85
+ const cid = CID.create(parent.cid.version, dagPB.code, hash);
86
+ await blockstore.put(cid, buf);
87
+ return {
88
+ node: parent.node,
89
+ cid,
90
+ size: buf.length
91
+ };
92
+ };
93
+ const addToShardedDirectory = async (parent, child, blockstore, options) => {
94
+ const { shard, path } = await addFileToShardedDirectory(parent, child, blockstore, options);
95
+ const result = await last(shard.flush(blockstore));
96
+ if (result == null) {
97
+ throw new Error('No result from flushing shard');
98
+ }
99
+ const block = await blockstore.get(result.cid);
100
+ const node = dagPB.decode(block);
101
+ // we have written out the shard, but only one sub-shard will have been written so replace it in the original shard
102
+ const parentLinks = parent.node.Links.filter((link) => {
103
+ const matches = (link.Name ?? '').substring(0, 2) === path[0].prefix;
104
+ if (matches && !options.allowOverwriting) {
105
+ throw new AlreadyExistsError();
106
+ }
107
+ return !matches;
108
+ });
109
+ const newLink = node.Links
110
+ .find(link => (link.Name ?? '').substring(0, 2) === path[0].prefix);
111
+ if (newLink == null) {
112
+ throw new Error(`No link found with prefix ${path[0].prefix}`);
113
+ }
114
+ parentLinks.push(newLink);
115
+ return await updateHamtDirectory(parent, blockstore, parentLinks, path[0].bucket, options);
116
+ };
117
+ const addFileToShardedDirectory = async (parent, child, blockstore, options) => {
118
+ if (parent.node.Data == null) {
119
+ throw new InvalidPBNodeError('Parent node with no data passed to addFileToShardedDirectory');
120
+ }
121
+ // start at the root bucket and descend, loading nodes as we go
122
+ const rootBucket = await recreateInitialHamtLevel(parent.node.Links);
123
+ const node = UnixFS.unmarshal(parent.node.Data);
124
+ const shard = new DirSharded({
125
+ root: true,
126
+ dir: true,
127
+ parent: undefined,
128
+ parentKey: undefined,
129
+ path: '',
130
+ dirty: true,
131
+ flat: false,
132
+ mode: node.mode
133
+ }, {
134
+ ...options,
135
+ cidVersion: parent.cid.version
136
+ });
137
+ shard._bucket = rootBucket;
138
+ if (node.mtime != null) {
139
+ // update mtime if previously set
140
+ shard.mtime = {
141
+ secs: Math.round(Date.now() / 1000)
142
+ };
143
+ }
144
+ // load subshards until the bucket & position no longer changes
145
+ const position = await rootBucket._findNewBucketAndPos(child.Name);
146
+ const path = toBucketPath(position);
147
+ path[0].node = parent.node;
148
+ let index = 0;
149
+ while (index < path.length) {
150
+ const segment = path[index];
151
+ index++;
152
+ const node = segment.node;
153
+ if (node == null) {
154
+ throw new Error('Segment had no node');
155
+ }
156
+ const link = node.Links
157
+ .find(link => (link.Name ?? '').substring(0, 2) === segment.prefix);
158
+ if (link == null) {
159
+ // prefix is new, file will be added to the current bucket
160
+ log(`Link ${segment.prefix}${child.Name} will be added`);
161
+ index = path.length;
162
+ break;
163
+ }
164
+ if (link.Name === `${segment.prefix}${child.Name}`) {
165
+ // file already existed, file will be added to the current bucket
166
+ log(`Link ${segment.prefix}${child.Name} will be replaced`);
167
+ index = path.length;
168
+ break;
169
+ }
170
+ if ((link.Name ?? '').length > 2) {
171
+ // another file had the same prefix, will be replaced with a subshard
172
+ log(`Link ${link.Name} ${link.Hash} will be replaced with a subshard`);
173
+ index = path.length;
174
+ break;
175
+ }
176
+ // load sub-shard
177
+ log(`Found subshard ${segment.prefix}`);
178
+ const block = await blockstore.get(link.Hash);
179
+ const subShard = dagPB.decode(block);
180
+ // subshard hasn't been loaded, descend to the next level of the HAMT
181
+ if (path[index] == null) {
182
+ log(`Loaded new subshard ${segment.prefix}`);
183
+ await recreateHamtLevel(blockstore, subShard.Links, rootBucket, segment.bucket, parseInt(segment.prefix, 16), options);
184
+ const position = await rootBucket._findNewBucketAndPos(child.Name);
185
+ path.push({
186
+ bucket: position.bucket,
187
+ prefix: toPrefix(position.pos),
188
+ node: subShard
189
+ });
190
+ break;
191
+ }
192
+ const nextSegment = path[index];
193
+ // add next levels worth of links to bucket
194
+ await addLinksToHamtBucket(blockstore, subShard.Links, nextSegment.bucket, rootBucket, options);
195
+ nextSegment.node = subShard;
196
+ }
197
+ // finally add the new file into the shard
198
+ await shard._bucket.put(child.Name, {
199
+ size: child.Tsize,
200
+ cid: child.Hash
201
+ });
202
+ return {
203
+ shard, path
204
+ };
205
+ };
206
+ const toBucketPath = (position) => {
207
+ const path = [{
208
+ bucket: position.bucket,
209
+ prefix: toPrefix(position.pos)
210
+ }];
211
+ let bucket = position.bucket._parent;
212
+ let positionInBucket = position.bucket._posAtParent;
213
+ while (bucket != null) {
214
+ path.push({
215
+ bucket,
216
+ prefix: toPrefix(positionInBucket)
217
+ });
218
+ positionInBucket = bucket._posAtParent;
219
+ bucket = bucket._parent;
220
+ }
221
+ path.reverse();
222
+ return path;
223
+ };
224
+ //# sourceMappingURL=add-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-link.js","sourceRoot":"","sources":["../../../../src/commands/utils/add-link.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Blockstore } from 'ipfs-unixfs-exporter';
2
+ import type { CID } from 'multiformats/cid';
3
+ import type { PBNode } from '@ipld/dag-pb';
4
+ import type { AbortOptions } from '@libp2p/interfaces';
5
+ export interface Directory {
6
+ cid: CID;
7
+ node: PBNode;
8
+ }
9
+ export declare function cidToDirectory(cid: CID, blockstore: Blockstore, options?: AbortOptions): Promise<Directory>;
10
+ //# sourceMappingURL=cid-to-directory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cid-to-directory.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/cid-to-directory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAY,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,GAAG,CAAA;IACR,IAAI,EAAE,MAAM,CAAA;CACb;AAED,wBAAsB,cAAc,CAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,CAWtH"}
@@ -0,0 +1,13 @@
1
+ import { NotADirectoryError } from '@helia/interface/errors';
2
+ import { exporter } from 'ipfs-unixfs-exporter';
3
+ export async function cidToDirectory(cid, blockstore, options = {}) {
4
+ const entry = await exporter(cid, blockstore, options);
5
+ if (entry.type !== 'directory') {
6
+ throw new NotADirectoryError(`${cid.toString()} was not a UnixFS directory`);
7
+ }
8
+ return {
9
+ cid,
10
+ node: entry.node
11
+ };
12
+ }
13
+ //# sourceMappingURL=cid-to-directory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cid-to-directory.js","sourceRoot":"","sources":["../../../../src/commands/utils/cid-to-directory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAc,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAU3D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAE,GAAQ,EAAE,UAAsB,EAAE,UAAwB,EAAE;IAChG,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAEtD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;QAC9B,MAAM,IAAI,kBAAkB,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAA;KAC7E;IAED,OAAO;QACL,GAAG;QACH,IAAI,EAAE,KAAK,CAAC,IAAI;KACjB,CAAA;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Blockstore } from 'ipfs-unixfs-exporter';
2
+ import type { CID } from 'multiformats/cid';
3
+ import type { PBLink } from '@ipld/dag-pb';
4
+ import type { AbortOptions } from '@libp2p/interfaces';
5
+ export declare function cidToPBLink(cid: CID, name: string, blockstore: Blockstore, options?: AbortOptions): Promise<Required<PBLink>>;
6
+ //# sourceMappingURL=cid-to-pblink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cid-to-pblink.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/cid-to-pblink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAY,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAG3C,OAAO,KAAK,EAAU,MAAM,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,wBAAsB,WAAW,CAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAYpI"}
@@ -0,0 +1,19 @@
1
+ import { exporter } from 'ipfs-unixfs-exporter';
2
+ import { NotUnixFSError } from './errors.js';
3
+ import * as dagPb from '@ipld/dag-pb';
4
+ export async function cidToPBLink(cid, name, blockstore, options) {
5
+ const sourceEntry = await exporter(cid, blockstore, options);
6
+ if (sourceEntry.type !== 'directory' && sourceEntry.type !== 'file' && sourceEntry.type !== 'raw') {
7
+ throw new NotUnixFSError(`${cid.toString()} was not a UnixFS node`);
8
+ }
9
+ return {
10
+ Name: name,
11
+ Tsize: sourceEntry.node instanceof Uint8Array ? sourceEntry.node.byteLength : dagNodeTsize(sourceEntry.node),
12
+ Hash: cid
13
+ };
14
+ }
15
+ function dagNodeTsize(node) {
16
+ const linkSizes = node.Links.reduce((acc, curr) => acc + (curr.Tsize ?? 0), 0);
17
+ return dagPb.encode(node).byteLength + linkSizes;
18
+ }
19
+ //# sourceMappingURL=cid-to-pblink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cid-to-pblink.js","sourceRoot":"","sources":["../../../../src/commands/utils/cid-to-pblink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAIrC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,GAAQ,EAAE,IAAY,EAAE,UAAsB,EAAE,OAAsB;IACvG,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAE5D,IAAI,WAAW,CAAC,IAAI,KAAK,WAAW,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,IAAI,WAAW,CAAC,IAAI,KAAK,KAAK,EAAE;QACjG,MAAM,IAAI,cAAc,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAA;KACpE;IAED,OAAO;QACL,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,WAAW,CAAC,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC;QAC5G,IAAI,EAAE,GAAG;KACV,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAE,IAAY;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAE9E,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,SAAS,CAAA;AAClD,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { UnixFS } from 'ipfs-unixfs';
2
+ import { Bucket, BucketChild } from 'hamt-sharding';
3
+ import type { CID, Version } from 'multiformats/cid';
4
+ import type { PBNode } from '@ipld/dag-pb/interface';
5
+ import type { Mtime } from 'ipfs-unixfs';
6
+ import type { BlockCodec } from 'multiformats/codecs/interface';
7
+ import type { Blockstore } from 'ipfs-unixfs-importer';
8
+ export interface ImportResult {
9
+ cid: CID;
10
+ node: PBNode;
11
+ size: number;
12
+ }
13
+ export interface DirContents {
14
+ cid?: CID;
15
+ size?: number;
16
+ }
17
+ export interface DirOptions {
18
+ mtime?: Mtime;
19
+ mode?: number;
20
+ codec?: BlockCodec<any, any>;
21
+ cidVersion?: Version;
22
+ onlyHash?: boolean;
23
+ signal?: AbortSignal;
24
+ }
25
+ export interface DirProps {
26
+ root: boolean;
27
+ dir: boolean;
28
+ path: string;
29
+ dirty: boolean;
30
+ flat: boolean;
31
+ parent?: Dir;
32
+ parentKey?: string;
33
+ unixfs?: UnixFS;
34
+ mode?: number;
35
+ mtime?: Mtime;
36
+ }
37
+ export declare abstract class Dir {
38
+ protected options: DirOptions;
39
+ protected root: boolean;
40
+ protected dir: boolean;
41
+ protected path: string;
42
+ protected dirty: boolean;
43
+ protected flat: boolean;
44
+ protected parent?: Dir;
45
+ protected parentKey?: string;
46
+ protected unixfs?: UnixFS;
47
+ protected mode?: number;
48
+ mtime?: Mtime;
49
+ protected cid?: CID;
50
+ protected size?: number;
51
+ constructor(props: DirProps, options: DirOptions);
52
+ }
53
+ export declare class DirSharded extends Dir {
54
+ _bucket: Bucket<DirContents>;
55
+ constructor(props: DirProps, options: DirOptions);
56
+ put(name: string, value: DirContents): Promise<void>;
57
+ get(name: string): Promise<DirContents | undefined>;
58
+ childCount(): number;
59
+ directChildrenCount(): number;
60
+ onlyChild(): Bucket<DirContents> | BucketChild<DirContents>;
61
+ eachChildSeries(): AsyncGenerator<{
62
+ key: string;
63
+ child: DirContents;
64
+ }>;
65
+ flush(blockstore: Blockstore): AsyncIterable<ImportResult>;
66
+ }
67
+ //# sourceMappingURL=dir-sharded.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dir-sharded.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/dir-sharded.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ import { encode, prepare } from '@ipld/dag-pb';
2
+ import { UnixFS } from 'ipfs-unixfs';
3
+ import { persist } from './persist.js';
4
+ import { createHAMT, Bucket } from 'hamt-sharding';
5
+ import { hamtHashCode, hamtHashFn, hamtBucketBits } from './hamt-constants.js';
6
+ export class Dir {
7
+ constructor(props, options) {
8
+ this.options = options ?? {};
9
+ this.root = props.root;
10
+ this.dir = props.dir;
11
+ this.path = props.path;
12
+ this.dirty = props.dirty;
13
+ this.flat = props.flat;
14
+ this.parent = props.parent;
15
+ this.parentKey = props.parentKey;
16
+ this.unixfs = props.unixfs;
17
+ this.mode = props.mode;
18
+ this.mtime = props.mtime;
19
+ }
20
+ }
21
+ export class DirSharded extends Dir {
22
+ constructor(props, options) {
23
+ super(props, options);
24
+ /** @type {Bucket<DirContents>} */
25
+ this._bucket = createHAMT({
26
+ hashFn: hamtHashFn,
27
+ bits: hamtBucketBits
28
+ });
29
+ }
30
+ async put(name, value) {
31
+ await this._bucket.put(name, value);
32
+ }
33
+ async get(name) {
34
+ return await this._bucket.get(name);
35
+ }
36
+ childCount() {
37
+ return this._bucket.leafCount();
38
+ }
39
+ directChildrenCount() {
40
+ return this._bucket.childrenCount();
41
+ }
42
+ onlyChild() {
43
+ return this._bucket.onlyChild();
44
+ }
45
+ async *eachChildSeries() {
46
+ for await (const { key, value } of this._bucket.eachLeafSeries()) {
47
+ yield {
48
+ key,
49
+ child: value
50
+ };
51
+ }
52
+ }
53
+ async *flush(blockstore) {
54
+ yield* flush(this._bucket, blockstore, this, this.options);
55
+ }
56
+ }
57
+ async function* flush(bucket, blockstore, shardRoot, options) {
58
+ const children = bucket._children;
59
+ const links = [];
60
+ let childrenSize = 0;
61
+ for (let i = 0; i < children.length; i++) {
62
+ const child = children.get(i);
63
+ if (child == null) {
64
+ continue;
65
+ }
66
+ const labelPrefix = i.toString(16).toUpperCase().padStart(2, '0');
67
+ if (child instanceof Bucket) {
68
+ let shard;
69
+ for await (const subShard of flush(child, blockstore, null, options)) {
70
+ shard = subShard;
71
+ }
72
+ if (shard == null) {
73
+ throw new Error('Could not flush sharded directory, no subshard found');
74
+ }
75
+ links.push({
76
+ Name: labelPrefix,
77
+ Tsize: shard.size,
78
+ Hash: shard.cid
79
+ });
80
+ childrenSize += shard.size;
81
+ }
82
+ else if (typeof child.value.flush === 'function') {
83
+ const dir = child.value;
84
+ let flushedDir;
85
+ for await (const entry of dir.flush(blockstore)) {
86
+ flushedDir = entry;
87
+ yield flushedDir;
88
+ }
89
+ const label = labelPrefix + child.key;
90
+ links.push({
91
+ Name: label,
92
+ Tsize: flushedDir.size,
93
+ Hash: flushedDir.cid
94
+ });
95
+ childrenSize += flushedDir.size; // eslint-disable-line @typescript-eslint/restrict-plus-operands
96
+ }
97
+ else {
98
+ const value = child.value;
99
+ if (value.cid == null) {
100
+ continue;
101
+ }
102
+ const label = labelPrefix + child.key;
103
+ const size = value.size;
104
+ links.push({
105
+ Name: label,
106
+ Tsize: size,
107
+ Hash: value.cid
108
+ });
109
+ childrenSize += size ?? 0; // eslint-disable-line @typescript-eslint/restrict-plus-operands
110
+ }
111
+ }
112
+ // go-ipfs uses little endian, that's why we have to
113
+ // reverse the bit field before storing it
114
+ const data = Uint8Array.from(children.bitField().reverse());
115
+ const dir = new UnixFS({
116
+ type: 'hamt-sharded-directory',
117
+ data,
118
+ fanout: bucket.tableSize(),
119
+ hashType: hamtHashCode,
120
+ mtime: shardRoot?.mtime,
121
+ mode: shardRoot?.mode
122
+ });
123
+ const node = {
124
+ Data: dir.marshal(),
125
+ Links: links
126
+ };
127
+ const buffer = encode(prepare(node));
128
+ const cid = await persist(buffer, blockstore, options);
129
+ const size = buffer.length + childrenSize;
130
+ yield {
131
+ cid,
132
+ node,
133
+ size
134
+ };
135
+ }
136
+ //# sourceMappingURL=dir-sharded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dir-sharded.js","sourceRoot":"","sources":["../../../../src/commands/utils/dir-sharded.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { HeliaError } from '@helia/interface/errors';
2
+ export declare class NotUnixFSError extends HeliaError {
3
+ constructor(message?: string);
4
+ }
5
+ export declare class InvalidPBNodeError extends HeliaError {
6
+ constructor(message?: string);
7
+ }
8
+ export declare class UnknownError extends HeliaError {
9
+ constructor(message?: string);
10
+ }
11
+ export declare class AlreadyExistsError extends HeliaError {
12
+ constructor(message?: string);
13
+ }
14
+ export declare class DoesNotExistError extends HeliaError {
15
+ constructor(message?: string);
16
+ }
17
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD,qBAAa,cAAe,SAAQ,UAAU;gBAC/B,OAAO,SAAsB;CAG3C;AAED,qBAAa,kBAAmB,SAAQ,UAAU;gBACnC,OAAO,SAAmB;CAGxC;AAED,qBAAa,YAAa,SAAQ,UAAU;gBAC7B,OAAO,SAAkB;CAGvC;AAED,qBAAa,kBAAmB,SAAQ,UAAU;gBACnC,OAAO,SAAwB;CAG7C;AAED,qBAAa,iBAAkB,SAAQ,UAAU;gBAClC,OAAO,SAAwB;CAG7C"}
@@ -0,0 +1,27 @@
1
+ import { HeliaError } from '@helia/interface/errors';
2
+ export class NotUnixFSError extends HeliaError {
3
+ constructor(message = 'not a Unixfs node') {
4
+ super(message, 'NotUnixFSError', 'ERR_NOT_UNIXFS');
5
+ }
6
+ }
7
+ export class InvalidPBNodeError extends HeliaError {
8
+ constructor(message = 'invalid PBNode') {
9
+ super(message, 'InvalidPBNodeError', 'ERR_INVALID_PBNODE');
10
+ }
11
+ }
12
+ export class UnknownError extends HeliaError {
13
+ constructor(message = 'unknown error') {
14
+ super(message, 'InvalidPBNodeError', 'ERR_UNKNOWN_ERROR');
15
+ }
16
+ }
17
+ export class AlreadyExistsError extends HeliaError {
18
+ constructor(message = 'path already exists') {
19
+ super(message, 'NotUnixFSError', 'ERR_ALREADY_EXISTS');
20
+ }
21
+ }
22
+ export class DoesNotExistError extends HeliaError {
23
+ constructor(message = 'path does not exist') {
24
+ super(message, 'NotUnixFSError', 'ERR_DOES_NOT_EXIST');
25
+ }
26
+ }
27
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/commands/utils/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5C,YAAa,OAAO,GAAG,mBAAmB;QACxC,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAA;IACpD,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,YAAa,OAAO,GAAG,gBAAgB;QACrC,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAA;IAC5D,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,UAAU;IAC1C,YAAa,OAAO,GAAG,eAAe;QACpC,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAA;IAC3D,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,YAAa,OAAO,GAAG,qBAAqB;QAC1C,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,CAAA;IACxD,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAC/C,YAAa,OAAO,GAAG,qBAAqB;QAC1C,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,CAAA;IACxD,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export declare const hamtHashCode: 34;
2
+ export declare const hamtBucketBits = 8;
3
+ export declare function hamtHashFn(buf: Uint8Array): Promise<Uint8Array>;
4
+ //# sourceMappingURL=hamt-constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hamt-constants.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/hamt-constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,IAAkB,CAAA;AAC3C,eAAO,MAAM,cAAc,IAAI,CAAA;AAE/B,wBAAsB,UAAU,CAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAQtE"}
@@ -0,0 +1,13 @@
1
+ import { murmur3128 } from '@multiformats/murmur3';
2
+ export const hamtHashCode = murmur3128.code;
3
+ export const hamtBucketBits = 8;
4
+ export async function hamtHashFn(buf) {
5
+ return (await murmur3128.encode(buf))
6
+ // Murmur3 outputs 128 bit but, accidentally, IPFS Go's
7
+ // implementation only uses the first 64, so we must do the same
8
+ // for parity..
9
+ .subarray(0, 8)
10
+ // Invert buffer because that's how Go impl does it
11
+ .reverse();
12
+ }
13
+ //# sourceMappingURL=hamt-constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hamt-constants.js","sourceRoot":"","sources":["../../../../src/commands/utils/hamt-constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAA;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAA;AAE/B,MAAM,CAAC,KAAK,UAAU,UAAU,CAAE,GAAe;IAC/C,OAAO,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnC,uDAAuD;QACvD,gEAAgE;QAChE,eAAe;SACd,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;QACf,mDAAmD;SAClD,OAAO,EAAE,CAAA;AACd,CAAC"}