UNPKG

@insco/enigma-virtualbox

Version:

Generate an "Enigma Virtual Box" project file

121 lines (118 loc) 5.69 kB
/** * 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=` <?xml version="1.0" encoding="windows-1252"?> <> <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};