| import {promisify} from 'node:util'; |
| import {execFile as execFileCallback, execFileSync as execFileSyncOriginal} from 'node:child_process'; |
| import path from 'node:path'; |
| import {fileURLToPath} from 'node:url'; |
| |
| const execFileOriginal = promisify(execFileCallback); |
| |
| export function toPath(urlOrPath) { |
| return urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath; |
| } |
| |
| export function rootDirectory(pathInput) { |
| return path.parse(toPath(pathInput)).root; |
| } |
| |
| export function traversePathUp(startPath) { |
| return { |
| * [Symbol.iterator]() { |
| let currentPath = path.resolve(toPath(startPath)); |
| let previousPath; |
| |
| while (previousPath !== currentPath) { |
| yield currentPath; |
| previousPath = currentPath; |
| currentPath = path.resolve(currentPath, '..'); |
| } |
| }, |
| }; |
| } |
| |
| const TEN_MEGABYTES_IN_BYTES = 10 * 1024 * 1024; |
| |
| export async function execFile(file, arguments_, options = {}) { |
| return execFileOriginal(file, arguments_, { |
| maxBuffer: TEN_MEGABYTES_IN_BYTES, |
| ...options, |
| }); |
| } |
| |
| export function execFileSync(file, arguments_ = [], options = {}) { |
| return execFileSyncOriginal(file, arguments_, { |
| maxBuffer: TEN_MEGABYTES_IN_BYTES, |
| encoding: 'utf8', |
| stdio: 'pipe', |
| ...options, |
| }); |
| } |
| |
| export * from './default.js'; |