@helia/unixfs 1.3.0 → 1.4.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/dist/index.min.js +3 -1
- package/dist/src/index.d.ts +14 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +14 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/utils/glob-source.d.ts +39 -0
- package/dist/src/utils/glob-source.d.ts.map +1 -0
- package/dist/src/utils/glob-source.js +42 -0
- package/dist/src/utils/glob-source.js.map +1 -0
- package/dist/src/utils/url-source.d.ts +3 -0
- package/dist/src/utils/url-source.d.ts.map +1 -0
- package/dist/src/utils/url-source.js +29 -0
- package/dist/src/utils/url-source.js.map +1 -0
- package/dist/typedoc-urls.json +4 -1
- package/package.json +12 -2
- package/src/index.ts +15 -0
- package/src/utils/glob-source.ts +92 -0
- package/src/utils/url-source.ts +35 -0
package/dist/src/index.d.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
|
import type { Blocks, GetBlockProgressEvents, PutBlockProgressEvents } from '@helia/interface/blocks';
|
|
34
46
|
import type { AbortOptions } from '@libp2p/interfaces';
|
|
@@ -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
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
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
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC1F,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAsf3C,MAAM,aAAa;IACA,UAAU,CAAkB;IAE7C,YAAa,UAA4B;QACvC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,CAAE,MAAM,CAAE,MAA6B,EAAE,UAA+B,EAAE;QAC9E,KAAM,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAC7D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAE,KAAiB,EAAE,UAA+B,EAAE;QAClE,OAAO,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAC7D,CAAC;IAED,KAAK,CAAC,aAAa,CAAE,KAAiB,EAAE,UAA+B,EAAE;QACvE,OAAO,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAClE,CAAC;IAED,KAAK,CAAC,OAAO,CAAE,IAAmB,EAAE,UAA+B,EAAE;QACnE,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,CAAC,YAAY,CAAE,MAAmC,EAAE,EAAE,UAA+B,EAAE;QAC1F,OAAO,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAC/D,CAAC;IAED,KAAK,CAAC,CAAE,GAAG,CAAE,GAAQ,EAAE,UAA+B,EAAE;QACtD,KAAM,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,KAAK,CAAE,GAAQ,EAAE,IAAY,EAAE,UAAiC,EAAE;QACtE,OAAO,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAC9D,CAAC;IAED,KAAK,CAAC,EAAE,CAAE,MAAW,EAAE,MAAW,EAAE,IAAY,EAAE,UAA8B,EAAE;QAChF,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACtE,CAAC;IAED,KAAK,CAAC,CAAE,EAAE,CAAE,GAAQ,EAAE,UAA8B,EAAE;QACpD,KAAM,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,KAAK,CAAE,GAAQ,EAAE,OAAe,EAAE,UAAiC,EAAE;QACzE,OAAO,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACjE,CAAC;IAED,KAAK,CAAC,EAAE,CAAE,GAAQ,EAAE,IAAY,EAAE,UAA8B,EAAE;QAChE,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,CAAC,IAAI,CAAE,GAAQ,EAAE,UAAgC,EAAE;QACtD,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,KAAK,CAAE,GAAQ,EAAE,UAAiC,EAAE;QACxD,OAAO,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACxD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAE,KAA6B;IACnD,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,CAAA;AACjC,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -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 @@
|
|
|
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"}
|
package/dist/typedoc-urls.json
CHANGED
|
@@ -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
|
-
"
|
|
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
|
+
"version": "1.4.0",
|
|
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/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'
|
|
@@ -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
|
+
}
|