Skip to content

Commit 40dda13

Browse files
Add recursive arg to mkdir (#53)
* Add recursive arg to `mkdir` * Refactor to prevent breaking change * Also add sync versions of mkdirRecursive
1 parent 09a2b71 commit 40dda13

File tree

2 files changed

+40
-6
lines changed

2 files changed

+40
-6
lines changed

src/Node/FS/Async.purs

+22-4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ module Node.FS.Async
1313
, unlink
1414
, rmdir
1515
, mkdir
16+
, mkdirRecursive
1617
, mkdir'
1718
, readdir
1819
, utimes
@@ -75,7 +76,7 @@ fs ::
7576
, realpath :: forall cache. Fn3 FilePath { | cache } (JSCallback FilePath) Unit
7677
, unlink :: Fn2 FilePath (JSCallback Unit) Unit
7778
, rmdir :: Fn2 FilePath (JSCallback Unit) Unit
78-
, mkdir :: Fn3 FilePath String (JSCallback Unit) Unit
79+
, mkdir :: Fn3 FilePath { recursive :: Boolean, mode :: String } (JSCallback Unit) Unit
7980
, readdir :: Fn2 FilePath (JSCallback (Array FilePath)) Unit
8081
, utimes :: Fn4 FilePath Int Int (JSCallback Unit) Unit
8182
, readFile :: forall a opts. Fn3 FilePath { | opts } (JSCallback a) Unit
@@ -202,16 +203,33 @@ mkdir :: FilePath
202203
-> Callback Unit
203204
-> Effect Unit
204205

205-
mkdir = flip mkdir' $ mkPerms all all all
206+
mkdir path = mkdir' path (mkPerms all all all)
207+
208+
-- | Makes a new directory and any directories that don't exist
209+
-- | in the path. Similar to `mkdir -p`.
210+
mkdirRecursive :: FilePath
211+
-> Callback Unit
212+
-> Effect Unit
213+
214+
mkdirRecursive path = mkdirRecursive' path (mkPerms all all all)
215+
216+
-- | Makes a new directory (and any directories that don't exist
217+
-- | in the path) with the specified permissions.
218+
mkdirRecursive'
219+
:: FilePath
220+
-> Perms
221+
-> Callback Unit
222+
-> Effect Unit
223+
mkdirRecursive' file perms cb = mkEffect $ \_ -> runFn3
224+
fs.mkdir file { recursive: true, mode: permsToString perms } (handleCallback cb)
206225

207226
-- | Makes a new directory with the specified permissions.
208227
mkdir' :: FilePath
209228
-> Perms
210229
-> Callback Unit
211230
-> Effect Unit
212-
213231
mkdir' file perms cb = mkEffect $ \_ -> runFn3
214-
fs.mkdir file (permsToString perms) (handleCallback cb)
232+
fs.mkdir file { recursive: false, mode: permsToString perms } (handleCallback cb)
215233

216234
-- | Reads the contents of a directory.
217235
readdir :: FilePath

src/Node/FS/Sync.purs

+18-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ module Node.FS.Sync
1313
, rmdir
1414
, mkdir
1515
, mkdir'
16+
, mkdirRecursive
17+
, mkdirRecursive'
1618
, readdir
1719
, utimes
1820
, readFile
@@ -64,7 +66,7 @@ fs ::
6466
, realpathSync :: forall cache. Fn2 FilePath { | cache } FilePath
6567
, unlinkSync :: Fn1 FilePath Unit
6668
, rmdirSync :: Fn1 FilePath Unit
67-
, mkdirSync :: Fn2 FilePath String Unit
69+
, mkdirSync :: Fn2 FilePath { recursive :: Boolean, mode :: String } Unit
6870
, readdirSync :: Fn1 FilePath (Array FilePath)
6971
, utimesSync :: Fn3 FilePath Int Int Unit
7072
, readFileSync :: forall a opts. Fn2 FilePath { | opts } a
@@ -173,6 +175,20 @@ rmdir :: FilePath
173175
rmdir file = mkEffect $ \_ -> runFn1
174176
fs.rmdirSync file
175177

178+
-- | Makes a new directory.
179+
mkdirRecursive
180+
:: FilePath
181+
-> Effect Unit
182+
mkdirRecursive = flip mkdirRecursive' $ mkPerms all all all
183+
184+
-- | Makes a new directory with the specified permissions.
185+
mkdirRecursive'
186+
:: FilePath
187+
-> Perms
188+
-> Effect Unit
189+
mkdirRecursive' file perms = mkEffect $ \_ -> runFn2
190+
fs.mkdirSync file { recursive: true, mode: permsToString perms }
191+
176192
-- | Makes a new directory.
177193
mkdir :: FilePath
178194
-> Effect Unit
@@ -185,7 +201,7 @@ mkdir' :: FilePath
185201
-> Effect Unit
186202

187203
mkdir' file perms = mkEffect $ \_ -> runFn2
188-
fs.mkdirSync file (permsToString perms)
204+
fs.mkdirSync file { recursive: false, mode: permsToString perms }
189205

190206
-- | Reads the contents of a directory.
191207
readdir :: FilePath

0 commit comments

Comments
 (0)