@lomray/vite-ssr-boost 8.4.4-beta.1 → 8.4.5-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/doctor.js +1 -1
- package/cli/doctor.js.map +1 -1
- package/cli/project.js +1 -1
- package/cli/project.js.map +1 -1
- package/package.json +1 -1
- package/services/build.js +1 -1
- package/services/build.js.map +1 -1
package/cli/doctor.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"node:child_process";import t from"node:fs";import{createRequire as s}from"node:module";import r from"node:path";import o from"semver";import n from"./diagnostic-codes.js";import{libraryPackage as i,stringValue as a,readPackage as c,readConfig as l,readHtml as d,objectProperty as p}from"./project.js";import u from"../constants/plugin-name.js";import m from"../services/parse-routes.js";import f from"../services/server-config.js";import h from"../services/source-files.js";const g=[{react:"18.2.0",router:"7.18.3",vite:"6.4.3"},{react:"19.2.8",router:"7.18.3",vite:"7.3.6"},{react:"19.2.8",router:"8.3.1",vite:"8.2.2"}],v=()=>{const e=r.dirname(process.execPath);return[process.env.npm_execpath,r.join(e,"..","lib","node_modules","npm","bin","npm-cli.js"),r.join(e,"node_modules","npm","bin","npm-cli.js")].find(e=>e&&t.existsSync(e))},b=s=>{let o;try{const t=v(),r=["ls","react","react-dom","--json","--all","--long"];o=e.execFileSync(t?process.execPath:"npm",t?[t,...r]:r,{cwd:s,shell:!1,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:2e4,maxBuffer:8388608})}catch(e){const t=e;if(!t.stdout||t.signal)throw new Error("npm ls failed; install dependencies and rerun npm ls react react-dom --json.");o=String(t.stdout)}const n={react:new Set,"react-dom":new Set},i=(e,s)=>{for(const[o,a]of Object.entries(e.dependencies??{})){const e=a.path??r.join(s,"node_modules",o);"react"!==o&&"react-dom"!==o||!a.version||a.deduped||n[o].add(t.existsSync(e)?t.realpathSync(e):e),i(a,e)}};return i(JSON.parse(o),s),{react:n.react.size,"react-dom":n["react-dom"].size}}
|
|
1
|
+
import e from"node:child_process";import t from"node:fs";import{createRequire as s}from"node:module";import r from"node:path";import o from"semver";import n from"./diagnostic-codes.js";import{libraryPackage as i,stringValue as a,readPackage as c,readConfig as l,readHtml as d,objectProperty as p}from"./project.js";import u from"../constants/plugin-name.js";import m from"../services/parse-routes.js";import f from"../services/server-config.js";import h from"../services/source-files.js";const g=[{react:"18.2.0",router:"7.18.3",vite:"6.4.3"},{react:"19.2.8",router:"7.18.3",vite:"7.3.6"},{react:"19.2.8",router:"8.3.1",vite:"8.2.2"}],v=()=>{const e=r.dirname(process.execPath);return[process.env.npm_execpath,r.join(e,"..","lib","node_modules","npm","bin","npm-cli.js"),r.join(e,"node_modules","npm","bin","npm-cli.js")].find(e=>e&&t.existsSync(e))},b=s=>{let o;try{const t=v(),r=["ls","react","react-dom","--json","--all","--long"];o=e.execFileSync(t?process.execPath:"npm",t?[t,...r]:r,{cwd:s,shell:!1,encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:2e4,maxBuffer:8388608})}catch(e){const t=e;if(!t.stdout||t.signal)throw new Error("npm ls failed; install dependencies and rerun npm ls react react-dom --json.");o=String(t.stdout)}const n={react:new Set,"react-dom":new Set},i=(e,s)=>{for(const[o,a]of Object.entries(e.dependencies??{})){const e=a.path??r.join(s,"node_modules",o);"react"!==o&&"react-dom"!==o||!a.version||a.deduped||n[o].add(t.existsSync(e)?t.realpathSync(e):e),i(a,e)}};return i(JSON.parse(o),s),{react:n.react.size,"react-dom":n["react-dom"].size}},y=(e,t="")=>e.flatMap(e=>{const s=[t,String(e.index)].filter(Boolean).join("-");return[{id:e.id??s,path:e.path??null},...y(e.children,s)]}),$=(e={})=>{const v=r.resolve(e.root??process.cwd()),$=[],w={node:process.versions.node},x={versions:w,adapter:null,routes:[],checks:$,diagnosticCodes:[]},j=(e,t,s,r=!1)=>{try{$.push({name:e,status:"ok",message:s(),fix:t,...r?{info:r}:{}})}catch(s){$.push({name:e,status:"error",message:s.message,fix:t,...r?{info:r}:{}})}};let S={};j("package","Run doctor in the app directory or set --root.",()=>(S=c(r.join(v,"package.json")),"package.json is readable"));const R=s(r.join(v,"package.json")),k=[u,"react","react-dom","react-router","vite"],E=i(),O={[u]:E.engines.node},D={app:S.peerDependencies??{}};for(const e of k)j(`version:${e}`,`Install ${e} at a version satisfying the installed packages’ peer ranges.`,()=>{const t=c(R.resolve(`${e}/package.json`)),s=o.valid(t.version);if(D[e]=t.peerDependencies??(e===u?E.peerDependencies??{}:{}),w[e]=s,!s)throw new Error(`${e} has no valid installed version`);return t.engines?.node&&(O[e]=t.engines.node),`${e} ${s}`}),w[e]??=null;for(const e of $.filter(e=>e.name.startsWith("version:")&&"ok"===e.status)){const t=e.name.slice(8),s=Object.entries(D).flatMap(([e,s])=>s[t]&&!o.satisfies(w[t],s[t])?[`${e} requires ${t}: ${s[t]}`]:[]);s.length&&(e.status="error",e.message+=`; ${s.join("; ")}`)}const N=e=>Number(w.react===e.react&&w["react-dom"]===e.react)+Number(w["react-router"]===e.router)+Number(w.vite===e.vite),M=(e,t)=>{const s=o.parse(e),r=o.parse(t);return s?1e6*Math.abs(s.major-r.major)+1e3*Math.abs(s.minor-r.minor)+Math.abs(s.patch-r.patch):Number.MAX_SAFE_INTEGER},[F]=[...g].sort((e,t)=>N(t)-N(e)||M(w.react,e.react)-M(w.react,t.react)||M(w["react-dom"],e.react)-M(w["react-dom"],t.react)||M(w["react-router"],e.router)-M(w["react-router"],t.router)||M(w.vite,e.vite)-M(w.vite,t.vite)),z=`React ${w.react??"missing"}${w["react-dom"]!==w.react?` (React DOM ${w["react-dom"]??"missing"})`:""} + Router ${w["react-router"]??"missing"} + Vite ${w.vite??"missing"}`,C=3===N(F);let A;$.push({name:"compatibility",status:C?"ok":"warn",message:C?`${z} is a tested row`:`${z} is not a tested row; closest: React ${F.react} + Router ${F.router} + Vite ${F.vite}`,fix:`Use React and React DOM ${F.react}, React Router ${F.router}, and Vite ${F.vite} for a tested combination.`}),j("node","Use a Node version satisfying the package and app engines (CI uses 22.23.2).",()=>{S.engines?.node&&(O.app=S.engines.node);const e=Object.entries(O).filter(([,e])=>!o.satisfies(process.versions.node,e));if(e.length)throw new Error(`Node ${process.versions.node} does not satisfy ${e.map(([e,t])=>`${e}: ${t}`).join(", ")}`);return`Node ${process.versions.node} satisfies engines`}),j("react-copies","Run npm dedupe and align React/React DOM dependency versions.",()=>{const e=b(v);if(1!==e.react||1!==e["react-dom"])throw new Error(`React copies: ${e.react}; React DOM copies: ${e["react-dom"]}`);return"One physical copy each of React and React DOM"}),j("vite-plugin","Add SsrBoost() from @lomray/vite-ssr-boost/plugin to Vite plugins.",()=>{if(A=l(v),!A.plugin)throw new Error("Vite plugins do not contain the imported SsrBoost() plugin");return"SsrBoost() is in the Vite plugins"});const V=A?.viteRoot??(t.existsSync(r.join(v,"index.html"))?v:r.join(v,"src")),_=r.resolve(V,a(A?.option("indexFile"))??"index.html"),B=a(A?.option("clientFile"))??"client.ts",I=a(A?.option("serverFile"))??"server.ts";j("html-module",'Keep one local <script type="module" src="..."> pointing to the configured clientFile.',()=>{const e=d(_);if(1!==e.entries.length)throw new Error(`${r.relative(v,_)}: expected one module script, found ${e.entries.length}`);const t=e.attribute(e.entries[0],"src");if(!t||/^(?:\w+:|\/\/)/.test(t)||r.resolve(t.startsWith("/")?V:r.dirname(_),t.replace(/^\//,""))!==r.resolve(V,B))throw new Error(`${r.relative(v,_)}: module script does not match clientFile`);return"Module script matches the browser entry"}),j("html-outlet","Place exactly one \x3c!--ssr-outlet--\x3e inside the root element.",()=>{const e=d(_);if(1!==e.outlets)throw new Error(`${r.relative(v,_)}: expected one \x3c!--ssr-outlet--\x3e, found ${e.outlets}`);return"Exactly one SSR outlet"});const J=new h(A?.aliases);for(const[e,t,s]of[["browser",B,"browser/entry"],["server",I,"adapters/express/entry"]])j(`${e}-entry`,`Create the ${e} entry and import ${u}/${s}.`,()=>{if(!J.read(r.resolve(V,t)).ast.program.body.filter(e=>"ImportDeclaration"===e.type).some(e=>e.source.value.replace(/\.js$/,"")===`${u}/${s}`))throw new Error(`${t}: missing library ${s} import`);return"server"===e&&(x.adapter="express"),`${t} imports ${s}`});j("routes","Use statically analyzable route objects; follow the file and line in the parser error.",()=>(x.routes=y(new m(f.init({},{root:V,clientFile:B}),A?.aliases).parse(!0)),`${x.routes.length} route IDs resolved`)),j("scripts",'Add scripts that run "ssr-boost dev", "ssr-boost build" and "ssr-boost start"; any script names work.',()=>{const e=Object.values(S.scripts??{}),t=["dev","build","start"].filter(t=>!e.some(e=>new RegExp(`(?:^|\\s)ssr-boost\\s+${t}(?:\\s|$)`).test(e)));if(t.length)throw new Error(`Scripts missing ssr-boost commands: ${t.join(", ")}`);return"Development, build, and SSR start scripts use ssr-boost"}),j("robots","Review public/robots.txt for your deployment; use build --unlock-robots only when intended.",()=>{const e=a(A?p(A.node,"publicDir"):void 0)??"public",s=r.resolve(V,e,"robots.txt");return t.existsSync(s)?/^Disallow:\s*\/\s*$/im.test(t.readFileSync(s,"utf8"))?"robots.txt blocks crawling at / (report only)":"robots.txt contains a custom/allow policy (report only)":"No robots.txt policy (report only)"},!0),j("size-budget","Add a size:check or test:size script with an application bundle budget.",()=>Object.keys(S.scripts??{}).some(e=>/(?:^|:)size(?::|$)/.test(e))?"Size budget script present":"No size budget script (informational)",!0);const P=A?p(A.node,"build"):void 0,U="ObjectExpression"===P?.type?a(p(P,"outDir")):void 0,W=r.resolve(V,U??"dist","ssr-boost-diagnostics.json");if(t.existsSync(W))try{const e=JSON.parse(t.readFileSync(W,"utf8")),s=e&&"object"==typeof e?Reflect.get(e,"codes"):void 0;x.diagnosticCodes=Array.isArray(s)?n.filter(e=>s.includes(e)):[]}catch{}return x},w=e=>({schemaVersion:1,versions:e.versions,adapter:e.adapter,routes:e.routes,checks:e.checks.map(({name:e,status:t,fix:s,info:r})=>({name:e,status:t,fix:s,...r?{info:r}:{}})),diagnosticCodes:e.diagnosticCodes}),x=(e={})=>{const s=$(e);if(e.bundle)try{t.writeFileSync(r.resolve(e.root??process.cwd(),e.bundle),`${JSON.stringify(w(s),null,2)}\n`)}catch{s.checks.push({name:"bundle",status:"error",message:"Cannot write the support bundle.",fix:"Choose a writable file in an existing directory for --bundle."})}e.json?console.info(JSON.stringify(s,null,2)):console.table(s.checks.map(({status:e,name:t,message:s,fix:r})=>({status:e,check:t,message:s,fix:r}))),process.exitCode=s.checks.some(e=>"error"===e.status)?1:0};export{g as TESTED_MATRIX,x as default,$ as inspectProject,b as reactCopies,v as resolveNpmCli,w as supportBundle};
|
|
2
2
|
//# sourceMappingURL=doctor.js.map
|
package/cli/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sources":["../../src/cli/doctor.ts"],"sourcesContent":[null],"names":["TESTED_MATRIX","react","router","vite","resolveNpmCli","directory","path","dirname","process","execPath","env","npm_execpath","join","find","candidate","fs","existsSync","reactCopies","root","output","npmCli","args","childProcess","execFileSync","cwd","shell","encoding","stdio","timeout","maxBuffer","error","failed","stdout","signal","Error","String","copies","Set","visit","node","name","dependency","Object","entries","dependencies","location","version","deduped","add","realpathSync","JSON","parse","size","routeDetails","routes","parent","flatMap","route","position","index","filter","Boolean","id","children","inspectProject","options","resolve","checks","versions","report","adapter","diagnosticCodes","check","fix","inspect","info","push","status","message","pkg","readPackage","require","createRequire","packages","PLUGIN_NAME","ownPackage","libraryPackage","engines","peers","app","peerDependencies","metadata","semver","valid","item","row","startsWith","slice","failures","dependant","ranges","satisfies","length","matches","Number","distance","installed","tested","target","Math","abs","major","minor","patch","MAX_SAFE_INTEGER","closest","sort","left","right","trio","isTested","config","range","map","readConfig","plugin","viteRoot","indexFile","stringValue","option","clientFile","serverFile","html","readHtml","relative","src","attribute","test","replace","outlets","sources","SourceFiles","aliases","kind","file","expected","read","ast","program","body","type","some","source","value","ParseRoutes","ServerConfig","init","scripts","
|
|
1
|
+
{"version":3,"file":"doctor.js","sources":["../../src/cli/doctor.ts"],"sourcesContent":[null],"names":["TESTED_MATRIX","react","router","vite","resolveNpmCli","directory","path","dirname","process","execPath","env","npm_execpath","join","find","candidate","fs","existsSync","reactCopies","root","output","npmCli","args","childProcess","execFileSync","cwd","shell","encoding","stdio","timeout","maxBuffer","error","failed","stdout","signal","Error","String","copies","Set","visit","node","name","dependency","Object","entries","dependencies","location","version","deduped","add","realpathSync","JSON","parse","size","routeDetails","routes","parent","flatMap","route","position","index","filter","Boolean","id","children","inspectProject","options","resolve","checks","versions","report","adapter","diagnosticCodes","check","fix","inspect","info","push","status","message","pkg","readPackage","require","createRequire","packages","PLUGIN_NAME","ownPackage","libraryPackage","engines","peers","app","peerDependencies","metadata","semver","valid","item","row","startsWith","slice","failures","dependant","ranges","satisfies","length","matches","Number","distance","installed","tested","target","Math","abs","major","minor","patch","MAX_SAFE_INTEGER","closest","sort","left","right","trio","isTested","config","range","map","readConfig","plugin","viteRoot","indexFile","stringValue","option","clientFile","serverFile","html","readHtml","relative","src","attribute","test","replace","outlets","sources","SourceFiles","aliases","kind","file","expected","read","ast","program","body","type","some","source","value","ParseRoutes","ServerConfig","init","scripts","values","missing","command","RegExp","publicDir","objectProperty","undefined","readFileSync","keys","build","outDir","diagnosticsFile","recorded","codes","Reflect","get","Array","isArray","DIAGNOSTIC_CODES","code","includes","supportBundle","schemaVersion","runDoctor","bundle","writeFileSync","stringify","json","console","table","exitCode"],"mappings":"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"}
|
package/cli/project.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"node:fs";import t from"node:path";import o from"json5";import{parse as s}from"parse5";import i from"../constants/plugin-name.js";import
|
|
1
|
+
import e from"node:fs";import t from"node:path";import o from"json5";import{parse as s}from"parse5";import i from"../constants/plugin-name.js";import n,{sourceError as r,unwrap as a,propertyName as p}from"../services/source-files.js";const l="https://lomray-software.github.io/vite-ssr-boost/guide/migrate-existing-spa",c=(e,t)=>[...t].sort((e,t)=>t.start-e.start).reduce((e,t)=>e.slice(0,t.start)+t.text+e.slice(t.end),e),f=e=>({newline:e.includes("\r\n")?"\r\n":"\n",quote:/(?:from\s+|import\s*)"/.test(e)?'"':"'",semicolon:/(?:from\s+['"][^'"]+['"]|\))\s*;/.test(e)?";":"",indent:e.match(/\n([\t ]+)\S/)?.[1]??" "}),m=t=>JSON.parse(e.readFileSync(t,"utf8")),u=()=>{const t=new URL("../package.json",import.meta.url);return m(e.existsSync(t)?t.pathname:new URL("../../package.json",import.meta.url).pathname)},d=(e,t)=>{const o=e.properties.find(e=>p(e)===t);return"ObjectProperty"===o?.type?a(o.value):void 0},y=e=>"StringLiteral"===e?.type?e.value:void 0,g=s=>{const l=["ts","js","mts","mjs","cts","cjs"].map(e=>t.join(s,`vite.config.${e}`)).filter(t=>e.existsSync(t));if(1!==l.length)throw r(t.join(s,"vite.config.*"),void 0,`Vite configs (${l.length}); expected exactly one`);const[c]=l,f=new n,{code:m,ast:u}=f.read(c);let{node:g}=f.exported(c);if("CallExpression"===g.type&&"Identifier"===g.callee.type&&"defineConfig"===f.import(c,g.callee.name)?.exported&&(g=a(g.arguments[0])),"ArrowFunctionExpression"===g?.type||"FunctionExpression"===g?.type){const{body:e}=g;g="BlockStatement"===e.type?a(e.body.filter(e=>"ReturnStatement"===e.type).pop()?.argument):a(e)}if("ObjectExpression"!==g?.type)throw r(c,g,"Vite configuration; use defineConfig({ ... })");const v=d(g,"root");if(v&&"StringLiteral"!==v.type)throw r(c,v,"Vite root; use a string literal");const x=t.resolve(s,y(v)??"."),j=d(g,"plugins"),h="ArrayExpression"===j?.type?j.elements.find(e=>"CallExpression"===e?.type&&"Identifier"===e.callee.type&&f.import(c,e.callee.name)?.source.replace(/\.js$/,"")===`${i}/plugin`):void 0,b="CallExpression"===h?.type?a(h.arguments[0]):void 0;if(b&&"ObjectExpression"!==b.type)throw r(c,b,"SsrBoost options; use an object literal");const E=e=>"ObjectExpression"===b?.type?d(b,e):void 0,S=[],w=d(g,"resolve"),O="ObjectExpression"===w?.type?d(w,"alias"):void 0;if("ObjectExpression"===O?.type)for(const e of O.properties){if("ObjectProperty"!==e.type)continue;const o=p(e);let i=y(a(e.value));const n=a(e.value),r="CallExpression"===n?.type?n.arguments[0]:void 0;"NewExpression"===r?.type&&"Identifier"===r.callee.type&&"URL"===r.callee.name&&"StringLiteral"===r.arguments[0]?.type&&(i=t.resolve(s,r.arguments[0].value)),o&&i&&S.push({find:o,replacement:i})}const L=t.join(s,"tsconfig.json");if(e.existsSync(L)&&("BooleanLiteral"!==E("tsconfigAliases")?.type||!1!==Reflect.get(E("tsconfigAliases"),"value"))){const i=o.parse(e.readFileSync(L,"utf8")),n=t.resolve(s,i.compilerOptions?.baseUrl??t.relative(s,x));for(const[e,o]of Object.entries(i.compilerOptions?.paths??{}))S.push({find:e.replace(/\/\*$/,""),replacement:t.resolve(n,o[0].replace(/\/\*$/,""))})}return{file:c,code:m,ast:u,node:g,viteRoot:x,plugins:j,plugin:h,option:E,aliases:S,sources:f}},v=t=>{const o=e.readFileSync(t,"utf8"),i=s(o,{sourceCodeLocationInfo:!0}),n=[],r=o.split("\x3c!--ssr-outlet--\x3e").length-1,a=e=>{"tagName"in e&&n.push(e),"childNodes"in e&&e.childNodes.forEach(a)};a(i);const p=(e,t)=>e.attrs.find(e=>e.name===t)?.value;return{code:o,entries:n.filter(e=>"script"===e.tagName&&"module"===p(e,"type")),roots:n.filter(e=>"root"===p(e,"id")),outlets:r,attribute:p}};export{l as MANUAL_GUIDE,c as editText,f as format,u as libraryPackage,d as objectProperty,g as readConfig,v as readHtml,m as readPackage,y as stringValue};
|
|
2
2
|
//# sourceMappingURL=project.js.map
|
package/cli/project.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sources":["../../src/cli/project.ts"],"sourcesContent":[null],"names":["MANUAL_GUIDE","editText","code","edits","sort","left","right","start","reduce","result","edit","slice","text","end","format","newline","includes","quote","test","semicolon","indent","match","readPackage","file","JSON","parse","fs","readFileSync","libraryPackage","published","URL","url","existsSync","pathname","objectProperty","object","name","property","properties","find","item","propertyName","type","unwrap","value","undefined","stringValue","node","readConfig","root","candidates","map","extension","path","join","filter","length","sourceError","sources","SourceFiles","ast","read","exported","callee","import","arguments","body","rootNode","viteRoot","resolve","plugins","plugin","elements","element","source","replace","PLUGIN_NAME","options","option","aliases","alias","replacement","push","tsconfig","Reflect","get","ts","JSON5","base","compilerOptions","baseUrl","relative","replacements","Object","entries","paths","readHtml","document","parseHtml","sourceCodeLocationInfo","outlets","split","visit","childNodes","forEach","attribute","attrs","attr","tagName","roots"],"mappings":"0OAUO,MAAMA,EACX,8EAkBWC,EAAW,CAACC,EAAcC,IACrC,IAAIA,GACDC,KAAK,CAACC,EAAMC,IAAUA,EAAMC,MAAQF,EAAKE,OACzCC,OACC,CAACC,EAAQC,IAASD,EAAOE,MAAM,EAAGD,EAAKH,OAASG,EAAKE,KAAOH,EAAOE,MAAMD,EAAKG,KAC9EX,GAIOY,EACXZ,IAAY,CAEZa,QAASb,EAAKc,SAAS,QAAU,OAAS,KAC1CC,MAAO,yBAAyBC,KAAKhB,GAAQ,IAAM,IACnDiB,UAAW,mCAAmCD,KAAKhB,GAAQ,IAAM,GACjEkB,OAAQlB,EAAKmB,MAAM,kBAAkB,IAAM,OAGhCC,EAAeC,GAC1BC,KAAKC,MAAMC,EAAGC,aAAaJ,EAAM,SAGtBK,EAAiB,KAC5B,MAAMC,EAAY,IAAIC,IAAI,8BAA+BC,KAEzD,OAAOT,EACLI,EAAGM,WAAWH,GACVA,EAAUI,SACV,IAAIH,IAAI,iCAAkCC,KAAKE,WAI1CC,EAAiB,CAACC,EAA0BC,KACvD,MAAMC,EAAWF,EAAOG,WAAWC,KAAMC,GAASC,EAAaD,KAAUJ,GAEzE,MAA0B,mBAAnBC,GAAUK,KAA4BC,EAAON,EAASO,YAASC,GAG3DC,EAAeC,GACX,kBAAfA,GAAML,KAA2BK,EAAKH,WAAQC,EAGnCG,EAAcC,IACzB,MAAMC,EAAa,CAAC,KAAM,KAAM,MAAO,MAAO,MAAO,OAClDC,IAAKC,GAAcC,EAAKC,KAAKL,EAAM,eAAeG,MAClDG,OAAQhC,GAASG,EAAGM,WAAWT,IAElC,GAA0B,IAAtB2B,EAAWM,OACb,MAAMC,EACJJ,EAAKC,KAAKL,EAAM,sBAChBJ,EACA,iBAAiBK,EAAWM,iCAIhC,MAAOjC,GAAQ2B,EACTQ,EAAU,IAAIC,GACdzD,KAAEA,EAAI0D,IAAEA,GAAQF,EAAQG,KAAKtC,GACnC,IAAIwB,KAAEA,GAASW,EAAQI,SAASvC,
|
|
1
|
+
{"version":3,"file":"project.js","sources":["../../src/cli/project.ts"],"sourcesContent":[null],"names":["MANUAL_GUIDE","editText","code","edits","sort","left","right","start","reduce","result","edit","slice","text","end","format","newline","includes","quote","test","semicolon","indent","match","readPackage","file","JSON","parse","fs","readFileSync","libraryPackage","published","URL","url","existsSync","pathname","objectProperty","object","name","property","properties","find","item","propertyName","type","unwrap","value","undefined","stringValue","node","readConfig","root","candidates","map","extension","path","join","filter","length","sourceError","sources","SourceFiles","ast","read","exported","callee","import","arguments","body","statement","pop","argument","rootNode","viteRoot","resolve","plugins","plugin","elements","element","source","replace","PLUGIN_NAME","options","option","aliases","alias","replacement","push","tsconfig","Reflect","get","ts","JSON5","base","compilerOptions","baseUrl","relative","replacements","Object","entries","paths","readHtml","document","parseHtml","sourceCodeLocationInfo","outlets","split","visit","childNodes","forEach","attribute","attrs","attr","tagName","roots"],"mappings":"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"}
|
package/package.json
CHANGED
package/services/build.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import i from"node:child_process";import s from"node:fs";import e from"node:path";import t from"chalk";import{resolveConfig as o}from"vite";import r from"../cli/diagnostic-codes.js";import n from"../cli/helpers/vite-reset-cache.js";import l from"../constants/plugin-name.js";import c from"../helpers/create-focus-only.js";import{createDevMarker as
|
|
1
|
+
import i from"node:child_process";import s from"node:fs";import e from"node:path";import t from"chalk";import{resolveConfig as o}from"vite";import r from"../cli/diagnostic-codes.js";import n from"../cli/helpers/vite-reset-cache.js";import l from"../constants/plugin-name.js";import c from"../helpers/create-focus-only.js";import{createDevMarker as a}from"../helpers/dev-marker.js";import d from"../helpers/plugin-config.js";import u from"../helpers/process-stop.js";import h from"./server-config.js";import p from"./ssr-manifest.js";class f{isProd;nodeEnv;buildDir;viteConfig;pluginConfig;params={mode:"",clientOptions:"",serverOptions:"",focusOnly:"app",isWatch:!1,isUnlockRobots:!1,isEject:!1,isServerless:!1,isNoWarnings:!1};abortController=null;runningBuild=[];hasPreviewModeExitListener=!1;diagnosticCodes=new Set;constructor(i){this.params={...this.params,...i}}async makeConfig(){const{mode:i}=this.params;this.viteConfig=await o({},"build",i,"production"),this.pluginConfig=d(this.viteConfig),this.buildDir=e.resolve(this.viteConfig.root,this.viteConfig.build.outDir),this.nodeEnv=process.env.NODE_ENV||"production",this.isProd="production"===this.nodeEnv}clearBuildFolder(){s.existsSync(this.buildDir)&&s.rmSync(this.buildDir,{recursive:!0})}getIsProd(){return this.isProd}getNodeEnv(){return this.nodeEnv}getRunningBuildNames(){return this.runningBuild.map(({name:i})=>i)}promisifyProcess(i,s=!1){const e=new Promise((e,t)=>{i.on("exit",i=>{e(i)}),i.on("close",i=>{e(i)}),i.on("error",i=>{t(i)}),s&&i.stderr?.on("data",i=>{const s=Buffer.from(i).toString();(s.includes("warning")||s.includes("WARNING"))&&e(1)})});i.stdout?.pipe(process.stdout),i.stderr?.pipe(process.stderr);for(const s of[i.stdout,i.stderr]){let i="";s?.on("data",s=>{const e=i+Buffer.from(s).toString();r.filter(i=>e.includes(i)).forEach(i=>this.diagnosticCodes.add(i)),i=e.slice(-80)})}return{promise:e,command:i}}buildManifest(){console.info(t.blue("Building routes manifest file"));const i=h.init({isProd:this.isProd,mode:this.params.mode},{root:this.viteConfig.root,clientFile:this.pluginConfig.clientFile});p.get(i,{buildDir:this.viteConfig.build.outDir,viteAliases:this.viteConfig.resolve.alias,basename:this.viteConfig.base,renderBuiltUrl:this.viteConfig?.experimental?.renderBuiltUrl}).buildRoutesManifest()}writeProductionConfig(){const{base:i,mode:t}=this.viteConfig,{indexFile:o="index.html",serverFile:r="server.ts"}=this.pluginConfig,n={version:1,root:"..",base:i??"/",mode:t??this.params.mode,publicDir:"client",indexFile:e.posix.join("client",o),serverFile:`server/${e.parse(r).name}.js`},l=e.join(this.buildDir,"server");s.mkdirSync(l,{recursive:!0}),s.writeFileSync(e.join(l,"ssr-boost.json"),`${JSON.stringify(n,null,2)}\n`)}unlockRobots(){const i=`${this.buildDir}/client/robots.txt`;if(!s.existsSync(i))return void console.warn(`Failed to unlock robots.txt, file not exist: ${i}`);const e=s.readFileSync(i,{encoding:"utf-8"}).replace(/Disallow: \/$/m,"Allow: /");s.writeFileSync(i,e,{encoding:"utf-8"}),console.info(t.blue("\nrobots.txt unlocked."))}eject(){const i=`${this.buildDir}/server/start.js`,e=`import { fileURLToPath } from 'node:url';\nimport runProd from '${l}/cli/run-prod.js';\n\nconst VERSION = process.env.VERSION || "1.0.0";\nconst PORT = process.env.PORT || 3000;\nconst IS_HOST = process.env.IS_HOST || "0";\nconst ONLY_CLIENT = process.env.ONLY_CLIENT || "0";\n\nawait runProd({\n version: VERSION,\n isHost: IS_HOST === '1',\n isPrintInfo: true,\n port: PORT,\n focusOnly: ONLY_CLIENT === '1' ? 'client' : 'app',\n buildDir: fileURLToPath(new URL('..', import.meta.url)),\n });\n`;s.writeFileSync(i,e,{encoding:"utf-8"})}createServerless(){const i=`${this.buildDir}/server/serverless.js`,e=`import runServerless from '${l}/cli/run-serverless.js';\n\nexport default await runServerless({ version: process.env.VERSION || "1.0.0" });\n`;s.writeFileSync(i,e,{encoding:"utf-8"})}async spawnBuild(s,e,t={}){const{mode:o,isNoWarnings:r}=this.params,{focusOnly:n=this.params.focusOnly,shouldWait:l=!1,env:a={}}=t,d=o&&!e.includes("--mode")?`--mode ${o}`:"",u=this.promisifyProcess(i.spawn(`vite build ${e} ${d} --emptyOutDir`,{signal:this.abortController.signal,stdio:[process.stdin,"pipe","pipe"],shell:!0,env:{...process.env,...a,FORCE_COLOR:"2",SSR_BOOST_IS_SSR:c(n).isOnlyClient()?"0":"1",SSR_BOOST_ACTION:global.viteBoostAction}}),r);this.runningBuild.push({name:s,buildProcess:u}),l&&await this.waitLastBuild()}async waitLastBuild(){const i=this.runningBuild.at(-1);if(!i)return;const s=await i.buildProcess.promise;u(s,!0)}runPreviewMode(){this.hasPreviewModeExitListener||(process.on("exit",()=>{this.abortController.abort()}),this.hasPreviewModeExitListener=!0);const{onFinish:i}=this.params;let s=this.runningBuild.length;const e=t=>{Buffer.from(t).toString().includes("built in")&&(s-=1,s||(this.runningBuild.forEach(({buildProcess:i})=>{i.command.stdout?.removeListener("data",e)}),a(this.isProd,this.viteConfig),this.writeProductionConfig(),i?.()))};this.runningBuild.forEach(({buildProcess:i})=>{i.command.stdout?.on("data",e)})}async build(){await this.makeConfig(),await n(),this.clearBuildFolder(),this.diagnosticCodes.clear();const{clientOptions:i,serverOptions:t,onFinish:o,isWatch:r,focusOnly:l,isEject:d,isServerless:u,isUnlockRobots:h}=this.params,{outDir:p}=this.viteConfig.build,f=c(l);this.abortController=new AbortController,this.runningBuild=[],f.isClient()&&await this.spawnBuild("client",`${i} --outDir ${p}/client`,{shouldWait:!r}),f.isServer()&&(await this.spawnBuild("server",`${t} --outDir ${p}/server --ssr ${this.pluginConfig.serverFile}`,{shouldWait:!r}),r||(this.buildManifest(),d&&this.eject(),u&&this.createServerless()));const{entrypoint:m}=this.pluginConfig;if(m?.length&&f.isEntrypoint())for(const{name:i,type:s,serverFile:e,buildOptions:t=""}of m){const o=e&&"ssr"===s?`--ssr ${e}`:"";await this.spawnBuild(i,`${t} ${o} --outDir ${p}/${i}`,{shouldWait:!r,focusOnly:"ssr"===s?"server":"client",env:{SSR_BOOST_CUSTOM_ENTRYPOINT_BUILD_NAME:i}})}r?this.runPreviewMode():(h&&this.unlockRobots(),a(this.isProd,this.viteConfig),this.writeProductionConfig(),s.mkdirSync(this.buildDir,{recursive:!0}),s.writeFileSync(e.join(this.buildDir,"ssr-boost-diagnostics.json"),JSON.stringify({codes:[...this.diagnosticCodes].sort((i,s)=>i.localeCompare(s))},null,2)),o?.())}}export{f as default};
|
|
2
2
|
//# sourceMappingURL=build.js.map
|
package/services/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sources":["../../src/services/build.ts"],"sourcesContent":[null],"names":["Build","isProd","nodeEnv","buildDir","viteConfig","pluginConfig","params","mode","clientOptions","serverOptions","focusOnly","isWatch","isUnlockRobots","isEject","isServerless","isNoWarnings","abortController","runningBuild","hasPreviewModeExitListener","diagnosticCodes","Set","constructor","this","makeConfig","resolveConfig","getPluginConfig","path","resolve","root","build","outDir","process","env","NODE_ENV","clearBuildFolder","fs","existsSync","rmSync","recursive","getIsProd","getNodeEnv","getRunningBuildNames","map","name","promisifyProcess","command","isRejectWarnings","promise","Promise","reject","on","code","message","stderr","buff","msg","Buffer","from","toString","includes","stdout","pipe","stream","tail","chunk","text","DIAGNOSTIC_CODES","filter","forEach","add","slice","buildManifest","console","info","chalk","blue","serverConfig","ServerConfig","init","clientFile","SsrManifest","get","viteAliases","alias","basename","base","renderBuiltUrl","experimental","buildRoutesManifest","writeProductionConfig","indexFile","serverFile","config","version","publicDir","posix","join","parse","directory","mkdirSync","writeFileSync","JSON","stringify","unlockRobots","robotsFile","warn","data","readFileSync","encoding","replace","eject","entrypoint","script","PLUGIN_NAME","createServerless","spawnBuild","buildOptions","shouldWait","modeOpt","buildProcess","childProcess","spawn","signal","stdio","stdin","shell","FORCE_COLOR","SSR_BOOST_IS_SSR","createFocusOnly","isOnlyClient","SSR_BOOST_ACTION","global","viteBoostAction","push","waitLastBuild","latestProcess","at","exitCode","processStop","runPreviewMode","abort","onFinish","buildCount","length","listener","removeListener","createDevMarker","viteResetCache","clear","focus","AbortController","isClient","isServer","isEntrypoint","type","cliOptions","SSR_BOOST_CUSTOM_ENTRYPOINT_BUILD_NAME","codes","sort","a","b","localeCompare"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"build.js","sources":["../../src/services/build.ts"],"sourcesContent":[null],"names":["Build","isProd","nodeEnv","buildDir","viteConfig","pluginConfig","params","mode","clientOptions","serverOptions","focusOnly","isWatch","isUnlockRobots","isEject","isServerless","isNoWarnings","abortController","runningBuild","hasPreviewModeExitListener","diagnosticCodes","Set","constructor","this","makeConfig","resolveConfig","getPluginConfig","path","resolve","root","build","outDir","process","env","NODE_ENV","clearBuildFolder","fs","existsSync","rmSync","recursive","getIsProd","getNodeEnv","getRunningBuildNames","map","name","promisifyProcess","command","isRejectWarnings","promise","Promise","reject","on","code","message","stderr","buff","msg","Buffer","from","toString","includes","stdout","pipe","stream","tail","chunk","text","DIAGNOSTIC_CODES","filter","forEach","add","slice","buildManifest","console","info","chalk","blue","serverConfig","ServerConfig","init","clientFile","SsrManifest","get","viteAliases","alias","basename","base","renderBuiltUrl","experimental","buildRoutesManifest","writeProductionConfig","indexFile","serverFile","config","version","publicDir","posix","join","parse","directory","mkdirSync","writeFileSync","JSON","stringify","unlockRobots","robotsFile","warn","data","readFileSync","encoding","replace","eject","entrypoint","script","PLUGIN_NAME","createServerless","spawnBuild","buildOptions","shouldWait","modeOpt","buildProcess","childProcess","spawn","signal","stdio","stdin","shell","FORCE_COLOR","SSR_BOOST_IS_SSR","createFocusOnly","isOnlyClient","SSR_BOOST_ACTION","global","viteBoostAction","push","waitLastBuild","latestProcess","at","exitCode","processStop","runPreviewMode","abort","onFinish","buildCount","length","listener","removeListener","createDevMarker","viteResetCache","clear","focus","AbortController","isClient","isServer","isEntrypoint","type","cliOptions","SSR_BOOST_CUSTOM_ENTRYPOINT_BUILD_NAME","codes","sort","a","b","localeCompare"],"mappings":"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"}
|