47 lines
1.6 KiB
JavaScript
47 lines
1.6 KiB
JavaScript
|
import { parse, resolve } from 'path';
|
||
|
import { inspect } from 'util';
|
||
|
import platform from './platform.js';
|
||
|
const pathArg = (path, opt = {}) => {
|
||
|
const type = typeof path;
|
||
|
if (type !== 'string') {
|
||
|
const ctor = path && type === 'object' && path.constructor;
|
||
|
const received = ctor && ctor.name ? `an instance of ${ctor.name}`
|
||
|
: type === 'object' ? inspect(path)
|
||
|
: `type ${type} ${path}`;
|
||
|
const msg = 'The "path" argument must be of type string. ' + `Received ${received}`;
|
||
|
throw Object.assign(new TypeError(msg), {
|
||
|
path,
|
||
|
code: 'ERR_INVALID_ARG_TYPE',
|
||
|
});
|
||
|
}
|
||
|
if (/\0/.test(path)) {
|
||
|
// simulate same failure that node raises
|
||
|
const msg = 'path must be a string without null bytes';
|
||
|
throw Object.assign(new TypeError(msg), {
|
||
|
path,
|
||
|
code: 'ERR_INVALID_ARG_VALUE',
|
||
|
});
|
||
|
}
|
||
|
path = resolve(path);
|
||
|
const { root } = parse(path);
|
||
|
if (path === root && opt.preserveRoot !== false) {
|
||
|
const msg = 'refusing to remove root directory without preserveRoot:false';
|
||
|
throw Object.assign(new Error(msg), {
|
||
|
path,
|
||
|
code: 'ERR_PRESERVE_ROOT',
|
||
|
});
|
||
|
}
|
||
|
if (platform === 'win32') {
|
||
|
const badWinChars = /[*|"<>?:]/;
|
||
|
const { root } = parse(path);
|
||
|
if (badWinChars.test(path.substring(root.length))) {
|
||
|
throw Object.assign(new Error('Illegal characters in path.'), {
|
||
|
path,
|
||
|
code: 'EINVAL',
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
return path;
|
||
|
};
|
||
|
export default pathArg;
|
||
|
//# sourceMappingURL=path-arg.js.map
|