@ipld/car
Version:
Content Addressable aRchive format reader and writer
69 lines (48 loc) • 1.31 kB
text/typescript
import type { Block, BlockIndex } from './api.js'
import type { CID } from 'multiformats/cid'
export interface CarEncoder {
setRoots(roots: CID[]): Promise<void>
writeBlock(block: Block): Promise<void>
close(): Promise<void>
version(): number
}
export interface IteratorChannel_Writer<T> {
write(chunk: T): Promise<void>
end(): Promise<void>
}
export interface IteratorChannel<T> {
writer: IteratorChannel_Writer<T>
iterator: AsyncIterator<T>
}
export interface CarHeader {
version: 1
roots: CID[]
}
export interface CarV2FixedHeader {
characteristics: [bigint, bigint]
dataOffset: number
dataSize: number
indexOffset: number
}
export interface CarV2Header extends CarV2FixedHeader {
version: 2
roots: CID[]
}
export interface CarDecoder {
header(): Promise<CarHeader | CarV2Header>
blocks(): AsyncGenerator<Block>
blocksIndex(): AsyncGenerator<BlockIndex>
}
export interface Seekable {
seek(length: number): void
}
export interface BytesReader extends Seekable {
upTo(length: number): Promise<Uint8Array>
exactly(length: number, seek?: boolean): Promise<Uint8Array>
pos: number
}
export interface BytesBufferReader extends Seekable {
upTo(length: number): Uint8Array
exactly(length: number, seek?: boolean): Uint8Array
pos: number
}