@helia/unixfs 1.3.0 → 1.4.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.
@@ -29,6 +29,18 @@
29
29
  * console.info(entry)
30
30
  * }
31
31
  * ```
32
+ *
33
+ * @example
34
+ *
35
+ * Recursively adding a directory (Node.js-compatibly environments only):
36
+ *
37
+ * ```typescript
38
+ * import { globSource } from '@helia/unixfs'
39
+ *
40
+ * for await (const entry of fs.addAll(globSource('path/to/containing/dir', 'glob-pattern'))) {
41
+ * console.info(entry)
42
+ * }
43
+ * ```
32
44
  */
33
45
  import type { Blocks, GetBlockProgressEvents, PutBlockProgressEvents } from '@helia/interface/blocks';
34
46
  import type { AbortOptions } from '@libp2p/interfaces';
@@ -328,7 +340,7 @@ export interface UnixFS {
328
340
  *
329
341
  * ```typescript
330
342
  * const cid = await fs.addFile({
331
- * path: './foo.txt'
343
+ * path: './foo.txt',
332
344
  * content: Uint8Array.from([0, 1, 2, 3]),
333
345
  * mode: 0x755,
334
346
  * mtime: {
@@ -404,7 +416,7 @@ export interface UnixFS {
404
416
  *
405
417
  * ```typescript
406
418
  * for await (const entry of fs.ls(directoryCid)) {
407
- * console.info(etnry)
419
+ * console.info(entry)
408
420
  * }
409
421
  * ```
410
422
  */
@@ -476,4 +488,6 @@ export interface UnixFS {
476
488
  export declare function unixfs(helia: {
477
489
  blockstore: Blocks;
478
490
  }): UnixFS;
491
+ export { globSource } from './utils/glob-source.js';
492
+ export { urlSource } from './utils/url-source.js';
479
493
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAWH,OAAO,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AACrG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACvK,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,MAAM,SAAS,GAAG,sBAAsB,GAC5C,sBAAsB,CAAA;AAExB,MAAM,WAAW,UAAW,SAAQ,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC;CAEhH;AAED,MAAM,MAAM,SAAS,GAAG,sBAAsB,GAC5C,sBAAsB,CAAA;AAExB;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,CAAC;IAC1E;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,GAAG,sBAAsB,CAAC;IACrG;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAA;IAElB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;;OAGG;IACH,wBAAwB,EAAE,MAAM,CAAA;IAEhC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,GAAG,sBAAsB,CAAC;IAClG;;OAEG;IACH,KAAK,EAAE,OAAO,CAAA;IAEd;;;OAGG;IACH,wBAAwB,EAAE,MAAM,CAAA;IAEhC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,CAAC;IACzE;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,GAAG,sBAAsB,CAAC;IACrG;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAA;IAEnB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAA;IAEd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAA;IAEb;;;OAGG;IACH,wBAAwB,EAAE,MAAM,CAAA;IAEhC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,GAAG,sBAAsB,CAAC;IAClG;;;OAGG;IACH,wBAAwB,EAAE,MAAM,CAAA;IAEhC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,CAAC;IAC3E;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,GAAG,EAAE,GAAG,CAAA;IAER;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAA;IAEb;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,KAAK,CAAA;IAElC;;;OAGG;IACH,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,GAAG,sBAAsB,CAAC;IACrG;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAA;IAEb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;IAElB;;;OAGG;IACH,wBAAwB,EAAE,MAAM,CAAA;IAEhC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,aAAa,CAAC,YAAY,CAAC,CAAA;IAErG;;;;;;;;;;OAUG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAE5E;;;;;;;;;;;;;OAaG;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEjF;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAE7E;;;;;;;;;;OAUG;IACH,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEhG;;;;;;;;;;OAUG;IACH,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,aAAa,CAAC,UAAU,CAAC,CAAA;IAE3E;;;;;;;;;;;;;;;OAeG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEhF;;;;;;;;;;;;;OAaG;IACH,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAE1F;;;;;;;;;;OAUG;IACH,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,aAAa,CAAC,WAAW,CAAC,CAAA;IAE1E;;;;;;;;;;;;OAYG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEnF;;;;;;;;;;;;;OAaG;IACH,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAE1E;;;;;;;;;;;;OAYG;IACH,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;IAExE;;;;;;;;;;;;;;;OAeG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;CACnE;AA8DD;;GAEG;AACH,wBAAgB,MAAM,CAAE,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE7D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAWH,OAAO,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AACrG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACvK,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,MAAM,SAAS,GAAG,sBAAsB,GAC5C,sBAAsB,CAAA;AAExB,MAAM,WAAW,UAAW,SAAQ,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC;CAEhH;AAED,MAAM,MAAM,SAAS,GAAG,sBAAsB,GAC5C,sBAAsB,CAAA;AAExB;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,CAAC;IAC1E;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,GAAG,sBAAsB,CAAC;IACrG;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAA;IAElB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;;OAGG;IACH,wBAAwB,EAAE,MAAM,CAAA;IAEhC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,GAAG,sBAAsB,CAAC;IAClG;;OAEG;IACH,KAAK,EAAE,OAAO,CAAA;IAEd;;;OAGG;IACH,wBAAwB,EAAE,MAAM,CAAA;IAEhC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,CAAC;IACzE;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,GAAG,sBAAsB,CAAC;IACrG;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAA;IAEnB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAA;IAEd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAA;IAEb;;;OAGG;IACH,wBAAwB,EAAE,MAAM,CAAA;IAEhC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,GAAG,sBAAsB,CAAC;IAClG;;;OAGG;IACH,wBAAwB,EAAE,MAAM,CAAA;IAEhC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,CAAC;IAC3E;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,GAAG,EAAE,GAAG,CAAA;IAER;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAA;IAEb;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,KAAK,CAAA;IAElC;;;OAGG;IACH,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY,EAAE,eAAe,CAAC,SAAS,GAAG,sBAAsB,CAAC;IACrG;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAA;IAEb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;IAElB;;;OAGG;IACH,wBAAwB,EAAE,MAAM,CAAA;IAEhC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,aAAa,CAAC,YAAY,CAAC,CAAA;IAErG;;;;;;;;;;OAUG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAE5E;;;;;;;;;;;;;OAaG;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEjF;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAE7E;;;;;;;;;;OAUG;IACH,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEhG;;;;;;;;;;OAUG;IACH,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,aAAa,CAAC,UAAU,CAAC,CAAA;IAE3E;;;;;;;;;;;;;;;OAeG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEhF;;;;;;;;;;;;;OAaG;IACH,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAE1F;;;;;;;;;;OAUG;IACH,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,aAAa,CAAC,WAAW,CAAC,CAAA;IAE1E;;;;;;;;;;;;OAYG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEnF;;;;;;;;;;;;;OAaG;IACH,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAE1E;;;;;;;;;;;;OAYG;IACH,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;IAExE;;;;;;;;;;;;;;;OAeG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;CACnE;AA8DD;;GAEG;AACH,wBAAgB,MAAM,CAAE,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE7D;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA"}
package/dist/src/index.js CHANGED
@@ -29,6 +29,18 @@
29
29
  * console.info(entry)
30
30
  * }
31
31
  * ```
32
+ *
33
+ * @example
34
+ *
35
+ * Recursively adding a directory (Node.js-compatibly environments only):
36
+ *
37
+ * ```typescript
38
+ * import { globSource } from '@helia/unixfs'
39
+ *
40
+ * for await (const entry of fs.addAll(globSource('path/to/containing/dir', 'glob-pattern'))) {
41
+ * console.info(entry)
42
+ * }
43
+ * ```
32
44
  */
33
45
  import { addAll, addBytes, addByteStream, addDirectory, addFile } from './commands/add.js';
34
46
  import { cat } from './commands/cat.js';
@@ -90,4 +102,6 @@ class DefaultUnixFS {
90
102
  export function unixfs(helia) {
91
103
  return new DefaultUnixFS(helia);
92
104
  }
105
+ export { globSource } from './utils/glob-source.js';
106
+ export { urlSource } from './utils/url-source.js';
93
107
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { MtimeLike } from 'ipfs-unixfs';
2
+ import type { ImportCandidateStream } from 'ipfs-unixfs-importer';
3
+ export interface GlobSourceOptions {
4
+ /**
5
+ * Include .dot files in matched paths
6
+ */
7
+ hidden?: boolean;
8
+ /**
9
+ * follow symlinks
10
+ */
11
+ followSymlinks?: boolean;
12
+ /**
13
+ * Preserve mode
14
+ */
15
+ preserveMode?: boolean;
16
+ /**
17
+ * Preserve mtime
18
+ */
19
+ preserveMtime?: boolean;
20
+ /**
21
+ * mode to use - if preserveMode is true this will be ignored
22
+ */
23
+ mode?: number;
24
+ /**
25
+ * mtime to use - if preserveMtime is true this will be ignored
26
+ */
27
+ mtime?: MtimeLike;
28
+ }
29
+ export interface GlobSourceResult {
30
+ path: string;
31
+ content: AsyncIterable<Uint8Array> | undefined;
32
+ mode: number | undefined;
33
+ mtime: MtimeLike | undefined;
34
+ }
35
+ /**
36
+ * Create an async iterator that yields paths that match requested glob pattern
37
+ */
38
+ export declare function globSource(cwd: string, pattern: string, options?: GlobSourceOptions): ImportCandidateStream;
39
+ //# sourceMappingURL=glob-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob-source.d.ts","sourceRoot":"","sources":["../../../src/utils/glob-source.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAEjE,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IAExB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,SAAS,CAAA;IAC9C,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,KAAK,EAAE,SAAS,GAAG,SAAS,CAAA;CAC7B;AAED;;GAEG;AACH,wBAAwB,UAAU,CAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,qBAAqB,CAuCxH"}
@@ -0,0 +1,42 @@
1
+ import fs from 'node:fs';
2
+ import fsp from 'node:fs/promises';
3
+ import Path from 'node:path';
4
+ import glob from 'it-glob';
5
+ import { InvalidParametersError } from '../errors.js';
6
+ /**
7
+ * Create an async iterator that yields paths that match requested glob pattern
8
+ */
9
+ export async function* globSource(cwd, pattern, options = {}) {
10
+ if (typeof pattern !== 'string') {
11
+ throw new InvalidParametersError('Pattern must be a string');
12
+ }
13
+ if (!Path.isAbsolute(cwd)) {
14
+ cwd = Path.resolve(process.cwd(), cwd);
15
+ }
16
+ const globOptions = Object.assign({}, {
17
+ nodir: false,
18
+ realpath: false,
19
+ absolute: true,
20
+ dot: Boolean(options.hidden),
21
+ follow: options.followSymlinks != null ? options.followSymlinks : true
22
+ });
23
+ for await (const p of glob(cwd, pattern, globOptions)) {
24
+ const stat = await fsp.stat(p);
25
+ let mode = options.mode;
26
+ if (options.preserveMode === true) {
27
+ mode = stat.mode;
28
+ }
29
+ let mtime = options.mtime;
30
+ if (options.preserveMtime === true) {
31
+ mtime = stat.mtime;
32
+ }
33
+ yield {
34
+ path: toPosix(p.replace(cwd, '')),
35
+ content: stat.isFile() ? fs.createReadStream(p) : undefined,
36
+ mode,
37
+ mtime
38
+ };
39
+ }
40
+ }
41
+ const toPosix = (path) => path.replace(/\\/g, '/');
42
+ //# sourceMappingURL=glob-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob-source.js","sourceRoot":"","sources":["../../../src/utils/glob-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,GAAG,MAAM,kBAAkB,CAAA;AAClC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,IAAI,MAAM,SAAS,CAAA;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AA2CrD;;GAEG;AACH,MAAM,CAAC,KAAK,SAAU,CAAC,CAAC,UAAU,CAAE,GAAW,EAAE,OAAe,EAAE,UAA6B,EAAE;IAC/F,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,MAAM,IAAI,sBAAsB,CAAC,0BAA0B,CAAC,CAAA;KAC7D;IAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QACzB,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;KACvC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;QACpC,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5B,MAAM,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;KACvE,CAAC,CAAA;IAEF,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE;QACrD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAE9B,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QAEvB,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI,EAAE;YACjC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;SACjB;QAED,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAEzB,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,EAAE;YAClC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;SACnB;QAED,MAAM;YACJ,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACjC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YAC3D,IAAI;YACJ,KAAK;SACN,CAAA;KACF;AACH,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { FileCandidate } from 'ipfs-unixfs-importer';
2
+ export declare function urlSource(url: URL, options?: RequestInit): FileCandidate<AsyncGenerator<Uint8Array, void, unknown>>;
3
+ //# sourceMappingURL=url-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-source.d.ts","sourceRoot":"","sources":["../../../src/utils/url-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEzD,wBAAgB,SAAS,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,aAAa,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAKpH"}
@@ -0,0 +1,29 @@
1
+ import { UnknownError } from '../errors.js';
2
+ export function urlSource(url, options) {
3
+ return {
4
+ path: decodeURIComponent(new URL(url).pathname.split('/').pop() ?? ''),
5
+ content: readURLContent(url, options)
6
+ };
7
+ }
8
+ async function* readURLContent(url, options) {
9
+ const response = await globalThis.fetch(url, options);
10
+ if (response.body == null) {
11
+ throw new UnknownError('HTTP response did not have a body');
12
+ }
13
+ const reader = response.body.getReader();
14
+ try {
15
+ while (true) {
16
+ const { done, value } = await reader.read();
17
+ if (done) {
18
+ return;
19
+ }
20
+ if (value != null) {
21
+ yield value;
22
+ }
23
+ }
24
+ }
25
+ finally {
26
+ reader.releaseLock();
27
+ }
28
+ }
29
+ //# sourceMappingURL=url-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-source.js","sourceRoot":"","sources":["../../../src/utils/url-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,MAAM,UAAU,SAAS,CAAE,GAAQ,EAAE,OAAqB;IACxD,OAAO;QACL,IAAI,EAAE,kBAAkB,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACtE,OAAO,EAAE,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC;KACtC,CAAA;AACH,CAAC;AAED,KAAK,SAAU,CAAC,CAAC,cAAc,CAAE,GAAQ,EAAE,OAAqB;IAC9D,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAErD,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE;QACzB,MAAM,IAAI,YAAY,CAAC,mCAAmC,CAAC,CAAA;KAC5D;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAA;IAExC,IAAI;QACF,OAAO,IAAI,EAAE;YACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YAE3C,IAAI,IAAI,EAAE;gBACR,OAAM;aACP;YAED,IAAI,KAAK,IAAI,IAAI,EAAE;gBACjB,MAAM,KAAK,CAAA;aACZ;SACF;KACF;YAAS;QACR,MAAM,CAAC,WAAW,EAAE,CAAA;KACrB;AACH,CAAC"}
@@ -9,6 +9,7 @@
9
9
  "NotUnixFSError": "https://ipfs.github.io/helia-unixfs/classes/errors.NotUnixFSError.html",
10
10
  "UnixFSError": "https://ipfs.github.io/helia-unixfs/classes/errors.UnixFSError.html",
11
11
  "UnknownError": "https://ipfs.github.io/helia-unixfs/classes/errors.UnknownError.html",
12
+ "GlobSourceOptions": "https://ipfs.github.io/helia-unixfs/interfaces/index._internal_.GlobSourceOptions.html",
12
13
  "AddOptions": "https://ipfs.github.io/helia-unixfs/interfaces/index.AddOptions.html",
13
14
  "CatOptions": "https://ipfs.github.io/helia-unixfs/interfaces/index.CatOptions.html",
14
15
  "ChmodOptions": "https://ipfs.github.io/helia-unixfs/interfaces/index.ChmodOptions.html",
@@ -23,5 +24,7 @@
23
24
  "UnixFSStats": "https://ipfs.github.io/helia-unixfs/interfaces/index.UnixFSStats.html",
24
25
  "AddEvents": "https://ipfs.github.io/helia-unixfs/types/index.AddEvents.html",
25
26
  "GetEvents": "https://ipfs.github.io/helia-unixfs/types/index.GetEvents.html",
26
- "unixfs": "https://ipfs.github.io/helia-unixfs/functions/index.unixfs-1.html"
27
+ "globSource": "https://ipfs.github.io/helia-unixfs/functions/index.globSource.html",
28
+ "unixfs": "https://ipfs.github.io/helia-unixfs/functions/index.unixfs-1.html",
29
+ "urlSource": "https://ipfs.github.io/helia-unixfs/functions/index.urlSource.html"
27
30
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helia/unixfs",
3
- "version": "1.3.0",
3
+ "version": "1.4.1",
4
4
  "description": "A Helia-compatible wrapper for UnixFS",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/ipfs/helia-unixfs/tree/master/packages/unixfs#readme",
@@ -165,6 +165,7 @@
165
165
  "ipfs-unixfs": "^11.0.0",
166
166
  "ipfs-unixfs-exporter": "^13.1.0",
167
167
  "ipfs-unixfs-importer": "^15.1.0",
168
+ "it-glob": "^2.0.4",
168
169
  "it-last": "^3.0.1",
169
170
  "it-pipe": "^3.0.1",
170
171
  "merge-options": "^3.0.4",
@@ -176,13 +177,22 @@
176
177
  "aegir": "^39.0.8",
177
178
  "blockstore-core": "^4.0.1",
178
179
  "delay": "^6.0.0",
180
+ "iso-url": "^1.2.1",
179
181
  "it-all": "^3.0.1",
180
182
  "it-drain": "^3.0.1",
181
183
  "it-first": "^3.0.1",
182
184
  "it-to-buffer": "^4.0.1",
183
- "uint8arrays": "^4.0.3"
185
+ "uint8arrays": "^4.0.3",
186
+ "wherearewe": "^2.0.1"
184
187
  },
185
188
  "typedoc": {
186
189
  "entryPoint": "./src/index.ts"
190
+ },
191
+ "browser": {
192
+ "./dist/src/utils/glob-source.js": false,
193
+ "node:fs": false,
194
+ "node:fs/promises": false,
195
+ "node:path": false,
196
+ "node:url": false
187
197
  }
188
198
  }
package/src/index.ts CHANGED
@@ -29,6 +29,18 @@
29
29
  * console.info(entry)
30
30
  * }
31
31
  * ```
32
+ *
33
+ * @example
34
+ *
35
+ * Recursively adding a directory (Node.js-compatibly environments only):
36
+ *
37
+ * ```typescript
38
+ * import { globSource } from '@helia/unixfs'
39
+ *
40
+ * for await (const entry of fs.addAll(globSource('path/to/containing/dir', 'glob-pattern'))) {
41
+ * console.info(entry)
42
+ * }
43
+ * ```
32
44
  */
33
45
 
34
46
  import { addAll, addBytes, addByteStream, addDirectory, addFile } from './commands/add.js'
@@ -389,7 +401,7 @@ export interface UnixFS {
389
401
  *
390
402
  * ```typescript
391
403
  * const cid = await fs.addFile({
392
- * path: './foo.txt'
404
+ * path: './foo.txt',
393
405
  * content: Uint8Array.from([0, 1, 2, 3]),
394
406
  * mode: 0x755,
395
407
  * mtime: {
@@ -470,7 +482,7 @@ export interface UnixFS {
470
482
  *
471
483
  * ```typescript
472
484
  * for await (const entry of fs.ls(directoryCid)) {
473
- * console.info(etnry)
485
+ * console.info(entry)
474
486
  * }
475
487
  * ```
476
488
  */
@@ -607,3 +619,6 @@ class DefaultUnixFS implements UnixFS {
607
619
  export function unixfs (helia: { blockstore: Blocks }): UnixFS {
608
620
  return new DefaultUnixFS(helia)
609
621
  }
622
+
623
+ export { globSource } from './utils/glob-source.js'
624
+ export { urlSource } from './utils/url-source.js'
@@ -0,0 +1,92 @@
1
+ import fs from 'node:fs'
2
+ import fsp from 'node:fs/promises'
3
+ import Path from 'node:path'
4
+ import glob from 'it-glob'
5
+ import { InvalidParametersError } from '../errors.js'
6
+ import type { MtimeLike } from 'ipfs-unixfs'
7
+ import type { ImportCandidateStream } from 'ipfs-unixfs-importer'
8
+
9
+ export interface GlobSourceOptions {
10
+ /**
11
+ * Include .dot files in matched paths
12
+ */
13
+ hidden?: boolean
14
+
15
+ /**
16
+ * follow symlinks
17
+ */
18
+ followSymlinks?: boolean
19
+
20
+ /**
21
+ * Preserve mode
22
+ */
23
+ preserveMode?: boolean
24
+
25
+ /**
26
+ * Preserve mtime
27
+ */
28
+ preserveMtime?: boolean
29
+
30
+ /**
31
+ * mode to use - if preserveMode is true this will be ignored
32
+ */
33
+ mode?: number
34
+
35
+ /**
36
+ * mtime to use - if preserveMtime is true this will be ignored
37
+ */
38
+ mtime?: MtimeLike
39
+ }
40
+
41
+ export interface GlobSourceResult {
42
+ path: string
43
+ content: AsyncIterable<Uint8Array> | undefined
44
+ mode: number | undefined
45
+ mtime: MtimeLike | undefined
46
+ }
47
+
48
+ /**
49
+ * Create an async iterator that yields paths that match requested glob pattern
50
+ */
51
+ export async function * globSource (cwd: string, pattern: string, options: GlobSourceOptions = {}): ImportCandidateStream {
52
+ if (typeof pattern !== 'string') {
53
+ throw new InvalidParametersError('Pattern must be a string')
54
+ }
55
+
56
+ if (!Path.isAbsolute(cwd)) {
57
+ cwd = Path.resolve(process.cwd(), cwd)
58
+ }
59
+
60
+ const globOptions = Object.assign({}, {
61
+ nodir: false,
62
+ realpath: false,
63
+ absolute: true,
64
+ dot: Boolean(options.hidden),
65
+ follow: options.followSymlinks != null ? options.followSymlinks : true
66
+ })
67
+
68
+ for await (const p of glob(cwd, pattern, globOptions)) {
69
+ const stat = await fsp.stat(p)
70
+
71
+ let mode = options.mode
72
+
73
+ if (options.preserveMode === true) {
74
+ mode = stat.mode
75
+ }
76
+
77
+ let mtime = options.mtime
78
+
79
+ if (options.preserveMtime === true) {
80
+ mtime = stat.mtime
81
+ }
82
+
83
+ yield {
84
+ path: toPosix(p.replace(cwd, '')),
85
+ content: stat.isFile() ? fs.createReadStream(p) : undefined,
86
+ mode,
87
+ mtime
88
+ }
89
+ }
90
+ }
91
+
92
+ const toPosix = (path: string): string => path.replace(/\\/g, '/')
@@ -0,0 +1,35 @@
1
+ import { UnknownError } from '../errors.js'
2
+ import type { FileCandidate } from 'ipfs-unixfs-importer'
3
+
4
+ export function urlSource (url: URL, options?: RequestInit): FileCandidate<AsyncGenerator<Uint8Array, void, unknown>> {
5
+ return {
6
+ path: decodeURIComponent(new URL(url).pathname.split('/').pop() ?? ''),
7
+ content: readURLContent(url, options)
8
+ }
9
+ }
10
+
11
+ async function * readURLContent (url: URL, options?: RequestInit): AsyncGenerator<Uint8Array, void, unknown> {
12
+ const response = await globalThis.fetch(url, options)
13
+
14
+ if (response.body == null) {
15
+ throw new UnknownError('HTTP response did not have a body')
16
+ }
17
+
18
+ const reader = response.body.getReader()
19
+
20
+ try {
21
+ while (true) {
22
+ const { done, value } = await reader.read()
23
+
24
+ if (done) {
25
+ return
26
+ }
27
+
28
+ if (value != null) {
29
+ yield value
30
+ }
31
+ }
32
+ } finally {
33
+ reader.releaseLock()
34
+ }
35
+ }