@lomray/vite-ssr-boost 8.3.0-beta.1 → 8.3.0-beta.2

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/README.md CHANGED
@@ -24,6 +24,10 @@
24
24
 
25
25
  ```bash
26
26
  npm i @lomray/vite-ssr-boost
27
+ npx ssr-boost init --dry-run
28
+ npx ssr-boost init --apply
29
+ npm install
30
+ npx ssr-boost doctor
27
31
  ```
28
32
 
29
33
  `@lomray/vite-ssr-boost` adds server rendering to your Vite project while keeping your route objects and components. Build SSR and SPA output from the same app, and choose a managed Express server or a Fetch handler for your own transport.
@@ -22,3 +22,4 @@ export interface IEntryClientOptions<T> {
22
22
  */
23
23
  declare function entry<TAppProps>(App: TApp<TAppProps>, routes: TRouteObject[], { init, routerOptions, createRouter, rootId, }?: IEntryClientOptions<TAppProps>): Promise<ReactDOM.Root | void>;
24
24
  export default entry;
25
+ export { entry };
package/browser/entry.js CHANGED
@@ -1,2 +1,2 @@
1
- import e from"react";import t from"react-dom/client";import{matchRoutes as o,createBrowserRouter as r,RouterProvider as n}from"react-router";import a from"./stream.js";import{IS_SSR_MODE as i}from"../constants/common.js";async function c(c,d,{init:s,routerOptions:l,createRouter:m=r,rootId:u="root"}={}){const f=i?a():void 0,w=(()=>{const e="__staticRouterHydrationData";if(!("loading"!==document.readyState||i&&void 0!==Reflect.get(window,e)))return new Promise(t=>{const o=()=>{i&&Reflect.deleteProperty(window,e),t()};document.addEventListener("DOMContentLoaded",o,{once:!0}),i&&Object.defineProperty(window,e,{configurable:!0,enumerable:!0,get:()=>{},set:r=>{Object.defineProperty(window,e,{configurable:!0,enumerable:!0,writable:!0,value:r}),document.removeEventListener("DOMContentLoaded",o),t()}})})})(),y=o(d,window.location,l?.basename)?.filter(e=>e.route.lazy);(w||y?.length)&&await Promise.all([w,...(y??[]).map(async e=>{const{lazy:t}=e.route;if("function"==typeof t){const o=await t();o&&Object.assign(e.route,{...o,lazy:void 0})}})]);const p=Reflect.get(window,"__staticRouterHydrationData");f&&p?.__ssrBoostStream&&Reflect.set(window,"__staticRouterHydrationData",await f.ready);const R=m(d,l),b=document.getElementById(u),g=await(s?.({isSSRMode:i,router:R})),_=()=>e.createElement(c,{client:g},e.createElement(n,{router:R}));return i&&"1"!==b.dataset.forceSpa?t.hydrateRoot(b,e.createElement(_,null)):t.createRoot(b).render(e.createElement(_,null))}export{c as default};
1
+ import e from"react";import t from"react-dom/client";import{matchRoutes as o,createBrowserRouter as r,RouterProvider as n}from"react-router";import a from"./stream.js";import{IS_SSR_MODE as i}from"../constants/common.js";async function c(c,d,{init:s,routerOptions:l,createRouter:m=r,rootId:u="root"}={}){const f=i?a():void 0,w=(()=>{const e="__staticRouterHydrationData";if(!("loading"!==document.readyState||i&&void 0!==Reflect.get(window,e)))return new Promise(t=>{const o=()=>{i&&Reflect.deleteProperty(window,e),t()};document.addEventListener("DOMContentLoaded",o,{once:!0}),i&&Object.defineProperty(window,e,{configurable:!0,enumerable:!0,get:()=>{},set:r=>{Object.defineProperty(window,e,{configurable:!0,enumerable:!0,writable:!0,value:r}),document.removeEventListener("DOMContentLoaded",o),t()}})})})(),y=o(d,window.location,l?.basename)?.filter(e=>e.route.lazy);(w||y?.length)&&await Promise.all([w,...(y??[]).map(async e=>{const{lazy:t}=e.route;if("function"==typeof t){const o=await t();o&&Object.assign(e.route,{...o,lazy:void 0})}})]);const p=Reflect.get(window,"__staticRouterHydrationData");f&&p?.__ssrBoostStream&&Reflect.set(window,"__staticRouterHydrationData",await f.ready);const R=m(d,l),b=document.getElementById(u),g=await(s?.({isSSRMode:i,router:R})),_=()=>e.createElement(c,{client:g},e.createElement(n,{router:R}));return i&&"1"!==b.dataset.forceSpa?t.hydrateRoot(b,e.createElement(_,null)):t.createRoot(b).render(e.createElement(_,null))}export{c as default,c as entry};
2
2
  //# sourceMappingURL=entry.js.map
@@ -0,0 +1,3 @@
1
+ /** Codes safe to record in a build support bundle. Never record warning payloads. */
2
+ declare const DIAGNOSTIC_CODES: string[];
3
+ export default DIAGNOSTIC_CODES;
@@ -0,0 +1,2 @@
1
+ const S=["SSR_BOOST_LOADER_NOT_SERIALIZABLE","SSR_BOOST_STATE_NOT_SERIALIZABLE","SSR_BOOST_OUTLET_MISSING","SSR_BOOST_HYDRATION_STATE_MISSING","SSR_BOOST_DUPLICATE_OUTPUT","SSR_BOOST_ONRESPONSE_INVALID_RETURN"];export{S as default};
2
+ //# sourceMappingURL=diagnostic-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostic-codes.js","sources":["../../src/cli/diagnostic-codes.ts"],"sourcesContent":[null],"names":["DIAGNOSTIC_CODES"],"mappings":"AACA,MAAMA,EAAmB,CACvB,oCACA,mCACA,2BACA,oCACA,6BACA"}
@@ -0,0 +1,55 @@
1
+ export interface IDoctorOptions {
2
+ root?: string;
3
+ json?: boolean;
4
+ bundle?: string;
5
+ }
6
+ export interface ICheck {
7
+ name: string;
8
+ status: 'ok' | 'warn' | 'error';
9
+ message: string;
10
+ fix: string;
11
+ info?: boolean;
12
+ }
13
+ export interface IDoctorReport {
14
+ versions: Record<string, string | null>;
15
+ adapter: string | null;
16
+ routes: {
17
+ id: string;
18
+ path: string | null;
19
+ }[];
20
+ checks: ICheck[];
21
+ diagnosticCodes: string[];
22
+ }
23
+ export declare const TESTED_MATRIX: {
24
+ react: string;
25
+ router: string;
26
+ vite: string;
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. */
31
+ export declare const reactCopies: (root: string) => {
32
+ react: number;
33
+ "react-dom": number;
34
+ };
35
+ /** Read-only project inspection. The JSON schema is also usable from automation. */
36
+ export declare const inspectProject: (options?: IDoctorOptions) => IDoctorReport;
37
+ /** Support bundles contain an allowlist, never raw messages, npm output, env, or source. */
38
+ export declare const supportBundle: (report: IDoctorReport) => {
39
+ schemaVersion: number;
40
+ versions: Record<string, string | null>;
41
+ adapter: string | null;
42
+ routes: {
43
+ id: string;
44
+ path: string | null;
45
+ }[];
46
+ checks: {
47
+ info?: true | undefined;
48
+ name: string;
49
+ status: "error" | "warn" | "ok";
50
+ fix: string;
51
+ }[];
52
+ diagnosticCodes: string[];
53
+ };
54
+ declare const runDoctor: (options?: IDoctorOptions) => void;
55
+ export default runDoctor;
package/cli/doctor.js ADDED
@@ -0,0 +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}},$=(e,t="")=>e.flatMap(e=>{const s=[t,String(e.index)].filter(Boolean).join("-");return[{id:e.id??s,path:e.path??null},...$(e.children,s)]}),y=(e={})=>{const v=r.resolve(e.root??process.cwd()),y=[],w={node:process.versions.node},x={versions:w,adapter:null,routes:[],checks:y,diagnosticCodes:[]},j=(e,t,s,r=!1)=>{try{y.push({name:e,status:"ok",message:s(),fix:t,...r?{info:r}:{}})}catch(s){y.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 y.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 V;y.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(V=l(v),!V.plugin)throw new Error("Vite plugins do not contain the imported SsrBoost() plugin");return"SsrBoost() is in the Vite plugins"});const _=V?.viteRoot??(t.existsSync(r.join(v,"index.html"))?v:r.join(v,"src")),A=r.resolve(_,a(V?.option("indexFile"))??"index.html"),B=a(V?.option("clientFile"))??"client.ts",I=a(V?.option("serverFile"))??"server.ts";j("html-module",'Keep one local <script type="module" src="..."> pointing to the configured clientFile.',()=>{const e=d(A);if(1!==e.entries.length)throw new Error(`${r.relative(v,A)}: 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("/")?_:r.dirname(A),t.replace(/^\//,""))!==r.resolve(_,B))throw new Error(`${r.relative(v,A)}: 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(A);if(1!==e.outlets)throw new Error(`${r.relative(v,A)}: expected one \x3c!--ssr-outlet--\x3e, found ${e.outlets}`);return"Exactly one SSR outlet"});const J=new h(V?.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(_,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=$(new m(f.init({},{root:_,clientFile:B}),V?.aliases).parse(!0)),`${x.routes.length} route IDs resolved`)),j("scripts",'Set dev (or develop)="ssr-boost dev", build="ssr-boost build", start:ssr="ssr-boost start".',()=>{const e=S.scripts??{},t=[["dev",e.dev??e.develop],["build",e.build],["start",e["start:ssr"]??e.start]].filter(([e,t])=>!new RegExp(`(?:^|\\s)ssr-boost\\s+${e}(?:\\s|$)`).test(t??""));if(t.length)throw new Error(`Scripts missing ssr-boost commands: ${t.map(([e])=>e).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(V?p(V.node,"publicDir"):void 0)??"public",s=r.resolve(_,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=V?p(V.node,"build"):void 0,U="ObjectExpression"===P?.type?a(p(P,"outDir")):void 0,W=r.resolve(_,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=y(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,y as inspectProject,b as reactCopies,v as resolveNpmCli,w as supportBundle};
2
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +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","missing","dev","develop","build","start","command","RegExp","publicDir","objectProperty","undefined","readFileSync","keys","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/init.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ export interface IInitOptions {
2
+ root?: string;
3
+ entry?: string;
4
+ routes?: string;
5
+ dryRun?: boolean;
6
+ apply?: boolean;
7
+ }
8
+ export interface IFileChange {
9
+ file: string;
10
+ before: string;
11
+ after: string;
12
+ }
13
+ /** Build all edits first. A failed analysis leaves even --apply completely untouched. */
14
+ export declare const planInit: (options?: IInitOptions) => IFileChange[];
15
+ /** CLI default is a complete unified diff, with no temporary files or installs. */
16
+ declare const runInit: (options?: IInitOptions) => void;
17
+ export default runInit;
package/cli/init.js ADDED
@@ -0,0 +1,2 @@
1
+ import e from"node:fs";import t from"node:path";import{createTwoFilesPatch as r}from"diff";import{MANUAL_GUIDE as o,readConfig as n,format as i,objectProperty as s,stringValue as a,readHtml as l,editText as p,readPackage as c,libraryPackage as d}from"./project.js";import m from"../constants/plugin-name.js";import f from"../services/parse-routes.js";import u,{sourceError as y,walk as h,unwrap as $}from"../services/source-files.js";const g=(e,r)=>{const o=t.relative(t.dirname(e),r).split(t.sep).join("/");return o.startsWith(".")?o:`./${o}`},v=e=>{const t=new Set;return h(e,e=>{"Identifier"!==e.type&&"JSXIdentifier"!==e.type||t.add(e.name)}),t},w=(e,t,r,o,n)=>{const i=e.specifiers.filter(e=>t.has(e.local.name)),s=i.filter(e=>"ImportDefaultSpecifier"===e.type).map(e=>e.local.name),a=i.filter(e=>"ImportNamespaceSpecifier"===e.type).map(e=>`* as ${e.local.name}`),l=i.flatMap(e=>{if("ImportSpecifier"!==e.type)return[];const t="Identifier"===e.imported.type?e.imported.name:`${o}${e.imported.value}${o}`;return[`${"type"===e.importKind?"type ":""}${t}${t===e.local.name?"":` as ${e.local.name}`}`]}),p=[...s,...a,...l.length?[`{ ${l.join(", ")} }`]:[]];return p.length?`import ${"type"===e.importKind?"type ":""}${p.join(", ")} from ${o}${r}${o}${n}`:""},x=(e,t)=>{const r=[];for(const o of e.read(t).ast.program.body)"ExportDefaultDeclaration"===o.type&&r.push("default"),"ExportNamedDeclaration"===o.type&&("VariableDeclaration"===o.declaration?.type&&r.push(...o.declaration.declarations.flatMap(e=>"Identifier"===e.id.type?[e.id.name]:[])),r.push(...o.specifiers.map(e=>"Identifier"===e.exported.type?e.exported.name:e.exported.value)));return r.flatMap(r=>{const o=e.exported(t,r);return"ArrayExpression"===o.node.type?[{name:r,value:o}]:[]})},b=(r={})=>{const o=t.resolve(r.root??process.cwd()),b=n(o),{newline:S,quote:j,semicolon:E}=i(b.code),R=[],I=(r,n)=>{const i=e.existsSync(r)?e.readFileSync(r,"utf8"):"";i!==n&&R.push({file:t.relative(o,r).split(t.sep).join("/"),before:i,after:n})},C=s(b.node,"base");if(C&&"/"!==a(C))throw y(b.file,C,"Vite base; automatic migration currently maps only /");if(b.node.properties.some(e=>"SpreadElement"===e.type))throw y(b.file,b.node,"spread Vite configuration");const D=s(b.node,"build"),F="ObjectExpression"===D?.type?s(D,"rollupOptions"):void 0;if(b.option("entrypoint")||"ObjectExpression"===F?.type&&s(F,"input"))throw y(b.file,F,"multiple or custom build entries");const J=t.resolve(b.viteRoot,a(b.option("indexFile"))??"index.html"),X=l(J);if(1!==X.entries.length||!X.attribute(X.entries[0],"src"))throw y(J,void 0,`module entries (${X.entries.length}); expected one external module script`);const M=X.attribute(X.entries[0],"src");if(/(?:^(?:\w+:|\/\/))|[?#]/.test(M))throw y(J,void 0,"non-local browser entry URL");const A=t.resolve(M.startsWith("/")?b.viteRoot:t.dirname(J),M.replace(/^\//,"")),O=r.entry?t.resolve(o,r.entry):A;if(O!==A)throw y(J,void 0,"--entry does not match the module script");const B=new u(b.aliases),{code:P,ast:N}=B.read(O),V=i(P),T=V.quote,W=V.semicolon,z=V.newline,L=/\.[cm]?tsx?$/.test(O),k=t.resolve(t.dirname(O),"server."+(L?"ts":"js"));if(N.program.body.some(e=>"ImportDeclaration"===e.type&&e.source.value.replace(/\.js$/,"")===`${m}/browser/entry`)){if(!b.plugin||1!==X.outlets||!e.existsSync(k))throw y(O,void 0,"partially configured SSR app; finish the migration using doctor");return[]}if(e.existsSync(k))throw y(k,void 0,"existing server entry; refusing to overwrite");if(1!==X.roots.length||!X.roots[0].sourceCodeLocation?.endTag||X.outlets>1)throw y(J,void 0,'root element; expected exactly one empty element with id="root"');const q=X.roots[0].sourceCodeLocation;if(X.code.slice(q.startTag.endOffset,q.endTag.startOffset).replace("\x3c!--ssr-outlet--\x3e","").trim())throw y(J,void 0,"non-empty root element");const K=[],U=[];if(h(N,e=>{if("CallExpression"===e.type){if("Identifier"===e.callee.type){const t=B.import(O,e.callee.name);"createBrowserRouter"===t?.exported&&["react-router","react-router-dom"].includes(t.source)&&K.push(e)}"MemberExpression"===e.callee.type&&"Identifier"===e.callee.property.type&&"render"===e.callee.property.name&&U.push(e)}}),1!==K.length)throw y(O,K[1],`createBrowserRouter calls (${K.length}); JSX BrowserRouter/Routes and router factories need manual migration`);const[_]=K;if(1!==_.arguments.length||1!==U.length)throw y(O,_,"router options or multiple React roots; migrate their settings manually");const[G]=U,H="MemberExpression"===G.callee.type?B.resolve({node:G.callee.object,file:O}).node:void 0;if("CallExpression"!==H?.type||"Identifier"!==H.callee.type||"react-dom/client"!==B.import(O,H.callee.name)?.source||"createRoot"!==B.import(O,H.callee.name)?.exported||1!==H.arguments.length||1!==G.arguments.length)throw y(O,H,"React mount; use createRoot(element).render(...) without custom options");const Q=$(G.arguments[0]);let Y=Q;const Z=[],ee=new Map;for(;"JSXElement"===Y?.type||"JSXFragment"===Y?.type;){if("JSXElement"===Y.type){const{name:e}=Y.openingElement,t="JSXMemberExpression"===e.type&&"JSXIdentifier"===e.object.type?e:void 0,r="JSXIdentifier"===e.type?e.name:"JSXIdentifier"===t?.object.type?t.object.name:void 0,o=N.program.body.find(e=>"ImportDeclaration"===e.type&&e.specifiers.some(e=>"ImportNamespaceSpecifier"===e.type&&e.local.name===r)),n=r?B.import(O,r)??(o?{declaration:o,source:o.source.value,exported:"*"}:void 0):void 0,i="react"===n?.source&&["StrictMode","Fragment"].includes(t?.property.name??n.exported);if(!t&&"RouterProvider"===n?.exported&&["react-router","react-router-dom"].includes(n.source))break;if(!r||!n||t&&!i||Y.openingElement.attributes.length)throw y(O,Y,"App wrapper; use an imported component without additional props");const s=ee.get(n.declaration)??new Set;s.add(r),ee.set(n.declaration,s),Z.push({tag:t?`${r}.${t.property.name}`:r,builtin:i})}else Z.push({tag:"",builtin:!0});const e=Y.children.filter(e=>"JSXText"!==e.type||e.value.trim());if(1!==e.length)throw y(O,Y,"App wrapper; expected exactly one RouterProvider child");[Y]=e}if("JSXElement"!==Y?.type)throw y(O,Q,"React root; expected an imported RouterProvider with optional App, StrictMode or Fragment wrappers");const[te]=Y.openingElement.attributes;if(1!==Y.openingElement.attributes.length||"JSXAttribute"!==te?.type||"router"!==te.name.name||"JSXExpressionContainer"!==te.value?.type||B.resolve({node:te.value.expression,file:O}).node!==_)throw y(O,Y,"RouterProvider props; use the detected router without additional props");let re=[...ee].map(([e,t])=>w(e,t,e.source.value,T,W)).join(z),oe=re,ne="",ie="",se=Z[0]?.tag??"App";if(1!==Z.length||Z[0].builtin){const e=new Set([...ee.values()].flatMap(e=>[...e])),t=$(_.arguments[0]);"Identifier"===t?.type&&e.add(t.name);const r=t=>{let r=t;for(;e.has(r);)r+="_";return e.add(r),r};se=r("App");const o=r("FC"),n=r("PropsWithChildren"),i=r("ssrCreateElement"),s=r("ssrFragment"),a=L?`import type { ${"FC"===o?o:`FC as ${o}`}, ${"PropsWithChildren"===n?n:`PropsWithChildren as ${n}`} } from ${T}react${T}${W}`:"",l=Z.length?Z:[{tag:"",builtin:!0}],p=l.reduceRight((e,{tag:t})=>`<${t}>${e}</${t}>`,"{children}"),c=l.reduceRight((e,{tag:t})=>`${i}(${t||s}, null, ${e})`,"children"),d=`const ${se}${L?`: ${o}<${n}>`:""} = ({ children }) => `;re=[re,a].filter(Boolean).join(z),oe=[re,`import { createElement as ${i}${l.some(({tag:e})=>!e)?`, Fragment as ${s}`:""} } from ${T}react${T}${W}`].filter(Boolean).join(z),ie=`${d}${c}${W}${z}`,ne=/\.[jt]sx$/.test(O)?`${d}${p}${W}${z}`:ie,/\.[jt]sx$/.test(O)||(re=oe)}const ae=B.resolve({node:_.arguments[0],file:O});let le=ae,pe=le.file,ce=pe!==O?x(B,pe).find(e=>e.value.node===le.node)?.name:void 0;if(r.routes){pe=B.filename(g(O,t.resolve(o,r.routes)),O);const e=x(B,pe);if(1!==e.length)throw y(pe,void 0,`exported route arrays (${e.length}); --routes needs one exported array`);le=e[0].value,ce=e[0].name}new f({}).parseValue(B,le,!0);const de=new Set;if(!ce){const r=B.read(le.file),o=v(le.node);let n=-1;for(;n!==o.size;){n=o.size;for(const e of r.ast.program.body){const t="ExportNamedDeclaration"===e.type?e.declaration:e,r="VariableDeclaration"===t?.type?t.declarations.flatMap(e=>"Identifier"===e.id.type?[e.id.name]:[]):"FunctionDeclaration"===t?.type&&t.id?[t.id.name]:[];if(t&&r.some(e=>o.has(e))){if(t.start<=le.node.start&&t.end>=le.node.end)continue;de.add(e),v(t).forEach(e=>o.add(e))}}}const i=[];for(const e of r.ast.program.body)if("ImportDeclaration"===e.type){const t=w(e,o,e.source.value,T,W);t&&i.push(t)}else de.has(e)&&i.push(r.code.slice(e.start,e.end));const s=t.extname(le.file);if(pe=t.resolve(t.dirname(le.file),`routes.ssr${s}`),e.existsSync(pe))throw y(pe,void 0,"existing extracted routes file");i.push(`export default ${r.code.slice(le.node.start,le.node.end)}${L?" satisfies import('react-router').RouteObject[]":""}${W}`),I(pe,`${i.join(z+z)}${z}`),ce="default"}for(const e of N.program.body){if("VariableDeclaration"===e.type&&1!==e.declarations.length)throw y(O,e,"multiple bootstrap declarators; put each declaration on its own statement");if("ImportDeclaration"!==e.type&&!de.has(e)&&![_,H,G,...ae.file===O?[ae.node]:[]].some(t=>t.start>=e.start&&t.end<=e.end))throw y(O,e,"additional browser startup statement; move it to a shared wrapper or migrate manually")}const me=$(_.arguments[0]),fe="Identifier"===me?.type?B.import(O,me.name):void 0,ue=fe&&le.node===ae.node,ye=ue&&"Identifier"===me?.type?me.name:"default"===ce?"routes":ce,he=ue?w(fe.declaration,new Set([ye]),fe.source,T,W):`import ${"default"===ce?ye:`{ ${ce} }`} from ${T}${g(O,pe).replace(/\.[cm]?[jt]sx?$/,"")}${T}${W}`,$e=N.program.body.filter(e=>"ImportDeclaration"===e.type&&!e.specifiers.length).map(e=>P.slice(e.start,e.end));I(O,[`import entryClient from ${T}${m}/browser/entry${T}${W}`,re,he,...$e,"",...ne?[ne]:[],`void entryClient(${se}, ${ye})${W}`,""].join(z)),I(k,[`import entryServer from ${T}${m}/adapters/express/entry${T}${W}`,oe,he,"",...ie?[ie]:[],`export default entryServer(${se}, ${ye})${W}`,""].join(z));const ge=[],ve=[`clientFile: ${j}${t.relative(b.viteRoot,O).split(t.sep).join("/")}${j}`,`serverFile: ${j}${t.relative(b.viteRoot,k).split(t.sep).join("/")}${j}`];e.existsSync(t.join(o,"tsconfig.json"))||ve.push("tsconfigAliases: false");const we=`SsrBoost({ ${ve.join(", ")} })`;if(b.plugin)throw y(b.file,b.plugin,"existing SsrBoost plugin with a SPA browser entry; finish configuration manually");if("ArrayExpression"===b.plugins?.type)ge.push({start:b.plugins.start+1,end:b.plugins.start+1,text:`${we}${b.plugins.elements.length?", ":""}`});else{if(b.plugins)throw y(b.file,b.plugins,"Vite plugins; use an array literal");ge.push({start:b.node.start+1,end:b.node.start+1,text:`${S} plugins: [${we}],`})}if(v(b.ast).has("SsrBoost"))throw y(b.file,void 0,"existing SsrBoost binding; rename it before automatic migration");I(b.file,`import SsrBoost from ${j}${m}/plugin${j}${E}${S}${p(b.code,ge)}`),X.outlets||I(J,p(X.code,[{start:q.startTag.endOffset,end:q.startTag.endOffset,text:"\x3c!--ssr-outlet--\x3e"}]));const xe=t.join(o,"package.json"),be=e.readFileSync(xe,"utf8"),Se=c(xe),je={...Se.scripts,[Se.scripts&&Object.hasOwn(Se.scripts,"dev")?"dev":"develop"]:"ssr-boost dev",build:"ssr-boost build","start:ssr":"ssr-boost start"};"vite preview"===Se.scripts?.preview&&(je.preview="ssr-boost preview");const Ee=i(be),Re=d().version,Ie={...Se.dependencies,[m]:Se.dependencies?.[m]??Se.devDependencies?.[m]??`^${Re}`};return I(xe,`${JSON.stringify({...Se,scripts:je,dependencies:Ie},null,Ee.indent).replace(/\n/g,Ee.newline)}${be.endsWith("\n")?Ee.newline:""}`),R.sort((e,t)=>e.file.localeCompare(t.file))},S=(n={})=>{try{if(n.apply&&n.dryRun)throw new Error("Choose either --dry-run or --apply.");const o=b(n);if(!o.length)return void console.info("No changes: SSR is already initialized. Run ssr-boost doctor.");for(const e of o)console.info(r(e.before?`a/${e.file}`:"/dev/null",`b/${e.file}`,e.before,e.after));if(n.apply)for(const r of o)e.writeFileSync(t.resolve(n.root??process.cwd(),r.file),r.after);console.info(n.apply?`Applied ${o.length} file changes.`:"Dry run: no files written. Use --apply to write these changes."),console.info("Next: npm install; then npx ssr-boost doctor.")}catch(e){console.error(`${e.message}\nManual migration: ${o}`),process.exitCode=1}};export{S as default,b as planInit};
2
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sources":["../../src/cli/init.ts"],"sourcesContent":[null],"names":["relativeImport","from","to","relative","path","dirname","split","sep","join","startsWith","namesIn","node","names","Set","walk","child","type","add","name","importText","source","quote","semicolon","specifiers","filter","specifier","has","local","defaults","map","namespaces","named","flatMap","imported","value","importKind","bindings","length","arrayExports","sources","file","read","ast","program","body","push","declaration","declarations","id","exported","planInit","options","root","resolve","process","cwd","config","readConfig","newline","format","code","changes","after","before","fs","existsSync","readFileSync","base","objectProperty","stringValue","sourceError","properties","some","property","build","rollup","undefined","option","indexFile","viteRoot","html","readHtml","entries","attribute","src","test","detectedEntry","replace","entry","SourceFiles","aliases","entryFormat","q","end","nl","isTS","server","PLUGIN_NAME","plugin","outlets","roots","sourceCodeLocation","endTag","rootLocation","slice","startTag","endOffset","startOffset","trim","calls","renders","callee","import","includes","call","arguments","render","rootCall","object","rendered","unwrap","provider","wrappers","wrapperImports","Map","openingElement","member","namespace","find","binding","isBuiltin","attributes","get","set","tag","builtin","children","routerAttribute","expression","appImport","serverAppImport","appDeclaration","serverAppDeclaration","appName","reserved","values","argument","unique","result","fc","props","createElement","fragment","typeImport","tree","jsx","reduceRight","definition","Boolean","originalRoutes","routeValue","routeModule","routeExport","item","routes","filename","exports","ParseRoutes","parseValue","moved","previousSize","size","statement","declared","start","forEach","pieces","text","extension","extname","routeArgument","routeBinding","shouldKeepRouteImport","routeName","routeImport","sideEffects","edits","pluginOptions","pluginCall","plugins","elements","editText","packageFile","packageCode","pkg","readPackage","scripts","Object","hasOwn","preview","packageFormat","version","libraryPackage","dependencies","devDependencies","JSON","stringify","indent","endsWith","sort","left","right","localeCompare","runInit","apply","dryRun","Error","console","info","change","createTwoFilesPatch","writeFileSync","error","message","MANUAL_GUIDE","exitCode"],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { Node, ObjectExpression } from '@babel/types';
2
+ import type { DefaultTreeAdapterTypes } from 'parse5';
3
+ import type { Alias } from 'vite';
4
+ import SourceFiles from '../services/source-files.js';
5
+ export declare const MANUAL_GUIDE = "https://lomray-software.github.io/vite-ssr-boost/guide/migrate-existing-spa";
6
+ export interface IPackage {
7
+ version?: string;
8
+ engines?: {
9
+ node?: string;
10
+ };
11
+ scripts?: Record<string, string>;
12
+ dependencies?: Record<string, string>;
13
+ devDependencies?: Record<string, string>;
14
+ peerDependencies?: Record<string, string>;
15
+ }
16
+ export interface IEdit {
17
+ start: number;
18
+ end: number;
19
+ text: string;
20
+ }
21
+ /** Apply non-overlapping source edits, preserving everything around them. */
22
+ export declare const editText: (code: string, edits: IEdit[]) => string;
23
+ /** Infer the small formatting choices needed for inserted code. */
24
+ export declare const format: (code: string) => {
25
+ newline: string;
26
+ quote: string;
27
+ semicolon: string;
28
+ indent: string;
29
+ };
30
+ export declare const readPackage: (file: string) => IPackage;
31
+ /** Works in the source checkout and in the published cli/ directory. */
32
+ export declare const libraryPackage: () => IPackage;
33
+ export declare const objectProperty: (object: ObjectExpression, name: string) => Node | undefined;
34
+ export declare const stringValue: (node?: Node) => string | undefined;
35
+ /** Read a conventional Vite config without evaluating plugins or env files. */
36
+ export declare const readConfig: (root: string) => {
37
+ file: string;
38
+ code: string;
39
+ ast: import("@babel/types").File;
40
+ node: ObjectExpression;
41
+ viteRoot: string;
42
+ plugins: Node | undefined;
43
+ plugin: import("@babel/types").SpreadElement | import("@babel/types").Expression | null | undefined;
44
+ option: (name: string) => Node | undefined;
45
+ aliases: Alias[];
46
+ sources: SourceFiles;
47
+ };
48
+ /** HTML locations come from an HTML parser, so comments and attribute order are harmless. */
49
+ export declare const readHtml: (file: string) => {
50
+ code: string;
51
+ entries: DefaultTreeAdapterTypes.Element[];
52
+ roots: DefaultTreeAdapterTypes.Element[];
53
+ outlets: number;
54
+ attribute: (node: DefaultTreeAdapterTypes.Element, name: string) => string | undefined;
55
+ };
56
+ export type TProjectConfig = ReturnType<typeof readConfig>;
package/cli/project.js ADDED
@@ -0,0 +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 r,{sourceError as n,unwrap as a,propertyName as l}from"../services/source-files.js";const p="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=>l(e)===t);return"ObjectProperty"===o?.type?a(o.value):void 0},g=e=>"StringLiteral"===e?.type?e.value:void 0,y=s=>{const p=["ts","js","mts","mjs","cts","cjs"].map(e=>t.join(s,`vite.config.${e}`)).filter(t=>e.existsSync(t));if(1!==p.length)throw n(t.join(s,"vite.config.*"),void 0,`Vite configs (${p.length}); expected exactly one`);const[c]=p,f=new r,{code:m,ast:u}=f.read(c);let{node:y}=f.exported(c);if("CallExpression"===y.type&&"Identifier"===y.callee.type&&"defineConfig"===f.import(c,y.callee.name)?.exported&&(y=a(y.arguments[0])),"ArrowFunctionExpression"===y?.type&&(y=a(y.body)),"ObjectExpression"!==y?.type)throw n(c,y,"Vite configuration; use defineConfig({ ... })");const v=d(y,"root");if(v&&"StringLiteral"!==v.type)throw n(c,v,"Vite root; use a string literal");const x=t.resolve(s,g(v)??"."),j=d(y,"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 n(c,b,"SsrBoost options; use an object literal");const E=e=>"ObjectExpression"===b?.type?d(b,e):void 0,S=[],w=d(y,"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=l(e);let i=g(a(e.value));const r=a(e.value),n="CallExpression"===r?.type?r.arguments[0]:void 0;"NewExpression"===n?.type&&"Identifier"===n.callee.type&&"URL"===n.callee.name&&"StringLiteral"===n.arguments[0]?.type&&(i=t.resolve(s,n.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")),r=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(r,o[0].replace(/\/\*$/,""))})}return{file:c,code:m,ast:u,node:y,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}),r=[],n=o.split("\x3c!--ssr-outlet--\x3e").length-1,a=e=>{"tagName"in e&&r.push(e),"childNodes"in e&&e.childNodes.forEach(a)};a(i);const l=(e,t)=>e.attrs.find(e=>e.name===t)?.value;return{code:o,entries:r.filter(e=>"script"===e.tagName&&"module"===l(e,"type")),roots:r.filter(e=>"root"===l(e,"id")),outlets:n,attribute:l}};export{p as MANUAL_GUIDE,c as editText,f as format,u as libraryPackage,d as objectProperty,y as readConfig,v as readHtml,m as readPackage,g as stringValue};
2
+ //# sourceMappingURL=project.js.map
@@ -0,0 +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,GAchC,GAXgB,mBAAdwB,EAAKL,MACgB,eAArBK,EAAKgB,OAAOrB,MACyC,iBAArDgB,EAAQM,OAAOzC,EAAMwB,EAAKgB,OAAO3B,OAAO0B,WAExCf,EAAOJ,EAAOI,EAAKkB,UAAU,KAGZ,4BAAflB,GAAML,OACRK,EAAOJ,EAAOI,EAAKmB,OAGF,qBAAfnB,GAAML,KACR,MAAMe,EAAYlC,EAAMwB,EAAM,iDAGhC,MAAMoB,EAAWjC,EAAea,EAAM,QAEtC,GAAIoB,GAA8B,kBAAlBA,EAASzB,KACvB,MAAMe,EAAYlC,EAAM4C,EAAU,mCAGpC,MAAMC,EAAWf,EAAKgB,QAAQpB,EAAMH,EAAYqB,IAAa,KACvDG,EAAUpC,EAAea,EAAM,WAC/BwB,EACc,oBAAlBD,GAAS5B,KACL4B,EAAQE,SAASjC,KAAMkC,GACC,mBAAlBA,GAAS/B,MAAqD,eAAxB+B,EAAQV,OAAOrB,MAKvDgB,EAAQM,OAAOzC,EAAMkD,EAAQV,OAAO3B,OAAOsC,OAAOC,QAAQ,QAAS,MACnE,GAAGC,iBAGP/B,EACAgC,EAA2B,mBAAjBN,GAAQ7B,KAA4BC,EAAO4B,EAAON,UAAU,SAAMpB,EAElF,GAAIgC,GAA4B,qBAAjBA,EAAQnC,KACrB,MAAMe,EAAYlC,EAAMsD,EAAS,2CAGnC,MAAMC,EAAU1C,GACI,qBAAlByC,GAASnC,KAA8BR,EAAe2C,EAASzC,QAAQS,EACnEkC,EAAmB,GACnBV,EAAUnC,EAAea,EAAM,WAC/BiC,EAA0B,qBAAlBX,GAAS3B,KAA8BR,EAAemC,EAAS,cAAWxB,EAExF,GAAoB,qBAAhBmC,GAAOtC,KACT,IAAK,MAAML,KAAY2C,EAAM1C,WAAY,CACvC,GAAsB,mBAAlBD,EAASK,KACX,SAGF,MAAMH,EAAOE,EAAaJ,GAC1B,IAAI4C,EAAcnC,EAAYH,EAAON,EAASO,QAC9C,MAAMA,EAAQD,EAAON,EAASO,OAGxBb,EAAsB,mBAAhBa,GAAOF,KAA4BE,EAAMqB,UAAU,QAAKpB,EAGpD,kBAAdd,GAAKW,MACe,eAApBX,EAAIgC,OAAOrB,MACS,QAApBX,EAAIgC,OAAO3B,MACgB,kBAA3BL,EAAIkC,UAAU,IAAIvB,OAElBuC,EAAc5B,EAAKgB,QAAQpB,EAAMlB,EAAIkC,UAAU,GAAGrB,QAGhDL,GAAQ0C,GACVF,EAAQG,KAAK,CAAE3C,OAAM0C,eAEzB,CAGF,MAAME,EAAW9B,EAAKC,KAAKL,EAAM,iBAEjC,GACEvB,EAAGM,WAAWmD,KAEwB,mBAApCL,EAAO,oBAAoBpC,OAC0B,IAArD0C,QAAQC,IAAIP,EAAO,mBAAqB,UAE1C,CACA,MAAMQ,EAAKC,EAAM9D,MAEdC,EAAGC,aAAawD,EAAU,SACvBK,EAAOnC,EAAKgB,QAAQpB,EAAMqC,EAAGG,iBAAiBC,SAAWrC,EAAKsC,SAAS1C,EAAMmB,IAEnF,IAAK,MAAO7B,EAAMqD,KAAiBC,OAAOC,QAAQR,EAAGG,iBAAiBM,OAAS,CAAA,GAC7EhB,EAAQG,KAAK,CACX3C,KAAMA,EAAKoC,QAAQ,QAAS,IAC5BM,YAAa5B,EAAKgB,QAAQmB,EAAMI,EAAa,GAAGjB,QAAQ,QAAS,MAGvE,CAEA,MAAO,CAAEpD,OAAMrB,OAAM0D,MAAKb,OAAMqB,WAAUE,UAASC,SAAQO,SAAQC,UAASrB,YAIjEsC,EACXzE,IAQA,MAAMrB,EAAOwB,EAAGC,aAAaJ,EAAM,QAC7B0E,EAAWC,EAAUhG,EAAM,CAAEiG,wBAAwB,IACrD3B,EAA8C,GAC9C4B,EAAUlG,EAAKmG,MAAM,2BAAqB7C,OAAS,EAEnD8C,EAASvD,IACT,YAAaA,GACfyB,EAASU,KAAKnC,GAGZ,eAAgBA,GAClBA,EAAKwD,WAAWC,QAAQF,IAI5BA,EAAML,GAEN,MAAMQ,EAAY,CAAC1D,EAAuCX,IACxDW,EAAK2D,MAAMnE,KAAMoE,GAASA,EAAKvE,OAASA,IAAOQ,MAMjD,MAAO,CAAE1C,OAAM4F,QALCtB,EAASjB,OACtBR,GAA0B,WAAjBA,EAAK6D,SAAoD,WAA5BH,EAAU1D,EAAM,SAIjC8D,MAFVrC,EAASjB,OAAQR,GAAmC,SAA1B0D,EAAU1D,EAAM,OAEzBqD,UAASK"}
package/cli.js CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import{readFileSync as e}from"fs";import o from"chalk";import{Command as i,Option as n}from"commander";import t from"./cli/build.js";import r from"./cli/helpers/keyboard-input.js";import s from"./cli/helpers/vite-reset-cache.js";import d from"./cli/run-amplify-build.js";import a from"./cli/run-dev.js";import c from"./cli/run-docker-build.js";import l from"./cli/run-prod.js";import p from"./cli/run-vercel-build.js";import m from"./constants/cli-actions.js";import f from"./constants/cli-context.js";import u from"./constants/cli-name.js";const{description:O,version:w}=JSON.parse(e(new URL("./package.json",import.meta.url),"utf8")),v=()=>{process.stdin.isTTY&&(process.stdin.setRawMode(!0),process.stdin.on("data",r).setEncoding("utf8").resume())},y=new i;y.name(u).description(O).version(w).hook("preAction",(e,o)=>{global.viteBoostAction=o.name()});const g=new n("--host","Ability to access the local instance on other devices under the same network.").default(!1),b=new n("--focus-only [focusOnly]","Build or Start only specified part of app.").default("app").choices(["all","app","client","server","entrypoint"]),h=new n("--port [port]","Server port.").default(3e3),k=new n("--mode [mode]","Env mode.").env("VITE_ENV_MODE").default("production"),P=new n("--build-dir [buildDir]","Build directory output.");y.command(m.dev).description("Run development server.").addOption(g).addOption(h).addOption(new n("--reset-cache","Clear vite cache before run.").default(!1)).addOption(new n("--mode [mode]","Env mode.").env("VITE_ENV_MODE").default("development")).addOption(new n("--entrypoint [entrypoint]","Run only entrypoint by name.")).action(async({host:e,port:i,resetCache:n,mode:t,entrypoint:r})=>{n&&await s();const d=async n=>{console.info(o.cyan("Starting the development server..."));const{server:s,config:d}=await a({version:w,isHost:e,isPrintInfo:n,port:i,mode:t,entrypointName:r});f.server=s,f.config=d};return f.reboot=d,v(),d()}),y.command(m.build).description("Create production build.").addOption(b).addOption(k).addOption(new n("--client-options [client-options]",'Pass vite build options for client. Example: --client-options="--ssrManifest"').env("VITE_BUILD_CLIENT_OPTIONS").default("")).addOption(new n("--server-options [server-options]","Pass vite build options for server.").env("VITE_BUILD_SERVER_OPTIONS").default("")).addOption(new n("--unlock-robots","Change general directive Disallow to Allow in robots.txt").default(!1)).addOption(new n("--eject","Produces entrypoint file to run app without cli").default(!1)).addOption(new n("--serverless","Produces entrypoint file to run app like serverless function").default(!1)).addOption(new n("--throw-warnings","The build will abort with an error if warnings occur in the process.").default(!1)).action(async({focusOnly:e,clientOptions:o,serverOptions:i,mode:n,unlockRobots:r,eject:s,serverless:d,throwWarnings:a})=>{await t({focusOnly:e,isUnlockRobots:r,isNoWarnings:a,isEject:s,isServerless:d,clientOptions:o,serverOptions:i,mode:n})}),y.command(m.start).description("Run production server.").addOption(g).addOption(h).addOption(b).addOption(P).addOption(new n("--module-preload","Add module preload scripts to server output.").default(!1)).action(({host:e,port:o,focusOnly:i,modulePreload:n,buildDir:t})=>{const r=async r=>{const{server:s,config:d}=await l({version:w,isHost:e,isPrintInfo:r,port:o,focusOnly:i,modulePreload:n,buildDir:t});f.server=s,f.config=d};return f.reboot=r,v(),r()}),y.command(m.preview).description("Build and preview production.").addOption(b).addOption(g).addOption(h).addOption(k).addOption(P).action(async({host:e,port:i,focusOnly:n,mode:r,buildDir:s})=>{global.viteBoostStartTime=performance.now();const d=async t=>{const{server:r,config:d}=await l({version:w,isHost:e,isPrintInfo:t,port:i,focusOnly:n,buildDir:s});r.on("listening",()=>{setTimeout(()=>{d.getLogger().info(o.yellow("\n Running preview mode... \n"))},0)}),f.server=r,f.config=d};f.reboot=d,v();await t({mode:r,isWatch:!0,focusOnly:n,clientOptions:"-w",serverOptions:"-w",onFinish:()=>{d()}})}),y.command(m.buildDocker).description("Create docker image with production build.").requiredOption("--image-name <image-name>","Docker image name.").addOption(new n("--docker-options [docker-options]","Extra docker options which pass to docker build command.")).addOption(new n("--docker-file [docker-file]","Name of the Dockerfile (Default is PLUGIN_PATH/workflow/Dockerfile).")).addOption(b).addOption(k).action(async({imageName:e,dockerOptions:o,dockerFile:i,focusOnly:n,mode:t})=>{await c({imageName:e,dockerOptions:o,dockerFile:i,focusOnly:n,mode:t})}),y.command(m.buildAmplify).description("Create AWS Amplify production build.").addOption(new n("--manifest-file [manifest-file]","Path to the Amplify manifest file (Default is PLUGIN_PATH/workflow/amplify-manifest.json).")).addOption(new n("--is-optimize","Optimize node_modules folder.").default(!1)).addOption(k).action(async({manifestFile:e,mode:o,isOptimize:i})=>{await d({manifestFile:e,mode:o,isOptimize:i})}),y.command(m.buildVercel).description("Create Vercel serverless production build.").addOption(new n("--config-file [config-file]","Path to the Vercel config.json file (Default is PLUGIN_PATH/workflow/vercel.config.json).")).addOption(new n("--config-vc-file [config-vc-file]","Path to the Vercel vc-config.json file (Default is PLUGIN_PATH/workflow/vercel.vc-config.json).")).addOption(new n("--is-optimize","Optimize node_modules folder.").default(!1)).addOption(k).action(async({configFile:e,configVcFile:o,mode:i,isOptimize:n})=>{await p({configFile:e,configVcFile:o,mode:i,isOptimize:n})}),y.parse();
2
+ import{readFileSync as o}from"fs";import e from"chalk";import{Command as i,Option as t}from"commander";import n from"./cli/build.js";import r from"./cli/doctor.js";import d from"./cli/helpers/keyboard-input.js";import s from"./cli/helpers/vite-reset-cache.js";import a from"./cli/init.js";import c from"./cli/run-amplify-build.js";import l from"./cli/run-dev.js";import p from"./cli/run-docker-build.js";import m from"./cli/run-prod.js";import f from"./cli/run-vercel-build.js";import u from"./constants/cli-actions.js";import O from"./constants/cli-context.js";import w from"./constants/cli-name.js";const{description:v,version:y}=JSON.parse(o(new URL("./package.json",import.meta.url),"utf8")),g=()=>{process.stdin.isTTY&&(process.stdin.setRawMode(!0),process.stdin.on("data",d).setEncoding("utf8").resume())},h=new i;h.name(w).description(v).version(y).hook("preAction",(o,e)=>{global.viteBoostAction=e.name()});const b=new t("--host","Ability to access the local instance on other devices under the same network.").default(!1),k=new t("--focus-only [focusOnly]","Build or Start only specified part of app.").default("app").choices(["all","app","client","server","entrypoint"]),j=new t("--port [port]","Server port.").default(3e3),P=new t("--mode [mode]","Env mode.").env("VITE_ENV_MODE").default("production"),D=new t("--build-dir [buildDir]","Build directory output.");h.command(u.dev).description("Run development server.").addOption(b).addOption(j).addOption(new t("--reset-cache","Clear vite cache before run.").default(!1)).addOption(new t("--mode [mode]","Env mode.").env("VITE_ENV_MODE").default("development")).addOption(new t("--entrypoint [entrypoint]","Run only entrypoint by name.")).action(async({host:o,port:i,resetCache:t,mode:n,entrypoint:r})=>{t&&await s();const d=async t=>{console.info(e.cyan("Starting the development server..."));const{server:d,config:s}=await l({version:y,isHost:o,isPrintInfo:t,port:i,mode:n,entrypointName:r});O.server=d,O.config=s};return O.reboot=d,g(),d()}),h.command(u.build).description("Create production build.").addOption(k).addOption(P).addOption(new t("--client-options [client-options]",'Pass vite build options for client. Example: --client-options="--ssrManifest"').env("VITE_BUILD_CLIENT_OPTIONS").default("")).addOption(new t("--server-options [server-options]","Pass vite build options for server.").env("VITE_BUILD_SERVER_OPTIONS").default("")).addOption(new t("--unlock-robots","Change general directive Disallow to Allow in robots.txt").default(!1)).addOption(new t("--eject","Produces entrypoint file to run app without cli").default(!1)).addOption(new t("--serverless","Produces entrypoint file to run app like serverless function").default(!1)).addOption(new t("--throw-warnings","The build will abort with an error if warnings occur in the process.").default(!1)).action(async({focusOnly:o,clientOptions:e,serverOptions:i,mode:t,unlockRobots:r,eject:d,serverless:s,throwWarnings:a})=>{await n({focusOnly:o,isUnlockRobots:r,isNoWarnings:a,isEject:d,isServerless:s,clientOptions:e,serverOptions:i,mode:t})}),h.command(u.start).description("Run production server.").addOption(b).addOption(j).addOption(k).addOption(D).addOption(new t("--module-preload","Add module preload scripts to server output.").default(!1)).action(({host:o,port:e,focusOnly:i,modulePreload:t,buildDir:n})=>{const r=async r=>{const{server:d,config:s}=await m({version:y,isHost:o,isPrintInfo:r,port:e,focusOnly:i,modulePreload:t,buildDir:n});O.server=d,O.config=s};return O.reboot=r,g(),r()}),h.command(u.preview).description("Build and preview production.").addOption(k).addOption(b).addOption(j).addOption(P).addOption(D).action(async({host:o,port:i,focusOnly:t,mode:r,buildDir:d})=>{global.viteBoostStartTime=performance.now();const s=async n=>{const{server:r,config:s}=await m({version:y,isHost:o,isPrintInfo:n,port:i,focusOnly:t,buildDir:d});r.on("listening",()=>{setTimeout(()=>{s.getLogger().info(e.yellow("\n Running preview mode... \n"))},0)}),O.server=r,O.config=s};O.reboot=s,g();await n({mode:r,isWatch:!0,focusOnly:t,clientOptions:"-w",serverOptions:"-w",onFinish:()=>{s()}})}),h.command(u.buildDocker).description("Create docker image with production build.").requiredOption("--image-name <image-name>","Docker image name.").addOption(new t("--docker-options [docker-options]","Extra docker options which pass to docker build command.")).addOption(new t("--docker-file [docker-file]","Name of the Dockerfile (Default is PLUGIN_PATH/workflow/Dockerfile).")).addOption(k).addOption(P).action(async({imageName:o,dockerOptions:e,dockerFile:i,focusOnly:t,mode:n})=>{await p({imageName:o,dockerOptions:e,dockerFile:i,focusOnly:t,mode:n})}),h.command(u.buildAmplify).description("Create AWS Amplify production build.").addOption(new t("--manifest-file [manifest-file]","Path to the Amplify manifest file (Default is PLUGIN_PATH/workflow/amplify-manifest.json).")).addOption(new t("--is-optimize","Optimize node_modules folder.").default(!1)).addOption(P).action(async({manifestFile:o,mode:e,isOptimize:i})=>{await c({manifestFile:o,mode:e,isOptimize:i})}),h.command(u.buildVercel).description("Create Vercel serverless production build.").addOption(new t("--config-file [config-file]","Path to the Vercel config.json file (Default is PLUGIN_PATH/workflow/vercel.config.json).")).addOption(new t("--config-vc-file [config-vc-file]","Path to the Vercel vc-config.json file (Default is PLUGIN_PATH/workflow/vercel.vc-config.json).")).addOption(new t("--is-optimize","Optimize node_modules folder.").default(!1)).addOption(P).action(async({configFile:o,configVcFile:e,mode:i,isOptimize:t})=>{await f({configFile:o,configVcFile:e,mode:i,isOptimize:t})}),h.command("doctor").description("Inspect SSR setup and report actionable checks.").option("--json","Print machine-readable JSON.").option("--root <dir>","Project directory.").option("--bundle <file>","Write an allowlisted support bundle JSON.").action(r),h.command("init").description("Add SSR to an existing Vite + React Router app (dry run by default).").option("--dry-run","Print every change without writing files.").option("--apply","Write the proposed changes.").option("--root <dir>","Project directory.").option("--entry <file>","Browser entry relative to the project directory.").option("--routes <file>","Module exporting the route array.").action(a),h.parse();
3
3
  //# sourceMappingURL=cli.js.map
package/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sources":["../src/cli.ts"],"sourcesContent":[null],"names":["description","version","JSON","parse","readFileSync","URL","url","enableShortcuts","process","stdin","isTTY","setRawMode","on","onKeyPress","setEncoding","resume","program","Command","name","cliName","hook","_","actionCommand","global","viteBoostAction","hostOption","Option","default","focusOnlyOption","choices","portOption","envModeOption","env","buildDirOption","command","CliActions","dev","addOption","action","async","host","port","resetCache","mode","entrypoint","viteResetCache","isPrintInfo","console","info","chalk","cyan","server","config","runDev","isHost","entrypointName","cliContext","reboot","build","focusOnly","clientOptions","serverOptions","unlockRobots","eject","serverless","throwWarnings","runBuild","isUnlockRobots","isNoWarnings","isEject","isServerless","start","modulePreload","buildDir","runProd","preview","viteBoostStartTime","performance","now","setTimeout","getLogger","yellow","isWatch","onFinish","buildDocker","requiredOption","imageName","dockerOptions","dockerFile","runDockerBuild","buildAmplify","manifestFile","isOptimize","runAmplifyBuild","buildVercel","configFile","configVcFile","runVercelBuild"],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sources":["../src/cli.ts"],"sourcesContent":[null],"names":["description","version","JSON","parse","readFileSync","URL","url","enableShortcuts","process","stdin","isTTY","setRawMode","on","onKeyPress","setEncoding","resume","program","Command","name","cliName","hook","_","actionCommand","global","viteBoostAction","hostOption","Option","default","focusOnlyOption","choices","portOption","envModeOption","env","buildDirOption","command","CliActions","dev","addOption","action","async","host","port","resetCache","mode","entrypoint","viteResetCache","isPrintInfo","console","info","chalk","cyan","server","config","runDev","isHost","entrypointName","cliContext","reboot","build","focusOnly","clientOptions","serverOptions","unlockRobots","eject","serverless","throwWarnings","runBuild","isUnlockRobots","isNoWarnings","isEject","isServerless","start","modulePreload","buildDir","runProd","preview","viteBoostStartTime","performance","now","setTimeout","getLogger","yellow","isWatch","onFinish","buildDocker","requiredOption","imageName","dockerOptions","dockerFile","runDockerBuild","buildAmplify","manifestFile","isOptimize","runAmplifyBuild","buildVercel","configFile","configVcFile","runVercelBuild","option","runDoctor","runInit"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const t=t=>/{.*path:.*(lazy:.+import|Component:|element:)|{.*(lazy:.+import|Component:|element:).*path:/s.test(t);export{t as default};
1
+ const s=s=>/(?:\blazy|['"]lazy['"]\s*\]?)\s*:\s*(?:async\s*)?(?:function|\([^)]*\)\s*=>)/s.test(s)||/{.*(?:path|index)\s*:.*(?:Component|element)\s*:|{.*(?:Component|element)\s*:.*(?:path|index)\s*:/s.test(s);export{s as default};
2
2
  //# sourceMappingURL=is-route-file.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"is-route-file.js","sources":["../../src/helpers/is-route-file.ts"],"sourcesContent":[null],"names":["isRoutesFile","code","test"],"mappings":"AAGA,MAAMA,EAAgBC,GACpB,+FAA+FC,KAC7FD"}
1
+ {"version":3,"file":"is-route-file.js","sources":["../../src/helpers/is-route-file.ts"],"sourcesContent":[null],"names":["isRoutesFile","code","test"],"mappings":"AAGA,MAAMA,EAAgBC,GACpB,gFAAgFC,KAAKD,IACrF,qGAAqGC,KACnGD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lomray/vite-ssr-boost",
3
- "version": "8.3.0-beta.1",
3
+ "version": "8.3.0-beta.2",
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": {
@@ -75,8 +75,11 @@
75
75
  "chalk": "^6.0.0",
76
76
  "commander": "^15.0.0",
77
77
  "devalue": "^5.9.2",
78
+ "diff": "^9.0.0",
78
79
  "hoist-non-react-statics": "^3.3.2",
79
- "json5": "^2.2.3"
80
+ "json5": "^2.2.3",
81
+ "parse5": "^8.0.1",
82
+ "semver": "^7.8.5"
80
83
  },
81
84
  "optionalDependencies": {
82
85
  "compression": "^1.8.1",
@@ -104,6 +107,7 @@
104
107
  "@types/node": "^22.20.1",
105
108
  "@types/react": "^19.2.18",
106
109
  "@types/react-dom": "^19.2.7",
110
+ "@types/semver": "^7.8.0",
107
111
  "@types/serve-static": "^2.2.0",
108
112
  "@types/sinon": "^22.0.0",
109
113
  "@vitest/coverage-v8": "^5.0.0",
@@ -1,2 +1,2 @@
1
- import{extname as e}from"node:path";import s from"../constants/plugin-name.js";import o from"../helpers/is-route-file.js";import r from"../services/parse-routes.js";function t(t={}){const{routesPath:n,isSSR:i=!1,isBuild:m=!1}=t;return{name:`${s}-normalize-route`,enforce:"pre",transform(s,t){const[u]=e(t).split("?"),p=!n||t.includes(n);if(!t.includes("node_modules")&&[".js",".mjs",".ts",".tsx"].includes(u)&&p&&o(s))return{code:r.handleRoutes(s,i&&!m),map:{mappings:""}}}}}export{t as default};
1
+ import{extname as s}from"node:path";import e from"../constants/plugin-name.js";import o from"../helpers/is-route-file.js";import r from"../services/parse-routes.js";function t(t={}){const{routesPath:n,isSSR:i=!1,isBuild:m=!1}=t;return{name:`${e}-normalize-route`,enforce:"pre",transform(e,t){const[u]=s(t).split("?"),p=!n||t.includes(n);if(!t.includes("node_modules")&&[".js",".jsx",".mjs",".ts",".tsx",".mts"].includes(u)&&p&&o(e))return{code:r.handleRoutes(e,i&&!m,t),map:{mappings:""}}}}}export{t as default};
2
2
  //# sourceMappingURL=normalize-route.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"normalize-route.js","sources":["../../src/plugins/normalize-route.ts"],"sourcesContent":[null],"names":["ViteNormalizeRouterPlugin","options","routesPath","isSSR","isBuild","name","PLUGIN_NAME","enforce","transform","code","id","extName","extname","split","isRoutesPath","includes","isRoutesFile","ParseRoutes","handleRoutes","map","mappings"],"mappings":"qKAoBA,SAASA,EAA0BC,EAA0B,IAC3D,MAAMC,WAAEA,EAAUC,MAAEA,GAAQ,EAAKC,QAAEA,GAAU,GAAUH,EAEvD,MAAO,CACLI,KAAM,GAAGC,oBACTC,QAAS,MACT,SAAAC,CAAUC,EAAMC,GACd,MAAOC,GAAWC,EAAQF,GAAIG,MAAM,KAC9BC,GAAgBZ,GAAcQ,EAAGK,SAASb,GAEhD,IACEQ,EAAGK,SAAS,iBACX,CAAC,MAAO,OAAQ,MAAO,QAAQA,SAASJ,IACxCG,GACAE,EAAaP,GAKhB,MAAO,CACLA,KAAMQ,EAAYC,aAChBT,EAEAN,IAAUC,GAEZe,IAAK,CAAEC,SAAU,IAErB,EAEJ"}
1
+ {"version":3,"file":"normalize-route.js","sources":["../../src/plugins/normalize-route.ts"],"sourcesContent":[null],"names":["ViteNormalizeRouterPlugin","options","routesPath","isSSR","isBuild","name","PLUGIN_NAME","enforce","transform","code","id","extName","extname","split","isRoutesPath","includes","isRoutesFile","ParseRoutes","handleRoutes","map","mappings"],"mappings":"qKAoBA,SAASA,EAA0BC,EAA0B,IAC3D,MAAMC,WAAEA,EAAUC,MAAEA,GAAQ,EAAKC,QAAEA,GAAU,GAAUH,EAEvD,MAAO,CACLI,KAAM,GAAGC,oBACTC,QAAS,MACT,SAAAC,CAAUC,EAAMC,GACd,MAAOC,GAAWC,EAAQF,GAAIG,MAAM,KAC9BC,GAAgBZ,GAAcQ,EAAGK,SAASb,GAEhD,IACEQ,EAAGK,SAAS,iBACX,CAAC,MAAO,OAAQ,OAAQ,MAAO,OAAQ,QAAQA,SAASJ,IACxDG,GACAE,EAAaP,GAKhB,MAAO,CACLA,KAAMQ,EAAYC,aAChBT,EAEAN,IAAUC,EACVM,GAEFS,IAAK,CAAEC,SAAU,IAErB,EAEJ"}
@@ -73,6 +73,7 @@ declare class Build {
73
73
  * Listener for preview has attached
74
74
  */
75
75
  protected hasPreviewModeExitListener: boolean;
76
+ protected diagnosticCodes: Set<string>;
76
77
  /**
77
78
  * @constructor
78
79
  */
package/services/build.js CHANGED
@@ -1,2 +1,2 @@
1
- import i from"node:child_process";import s from"node:fs";import t from"node:path";import e from"chalk";import{resolveConfig as o}from"vite";import r from"../cli/helpers/vite-reset-cache.js";import n from"../helpers/create-focus-only.js";import{createDevMarker as l}from"../helpers/dev-marker.js";import a from"../helpers/plugin-config.js";import u from"../helpers/process-stop.js";import c from"./server-config.js";import d from"./ssr-manifest.js";class h{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;constructor(i){this.params={...this.params,...i}}async makeConfig(){const{mode:i}=this.params;this.viteConfig=await o({},"build",i,"production"),this.pluginConfig=a(this.viteConfig),this.buildDir=t.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 t=new Promise((t,e)=>{i.on("exit",i=>{t(i)}),i.on("close",i=>{t(i)}),i.on("error",i=>{e(i)}),s&&i.stderr?.on("data",i=>{const s=Buffer.from(i).toString();(s.includes("warning")||s.includes("WARNING"))&&t(1)})});return i.stdout?.pipe(process.stdout),i.stderr?.pipe(process.stderr),{promise:t,command:i}}buildManifest(){console.info(e.blue("Building routes manifest file"));const i=c.init({isProd:this.isProd,mode:this.params.mode},{root:this.viteConfig.root,clientFile:this.pluginConfig.clientFile});d.get(i,{buildDir:this.viteConfig.build.outDir,viteAliases:this.viteConfig.resolve.alias,basename:this.viteConfig.base,renderBuiltUrl:this.viteConfig?.experimental?.renderBuiltUrl}).buildRoutesManifest()}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 t=s.readFileSync(i,{encoding:"utf-8"}).replace(/Disallow: \/$/m,"Allow: /");s.writeFileSync(i,t,{encoding:"utf-8"}),console.info(e.blue("\nrobots.txt unlocked."))}eject(){const i=`${this.buildDir}/server/start.js`;s.writeFileSync(i,"import runProd from '@lomray/vite-ssr-boost/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 onlyClient: ONLY_CLIENT === '1',\n });\n",{encoding:"utf-8"})}createServerless(){const i=`${this.buildDir}/server/serverless.js`;s.writeFileSync(i,"import runServerless from '@lomray/vite-ssr-boost/cli/run-serverless.js';\n\nexport default await runServerless({ version: process.env.VERSION || \"1.0.0\" });\n",{encoding:"utf-8"})}async spawnBuild(s,t,e={}){const{mode:o,isNoWarnings:r}=this.params,{focusOnly:l=this.params.focusOnly,shouldWait:a=!1,env:u={}}=e,c=o&&!t.includes("--mode")?`--mode ${o}`:"",d=this.promisifyProcess(i.spawn(`vite build ${t} ${c} --emptyOutDir`,{signal:this.abortController.signal,stdio:[process.stdin,"pipe","pipe"],shell:!0,env:{...process.env,...u,FORCE_COLOR:"2",SSR_BOOST_IS_SSR:n(l).isOnlyClient()?"0":"1",SSR_BOOST_ACTION:global.viteBoostAction}}),r);this.runningBuild.push({name:s,buildProcess:d}),a&&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 t=e=>{Buffer.from(e).toString().includes("built in")&&(s-=1,s||(this.runningBuild.forEach(({buildProcess:i})=>{i.command.stdout?.removeListener("data",t)}),l(this.isProd,this.viteConfig),i?.()))};this.runningBuild.forEach(({buildProcess:i})=>{i.command.stdout?.on("data",t)})}async build(){await this.makeConfig(),await r(),this.clearBuildFolder();const{clientOptions:i,serverOptions:s,onFinish:t,isWatch:e,focusOnly:o,isEject:a,isServerless:u,isUnlockRobots:c}=this.params,{outDir:d}=this.viteConfig.build,h=n(o);this.abortController=new AbortController,this.runningBuild=[],h.isClient()&&await this.spawnBuild("client",`${i} --outDir ${d}/client`,{shouldWait:!e}),h.isServer()&&(await this.spawnBuild("server",`${s} --outDir ${d}/server --ssr ${this.pluginConfig.serverFile}`,{shouldWait:!e}),e||(this.buildManifest(),a&&this.eject(),u&&this.createServerless()));const{entrypoint:p}=this.pluginConfig;if(p?.length&&h.isEntrypoint())for(const{name:i,type:s,serverFile:t,buildOptions:o=""}of p){const r=t&&"ssr"===s?`--ssr ${t}`:"";await this.spawnBuild(i,`${o} ${r} --outDir ${d}/${i}`,{shouldWait:!e,focusOnly:"ssr"===s?"server":"client",env:{SSR_BOOST_CUSTOM_ENTRYPOINT_BUILD_NAME:i}})}e?this.runPreviewMode():(c&&this.unlockRobots(),l(this.isProd,this.viteConfig),t?.())}}export{h as default};
1
+ import i from"node:child_process";import s from"node:fs";import t from"node:path";import e 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"../helpers/create-focus-only.js";import{createDevMarker as a}from"../helpers/dev-marker.js";import c from"../helpers/plugin-config.js";import d from"../helpers/process-stop.js";import u from"./server-config.js";import h from"./ssr-manifest.js";class p{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=c(this.viteConfig),this.buildDir=t.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 t=new Promise((t,e)=>{i.on("exit",i=>{t(i)}),i.on("close",i=>{t(i)}),i.on("error",i=>{e(i)}),s&&i.stderr?.on("data",i=>{const s=Buffer.from(i).toString();(s.includes("warning")||s.includes("WARNING"))&&t(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 t=i+Buffer.from(s).toString();r.filter(i=>t.includes(i)).forEach(i=>this.diagnosticCodes.add(i)),i=t.slice(-80)})}return{promise:t,command:i}}buildManifest(){console.info(e.blue("Building routes manifest file"));const i=u.init({isProd:this.isProd,mode:this.params.mode},{root:this.viteConfig.root,clientFile:this.pluginConfig.clientFile});h.get(i,{buildDir:this.viteConfig.build.outDir,viteAliases:this.viteConfig.resolve.alias,basename:this.viteConfig.base,renderBuiltUrl:this.viteConfig?.experimental?.renderBuiltUrl}).buildRoutesManifest()}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 t=s.readFileSync(i,{encoding:"utf-8"}).replace(/Disallow: \/$/m,"Allow: /");s.writeFileSync(i,t,{encoding:"utf-8"}),console.info(e.blue("\nrobots.txt unlocked."))}eject(){const i=`${this.buildDir}/server/start.js`;s.writeFileSync(i,"import runProd from '@lomray/vite-ssr-boost/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 onlyClient: ONLY_CLIENT === '1',\n });\n",{encoding:"utf-8"})}createServerless(){const i=`${this.buildDir}/server/serverless.js`;s.writeFileSync(i,"import runServerless from '@lomray/vite-ssr-boost/cli/run-serverless.js';\n\nexport default await runServerless({ version: process.env.VERSION || \"1.0.0\" });\n",{encoding:"utf-8"})}async spawnBuild(s,t,e={}){const{mode:o,isNoWarnings:r}=this.params,{focusOnly:n=this.params.focusOnly,shouldWait:a=!1,env:c={}}=e,d=o&&!t.includes("--mode")?`--mode ${o}`:"",u=this.promisifyProcess(i.spawn(`vite build ${t} ${d} --emptyOutDir`,{signal:this.abortController.signal,stdio:[process.stdin,"pipe","pipe"],shell:!0,env:{...process.env,...c,FORCE_COLOR:"2",SSR_BOOST_IS_SSR:l(n).isOnlyClient()?"0":"1",SSR_BOOST_ACTION:global.viteBoostAction}}),r);this.runningBuild.push({name:s,buildProcess:u}),a&&await this.waitLastBuild()}async waitLastBuild(){const i=this.runningBuild.at(-1);if(!i)return;const s=await i.buildProcess.promise;d(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 t=e=>{Buffer.from(e).toString().includes("built in")&&(s-=1,s||(this.runningBuild.forEach(({buildProcess:i})=>{i.command.stdout?.removeListener("data",t)}),a(this.isProd,this.viteConfig),i?.()))};this.runningBuild.forEach(({buildProcess:i})=>{i.command.stdout?.on("data",t)})}async build(){await this.makeConfig(),await n(),this.clearBuildFolder(),this.diagnosticCodes.clear();const{clientOptions:i,serverOptions:e,onFinish:o,isWatch:r,focusOnly:c,isEject:d,isServerless:u,isUnlockRobots:h}=this.params,{outDir:p}=this.viteConfig.build,f=l(c);this.abortController=new AbortController,this.runningBuild=[],f.isClient()&&await this.spawnBuild("client",`${i} --outDir ${p}/client`,{shouldWait:!r}),f.isServer()&&(await this.spawnBuild("server",`${e} --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:t,buildOptions:e=""}of m){const o=t&&"ssr"===s?`--ssr ${t}`:"";await this.spawnBuild(i,`${e} ${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),s.mkdirSync(this.buildDir,{recursive:!0}),s.writeFileSync(t.join(this.buildDir,"ssr-boost-diagnostics.json"),JSON.stringify({codes:[...this.diagnosticCodes].sort((i,s)=>i.localeCompare(s))},null,2)),o?.())}}export{p as default};
2
2
  //# sourceMappingURL=build.js.map
@@ -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","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","buildManifest","console","info","chalk","blue","serverConfig","ServerConfig","init","clientFile","SsrManifest","get","viteAliases","alias","basename","base","renderBuiltUrl","experimental","buildRoutesManifest","unlockRobots","robotsFile","warn","data","readFileSync","encoding","replace","writeFileSync","eject","entrypoint","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","forEach","removeListener","createDevMarker","viteResetCache","focus","AbortController","isClient","isServer","serverFile","isEntrypoint","type","cliOptions","SSR_BOOST_CUSTOM_ENTRYPOINT_BUILD_NAME"],"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","unlockRobots","robotsFile","warn","data","readFileSync","encoding","replace","writeFileSync","eject","entrypoint","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","serverFile","isEntrypoint","type","cliOptions","SSR_BOOST_CUSTOM_ENTRYPOINT_BUILD_NAME","mkdirSync","join","JSON","stringify","codes","sort","a","b","localeCompare"],"mappings":"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"}
@@ -1,67 +1,29 @@
1
+ import type { Node as BabelNode } from '@babel/types';
1
2
  import type { Alias } from 'vite';
2
- import PathNormalize from './path-normalize.js';
3
3
  import type ServerConfig from './server-config.js';
4
+ import SourceFiles from './source-files.js';
5
+ import type { ISourceValue } from './source-files.js';
4
6
  export type TRoutesTree = {
5
7
  index: number;
8
+ id?: string;
9
+ path?: string | null;
6
10
  import: string;
7
11
  children: TRoutesTree[];
8
12
  };
9
- /**
10
- * Parse react router routes array
11
- */
13
+ /** Get the one statically named module loaded by a lazy route. */
14
+ export declare const lazyImport: ({ node, file }: ISourceValue) => string;
15
+ /** Static React Router route analysis; never imports application code. */
12
16
  declare class ParseRoutes {
13
- /**
14
- * Unwrap expression-only TypeScript syntax and parentheses.
15
- */
17
+ private readonly config;
18
+ private readonly viteAliases?;
16
19
  private static unwrapExpression;
17
- /**
18
- * Path normalize service
19
- */
20
- protected readonly pathNormalize: PathNormalize;
21
- /**
22
- * Server config
23
- */
24
- protected readonly config: ServerConfig;
25
- /**
26
- * @constructor
27
- */
28
- constructor(config: ServerConfig, viteAliases?: Alias[]);
29
- /**
30
- * Parse routes
31
- */
32
- parse(): TRoutesTree[];
33
- /**
34
- * Parse file and return ast
35
- */
36
- private parseFile;
37
- /**
38
- * Find route import filepath
39
- */
40
- private getImportPath;
41
- /**
42
- * Find routes array inside code
43
- */
44
- private findRoutesDefinition;
45
- /**
46
- * Entrypoint routes file
47
- */
48
- private findRoutesEntrypoint;
49
- /**
50
- * Resolve route filename import
51
- */
52
- private resolveFilename;
53
- /**
54
- * Parse ast array routes objects
55
- */
56
- private parseRoutesArray;
57
- /**
58
- * Parse imports map from ast
59
- */
20
+ constructor(config: ServerConfig, viteAliases?: Alias[] | undefined);
21
+ /** Locate the library entry by its import binding, not its local spelling. */
22
+ parse(includeEmpty?: boolean): TRoutesTree[];
23
+ /** Also used to validate a proposed migration before any files are written. */
24
+ parseValue(sources: SourceFiles, value: ISourceValue, includeEmpty?: boolean, ancestors?: Set<BabelNode>): TRoutesTree[];
25
+ private assetPath;
60
26
  private static parseImportsMap;
61
- /**
62
- * Recursive build routes tree with dynamic imports
63
- */
64
- private recursiveBuildRoutesTree;
65
27
  /**
66
28
  * Add pathId to static routes
67
29
  */
@@ -70,6 +32,6 @@ declare class ParseRoutes {
70
32
  * Inject pathId to sync/async routes
71
33
  * Add async wrapper (see import-routes)
72
34
  */
73
- static handleRoutes(code: string, shouldAddPathId: boolean): string;
35
+ static handleRoutes(code: string, shouldAddPathId: boolean, filename?: string): string;
74
36
  }
75
37
  export default ParseRoutes;
@@ -1,2 +1,2 @@
1
- import e from"fs";import{resolve as t}from"node:path";import r from"path";import n from"@babel/generator";import*as o from"@babel/parser";import a from"@babel/traverse";import{isArrayExpression as i,isObjectProperty as s,isIdentifier as l,isBooleanLiteral as p,isJSXElement as u,isFunction as c,objectProperty as m,identifier as f,stringLiteral as d,isJSXIdentifier as h,isObjectExpression as y}from"@babel/types";import E from"../constants/plugin-name.js";import v from"./path-normalize.js";const x=n.default??n,g=a.default??a;class I{static unwrapExpression(e){switch(e?.type){case"TSSatisfiesExpression":case"TSAsExpression":case"TSTypeAssertion":case"TSNonNullExpression":case"ParenthesizedExpression":return I.unwrapExpression(e.expression);default:return e}}pathNormalize;config;constructor(e,t){this.config=e,this.pathNormalize=new v(e,t)}parse(){const{clientFile:e,root:r}=this.config.getParams(),n=t(r,e),o=this.findRoutesEntrypoint(n);if(!o?.routesPath)throw new Error(`Unable to find routes file import in ${e}`);const{routesPath:a,exportName:i}=o,s=this.resolveFilename(a,n);return this.recursiveBuildRoutesTree(s,i)}parseFile(t){try{const r=e.readFileSync(t,"utf-8");return o.parse(r,{sourceType:"module",createImportExpressions:!0,plugins:["typescript","jsx"]})}catch{return null}}getImportPath(e,t){let r=null,n=null;return g(e,{ImportDeclaration(e){const o=e.node;o.specifiers.forEach(e=>{e.local.name===t&&(n="ImportDefaultSpecifier"===e.type?null:t,r=o.source.value)})}}),{routesPath:r,exportName:n}}findRoutesDefinition(e,t){let r=t,n=null;if(g(e,{ExportNamedDeclaration({node:e}){!e.declaration&&e.specifiers.length>0&&e.specifiers.forEach(e=>{const n=e.exported.name;null===t&&"ExportSpecifier"===e.type?"default"===e.local.name&&(r=n):n===t&&(r=e.local.name)})},ExportDefaultDeclaration({node:e}){null===t&&(n=e,"Identifier"===e.declaration.type?r=e.declaration.name:"VariableDeclaration"===e.declaration.type&&(r=e.declaration.declarations[0].id.name))}}),r){let t=null;return g(e,{VariableDeclaration({node:e}){e.declarations.forEach(n=>{n.id.name===r&&(t=e)})}}),t}return n}findRoutesEntrypoint(e){const t=this.parseFile(e);let r=null;return t?(g(t,{CallExpression({node:e}){"entryClient"===e.callee.name&&e.arguments.length>=2&&"Identifier"===e.arguments[1].type&&(r=e.arguments[1].name)}}),this.getImportPath(t,r)):r}resolveFilename(e,t){let n=e;(e.startsWith("./")||e.startsWith("../"))&&t&&(n=r.resolve(r.dirname(t),e));const o=this.pathNormalize.getAppPath(n,!0);return this.pathNormalize.findAppFile(o)}parseRoutesArray(e,t,r){const n=[];return e.forEach((e,o)=>{if("ObjectExpression"===e.type){const a={index:o,import:"",children:[]};e.properties.forEach(e=>{const n=e;if("children"===n.key.name){const e=I.unwrapExpression(n.value);i(e)&&(a.children=this.parseRoutesArray(e.elements,t,r))}if("lazy"===n.key.name&&"ArrowFunctionExpression"===n.value.type){const e=n.value.body;if("ImportExpression"===e.type){const t=e.source;"StringLiteral"===t.type&&(a.import=t.value)}}if("Component"===n.key.name&&"Identifier"===n.value.type){const e=n.value.name,{path:r}=t[e]??{};r&&(a.import=r)}if("element"===n.key.name&&"JSXElement"===n.value.type){const e=n.value?.openingElement?.name?.name,{path:r}=t[e]??{};r&&(a.import=r)}if("children"===n.key.name&&"Identifier"===n.value.type){const e=n.value.name,{path:o,isDefault:i}=t[e]??{};if(o){const t=this.resolveFilename(o,r);t&&(a.children=this.recursiveBuildRoutesTree(t,i?null:e))}}}),(a.import||a.children.length>0)&&n.push(a)}}),n}static parseImportsMap(e){const t={};return g(e,{ImportDeclaration(e){const r=e.node;r.specifiers.forEach(e=>{t[e.local.name]={path:r.source.value,isDefault:"ImportDefaultSpecifier"===e.type}})}}),t}recursiveBuildRoutesTree(e,t=null){if(!e)return[];const r=this.parseFile(e);if(!r)return[];const n=this.findRoutesDefinition(r,t),o=[];if(!n)return o;const a=I.parseImportsMap(r),s=I.unwrapExpression("VariableDeclaration"===n.type?n.declarations[0].init:n.declaration);if(!i(s)){if("ExportDefaultDeclaration"===n.type){return this.config.getLogger().warn(`Routes manifest: default export of ${e} is a ${s?.type} and cannot be analyzed; lazy route assets will not be injected.`),o}throw new Error(`Expected routes array in ${e}, received ${s?.type??"undefined"}.`)}return o.push(...this.parseRoutesArray(s.elements,a,e)),o}static processRouteFileCode(e,t,r,n){e.node.properties.forEach(o=>{if(s(o)&&l(o.key)){if("lazy"===o.key.name&&"ArrowFunctionExpression"===o.value.type){const t=o.value.body,a=e.node.properties.find(e=>s(e)&&l(e.key)&&"onlyClient"===e.key.name);if(o.value={type:"CallExpression",callee:{type:"Identifier",name:"n"},arguments:s(a)&&(p(a.value)||u(a.value)||c(a.value)||l(a.value))?[o.value,a.value]:[o.value]},a&&(e.node.properties=e.node.properties.filter(e=>e!==a)),n(),"ImportExpression"===t.type){const n=t.source,a=e.findParent?.(e=>i(I.unwrapExpression(e.node)));if(a&&"StringLiteral"===n.type&&n.value&&r){const t=m(f("pathId"),d(n.value));e.node.properties.splice(e.node.properties.indexOf(o)+1,0,t)}}}if("element"===o.key.name||"Component"===o.key.name){let n="";u(o.value)&&h(o.value.openingElement.name)?n=o.value.openingElement.name.name:l(o.value)&&(n=o.value.name);const a=e.findParent?.(e=>i(I.unwrapExpression(e.node))),s=t[n]?.path;if(a&&s&&r){const t=m(f("pathId"),d(s));e.node.properties.splice(e.node.properties.indexOf(o)+1,0,t)}}const a=I.unwrapExpression(o.value);"children"===o.key.name&&i(a)&&a.elements.forEach(e=>{y(e)&&I.processRouteFileCode({node:e},t,r,n)})}})}static handleRoutes(e,t){if(!e)return e;const r=o.parse(e,{sourceType:"module",createImportExpressions:!0,plugins:["typescript","jsx"]});if(!r)return e;const n=I.parseImportsMap(r);let a=!1;return g(r,{ObjectExpression(e){I.processRouteFileCode(e,n,t,()=>{a=!0})}}),a&&r.program.body.unshift({type:"ImportDeclaration",specifiers:[{type:"ImportDefaultSpecifier",local:{type:"Identifier",name:"n"}}],source:{type:"StringLiteral",value:`${E}/helpers/import-route`}}),x(r,{retainLines:!0}).code}}export{I as default};
1
+ import e from"node:path";import t from"@babel/generator";import*as r from"@babel/parser";import o from"@babel/traverse";import{isObjectProperty as n,isFunction as i,isBooleanLiteral as s,isJSXElement as a,isIdentifier as l,isArrayExpression as p,objectProperty as u,identifier as c,stringLiteral as m,isJSXIdentifier as f,isObjectExpression as d}from"@babel/types";import y from"../constants/plugin-name.js";import h,{unwrap as g,walk as v,sourceError as w,propertyName as b}from"./source-files.js";const x=t.default??t,E=o.default??o,I=({node:e,file:t})=>{const r=g(e);if("ArrowFunctionExpression"!==r.type&&"FunctionExpression"!==r.type)throw w(t,r,"lazy route; use a function importing one literal module");let o=g(r.body);if("BlockStatement"===o?.type){if(1!==o.body.length||"ReturnStatement"!==o.body[0].type)throw w(t,r,"lazy function body; return one literal import (optionally with .then)");o=g(o.body[0].argument)}if("AwaitExpression"===o?.type&&(o=g(o.argument)),"CallExpression"===o?.type&&"MemberExpression"===o.callee.type&&"Identifier"===o.callee.property.type&&"then"===o.callee.property.name&&(o=g(o.callee.object)),"ImportExpression"!==o?.type)throw w(t,o,"lazy route result; return one literal import (optionally with .then)");const n=[];if(v(r,e=>{if("ImportExpression"===e.type){if("StringLiteral"!==e.source.type)throw w(t,e,"dynamic lazy import; use a string literal");n.push(e.source.value)}}),1!==n.length)throw w(t,r,`lazy route with ${n.length} imports; use exactly one literal module`);return n[0]};class S{config;viteAliases;static unwrapExpression=g;constructor(e,t){this.config=e,this.viteAliases=t}parse(t=!1){const{clientFile:r,root:o}=this.config.getParams(),n=e.resolve(o,r),i=new h(this.viteAliases??this.config.getVite()?.config.resolve.alias),s=[];if(v(i.read(n).ast,e=>{if("CallExpression"!==e.type||"Identifier"!==e.callee.type)return;const t=i.import(n,e.callee.name);if(t?.source.replace(/\.js$/,"")===`${y}/browser/entry`&&["default","entry"].includes(t.exported)){if(!e.arguments[1])throw w(n,e,"browser entry routes argument");s.push({node:e.arguments[1],file:n})}}),1!==s.length)throw w(n,s[1]?.node,`browser entry calls (${s.length}); expected one library browser/entry call`);return this.parseValue(i,s[0],t)}parseValue(e,t,r=!1,o=new Set){const{node:n,file:i}=e.resolve(t);if("ArrayExpression"!==n.type||o.has(n))throw w(i,n,"routes array; use a static, non-circular array");const s=new Set([...o,n]),a=[];return n.elements.forEach((t,o)=>{if(!t)throw w(i,n,"empty route array entry; use route objects");if("SpreadElement"===t.type)throw w(i,t,"route array spread; declare array entries explicitly");const l=e.properties({node:t,file:i}),p={index:o,import:"",children:[]},u=l.get("id"),c=l.get("path"),m=l.get("children"),f=l.get("lazy");if(u){const t=e.resolve(u);if("StringLiteral"!==t.node.type)throw w(t.file,t.node,"route id; use a static string");p.id=t.node.value}if(c){const e=g(c.node);p.path="StringLiteral"===e?.type?e.value:null}if(m&&(p.children=this.parseValue(e,m,r,s)),f){const t=e.resolve(f);p.import=this.assetPath(I(t),t.file)}else{const t=l.get("Component")??l.get("element"),r=g(t?.node),o="Identifier"===r?.type?r.name:"JSXElement"===r?.type&&"JSXIdentifier"===r.openingElement.name.type?r.openingElement.name.name:void 0,n=t&&o?e.import(t.file,o):void 0;n?p.import=this.assetPath(n.source,t.file):t&&(p.import=t.file)}(r||p.import||p.children.length)&&a.push(p)}),a}assetPath(t,r){return t.startsWith(".")?e.resolve(e.dirname(r),t):t}static parseImportsMap(e){const t={};for(const r of e.program.body)if("ImportDeclaration"===r.type)for(const e of r.specifiers)t[e.local.name]={path:r.source.value,isDefault:"ImportDefaultSpecifier"===e.type};return t}static processRouteFileCode(t,r,o,y,h,v){t.node.properties.forEach(w=>{if(n(w)){const x=b(w);if("lazy"===x&&i(g(w.value))){const r=g(w.value),f=I({node:r,file:h}),d=t.node.properties.find(e=>n(e)&&"onlyClient"===b(e));if(w.value={type:"CallExpression",callee:{type:"Identifier",name:v},arguments:n(d)&&(s(d.value)||a(d.value)||i(d.value)||l(d.value))?[w.value,d.value]:[w.value]},d&&(t.node.properties=t.node.properties.filter(e=>e!==d)),y(),f){const r=t.findParent?.(e=>p(S.unwrapExpression(e.node)));if(r&&f&&o){const r=u(c("pathId"),m(f.startsWith(".")&&e.isAbsolute(h)?e.resolve(e.dirname(h),f):f));t.node.properties.splice(t.node.properties.indexOf(w)+1,0,r)}}}if("element"===x||"Component"===x){let n="";a(w.value)&&f(w.value.openingElement.name)?n=w.value.openingElement.name.name:l(w.value)&&(n=w.value.name);const i=t.findParent?.(e=>p(S.unwrapExpression(e.node))),s=r[n]?.path;if(i&&s&&o){const r=u(c("pathId"),m(s.startsWith(".")&&e.isAbsolute(h)?e.resolve(e.dirname(h),s):s));t.node.properties.splice(t.node.properties.indexOf(w)+1,0,r)}}const E=S.unwrapExpression(w.value);"children"===x&&p(E)&&E.elements.forEach(e=>{d(e)&&S.processRouteFileCode({node:e},r,o,y,h,v)})}})}static handleRoutes(e,t,o="routes"){if(!e)return e;const n=r.parse(e,{sourceType:"module",createImportExpressions:!0,plugins:["typescript","jsx"]});if(!n)return e;const i=S.parseImportsMap(n);let s=!1,a="n";return E(n,{Program(e){e.scope.hasBinding(a)&&(a=e.scope.generateUidIdentifier("importRoute").name)}}),E(n,{ObjectExpression(e){S.processRouteFileCode(e,i,t,()=>{s=!0},o,a)}}),s&&n.program.body.unshift({type:"ImportDeclaration",specifiers:[{type:"ImportDefaultSpecifier",local:{type:"Identifier",name:a}}],source:{type:"StringLiteral",value:`${y}/helpers/import-route`}}),x(n,{retainLines:!0}).code}}export{S as default,I as lazyImport};
2
2
  //# sourceMappingURL=parse-routes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-routes.js","sources":["../../src/services/parse-routes.ts"],"sourcesContent":[null],"names":["generate","babelGenerate","default","traverse","babelTraverse","ParseRoutes","unwrapExpression","node","type","expression","pathNormalize","config","constructor","viteAliases","this","PathNormalize","parse","clientFile","root","getParams","clientEntrypoint","resolve","routesEntrypoint","findRoutesEntrypoint","routesPath","Error","exportName","routeFilepath","resolveFilename","recursiveBuildRoutesTree","parseFile","filename","code","fs","readFileSync","parser","sourceType","createImportExpressions","plugins","getImportPath","ast","importName","ImportDeclaration","nodePath","importNode","specifiers","forEach","specifier","local","name","source","value","findRoutesDefinition","exportNameResolved","defaultExportNode","ExportNamedDeclaration","declaration","length","exportedName","exported","ExportDefaultDeclaration","declarations","id","variableNode","VariableDeclaration","routesVariable","CallExpression","callee","arguments","relativeFile","resolvedFilename","startsWith","path","dirname","filepath","getAppPath","findAppFile","parseRoutesArray","elements","importsMap","results","index","routeInfo","import","children","properties","prop","objectProp","key","isArrayExpression","importCall","body","importArg","importPath","openingElement","isDefault","childrenFilePath","push","parseImportsMap","routesNode","routesArray","init","getLogger","warn","processRouteFileCode","shouldAddPathId","addImportRouteWrapper","property","isObjectProperty","isIdentifier","onlyClientProp","find","p","isBooleanLiteral","isJSXElement","isFunction","filter","parent","findParent","pathIdProperty","objectProperty","identifier","stringLiteral","splice","indexOf","componentName","isJSXIdentifier","element","isObjectExpression","handleRoutes","shouldAddRoutesImport","ObjectExpression","program","unshift","PLUGIN_NAME","retainLines"],"mappings":"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"}
1
+ {"version":3,"file":"parse-routes.js","sources":["../../src/services/parse-routes.ts"],"sourcesContent":[null],"names":["generate","babelGenerate","default","traverse","babelTraverse","lazyImport","node","file","value","unwrap","type","sourceError","result","body","length","argument","callee","property","name","object","imports","walk","child","source","push","ParseRoutes","config","viteAliases","static","constructor","this","parse","includeEmpty","clientFile","root","getParams","path","resolve","sources","SourceFiles","getVite","alias","calls","read","ast","imported","import","replace","PLUGIN_NAME","includes","exported","arguments","parseValue","ancestors","Set","has","next","results","elements","forEach","element","index","properties","route","children","id","get","routePath","lazy","resolved","literal","assetPath","component","componentNode","openingElement","undefined","specifier","startsWith","dirname","parseImportsMap","program","specifiers","local","isDefault","processRouteFileCode","nodePath","importsMap","shouldAddPathId","addImportRouteWrapper","filename","wrapperName","isObjectProperty","key","propertyName","isFunction","lazyValue","importPath","onlyClientProp","find","p","isBooleanLiteral","isJSXElement","isIdentifier","filter","parent","findParent","isArrayExpression","unwrapExpression","pathIdProperty","objectProperty","identifier","stringLiteral","isAbsolute","splice","indexOf","componentName","isJSXIdentifier","importName","isObjectExpression","handleRoutes","code","parser","sourceType","createImportExpressions","plugins","shouldAddRoutesImport","Program","scope","hasBinding","generateUidIdentifier","ObjectExpression","unshift","retainLines"],"mappings":"mfAiCA,MAAMA,EAAYC,EAAcC,SAAWD,EAErCE,EAAYC,EAAcF,SAAWE,EAe9BC,EAAa,EAAGC,OAAMC,WACjC,MAAMC,EAAQC,EAAOH,GAErB,GAAmB,4BAAfE,EAAME,MAAqD,uBAAfF,EAAME,KACpD,MAAMC,EAAYJ,EAAMC,EAAO,2DAGjC,IAAII,EAASH,EAAOD,EAAMK,MAE1B,GAAqB,mBAAjBD,GAAQF,KAA2B,CACrC,GAA2B,IAAvBE,EAAOC,KAAKC,QAAwC,oBAAxBF,EAAOC,KAAK,GAAGH,KAC7C,MAAMC,EACJJ,EACAC,EACA,yEAIJI,EAASH,EAAOG,EAAOC,KAAK,GAAGE,SACjC,CAeA,GAbqB,oBAAjBH,GAAQF,OACVE,EAASH,EAAOG,EAAOG,WAIN,mBAAjBH,GAAQF,MACe,qBAAvBE,EAAOI,OAAON,MACkB,eAAhCE,EAAOI,OAAOC,SAASP,MACS,SAAhCE,EAAOI,OAAOC,SAASC,OAEvBN,EAASH,EAAOG,EAAOI,OAAOG,SAGX,qBAAjBP,GAAQF,KACV,MAAMC,EACJJ,EACAK,EACA,wEAIJ,MAAMQ,EAAoB,GAa1B,GAXAC,EAAKb,EAAQc,IAEX,GAAmB,qBAAfA,EAAMZ,KAA6B,CACrC,GAA0B,kBAAtBY,EAAMC,OAAOb,KACf,MAAMC,EAAYJ,EAAMe,EAAO,6CAGjCF,EAAQI,KAAKF,EAAMC,OAAOf,MAC5B,IAGqB,IAAnBY,EAAQN,OACV,MAAMH,EACJJ,EACAC,EACA,mBAAmBY,EAAQN,kDAI/B,OAAOM,EAAQ,IAIjB,MAAMK,EAIeC,OACAC,YAJXC,wBAA0BnB,EAElC,WAAAoB,CACmBH,EACAC,GADAG,KAAAJ,OAAAA,EACAI,KAAAH,YAAAA,CAChB,CAGI,KAAAI,CAAMC,GAAe,GAC1B,MAAMC,WAAEA,EAAUC,KAAEA,GAASJ,KAAKJ,OAAOS,YACnC5B,EAAO6B,EAAKC,QAAQH,EAAMD,GAC1BK,EAAU,IAAIC,EAClBT,KAAKH,aAAeG,KAAKJ,OAAOc,WAAWd,OAAOW,QAAQI,OAEtDC,EAAwB,GAqB9B,GAnBArB,EAAKiB,EAAQK,KAAKpC,GAAMqC,IAAMtC,IAC5B,GAAkB,mBAAdA,EAAKI,MAAkD,eAArBJ,EAAKU,OAAON,KAChD,OAGF,MAAMmC,EAAWP,EAAQQ,OAAOvC,EAAMD,EAAKU,OAAOE,MAElD,GACE2B,GAAUtB,OAAOwB,QAAQ,QAAS,MAAQ,GAAGC,mBAC7C,CAAC,UAAW,SAASC,SAASJ,EAASK,UACvC,CACA,IAAK5C,EAAK6C,UAAU,GAClB,MAAMxC,EAAYJ,EAAMD,EAAM,iCAGhCoC,EAAMlB,KAAK,CAAElB,KAAMA,EAAK6C,UAAU,GAAI5C,QACxC,IAGmB,IAAjBmC,EAAM5B,OACR,MAAMH,EACJJ,EACAmC,EAAM,IAAIpC,KACV,wBAAwBoC,EAAM5B,oDAIlC,OAAOgB,KAAKsB,WAAWd,EAASI,EAAM,GAAIV,EAC5C,CAGO,UAAAoB,CACLd,EACA9B,EACAwB,GAAe,EACfqB,EAAY,IAAIC,KAEhB,MAAMhD,KAAEA,EAAIC,KAAEA,GAAS+B,EAAQD,QAAQ7B,GAEvC,GAAkB,oBAAdF,EAAKI,MAA8B2C,EAAUE,IAAIjD,GACnD,MAAMK,EAAYJ,EAAMD,EAAM,kDAGhC,MAAMkD,EAAO,IAAIF,IAAI,IAAID,EAAW/C,IAC9BmD,EAAyB,GAoE/B,OAlEAnD,EAAKoD,SAASC,QAAQ,CAACC,EAASC,KAC9B,IAAKD,EACH,MAAMjD,EAAYJ,EAAMD,EAAM,8CAGhC,GAAqB,kBAAjBsD,EAAQlD,KACV,MAAMC,EAAYJ,EAAMqD,EAAS,wDAGnC,MAAME,EAAaxB,EAAQwB,WAAW,CAAExD,KAAMsD,EAASrD,SACjDwD,EAAqB,CAAEF,QAAOf,OAAQ,GAAIkB,SAAU,IACpDC,EAAKH,EAAWI,IAAI,MACpBC,EAAYL,EAAWI,IAAI,QAC3BF,EAAWF,EAAWI,IAAI,YAC1BE,EAAON,EAAWI,IAAI,QAE5B,GAAID,EAAI,CACN,MAAMI,EAAW/B,EAAQD,QAAQ4B,GAEjC,GAA2B,kBAAvBI,EAAS/D,KAAKI,KAChB,MAAMC,EAAY0D,EAAS9D,KAAM8D,EAAS/D,KAAM,iCAGlDyD,EAAME,GAAKI,EAAS/D,KAAKE,KAC3B,CAEA,GAAI2D,EAAW,CAEb,MAAMG,EAAU7D,EAAO0D,EAAU7D,MAEjCyD,EAAM3B,KAAyB,kBAAlBkC,GAAS5D,KAA2B4D,EAAQ9D,MAAQ,IACnE,CAMA,GAJIwD,IACFD,EAAMC,SAAWlC,KAAKsB,WAAWd,EAAS0B,EAAUhC,EAAcwB,IAGhEY,EAAM,CACR,MAAMC,EAAW/B,EAAQD,QAAQ+B,GAEjCL,EAAMjB,OAAShB,KAAKyC,UAAUlE,EAAWgE,GAAWA,EAAS9D,KAC/D,KAAO,CACL,MAAMiE,EAAYV,EAAWI,IAAI,cAAgBJ,EAAWI,IAAI,WAC1DO,EAAgBhE,EAAO+D,GAAWlE,MAClCY,EACoB,eAAxBuD,GAAe/D,KACX+D,EAAcvD,KACU,eAAxBuD,GAAe/D,MAC8B,kBAA3C+D,EAAcC,eAAexD,KAAKR,KAClC+D,EAAcC,eAAexD,KAAKA,UAClCyD,EACF9B,EAAW2B,GAAatD,EAAOoB,EAAQQ,OAAO0B,EAAUjE,KAAMW,QAAQyD,EAExE9B,EACFkB,EAAMjB,OAAShB,KAAKyC,UAAU1B,EAAStB,OAAQiD,EAAWjE,MACjDiE,IAETT,EAAMjB,OAAS0B,EAAUjE,KAE7B,EAEIyB,GAAgB+B,EAAMjB,QAAUiB,EAAMC,SAASlD,SACjD2C,EAAQjC,KAAKuC,KAIVN,CACT,CAEQ,SAAAc,CAAUK,EAAmBrE,GACnC,OAAOqE,EAAUC,WAAW,KAAOzC,EAAKC,QAAQD,EAAK0C,QAAQvE,GAAOqE,GAAaA,CACnF,CAEQ,sBAAOG,CAAgBnC,GAC7B,MAAMxB,EAAuB,CAAA,EAE7B,IAAK,MAAMd,KAAQsC,EAAIoC,QAAQnE,KAC7B,GAAkB,sBAAdP,EAAKI,KACP,IAAK,MAAMkE,KAAatE,EAAK2E,WAC3B7D,EAAQwD,EAAUM,MAAMhE,MAAQ,CAC9BkB,KAAM9B,EAAKiB,OAAOf,MAClB2E,UAA8B,2BAAnBP,EAAUlE,MAM7B,OAAOU,CACT,CAKQ,2BAAOgE,CACbC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEAL,EAAS/E,KAAKwD,WAAWH,QAAS1C,IAChC,GAAI0E,EAAiB1E,GAAW,CAC9B,MAAM2E,EAAMC,EAAa5E,GAGzB,GAAY,SAAR2E,GAAkBE,EAAWrF,EAAOQ,EAAST,QAAS,CACxD,MAAMuF,EAAYtF,EAAOQ,EAAST,OAC5BwF,EAAa3F,EAAW,CAAEC,KAAMyF,EAAWxF,KAAMkF,IACjDQ,EAAiBZ,EAAS/E,KAAKwD,WAAWoC,KAC7CC,GAAMR,EAAiBQ,IAA0B,eAApBN,EAAaM,IA6B7C,GAtBAlF,EAAST,MAAQ,CACfE,KAAM,iBACNM,OAAQ,CACNN,KAAM,aACNQ,KAAMwE,GAERvC,UACEwC,EAAiBM,KAChBG,EAAiBH,EAAezF,QAC/B6F,EAAaJ,EAAezF,QAC5BsF,EAAWG,EAAezF,QAC1B8F,EAAaL,EAAezF,QAC1B,CAACS,EAAST,MAAqByF,EAAezF,OAC9C,CAACS,EAAST,QAGdyF,IACFZ,EAAS/E,KAAKwD,WAAauB,EAAS/E,KAAKwD,WAAWyC,OAAQJ,GAAMA,IAAMF,IAG1ET,IAEIQ,EAAY,CAEd,MAAMQ,EAASnB,EAASoB,aAAcN,GACpCO,EAAkBjF,EAAYkF,iBAAiBR,EAAE7F,QAGnD,GAAIkG,GAAUR,GAAcT,EAAiB,CAC3C,MAAMqB,EAAiBC,EACrBC,EAAW,UACXC,EACEf,EAAWnB,WAAW,MAAQzC,EAAK4E,WAAWvB,GAC1CrD,EAAKC,QAAQD,EAAK0C,QAAQW,GAAWO,GACrCA,IAKRX,EAAS/E,KAAKwD,WAAWmD,OACvB5B,EAAS/E,KAAKwD,WAAWoD,QAAQjG,GAAY,EAC7C,EACA2F,EAEJ,CACF,CACF,CAEA,GAAY,YAARhB,GAA6B,cAARA,EAAqB,CAC5C,IAAIuB,EAAgB,GAEhBd,EAAapF,EAAST,QAAU4G,EAAgBnG,EAAST,MAAMkE,eAAexD,MAChFiG,EAAgBlG,EAAST,MAAMkE,eAAexD,KAAKA,KAC1CoF,EAAarF,EAAST,SAC/B2G,EAAgBlG,EAAST,MAAMU,MAIjC,MAAMsF,EAASnB,EAASoB,aAAcN,GACpCO,EAAkBjF,EAAYkF,iBAAiBR,EAAE7F,QAE7C+G,EAAa/B,EAAW6B,IAAgB/E,KAE9C,GAAIoE,GAAUa,GAAc9B,EAAiB,CAC3C,MAAMqB,EAAiBC,EACrBC,EAAW,UACXC,EACEM,EAAWxC,WAAW,MAAQzC,EAAK4E,WAAWvB,GAC1CrD,EAAKC,QAAQD,EAAK0C,QAAQW,GAAW4B,GACrCA,IAKRhC,EAAS/E,KAAKwD,WAAWmD,OACvB5B,EAAS/E,KAAKwD,WAAWoD,QAAQjG,GAAY,EAC7C,EACA2F,EAEJ,CACF,CAEA,MAAM5C,EAAWvC,EAAYkF,iBAAiB1F,EAAST,OAE3C,aAARoF,GAAsBc,EAAkB1C,IAE1CA,EAASN,SAASC,QAASC,IACrB0D,EAAmB1D,IACrBnC,EAAY2D,qBACV,CAAE9E,KAAMsD,GACR0B,EACAC,EACAC,EACAC,EACAC,IAKV,GAEJ,CAMO,mBAAO6B,CAAaC,EAAcjC,EAA0BE,EAAW,UAC5E,IAAK+B,EACH,OAAOA,EAGT,MAAM5E,EAAM6E,EAAO1F,MAAMyF,EAAM,CAC7BE,WAAY,SACZC,yBAAyB,EACzBC,QAAS,CAAC,aAAc,SAG1B,IAAKhF,EACH,OAAO4E,EAGT,MAAMlC,EAAa7D,EAAYsD,gBAAgBnC,GAC/C,IAAIiF,GAAwB,EACxBnC,EAAc,IA4ClB,OA1CAvF,EAASyC,EAAK,CACZ,OAAAkF,CAAQzC,GACFA,EAAS0C,MAAMC,WAAWtC,KAC5BA,EAAcL,EAAS0C,MAAME,sBAAsB,eAAe/G,KAEtE,IAGFf,EAASyC,EAAK,CACZ,gBAAAsF,CAAiB7C,GACf5D,EAAY2D,qBACVC,EACAC,EACAC,EACA,KACEsC,GAAwB,GAE1BpC,EACAC,EAEJ,IAGEmC,GACFjF,EAAIoC,QAAQnE,KAAKsH,QAAQ,CACvBzH,KAAM,oBACNuE,WAAY,CACV,CACEvE,KAAM,yBACNwE,MAAO,CACLxE,KAAM,aACNQ,KAAMwE,KAIZnE,OAAQ,CACNb,KAAM,gBACNF,MAAO,GAAGwC,4BAKThD,EAAS4C,EAAK,CACnBwF,aAAa,IACZZ,IACL"}
@@ -1,2 +1,2 @@
1
- import t from"node:fs";import s from"path";class e{viteAliases;config;constructor(t,s){this.config=t,this.viteAliases=s??t.getVite()?.config?.resolve.alias}getAliases(){const t={};return this.viteAliases?.forEach(({find:s,replacement:e})=>{"string"==typeof s&&(t[s]=e)}),t}getImportPostfix(){return["","/index"].map(t=>["",".js",".ts",".tsx"].map(s=>`${t}${s}`)).flat()}getAppPath(t,e=!1){if(!t)return;const{root:i}=this.config.getParams();let r=t;if(t.startsWith("./")||t.startsWith("../"))r=s.resolve(i,t);else{const s=this.getAliases(),[e]=t.split("/");s[e]&&(r=t.replace(e,s[e]))}return r=r.split(s.win32.sep).join(s.posix.sep),e?r:r.replace(i,"").replace(/^(\/)|(\/)$/g,"")}findAppFile(s){const e=this.getImportPostfix();for(const i of e){const e=`${s}${i}`;if(t.existsSync(e)&&t.statSync(e).isFile())return e}return null}}export{e as default};
1
+ import t from"node:fs";import s from"path";class e{viteAliases;config;constructor(t,s){this.config=t,this.viteAliases=s??t.getVite()?.config?.resolve.alias}getAliases(){const t={};return this.viteAliases?.forEach(({find:s,replacement:e})=>{"string"==typeof s&&(t[s]=e)}),t}getImportPostfix(){return["","/index"].map(t=>["",".js",".ts",".tsx",".jsx",".mjs",".mts"].map(s=>`${t}${s}`)).flat()}getAppPath(t,e=!1){if(!t)return;const{root:i}=this.config.getParams();let r=t;if(t.startsWith("./")||t.startsWith("../"))r=s.resolve(i,t);else{const s=this.getAliases(),[e]=t.split("/");s[e]&&(r=t.replace(e,s[e]))}return r=r.split(s.win32.sep).join(s.posix.sep),e?r:r.replace(i,"").replace(/^(\/)|(\/)$/g,"")}findAppFile(s){const e=this.getImportPostfix();for(const i of e){const e=`${s}${i}`;if(t.existsSync(e)&&t.statSync(e).isFile())return e}return null}}export{e as default};
2
2
  //# sourceMappingURL=path-normalize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"path-normalize.js","sources":["../../src/services/path-normalize.ts"],"sourcesContent":[null],"names":["PathNormalize","viteAliases","config","constructor","this","getVite","resolve","alias","getAliases","aliases","forEach","find","replacement","getImportPostfix","map","prefix","ext","flat","getAppPath","appPath","withRoot","root","getParams","fullPath","startsWith","path","routeAlias","split","replace","win32","sep","join","posix","findAppFile","basePath","postfixes","postfix","filepath","fs","existsSync","statSync","isFile"],"mappings":"2CAQA,MAAMA,EAIeC,YAKAC,OAKnB,WAAAC,CAAYD,EAAsBD,GAChCG,KAAKF,OAASA,EACdE,KAAKH,YAAcA,GAAeC,EAAOG,WAAWH,QAAQI,QAAQC,KACtE,CAKO,UAAAC,GACL,MAAMC,EAAkC,CAAA,EAUxC,OARAL,KAAKH,aAAaS,QAAQ,EAAGC,OAAMC,kBACb,iBAATD,IAIXF,EAAQE,GAAQC,KAGXH,CACT,CAKO,gBAAAI,GACL,MAAO,CAAC,GAAI,UACTC,IAAKC,GAAW,CAAC,GAAI,MAAO,MAAO,QAAQD,IAAKE,GAAQ,GAAGD,IAASC,MACpEC,MACL,CAKO,UAAAC,CAAWC,EAAkBC,GAAW,GAC7C,IAAKD,EACH,OAGF,MAAME,KAAEA,GAASjB,KAAKF,OAAOoB,YAC7B,IAAIC,EAAWJ,EAGf,GAAIA,EAAQK,WAAW,OAASL,EAAQK,WAAW,OACjDD,EAAWE,EAAKnB,QAAQe,EAAMF,OACzB,CAEL,MAAMV,EAAUL,KAAKI,cAEdkB,GAAcP,EAAQQ,MAAM,KAE/BlB,EAAQiB,KACVH,EAAWJ,EAAQS,QAAQF,EAAYjB,EAAQiB,IAEnD,CAKA,OAFAH,EAAWA,EAASI,MAAMF,EAAKI,MAAMC,KAAKC,KAAKN,EAAKO,MAAMF,KAEtDV,EACKG,EAGFA,EAASK,QAAQP,EAAM,IAAIO,QAAQ,eAAgB,GAC5D,CAKO,WAAAK,CAAYC,GACjB,MAAMC,EAAY/B,KAAKS,mBAEvB,IAAK,MAAMuB,KAAWD,EAAW,CAC/B,MAAME,EAAW,GAAGH,IAAWE,IAE/B,GAAIE,EAAGC,WAAWF,IAAaC,EAAGE,SAASH,GAAUI,SACnD,OAAOJ,CAEX,CAEA,OAAO,IACT"}
1
+ {"version":3,"file":"path-normalize.js","sources":["../../src/services/path-normalize.ts"],"sourcesContent":[null],"names":["PathNormalize","viteAliases","config","constructor","this","getVite","resolve","alias","getAliases","aliases","forEach","find","replacement","getImportPostfix","map","prefix","ext","flat","getAppPath","appPath","withRoot","root","getParams","fullPath","startsWith","path","routeAlias","split","replace","win32","sep","join","posix","findAppFile","basePath","postfixes","postfix","filepath","fs","existsSync","statSync","isFile"],"mappings":"2CAQA,MAAMA,EAIeC,YAKAC,OAKnB,WAAAC,CAAYD,EAAsBD,GAChCG,KAAKF,OAASA,EACdE,KAAKH,YAAcA,GAAeC,EAAOG,WAAWH,QAAQI,QAAQC,KACtE,CAKO,UAAAC,GACL,MAAMC,EAAkC,CAAA,EAUxC,OARAL,KAAKH,aAAaS,QAAQ,EAAGC,OAAMC,kBACb,iBAATD,IAIXF,EAAQE,GAAQC,KAGXH,CACT,CAKO,gBAAAI,GACL,MAAO,CAAC,GAAI,UACTC,IAAKC,GACJ,CAAC,GAAI,MAAO,MAAO,OAAQ,OAAQ,OAAQ,QAAQD,IAAKE,GAAQ,GAAGD,IAASC,MAE7EC,MACL,CAKO,UAAAC,CAAWC,EAAkBC,GAAW,GAC7C,IAAKD,EACH,OAGF,MAAME,KAAEA,GAASjB,KAAKF,OAAOoB,YAC7B,IAAIC,EAAWJ,EAGf,GAAIA,EAAQK,WAAW,OAASL,EAAQK,WAAW,OACjDD,EAAWE,EAAKnB,QAAQe,EAAMF,OACzB,CAEL,MAAMV,EAAUL,KAAKI,cAEdkB,GAAcP,EAAQQ,MAAM,KAE/BlB,EAAQiB,KACVH,EAAWJ,EAAQS,QAAQF,EAAYjB,EAAQiB,IAEnD,CAKA,OAFAH,EAAWA,EAASI,MAAMF,EAAKI,MAAMC,KAAKC,KAAKN,EAAKO,MAAMF,KAEtDV,EACKG,EAGFA,EAASK,QAAQP,EAAM,IAAIO,QAAQ,eAAgB,GAC5D,CAKO,WAAAK,CAAYC,GACjB,MAAMC,EAAY/B,KAAKS,mBAEvB,IAAK,MAAMuB,KAAWD,EAAW,CAC/B,MAAME,EAAW,GAAGH,IAAWE,IAE/B,GAAIE,EAAGC,WAAWF,IAAaC,EAAGE,SAASH,GAAUI,SACnD,OAAOJ,CAEX,CAEA,OAAO,IACT"}
@@ -0,0 +1,35 @@
1
+ import type { File, Node, ObjectExpression, ImportDeclaration } from '@babel/types';
2
+ import type { Alias } from 'vite';
3
+ export interface ISourceValue {
4
+ node: Node;
5
+ file: string;
6
+ }
7
+ export interface ISourceFile {
8
+ code: string;
9
+ ast: File;
10
+ }
11
+ /** Strip syntax that has no runtime effect. */
12
+ export declare const unwrap: (node: Node | null | undefined) => Node | undefined;
13
+ /** Walk syntax without evaluating application code or following type metadata. */
14
+ export declare const walk: (node: Node, visit: (child: Node) => void) => void;
15
+ /** A single actionable error, including the original source location. */
16
+ export declare const sourceError: (file: string, node: Node | undefined, construct: string) => Error;
17
+ /** Property names whose meaning is known without executing an expression. */
18
+ export declare const propertyName: (node: ObjectExpression["properties"][number]) => string | undefined;
19
+ /** Static module bindings shared by migration and route analysis. */
20
+ declare class SourceFiles {
21
+ private readonly aliases;
22
+ private readonly files;
23
+ constructor(aliases?: Alias[]);
24
+ read(file: string): ISourceFile;
25
+ import(file: string, name: string): {
26
+ source: string;
27
+ exported: string;
28
+ declaration: ImportDeclaration;
29
+ } | undefined;
30
+ filename(specifier: string, importer: string, node?: Node): string;
31
+ exported(file: string, name?: string, seen?: Set<string>): ISourceValue;
32
+ resolve(value: ISourceValue, seen?: Set<string>): ISourceValue;
33
+ properties(value: ISourceValue, ancestors?: Set<Node>): Map<string, ISourceValue>;
34
+ }
35
+ export default SourceFiles;
@@ -0,0 +1,2 @@
1
+ import e from"node:fs";import t from"node:path";import{parse as r}from"@babel/parser";import{VISITOR_KEYS as i}from"@babel/types";const o=e=>{switch(e?.type){case"TSSatisfiesExpression":case"TSAsExpression":case"TSTypeAssertion":case"TSNonNullExpression":case"ParenthesizedExpression":return o(e.expression);default:return e??void 0}},s=(e,t)=>{t(e);for(const r of i[e.type]??[]){const i=Reflect.get(e,r);for(const e of Array.isArray(i)?i:[i])e&&"object"==typeof e&&"type"in e&&s(e,t)}},n=(e,t,r)=>new Error(`${e}:${t?.loc?.start.line??1}:${(t?.loc?.start.column??0)+1}: Unsupported ${r} (${t?.type??"undefined"}).`),a=e=>{if("SpreadElement"!==e.type)return"StringLiteral"===e.key.type?e.key.value:e.computed||"Identifier"!==e.key.type?void 0:e.key.name};class p{aliases;files=new Map;constructor(e=[]){this.aliases=e}read(t){const i=this.files.get(t);if(i)return i;let o;try{o=e.readFileSync(t,"utf8")}catch{throw n(t,void 0,"missing source file")}try{const e={code:o,ast:r(o,{sourceType:"module",createImportExpressions:!0,plugins:["typescript","jsx"]})};return this.files.set(t,e),e}catch(e){throw new Error(`${t}: ${String(e.message)}`)}}import(e,t){for(const r of this.read(e).ast.program.body){if("ImportDeclaration"!==r.type||"type"===r.importKind)continue;const e=r.specifiers.find(e=>e.local.name===t);if("ImportDefaultSpecifier"===e?.type)return{source:r.source.value,exported:"default",declaration:r};if("ImportSpecifier"===e?.type&&"type"!==e.importKind)return{source:r.source.value,exported:"Identifier"===e.imported.type?e.imported.name:e.imported.value,declaration:r}}}filename(r,i,o){let s=r;for(const{find:e,replacement:t}of this.aliases)if("string"==typeof e?s===e||s.startsWith(`${e}/`):e.test(s)){s=s.replace(e,t);break}if(!t.isAbsolute(s)){if(!s.startsWith("."))throw n(i,o,`unresolvable import ${JSON.stringify(r)}`);s=t.resolve(t.dirname(i),s)}for(const t of["",".js",".ts",".tsx",".jsx",".mjs",".mts",".cjs",".cts","/index.js","/index.ts","/index.tsx","/index.jsx"]){const r=`${s}${t}`;if(e.existsSync(r)&&e.statSync(r).isFile())return r}throw n(i,o,`missing import ${JSON.stringify(r)}`)}exported(e,t="default",r=new Set){const i=`${e}#export:${t}`;if(r.has(i))throw n(e,void 0,`circular export ${t}`);r.add(i);for(const i of this.read(e).ast.program.body){if("ExportDefaultDeclaration"===i.type&&"default"===t)return this.resolve({node:i.declaration,file:e},r);if("ExportNamedDeclaration"===i.type){if("VariableDeclaration"===i.declaration?.type){const o=i.declaration.declarations.find(e=>"Identifier"===e.id.type&&e.id.name===t);if(o?.init)return this.resolve({node:o.init,file:e},r)}for(const o of i.specifiers){if(("Identifier"===o.exported.type?o.exported.name:o.exported.value)===t&&"ExportSpecifier"===o.type)return i.source?this.exported(this.filename(i.source.value,e,i),o.local.name,r):this.resolve({node:o.local,file:e},r)}}}throw n(e,void 0,`missing export ${JSON.stringify(t)}`)}resolve(e,t=new Set){const{file:r}=e,i=o(e.node);if("Identifier"!==i.type)return{node:i,file:r};const s=`${r}#${i.name}`;if(t.has(s))throw n(r,i,`circular binding ${i.name}`);t.add(s);const a=this.import(r,i.name);if(a)return this.exported(this.filename(a.source,r,i),a.exported,t);for(const e of this.read(r).ast.program.body){const o="ExportNamedDeclaration"===e.type?e.declaration:e;if("VariableDeclaration"===o?.type){const e=o.declarations.find(e=>"Identifier"===e.id.type&&e.id.name===i.name);if(e?.init)return this.resolve({node:e.init,file:r},t)}if("FunctionDeclaration"===o?.type&&o.id?.name===i.name)return{node:o,file:r}}throw n(r,i,`unresolved binding ${i.name}`)}properties(e,t=new Set){const{node:r,file:i}=this.resolve(e);if("ObjectExpression"!==r.type||t.has(r))throw n(i,r,"route object / object spread; use a static object");const o=new Set([...t,r]),s=new Map;for(const e of r.properties){if("SpreadElement"===e.type){for(const[t,r]of this.properties({node:e.argument,file:i},o))s.set(t,r);continue}const t=a(e);if(void 0===t)throw n(i,e,"computed route key; use a string literal");s.set(t,{node:"ObjectProperty"===e.type?e.value:e,file:i})}return s}}export{p as default,a as propertyName,n as sourceError,o as unwrap,s as walk};
2
+ //# sourceMappingURL=source-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-files.js","sources":["../../src/services/source-files.ts"],"sourcesContent":[null],"names":["unwrap","node","type","expression","undefined","walk","visit","key","VISITOR_KEYS","value","Reflect","get","child","Array","isArray","sourceError","file","construct","Error","loc","start","line","column","propertyName","computed","name","SourceFiles","aliases","files","Map","constructor","this","read","cached","code","fs","readFileSync","result","ast","parse","sourceType","createImportExpressions","plugins","set","error","String","message","import","program","body","importKind","specifier","specifiers","find","item","local","source","exported","declaration","imported","filename","importer","replacement","startsWith","test","replace","path","isAbsolute","JSON","stringify","resolve","dirname","suffix","candidate","existsSync","statSync","isFile","seen","Set","has","add","declarations","id","init","statement","binding","properties","ancestors","next","property","entry","argument"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import e from"node:fs";import s from"node:path";import t from"chalk";import i from"./parse-routes.js";import r from"./path-normalize.js";import o,{AssetType as a}from"./route-assets.js";class n extends o{static instance=null;config;pathNormalize;root;buildDir;manifestName="manifest.json";viteAliases;basename;renderBuiltUrl;constructor(e,{buildDir:t,viteAliases:i,basename:o,renderBuiltUrl:a}={}){super(s.resolve(e.getParams().root,t||""),e.isModulePreload),this.config=e,this.root=e.getParams().root,this.buildDir=t,this.viteAliases=i??e.getVite()?.config?.resolve.alias,this.pathNormalize=new r(e,i),this.basename=o,this.renderBuiltUrl=a}static get(e,s={}){return null===n.instance&&(n.instance=new n(e,s)),n.instance}get isDev(){return Boolean(this.config.getVite())}getOutDir(){return s.resolve(this.root,this.buildDir||"")}getAssetsManifestFile(){return`${this.getOutDir()}/server/assets-manifest.json`}loadClientManifest(){const t=s.resolve(this.root,`${this.buildDir||""}/client/.vite`),i=`${t}/${this.manifestName}`;if(!e.existsSync(i))return{};const r=JSON.parse(e.readFileSync(i,{encoding:"utf-8"}));return e.rmSync(i),0===e.readdirSync(t).length&&e.rmSync(t,{recursive:!0}),r}getRoutesTreeIds(e,s){const t={};return e.forEach((e,i)=>{const r=[s,String(i)].filter(Boolean).join("-");e.import&&(t[r]=this.pathNormalize.getAppPath(e.import)),e.children.length>0&&Object.assign(t,this.getRoutesTreeIds(e.children,r))}),t}getRouteAssets(e,t,i=!1){const r=[...t?.assets??[],...t?.css??[],t?.file].reduce((e,r)=>{if(r){const o=this.getAssetType(r),a=t.isEntry&&t.file===r;if(o){const t=s.posix.normalize(`${this.basename}/${r}`),n=this.renderBuiltUrl?.(t,{type:"asset",ssr:!0,hostId:"",hostType:t.split(".").at(-1)?.toLowerCase()});e[r]={url:"string"==typeof n?n:t,weight:a?1.9:this.getAssetWeight(r),type:o,isNested:i,isPreload:!a}}}return e},{});return t?.imports?.length&&t.imports.forEach(s=>{const t=e[s];t&&Object.assign(r,this.getRouteAssets(e,t,!0))}),r}buildRoutesManifest(){const s=this.loadClientManifest(),t=new i(this.config,this.viteAliases),r=this.getRoutesTreeIds(t.parse()),o=this.pathNormalize.getImportPostfix(),a={};Object.entries(r).forEach(([e,t])=>{const i=o.find(e=>void 0!==s[`${t}${e}`]),r=s[`${t}${i||""}`];a[e]=this.sortAssets(Object.values(this.getRouteAssets(s,r)))}),e.writeFileSync(this.getAssetsManifestFile(),JSON.stringify(a,null,2),{encoding:"utf-8"})}getAssets(e){return this.isDev?this.getAssetsDev(e):super.getAssets(e)}getDevModules(e){const t=e?.map(({route:e})=>this.pathNormalize.getAppPath(e?.pathId,!0)).filter(Boolean)??[],i=this.pathNormalize.getImportPostfix(),r=this.config.getPluginConfig(),o=[r?.clientFile??"client.ts",r?.serverFile??"server.ts"].map(e=>s.resolve(this.root,e)),a=[];return[...o,...t].forEach(e=>{for(const s of i){const t=this.config.getVite()?.moduleGraph.getModuleById(`${e}${s}`);if(t){a.push(t);break}}}),a}async prepareDevAssets(e){const s=this.config.getVite();if(!s)return;const t=new Set,i=async e=>{t.has(e.url)||(t.add(e.url),e.file&&/\.(?:css|less|s[ac]ss|styl(?:us)?|pcss|postcss)$/.test(e.file)&&await s.transformRequest(e.url),await Promise.all([...e.importedModules].map(i)))};await Promise.all(this.getDevModules(e).map(i))}getAssetsDev(e){const s=Object.assign({},...this.getDevModules(e).map(e=>this.getModuleAssets(e)));return Object.values(s)}getModuleAssets(e,s=new Set){const i=e?.importedModules??e?.clientImportedModules;if(!i?.size||s.has(e.file))return{};let r={};return s.add(e.file),i.forEach(e=>{const{file:i,transformResult:o}=e,n=i?.split(".").at(-1);if(i&&n&&["css","scss","sass","less","styl","stylus","pcss","postcss"].includes(n)){const e=o?.code.match(/__vite__css\s+=\s+"(?<css>.+)"/)?.groups?.css;if(e)try{r[i]={type:a.style,url:i,weight:this.getAssetWeight(i),content:JSON.parse(`{"style": "${e}"}`).style,isNested:Boolean(s.size),isPreload:!1}}catch{console.warn(t.yellowBright("Failed to parse style: ",i))}}else r={...r,...this.getModuleAssets(e,s)}}),r}getAssetWeight(e){switch(this.getAssetType(e)){case a.style:return 1;case a.script:return 2;default:return 3}}getAssetType(e){const s=e.split(".").at(-1)?.toLowerCase();switch(s){case"css":case"scss":return a.style;case"js":return a.script;case"svg":case"jpg":case"jpeg":case"png":case"webp":case"gif":case"ico":return a.image;case"ttf":case"otf":case"woff":case"woff2":return a.font;default:return null}}}export{n as default};
1
+ import e from"node:fs";import s from"node:path";import t from"chalk";import i from"./parse-routes.js";import r from"./path-normalize.js";import o,{AssetType as a}from"./route-assets.js";class n extends o{static instance=null;config;pathNormalize;root;buildDir;manifestName="manifest.json";viteAliases;basename;renderBuiltUrl;constructor(e,{buildDir:t,viteAliases:i,basename:o,renderBuiltUrl:a}={}){super(s.resolve(e.getParams().root,t||""),e.isModulePreload),this.config=e,this.root=e.getParams().root,this.buildDir=t,this.viteAliases=i??e.getVite()?.config?.resolve.alias,this.pathNormalize=new r(e,i),this.basename=o,this.renderBuiltUrl=a}static get(e,s={}){return null===n.instance&&(n.instance=new n(e,s)),n.instance}get isDev(){return Boolean(this.config.getVite())}getOutDir(){return s.resolve(this.root,this.buildDir||"")}getAssetsManifestFile(){return`${this.getOutDir()}/server/assets-manifest.json`}loadClientManifest(){const t=s.resolve(this.root,`${this.buildDir||""}/client/.vite`),i=`${t}/${this.manifestName}`;if(!e.existsSync(i))return{};const r=JSON.parse(e.readFileSync(i,{encoding:"utf-8"}));return e.rmSync(i),0===e.readdirSync(t).length&&e.rmSync(t,{recursive:!0}),r}getRoutesTreeIds(e,s){const t={};return e.forEach(e=>{const i=[s,String(e.index)].filter(Boolean).join("-"),r=e.id??i;e.import&&(t[r]=this.pathNormalize.getAppPath(e.import)),e.children.length>0&&Object.assign(t,this.getRoutesTreeIds(e.children,i))}),t}getRouteAssets(e,t,i=!1){const r=[...t?.assets??[],...t?.css??[],t?.file].reduce((e,r)=>{if(r){const o=this.getAssetType(r),a=t.isEntry&&t.file===r;if(o){const t=s.posix.normalize(`${this.basename}/${r}`),n=this.renderBuiltUrl?.(t,{type:"asset",ssr:!0,hostId:"",hostType:t.split(".").at(-1)?.toLowerCase()});e[r]={url:"string"==typeof n?n:t,weight:a?1.9:this.getAssetWeight(r),type:o,isNested:i,isPreload:!a}}}return e},{});return t?.imports?.length&&t.imports.forEach(s=>{const t=e[s];t&&Object.assign(r,this.getRouteAssets(e,t,!0))}),r}buildRoutesManifest(){const s=this.loadClientManifest(),t=new i(this.config,this.viteAliases),r=this.getRoutesTreeIds(t.parse()),o=this.pathNormalize.getImportPostfix(),a={};Object.entries(r).forEach(([e,t])=>{const i=o.find(e=>void 0!==s[`${t}${e}`]),r=s[`${t}${i||""}`];a[e]=this.sortAssets(Object.values(this.getRouteAssets(s,r)))}),e.writeFileSync(this.getAssetsManifestFile(),JSON.stringify(a,null,2),{encoding:"utf-8"})}getAssets(e){return this.isDev?this.getAssetsDev(e):super.getAssets(e)}getDevModules(e){const t=e?.map(({route:e})=>this.pathNormalize.getAppPath(e?.pathId,!0)).filter(Boolean)??[],i=this.pathNormalize.getImportPostfix(),r=this.config.getPluginConfig(),o=[r?.clientFile??"client.ts",r?.serverFile??"server.ts"].map(e=>s.resolve(this.root,e)),a=[];return[...o,...t].forEach(e=>{for(const s of i){const t=this.config.getVite()?.moduleGraph.getModuleById(`${e}${s}`);if(t){a.push(t);break}}}),a}async prepareDevAssets(e){const s=this.config.getVite();if(!s)return;const t=new Set,i=async e=>{t.has(e.url)||(t.add(e.url),e.file&&/\.(?:css|less|s[ac]ss|styl(?:us)?|pcss|postcss)$/.test(e.file)&&await s.transformRequest(e.url),await Promise.all([...e.importedModules].map(i)))};await Promise.all(this.getDevModules(e).map(i))}getAssetsDev(e){const s=Object.assign({},...this.getDevModules(e).map(e=>this.getModuleAssets(e)));return Object.values(s)}getModuleAssets(e,s=new Set){const i=e?.importedModules??e?.clientImportedModules;if(!i?.size||s.has(e.file))return{};let r={};return s.add(e.file),i.forEach(e=>{const{file:i,transformResult:o}=e,n=i?.split(".").at(-1);if(i&&n&&["css","scss","sass","less","styl","stylus","pcss","postcss"].includes(n)){const e=o?.code.match(/__vite__css\s+=\s+"(?<css>.+)"/)?.groups?.css;if(e)try{r[i]={type:a.style,url:i,weight:this.getAssetWeight(i),content:JSON.parse(`{"style": "${e}"}`).style,isNested:Boolean(s.size),isPreload:!1}}catch{console.warn(t.yellowBright("Failed to parse style: ",i))}}else r={...r,...this.getModuleAssets(e,s)}}),r}getAssetWeight(e){switch(this.getAssetType(e)){case a.style:return 1;case a.script:return 2;default:return 3}}getAssetType(e){const s=e.split(".").at(-1)?.toLowerCase();switch(s){case"css":case"scss":return a.style;case"js":return a.script;case"svg":case"jpg":case"jpeg":case"png":case"webp":case"gif":case"ico":return a.image;case"ttf":case"otf":case"woff":case"woff2":return a.font;default:return null}}}export{n as default};
2
2
  //# sourceMappingURL=ssr-manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ssr-manifest.js","sources":["../../src/services/ssr-manifest.ts"],"sourcesContent":[null],"names":["SsrManifest","RouteAssets","static","config","pathNormalize","root","buildDir","manifestName","viteAliases","basename","renderBuiltUrl","constructor","super","path","resolve","getParams","isModulePreload","this","getVite","alias","PathNormalize","get","params","instance","isDev","Boolean","getOutDir","getAssetsManifestFile","loadClientManifest","clientManifestDir","clientSsrManifest","fs","existsSync","result","JSON","parse","readFileSync","encoding","rmSync","readdirSync","length","recursive","getRoutesTreeIds","routes","index","forEach","route","routeIndex","routeId","String","filter","join","import","getAppPath","children","Object","assign","getRouteAssets","manifest","module","isNested","assets","css","file","reduce","res","asset","type","getAssetType","isEntry","filename","posix","normalize","modifiedFilename","ssr","hostId","hostType","split","at","toLowerCase","url","weight","getAssetWeight","isPreload","imports","nestedAsset","nestedModule","buildRoutesManifest","routesService","ParseRoutes","routesPaths","postfixes","getImportPostfix","entries","routePath","routePostfix","find","postfix","undefined","routeMeta","sortAssets","values","writeFileSync","stringify","getAssets","getAssetsDev","getDevModules","routeIds","map","pathId","pluginConfig","getPluginConfig","rootIds","clientFile","serverFile","modules","moduleId","ext","moduleGraph","getModuleById","push","prepareDevAssets","vite","visited","Set","visit","async","has","add","test","transformRequest","Promise","all","importedModules","getModuleAssets","skipModules","clientImportedModules","size","subModule","transformResult","includes","code","match","groups","AssetType","style","content","console","warn","chalk","yellowBright","script","image","font"],"mappings":"0LAiCA,MAAMA,UAAoBC,EAIdC,gBAAsC,KAK7BC,OAKAC,cAKAC,KAKAC,SAKAC,aAAe,gBAKfC,YAKAC,SAKAC,eAKnB,WAAAC,CACER,GACAG,SAAEA,EAAQE,YAAEA,EAAWC,SAAEA,EAAQC,eAAEA,GAAuC,IAE1EE,MAAMC,EAAKC,QAAQX,EAAOY,YAAYV,KAAMC,GAAY,IAAKH,EAAOa,iBAEpEC,KAAKd,OAASA,EACdc,KAAKZ,KAAOF,EAAOY,YAAYV,KAC/BY,KAAKX,SAAWA,EAChBW,KAAKT,YAAcA,GAAeL,EAAOe,WAAWf,QAAQW,QAAQK,MACpEF,KAAKb,cAAgB,IAAIgB,EAAcjB,EAAQK,GAC/CS,KAAKR,SAAWA,EAChBQ,KAAKP,eAAiBA,CACxB,CAKO,UAAOW,CAAIlB,EAAsBmB,EAA6B,IAKnE,OAJ6B,OAAzBtB,EAAYuB,WACdvB,EAAYuB,SAAW,IAAIvB,EAAYG,EAAQmB,IAG1CtB,EAAYuB,QACrB,CAKA,SAAcC,GACZ,OAAOC,QAAQR,KAAKd,OAAOe,UAC7B,CAKU,SAAAQ,GACR,OAAOb,EAAKC,QAAQG,KAAKZ,KAAMY,KAAKX,UAAY,GAClD,CAKU,qBAAAqB,GACR,MAAO,GAAGV,KAAKS,yCACjB,CAKU,kBAAAE,GACR,MAAMC,EAAoBhB,EAAKC,QAAQG,KAAKZ,KAAM,GAAGY,KAAKX,UAAY,mBAChEwB,EAAoB,GAAGD,KAAqBZ,KAAKV,eAEvD,IAAKwB,EAAGC,WAAWF,GACjB,MAAO,CAAA,EAGT,MAAMG,EAASC,KAAKC,MAClBJ,EAAGK,aAAaN,EAAmB,CAAEO,SAAU,WAUjD,OAPAN,EAAGO,OAAOR,GAGuC,IAA7CC,EAAGQ,YAAYV,GAAmBW,QACpCT,EAAGO,OAAOT,EAAmB,CAAEY,WAAW,IAGrCR,CACT,CAKU,gBAAAS,CACRC,EACAC,GAEA,MAAMX,EAA6C,CAAA,EAcnD,OAZAU,EAAOE,QAAQ,CAACC,EAAOC,KACrB,MAAMC,EAAU,CAACJ,EAAOK,OAAOF,IAAaG,OAAOzB,SAAS0B,KAAK,KAE7DL,EAAMM,SACRnB,EAAOe,GAAW/B,KAAKb,cAAciD,WAAWP,EAAMM,SAGpDN,EAAMQ,SAASd,OAAS,GAC1Be,OAAOC,OAAOvB,EAAQhB,KAAKyB,iBAAiBI,EAAMQ,SAAUN,MAIzDf,CACT,CAKU,cAAAwB,CACRC,EACAC,EACAC,GAAW,GAEX,MAEMC,EAFa,IAAKF,GAAQE,QAAU,MAASF,GAAQG,KAAO,GAAKH,GAAQI,MAErDC,OACxB,CAACC,EAAKC,KACJ,GAAIA,EAAO,CACT,MAAMC,EAAOlD,KAAKmD,aAAaF,GACzBG,EAAUV,EAAOU,SAAWV,EAAOI,OAASG,EAGlD,GAAIC,EAAM,CACR,MAAMG,EAAWzD,EAAK0D,MAAMC,UAAU,GAAGvD,KAAKR,YAAYyD,KACpDO,EAAmBxD,KAAKP,iBAAiB4D,EAAU,CACvDH,KAAM,QACNO,KAAK,EACLC,OAAQ,GACRC,SAAUN,EAASO,MAAM,KAAKC,IAAG,IAAKC,gBAGxCd,EAAIC,GAAS,CACXc,IAAiC,iBAArBP,EAAgCA,EAAmBH,EAC/DW,OAAQZ,EAAU,IAAMpD,KAAKiE,eAAehB,GAC5CC,OACAP,WACAuB,WAAYd,EAEhB,CACF,CAEA,OAAOJ,GAET,CAAA,GAcF,OAVIN,GAAQyB,SAAS5C,QACnBmB,EAAOyB,QAAQvC,QAASwC,IACtB,MAAMC,EAAe5B,EAAS2B,GAE1BC,GACF/B,OAAOC,OAAOK,EAAQ5C,KAAKwC,eAAeC,EAAU4B,GAAc,MAKjEzB,CACT,CAKO,mBAAA0B,GACL,MAAM7B,EAAWzC,KAAKW,qBAChB4D,EAAgB,IAAIC,EAAYxE,KAAKd,OAAQc,KAAKT,aAClDkF,EAAczE,KAAKyB,iBAAiB8C,EAAcrD,SAElDwD,EAAY1E,KAAKb,cAAcwF,mBAC/B3D,EAAmC,CAAA,EAGzCsB,OAAOsC,QAAQH,GAAa7C,QAAQ,EAAEG,EAAS8C,MAC7C,MAAMC,EAAeJ,EAAUK,KAAMC,QAGLC,IAAvBxC,EAFU,GAAGoC,IAAYG,MAK5BE,EAAYzC,EADA,GAAGoC,IAAYC,GAAgB,MAGjD9D,EAAOe,GAAW/B,KAAKmF,WAAW7C,OAAO8C,OAAOpF,KAAKwC,eAAeC,EAAUyC,OAGhFpE,EAAGuE,cAAcrF,KAAKU,wBAAyBO,KAAKqE,UAAUtE,EAAQ,KAAM,GAAI,CAC9EI,SAAU,SAEd,CAKU,SAAAmE,CAAU7D,GAClB,OAAO1B,KAAKO,MAAQP,KAAKwF,aAAa9D,GAAU/B,MAAM4F,UAAU7D,EAClE,CAKU,aAAA+D,CAAc/D,GACtB,MAAMgE,EACHhE,GACGiE,IAAI,EAAG9D,WAAY7B,KAAKb,cAAciD,WAAYP,GAAuB+D,QAAQ,IAClF3D,OAAOzB,UAAyB,GAE/BkE,EAAY1E,KAAKb,cAAcwF,mBAC/BkB,EAAe7F,KAAKd,OAAO4G,kBAC3BC,EAAU,CACdF,GAAcG,YAAc,YAC5BH,GAAcI,YAAc,aAC5BN,IAAK7C,GAASlD,EAAKC,QAAQG,KAAKZ,KAAM0D,IAClCoD,EAAwB,GAa9B,MAXA,IAAIH,KAAYL,GAAU9D,QAASuE,IACjC,IAAK,MAAMC,KAAO1B,EAAW,CAC3B,MAAMhC,EAAS1C,KAAKd,OAAOe,WAAWoG,YAAYC,cAAc,GAAGH,IAAWC,KAE9E,GAAI1D,EAAQ,CACVwD,EAAQK,KAAK7D,GACb,KACF,CACF,IAGKwD,CACT,CAKO,sBAAMM,CAAiB9E,GAC5B,MAAM+E,EAAOzG,KAAKd,OAAOe,UAEzB,IAAKwG,EACH,OAGF,MAAMC,EAAU,IAAIC,IAKdC,EAAQC,MAAOnE,IACfgE,EAAQI,IAAIpE,EAAOqB,OAIvB2C,EAAQK,IAAIrE,EAAOqB,KAEfrB,EAAOI,MAAQ,mDAAmDkE,KAAKtE,EAAOI,aAC1E2D,EAAKQ,iBAAiBvE,EAAOqB,WAG/BmD,QAAQC,IAAI,IAAIzE,EAAO0E,iBAAiBzB,IAAIiB,YAG9CM,QAAQC,IAAInH,KAAKyF,cAAc/D,GAAQiE,IAAIiB,GACnD,CAKU,YAAApB,CAAa9D,GACrB,MAAMkB,EAASN,OAAOC,OACpB,CAAA,KACGvC,KAAKyF,cAAc/D,GAAQiE,IAAKjD,GAAW1C,KAAKqH,gBAAgB3E,KAGrE,OAAOJ,OAAO8C,OAAOxC,EACvB,CAKU,eAAAyE,CAAgB3E,EAAqB4E,EAA2B,IAAIX,KAC5E,MAAMxC,EAAUzB,GAAQ0E,iBAAmB1E,GAAQ6E,sBAEnD,IAAKpD,GAASqD,MAAQF,EAAYR,IAAIpE,EAAQI,MAC5C,MAAO,CAAA,EAGT,IAAIF,EAAkB,CAAA,EAsCtB,OApCA0E,EAAYP,IAAIrE,EAAQI,MAExBqB,EAAQvC,QAAS6F,IACf,MAAM3E,KAAEA,EAAI4E,gBAAEA,GAAoBD,EAC5BrB,EAAMtD,GAAMc,MAAM,KAAKC,OAE7B,GACEf,GACAsD,GACA,CAAC,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,SAAU,OAAQ,WAAWuB,SAASvB,GAC9E,CAEA,MAAMwB,EAAOF,GAAiBE,KAAKC,MAAM,mCAAmCC,QAAQjF,IAEpF,GAAI+E,EACF,IACEhF,EAAOE,GAAQ,CACbI,KAAM6E,EAAUC,MAChBjE,IAAKjB,EACLkB,OAAQhE,KAAKiE,eAAenB,GAC5BmF,QAAUhH,KAAKC,MAAM,cAAc0G,OAAgCI,MACnErF,SAAUnC,QAAQ8G,EAAYE,MAC9BtD,WAAW,EAEf,CAAE,MACAgE,QAAQC,KAAKC,EAAMC,aAAa,0BAA2BvF,GAC7D,CAEJ,MACEF,EAAS,IACJA,KACA5C,KAAKqH,gBAAgBI,EAAWH,MAKlC1E,CACT,CAKU,cAAAqB,CAAehB,GAGvB,OAFajD,KAAKmD,aAAaF,IAG7B,KAAK8E,EAAUC,MACb,OAAO,EAET,KAAKD,EAAUO,OACb,OAAO,EAET,QACE,OAAO,EAEb,CAKU,YAAAnF,CAAaF,GACrB,MAAMmD,EAAMnD,EAAMW,MAAM,KAAKC,IAAG,IAAKC,cAErC,OAAQsC,GACN,IAAK,MACL,IAAK,OACH,OAAO2B,EAAUC,MAEnB,IAAK,KACH,OAAOD,EAAUO,OAEnB,IAAK,MACL,IAAK,MACL,IAAK,OACL,IAAK,MACL,IAAK,OACL,IAAK,MACL,IAAK,MACH,OAAOP,EAAUQ,MAEnB,IAAK,MACL,IAAK,MACL,IAAK,OACL,IAAK,QACH,OAAOR,EAAUS,KAEnB,QACE,OAAO,KAEb"}
1
+ {"version":3,"file":"ssr-manifest.js","sources":["../../src/services/ssr-manifest.ts"],"sourcesContent":[null],"names":["SsrManifest","RouteAssets","static","config","pathNormalize","root","buildDir","manifestName","viteAliases","basename","renderBuiltUrl","constructor","super","path","resolve","getParams","isModulePreload","this","getVite","alias","PathNormalize","get","params","instance","isDev","Boolean","getOutDir","getAssetsManifestFile","loadClientManifest","clientManifestDir","clientSsrManifest","fs","existsSync","result","JSON","parse","readFileSync","encoding","rmSync","readdirSync","length","recursive","getRoutesTreeIds","routes","index","forEach","route","position","String","filter","join","routeId","id","import","getAppPath","children","Object","assign","getRouteAssets","manifest","module","isNested","assets","css","file","reduce","res","asset","type","getAssetType","isEntry","filename","posix","normalize","modifiedFilename","ssr","hostId","hostType","split","at","toLowerCase","url","weight","getAssetWeight","isPreload","imports","nestedAsset","nestedModule","buildRoutesManifest","routesService","ParseRoutes","routesPaths","postfixes","getImportPostfix","entries","routePath","routePostfix","find","postfix","undefined","routeMeta","sortAssets","values","writeFileSync","stringify","getAssets","getAssetsDev","getDevModules","routeIds","map","pathId","pluginConfig","getPluginConfig","rootIds","clientFile","serverFile","modules","moduleId","ext","moduleGraph","getModuleById","push","prepareDevAssets","vite","visited","Set","visit","async","has","add","test","transformRequest","Promise","all","importedModules","getModuleAssets","skipModules","clientImportedModules","size","subModule","transformResult","includes","code","match","groups","AssetType","style","content","console","warn","chalk","yellowBright","script","image","font"],"mappings":"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"}