11/* eslint-disable no-underscore-dangle, no-console */
2+ import fs from 'fs'
3+ import { promisify } from 'util'
24import path from 'path'
5+ import chalk from 'chalk'
36import outputFileSync from 'output-file-sync'
47import readdir from 'recursive-readdir'
58import { convertFile , stat , transformFilename , CASE , politeWrite } from './util'
69
10+ const access = promisify ( fs . access )
11+
12+ async function exists ( file ) {
13+ try {
14+ await access ( file )
15+ return true
16+ } catch ( error ) {
17+ return false
18+ }
19+ }
20+
721function rename ( relative , ext , filenameCase ) {
822 const relativePath = path . parse ( relative )
923 relativePath . ext = `.${ ext } `
@@ -26,14 +40,25 @@ async function dirCommand(
2640 { ext = 'js' , filenameCase = CASE . PASCAL , ...options } ,
2741) {
2842 async function write ( src , relative ) {
29- if ( ! isCompilable ( relative ) ) return false
43+ if ( ! isCompilable ( relative ) ) return
3044 relative = rename ( relative , ext , filenameCase )
3145
3246 const dest = path . resolve ( program . outDir , relative )
3347 const code = await convertFile ( src , options )
48+
49+ if ( program . ignoreExisting && ( await exists ( dest ) ) ) {
50+ politeWrite (
51+ program ,
52+ chalk . grey ( `${ src } -> ${ path . relative ( process . cwd ( ) , dest ) } \n` ) ,
53+ )
54+ return
55+ }
56+
3457 outputFileSync ( dest , code )
35- politeWrite ( program , `${ src } -> ${ path . relative ( process . cwd ( ) , dest ) } \n` )
36- return true
58+ politeWrite (
59+ program ,
60+ chalk . white ( `${ src } -> ${ path . relative ( process . cwd ( ) , dest ) } \n` ) ,
61+ )
3762 }
3863
3964 async function handle ( filename ) {
0 commit comments