nvexeca
Version:
nvm + execa = nvexeca
48 lines (28 loc) • 960 B
JavaScript
import{createHash}from"node:crypto";
import{join}from"node:path";
import globalCacheDir from"global-cache-dir";
export const getDistBinDir=async(srcPaths)=>{
const hash=getHash(srcPaths);
const output=await getOutput();
const distBinDir=join(output,BIN_DIR_PARENT,`${hash}${BIN_DIR_SUFFIX}`);
return distBinDir
};
const getHash=(srcPaths)=>{
const contents=srcPaths.map(getSrcPathHash).join("\n");
const hash=computeSha(contents);
return hash
};
const getSrcPathHash=({filename,content})=>`${filename}\n${content}`;
const computeSha=(contents)=>{
const hashStream=createHash("sha256");
hashStream.update(contents);
const hash=hashStream.digest("hex");
return hash
};
export const getOutput=()=>globalCacheDir(CACHE_DIR);
const CACHE_DIR="nve";
export const isOutputDir=(dir)=>
dir.replace(TRAILING_SLASH_REGEXP,"").endsWith(BIN_DIR_SUFFIX);
const TRAILING_SLASH_REGEXP=/[/\\]$/u;
const BIN_DIR_PARENT="all";
const BIN_DIR_SUFFIX="-nve-bin";