UNPKG

@insco/enigma-virtualbox

Version:

Generate an "Enigma Virtual Box" project file

13 lines (10 loc) 2.99 kB
/** * Version: 1.2.0 * * Copyright (c) 2025 kjxbyz. All rights reserved. */ import{resolve as E,join as I}from"node:path";import{readFileSync as h,writeFileSync as D,readdirSync as x,lstatSync as M}from"node:fs";import u from"handlebars";import{minimatch as b}from"minimatch";import{merge as U}from"lodash-es";var R=r=>I(__dirname,"..","templates",r),o={PROJECT:R("project.template.hbs"),DIR:R("dir.template.hbs"),FILE:R("file.template.hbs")},S={PRE_TAG_INDENTS:/^\s+?</gm,LT:/</g,GT:/>/g,SLASH:/\//g},a={DIR_NAME:"dirName",FILES:"files",FILE_NAME:"fileName",FILE_PATH:"filePath",INPUT_EXE:"input",OUTPUT_EXE:"output",OPT_DELETE_EXTRACTED:"deleteExtractedOnExit",OPT_COMPRESS_FILES:"compressFiles",OPT_SHARE_VIRTUAL_SYSTEM:"shareVirtualSystem",OPT_MAP_WITH_TEMP:"mapExecutableWithTemporaryFile",OPT_ALLOW_RUNNING_VIRTUAL_EXE:"allowRunningOfVirtualExeFiles",OPT_PROCESSES_OF_ANY_PLATFORMS:"processesOfAnyPlatforms"},f="__LT__",y="__GT__",d="__SLASH__",L=r=>{let e;try{e=h(E(r),"utf8"),e=e.replace(S.PRE_TAG_INDENTS,"<").replace(S.LT,f).replace(S.GT,y).replace(S.SLASH,d)}catch(t){throw t instanceof Error?(t.message="Failed to load template. Template path: '"+r+`'. `+t.message,t):"Failed to load template. Template path: '"+r+`'. `+t}return e},g=class{constructor(e,t){this.name=e,this.tree=t}},N=r=>{let e=x(r),t=e.length,s=[];for(;t--;){let i=e[t],l=E(r,i);M(l).isDirectory()?s[t]=new g(i,N(l)):s[t]=i}return s},C=(r,e,t,s)=>{let i=(n,A)=>{let c=[];return A.forEach(function(T){let m=T instanceof g,P=m?T.name:T,_=I(n,P),p,O;s&&b(_,s,{windowsPathsNoEscape:!1,dot:!0})||(m?(O=i(_,T.tree),p=e({[a.DIR_NAME]:P,[a.FILES]:O})):p=t({[a.FILE_NAME]:T,[a.FILE_PATH]:_}),c.push(p))}),c.join("")},l;try{l=N(r)}catch(n){throw n instanceof Error?(n.message="Failed to read the directory tree of: '"+r+`'. `+n.message,n):"Failed to read the directory tree of: '"+r+`'. `+n}return i(r,l)},j=async(r,e)=>{e=U({templatePath:{project:o.PROJECT,dir:o.DIR,file:o.FILE},evbOptions:{deleteExtractedOnExit:"True",compressFiles:"True",shareVirtualSystem:"False",mapExecutableWithTemporaryFile:"True",allowRunningOfVirtualExeFiles:"True",processesOfAnyPlatforms:"False"}},e);let t=e.templatePath,s=e.evbOptions,i=L(t?.project||o.PROJECT),l=u.compile(i),n=L(t?.dir||o.DIR),A=u.compile(n),c=L(t?.file||o.FILE),T=u.compile(c),m=C(E(r),A,T,e.exclude||e.e),P=e.input||e.i,_=e.output||e.o,p=l({[a.INPUT_EXE]:E(P),[a.OUTPUT_EXE]:E(_),[a.OPT_DELETE_EXTRACTED]:s?.deleteExtractedOnExit||"True",[a.OPT_COMPRESS_FILES]:s?.compressFiles||"True",[a.OPT_SHARE_VIRTUAL_SYSTEM]:s?.shareVirtualSystem||"False",[a.OPT_MAP_WITH_TEMP]:s?.mapExecutableWithTemporaryFile||"True",[a.OPT_ALLOW_RUNNING_VIRTUAL_EXE]:s?.allowRunningOfVirtualExeFiles||"True",[a.OPT_PROCESSES_OF_ANY_PLATFORMS]:s?.processesOfAnyPlatforms||"False",[a.FILES]:m}).replace(RegExp(f,"mg"),"<").replace(RegExp(y,"mg"),">").replace(RegExp(d,"mg"),"/"),O=e.projectName||e.p||"project.evb",F=E(O);return D(F,"\uFEFF"+p,"utf8"),F};export{j as generate};