forked from helpers/handlebars-helpers
-
Notifications
You must be signed in to change notification settings - Fork 5
/
path.js
116 lines (106 loc) · 2.47 KB
/
path.js
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
const path = require('path');
/**
* @exports path
*/
const helpers = module.exports;
/**
* Get the directory path segment from the given `filepath`.
*
* ```handlebars
* {{dirname "docs/toc.md"}}
* <!-- results in: 'docs' -->
* ```
* @param {String} `ext`
* @return {String}
* @api public
*/
helpers.dirname = function(filepath) {
if (typeof filepath !== 'string') return '';
return path.dirname(filepath);
};
/**
* Get the file extension from the given `filepath`.
*
* ```handlebars
* {{basename "docs/toc.md"}}
* <!-- results in: 'toc.md' -->
* ```
* @param {String} `ext`
* @return {String}
* @api public
*/
helpers.basename = function(filepath) {
if (typeof filepath !== 'string') return '';
return path.basename(filepath);
};
/**
* Get the "stem" from the given `filepath`.
*
* ```handlebars
* {{stem "docs/toc.md"}}
* <!-- results in: 'toc' -->
* ```
* @param {String} `filepath`
* @return {String}
* @api public
*/
helpers.stem = function(filepath) {
if (typeof filepath !== 'string') return '';
return path.basename(filepath, path.extname(filepath));
};
/**
* Get the file extension from the given `filepath`.
*
* ```handlebars
* {{extname "docs/toc.md"}}
* <!-- results in: '.md' -->
* ```
* @param {String} `filepath`
* @return {String}
* @api public
*/
helpers.extname = function(filepath) {
if (typeof filepath !== 'string') return '';
return path.extname(filepath);
};
/**
* Get specific (joined) segments of a file path by passing a
* range of array indices.
*
* ```handlebars
* {{segments "a/b/c/d" "2" "3"}}
* <!-- results in: 'c/d' -->
*
* {{segments "a/b/c/d" "1" "3"}}
* <!-- results in: 'b/c/d' -->
*
* {{segments "a/b/c/d" "1" "2"}}
* <!-- results in: 'b/c' -->
* ```
*
* @param {String} `filepath` The file path to split into segments.
* @return {String} Returns a single, joined file path.
* @api public
*/
helpers.segments = function(filepath, a, b) {
if (typeof filepath !== 'string') return '';
const segments = filepath.split(/[\\\/]+/);
return segments.slice(a, b).join('/');
};
/**
* Convert a file:// path to a UNC formatted path
*
* ```handlebars
* {{linkToUNC "file://path.to/here"}}
* <!-- results in: '\\path.to\here' -->
* ```
*
* @param {String} path - The file path to convert to UNC
* @return {String} The UNC version of the path
* @api public
*/
helpers.linkToUNC = function(link) {
if (!link) return '';
const unc = link.replace('file://', '\\\\');
return unc.replace(/\//g, '\\');
};