@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.
- package/dist/index.min.js +1 -1
- package/dist/src/index.d.ts +16 -2
- 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 +17 -2
- 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';
|
|
@@ -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(
|
|
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
|
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":"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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 @@
|
|
|
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.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(
|
|
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
|
+
}
|