@helia/unixfs 0.0.0 → 1.0.1

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 (110) hide show
  1. package/README.md +10 -4
  2. package/dist/index.min.js +1 -1
  3. package/dist/src/commands/cat.d.ts +1 -1
  4. package/dist/src/commands/cat.d.ts.map +1 -1
  5. package/dist/src/commands/cat.js +1 -1
  6. package/dist/src/commands/cat.js.map +1 -1
  7. package/dist/src/commands/chmod.d.ts.map +1 -1
  8. package/dist/src/commands/chmod.js +14 -12
  9. package/dist/src/commands/chmod.js.map +1 -1
  10. package/dist/src/commands/cp.d.ts +1 -1
  11. package/dist/src/commands/cp.d.ts.map +1 -1
  12. package/dist/src/commands/cp.js +5 -2
  13. package/dist/src/commands/cp.js.map +1 -1
  14. package/dist/src/commands/ls.d.ts +2 -1
  15. package/dist/src/commands/ls.d.ts.map +1 -1
  16. package/dist/src/commands/ls.js +1 -1
  17. package/dist/src/commands/ls.js.map +1 -1
  18. package/dist/src/commands/mkdir.d.ts.map +1 -1
  19. package/dist/src/commands/mkdir.js +4 -2
  20. package/dist/src/commands/mkdir.js.map +1 -1
  21. package/dist/src/commands/rm.d.ts +1 -1
  22. package/dist/src/commands/rm.d.ts.map +1 -1
  23. package/dist/src/commands/rm.js +9 -3
  24. package/dist/src/commands/rm.js.map +1 -1
  25. package/dist/src/commands/stat.d.ts +1 -1
  26. package/dist/src/commands/stat.d.ts.map +1 -1
  27. package/dist/src/commands/stat.js +19 -15
  28. package/dist/src/commands/stat.js.map +1 -1
  29. package/dist/src/commands/touch.d.ts.map +1 -1
  30. package/dist/src/commands/touch.js +15 -13
  31. package/dist/src/commands/touch.js.map +1 -1
  32. package/dist/src/commands/utils/add-link.d.ts +4 -2
  33. package/dist/src/commands/utils/add-link.d.ts.map +1 -1
  34. package/dist/src/commands/utils/add-link.js +24 -24
  35. package/dist/src/commands/utils/add-link.js.map +1 -1
  36. package/dist/src/commands/utils/cid-to-directory.d.ts +3 -3
  37. package/dist/src/commands/utils/cid-to-directory.d.ts.map +1 -1
  38. package/dist/src/commands/utils/cid-to-directory.js +1 -1
  39. package/dist/src/commands/utils/cid-to-directory.js.map +1 -1
  40. package/dist/src/commands/utils/cid-to-pblink.d.ts +3 -3
  41. package/dist/src/commands/utils/cid-to-pblink.d.ts.map +1 -1
  42. package/dist/src/commands/utils/cid-to-pblink.js.map +1 -1
  43. package/dist/src/commands/utils/constants.d.ts +2 -0
  44. package/dist/src/commands/utils/constants.d.ts.map +1 -0
  45. package/dist/src/commands/utils/constants.js +2 -0
  46. package/dist/src/commands/utils/constants.js.map +1 -0
  47. package/dist/src/commands/utils/dir-sharded.d.ts +47 -41
  48. package/dist/src/commands/utils/dir-sharded.d.ts.map +1 -1
  49. package/dist/src/commands/utils/dir-sharded.js +99 -15
  50. package/dist/src/commands/utils/dir-sharded.js.map +1 -1
  51. package/dist/src/commands/utils/errors.d.ts +22 -6
  52. package/dist/src/commands/utils/errors.d.ts.map +1 -1
  53. package/dist/src/commands/utils/errors.js +34 -8
  54. package/dist/src/commands/utils/errors.js.map +1 -1
  55. package/dist/src/commands/utils/hamt-constants.d.ts +1 -1
  56. package/dist/src/commands/utils/hamt-constants.d.ts.map +1 -1
  57. package/dist/src/commands/utils/hamt-constants.js +1 -1
  58. package/dist/src/commands/utils/hamt-constants.js.map +1 -1
  59. package/dist/src/commands/utils/hamt-utils.d.ts +15 -12
  60. package/dist/src/commands/utils/hamt-utils.d.ts.map +1 -1
  61. package/dist/src/commands/utils/hamt-utils.js +40 -39
  62. package/dist/src/commands/utils/hamt-utils.js.map +1 -1
  63. package/dist/src/commands/utils/is-over-shard-threshold.d.ts +10 -0
  64. package/dist/src/commands/utils/is-over-shard-threshold.d.ts.map +1 -0
  65. package/dist/src/commands/utils/is-over-shard-threshold.js +62 -0
  66. package/dist/src/commands/utils/is-over-shard-threshold.js.map +1 -0
  67. package/dist/src/commands/utils/persist.d.ts +7 -6
  68. package/dist/src/commands/utils/persist.d.ts.map +1 -1
  69. package/dist/src/commands/utils/persist.js +6 -3
  70. package/dist/src/commands/utils/persist.js.map +1 -1
  71. package/dist/src/commands/utils/remove-link.d.ts +6 -2
  72. package/dist/src/commands/utils/remove-link.d.ts.map +1 -1
  73. package/dist/src/commands/utils/remove-link.js +143 -55
  74. package/dist/src/commands/utils/remove-link.js.map +1 -1
  75. package/dist/src/commands/utils/resolve.d.ts +6 -3
  76. package/dist/src/commands/utils/resolve.d.ts.map +1 -1
  77. package/dist/src/commands/utils/resolve.js +4 -4
  78. package/dist/src/commands/utils/resolve.js.map +1 -1
  79. package/dist/src/index.d.ts +14 -7
  80. package/dist/src/index.d.ts.map +1 -1
  81. package/dist/src/index.js +0 -7
  82. package/dist/src/index.js.map +1 -1
  83. package/dist/typedoc-urls.json +14 -0
  84. package/package.json +8 -7
  85. package/src/commands/cat.ts +3 -2
  86. package/src/commands/chmod.ts +13 -10
  87. package/src/commands/cp.ts +7 -4
  88. package/src/commands/ls.ts +4 -3
  89. package/src/commands/mkdir.ts +5 -3
  90. package/src/commands/rm.ts +9 -5
  91. package/src/commands/stat.ts +22 -17
  92. package/src/commands/touch.ts +15 -12
  93. package/src/commands/utils/add-link.ts +32 -31
  94. package/src/commands/utils/cid-to-directory.ts +4 -4
  95. package/src/commands/utils/cid-to-pblink.ts +3 -3
  96. package/src/commands/utils/constants.ts +2 -0
  97. package/src/commands/utils/dir-sharded.ts +162 -63
  98. package/src/commands/utils/errors.ts +42 -8
  99. package/src/commands/utils/hamt-constants.ts +1 -1
  100. package/src/commands/utils/hamt-utils.ts +59 -50
  101. package/src/commands/utils/is-over-shard-threshold.ts +78 -0
  102. package/src/commands/utils/persist.ts +13 -8
  103. package/src/commands/utils/remove-link.ts +178 -77
  104. package/src/commands/utils/resolve.ts +12 -7
  105. package/src/index.ts +15 -17
  106. package/dist/src/commands/add.d.ts +0 -6
  107. package/dist/src/commands/add.d.ts.map +0 -1
  108. package/dist/src/commands/add.js +0 -38
  109. package/dist/src/commands/add.js.map +0 -1
  110. package/src/commands/add.ts +0 -46
@@ -1 +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"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/errors.ts"],"names":[],"mappings":"AAAA,8BAAsB,WAAY,SAAQ,KAAK;IAC7C,SAAgB,IAAI,EAAE,MAAM,CAAA;IAC5B,SAAgB,IAAI,EAAE,MAAM,CAAA;gBAEf,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAMzD;AAED,qBAAa,cAAe,SAAQ,WAAW;gBAChC,OAAO,SAAsB;CAG3C;AAED,qBAAa,kBAAmB,SAAQ,WAAW;gBACpC,OAAO,SAAmB;CAGxC;AAED,qBAAa,YAAa,SAAQ,WAAW;gBAC9B,OAAO,SAAkB;CAGvC;AAED,qBAAa,kBAAmB,SAAQ,WAAW;gBACpC,OAAO,SAAwB;CAG7C;AAED,qBAAa,iBAAkB,SAAQ,WAAW;gBACnC,OAAO,SAAwB;CAG7C;AAED,qBAAa,cAAe,SAAQ,WAAW;gBAChC,OAAO,SAAe;CAGpC;AAED,qBAAa,aAAc,SAAQ,WAAW;gBAC/B,OAAO,SAAe;CAGpC;AAED,qBAAa,kBAAmB,SAAQ,WAAW;gBACpC,OAAO,SAAoB;CAGzC;AAED,qBAAa,sBAAuB,SAAQ,WAAW;gBACxC,OAAO,SAAuB;CAG5C"}
@@ -1,27 +1,53 @@
1
- import { HeliaError } from '@helia/interface/errors';
2
- export class NotUnixFSError extends HeliaError {
1
+ export class UnixFSError extends Error {
2
+ constructor(message, name, code) {
3
+ super(message);
4
+ this.name = name;
5
+ this.code = code;
6
+ }
7
+ }
8
+ export class NotUnixFSError extends UnixFSError {
3
9
  constructor(message = 'not a Unixfs node') {
4
10
  super(message, 'NotUnixFSError', 'ERR_NOT_UNIXFS');
5
11
  }
6
12
  }
7
- export class InvalidPBNodeError extends HeliaError {
13
+ export class InvalidPBNodeError extends UnixFSError {
8
14
  constructor(message = 'invalid PBNode') {
9
15
  super(message, 'InvalidPBNodeError', 'ERR_INVALID_PBNODE');
10
16
  }
11
17
  }
12
- export class UnknownError extends HeliaError {
18
+ export class UnknownError extends UnixFSError {
13
19
  constructor(message = 'unknown error') {
14
20
  super(message, 'InvalidPBNodeError', 'ERR_UNKNOWN_ERROR');
15
21
  }
16
22
  }
17
- export class AlreadyExistsError extends HeliaError {
23
+ export class AlreadyExistsError extends UnixFSError {
18
24
  constructor(message = 'path already exists') {
19
- super(message, 'NotUnixFSError', 'ERR_ALREADY_EXISTS');
25
+ super(message, 'AlreadyExistsError', 'ERR_ALREADY_EXISTS');
20
26
  }
21
27
  }
22
- export class DoesNotExistError extends HeliaError {
28
+ export class DoesNotExistError extends UnixFSError {
23
29
  constructor(message = 'path does not exist') {
24
- super(message, 'NotUnixFSError', 'ERR_DOES_NOT_EXIST');
30
+ super(message, 'DoesNotExistError', 'ERR_DOES_NOT_EXIST');
31
+ }
32
+ }
33
+ export class NoContentError extends UnixFSError {
34
+ constructor(message = 'no content') {
35
+ super(message, 'NoContentError', 'ERR_NO_CONTENT');
36
+ }
37
+ }
38
+ export class NotAFileError extends UnixFSError {
39
+ constructor(message = 'not a file') {
40
+ super(message, 'NotAFileError', 'ERR_NOT_A_FILE');
41
+ }
42
+ }
43
+ export class NotADirectoryError extends UnixFSError {
44
+ constructor(message = 'not a directory') {
45
+ super(message, 'NotADirectoryError', 'ERR_NOT_A_DIRECTORY');
46
+ }
47
+ }
48
+ export class InvalidParametersError extends UnixFSError {
49
+ constructor(message = 'invalid parameters') {
50
+ super(message, 'InvalidParametersError', 'ERR_INVALID_PARAMETERS');
25
51
  }
26
52
  }
27
53
  //# sourceMappingURL=errors.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/commands/utils/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAgB,WAAY,SAAQ,KAAK;IAI7C,YAAa,OAAe,EAAE,IAAY,EAAE,IAAY;QACtD,KAAK,CAAC,OAAO,CAAC,CAAA;QAEd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC7C,YAAa,OAAO,GAAG,mBAAmB;QACxC,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAA;IACpD,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IACjD,YAAa,OAAO,GAAG,gBAAgB;QACrC,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAA;IAC5D,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C,YAAa,OAAO,GAAG,eAAe;QACpC,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAA;IAC3D,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IACjD,YAAa,OAAO,GAAG,qBAAqB;QAC1C,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAA;IAC5D,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IAChD,YAAa,OAAO,GAAG,qBAAqB;QAC1C,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,CAAC,CAAA;IAC3D,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC7C,YAAa,OAAO,GAAG,YAAY;QACjC,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAA;IACpD,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,WAAW;IAC5C,YAAa,OAAO,GAAG,YAAY;QACjC,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAA;IACnD,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IACjD,YAAa,OAAO,GAAG,iBAAiB;QACtC,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,CAAC,CAAA;IAC7D,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,WAAW;IACrD,YAAa,OAAO,GAAG,oBAAoB;QACzC,KAAK,CAAC,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,CAAC,CAAA;IACpE,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- export declare const hamtHashCode: 34;
1
+ export declare const hamtHashCode: bigint;
2
2
  export declare const hamtBucketBits = 8;
3
3
  export declare function hamtHashFn(buf: Uint8Array): Promise<Uint8Array>;
4
4
  //# sourceMappingURL=hamt-constants.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"hamt-constants.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/hamt-constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,QAA0B,CAAA;AACnD,eAAO,MAAM,cAAc,IAAI,CAAA;AAE/B,wBAAsB,UAAU,CAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAQtE"}
@@ -1,5 +1,5 @@
1
1
  import { murmur3128 } from '@multiformats/murmur3';
2
- export const hamtHashCode = murmur3128.code;
2
+ export const hamtHashCode = BigInt(murmur3128.code);
3
3
  export const hamtBucketBits = 8;
4
4
  export async function hamtHashFn(buf) {
5
5
  return (await murmur3128.encode(buf))
@@ -1 +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"}
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,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AACnD,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"}
@@ -1,5 +1,5 @@
1
1
  import { Bucket } from 'hamt-sharding';
2
- import { CID } from 'multiformats/cid';
2
+ import type { CID, Version } from 'multiformats/cid';
3
3
  import type { PBLink, PBNode } from '@ipld/dag-pb/interface';
4
4
  import type { Blockstore } from 'interface-blockstore';
5
5
  import type { Mtime } from 'ipfs-unixfs';
@@ -11,27 +11,30 @@ export interface UpdateHamtResult {
11
11
  cid: CID;
12
12
  size: number;
13
13
  }
14
- export declare const updateHamtDirectory: (parent: Directory, blockstore: Blockstore, links: PBLink[], bucket: Bucket<any>, options: AbortOptions) => Promise<UpdateHamtResult>;
14
+ export interface UpdateHamtDirectoryOptions extends AbortOptions {
15
+ cidVersion: Version;
16
+ }
17
+ export declare const updateHamtDirectory: (pbNode: PBNode, blockstore: Blockstore, bucket: Bucket<any>, options: UpdateHamtDirectoryOptions) => Promise<UpdateHamtResult>;
15
18
  export declare const recreateHamtLevel: (blockstore: Blockstore, links: PBLink[], rootBucket: Bucket<any>, parentBucket: Bucket<any>, positionAtParent: number, options: AbortOptions) => Promise<Bucket<any>>;
16
19
  export declare const recreateInitialHamtLevel: (links: PBLink[]) => Promise<Bucket<any>>;
17
20
  export declare const addLinksToHamtBucket: (blockstore: Blockstore, links: PBLink[], bucket: Bucket<any>, rootBucket: Bucket<any>, options: AbortOptions) => Promise<void>;
18
21
  export declare const toPrefix: (position: number) => string;
19
- export interface HamtPath {
20
- rootBucket: Bucket<any>;
21
- path: Array<{
22
- bucket: Bucket<any>;
23
- prefix: string;
24
- node?: PBNode;
25
- }>;
22
+ export interface HamtPathSegment {
23
+ bucket?: Bucket<any>;
24
+ prefix?: string;
25
+ node?: PBNode;
26
+ cid?: CID;
27
+ size?: number;
26
28
  }
27
- export declare const generatePath: (parent: Directory, name: string, blockstore: Blockstore, options: AbortOptions) => Promise<HamtPath>;
29
+ export declare const generatePath: (root: Directory, name: string, blockstore: Blockstore, options: AbortOptions) => Promise<HamtPathSegment[]>;
28
30
  export interface CreateShardOptions {
29
31
  mtime?: Mtime;
30
32
  mode?: number;
33
+ cidVersion: Version;
31
34
  }
32
35
  export declare const createShard: (blockstore: Blockstore, contents: Array<{
33
36
  name: string;
34
- size: number;
37
+ size: bigint;
35
38
  cid: CID;
36
- }>, options?: CreateShardOptions) => Promise<ImportResult>;
39
+ }>, options: CreateShardOptions) => Promise<ImportResult>;
37
40
  //# 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,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAMtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAIxD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,GAAG,CAAA;IACR,IAAI,EAAE,MAAM,CAAA;CACb;AAED,eAAO,MAAM,mBAAmB,WAAkB,SAAS,cAAc,UAAU,SAAS,MAAM,EAAE,UAAU,OAAO,GAAG,CAAC,WAAW,YAAY,KAAG,QAAQ,gBAAgB,CAgC1K,CAAA;AAED,eAAO,MAAM,iBAAiB,eAAsB,UAAU,SAAS,MAAM,EAAE,cAAc,OAAO,GAAG,CAAC,gBAAgB,OAAO,GAAG,CAAC,oBAAoB,MAAM,WAAW,YAAY,KAAG,QAAQ,OAAO,GAAG,CAAC,CAWzM,CAAA;AAED,eAAO,MAAM,wBAAwB,UAAiB,MAAM,EAAE,KAAG,QAAQ,OAAO,GAAG,CAAC,CA+BnF,CAAA;AAED,eAAO,MAAM,oBAAoB,eAAsB,UAAU,SAAS,MAAM,EAAE,UAAU,OAAO,GAAG,CAAC,cAAc,OAAO,GAAG,CAAC,WAAW,YAAY,KAAG,QAAQ,IAAI,CA4BrK,CAAA;AAED,eAAO,MAAM,QAAQ,aAAc,MAAM,KAAG,MAM3C,CAAA;AAED,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;IACvB,IAAI,EAAE,KAAK,CAAC;QACV,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QACnB,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAC,CAAA;CACH;AAED,eAAO,MAAM,YAAY,WAAkB,SAAS,QAAQ,MAAM,cAAc,UAAU,WAAW,YAAY,KAAG,QAAQ,QAAQ,CA4FnI,CAAA;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,WAAW,eAAsB,UAAU,YAAY,MAAM;IAAE,MAAM,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,CAAC,YAAW,kBAAkB,KAAQ,QAAQ,YAAY,CA2B3K,CAAA"}
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,CA6BnF,CAAA;AAED,eAAO,MAAM,oBAAoB,eAAsB,UAAU,SAAS,MAAM,EAAE,UAAU,OAAO,GAAG,CAAC,cAAc,OAAO,GAAG,CAAC,WAAW,YAAY,KAAG,QAAQ,IAAI,CA0BrK,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,CAwG1I,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"}
@@ -4,37 +4,33 @@ import { DirSharded } from './dir-sharded.js';
4
4
  import { logger } from '@libp2p/logger';
5
5
  import { UnixFS } from 'ipfs-unixfs';
6
6
  import last from 'it-last';
7
- import { CID } from 'multiformats/cid';
8
7
  import { hamtHashCode, hamtHashFn, hamtBucketBits } from './hamt-constants.js';
9
- import { sha256 } from 'multiformats/hashes/sha2';
8
+ import { persist } from './persist.js';
10
9
  const log = logger('helia:unixfs:commands:utils:hamt-utils');
11
- export const updateHamtDirectory = async (parent, blockstore, links, bucket, options) => {
12
- if (parent.node.Data == null) {
10
+ export const updateHamtDirectory = async (pbNode, blockstore, bucket, options) => {
11
+ if (pbNode.Data == null) {
13
12
  throw new Error('Could not update HAMT directory because parent had no data');
14
13
  }
15
14
  // update parent with new bit field
16
- const data = Uint8Array.from(bucket._children.bitField().reverse());
17
- const node = UnixFS.unmarshal(parent.node.Data);
15
+ const node = UnixFS.unmarshal(pbNode.Data);
18
16
  const dir = new UnixFS({
19
17
  type: 'hamt-sharded-directory',
20
- data,
21
- fanout: bucket.tableSize(),
18
+ data: Uint8Array.from(bucket._children.bitField().reverse()),
19
+ fanout: BigInt(bucket.tableSize()),
22
20
  hashType: hamtHashCode,
23
21
  mode: node.mode,
24
22
  mtime: node.mtime
25
23
  });
26
- parent.node = {
24
+ const updatedPbNode = {
27
25
  Data: dir.marshal(),
28
- Links: links.sort((a, b) => (a.Name ?? '').localeCompare(b.Name ?? ''))
26
+ Links: pbNode.Links
29
27
  };
30
- const buf = dagPB.encode(parent.node);
31
- const hash = await sha256.digest(buf);
32
- const cid = CID.create(parent.cid.version, dagPB.code, hash);
33
- await blockstore.put(cid, buf, options);
28
+ const buf = dagPB.encode(dagPB.prepare(updatedPbNode));
29
+ const cid = await persist(buf, blockstore, options);
34
30
  return {
35
- node: parent.node,
31
+ node: updatedPbNode,
36
32
  cid,
37
- size: links.reduce((sum, link) => sum + (link.Tsize ?? 0), buf.length)
33
+ size: pbNode.Links.reduce((sum, link) => sum + (link.Tsize ?? 0), buf.byteLength)
38
34
  };
39
35
  };
40
36
  export const recreateHamtLevel = async (blockstore, links, rootBucket, parentBucket, positionAtParent, options) => {
@@ -52,7 +48,7 @@ export const recreateInitialHamtLevel = async (links) => {
52
48
  hashFn: hamtHashFn,
53
49
  bits: hamtBucketBits
54
50
  });
55
- // populate sub bucket but do not recurse as we do not want to pull whole shard in
51
+ // populate sub bucket but do not recurse as we do not want to load the whole shard
56
52
  await Promise.all(links.map(async (link) => {
57
53
  const linkName = (link.Name ?? '');
58
54
  if (linkName.length === 2) {
@@ -62,8 +58,6 @@ export const recreateInitialHamtLevel = async (links) => {
62
58
  bits: bucket._options.bits
63
59
  }, bucket, pos);
64
60
  bucket._putObjectAt(pos, subBucket);
65
- await Promise.resolve();
66
- return;
67
61
  }
68
62
  await bucket.put(linkName.substring(2), {
69
63
  size: link.Tsize,
@@ -86,8 +80,6 @@ export const addLinksToHamtBucket = async (blockstore, links, bucket, rootBucket
86
80
  }, bucket, pos);
87
81
  bucket._putObjectAt(pos, subBucket);
88
82
  await addLinksToHamtBucket(blockstore, node.Links, subBucket, rootBucket, options);
89
- await Promise.resolve();
90
- return;
91
83
  }
92
84
  await rootBucket.put(linkName.substring(2), {
93
85
  size: link.Tsize,
@@ -102,11 +94,10 @@ export const toPrefix = (position) => {
102
94
  .padStart(2, '0')
103
95
  .substring(0, 2);
104
96
  };
105
- export const generatePath = async (parent, name, blockstore, options) => {
97
+ export const generatePath = async (root, name, blockstore, options) => {
106
98
  // start at the root bucket and descend, loading nodes as we go
107
- const rootBucket = await recreateInitialHamtLevel(parent.node.Links);
99
+ const rootBucket = await recreateInitialHamtLevel(root.node.Links);
108
100
  const position = await rootBucket._findNewBucketAndPos(name);
109
- // the path to the root bucket
110
101
  const path = [{
111
102
  bucket: position.bucket,
112
103
  prefix: toPrefix(position.pos)
@@ -117,19 +108,26 @@ export const generatePath = async (parent, name, blockstore, options) => {
117
108
  bucket: currentBucket,
118
109
  prefix: toPrefix(currentBucket._posAtParent)
119
110
  });
120
- // @ts-expect-error - only the root bucket's parent will be undefined
111
+ if (currentBucket._parent == null) {
112
+ break;
113
+ }
121
114
  currentBucket = currentBucket._parent;
122
115
  }
116
+ // add the root bucket to the path
117
+ path.push({
118
+ bucket: rootBucket,
119
+ node: root.node
120
+ });
123
121
  path.reverse();
124
- path[0].node = parent.node;
125
122
  // load PbNode for each path segment
126
- for (let i = 0; i < path.length; i++) {
123
+ for (let i = 1; i < path.length; i++) {
127
124
  const segment = path[i];
128
- if (segment.node == null) {
125
+ const previousSegment = path[i - 1];
126
+ if (previousSegment.node == null) {
129
127
  throw new Error('Could not generate HAMT path');
130
128
  }
131
129
  // find prefix in links
132
- const link = segment.node.Links
130
+ const link = previousSegment.node.Links
133
131
  .filter(link => (link.Name ?? '').substring(0, 2) === segment.prefix)
134
132
  .pop();
135
133
  // entry was not in shard
@@ -139,8 +137,9 @@ export const generatePath = async (parent, name, blockstore, options) => {
139
137
  // return path
140
138
  continue;
141
139
  }
140
+ const linkName = link.Name ?? '';
142
141
  // found entry
143
- if (link.Name === `${segment.prefix}${name}`) {
142
+ if (linkName === `${segment.prefix}${name}`) {
144
143
  log(`Link ${segment.prefix}${name} will be replaced`);
145
144
  // file already existed, file will be added to the current bucket
146
145
  // return path
@@ -148,11 +147,14 @@ export const generatePath = async (parent, name, blockstore, options) => {
148
147
  }
149
148
  // found subshard
150
149
  log(`Found subshard ${segment.prefix}`);
151
- const block = await blockstore.get(link.Hash, options);
150
+ const block = await blockstore.get(link.Hash);
152
151
  const node = dagPB.decode(block);
153
152
  // subshard hasn't been loaded, descend to the next level of the HAMT
154
153
  if (path[i + 1] == null) {
155
154
  log(`Loaded new subshard ${segment.prefix}`);
155
+ if (segment.bucket == null || segment.prefix == null) {
156
+ throw new Error('Shard was invalid');
157
+ }
156
158
  await recreateHamtLevel(blockstore, node.Links, rootBucket, segment.bucket, parseInt(segment.prefix, 16), options);
157
159
  const position = await rootBucket._findNewBucketAndPos(name);
158
160
  // i--
@@ -163,19 +165,18 @@ export const generatePath = async (parent, name, blockstore, options) => {
163
165
  });
164
166
  continue;
165
167
  }
166
- const nextSegment = path[i + 1];
168
+ if (segment.bucket == null) {
169
+ throw new Error('Shard was invalid');
170
+ }
167
171
  // add intermediate links to bucket
168
- await addLinksToHamtBucket(blockstore, node.Links, nextSegment.bucket, rootBucket, options);
169
- nextSegment.node = node;
172
+ await addLinksToHamtBucket(blockstore, node.Links, segment.bucket, rootBucket, options);
173
+ segment.node = node;
170
174
  }
171
175
  await rootBucket.put(name, true);
172
176
  path.reverse();
173
- return {
174
- rootBucket,
175
- path
176
- };
177
+ return path;
177
178
  };
178
- export const createShard = async (blockstore, contents, options = {}) => {
179
+ export const createShard = async (blockstore, contents, options) => {
179
180
  const shard = new DirSharded({
180
181
  root: true,
181
182
  dir: true,
@@ -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":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EACL,MAAM,EACN,UAAU,EACX,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,IAAI,MAAM,SAAS,CAAA;AAE1B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,cAAc,EACf,MAAM,qBAAqB,CAAA;AAO5B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,GAAG,GAAG,MAAM,CAAC,wCAAwC,CAAC,CAAA;AAY5D,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,MAAc,EAAE,UAAsB,EAAE,MAAmB,EAAE,OAAmC,EAA6B,EAAE;IACvK,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE;QACvB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;KAC9E;IAED,mCAAmC;IACnC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC1C,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC;QACrB,IAAI,EAAE,wBAAwB;QAC9B,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;QAC5D,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,QAAQ,EAAE,YAAY;QACtB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAA;IAEF,MAAM,aAAa,GAAG;QACpB,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAA;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAA;IACtD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAEnD,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,GAAG;QACH,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC;KAClF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,UAAsB,EAAE,KAAe,EAAE,UAAuB,EAAE,YAAyB,EAAE,gBAAwB,EAAE,OAAqB,EAAwB,EAAE;IAC5M,kCAAkC;IAClC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACxB,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI;QAC9B,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI;KAC/B,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAA;IAClC,YAAY,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;IAEnD,MAAM,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAE1E,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,KAAe,EAAwB,EAAE;IACtF,MAAM,MAAM,GAAG,UAAU,CAAM;QAC7B,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,cAAc;KACrB,CAAC,CAAA;IAEF,mFAAmF;IACnF,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;QACrB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAElC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YAClC,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC;gBAC3B,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;gBAC1B,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;aAC3B,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;YAEf,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;SACpC;QAED,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YACtC,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,GAAG,EAAE,IAAI,CAAC,IAAI;SACf,CAAC,CAAA;IACJ,CAAC,CAAC,CACH,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,UAAsB,EAAE,KAAe,EAAE,MAAmB,EAAE,UAAuB,EAAE,OAAqB,EAAiB,EAAE;IACxK,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;QACrB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAElC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,GAAG,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAA;YACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YAClC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YACtD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAEhC,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC;gBAC3B,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI;gBAC9B,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI;aAC/B,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;YACf,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;YAEnC,MAAM,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;SACnF;QAED,MAAM,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YAC1C,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,GAAG,EAAE,IAAI,CAAC,IAAI;SACf,CAAC,CAAA;IACJ,CAAC,CAAC,CACH,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAU,EAAE;IACnD,OAAO,QAAQ;SACZ,QAAQ,CAAC,EAAE,CAAC;SACZ,WAAW,EAAE;SACb,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;SAChB,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACpB,CAAC,CAAA;AAUD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,IAAe,EAAE,IAAY,EAAE,UAAsB,EAAE,OAAqB,EAA8B,EAAE;IAC7I,+DAA+D;IAC/D,MAAM,UAAU,GAAG,MAAM,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAClE,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;IAC5D,MAAM,IAAI,GAAsB,CAAC;YAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;SAC/B,CAAC,CAAA;IACF,IAAI,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAA;IAEnC,OAAO,aAAa,KAAK,UAAU,EAAE;QACnC,IAAI,CAAC,IAAI,CAAC;YACR,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC;SAC7C,CAAC,CAAA;QAEF,IAAI,aAAa,CAAC,OAAO,IAAI,IAAI,EAAE;YACjC,MAAK;SACN;QAED,aAAa,GAAG,aAAa,CAAC,OAAO,CAAA;KACtC;IAED,kCAAkC;IAClC,IAAI,CAAC,IAAI,CAAC;QACR,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC,CAAA;IAEF,IAAI,CAAC,OAAO,EAAE,CAAA;IAEd,oCAAoC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACvB,MAAM,eAAe,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAEnC,IAAI,eAAe,CAAC,IAAI,IAAI,IAAI,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;SAChD;QAED,uBAAuB;QACvB,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK;aACpC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC;aACpE,GAAG,EAAE,CAAA;QAER,yBAAyB;QACzB,IAAI,IAAI,IAAI,IAAI,EAAE;YAChB,mEAAmE;YACnE,GAAG,CAAC,QAAQ,OAAO,CAAC,MAAM,GAAG,IAAI,gBAAgB,CAAC,CAAA;YAClD,cAAc;YACd,SAAQ;SACT;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;QAEhC,cAAc;QACd,IAAI,QAAQ,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,EAAE,EAAE;YAC3C,GAAG,CAAC,QAAQ,OAAO,CAAC,MAAM,GAAG,IAAI,mBAAmB,CAAC,CAAA;YACrD,iEAAiE;YACjE,cAAc;YACd,SAAQ;SACT;QAED,iBAAiB;QACjB,GAAG,CAAC,kBAAkB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QACvC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAEhC,qEAAqE;QACrE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE;YACvB,GAAG,CAAC,uBAAuB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;YAE5C,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;gBACpD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;aACrC;YAED,MAAM,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;YAClH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;YAE5D,MAAM;YACN,IAAI,CAAC,IAAI,CAAC;gBACR,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC9B,IAAI;aACL,CAAC,CAAA;YAEF,SAAQ;SACT;QAED,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;SACrC;QAED,mCAAmC;QACnC,MAAM,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;QAEvF,OAAO,CAAC,IAAI,GAAG,IAAI,CAAA;KACpB;IAED,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAEhC,IAAI,CAAC,OAAO,EAAE,CAAA;IAEd,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAQD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,UAAsB,EAAE,QAAyD,EAAE,OAA2B,EAAyB,EAAE;IACzK,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC;QAC3B,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,IAAI;QACT,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,EAAE,OAAO,CAAC,CAAA;IAEX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YACxC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;YACtB,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG;SACrB,CAAC,CAAA;KACH;IAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;IAE/C,IAAI,GAAG,IAAI,IAAI,EAAE;QACf,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;KACpD;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import type { PBNode } from '@ipld/dag-pb';
2
+ import type { Blockstore } from 'interface-blockstore';
3
+ /**
4
+ * Estimate node size only based on DAGLink name and CID byte lengths
5
+ * https://github.com/ipfs/go-unixfsnode/blob/37b47f1f917f1b2f54c207682f38886e49896ef9/data/builder/directory.go#L81-L96
6
+ *
7
+ * If the node is a hamt sharded directory the calculation is based on if it was a regular directory.
8
+ */
9
+ export declare function isOverShardThreshold(node: PBNode, blockstore: Blockstore, threshold: number): Promise<boolean>;
10
+ //# sourceMappingURL=is-over-shard-threshold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-over-shard-threshold.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/is-over-shard-threshold.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAKtD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBrH"}
@@ -0,0 +1,62 @@
1
+ import { UnixFS } from 'ipfs-unixfs';
2
+ import * as dagPb from '@ipld/dag-pb';
3
+ import { CID_V0, CID_V1 } from './dir-sharded.js';
4
+ /**
5
+ * Estimate node size only based on DAGLink name and CID byte lengths
6
+ * https://github.com/ipfs/go-unixfsnode/blob/37b47f1f917f1b2f54c207682f38886e49896ef9/data/builder/directory.go#L81-L96
7
+ *
8
+ * If the node is a hamt sharded directory the calculation is based on if it was a regular directory.
9
+ */
10
+ export async function isOverShardThreshold(node, blockstore, threshold) {
11
+ if (node.Data == null) {
12
+ throw new Error('DagPB node had no data');
13
+ }
14
+ const unixfs = UnixFS.unmarshal(node.Data);
15
+ let size;
16
+ if (unixfs.type === 'directory') {
17
+ size = estimateNodeSize(node);
18
+ }
19
+ else if (unixfs.type === 'hamt-sharded-directory') {
20
+ size = await estimateShardSize(node, 0, threshold, blockstore);
21
+ }
22
+ else {
23
+ throw new Error('Can only estimate the size of directories or shards');
24
+ }
25
+ return size > threshold;
26
+ }
27
+ function estimateNodeSize(node) {
28
+ let size = 0;
29
+ // estimate size only based on DAGLink name and CID byte lengths
30
+ // https://github.com/ipfs/go-unixfsnode/blob/37b47f1f917f1b2f54c207682f38886e49896ef9/data/builder/directory.go#L81-L96
31
+ for (const link of node.Links) {
32
+ size += (link.Name ?? '').length;
33
+ size += link.Hash.version === 1 ? CID_V1.bytes.byteLength : CID_V0.bytes.byteLength;
34
+ }
35
+ return size;
36
+ }
37
+ async function estimateShardSize(node, current, max, blockstore) {
38
+ if (current > max) {
39
+ return max;
40
+ }
41
+ if (node.Data == null) {
42
+ return current;
43
+ }
44
+ const unixfs = UnixFS.unmarshal(node.Data);
45
+ if (!unixfs.isDirectory()) {
46
+ return current;
47
+ }
48
+ for (const link of node.Links) {
49
+ let name = link.Name ?? '';
50
+ // remove hamt hash prefix from name
51
+ name = name.substring(2);
52
+ current += name.length;
53
+ current += link.Hash.bytes.byteLength;
54
+ if (link.Hash.code === dagPb.code) {
55
+ const block = await blockstore.get(link.Hash);
56
+ const node = dagPb.decode(block);
57
+ current += await estimateShardSize(node, current, max, blockstore);
58
+ }
59
+ }
60
+ return current;
61
+ }
62
+ //# sourceMappingURL=is-over-shard-threshold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-over-shard-threshold.js","sourceRoot":"","sources":["../../../../src/commands/utils/is-over-shard-threshold.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEjD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAE,IAAY,EAAE,UAAsB,EAAE,SAAiB;IACjG,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;KAC1C;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1C,IAAI,IAAY,CAAA;IAEhB,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE;QAC/B,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;KAC9B;SAAM,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAwB,EAAE;QACnD,IAAI,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;KAC/D;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;KACvE;IAED,OAAO,IAAI,GAAG,SAAS,CAAA;AACzB,CAAC;AAED,SAAS,gBAAgB,CAAE,IAAY;IACrC,IAAI,IAAI,GAAG,CAAC,CAAA;IAEZ,gEAAgE;IAChE,wHAAwH;IACxH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;QAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAA;QAChC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAA;KACpF;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAE,IAAY,EAAE,OAAe,EAAE,GAAW,EAAE,UAAsB;IAClG,IAAI,OAAO,GAAG,GAAG,EAAE;QACjB,OAAO,GAAG,CAAA;KACX;IAED,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;QACrB,OAAO,OAAO,CAAA;KACf;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAE1C,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;QACzB,OAAO,OAAO,CAAA;KACf;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;QAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;QAE1B,oCAAoC;QACpC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAExB,OAAO,IAAI,IAAI,CAAC,MAAM,CAAA;QACtB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAA;QAErC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;YACjC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAEhC,OAAO,IAAI,MAAM,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;SACnE;KACF;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -1,10 +1,11 @@
1
- import { CID, Version } from 'multiformats/cid';
2
- import type { BlockCodec } from 'multiformats/codecs/interface';
3
- import type { AbortOptions } from '@libp2p/interfaces';
1
+ import { CID } from 'multiformats/cid';
4
2
  import type { Blockstore } from 'interface-blockstore';
5
- export interface PersistOptions extends AbortOptions {
3
+ import type { BlockCodec } from 'multiformats/codecs/interface';
4
+ import type { Version as CIDVersion } from 'multiformats/cid';
5
+ export interface PersistOptions {
6
6
  codec?: BlockCodec<any, any>;
7
- cidVersion?: Version;
7
+ cidVersion: CIDVersion;
8
+ signal?: AbortSignal;
8
9
  }
9
- export declare const persist: (buffer: Uint8Array, blockstore: Blockstore, options?: PersistOptions) => Promise<CID>;
10
+ export declare const persist: (buffer: Uint8Array, blockstore: Blockstore, options: PersistOptions) => Promise<CID>;
10
11
  //# sourceMappingURL=persist.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"persist.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/persist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,KAAK,CAAC,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,eAAO,MAAM,OAAO,WAAkB,UAAU,cAAc,UAAU,YAAW,cAAc,KAAQ,QAAQ,GAAG,CASnH,CAAA"}
1
+ {"version":3,"file":"persist.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/persist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7D,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAC5B,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,eAAO,MAAM,OAAO,WAAkB,UAAU,cAAc,UAAU,WAAW,cAAc,KAAG,QAAQ,GAAG,CAa9G,CAAA"}
@@ -1,9 +1,12 @@
1
1
  import { CID } from 'multiformats/cid';
2
- import * as dagPB from '@ipld/dag-pb';
2
+ import * as dagPb from '@ipld/dag-pb';
3
3
  import { sha256 } from 'multiformats/hashes/sha2';
4
- export const persist = async (buffer, blockstore, options = {}) => {
4
+ export const persist = async (buffer, blockstore, options) => {
5
+ if (options.codec == null) {
6
+ options.codec = dagPb;
7
+ }
5
8
  const multihash = await sha256.digest(buffer);
6
- const cid = CID.create(options.cidVersion ?? 1, dagPB.code, multihash);
9
+ const cid = CID.create(options.cidVersion, options.codec.code, multihash);
7
10
  await blockstore.put(cid, buffer, {
8
11
  signal: options.signal
9
12
  });
@@ -1 +1 @@
1
- {"version":3,"file":"persist.js","sourceRoot":"","sources":["../../../../src/commands/utils/persist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAUjD,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,MAAkB,EAAE,UAAsB,EAAE,UAA0B,EAAE,EAAgB,EAAE;IACtH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAEtE,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
1
+ {"version":3,"file":"persist.js","sourceRoot":"","sources":["../../../../src/commands/utils/persist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAWjD,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,MAAkB,EAAE,UAAsB,EAAE,OAAuB,EAAgB,EAAE;IACjH,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE;QACzB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;KACtB;IAED,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAEzE,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
@@ -1,11 +1,15 @@
1
- import { CID } from 'multiformats/cid';
1
+ import type { CID, Version } from 'multiformats/cid';
2
2
  import type { PBNode } from '@ipld/dag-pb';
3
3
  import type { Blockstore } from 'interface-blockstore';
4
4
  import type { Directory } from './cid-to-directory.js';
5
5
  import type { AbortOptions } from '@libp2p/interfaces';
6
+ export interface RmLinkOptions extends AbortOptions {
7
+ shardSplitThresholdBytes: number;
8
+ cidVersion: Version;
9
+ }
6
10
  export interface RemoveLinkResult {
7
11
  node: PBNode;
8
12
  cid: CID;
9
13
  }
10
- export declare function removeLink(parent: Directory, name: string, blockstore: Blockstore, options: AbortOptions): Promise<RemoveLinkResult>;
14
+ export declare function removeLink(parent: Directory, name: string, blockstore: Blockstore, options: RmLinkOptions): Promise<RemoveLinkResult>;
11
15
  //# sourceMappingURL=remove-link.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"remove-link.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/remove-link.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAQtC,OAAO,KAAK,EAAE,MAAM,EAAU,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAMtD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,GAAG,CAAA;CACT;AAED,wBAAsB,UAAU,CAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgB3I"}
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"}