@insco/enigma-virtualbox
Version:
Generate an "Enigma Virtual Box" project file
121 lines (118 loc) • 5.69 kB
JavaScript
/**
* Version: 1.3.1
*
* Copyright (c) 2025 kjxbyz. All rights reserved.
*/
import{resolve as T,join as h}from"node:path";import{readFileSync as I,writeFileSync as b,readdirSync as x,lstatSync as w}from"node:fs";import f from"handlebars";import{minimatch as C}from"minimatch";import{merge as v}from"lodash-es";import{join as N}from"node:path";var A=e=>N(__dirname,"..","templates",e),V=`
<File>
<Type>3</Type>
<Name>{{{dirName}}}</Name>
<Action>0</Action>
<OverwriteDateTime>False</OverwriteDateTime>
<OverwriteAttributes>False</OverwriteAttributes>
<Files>{{{files}}}</Files>
<HideFromDialogs>0</HideFromDialogs>
</File>
`,L=`
<File>
<Type>2</Type>
<Name>{{{fileName}}}</Name>
<File>{{{filePath}}}</File>
<ActiveX>False</ActiveX>
<ActiveXInstall>False</ActiveXInstall>
<Action>0</Action>
<OverwriteDateTime>False</OverwriteDateTime>
<OverwriteAttributes>False</OverwriteAttributes>
<PassCommandLine>False</PassCommandLine>
<HideFromDialogs>0</HideFromDialogs>
</File>
`,S=`
<>
<InputFile>{{{input}}}</InputFile>
<OutputFile>{{{output}}}</OutputFile>
<Files>
<Enabled>True</Enabled>
<DeleteExtractedOnExit>{{{deleteExtractedOnExit}}}</DeleteExtractedOnExit>
<CompressFiles>{{{compressFiles}}}</CompressFiles>
<Files>
<File>
<Type>3</Type>
<Name>%DEFAULT FOLDER%</Name>
<Action>0</Action>
<OverwriteDateTime>False</OverwriteDateTime>
<OverwriteAttributes>False</OverwriteAttributes>
<HideFromDialogs>0</HideFromDialogs>
<Files>{{{files}}}</Files>
</File>
</Files>
</Files>
<Registries>
<Enabled>False</Enabled>
<Registries>
<Registry>
<Type>1</Type>
<Virtual>True</Virtual>
<Name>Classes</Name>
<ValueType>0</ValueType>
<Value/>
<Registries/>
</Registry>
<Registry>
<Type>1</Type>
<Virtual>True</Virtual>
<Name>User</Name>
<ValueType>0</ValueType>
<Value/>
<Registries/>
</Registry>
<Registry>
<Type>1</Type>
<Virtual>True</Virtual>
<Name>Machine</Name>
<ValueType>0</ValueType>
<Value/>
<Registries/>
</Registry>
<Registry>
<Type>1</Type>
<Virtual>True</Virtual>
<Name>Users</Name>
<ValueType>0</ValueType>
<Value/>
<Registries/>
</Registry>
<Registry>
<Type>1</Type>
<Virtual>True</Virtual>
<Name>Config</Name>
<ValueType>0</ValueType>
<Value/>
<Registries/>
</Registry>
</Registries>
</Registries>
<Packaging>
<Enabled>False</Enabled>
</Packaging>
<Options>
<ShareVirtualSystem>{{{shareVirtualSystem}}}</ShareVirtualSystem>
<MapExecutableWithTemporaryFile>{{{mapExecutableWithTemporaryFile}}}</MapExecutableWithTemporaryFile>
<TemporaryFileMask/>
<AllowRunningOfVirtualExeFiles>{{{allowRunningOfVirtualExeFiles}}}</AllowRunningOfVirtualExeFiles>
<ProcessesOfAnyPlatforms>{{{processesOfAnyPlatforms}}}</ProcessesOfAnyPlatforms>
</Options>
<Storage>
<Files>
<Enabled>False</Enabled>
<Folder>%DEFAULTFOLDER%\\</Folder>
<RandomFileNames>False</RandomFileNames>
<EncryptContent>False</EncryptContent>
</Files>
</Storage>
</>
`,g={PROJECT:A("project.template.hbs"),DIR:A("dir.template.hbs"),FILE:A("file.template.hbs")},d={PROJECT:S,DIR:V,FILE:L};var _=/^\s+?</gm,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"};var E=class{constructor(t,i){this.name=t,this.tree=i}};var M=e=>I(T(e),"utf8"),U=e=>e.replace(_,"<"),P=(e,t,i)=>{let r;try{r=e?M(e.toLowerCase()==="default"?t:e):i,r=U(r)}catch(s){throw s instanceof Error?(s.message="Failed to load template. Template path: '"+e+`'.
`+s.message,s):"Failed to load template. Template path: '"+e+`'.
`+s}return r},D=e=>{let t=x(e),i=t.length,r=[];for(;i--;){let s=t[i],n=T(e,s);w(n).isDirectory()?r[i]=new E(s,D(n)):r[i]=s}return r},H=(e,t,i,r)=>{let s=(l,O)=>{let u=[];return O.forEach(function(o){let c=o instanceof E,F=c?o.name:o,m=h(l,F),p,y;r&&C(m,r,{windowsPathsNoEscape:!1,dot:!0})||(c?(y=s(m,o.tree),p=t({[a.DIR_NAME]:F,[a.FILES]:y})):p=i({[a.FILE_NAME]:o,[a.FILE_PATH]:m}),u.push(p))}),u.join("")},n;try{n=D(e)}catch(l){throw l instanceof Error?(l.message="Failed to read the directory tree of: '"+e+`'.
`+l.message,l):"Failed to read the directory tree of: '"+e+`'.
`+l}return s(e,n)},Z=async(e,t)=>{t=v({evbOptions:{deleteExtractedOnExit:"True",compressFiles:"True",shareVirtualSystem:"False",mapExecutableWithTemporaryFile:"True",allowRunningOfVirtualExeFiles:"True",processesOfAnyPlatforms:"False"}},t);let i=t.templatePath,r=t.evbOptions,s=P(i?.project,g.PROJECT,d.PROJECT),n=f.compile(s),l=P(i?.dir,g.DIR,d.DIR),O=f.compile(l),u=P(i?.file,g.FILE,d.FILE),o=f.compile(u),c=H(T(e),O,o,t.exclude||t.e),F=t.input||t.i,m=t.output||t.o,p=n({[a.INPUT_EXE]:T(F),[a.OUTPUT_EXE]:T(m),[a.OPT_DELETE_EXTRACTED]:r?.deleteExtractedOnExit||"True",[a.OPT_COMPRESS_FILES]:r?.compressFiles||"True",[a.OPT_SHARE_VIRTUAL_SYSTEM]:r?.shareVirtualSystem||"False",[a.OPT_MAP_WITH_TEMP]:r?.mapExecutableWithTemporaryFile||"True",[a.OPT_ALLOW_RUNNING_VIRTUAL_EXE]:r?.allowRunningOfVirtualExeFiles||"True",[a.OPT_PROCESSES_OF_ANY_PLATFORMS]:r?.processesOfAnyPlatforms||"False",[a.FILES]:c}),y=t.projectName||t.p||"project.evb",R=T(y);return b(R,"\uFEFF"+p,"utf8"),R};export{Z as generate};