@helia/unixfs 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +4 -0
- package/README.md +53 -0
- package/dist/index.min.js +3 -0
- package/dist/src/commands/add.d.ts +6 -0
- package/dist/src/commands/add.d.ts.map +1 -0
- package/dist/src/commands/add.js +38 -0
- package/dist/src/commands/add.js.map +1 -0
- package/dist/src/commands/cat.d.ts +5 -0
- package/dist/src/commands/cat.d.ts.map +1 -0
- package/dist/src/commands/cat.js +22 -0
- package/dist/src/commands/cat.js.map +1 -0
- package/dist/src/commands/chmod.d.ts +5 -0
- package/dist/src/commands/chmod.d.ts.map +1 -0
- package/dist/src/commands/chmod.js +108 -0
- package/dist/src/commands/chmod.js.map +1 -0
- package/dist/src/commands/cp.d.ts +5 -0
- package/dist/src/commands/cp.d.ts.map +1 -0
- package/dist/src/commands/cp.js +28 -0
- package/dist/src/commands/cp.js.map +1 -0
- package/dist/src/commands/ls.d.ts +5 -0
- package/dist/src/commands/ls.d.ts.map +1 -0
- package/dist/src/commands/ls.js +26 -0
- package/dist/src/commands/ls.js.map +1 -0
- package/dist/src/commands/mkdir.d.ts +5 -0
- package/dist/src/commands/mkdir.d.ts.map +1 -0
- package/dist/src/commands/mkdir.js +53 -0
- package/dist/src/commands/mkdir.js.map +1 -0
- package/dist/src/commands/rm.d.ts +5 -0
- package/dist/src/commands/rm.d.ts.map +1 -0
- package/dist/src/commands/rm.js +19 -0
- package/dist/src/commands/rm.js.map +1 -0
- package/dist/src/commands/stat.d.ts +5 -0
- package/dist/src/commands/stat.d.ts.map +1 -0
- package/dist/src/commands/stat.js +108 -0
- package/dist/src/commands/stat.js.map +1 -0
- package/dist/src/commands/touch.d.ts +5 -0
- package/dist/src/commands/touch.d.ts.map +1 -0
- package/dist/src/commands/touch.js +111 -0
- package/dist/src/commands/touch.js.map +1 -0
- package/dist/src/commands/utils/add-link.d.ts +21 -0
- package/dist/src/commands/utils/add-link.d.ts.map +1 -0
- package/dist/src/commands/utils/add-link.js +224 -0
- package/dist/src/commands/utils/add-link.js.map +1 -0
- package/dist/src/commands/utils/cid-to-directory.d.ts +10 -0
- package/dist/src/commands/utils/cid-to-directory.d.ts.map +1 -0
- package/dist/src/commands/utils/cid-to-directory.js +13 -0
- package/dist/src/commands/utils/cid-to-directory.js.map +1 -0
- package/dist/src/commands/utils/cid-to-pblink.d.ts +6 -0
- package/dist/src/commands/utils/cid-to-pblink.d.ts.map +1 -0
- package/dist/src/commands/utils/cid-to-pblink.js +19 -0
- package/dist/src/commands/utils/cid-to-pblink.js.map +1 -0
- package/dist/src/commands/utils/dir-sharded.d.ts +67 -0
- package/dist/src/commands/utils/dir-sharded.d.ts.map +1 -0
- package/dist/src/commands/utils/dir-sharded.js +136 -0
- package/dist/src/commands/utils/dir-sharded.js.map +1 -0
- package/dist/src/commands/utils/errors.d.ts +17 -0
- package/dist/src/commands/utils/errors.d.ts.map +1 -0
- package/dist/src/commands/utils/errors.js +27 -0
- package/dist/src/commands/utils/errors.js.map +1 -0
- package/dist/src/commands/utils/hamt-constants.d.ts +4 -0
- package/dist/src/commands/utils/hamt-constants.d.ts.map +1 -0
- package/dist/src/commands/utils/hamt-constants.js +13 -0
- package/dist/src/commands/utils/hamt-constants.js.map +1 -0
- package/dist/src/commands/utils/hamt-utils.d.ts +37 -0
- package/dist/src/commands/utils/hamt-utils.d.ts.map +1 -0
- package/dist/src/commands/utils/hamt-utils.js +202 -0
- package/dist/src/commands/utils/hamt-utils.js.map +1 -0
- package/dist/src/commands/utils/persist.d.ts +10 -0
- package/dist/src/commands/utils/persist.d.ts.map +1 -0
- package/dist/src/commands/utils/persist.js +12 -0
- package/dist/src/commands/utils/persist.js.map +1 -0
- package/dist/src/commands/utils/remove-link.d.ts +11 -0
- package/dist/src/commands/utils/remove-link.d.ts.map +1 -0
- package/dist/src/commands/utils/remove-link.js +92 -0
- package/dist/src/commands/utils/remove-link.js.map +1 -0
- package/dist/src/commands/utils/resolve.d.ts +28 -0
- package/dist/src/commands/utils/resolve.d.ts.map +1 -0
- package/dist/src/commands/utils/resolve.js +85 -0
- package/dist/src/commands/utils/resolve.js.map +1 -0
- package/dist/src/index.d.ts +97 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +48 -0
- package/dist/src/index.js.map +1 -0
- package/package.json +166 -0
- package/src/commands/add.ts +46 -0
- package/src/commands/cat.ts +31 -0
- package/src/commands/chmod.ts +133 -0
- package/src/commands/cp.ts +41 -0
- package/src/commands/ls.ts +36 -0
- package/src/commands/mkdir.ts +71 -0
- package/src/commands/rm.ts +31 -0
- package/src/commands/stat.ts +137 -0
- package/src/commands/touch.ts +136 -0
- package/src/commands/utils/add-link.ts +319 -0
- package/src/commands/utils/cid-to-directory.ts +23 -0
- package/src/commands/utils/cid-to-pblink.ts +26 -0
- package/src/commands/utils/dir-sharded.ts +219 -0
- package/src/commands/utils/errors.ts +31 -0
- package/src/commands/utils/hamt-constants.ts +14 -0
- package/src/commands/utils/hamt-utils.ts +285 -0
- package/src/commands/utils/persist.ts +22 -0
- package/src/commands/utils/remove-link.ts +151 -0
- package/src/commands/utils/resolve.ts +130 -0
- package/src/index.ts +174 -0
|
@@ -0,0 +1 @@
|
|
|
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 @@
|
|
|
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"}
|