@lomray/vite-ssr-boost 8.4.6 → 8.4.7

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.d.ts CHANGED
@@ -25,12 +25,13 @@ export declare const TESTED_MATRIX: {
25
25
  router: string;
26
26
  vite: string;
27
27
  }[];
28
- /** Prefer npm's own CLI, then the npm bundled beside the current Node runtime. */
29
- export declare const resolveNpmCli: () => string | undefined;
30
- /** Inspect npm's dependency tree, counting physical copies rather than dependants. */
28
+ /**
29
+ * Count physical React copies reachable from the app's dependencies.
30
+ * Real paths are compared, so npm, Yarn and symlinked pnpm layouts give the same answer.
31
+ */
31
32
  export declare const reactCopies: (root: string) => {
32
- react: number;
33
- "react-dom": number;
33
+ react: string[];
34
+ "react-dom": string[];
34
35
  };
35
36
  /** Read-only project inspection. The JSON schema is also usable from automation. */
36
37
  export declare const inspectProject: (options?: IDoctorOptions) => IDoctorReport;
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}},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};
1
+ import e from"node:fs";import{createRequire as t}from"node:module";import r from"node:path";import s from"semver";import o from"./diagnostic-codes.js";import{libraryPackage as n,stringValue as i,readPackage as a,readConfig as c,readHtml as d,objectProperty as l}from"./project.js";import p from"../constants/plugin-name.js";import u from"../services/parse-routes.js";import m from"../services/server-config.js";import f from"../services/source-files.js";const h=[{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"}],g="package.json",v=(t,s)=>{for(let o=t;;o=r.dirname(o)){const t=r.join(o,"node_modules",s);if(e.existsSync(r.join(t,g)))return e.realpathSync(t);if(o===r.dirname(o))return}},b=t=>{const s={react:new Set,"react-dom":new Set},o=new Set,n=(e,t)=>{for(const i of t){const t=v(e,i);if(!t||o.has(t))continue;o.add(t),"react"!==i&&"react-dom"!==i||s[i].add(t);const{dependencies:c,peerDependencies:d}=a(r.join(t,g));n(t,Object.keys({...c,...d}))}},{dependencies:i,devDependencies:c}=a(r.join(t,g));return n(e.realpathSync(t),Object.keys({...i,...c})),{react:[...s.react],"react-dom":[...s["react-dom"]]}},y=(e,t="")=>e.flatMap(e=>{const r=[t,String(e.index)].filter(Boolean).join("-");return[{id:e.id??r,path:e.path??null},...y(e.children,r)]}),$=(v={})=>{const $=r.resolve(v.root??process.cwd()),w=[],j={node:process.versions.node},x={versions:j,adapter:null,routes:[],checks:w,diagnosticCodes:[]},k=(e,t,r,s=!1)=>{try{w.push({name:e,status:"ok",message:r(),fix:t,...s?{info:s}:{}})}catch(r){w.push({name:e,status:"error",message:r.message,fix:t,...s?{info:s}:{}})}};let S={};k("package","Run doctor in the app directory or set --root.",()=>(S=a(r.join($,g)),"package.json is readable"));const R=t(r.join($,g)),E=[p,"react","react-dom","react-router","vite"],O=n(),D={[p]:O.engines.node},M={app:S.peerDependencies??{}};for(const e of E)k(`version:${e}`,`Install ${e} at a version satisfying the installed packages’ peer ranges.`,()=>{const t=a(R.resolve(`${e}/package.json`)),r=s.valid(t.version);if(M[e]=t.peerDependencies??(e===p?O.peerDependencies??{}:{}),j[e]=r,!r)throw new Error(`${e} has no valid installed version`);return t.engines?.node&&(D[e]=t.engines.node),`${e} ${r}`}),j[e]??=null;for(const e of w.filter(e=>e.name.startsWith("version:")&&"ok"===e.status)){const t=e.name.slice(8),r=Object.entries(M).flatMap(([e,r])=>r[t]&&!s.satisfies(j[t],r[t])?[`${e} requires ${t}: ${r[t]}`]:[]);r.length&&(e.status="error",e.message+=`; ${r.join("; ")}`)}const N=e=>Number(j.react===e.react&&j["react-dom"]===e.react)+Number(j["react-router"]===e.router)+Number(j.vite===e.vite),F=(e,t)=>{const r=s.parse(e),o=s.parse(t);return r?1e6*Math.abs(r.major-o.major)+1e3*Math.abs(r.minor-o.minor)+Math.abs(r.patch-o.patch):Number.MAX_SAFE_INTEGER},[A]=[...h].sort((e,t)=>N(t)-N(e)||F(j.react,e.react)-F(j.react,t.react)||F(j["react-dom"],e.react)-F(j["react-dom"],t.react)||F(j["react-router"],e.router)-F(j["react-router"],t.router)||F(j.vite,e.vite)-F(j.vite,t.vite)),C=`React ${j.react??"missing"}${j["react-dom"]!==j.react?` (React DOM ${j["react-dom"]??"missing"})`:""} + Router ${j["react-router"]??"missing"} + Vite ${j.vite??"missing"}`,z=3===N(A);w.push({name:"compatibility",status:z?"ok":"warn",message:z?`${C} is a tested row`:`${C} is not a tested row; closest: React ${A.react} + Router ${A.router} + Vite ${A.vite}`,fix:`Use React and React DOM ${A.react}, React Router ${A.router}, and Vite ${A.vite} for a tested combination.`}),k("node","Use a Node version satisfying the package and app engines (CI uses 22.23.2).",()=>{S.engines?.node&&(D.app=S.engines.node);const e=Object.entries(D).filter(([,e])=>!s.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`}),k("react-copies","Align React and React DOM versions across dependencies and workspace packages, then dedupe with your package manager (npm dedupe, pnpm dedupe, yarn dedupe).",()=>{const e=b($),t=[...e.react,...e["react-dom"]],s=`React copies: ${e.react.length}; React DOM copies: ${e["react-dom"].length} (${t.map(e=>r.relative($,e)).join(", ")||"none installed"})`;if(1===e.react.length&&1===e["react-dom"].length)return"One physical copy each of React and React DOM";const o=(e=>{try{const t=l(c(e).node,"resolve"),r="ObjectExpression"===t?.type?l(t,"dedupe"):void 0;return"ArrayExpression"===r?.type?r.elements.flatMap(e=>i(e??void 0)??[]):[]}catch{return[]}})($);if(!e.react.length||!e["react-dom"].length||!["react","react-dom"].every(e=>o.includes(e)))throw new Error(s);return`${s}; resolve.dedupe keeps one copy of each in the bundle`});const V=w[w.length-1];let I;V.message.includes("resolve.dedupe")&&(V.status="warn"),k("vite-plugin","Add SsrBoost() from @lomray/vite-ssr-boost/plugin to Vite plugins.",()=>{if(I=c($),!I.plugin)throw new Error("Vite plugins do not contain the imported SsrBoost() plugin");return"SsrBoost() is in the Vite plugins"});const B=I?.viteRoot??(e.existsSync(r.join($,"index.html"))?$:r.join($,"src")),J=r.resolve(B,i(I?.option("indexFile"))??"index.html"),U=i(I?.option("clientFile"))??"client.ts",_=i(I?.option("serverFile"))??"server.ts";k("html-module",'Keep one local <script type="module" src="..."> pointing to the configured clientFile.',()=>{const e=d(J);if(1!==e.entries.length)throw new Error(`${r.relative($,J)}: 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("/")?B:r.dirname(J),t.replace(/^\//,""))!==r.resolve(B,U))throw new Error(`${r.relative($,J)}: module script does not match clientFile`);return"Module script matches the browser entry"}),k("html-outlet","Place exactly one \x3c!--ssr-outlet--\x3e inside the root element.",()=>{const e=d(J);if(1!==e.outlets)throw new Error(`${r.relative($,J)}: expected one \x3c!--ssr-outlet--\x3e, found ${e.outlets}`);return"Exactly one SSR outlet"});const W=new f(I?.aliases);for(const[e,t,s]of[["browser",U,"browser/entry"],["server",_,"adapters/express/entry"]])k(`${e}-entry`,`Create the ${e} entry and import ${p}/${s}.`,()=>{if(!W.read(r.resolve(B,t)).ast.program.body.filter(e=>"ImportDeclaration"===e.type).some(e=>e.source.value.replace(/\.js$/,"")===`${p}/${s}`))throw new Error(`${t}: missing library ${s} import`);return"server"===e&&(x.adapter="express"),`${t} imports ${s}`});k("routes","Use statically analyzable route objects; follow the file and line in the parser error.",()=>(x.routes=y(new u(m.init({},{root:B,clientFile:U}),I?.aliases).parse(!0)),`${x.routes.length} route IDs resolved`)),k("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"}),k("robots","Review public/robots.txt for your deployment; use build --unlock-robots only when intended.",()=>{const t=i(I?l(I.node,"publicDir"):void 0)??"public",s=r.resolve(B,t,"robots.txt");return e.existsSync(s)?/^Disallow:\s*\/\s*$/im.test(e.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),k("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 q=I?l(I.node,"build"):void 0,G="ObjectExpression"===q?.type?i(l(q,"outDir")):void 0,K=r.resolve(B,G??"dist","ssr-boost-diagnostics.json");if(e.existsSync(K))try{const t=JSON.parse(e.readFileSync(K,"utf8")),r=t&&"object"==typeof t?Reflect.get(t,"codes"):void 0;x.diagnosticCodes=Array.isArray(r)?o.filter(e=>r.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:r,info:s})=>({name:e,status:t,fix:r,...s?{info:s}:{}})),diagnosticCodes:e.diagnosticCodes}),j=(t={})=>{const s=$(t);if(t.bundle)try{e.writeFileSync(r.resolve(t.root??process.cwd(),t.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."})}t.json?console.info(JSON.stringify(s,null,2)):console.table(s.checks.map(({status:e,name:t,message:r,fix:s})=>({status:e,check:t,message:r,fix:s}))),process.exitCode=s.checks.some(e=>"error"===e.status)?1:0};export{h as TESTED_MATRIX,j as default,$ as inspectProject,b as reactCopies,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","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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"}
1
+ {"version":3,"file":"doctor.js","sources":["../../src/cli/doctor.ts"],"sourcesContent":[null],"names":["TESTED_MATRIX","react","router","vite","PACKAGE_FILE","packageDirectory","from","name","directory","path","dirname","candidate","join","fs","existsSync","realpathSync","reactCopies","root","copies","Set","visited","visit","names","location","has","add","dependencies","peerDependencies","readPackage","Object","keys","devDependencies","routeDetails","routes","parent","flatMap","route","position","String","index","filter","Boolean","id","children","inspectProject","options","resolve","process","cwd","checks","versions","node","report","adapter","diagnosticCodes","check","fix","inspect","info","push","status","message","error","pkg","require","createRequire","packages","PLUGIN_NAME","ownPackage","libraryPackage","engines","peers","app","metadata","version","semver","valid","Error","item","row","startsWith","slice","failures","entries","dependant","ranges","satisfies","length","matches","Number","distance","installed","tested","parse","target","Math","abs","major","minor","patch","MAX_SAFE_INTEGER","closest","sort","left","right","trio","isTested","range","map","locations","summary","relative","dedupe","objectProperty","readConfig","type","undefined","elements","element","stringValue","viteDedupe","every","includes","copiesCheck","config","plugin","viteRoot","indexFile","option","clientFile","serverFile","html","readHtml","src","attribute","test","replace","outlets","sources","SourceFiles","aliases","kind","file","expected","read","ast","program","body","some","source","value","ParseRoutes","ServerConfig","init","scripts","values","missing","command","RegExp","publicDir","readFileSync","build","outDir","diagnosticsFile","recorded","JSON","codes","Reflect","get","Array","isArray","DIAGNOSTIC_CODES","code","supportBundle","schemaVersion","runDoctor","bundle","writeFileSync","stringify","json","console","table","exitCode"],"mappings":"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"}
package/logger.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Production logger: extend it to change the output format and pass the instance as `loggerProd`.
3
+ */
4
+ export { default, default as Logger, LogLevels } from './services/logger.js';
5
+ export type { ILoggerOptions, ILogParams } from './services/logger.js';
6
+ /**
7
+ * Serialize React Router errors the way the built-in renderer does, without stack traces.
8
+ */
9
+ export { default as serializeErrors } from './helpers/serialize-errors.js';
package/logger.js ADDED
@@ -0,0 +1,2 @@
1
+ export{LogLevels,default as Logger,default}from"./services/logger.js";export{default as serializeErrors}from"./helpers/serialize-errors.js";
2
+ //# sourceMappingURL=logger.js.map
package/logger.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lomray/vite-ssr-boost",
3
- "version": "8.4.6",
3
+ "version": "8.4.7",
4
4
  "description": "SSR and streaming for existing Vite + React Router apps in Data mode, without Framework mode",
5
5
  "type": "module",
6
6
  "exports": {
@@ -12,6 +12,10 @@
12
12
  "types": "./node/production.d.ts",
13
13
  "default": "./node/production.js"
14
14
  },
15
+ "./logger": {
16
+ "types": "./logger.d.ts",
17
+ "default": "./logger.js"
18
+ },
15
19
  "./*.js": {
16
20
  "types": "./*.d.ts",
17
21
  "default": "./*.js"
@@ -1,14 +1,14 @@
1
1
  import type { LogErrorOptions, Logger as ViteLogger, LogOptions } from 'vite';
2
- declare const LogLevels: {
2
+ export declare const LogLevels: {
3
3
  error: number;
4
4
  warn: number;
5
5
  info: number;
6
6
  };
7
- interface ILoggerOptions {
7
+ export interface ILoggerOptions {
8
8
  logLevel?: number;
9
9
  logFilter?: (params: ILogParams) => boolean;
10
10
  }
11
- interface ILogParams {
11
+ export interface ILogParams {
12
12
  level: keyof typeof LogLevels;
13
13
  msg?: string;
14
14
  options?: LogErrorOptions;
@@ -1,2 +1,2 @@
1
- const o={error:1,warn:2,info:3};class l{hasWarned;loglevel;logFilter;constructor({logFilter:o,logLevel:l=3}={}){this.loglevel=l,this.logFilter=o}clearScreen(){}shouldSkipLog(o){return o>this.loglevel}log(l){const{level:e,msg:r,options:s}=l;if(this.shouldSkipLog(o[e])||this.logFilter?.(l))return;const t=[r,s?.error].filter(Boolean);console[e](...t)}error(o,l){this.log({msg:o,options:l,level:"error"})}hasErrorLogged(){return!1}info(o,l){this.log({msg:o,options:l,level:"info"})}warn(o,l){this.log({msg:o,options:l,level:"warn"})}warnOnce(o,l){this.warn(o,l)}}export{l as default};
1
+ const o={error:1,warn:2,info:3};class l{hasWarned;loglevel;logFilter;constructor({logFilter:o,logLevel:l=3}={}){this.loglevel=l,this.logFilter=o}clearScreen(){}shouldSkipLog(o){return o>this.loglevel}log(l){const{level:e,msg:r,options:s}=l;if(this.shouldSkipLog(o[e])||this.logFilter?.(l))return;const t=[r,s?.error].filter(Boolean);console[e](...t)}error(o,l){this.log({msg:o,options:l,level:"error"})}hasErrorLogged(){return!1}info(o,l){this.log({msg:o,options:l,level:"info"})}warn(o,l){this.log({msg:o,options:l,level:"warn"})}warnOnce(o,l){this.warn(o,l)}}export{o as LogLevels,l as default};
2
2
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sources":["../../src/services/logger.ts"],"sourcesContent":[null],"names":["LogLevels","error","warn","info","Logger","hasWarned","loglevel","logFilter","constructor","logLevel","this","clearScreen","shouldSkipLog","level","log","params","msg","options","args","filter","Boolean","console","hasErrorLogged","warnOnce"],"mappings":"AAEA,MAAMA,EAAY,CAChBC,MAAO,EACPC,KAAM,EACNC,KAAM,GAiBR,MAAMC,EAIGC,UAKAC,SAMAC,UAKP,WAAAC,EAAmBD,UAAEA,EAASE,SAAEA,EAAW,GAAsB,CAAA,GAC/DC,KAAKJ,SAAWG,EAChBC,KAAKH,UAAYA,CACnB,CAKO,WAAAI,GAEP,CAKU,aAAAC,CAAcC,GACtB,OAAOA,EAAQH,KAAKJ,QACtB,CAKU,GAAAQ,CAAIC,GACZ,MAAMF,MAAEA,EAAKG,IAAEA,EAAGC,QAAEA,GAAYF,EAEhC,GAAIL,KAAKE,cAAcZ,EAAUa,KAAWH,KAAKH,YAAYQ,GAC3D,OAGF,MAAMG,EAAO,CAACF,EAAKC,GAAShB,OAAOkB,OAAOC,SAE1CC,QAAQR,MAAUK,EACpB,CAKO,KAAAjB,CAAMe,EAAaC,GACxBP,KAAKI,IAAI,CAAEE,MAAKC,UAASJ,MAAO,SAClC,CAKO,cAAAS,GACL,OAAO,CACT,CAKO,IAAAnB,CAAKa,EAAaC,GACvBP,KAAKI,IAAI,CAAEE,MAAKC,UAASJ,MAAO,QAClC,CAKO,IAAAX,CAAKc,EAAaC,GACvBP,KAAKI,IAAI,CAAEE,MAAKC,UAASJ,MAAO,QAClC,CAKO,QAAAU,CAASP,EAAaC,GAC3BP,KAAKR,KAAKc,EAAKC,EACjB"}
1
+ {"version":3,"file":"logger.js","sources":["../../src/services/logger.ts"],"sourcesContent":[null],"names":["LogLevels","error","warn","info","Logger","hasWarned","loglevel","logFilter","constructor","logLevel","this","clearScreen","shouldSkipLog","level","log","params","msg","options","args","filter","Boolean","console","hasErrorLogged","warnOnce"],"mappings":"AAEO,MAAMA,EAAY,CACvBC,MAAO,EACPC,KAAM,EACNC,KAAM,GAiBR,MAAMC,EAIGC,UAKAC,SAMAC,UAKP,WAAAC,EAAmBD,UAAEA,EAASE,SAAEA,EAAW,GAAsB,CAAA,GAC/DC,KAAKJ,SAAWG,EAChBC,KAAKH,UAAYA,CACnB,CAKO,WAAAI,GAEP,CAKU,aAAAC,CAAcC,GACtB,OAAOA,EAAQH,KAAKJ,QACtB,CAKU,GAAAQ,CAAIC,GACZ,MAAMF,MAAEA,EAAKG,IAAEA,EAAGC,QAAEA,GAAYF,EAEhC,GAAIL,KAAKE,cAAcZ,EAAUa,KAAWH,KAAKH,YAAYQ,GAC3D,OAGF,MAAMG,EAAO,CAACF,EAAKC,GAAShB,OAAOkB,OAAOC,SAE1CC,QAAQR,MAAUK,EACpB,CAKO,KAAAjB,CAAMe,EAAaC,GACxBP,KAAKI,IAAI,CAAEE,MAAKC,UAASJ,MAAO,SAClC,CAKO,cAAAS,GACL,OAAO,CACT,CAKO,IAAAnB,CAAKa,EAAaC,GACvBP,KAAKI,IAAI,CAAEE,MAAKC,UAASJ,MAAO,QAClC,CAKO,IAAAX,CAAKc,EAAaC,GACvBP,KAAKI,IAAI,CAAEE,MAAKC,UAASJ,MAAO,QAClC,CAKO,QAAAU,CAASP,EAAaC,GAC3BP,KAAKR,KAAKc,EAAKC,EACjB"}