| ; | |
| const path = require('path'); | |
| const fs = require('fs'); | |
| const {promisify} = require('util'); | |
| const pLocate = require('p-locate'); | |
| const fsStat = promisify(fs.stat); | |
| const fsLStat = promisify(fs.lstat); | |
| const typeMappings = { | |
| directory: 'isDirectory', | |
| file: 'isFile' | |
| }; | |
| function checkType({type}) { | |
| if (type in typeMappings) { | |
| return; | |
| } | |
| throw new Error(`Invalid type specified: ${type}`); | |
| } | |
| const matchType = (type, stat) => type === undefined || stat[typeMappings[type]](); | |
| module.exports = async (paths, options) => { | |
| options = { | |
| cwd: process.cwd(), | |
| type: 'file', | |
| allowSymlinks: true, | |
| ...options | |
| }; | |
| checkType(options); | |
| const statFn = options.allowSymlinks ? fsStat : fsLStat; | |
| return pLocate(paths, async path_ => { | |
| try { | |
| const stat = await statFn(path.resolve(options.cwd, path_)); | |
| return matchType(options.type, stat); | |
| } catch (_) { | |
| return false; | |
| } | |
| }, options); | |
| }; | |
| module.exports.sync = (paths, options) => { | |
| options = { | |
| cwd: process.cwd(), | |
| allowSymlinks: true, | |
| type: 'file', | |
| ...options | |
| }; | |
| checkType(options); | |
| const statFn = options.allowSymlinks ? fs.statSync : fs.lstatSync; | |
| for (const path_ of paths) { | |
| try { | |
| const stat = statFn(path.resolve(options.cwd, path_)); | |
| if (matchType(options.type, stat)) { | |
| return path_; | |
| } | |
| } catch (_) { | |
| } | |
| } | |
| }; | |
Xet Storage Details
- Size:
- 1.34 kB
- Xet hash:
- cc78dc11a20087b5b0637af88edd44113abd87d98ac74846af87aa0194c428b3
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.