-
Notifications
You must be signed in to change notification settings - Fork 0
/
createAutoImportTask.ts
92 lines (83 loc) · 2.39 KB
/
createAutoImportTask.ts
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
import * as gulp from 'gulp'
import getSourceFiles from './core/helpers/getSourceFiles'
import {
CreateAutoImportTaskProps,
GetTaskNamesProps,
GetTaskNamesReturn,
CreateAutoImportTaskReturn,
} from './createAutoImportTask.types'
import autoImports from './index'
export * from './createAutoImportTask.types'
/** last portion of sourceFolder after the last "/" */
const getName = (sourceFolder: string): string => {
const regexMatch = /.*\/(.+)$/.exec(sourceFolder) || []
return regexMatch[1] || ''
}
const getTaskNames = ({
fileExtension = 'all-files',
name,
taskPrefix,
}: GetTaskNamesProps): GetTaskNamesReturn => {
const prefix = (taskPrefix ? `${taskPrefix}:` : '') + fileExtension
return {
taskName: `${prefix}:auto-imports:${name}`,
watchName: `${prefix}:auto-imports-watcher:${name}`,
}
}
/**
* Generate an auto-import gulp compiler tasks alongside a matching watcher task.
*
* @returns [ 'compiler task name', 'watcher task name' ]
*/
export const createAutoImportTask = ({
sourceFolder,
fileExtension,
taskPrefix,
ignoreCharacter,
ignoreImporterFile,
importerSettings = {},
}: CreateAutoImportTaskProps): CreateAutoImportTaskReturn => {
const defaultSettings = importerSettings.preset
? require(`./presets/${importerSettings.preset}`)
: {}
const fullImporterSettings = {
dest: sourceFolder,
...defaultSettings,
...importerSettings,
}
const name = getName(sourceFolder)
const { taskName, watchName } = getTaskNames({
fileExtension,
name,
taskPrefix,
})
gulp.task(taskName, () =>
gulp
.src(
getSourceFiles({
sourceFolder,
fileExtension,
ignoreCharacter,
ignoreImporterFile,
importerFile: fullImporterSettings.fileName,
})
)
.pipe(autoImports(fullImporterSettings))
.pipe(gulp.dest(fullImporterSettings.dest))
)
gulp.task(watchName, done => {
const watcher = gulp.watch(
getSourceFiles({
sourceFolder,
fileExtension,
ignoreCharacter,
ignoreImporterFile,
importerFile: fullImporterSettings.fileName,
})
)
watcher.on('add', gulp.series(taskName))
watcher.on('unlink', gulp.series(taskName))
done()
})
return [taskName, watchName]
}