@@ -34,21 +34,25 @@ function parseBuffer (buf, encoding, callback) {
34
34
}
35
35
36
36
function parseJSONBuffer ( buf , callback ) {
37
- let node
37
+ let data
38
+ let links
39
+
38
40
try {
39
41
const parsed = JSON . parse ( buf . toString ( ) )
40
- const links = ( parsed . Links || [ ] ) . map ( ( link ) => {
42
+
43
+ links = ( parsed . Links || [ ] ) . map ( ( link ) => {
41
44
return new DAGLink (
42
- link . Name ,
43
- link . Size ,
44
- mh . fromB58String ( link . Hash )
45
+ link . Name || link . name ,
46
+ link . Size || link . size ,
47
+ mh . fromB58String ( link . Hash || link . hash || link . multihash )
45
48
)
46
49
} )
47
- node = new DAGNode ( new Buffer ( parsed . Data ) , links )
50
+ data = new Buffer ( parsed . Data )
48
51
} catch ( err ) {
49
52
return callback ( new Error ( 'failed to parse JSON: ' + err ) )
50
53
}
51
- callback ( null , node )
54
+
55
+ DAGNode . create ( data , links , callback )
52
56
}
53
57
54
58
function parseProtoBuffer ( buf , callback ) {
@@ -68,15 +72,15 @@ module.exports = function object (self) {
68
72
self . object . get ( multihash , options , cb )
69
73
} ,
70
74
( node , cb ) => {
71
- node = edit ( node )
72
-
73
- node . multihash ( ( err , multihash ) => {
75
+ // edit applies the edit func passed to
76
+ // editAndSave
77
+ edit ( node , ( err , node ) => {
74
78
if ( err ) {
75
79
return cb ( err )
76
80
}
77
81
self . _ipldResolver . put ( {
78
82
node : node ,
79
- cid : new CID ( multihash )
83
+ cid : new CID ( node . multihash )
80
84
} , ( err ) => {
81
85
cb ( err , node )
82
86
} )
@@ -88,16 +92,14 @@ module.exports = function object (self) {
88
92
89
93
return {
90
94
new : promisify ( ( callback ) => {
91
- const node = new DAGNode ( )
92
-
93
- node . multihash ( ( err , multihash ) => {
95
+ DAGNode . create ( new Buffer ( 0 ) , ( err , node ) => {
94
96
if ( err ) {
95
97
return callback ( err )
96
98
}
97
99
self . _ipldResolver . put ( {
98
100
node : node ,
99
- cid : new CID ( multihash )
100
- } , function ( err ) {
101
+ cid : new CID ( node . multihash )
102
+ } , ( err ) => {
101
103
if ( err ) {
102
104
return callback ( err )
103
105
}
@@ -126,34 +128,40 @@ module.exports = function object (self) {
126
128
} )
127
129
return
128
130
} else {
129
- node = new DAGNode ( obj )
131
+ DAGNode . create ( obj , ( err , _node ) => {
132
+ if ( err ) {
133
+ return callback ( err )
134
+ }
135
+ node = _node
136
+ next ( )
137
+ } )
130
138
}
131
139
} else if ( obj . multihash ) {
132
140
// already a dag node
133
141
node = obj
142
+ next ( )
134
143
} else if ( typeof obj === 'object' ) {
135
- node = new DAGNode ( obj . Data , obj . Links )
144
+ DAGNode . create ( obj . Data , obj . Links , ( err , _node ) => {
145
+ if ( err ) {
146
+ return callback ( err )
147
+ }
148
+ node = _node
149
+ next ( )
150
+ } )
136
151
} else {
137
152
return callback ( new Error ( 'obj not recognized' ) )
138
153
}
139
154
140
- next ( )
141
-
142
155
function next ( ) {
143
- node . multihash ( ( err , multihash ) => {
156
+ self . _ipldResolver . put ( {
157
+ node : node ,
158
+ cid : new CID ( node . multihash )
159
+ } , ( err ) => {
144
160
if ( err ) {
145
161
return callback ( err )
146
162
}
147
- self . _ipldResolver . put ( {
148
- node : node ,
149
- cid : new CID ( multihash )
150
- } , ( err , block ) => {
151
- if ( err ) {
152
- return callback ( err )
153
- }
154
163
155
- self . object . get ( multihash , callback )
156
- } )
164
+ self . object . get ( node . multihash , callback )
157
165
} )
158
166
}
159
167
} ) ,
@@ -223,64 +231,47 @@ module.exports = function object (self) {
223
231
const blockSize = serialized . length
224
232
const linkLength = node . links . reduce ( ( a , l ) => a + l . size , 0 )
225
233
226
- node . toJSON ( ( err , nodeJSON ) => {
227
- if ( err ) {
228
- return callback ( err )
229
- }
234
+ const nodeJSON = node . toJSON ( )
230
235
231
- callback ( null , {
232
- Hash : nodeJSON . Hash ,
233
- NumLinks : node . links . length ,
234
- BlockSize : blockSize ,
235
- LinksSize : blockSize - node . data . length ,
236
- DataSize : node . data . length ,
237
- CumulativeSize : blockSize + linkLength
238
- } )
236
+ callback ( null , {
237
+ Hash : nodeJSON . multihash ,
238
+ NumLinks : node . links . length ,
239
+ BlockSize : blockSize ,
240
+ LinksSize : blockSize - node . data . length ,
241
+ DataSize : node . data . length ,
242
+ CumulativeSize : blockSize + linkLength
239
243
} )
240
244
} )
241
245
} )
242
246
} ) ,
243
247
244
248
patch : promisify ( {
245
249
addLink ( multihash , link , options , callback ) {
246
- editAndSave ( ( node ) => {
247
- node . addRawLink ( link )
248
- return node
250
+ editAndSave ( ( node , cb ) => {
251
+ DAGNode . addLink ( node , link , cb )
249
252
} ) ( multihash , options , callback )
250
253
} ,
251
254
252
255
rmLink ( multihash , linkRef , options , callback ) {
253
- editAndSave ( ( node ) => {
254
- node . links = node . links . filter ( ( link ) => {
255
- if ( typeof linkRef === 'string' ) {
256
- return link . name !== linkRef
257
- }
258
-
259
- if ( Buffer . isBuffer ( linkRef ) ) {
260
- return ! link . hash . equals ( linkRef )
261
- }
262
-
263
- if ( linkRef . name ) {
264
- return link . name !== linkRef . name
265
- }
266
-
267
- return ! link . hash . equals ( linkRef . hash )
268
- } )
269
- return node
256
+ editAndSave ( ( node , cb ) => {
257
+ if ( linkRef . constructor &&
258
+ linkRef . constructor . name === 'DAGLink' ) {
259
+ linkRef = linkRef . _name
260
+ }
261
+ DAGNode . rmLink ( node , linkRef , cb )
270
262
} ) ( multihash , options , callback )
271
263
} ,
272
264
273
265
appendData ( multihash , data , options , callback ) {
274
- editAndSave ( ( node ) => {
275
- node . data = Buffer . concat ( [ node . data , data ] )
276
- return node
266
+ editAndSave ( ( node , cb ) => {
267
+ const newData = Buffer . concat ( [ node . data , data ] )
268
+ DAGNode . create ( newData , node . links , cb )
277
269
} ) ( multihash , options , callback )
278
270
} ,
279
271
280
272
setData ( multihash , data , options , callback ) {
281
- editAndSave ( ( node ) => {
282
- node . data = data
283
- return node
273
+ editAndSave ( ( node , cb ) => {
274
+ DAGNode . create ( data , node . links , cb )
284
275
} ) ( multihash , options , callback )
285
276
}
286
277
} )
0 commit comments