UNPKG

3.95 kBJavaScriptView Raw
1'use strict';
2
3const Path = require('path');
4const Fsep = require('fsep');
5
6const LB = /(\.l\.)|(\.b\.)/g;
7const I = /[^i]|[lvpbtm]/;
8const L = /[^il]|[vpbtm]/;
9const V = /[^ilv]|[pbtm]/;
10const P = /[^ilvp]|[btm]/;
11const B = /[^ilvpb]|[tm]/;
12const T = /[^ilvpbt]|[m]/;
13const M = /[^ilvpbtm]/;
14
15const VALID_EXTENSIONS = [
16 'js',
17 'md',
18 'css',
19 'html',
20 'less',
21 'sass',
22 'scss'
23];
24
25module.exports.parsePath = async function (path) {
26 var root = process.cwd();
27 var data = {};
28
29 path = Path.normalize(path);
30
31 data.isRelative = !Path.isAbsolute(path);
32 data.isAbsolute = Path.isAbsolute(path);
33
34 data.baseFull = Path.basename(path);
35
36 data.extensions = data.baseFull.split('.').slice(1);
37 data.extensionFull = data.extensions.join('.');
38 data.extensionMain = data.extensions[data.extensions.length-1];
39
40 data.baseMain = Path.basename(path, '.' + data.extensionFull);
41
42 if (data.isAbsolute) {
43 data.absolute = path;
44 data.relative = Path.relative(root, path);
45 }
46
47 if (data.isRelative) {
48 data.relative = path;
49 data.absolute = Path.resolve(root, path);
50 // data.absolute = Path.join(root, path);
51 }
52
53 data.directory = Path.dirname(data.absolute);
54
55 data.hasExtension = function (extension) {
56 return data.extensions.indexOf(extension) !== -1;
57 };
58
59 data.isValidExtension = VALID_EXTENSIONS.indexOf(data.extensionMain) !== -1;
60
61 return data;
62};
63
64module.exports.getPaths = async function (paths, extensions) {
65 var matches = [];
66
67 paths.forEach(function (path) {
68 extensions.forEach(function (extension) {
69 var extensionRegExp = new RegExp(extension);
70 if (extensionRegExp.test(path)) matches.push(path);
71 });
72 });
73
74 return matches;
75};
76
77module.exports.hasMatch = async function (arrayOne, arrayTwo) {
78
79 for (var i = 0, l = arrayOne.length; i < l; i++) {
80
81 for (var c = 0, t = arrayTwo.length; c < t; c++) {
82 var regexp = new RegExp(arrayTwo[c]);
83 if (regexp.test(arrayOne[i])) return i;
84 else continue;
85 }
86
87 }
88
89 return -1;
90};
91
92module.exports.sortPaths = async function (paths) {
93 return paths.sort(function (p0, p1) {
94 if (p0 === p1) return 0;
95 else if (LB.test(p0) && !LB.test(p1)) return -1;
96 else if (LB.test(p1) && !LB.test(p0)) return 1;
97 else return 0;
98 });
99};
100
101module.exports.sortExtensions = async function (extensions) {
102 return extensions.sort(function (e0, e1) { // ilvpbem
103 if (e0 === e1) return 0;
104 else if (e0 === 'i' && I.test(e1)) return -1;
105 else if (e1 === 'i' && I.test(e0)) return 1;
106 else if (e0 === 'l' && L.test(e1)) return -1;
107 else if (e1 === 'l' && L.test(e0)) return 1;
108 else if (e0 === 'v' && V.test(e1)) return -1;
109 else if (e1 === 'v' && V.test(e0)) return 1;
110 else if (e0 === 'p' && P.test(e1)) return -1;
111 else if (e1 === 'p' && P.test(e0)) return 1;
112 else if (e0 === 'b' && B.test(e1)) return -1;
113 else if (e1 === 'b' && B.test(e0)) return 1;
114 else if (e0 === 't' && T.test(e1)) return -1;
115 else if (e1 === 't' && T.test(e0)) return 1;
116 else if (e0 === 'm' && M.test(e1)) return -1;
117 else if (e1 === 'm' && M.test(e0)) return 1;
118 else return 1;
119 });
120};
121
122module.exports.cleanExtensions = async function (string) {
123 return string
124 .replace(/\.i\./g, '.')
125 .replace(/\.l\./g, '.')
126 .replace(/\.v\./g, '.')
127 .replace(/\.p\./g, '.')
128 .replace(/\.b\./g, '.')
129 .replace(/\.t\./g, '.')
130 .replace(/\.m\./g, '.')
131 .replace(/\.md/g, '.html')
132 .replace(/(\.sass)|(\.scss)|(\.less)/g, '.css');
133};
134
135module.exports.createPaths = async function createPaths (data, path) {
136 var paths = [];
137
138 if (!data) {
139 return [];
140 } else if (data.constructor.name === 'Array') {
141 data.forEach(function (value) {
142 paths.push(Path.join(path, value));
143 });
144 } else if (data.constructor.name === 'Object') {
145 Object.keys(data).forEach(function (key) {
146 var value = data[key];
147 if (!value) return null;
148 else if (value.constructor.name === 'String') paths.push(Path.join(path, key, value));
149 else Array.prototype.push.apply(paths, createPaths(value, Path.join(path, key)));
150 });
151 }
152
153 return paths;
154};