| const fs = require('../fs.js') |
| const getOptions = require('../common/get-options.js') |
| const node = require('../common/node.js') |
| const owner = require('../common/owner.js') |
| |
| const polyfill = require('./polyfill.js') |
| |
| // node 10.12.0 added the options parameter, which allows recursive and mode |
| // properties to be passed |
| const useNative = node.satisfies('>=10.12.0') |
| |
| // extends mkdir with the ability to specify an owner of the new dir |
| const mkdir = async (path, opts) => { |
| const options = getOptions(opts, { |
| copy: ['mode', 'recursive', 'owner'], |
| wrap: 'mode', |
| }) |
| const { uid, gid } = await owner.validate(path, options.owner) |
| |
| // the polyfill is tested separately from this module, no need to hack |
| // process.version to try to trigger it just for coverage |
| // istanbul ignore next |
| const result = useNative |
| ? await fs.mkdir(path, options) |
| : await polyfill(path, options) |
| |
| await owner.update(path, uid, gid) |
| |
| return result |
| } |
| |
| module.exports = mkdir |