@@ -8,6 +8,7 @@ const pullWrite = require('pull-write')
88const parallel = require ( 'async/parallel' )
99const dagPB = require ( 'ipld-dag-pb' )
1010const CID = require ( 'cids' )
11+ const waterfall = require ( 'async/waterfall' )
1112
1213const fsc = require ( './../chunker/fixed-size' )
1314const createAndStoreTree = require ( './flush-tree' )
@@ -71,49 +72,38 @@ function makeWriter (source, files, ipldResolver) {
7172 }
7273}
7374
74- function createAndStoreDir ( item , ipldResolver , cb ) {
75+ function createAndStoreDir ( item , ipldResolver , callback ) {
7576 // 1. create the empty dir dag node
7677 // 2. write it to the dag store
7778
7879 const d = new UnixFS ( 'directory' )
79- const n = new DAGNode ( )
80- n . data = d . marshal ( )
81-
82- n . multihash ( ( err , multihash ) => {
80+ waterfall ( [
81+ ( cb ) => DAGNode . create ( d . marshal ( ) , cb ) ,
82+ ( node , cb ) => {
83+ ipldResolver . put ( {
84+ node : node ,
85+ cid : new CID ( node . multihash )
86+ } , ( err ) => cb ( err , node ) )
87+ }
88+ ] , ( err , node ) => {
8389 if ( err ) {
84- return cb ( err )
90+ return callback ( err )
8591 }
86-
87- ipldResolver . put ( {
88- node : n ,
89- cid : new CID ( multihash )
90- } , ( err ) => {
91- if ( err ) {
92- return cb ( err )
93- }
94-
95- n . size ( ( err , size ) => {
96- if ( err ) {
97- return cb ( err )
98- }
99-
100- cb ( null , {
101- path : item . path ,
102- multihash : multihash ,
103- size : size
104- } )
105- } )
92+ callback ( null , {
93+ path : item . path ,
94+ multihash : node . multihash ,
95+ size : node . size
10696 } )
10797 } )
10898}
10999
110- function createAndStoreFile ( file , ipldResolver , cb ) {
100+ function createAndStoreFile ( file , ipldResolver , callback ) {
111101 if ( Buffer . isBuffer ( file . content ) ) {
112102 file . content = pull . values ( [ file . content ] )
113103 }
114104
115105 if ( typeof file . content !== 'function' ) {
116- return cb ( new Error ( 'invalid content' ) )
106+ return callback ( new Error ( 'invalid content' ) )
117107 }
118108
119109 // 1. create the unixfs merkledag node
@@ -128,88 +118,69 @@ function createAndStoreFile (file, ipldResolver, cb) {
128118 file . content ,
129119 fsc ( CHUNK_SIZE ) ,
130120 pull . asyncMap ( ( chunk , cb ) => {
131- const l = new UnixFS ( 'file' , Buffer ( chunk ) )
132- const n = new DAGNode ( l . marshal ( ) )
121+ const l = new UnixFS ( 'file' , new Buffer ( chunk ) )
133122
134- n . multihash ( ( err , multihash ) => {
123+ DAGNode . create ( l . marshal ( ) , ( err , node ) => {
135124 if ( err ) {
136125 return cb ( err )
137126 }
138127
139128 ipldResolver . put ( {
140- node : n ,
141- cid : new CID ( multihash )
129+ node : node ,
130+ cid : new CID ( node . multihash )
142131 } , ( err ) => {
143132 if ( err ) {
144- return cb ( new Error ( 'Failed to store chunk' ) )
133+ return cb ( err )
145134 }
146135
147- n . size ( ( err , size ) => {
148- if ( err ) {
149- return cb ( err )
150- }
151-
152- cb ( null , {
153- Hash : multihash ,
154- Size : size ,
155- leafSize : l . fileSize ( ) ,
156- Name : ''
157- } )
136+ cb ( null , {
137+ Hash : node . multihash ,
138+ Size : node . size ,
139+ leafSize : l . fileSize ( ) ,
140+ Name : ''
158141 } )
159142 } )
160143 } )
161144 } ) ,
162145 pull . collect ( ( err , leaves ) => {
163146 if ( err ) {
164- return cb ( err )
147+ return callback ( err )
165148 }
166149
167150 if ( leaves . length === 1 ) {
168- return cb ( null , {
151+ return callback ( null , {
169152 path : file . path ,
170153 multihash : leaves [ 0 ] . Hash ,
171154 size : leaves [ 0 ] . Size
172155 } )
173156 }
174157
175158 // create a parent node and add all the leafs
176-
177159 const f = new UnixFS ( 'file' )
178- const n = new DAGNode ( )
179160
180- for ( let leaf of leaves ) {
161+ const links = leaves . map ( ( leaf ) => {
181162 f . addBlockSize ( leaf . leafSize )
182- n . addRawLink (
183- new DAGLink ( leaf . Name , leaf . Size , leaf . Hash )
184- )
185- }
186163
187- n . data = f . marshal ( )
164+ return new DAGLink ( leaf . Name , leaf . Size , leaf . Hash )
165+ } )
188166
189- n . multihash ( ( err , multihash ) => {
167+ waterfall ( [
168+ ( cb ) => DAGNode . create ( f . marshal ( ) , links , cb ) ,
169+ ( node , cb ) => {
170+ ipldResolver . put ( {
171+ node : node ,
172+ cid : new CID ( node . multihash )
173+ } , ( err ) => cb ( err , node ) )
174+ }
175+ ] , ( err , node ) => {
190176 if ( err ) {
191- return cb ( err )
177+ return callback ( err )
192178 }
193179
194- ipldResolver . put ( {
195- node : n ,
196- cid : new CID ( multihash )
197- } , ( err ) => {
198- if ( err ) {
199- return cb ( err )
200- }
201-
202- n . size ( ( err , size ) => {
203- if ( err ) {
204- return cb ( err )
205- }
206-
207- cb ( null , {
208- path : file . path ,
209- multihash : multihash ,
210- size : size
211- } )
212- } )
180+ callback ( null , {
181+ path : file . path ,
182+ multihash : node . multihash ,
183+ size : node . size
213184 } )
214185 } )
215186 } )
0 commit comments