50 lines
1.2 KiB
JavaScript
50 lines
1.2 KiB
JavaScript
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';
|