Skip to content

Commit e88be2b

Browse files
committed
feat: export options to importer
1 parent 3037bd3 commit e88be2b

File tree

4 files changed

+40
-15
lines changed

4 files changed

+40
-15
lines changed

packages/ipfs-unixfs-importer/src/dag-builder/dir.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@ export interface DirBuilderOptions {
1313
signal?: AbortSignal
1414
}
1515

16+
export interface DirBuilder {
17+
(
18+
dir: Directory,
19+
blockstore: WritableStorage,
20+
options: DirBuilderOptions
21+
): Promise<InProgressImportResult>
22+
}
23+
1624
export const defaultDirBuilder = async (
1725
dir: Directory,
1826
blockstore: WritableStorage,

packages/ipfs-unixfs-importer/src/dag-builder/file.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,14 @@ const reduce = (
232232
return reducer
233233
}
234234

235+
export interface FileBuilder {
236+
(
237+
file: File,
238+
blockstore: WritableStorage,
239+
options: FileBuilderOptions
240+
): Promise<InProgressImportResult>
241+
}
242+
235243
export interface FileBuilderOptions
236244
extends BuildFileBatchOptions,
237245
ReduceOptions {

packages/ipfs-unixfs-importer/src/dag-builder/index.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import errCode from 'err-code'
22
import { CustomProgressEvent } from 'progress-events'
3-
import { defaultDirBuilder, type DirBuilderOptions } from './dir.js'
4-
import { defaultFileBuilder, type FileBuilderOptions } from './file.js'
3+
import { defaultDirBuilder, type DirBuilder, type DirBuilderOptions } from './dir.js'
4+
import { defaultFileBuilder, type FileBuilder, type FileBuilderOptions } from './file.js'
55
import type { ChunkValidator } from './validate-chunks.js'
66
import type { Chunker } from '../chunker/index.js'
77
import type {
@@ -77,16 +77,8 @@ export interface DagBuilderOptions
7777
chunker: Chunker
7878
chunkValidator: ChunkValidator
7979
wrapWithDirectory: boolean
80-
dirBuilder?(
81-
dir: Directory,
82-
blockstore: WritableStorage,
83-
options: DirBuilderOptions
84-
): Promise<InProgressImportResult>
85-
fileBuilder?(
86-
file: File,
87-
blockstore: WritableStorage,
88-
options: FileBuilderOptions
89-
): Promise<InProgressImportResult>
80+
dirBuilder?: DirBuilder
81+
fileBuilder?: FileBuilder
9082
}
9183

9284
export type ImporterSourceStream =

packages/ipfs-unixfs-importer/src/index.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ import { type ChunkValidator, defaultChunkValidator } from './dag-builder/valida
7272
import { balanced, type FileLayout } from './layout/index.js'
7373
import { defaultTreeBuilder } from './tree-builder.js'
7474
import type { Chunker } from './chunker/index.js'
75-
import type { ReducerProgressEvents } from './dag-builder/file.js'
75+
import type { DirBuilder } from './dag-builder/dir.js'
76+
import type { FileBuilder, ReducerProgressEvents } from './dag-builder/file.js'
7677
import type { Blockstore } from 'interface-blockstore'
7778
import type { AwaitIterable } from 'interface-store'
7879
import type { UnixFS, Mtime } from 'ipfs-unixfs'
@@ -270,6 +271,20 @@ export interface ImporterOptions extends ProgressOptions<ImporterProgressEvents>
270271
* `Error`
271272
*/
272273
chunkValidator?: ChunkValidator
274+
275+
/**
276+
* This option can be used to override how a directory IPLD node is built.
277+
*
278+
* This function takes a `Directory` object and returns a `Promise` that resolves to an `InProgressImportResult`.
279+
*/
280+
dirBuilder?: DirBuilder
281+
282+
/**
283+
* This option can be used to override how a file IPLD node is built.
284+
*
285+
* This function takes a `File` object and returns a `Promise` that resolves to an `InProgressImportResult`.
286+
*/
287+
fileBuilder?: FileBuilder
273288
}
274289

275290
export type ImportCandidateStream = AsyncIterable<FileCandidate | DirectoryCandidate> | Iterable<FileCandidate | DirectoryCandidate>
@@ -319,7 +334,7 @@ export async function * importer (source: ImportCandidateStream, blockstore: Wri
319334
const fileImportConcurrency = options.fileImportConcurrency ?? 50
320335
const blockWriteConcurrency = options.blockWriteConcurrency ?? 10
321336
const reduceSingleLeafToSelf = options.reduceSingleLeafToSelf ?? true
322-
337+
323338

324339
const chunker = options.chunker ?? fixedSize()
325340
const chunkValidator = options.chunkValidator ?? defaultChunkValidator()
@@ -337,7 +352,9 @@ export async function * importer (source: ImportCandidateStream, blockstore: Wri
337352
blockWriteConcurrency,
338353
reduceSingleLeafToSelf,
339354
cidVersion,
340-
onProgress: options.onProgress
355+
onProgress: options.onProgress,
356+
dirBuilder: options.dirBuilder,
357+
fileBuilder: options.fileBuilder
341358
})
342359
const buildTree: TreeBuilder = options.treeBuilder ?? defaultTreeBuilder({
343360
wrapWithDirectory,

0 commit comments

Comments
 (0)