blob: c7a6b69800f62bb2836fcb5d9b3e35f571091afc [file] [log] [blame]
Leo Repp58b9f112021-11-22 11:57:47 +01001const {dirname} = require('path')
2const {findMade, findMadeSync} = require('./find-made.js')
3const {mkdirpManual, mkdirpManualSync} = require('./mkdirp-manual.js')
4
5const mkdirpNative = (path, opts) => {
6 opts.recursive = true
7 const parent = dirname(path)
8 if (parent === path)
9 return opts.mkdirAsync(path, opts)
10
11 return findMade(opts, path).then(made =>
12 opts.mkdirAsync(path, opts).then(() => made)
13 .catch(er => {
14 if (er.code === 'ENOENT')
15 return mkdirpManual(path, opts)
16 else
17 throw er
18 }))
19}
20
21const mkdirpNativeSync = (path, opts) => {
22 opts.recursive = true
23 const parent = dirname(path)
24 if (parent === path)
25 return opts.mkdirSync(path, opts)
26
27 const made = findMadeSync(opts, path)
28 try {
29 opts.mkdirSync(path, opts)
30 return made
31 } catch (er) {
32 if (er.code === 'ENOENT')
33 return mkdirpManualSync(path, opts)
34 else
35 throw er
36 }
37}
38
39module.exports = {mkdirpNative, mkdirpNativeSync}