Skip to content

Commit ace60c7

Browse files
committed
Implement LDP without async.
1 parent 67a6b48 commit ace60c7

File tree

1 file changed

+49
-70
lines changed

1 file changed

+49
-70
lines changed

lib/ldp.js

Lines changed: 49 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ var path = require('path')
33
const url = require('url')
44
var fs = require('fs')
55
var $rdf = require('rdflib')
6-
var async = require('async')
76
// var url = require('url')
87
var mkdirp = require('fs-extra').mkdirp
98
var uuid = require('uuid')
@@ -13,7 +12,6 @@ var error = require('./http-error')
1312
var stringToStream = require('./utils').stringToStream
1413
var serialize = require('./utils').serialize
1514
var extend = require('extend')
16-
var doWhilst = require('async').doWhilst
1715
var rimraf = require('rimraf')
1816
var ldpContainer = require('./ldp-container')
1917
var 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
}
531510
module.exports = LDP

0 commit comments

Comments
 (0)