@@ -9,7 +9,8 @@ const resolvers = {
99 directory : require ( './dir-flat' ) ,
1010 'hamt-sharded-directory' : require ( './dir-hamt-sharded' ) ,
1111 file : require ( './file' ) ,
12- object : require ( './object' )
12+ object : require ( './object' ) ,
13+ raw : require ( './raw' )
1314}
1415
1516module . exports = Object . assign ( {
@@ -31,39 +32,45 @@ function createResolver (dag, options, depth, parent) {
3132 if ( ( typeof item . depth ) !== 'number' ) {
3233 return pull . error ( new Error ( 'no depth' ) )
3334 }
35+
3436 if ( item . object ) {
35- return cb ( null , resolveItem ( item . object , item , options . offset , options . length ) )
37+ return cb ( null , resolveItem ( null , item . object , item , options . offset , options . length ) )
3638 }
37- dag . get ( new CID ( item . multihash ) , ( err , node ) => {
39+
40+ const cid = new CID ( item . multihash )
41+
42+ dag . get ( cid , ( err , node ) => {
3843 if ( err ) {
3944 return cb ( err )
4045 }
4146 // const name = item.fromPathRest ? item.name : item.path
42- cb ( null , resolveItem ( node . value , item , options . offset , options . length ) )
47+ cb ( null , resolveItem ( cid , node . value , item , options . offset , options . length ) )
4348 } )
4449 } ) ,
4550 pull . flatten ( ) ,
4651 pull . filter ( Boolean ) ,
4752 pull . filter ( ( node ) => node . depth <= options . maxDepth )
4853 )
4954
50- function resolveItem ( node , item , offset , length ) {
51- return resolve ( node , item . name , item . path , item . pathRest , item . size , dag , item . parent || parent , item . depth , offset , length )
55+ function resolveItem ( cid , node , item , offset , length ) {
56+ return resolve ( cid , node , item . name , item . path , item . pathRest , item . size , dag , item . parent || parent , item . depth , offset , length )
5257 }
5358
54- function resolve ( node , name , path , pathRest , size , dag , parentNode , depth , offset , length ) {
59+ function resolve ( cid , node , name , path , pathRest , size , dag , parentNode , depth , offset , length ) {
5560 const type = typeOf ( node )
5661 const nodeResolver = resolvers [ type ]
5762 if ( ! nodeResolver ) {
5863 return pull . error ( new Error ( 'Unkown node type ' + type ) )
5964 }
6065 const resolveDeep = createResolver ( dag , options , depth , node )
61- return nodeResolver ( node , name , path , pathRest , resolveDeep , size , dag , parentNode , depth , offset , length )
66+ return nodeResolver ( cid , node , name , path , pathRest , resolveDeep , size , dag , parentNode , depth , offset , length )
6267 }
6368}
6469
6570function typeOf ( node ) {
66- if ( Buffer . isBuffer ( node . data ) ) {
71+ if ( Buffer . isBuffer ( node ) ) {
72+ return 'raw'
73+ } else if ( Buffer . isBuffer ( node . data ) ) {
6774 return UnixFS . unmarshal ( node . data ) . type
6875 } else {
6976 return 'object'
0 commit comments