1 | 'use strict';
|
2 |
|
3 | const Path = require('path');
|
4 | const Fsep = require('fsep');
|
5 |
|
6 | const LB = /(\.l\.)|(\.b\.)/g;
|
7 | const I = /[^i]|[lvpbtm]/;
|
8 | const L = /[^il]|[vpbtm]/;
|
9 | const V = /[^ilv]|[pbtm]/;
|
10 | const P = /[^ilvp]|[btm]/;
|
11 | const B = /[^ilvpb]|[tm]/;
|
12 | const T = /[^ilvpbt]|[m]/;
|
13 | const M = /[^ilvpbtm]/;
|
14 |
|
15 | const VALID_EXTENSIONS = [
|
16 | 'js',
|
17 | 'md',
|
18 | 'css',
|
19 | 'html',
|
20 | 'less',
|
21 | 'sass',
|
22 | 'scss'
|
23 | ];
|
24 |
|
25 | module.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 |
|
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 |
|
64 | module.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 |
|
77 | module.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 |
|
92 | module.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 |
|
101 | module.exports.sortExtensions = async function (extensions) {
|
102 | return extensions.sort(function (e0, e1) {
|
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 |
|
122 | module.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 |
|
135 | module.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 | };
|