UNPKG

@insco/enigma-virtualbox

Version:

Generate an "Enigma Virtual Box" project file

121 lines (118 loc) 5.72 kB
/** * 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=` <?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> </> `,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};