-
Notifications
You must be signed in to change notification settings - Fork 306
Expand file tree
/
Copy pathutils.js
More file actions
101 lines (87 loc) · 2.85 KB
/
utils.js
File metadata and controls
101 lines (87 loc) · 2.85 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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*jslint node: true*/
"use strict";
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;
}
}
function formatDateTime(date, format) {
return format.split('{').map(function(s){
var k = s.split('}')[0];
var width = {'Milliseconds':3, 'FullYear':4};
var d = {'Month': 1};
return s? ( '000' + (date['get' + k]() + (d[k]|| 0))).slice(-(width[k]||2)) + s.split('}')[1] : '';
}).join('');
}
function timestamp() {
return formatDateTime(new Date(),
'{FullYear}-{Month}-{Date}T{Hours}:{Minutes}:{Seconds}.{Milliseconds}');
}
function shortTime() {
return formatDateTime(new Date(),
'{Hours}:{Minutes}:{Seconds}.{Milliseconds}');
}
exports.uriToFilename = uriToFilename;
exports.uriToRelativeFilename = uriToRelativeFilename;
exports.filenameToBaseUri = filenameToBaseUri;
exports.uriAbs = uriAbs;
exports.pathBasename = pathBasename;
exports.uriBase = uriBase;
exports.hasSuffix = hasSuffix;
exports.getResourceLink = getResourceLink;
exports.formatDateTime = formatDateTime;
exports.timestamp = timestamp;
exports.shortTime = shortTime;