Skip to content

Commit f6315c7

Browse files
author
Vladimir Belov
committed
Fixed #13 (поддержка отслеживания изменений файлов с расширением .vue). Added support watch parameter value with additional tracked files extensions. Example: -w=vue,json,jsx or --watch=vue,json,jsx
1 parent d3d5e2c commit f6315c7

File tree

3 files changed

+57
-14
lines changed

3 files changed

+57
-14
lines changed

src/tools/watch.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,24 @@ import Directory from '../entities/directory';
66
import repository from '../process/repository';
77
import isAllowed from '../utils/is-allowed';
88
import isInput from '../utils/is-input';
9+
import getTrackedExtensions from '../utils/get-tracked-extensions';
910

1011
function isAllowedChanges(directories, file) {
1112
return directories
1213
.every(dir => isAllowed(file) && isInput(dir, file));
1314
}
1415

16+
const trackedExtensions = getTrackedExtensions();
17+
1518
function createPattern(directories) {
1619
return directories.reduce((acc, dir) => {
1720
const directory = new Directory(dir);
1821
const directoryConfigs = directory.getConfigs();
1922

2023
directoryConfigs.forEach((currentConfig) => {
21-
acc.push(slash(path.resolve(currentConfig.context, '**/*.js')));
22-
acc.push(slash(path.resolve(currentConfig.context, '**/*.css')));
23-
acc.push(slash(path.resolve(currentConfig.context, '**/*.scss')));
24+
trackedExtensions.forEach((extName) => {
25+
acc.push(slash(path.resolve(currentConfig.context, `**/*${extName}`)));
26+
});
2427
});
2528

2629
return acc;

src/utils/get-tracked-extensions.js

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import argv from '../process/argv';
2+
3+
const defaultExtensions = [
4+
'.js',
5+
'.jsx',
6+
'.vue',
7+
'.css',
8+
'.scss',
9+
];
10+
11+
export default function getTrackedExtensions(): Array<string>
12+
{
13+
if (typeof argv.watch === 'string' && argv.watch.length > 0)
14+
{
15+
return argv.watch
16+
.split(',')
17+
.map((extName) => {
18+
return String(extName).trim();
19+
})
20+
.reduce((acc, extName) => {
21+
if (typeof extName === 'string' && extName.length > 0)
22+
{
23+
if (extName === 'defaults')
24+
{
25+
return [...acc, ...defaultExtensions];
26+
}
27+
28+
const preparedName = (() => {
29+
if (!extName.startsWith('.'))
30+
{
31+
return `.${extName}`;
32+
}
33+
34+
return extName;
35+
})();
36+
37+
if (!acc.includes(preparedName))
38+
{
39+
acc.push(preparedName);
40+
}
41+
}
42+
43+
return acc;
44+
}, []);
45+
}
46+
47+
return [...defaultExtensions];
48+
}

src/utils/is-allowed.js

+3-11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import slash from 'slash';
22
import path from 'path';
3+
import getTrackedExtensions from './get-tracked-extensions';
34

45
export default function isAllowed(fileName) {
56
if (typeof fileName !== 'string') {
@@ -18,15 +19,6 @@ export default function isAllowed(fileName) {
1819
return false;
1920
}
2021

21-
const ext = path.extname(normalizedFileName);
22-
23-
switch (ext) {
24-
case '.js':
25-
case '.jsx':
26-
case '.css':
27-
case '.scss':
28-
return true;
29-
default:
30-
return false;
31-
}
22+
return getTrackedExtensions()
23+
.includes(path.extname(normalizedFileName));
3224
}

0 commit comments

Comments
 (0)