mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-07-06 00:05:42 +08:00
19 lines
14 KiB
JavaScript
19 lines
14 KiB
JavaScript
import{d as ue,x as d,h as f,z as re,c as r,o as c,e as P,j as e,a3 as i,k as ce,a as H,t,G as z,H as B,ak as g,al as A,a4 as D,am as Z,n as R,_ as ve}from"./framework.C2AwuPrQ.js";import{d as F}from"./extensions.data.B9rRhpZ-.js";const pe={key:0,class:"warning custom-block",style:{"margin-bottom":"16px"}},me={class:"option-line"},be=["id","value"],ye=["for"],ge={class:"option-line"},fe=["disabled"],we={class:"box"},he=["placeholder"],xe=["id","value"],Ce=["for"],Se={style:{color:"orangered","font-weight":"bolder"}},ke={class:"box"},Pe=["id","value"],$e=["for"],Ne={key:3,class:"warning custom-block"},Ie={value:"spc"},Ve={value:"native"},Ue=["value"],Ee={value:""},Te={for:"zts-yes"},ze={for:"zts-no"},Be={for:"pre-built-yes"},Ae={for:"pre-built-no"},De={key:0},Re={for:"upx-yes"},Ge={for:"upx-no"},Oe={for:"nostrip-yes"},We={for:"nostrip-no"},qe=["placeholder"],Le={key:4,class:"command-container"},Xe={key:0,class:"command-preview"},je={class:"command-content"},Me={key:1},He={class:"warning custom-block"},Ze={class:"command-container"},Fe={class:"command-preview"},Ke={class:"command-content"},Ye={class:"command-container"},Je={class:"command-preview"},Qe={class:"command-content"},_e={class:"command-container"},el={class:"command-preview pre"},ll={class:"command-content"},nl={name:"CliGenerator"},tl=ue({...nl,props:{lang:{type:String,default:"zh"}},setup(o){const K=["cli","fpm","micro","embed","frankenphp","cgi"],Y=["8.0","8.1","8.2","8.3","8.4","8.5"],J=F.missing??!1,Q=F.extensions??[],w=d(""),m=d([]),b=d(["cli"]),$=d("spc"),N=d("8.4"),u=d("linux"),I=d("x86_64"),h=d(""),C=d(!1),S=d(!0),x=d(!1),k=d(!1),V=d(10),U=d(5),E=d(""),v=d({spcDownload:!1,doctor:!1,build:!1,craft:!1}),_=[{os:"linux",label:"Linux"},{os:"macos",label:"macOS"},{os:"windows",label:"Windows"}],G=f(()=>Q.filter(s=>u.value==="linux"?s.linux:u.value==="macos"?s.macos:u.value==="windows"?s.windows:!0).map(s=>s.name)),W=f(()=>[...m.value].sort().join(",")),q=f(()=>$.value==="native"?"bin/spc":u.value==="windows"?".\\spc.exe":"./spc"),L=f(()=>{const s=u.value==="macos"?"macos":"linux",l=I.value;return`curl -#fSL https://dl.static-php.dev/v3/spc-bin/latest/spc-${s}-${l} -o spc && chmod +x spc`}),X=f(()=>`${q.value} doctor --auto-fix`),ee=f(()=>{const s=E.value.split(`
|
||
`).filter(l=>l.indexOf("=")>=1);return s.length>0?" "+s.map(l=>`-I "${l}"`).join(" "):""}),j=f(()=>{const s=b.value.map(de=>`--build-${de}`).join(" "),l=` --dl-with-php=${N.value}`,n=` --dl-parallel=${V.value}`,p=` --dl-retry=${U.value}`,y=" --dl-ignore-cache=php-src",te=S.value?" --dl-prefer-binary":"",oe=k.value?" --no-strip":"",ae=x.value?" --with-upx-pack":"",se=C.value?" --enable-zts":"",ie=h.value?` ${h.value}`:"";return`${q.value} build:php "${W.value}" ${s}${l}${n}${p}${y}${te}${oe}${ae}${se}${ee.value}${ie}`}),M=f(()=>{let s=`php-version: ${N.value}
|
||
`;s+=`extensions: "${W.value}"
|
||
`,b.value.length===1?s+=`sapi:
|
||
- ${b.value[0]}
|
||
`:(s+=`sapi:
|
||
`,b.value.forEach(y=>{s+=` - ${y}
|
||
`}));const l={"-v":64,"-vv":128,"-vvv":256};h.value&&l[h.value]&&(s+=`verbosity: ${l[h.value]}
|
||
`),s+=`download-options:
|
||
`,s+=` parallel: ${V.value}
|
||
`,s+=` retry: ${U.value}
|
||
`,s+=` ignore-cache: php-src
|
||
`,S.value&&(s+=` prefer-binary: true
|
||
`);const n=[];k.value&&n.push(" no-strip: true"),x.value&&n.push(" with-upx-pack: true"),C.value&&n.push(" enable-zts: true");const p=E.value.split(`
|
||
`).filter(y=>y.indexOf("=")>=1);return p.length>0&&(n.push(" with-hardcoded-ini:"),p.forEach(y=>n.push(` - "${y}"`))),n.length>0&&(s+=`build-options:
|
||
${n.join(`
|
||
`)}
|
||
`),s}),le=()=>{const s=["apcu","bcmath","calendar","ctype","curl","dba","dom","exif","filter","fileinfo","gd","iconv","intl","mbstring","mbregex","mysqli","mysqlnd","openssl","opcache","pcntl","pdo","pdo_mysql","pdo_sqlite","pdo_pgsql","pgsql","phar","posix","readline","redis","session","simplexml","sockets","sodium","sqlite3","tokenizer","xml","xmlreader","xmlwriter","xsl","zip","zlib"],l=new Set(G.value);m.value=s.filter(n=>l.has(n))},ne=()=>{m.value=[...G.value]},O=(s,l)=>{if(!w.value||!s.includes(w.value))return l===0?s:"";const n=s.indexOf(w.value);switch(l){case 0:return s.substring(0,n);case 1:return w.value;case 2:return s.substring(n+w.value.length);default:return""}},T=async(s,l)=>{try{await navigator.clipboard.writeText(s),v.value[l]=!0,setTimeout(()=>{v.value[l]=!1},2e3)}catch{const n=document.createElement("textarea");n.value=s,document.body.appendChild(n),n.select(),document.execCommand("copy"),document.body.removeChild(n)}};re(u,()=>{u.value==="windows"&&(I.value="x86_64",x.value=!1),m.value=[]});const a={zh:{selectExt:"选择扩展",buildTarget:"选择编译目标",buildOptions:"编译选项",buildEnvironment:"编译环境",buildEnvNative:"本地构建(Git 源码)",buildEnvSpc:"本地构建(独立 spc 二进制)",useVerbose:"是否输出详细日志",verboseNone:"不输出(默认)",yes:"是",no:"否",resultShow:"结果展示",selectCommon:"选择常用扩展",selectAll:"选择全部",selectNone:"全部取消选择",useZTS:"是否编译线程安全版",hardcodedINI:"硬编码 INI 选项",hardcodedINIPlaceholder:"如需要硬编码 ini,每行写一个,例如:memory_limit=2G",compileCommand:"编译命令",downloadPhpVersion:"下载 PHP 版本",downloadSPCBinaryCommand:"下载 spc 二进制命令",selectedSystem:"选择操作系统",windowsSAPIUnavailable:"Windows 目前不支持 fpm、embed、frankenphp 构建!",useUPX:"是否开启 UPX 压缩(减小二进制体积)",windowsDownSPCWarning:"Windows 下请手动下载 spc.exe 二进制文件!",usePreBuilt:"如果可能,使用预编译的依赖库(减少编译时间)",searchPlaceholder:"搜索扩展...",copy:"复制",copied:"已复制",doctorCommand:"自动检查和准备构建环境命令",dlParallel:"并行下载数(1-50)",dlRetry:"失败重试次数",noStrip:"保留调试符号(--no-strip)"},en:{selectExt:"Select Extensions",buildTarget:"Build Target",buildOptions:"Build Options",buildEnvironment:"Build Environment",buildEnvNative:"Native build (Git source code)",buildEnvSpc:"Native build (standalone spc binary)",useVerbose:"Verbose log output",verboseNone:"None (default)",yes:"Yes",no:"No",resultShow:"Result",selectCommon:"Select common extensions",selectAll:"Select all",selectNone:"Unselect all",useZTS:"Enable ZTS (thread-safe)",hardcodedINI:"Hardcoded INI options",hardcodedINIPlaceholder:"If you need to hardcode ini, write one per line, for example: memory_limit=2G",compileCommand:"Build command",downloadPhpVersion:"PHP version",downloadSPCBinaryCommand:"Download spc binary",selectedSystem:"Select OS",windowsSAPIUnavailable:"Windows does not support fpm, embed and frankenphp build!",useUPX:"Enable UPX compression (reduce binary size)",windowsDownSPCWarning:"Please download the spc.exe binary manually on Windows!",usePreBuilt:"Use pre-built dependencies where available (reduce compile time)",searchPlaceholder:"Search extensions...",copy:"Copy",copied:"Copied",doctorCommand:"Auto-check and prepare build environment",dlParallel:"Parallel downloads (1-50)",dlRetry:"Retry count on failure",noStrip:"Keep debug symbols (--no-strip)"}};return(s,l)=>(c(),r("div",null,[ce(J)?(c(),r("div",pe,[...l[24]||(l[24]=[e("p",{class:"custom-block-title"},"WARNING",-1),e("p",null,[H("Extension list is not generated yet. Run "),e("code",null,"bin/spc dev:gen-ext-docs"),H(" to generate it.")],-1)])])):P("",!0),e("h2",null,t(a[o.lang].selectedSystem),1),e("div",me,[(c(),r(z,null,B(_,(n,p)=>e("span",{key:p,style:{"margin-right":"8px"}},[i(e("input",{type:"radio",id:"os-"+n.os,value:n.os,"onUpdate:modelValue":l[0]||(l[0]=y=>u.value=y)},null,8,be),[[g,u.value]]),e("label",{for:"os-"+n.os},t(n.label),9,ye)])),64))]),e("div",ge,[i(e("select",{"onUpdate:modelValue":l[1]||(l[1]=n=>I.value=n)},[l[25]||(l[25]=e("option",{value:"x86_64"},"x86_64",-1)),e("option",{value:"aarch64",disabled:u.value==="windows"},"aarch64",8,fe)],512),[[A,I.value]])]),e("h2",null,t(a[o.lang].selectExt)+t(m.value.length>0?" ("+m.value.length+")":""),1),e("div",we,[i(e("input",{class:"input","onUpdate:modelValue":l[2]||(l[2]=n=>w.value=n),placeholder:a[o.lang].searchPlaceholder},null,8,he),[[D,w.value]]),l[26]||(l[26]=e("br",null,null,-1)),(c(!0),r(z,null,B(G.value,n=>(c(),r("div",{key:n,class:"ext-item"},[e("span",null,[i(e("input",{type:"checkbox",id:n,value:n,"onUpdate:modelValue":l[3]||(l[3]=p=>m.value=p)},null,8,xe),[[Z,m.value]]),e("label",{for:n},[e("span",null,t(O(n,0)),1),e("span",Se,t(O(n,1)),1),e("span",null,t(O(n,2)),1)],8,Ce)])]))),128))]),u.value!=="windows"?(c(),r("div",{key:1,class:"my-btn",onClick:le},t(a[o.lang].selectCommon),1)):P("",!0),u.value!=="windows"?(c(),r("div",{key:2,class:"my-btn",onClick:ne},t(a[o.lang].selectAll),1)):P("",!0),e("div",{class:"my-btn",onClick:l[4]||(l[4]=n=>m.value=[])},t(a[o.lang].selectNone),1),e("h2",null,t(a[o.lang].buildTarget),1),e("div",ke,[(c(),r(z,null,B(K,n=>e("div",{key:n,class:"ext-item"},[i(e("input",{type:"checkbox",id:"build_"+n,value:n,"onUpdate:modelValue":l[5]||(l[5]=p=>b.value=p)},null,8,Pe),[[Z,b.value]]),e("label",{for:"build_"+n},t(n),9,$e)])),64))]),u.value==="windows"&&(b.value.includes("fpm")||b.value.includes("embed")||b.value.includes("frankenphp"))?(c(),r("div",Ne,[l[27]||(l[27]=e("p",{class:"custom-block-title"},"WARNING",-1)),e("p",null,t(a[o.lang].windowsSAPIUnavailable),1)])):P("",!0),e("h2",null,t(a[o.lang].buildOptions),1),e("table",null,[e("tr",null,[e("td",null,t(a[o.lang].buildEnvironment),1),e("td",null,[i(e("select",{"onUpdate:modelValue":l[6]||(l[6]=n=>$.value=n)},[e("option",Ie,t(a[o.lang].buildEnvSpc),1),e("option",Ve,t(a[o.lang].buildEnvNative),1)],512),[[A,$.value]])])]),e("tr",null,[e("td",null,t(a[o.lang].downloadPhpVersion),1),e("td",null,[i(e("select",{"onUpdate:modelValue":l[7]||(l[7]=n=>N.value=n)},[(c(),r(z,null,B(Y,n=>e("option",{key:n,value:n},t(n),9,Ue)),64))],512),[[A,N.value]])])]),e("tr",null,[e("td",null,t(a[o.lang].useVerbose),1),e("td",null,[i(e("select",{"onUpdate:modelValue":l[8]||(l[8]=n=>h.value=n)},[e("option",Ee,t(a[o.lang].verboseNone),1),l[28]||(l[28]=e("option",{value:"-v"},"-v",-1)),l[29]||(l[29]=e("option",{value:"-vv"},"-vv",-1)),l[30]||(l[30]=e("option",{value:"-vvv"},"-vvv",-1))],512),[[A,h.value]])])]),e("tr",null,[e("td",null,t(a[o.lang].useZTS),1),e("td",null,[i(e("input",{type:"radio",id:"zts-yes",value:!0,"onUpdate:modelValue":l[9]||(l[9]=n=>C.value=n)},null,512),[[g,C.value]]),e("label",Te,t(a[o.lang].yes),1),i(e("input",{type:"radio",id:"zts-no",value:!1,"onUpdate:modelValue":l[10]||(l[10]=n=>C.value=n)},null,512),[[g,C.value]]),e("label",ze,t(a[o.lang].no),1)])]),e("tr",null,[e("td",null,t(a[o.lang].dlParallel),1),e("td",null,[i(e("input",{class:"number-input",type:"number","onUpdate:modelValue":l[11]||(l[11]=n=>V.value=n),min:"1",max:"50"},null,512),[[D,V.value,void 0,{number:!0}]])])]),e("tr",null,[e("td",null,t(a[o.lang].dlRetry),1),e("td",null,[i(e("input",{class:"number-input",type:"number","onUpdate:modelValue":l[12]||(l[12]=n=>U.value=n),min:"0",max:"100"},null,512),[[D,U.value,void 0,{number:!0}]])])]),e("tr",null,[e("td",null,t(a[o.lang].usePreBuilt),1),e("td",null,[i(e("input",{type:"radio",id:"pre-built-yes",value:!0,"onUpdate:modelValue":l[13]||(l[13]=n=>S.value=n)},null,512),[[g,S.value]]),e("label",Be,t(a[o.lang].yes),1),i(e("input",{type:"radio",id:"pre-built-no",value:!1,"onUpdate:modelValue":l[14]||(l[14]=n=>S.value=n)},null,512),[[g,S.value]]),e("label",Ae,t(a[o.lang].no),1)])]),u.value!=="macos"?(c(),r("tr",De,[e("td",null,t(a[o.lang].useUPX),1),e("td",null,[i(e("input",{type:"radio",id:"upx-yes",value:!0,"onUpdate:modelValue":l[15]||(l[15]=n=>x.value=n)},null,512),[[g,x.value]]),e("label",Re,t(a[o.lang].yes),1),i(e("input",{type:"radio",id:"upx-no",value:!1,"onUpdate:modelValue":l[16]||(l[16]=n=>x.value=n)},null,512),[[g,x.value]]),e("label",Ge,t(a[o.lang].no),1)])])):P("",!0),e("tr",null,[e("td",null,t(a[o.lang].noStrip),1),e("td",null,[i(e("input",{type:"radio",id:"nostrip-yes",value:!0,"onUpdate:modelValue":l[17]||(l[17]=n=>k.value=n)},null,512),[[g,k.value]]),e("label",Oe,t(a[o.lang].yes),1),i(e("input",{type:"radio",id:"nostrip-no",value:!1,"onUpdate:modelValue":l[18]||(l[18]=n=>k.value=n)},null,512),[[g,k.value]]),e("label",We,t(a[o.lang].no),1)])])]),e("h2",null,t(a[o.lang].hardcodedINI),1),i(e("textarea",{class:"textarea",placeholder:a[o.lang].hardcodedINIPlaceholder,"onUpdate:modelValue":l[19]||(l[19]=n=>E.value=n),rows:"5"},null,8,qe),[[D,E.value]]),e("h2",null,t(a[o.lang].resultShow),1),$.value==="spc"?(c(),r("div",Le,[e("b",null,t(a[o.lang].downloadSPCBinaryCommand),1),u.value!=="windows"?(c(),r("div",Xe,[e("div",je,t(L.value),1),e("button",{class:R(["copy-btn",{copied:v.value.spcDownload}]),onClick:l[20]||(l[20]=n=>T(L.value,"spcDownload"))},t(v.value.spcDownload?a[o.lang].copied:a[o.lang].copy),3)])):(c(),r("div",Me,[e("div",He,[l[31]||(l[31]=e("p",{class:"custom-block-title"},"WARNING",-1)),e("p",null,t(a[o.lang].windowsDownSPCWarning),1),l[32]||(l[32]=e("a",{href:"https://dl.static-php.dev/v3/spc-bin/latest/spc-windows-x86_64.exe",target:"_blank"},"https://dl.static-php.dev/v3/spc-bin/latest/spc-windows-x86_64.exe",-1))])]))])):P("",!0),e("div",Ze,[e("b",null,t(a[o.lang].doctorCommand),1),e("div",Fe,[e("div",Ke,t(X.value),1),e("button",{class:R(["copy-btn",{copied:v.value.doctor}]),onClick:l[21]||(l[21]=n=>T(X.value,"doctor"))},t(v.value.doctor?a[o.lang].copied:a[o.lang].copy),3)])]),e("div",Ye,[e("b",null,t(a[o.lang].compileCommand),1),e("div",Je,[e("div",Qe,t(j.value),1),e("button",{class:R(["copy-btn",{copied:v.value.build}]),onClick:l[22]||(l[22]=n=>T(j.value,"build"))},t(v.value.build?a[o.lang].copied:a[o.lang].copy),3)])]),e("div",_e,[l[33]||(l[33]=e("b",null,"craft.yml",-1)),e("div",el,[e("div",ll,t(M.value),1),e("button",{class:R(["copy-btn",{copied:v.value.craft}]),onClick:l[23]||(l[23]=n=>T(M.value,"craft"))},t(v.value.craft?a[o.lang].copied:a[o.lang].copy),3)])])]))}}),sl=ve(tl,[["__scopeId","data-v-7a2737a6"]]);export{sl as C};
|