forked from nodeSolidServer/node-solid-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.js
More file actions
75 lines (66 loc) · 2.13 KB
/
utils.js
File metadata and controls
75 lines (66 loc) · 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
exports.uriToFilename = uriToFilename;
exports.uriToRelativeFilename = uriToRelativeFilename;
exports.filenameToBaseUri = filenameToBaseUri;
exports.uriAbs = uriAbs;
exports.pathBasename = pathBasename;
exports.uriBase = uriBase;
exports.hasSuffix = hasSuffix;
exports.getResourceLink = getResourceLink;
var fs = require('fs');
var path = require('path');
var S = require('string');
function uriToFilename(uri, base) {
var filename = path.join(base, uri);
// Make sure filename ends with '/' if filename exists and is a directory.
// TODO this sync operation can be avoided and can be left
// to do, to other components, see `ldp.get`
try {
var fileStats = fs.statSync(filename);
if (fileStats.isDirectory() && !S(filename).endsWith('/')) {
filename += '/';
} else if (fileStats.isFile() && S(filename).endsWith('/')) {
filename = S(filename).chompRight('/').s;
}
} catch (err) {}
return filename;
}
function uriToRelativeFilename(uri, base) {
var filename = uriToFilename(uri, base);
var relative = path.relative(base, filename);
return relative;
}
function filenameToBaseUri(filename, uri, base) {
var uriPath = S(filename).strip(base).toString();
return uri + '/' + uriPath;
}
function uriAbs(req) {
return req.protocol + '://' + req.get('host');
}
function uriBase(req) {
return uriAbs(req) + (req.baseUrl || '');
}
function pathBasename(fullpath) {
var bname = '';
if (fullpath) {
bname = (fullpath.lastIndexOf('/') === fullpath.length - 1)?'':path.basename(fullpath);
}
return bname;
}
function hasSuffix(path, suffixes) {
for (var i in suffixes) {
if (path.indexOf(suffixes[i], path.length - suffixes[i].length) !== -1) {
return true;
}
}
return false;
}
function getResourceLink(filename, uri, base, suffix, otherSuffix) {
var link = filenameToBaseUri(filename, uri, base);
if (S(link).endsWith(suffix)) {
return link;
} else if (S(link).endsWith(otherSuffix)) {
return S(link).chompRight(otherSuffix).s + suffix;
} else {
return link+suffix;
}
}