@insco/enigma-virtualbox
Version:
Generate an "Enigma Virtual Box" project file
121 lines (118 loc) • 6.38 kB
JavaScript
/**
* Version: 1.3.1
*
* Copyright (c) 2025 kjxbyz. All rights reserved.
*/
"use strict";var b=Object.create;var d=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty;var M=(e,t)=>{for(var r in t)d(e,r,{get:t[r],enumerable:!0})},N=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of w(t))!v.call(e,s)&&s!==r&&d(e,s,{get:()=>t[s],enumerable:!(i=x(t,s))||i.enumerable});return e};var U=(e,t,r)=>(r=e!=null?b(C(e)):{},N(t||!e||!e.__esModule?d(r,"default",{value:e,enumerable:!0}):r,e)),H=e=>N(d({},"__esModule",{value:!0}),e);var B={};M(B,{generate:()=>k});module.exports=H(B);var n=require("path"),o=require("fs"),f=U(require("handlebars")),S=require("minimatch"),h=require("lodash-es");var V=require("path"),R=e=>(0,V.join)(__dirname,"..","templates",e),X=`
<File>
<Type>3</Type>
<Name>{{{dirName}}}</Name>
<Action>0</Action>
<OverwriteDateTime>False</OverwriteDateTime>
<OverwriteAttributes>False</OverwriteAttributes>
<Files>{{{files}}}</Files>
<HideFromDialogs>0</HideFromDialogs>
</File>
`,j=`
<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>
`,W=`
<>
<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>
</>
`,O={PROJECT:R("project.template.hbs"),DIR:R("dir.template.hbs"),FILE:R("file.template.hbs")},A={PROJECT:W,DIR:X,FILE:j};var L=/^\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 G=e=>(0,o.readFileSync)((0,n.resolve)(e),"utf8"),J=e=>e.replace(L,"<"),_=(e,t,r)=>{let i;try{i=e?G(e.toLowerCase()==="default"?t:e):r,i=J(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},I=e=>{let t=(0,o.readdirSync)(e),r=t.length,i=[];for(;r--;){let s=t[r],T=(0,n.resolve)(e,s);(0,o.lstatSync)(T).isDirectory()?i[r]=new u(s,I(T)):i[r]=s}return i},Y=(e,t,r,i)=>{let s=(l,P)=>{let c=[];return P.forEach(function(m){let F=m instanceof u,y=F?m.name:m,p=(0,n.join)(l,y),E,g;i&&(0,S.minimatch)(p,i,{windowsPathsNoEscape:!1,dot:!0})||(F?(g=s(p,m.tree),E=t({[a.DIR_NAME]:y,[a.FILES]:g})):E=r({[a.FILE_NAME]:m,[a.FILE_PATH]:p}),c.push(E))}),c.join("")},T;try{T=I(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,T)},k=async(e,t)=>{t=(0,h.merge)({evbOptions:{deleteExtractedOnExit:"True",compressFiles:"True",shareVirtualSystem:"False",mapExecutableWithTemporaryFile:"True",allowRunningOfVirtualExeFiles:"True",processesOfAnyPlatforms:"False"}},t);let r=t.templatePath,i=t.evbOptions,s=_(r?.project,O.PROJECT,A.PROJECT),T=f.default.compile(s),l=_(r?.dir,O.DIR,A.DIR),P=f.default.compile(l),c=_(r?.file,O.FILE,A.FILE),m=f.default.compile(c),F=Y((0,n.resolve)(e),P,m,t.exclude||t.e),y=t.input||t.i,p=t.output||t.o,E=T({[a.INPUT_EXE]:(0,n.resolve)(y),[a.OUTPUT_EXE]:(0,n.resolve)(p),[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]:F}),g=t.projectName||t.p||"project.evb",D=(0,n.resolve)(g);return(0,o.writeFileSync)(D,"\uFEFF"+E,"utf8"),D};0&&(module.exports={generate});