UNPKG

@insco/enigma-virtualbox

Version:

Generate an "Enigma Virtual Box" project file

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