@stryke/fs
Version:
A package containing various file system utilities that expand the functionality of NodeJs's built-in `fs` module.
2 lines (1 loc) • 1.31 kB
JavaScript
import{exec as s,execSync as e}from"node:child_process";import{accessSync as c}from"node:fs";import{access as o,constants as r}from"node:fs/promises";import{basename as f,dirname as l}from"node:path";const u=process.platform=="win32";async function g(t){try{return await o(t,r.F_OK),!1}catch{return!0}}function x(t){try{return c(t,r.F_OK),!1}catch{return!0}}async function y(t){return o(t,r.F_OK|r.X_OK)}function p(t){try{return c(t,r.F_OK|r.X_OK),!0}catch{return!1}}async function $(t,n){await g(t)||(s(`command -v ${n} 2>/dev/null && { echo >&1 ${n}; exit 0; }`),await y(t))}async function d(t,n){/^(?!(?:.*\s|.*\.|\W+)$)(?:[a-z]:)?[^<>:"|?*\n]+$/im.test(t)&&s(`where ${n}`)}function h(t,n){if(x(t))try{return!!e(`command -v ${n} 2>/dev/null && { echo >&1 ${n}; exit 0; }`)}catch{return!1}return p(t)}function w(t,n){if(!/^(?!(?:.*\s|.*\.|\W+)$)(?:[a-z]:)?[^<>:"|?*\n]+$/im.test(t))return!1;try{return!!e(`where ${n}`,{stdio:[]})}catch{return!1}}function a(t){return/[^\w/:=-]/.test(t)&&(t=`'${t.replace(/'/g,"'\\''")}'`,t=t.replace(/^(?:'')+/g,"").replace(/\\'''/g,"\\'")),t}const _=t=>/\\/.test(t)?`"${l(t)}:${f(t)}"`:`"${t}"`;export async function commandExists(t){const n=a(t);return typeof Promise<"u"?commandExists(t):u?d(t,n):$(t,n)}export function commandExistsSync(t){return u?w(t,_(t)):h(t,a(t))}