UNPKG

ipfs-unixfs-importer

Version:

JavaScript implementation of the UnixFs importer used by IPFS

64 lines (57 loc) 2.08 kB
import { CID } from 'multiformats/cid' import type { WritableStorage, ImportResult, InProgressImportResult } from './index.js' import type { PersistOptions } from './utils/persist.js' import type { Mtime, UnixFS } from 'ipfs-unixfs' export interface DirProps { root: boolean dir: boolean path: string dirty: boolean flat: boolean parent?: Dir parentKey?: string unixfs?: UnixFS mode?: number mtime?: Mtime } export abstract class Dir { public options: PersistOptions public root: boolean public dir: boolean public path: string public dirty: boolean public flat: boolean public parent?: Dir public parentKey?: string public unixfs?: UnixFS public mode?: number public mtime?: Mtime public cid?: CID public size?: number public nodeSize?: number constructor (props: DirProps, options: PersistOptions) { this.options = options ?? {} this.root = props.root this.dir = props.dir this.path = props.path this.dirty = props.dirty this.flat = props.flat this.parent = props.parent this.parentKey = props.parentKey this.unixfs = props.unixfs this.mode = props.mode this.mtime = props.mtime } abstract put (name: string, value: InProgressImportResult | Dir): Promise<void> abstract get (name: string): Promise<InProgressImportResult | Dir | undefined> abstract eachChildSeries (): AsyncIterable<{ key: string, child: InProgressImportResult | Dir }> abstract flush (blockstore: WritableStorage): AsyncGenerator<ImportResult> abstract estimateNodeSize (): number abstract childCount (): number } // we use these to calculate the node size to use as a check for whether a directory // should be sharded or not. Since CIDs have a constant length and We're only // interested in the data length and not the actual content identifier we can use // any old CID instead of having to hash the data which is expensive. export const CID_V0 = CID.parse('QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn') export const CID_V1 = CID.parse('zdj7WbTaiJT1fgatdet9Ei9iDB5hdCxkbVyhyh8YTUnXMiwYi')