@@ -6,61 +6,62 @@ import fs from "fs";
66
77import * as util from "./util" ;
88
9- let compiledFiles = 0 ;
10-
11- export default function ( { cliOptions, babelOptions } ) {
9+ export default async function ( { cliOptions, babelOptions } ) {
1210 const filenames = cliOptions . filenames ;
1311
14- function write ( src , base , callback ) {
12+ async function write ( src , base ) {
1513 let relative = path . relative ( base , src ) ;
14+
1615 if ( ! util . isCompilableExtension ( relative , cliOptions . extensions ) ) {
17- return process . nextTick ( callback ) ;
16+ return false ;
1817 }
1918
2019 // remove extension and then append back on .js
2120 relative = util . adjustRelative ( relative , cliOptions . keepFileExtension ) ;
2221
2322 const dest = getDest ( relative , base ) ;
2423
25- util . compile (
26- src ,
27- defaults (
28- {
29- sourceFileName : slash ( path . relative ( dest + "/.." , src ) ) ,
30- } ,
31- babelOptions ,
32- ) ,
33- function ( err , res ) {
34- if ( err && cliOptions . watch ) {
35- console . error ( err ) ;
36- err = null ;
37- }
38- if ( err ) return callback ( err ) ;
39- if ( ! res ) return callback ( ) ;
40-
41- // we've requested explicit sourcemaps to be written to disk
42- if (
43- res . map &&
44- babelOptions . sourceMaps &&
45- babelOptions . sourceMaps !== "inline"
46- ) {
47- const mapLoc = dest + ".map" ;
48- res . code = util . addSourceMappingUrl ( res . code , mapLoc ) ;
49- res . map . file = path . basename ( relative ) ;
50- outputFileSync ( mapLoc , JSON . stringify ( res . map ) ) ;
51- }
52-
53- outputFileSync ( dest , res . code ) ;
54- util . chmod ( src , dest ) ;
55-
56- compiledFiles += 1 ;
57-
58- if ( cliOptions . verbose ) {
59- console . log ( src + " -> " + dest ) ;
60- }
61- return callback ( null , true ) ;
62- } ,
63- ) ;
24+ try {
25+ const res = await util . compile (
26+ src ,
27+ defaults (
28+ {
29+ sourceFileName : slash ( path . relative ( dest + "/.." , src ) ) ,
30+ } ,
31+ babelOptions ,
32+ ) ,
33+ ) ;
34+
35+ if ( ! res ) return false ;
36+
37+ // we've requested explicit sourcemaps to be written to disk
38+ if (
39+ res . map &&
40+ babelOptions . sourceMaps &&
41+ babelOptions . sourceMaps !== "inline"
42+ ) {
43+ const mapLoc = dest + ".map" ;
44+ res . code = util . addSourceMappingUrl ( res . code , mapLoc ) ;
45+ res . map . file = path . basename ( relative ) ;
46+ outputFileSync ( mapLoc , JSON . stringify ( res . map ) ) ;
47+ }
48+
49+ outputFileSync ( dest , res . code ) ;
50+ util . chmod ( src , dest ) ;
51+
52+ if ( cliOptions . verbose ) {
53+ console . log ( src + " -> " + dest ) ;
54+ }
55+
56+ return true ;
57+ } catch ( err ) {
58+ if ( cliOptions . watch ) {
59+ console . error ( err ) ;
60+ return false ;
61+ }
62+
63+ throw err ;
64+ }
6465 }
6566
6667 function getDest ( filename , base ) {
@@ -77,84 +78,62 @@ export default function({ cliOptions, babelOptions }) {
7778 }
7879 }
7980
80- function handleFile ( src , base , callback ) {
81- write ( src , base , function ( err , res ) {
82- if ( err ) return callback ( err ) ;
83- if ( ! res && cliOptions . copyFiles ) {
84- const filename = path . relative ( base , src ) ;
85- const dest = getDest ( filename , base ) ;
86- outputFileSync ( dest , fs . readFileSync ( src ) ) ;
87- util . chmod ( src , dest ) ;
88- }
89-
90- return callback ( ) ;
91- } ) ;
92- }
93-
94- function sequentialHandleFile ( files , dirname , index , callback ) {
95- if ( files . length === 0 ) {
96- outputDestFolder ( cliOptions . outDir ) ;
97- return ;
98- }
81+ async function handleFile ( src , base ) {
82+ const written = await write ( src , base ) ;
9983
100- if ( typeof index === "function" ) {
101- callback = index ;
102- index = 0 ;
84+ if ( ! written && cliOptions . copyFiles ) {
85+ const filename = path . relative ( base , src ) ;
86+ const dest = getDest ( filename , base ) ;
87+ outputFileSync ( dest , fs . readFileSync ( src ) ) ;
88+ util . chmod ( src , dest ) ;
10389 }
90+ return written ;
91+ }
10492
105- const filename = files [ index ] ;
106- const src = path . join ( dirname , filename ) ;
93+ async function handle ( filenameOrDir ) {
94+ if ( ! fs . existsSync ( filenameOrDir ) ) return 0 ;
10795
108- handleFile ( src , dirname , function ( err ) {
109- if ( err ) return callback ( err ) ;
110- index ++ ;
111- if ( index !== files . length ) {
112- sequentialHandleFile ( files , dirname , index , callback ) ;
113- } else {
114- callback ( ) ;
115- }
116- } ) ;
117- }
96+ const stat = fs . statSync ( filenameOrDir ) ;
11897
119- function handle ( filename , callback ) {
120- if ( ! fs . existsSync ( filename ) ) return ;
98+ if ( stat . isDirectory ( filenameOrDir ) ) {
99+ const dirname = filenameOrDir ;
121100
122- const stat = fs . statSync ( filename ) ;
101+ let count = 0 ;
123102
124- if ( stat . isDirectory ( filename ) ) {
125- const dirname = filename ;
103+ const files = util . readdir ( dirname , cliOptions . includeDotfiles ) ;
104+ for ( const filename of files ) {
105+ const src = path . join ( dirname , filename ) ;
126106
127- if ( cliOptions . deleteDirOnStart ) {
128- util . deleteDir ( cliOptions . outDir ) ;
107+ const written = await handleFile ( src , dirname ) ;
108+ if ( written ) count += 1 ;
129109 }
130110
131- const files = util . readdir ( dirname , cliOptions . includeDotfiles ) ;
132- sequentialHandleFile ( files , dirname , callback ) ;
111+ return count ;
133112 } else {
134- write ( filename , path . dirname ( filename ) , callback ) ;
135- }
136- }
113+ const filename = filenameOrDir ;
114+ const written = await handleFile ( filename , path . dirname ( filename ) ) ;
137115
138- function sequentialHandle ( filenames , index = 0 ) {
139- const filename = filenames [ index ] ;
140-
141- handle ( filename , function ( err ) {
142- if ( err ) throw new Error ( err ) ;
143- index ++ ;
144- if ( index !== filenames . length ) {
145- sequentialHandle ( filenames , index ) ;
146- } else {
147- console . log (
148- `🎉 Successfully compiled ${ compiledFiles } ${
149- compiledFiles > 1 ? "files" : "file"
150- } with Babel.`,
151- ) ;
152- }
153- } ) ;
116+ return written ? 1 : 0 ;
117+ }
154118 }
155119
156120 if ( ! cliOptions . skipInitialBuild ) {
157- sequentialHandle ( filenames ) ;
121+ if ( cliOptions . deleteDirOnStart ) {
122+ util . deleteDir ( cliOptions . outDir ) ;
123+ }
124+
125+ outputDestFolder ( cliOptions . outDir ) ;
126+
127+ let compiledFiles = 0 ;
128+ for ( const filename of cliOptions . filenames ) {
129+ compiledFiles += await handle ( filename ) ;
130+ }
131+
132+ console . log (
133+ `🎉 Successfully compiled ${ compiledFiles } ${
134+ compiledFiles !== 1 ? "files" : "file"
135+ } with Babel.`,
136+ ) ;
158137 }
159138
160139 if ( cliOptions . watch ) {
@@ -177,10 +156,9 @@ export default function({ cliOptions, babelOptions }) {
177156 filename === filenameOrDir
178157 ? path . dirname ( filenameOrDir )
179158 : filenameOrDir ,
180- function ( err ) {
181- if ( err ) console . error ( err . stack ) ;
182- } ,
183- ) ;
159+ ) . catch ( err => {
160+ console . error ( err ) ;
161+ } ) ;
184162 } ) ;
185163 } ) ;
186164 } ) ;
0 commit comments