Spaces:
Sleeping
Sleeping
| import fs, {} from 'node:fs'; | |
| import path from 'node:path'; | |
| import { EXTENSIONS, cjsRequire } from './constants.js'; | |
| export const tryPkg = (pkg) => { | |
| try { | |
| return cjsRequire.resolve(pkg); | |
| } | |
| catch { } | |
| }; | |
| export const isPkgAvailable = (pkg) => Boolean(tryPkg(pkg)); | |
| const ANY_FILE_TYPES = new Set(['any', true]); | |
| const isAnyFileType = (type) => ANY_FILE_TYPES.has(type); | |
| export const tryFileStats = (filename, type = 'file', base = process.cwd()) => { | |
| if (!type) { | |
| type = 'file'; | |
| } | |
| if (typeof filename === 'string') { | |
| const filepath = path.resolve(base, filename); | |
| let stats; | |
| try { | |
| stats = fs.statSync(filepath, { throwIfNoEntry: false }); | |
| } | |
| catch { } | |
| return stats && | |
| (isAnyFileType(type) || | |
| (Array.isArray(type) ? type : [type]).some(type => stats[`is${type[0].toUpperCase()}${type.slice(1)}`]())) | |
| ? { filepath, stats } | |
| : undefined; | |
| } | |
| for (const file of filename ?? []) { | |
| const result = tryFileStats(file, type, base); | |
| if (result) { | |
| return result; | |
| } | |
| } | |
| }; | |
| export const tryFile = (filename, type = 'file', base) => tryFileStats(filename, type, base)?.filepath ?? ''; | |
| export const tryExtensions = (filepath, extensions = EXTENSIONS) => { | |
| const ext = [...extensions, ''].find(ext => tryFile(filepath + ext)); | |
| return ext == null ? '' : filepath + ext; | |
| }; | |
| export const findUp = (entryOrOptions, options) => { | |
| if (typeof entryOrOptions === 'string') { | |
| options = { | |
| entry: entryOrOptions, | |
| ...options, | |
| }; | |
| } | |
| else if (entryOrOptions) { | |
| options = options ? { ...entryOrOptions, ...options } : entryOrOptions; | |
| } | |
| let { entry = process.cwd(), search = 'package.json', type, stop, } = options ?? {}; | |
| search = Array.isArray(search) ? search : [search]; | |
| do { | |
| const searched = tryFile(search, type, entry); | |
| if (searched) { | |
| return searched; | |
| } | |
| const lastEntry = entry; | |
| entry = path.dirname(entry); | |
| if (entry === lastEntry) { | |
| break; | |
| } | |
| } while (!stop || entry !== stop); | |
| return ''; | |
| }; | |
| //# sourceMappingURL=helpers.js.map |