11import { existsSync , readdirSync , writeFileSync , mkdirSync } from "fs" ;
22import { resolve } from "path" ;
33import config from "../config" ;
4- import messages , { $t } from "../messages" ;
4+ import messages , { $t } from "../messages" ;
55import { LogFn } from "../types" ;
66import { cliux } from "@contentstack/cli-utilities" ;
7+ import { sanitizePath } from './common-utils'
78
8- export async function writeFile ( dir : string = process . cwd ( ) , force : boolean = false , data : Record < string , any > | undefined = { } , log : LogFn = console . log ) {
9+ export async function writeFile ( dir : string = process . cwd ( ) , force : boolean = false , data : Record < string , any > | undefined = { } , log : LogFn = console . log ) {
910 await ensureDirectoryExists ( dir )
1011 const files = readdirSync ( dir )
1112 const latestFileName = files . filter ( fileName => fileName . match ( new RegExp ( config . defaultAppFileName ) ) ) . pop ( ) ?. split ( '.' ) [ 0 ] || config . defaultAppFileName ;
12- let target = resolve ( dir , `${ latestFileName } .json` )
13+ let target = resolve ( sanitizePath ( dir ) , `${ sanitizePath ( latestFileName ) } .json` )
1314 if ( existsSync ( target ) ) {
1415 const userConfirmation : boolean = force || ( await cliux . confirm ( $t ( messages . FILE_ALREADY_EXISTS , { file : `${ config . defaultAppFileName } .json` } ) ) )
1516 if ( userConfirmation ) {
16- target = resolve ( dir , `${ config . defaultAppFileName } .json` ) ;
17+ target = resolve ( sanitizePath ( dir ) , `${ sanitizePath ( config . defaultAppFileName ) } .json` ) ;
1718 } else {
18- target = resolve ( dir , `${ incrementName ( latestFileName ) } .json` ) ;
19+ target = resolve ( sanitizePath ( dir ) , `${ sanitizePath ( incrementName ( latestFileName ) ) } .json` ) ;
1920 }
2021 }
2122 await writeFileSync ( target , JSON . stringify ( data ) )
@@ -24,10 +25,10 @@ export async function writeFile(dir: string=process.cwd(), force: boolean=false,
2425
2526async function ensureDirectoryExists ( dir : string ) {
2627 if ( ! existsSync ( dir ) ) {
27- await mkdirSync ( dir , { recursive : true } )
28+ await mkdirSync ( dir , { recursive : true } )
2829 }
2930}
3031
3132function incrementName ( name : string ) {
32- return `${ config . defaultAppFileName } ${ Number ( name . split ( config . defaultAppFileName ) . pop ( ) ) + 1 } `
33+ return `${ config . defaultAppFileName } ${ Number ( name . split ( config . defaultAppFileName ) . pop ( ) ) + 1 } `
3334}
0 commit comments