@@ -3,7 +3,6 @@ var path = require('path')
33const url = require ( 'url' )
44var fs = require ( 'fs' )
55var $rdf = require ( 'rdflib' )
6- var async = require ( 'async' )
76// var url = require('url')
87var mkdirp = require ( 'fs-extra' ) . mkdirp
98var uuid = require ( 'uuid' )
@@ -13,7 +12,6 @@ var error = require('./http-error')
1312var stringToStream = require ( './utils' ) . stringToStream
1413var serialize = require ( './utils' ) . serialize
1514var extend = require ( 'extend' )
16- var doWhilst = require ( 'async' ) . doWhilst
1715var rimraf = require ( 'rimraf' )
1816var ldpContainer = require ( './ldp-container' )
1917var parse = require ( './utils' ) . parse
@@ -156,42 +154,40 @@ class LDP {
156154 return callback ( error ( 500 , "Can't parse container" ) )
157155 }
158156
159- async . waterfall (
160- [
161- // add container stats
162- function ( next ) {
163- ldpContainer . addContainerStats ( ldp , reqUri , filename , resourceGraph , next )
164- } ,
165- // reading directory
166- function ( next ) {
167- ldpContainer . readdir ( filename , next )
168- } ,
169- // Iterate through all the files
170- function ( files , next ) {
171- async . each (
172- files ,
173- function ( file , cb ) {
174- let fileUri = url . resolve ( reqUri , encodeURIComponent ( file ) )
175- ldpContainer . addFile ( ldp , resourceGraph , reqUri , fileUri , uri ,
176- filename , file , cb )
177- } ,
178- next )
179- }
180- ] ,
181- function ( err , data ) {
157+ // add container stats
158+ new Promise ( ( resolve , reject ) =>
159+ ldpContainer . addContainerStats ( ldp , reqUri , filename , resourceGraph ,
160+ err => err ? reject ( err ) : resolve ( ) )
161+ )
162+ // read directory
163+ . then ( ( ) => new Promise ( ( resolve , reject ) =>
164+ ldpContainer . readdir ( filename ,
165+ ( err , files ) => err ? reject ( err ) : resolve ( files ) )
166+ ) )
167+ // iterate through all the files
168+ . then ( files => {
169+ return Promise . all ( files . map ( file =>
170+ new Promise ( ( resolve , reject ) => {
171+ const fileUri = url . resolve ( reqUri , encodeURIComponent ( file ) )
172+ ldpContainer . addFile ( ldp , resourceGraph , reqUri , fileUri , uri ,
173+ filename , file , err => err ? reject ( err ) : resolve ( ) )
174+ } )
175+ ) )
176+ } )
177+ . catch ( ( ) => { throw error ( 500 , "Can't list container" ) } )
178+ . then ( ( ) => new Promise ( ( resolve , reject ) => {
179+ // TODO 'text/turtle' is fixed, should be contentType instead
180+ // This forces one more translation turtle -> desired
181+ serialize ( resourceGraph , reqUri , 'text/turtle' , function ( err , result ) {
182182 if ( err ) {
183- return callback ( error ( 500 , "Can't list container" ) )
183+ debug . handlers ( 'GET -- Error serializing container: ' + err )
184+ reject ( error ( 500 , "Can't serialize container" ) )
185+ } else {
186+ resolve ( result )
184187 }
185- // TODO 'text/turtle' is fixed, should be contentType instead
186- // This forces one more translation turtle -> desired
187- serialize ( resourceGraph , reqUri , 'text/turtle' , function ( err , result ) {
188- if ( err ) {
189- debug . handlers ( 'GET -- Error serializing container: ' + err )
190- return callback ( error ( 500 , "Can't serialize container" ) )
191- }
192- return callback ( null , result )
193- } )
194188 } )
189+ } ) )
190+ . then ( result => callback ( null , result ) , callback )
195191 }
196192
197193 post ( hostname , containerPath , slug , stream , container , callback ) {
@@ -351,18 +347,10 @@ class LDP {
351347 var root = ldp . idp ? ldp . root + host + '/' : ldp . root
352348 var filename = utils . uriToFilename ( reqPath , root )
353349
354- async . waterfall ( [
355- // Read file
356- function ( cb ) {
357- return ldp . readFile ( filename , cb )
358- } ,
359- // Parse file
360- function ( body , cb ) {
361- parse ( body , baseUri , contentType , function ( err , graph ) {
362- cb ( err , graph )
363- } )
364- }
365- ] , callback )
350+ ldp . readFile ( filename , ( err , body ) => {
351+ if ( err ) return callback ( err )
352+ parse ( body , baseUri , contentType , callback )
353+ } )
366354 }
367355
368356 get ( options , callback ) {
@@ -395,7 +383,7 @@ class LDP {
395383 if ( err ) {
396384 metaFile = ''
397385 }
398- let absContainerUri = url . resolve ( baseUri , reqPath )
386+ let absContainerUri = baseUri + reqPath
399387 ldp . listContainer ( filename , absContainerUri , baseUri , metaFile , contentType ,
400388 function ( err , data ) {
401389 if ( err ) {
@@ -498,34 +486,25 @@ class LDP {
498486
499487 getAvailablePath ( host , containerURI , slug , callback ) {
500488 var self = this
501- var exists
502-
503- if ( ! slug ) {
504- slug = uuid . v1 ( )
505- }
489+ slug = slug || uuid . v1 ( )
506490
507- var newPath = path . join ( containerURI , slug )
508-
509- // TODO: maybe a nicer code
510- doWhilst (
511- function ( next ) {
491+ function ensureNotExists ( newPath ) {
492+ return new Promise ( resolve => {
512493 self . exists ( host , newPath , function ( err ) {
513- exists = ! err
514-
515- if ( exists ) {
516- var id = uuid . v1 ( ) . split ( '-' ) [ 0 ] + '-'
494+ // If an error occurred, the resource does not exist yet
495+ if ( err ) {
496+ resolve ( newPath )
497+ // Otherwise, generate a new path
498+ } else {
499+ const id = uuid . v1 ( ) . split ( '-' ) [ 0 ] + '-'
517500 newPath = path . join ( containerURI , id + slug )
501+ resolve ( ensureNotExists ( newPath ) )
518502 }
519-
520- next ( )
521503 } )
522- } ,
523- function ( ) {
524- return exists === true
525- } ,
526- function ( ) {
527- callback ( newPath )
528504 } )
505+ }
506+
507+ return ensureNotExists ( path . join ( containerURI , slug ) ) . then ( callback )
529508 }
530509}
531510module . exports = LDP
0 commit comments