@@ -3,6 +3,8 @@ const getopts = require('getopts');
3
3
const hbs2lit = require ( '../hbs2lit' ) ;
4
4
const path = require ( 'path' ) ;
5
5
const litRenderer = require ( './RenderTemplates/LitRenderer' ) ;
6
+ const recursiveReadDir = require ( "recursive-readdir" ) ;
7
+ const mkdirp = require ( 'mkdirp' ) ;
6
8
7
9
const args = getopts ( process . argv . slice ( 2 ) , {
8
10
alias : {
@@ -23,34 +25,48 @@ const onError = (place) => {
23
25
const isHandlebars = ( fileName ) => fileName . indexOf ( '.hbs' ) !== - 1 ;
24
26
25
27
const processFile = ( file , outputDir ) => {
26
-
27
28
const litCode = hbs2lit ( file ) ;
28
-
29
+ const absoluteOutputDir = composeAbsoluteOutputDir ( file , outputDir ) ;
29
30
const componentNameMatcher = / ( \w + ) ( \. h b s ) / gim;
30
31
const componentName = componentNameMatcher . exec ( file ) [ 1 ] ;
31
- writeRenderers ( outputDir , componentName , litRenderer . generateTemplate ( componentName , litCode ) ) ;
32
+
33
+ writeRenderers ( absoluteOutputDir , componentName , litRenderer . generateTemplate ( componentName , litCode ) ) ;
34
+ } ;
35
+
36
+ const composeAbsoluteOutputDir = ( file , outputDir ) => {
37
+ // (1) Extract the dir structure from the source file path - "src/lvl1/lvl2/MyCompBadge.hbs"
38
+ // - remove the filename - "src/lvl1/lvl2"
39
+ // - remove the leading dir - "lvl1/lvl2"
40
+ const fileDir = file . split ( path . sep ) . slice ( 1 , - 1 ) . join ( path . sep ) ;
41
+
42
+ // (2) Compose full output dir - "dist/generated/templates/lvl1/lvl2"
43
+ return `${ outputDir } ${ path . sep } ${ fileDir } ` ;
32
44
} ;
33
45
34
46
const wrapDirectory = ( directory , outputDir ) => {
35
47
directory = path . normalize ( directory ) ;
36
48
outputDir = path . normalize ( outputDir ) ;
37
49
38
- fs . readdir ( directory , ( err , files ) => {
50
+ recursiveReadDir ( directory , ( err , files ) => {
39
51
40
52
if ( err ) {
41
53
onError ( 'directory' ) ;
42
54
}
43
55
44
56
files . forEach ( fileName => {
45
57
if ( isHandlebars ( fileName ) ) {
46
- processFile ( path . join ( directory , fileName ) , outputDir ) ;
58
+ processFile ( fileName , outputDir ) ;
47
59
}
48
60
} ) ;
49
61
} )
50
62
} ;
51
63
52
64
const writeRenderers = ( outputDir , controlName , fileContent ) => {
53
65
try {
66
+ if ( ! fs . existsSync ( outputDir ) ) {
67
+ mkdirp . sync ( outputDir ) ;
68
+ }
69
+
54
70
const compiledFilePath = `${ outputDir } ${ path . sep } ${ controlName } Template.lit.js` ;
55
71
56
72
// strip DOS line endings because the break the source maps
0 commit comments