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