import multiformats , { CID } from "multiformats/basics.js" ; import dagcbor from "@ipld/dag-cbor" ; import dagjson from "@ipld/dag-json" ; import create from "@ipld/block" ; import base58 from "multiformats/bases/base58.js" ; multiformats . multibase . add ( base58 ) ; multiformats . multicodec . add ( [ dagcbor , dagjson ] ) ; const _Block = create ( multiformats ) ; interface Constructor < T > { new ( parent ) : T ; } param obj param name param ctor protected ignore export function addSubclass < T > ( obj , name , ctor ) { Object . defineProperty ( obj . prototype , name , { enumerable : true , get : function ( ) { const value = new ctor ( this ) ; Object . defineProperty ( this , name , { value : value , configurable : false , writable : false , enumerable : true , } ) ; return value ; } , } ) ; } export type Codec = never ; export interface Reader < T > { get ( path ) : { value : T ; remainderPath ? : string ; remaining ? : string ; } ; links ( ) : IterableIterator < [ string , CID ] > ; tree ( ) : IterableIterator < string > ; } export interface Options < T = any > { source ? : T ; data ? : Uint8Array ; codec ? : string ; cid ? : CID | string ; algo ? : string ; } export interface Block < T = any > { opts : Options < T > ; readonly codec : string ; source ( ) : T | null ; cid ( ) : Promise < CID > ; validate ( ) : boolean ; encode ( ) : Uint8Array ; encodeUnsafe ( ) : Uint8Array ; decode ( ) : T ; decodeUnsafe ( ) : T ; reader ( ) : Reader < T > ; } export interface BlockConstructor { new < T > ( opts ) : Block < T > ; getCodec ( codec ) : Codec ; encoder < T > ( source , codec , algorithm ? ) : Block < T > ; decoder < T = any > ( data , codec , algorithm ? ) : Block < T > ; create < T = any > ( data , cid ) : Block < T > ; } export const Block = _Block ;