@lomray/vite-ssr-boost 8.2.0 → 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.
Files changed (73) hide show
  1. package/README.md +25 -13
  2. package/SECURITY.md +1 -1
  3. package/adapters/express/entry.d.ts +1 -1
  4. package/adapters/express/entry.js.map +1 -1
  5. package/adapters/express/render.d.ts +4 -1
  6. package/adapters/express/render.js +1 -1
  7. package/adapters/express/render.js.map +1 -1
  8. package/browser/entry.d.ts +1 -0
  9. package/browser/entry.js +1 -1
  10. package/browser/entry.js.map +1 -1
  11. package/browser/stream.d.ts +5 -0
  12. package/browser/stream.js +2 -0
  13. package/browser/stream.js.map +1 -0
  14. package/cli/diagnostic-codes.d.ts +3 -0
  15. package/cli/diagnostic-codes.js +2 -0
  16. package/cli/diagnostic-codes.js.map +1 -0
  17. package/cli/doctor.d.ts +55 -0
  18. package/cli/doctor.js +2 -0
  19. package/cli/doctor.js.map +1 -0
  20. package/cli/init.d.ts +17 -0
  21. package/cli/init.js +2 -0
  22. package/cli/init.js.map +1 -0
  23. package/cli/project.d.ts +56 -0
  24. package/cli/project.js +2 -0
  25. package/cli/project.js.map +1 -0
  26. package/cli.js +1 -1
  27. package/cli.js.map +1 -1
  28. package/core/compose-html.d.ts +3 -4
  29. package/core/compose-html.js +1 -1
  30. package/core/compose-html.js.map +1 -1
  31. package/core/data-stream.d.ts +50 -0
  32. package/core/data-stream.js +2 -0
  33. package/core/data-stream.js.map +1 -0
  34. package/core/html-boundary.d.ts +7 -0
  35. package/core/html-boundary.js +2 -0
  36. package/core/html-boundary.js.map +1 -0
  37. package/core/render.d.ts +7 -1
  38. package/core/render.js +1 -1
  39. package/core/render.js.map +1 -1
  40. package/core/script.d.ts +6 -0
  41. package/core/script.js +2 -0
  42. package/core/script.js.map +1 -0
  43. package/edge/render-to-stream.js +1 -1
  44. package/edge/render-to-stream.js.map +1 -1
  45. package/helpers/build-custom-state.d.ts +1 -1
  46. package/helpers/build-custom-state.js +1 -1
  47. package/helpers/build-custom-state.js.map +1 -1
  48. package/helpers/build-router-state.d.ts +1 -1
  49. package/helpers/build-router-state.js +1 -1
  50. package/helpers/build-router-state.js.map +1 -1
  51. package/helpers/is-route-file.js +1 -1
  52. package/helpers/is-route-file.js.map +1 -1
  53. package/node/render-to-stream.js +1 -1
  54. package/node/render-to-stream.js.map +1 -1
  55. package/package.json +18 -6
  56. package/plugins/normalize-route.js +1 -1
  57. package/plugins/normalize-route.js.map +1 -1
  58. package/services/build.d.ts +1 -0
  59. package/services/build.js +1 -1
  60. package/services/build.js.map +1 -1
  61. package/services/diagnostics.d.ts +8 -3
  62. package/services/diagnostics.js +1 -1
  63. package/services/diagnostics.js.map +1 -1
  64. package/services/parse-routes.d.ts +17 -55
  65. package/services/parse-routes.js +1 -1
  66. package/services/parse-routes.js.map +1 -1
  67. package/services/path-normalize.js +1 -1
  68. package/services/path-normalize.js.map +1 -1
  69. package/services/source-files.d.ts +35 -0
  70. package/services/source-files.js +2 -0
  71. package/services/source-files.js.map +1 -0
  72. package/services/ssr-manifest.js +1 -1
  73. package/services/ssr-manifest.js.map +1 -1
@@ -1,6 +1,6 @@
1
1
  import type { StaticHandlerContext } from 'react-router';
2
2
  import Logger from './logger.js';
3
- type TDiagnosticCode = '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';
3
+ type TDiagnosticCode = 'SSR_BOOST_LOADER_NOT_SERIALIZABLE' | 'SSR_BOOST_STREAM_PROMISE_ABORTED' | 'SSR_BOOST_STATE_NOT_SERIALIZABLE' | 'SSR_BOOST_OUTLET_MISSING' | 'SSR_BOOST_HYDRATION_STATE_MISSING' | 'SSR_BOOST_DUPLICATE_OUTPUT' | 'SSR_BOOST_ONRESPONSE_INVALID_RETURN';
4
4
  interface ISerializationIssue {
5
5
  path: string;
6
6
  reason: string;
@@ -18,9 +18,10 @@ declare const formatDiagnostic: (code: TDiagnosticCode, sentence: string) => str
18
18
  */
19
19
  declare const splitHtmlShell: (html: string, file: string, outlet?: string) => [string, string];
20
20
  /**
21
- * Find values JSON cannot preserve, descending only into plain objects and arrays.
21
+ * Custom state uses JSON. Router state also supports promises, Date, RegExp, bigint,
22
+ * Map and Set through the stream codec; functions, symbols, classes and cycles warn.
22
23
  */
23
- declare const walkSerializable: (value: unknown, report: (issue: ISerializationIssue) => void, path?: string, ancestors?: Set<object>) => void;
24
+ declare const walkSerializable: (value: unknown, report: (issue: ISerializationIssue) => void, path?: string, ancestors?: Set<object>, streamed?: boolean) => void;
24
25
  /**
25
26
  * Inspect one development response while allowing every chunk to stream immediately.
26
27
  */
@@ -44,6 +45,10 @@ declare class Diagnostics {
44
45
  * Include React Router's route id and the full loader/action key path.
45
46
  */
46
47
  inspectRouterState({ loaderData, actionData }: StaticHandlerContext): void;
48
+ /** Report the request's pending loader/action promises at the render deadline. */
49
+ streamAborted(count: number): void;
50
+ /** Inspect streamed resolutions with the same supported value matrix as initial data. */
51
+ inspectStreamValue(value: unknown, id: number): void;
47
52
  /**
48
53
  * Check custom state before the serializer can omit or coerce it.
49
54
  */
@@ -1,2 +1,2 @@
1
- import t from"./logger.js";const e="\x3c!--ssr-outlet--\x3e",o="window.__staticRouterHydrationData",s=Symbol.for("@lomray/vite-ssr-boost/diagnostics"),r=globalThis,n=t=>{const e="undefined"==typeof process?void 0:process.env;return"0"===e?.SSR_BOOST_DIAGNOSTICS||"1"===e?.SSR_BOOST_DIAGNOSTICS?"1"===e.SSR_BOOST_DIAGNOSTICS:t??"production"!==e?.NODE_ENV},i=(t,e)=>`[ssr-boost] ${t}: ${e} See https://lomray-software.github.io/vite-ssr-boost/reference/diagnostics#${t.toLowerCase()}`,a=(t,o,s=e)=>{const r=t.split(s);if(!s||2!==r.length)throw new Error(i("SSR_BOOST_OUTLET_MISSING",`Invalid HTML shell in ${JSON.stringify(o)}: expected exactly one non-empty outlet ${JSON.stringify(s)}.`));return r},S=t=>{if(null===t)return"null";if("object"!=typeof t){return{bigint:"BigInt",symbol:"Symbol"}[typeof t]??typeof t}const e=Object.getPrototypeOf(t),o=e?.constructor?.name;return"string"==typeof o&&o?o:"object"},c=(t,e,o="$",s=new Set)=>{const r=typeof t;if("function"===r||"bigint"===r||"symbol"===r)return void e({path:o,reason:`${S(t)} is not JSON-serializable`});if(null===t||"object"!==r)return;const n=t,i=Object.getPrototypeOf(n);if(i!==Object.prototype&&null!==i&&(!Array.isArray(n)||i!==Array.prototype)){const t=S(n);return void e({path:o,reason:"Date"===t?"Date hydrates as a string":`${t} is not JSON-serializable`})}if(s.has(n))e({path:o,reason:"a circular reference is not JSON-serializable"});else{s.add(n);for(const[t,r]of Object.entries(n)){const i=Array.isArray(n)&&/^(0|[1-9]\d*)$/.test(t)?`[${t}]`:/^[A-Za-z_$][\w$]*$/.test(t)?`.${t}`:`[${JSON.stringify(t)}]`;c(r,e,o+i,s)}s.delete(n)}};class l{route;logger;chunks=[];constructor(e,o=new t){this.route=e,this.logger=o}warn(t,e){const o=i(t,e),n=r[s]??=new Set;n.has(o)||(n.add(o),this.logger.warn(o,{}))}inspectShell({header:t,footer:o}){("string"!=typeof t||"string"!=typeof o||t.includes(e)||o.includes(e))&&this.warn("SSR_BOOST_OUTLET_MISSING",`HTML shell for route ${JSON.stringify(this.route)} must supply both header and footer around exactly one ${e} outlet, with no outlet left in either half.`)}inspectRouterState({loaderData:t,actionData:e}){for(const[o,s]of Object.entries({loaderData:t,actionData:e}))for(const[t,e]of Object.entries(s??{}))c(e,({path:e,reason:o})=>this.warn("SSR_BOOST_LOADER_NOT_SERIALIZABLE",`Route ${JSON.stringify(t)} at ${e}: ${o}.`),`${o}[${JSON.stringify(t)}]`)}inspectState(t){c(t,({path:t,reason:e})=>this.warn("SSR_BOOST_STATE_NOT_SERIALIZABLE",`getState for route ${JSON.stringify(this.route)} at ${t}: ${e}.`))}inspectOnResponse(t){void 0!==t&&"string"!=typeof t&&this.warn("SSR_BOOST_ONRESPONSE_INVALID_RETURN",`onResponse for route ${JSON.stringify(this.route)} returned ${S(t)}; return a string or undefined.`)}append(t){this.chunks.push(t)}complete(){const t=this.chunks.join("");this.chunks=[];const e=new Map,s=t=>{e.set(t,(e.get(t)??0)+1)},r=t.replace(/<!--[\s\S]*?-->/g,"").replace(/(<(script|style|textarea|title)\b(?:[^"'<>]|"[^"]*"|'[^']*')*>)([\s\S]*?)<\/\2\s*>/gi,(t,e,r,n)=>{if("script"===r.toLowerCase()){/\bwindow\.__staticRouterHydrationData\s*=/.test(n)&&s(o);for(const t of n.matchAll(/\$RC\s*\(\s*(["'])(B:[^"']+)\1/g))s(`$RC("${t[2]}")`)}return e});for(const t of r.matchAll(/<([a-z][\w:-]*)\b((?:[^"'<>]|"[^"]*"|'[^']*')*)>/gi)){const e=t[1].toLowerCase();"html"!==e&&"head"!==e||s(`<${e}>`);for(const e of t[2].matchAll(/([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+))/g)){const t=e[2]??e[3]??e[4];"id"===e[1].toLowerCase()&&/^(S|B):/.test(t)&&s(`id="${t}"`)}}e.has(o)||this.warn("SSR_BOOST_HYDRATION_STATE_MISSING",`Completed response for route ${JSON.stringify(this.route)} has no ${o} script; preserve the hydration footer in onResponse.`);for(const[t,o]of e)o>1&&this.warn("SSR_BOOST_DUPLICATE_OUTPUT",`Completed response for route ${JSON.stringify(this.route)} repeats ${t}; onResponse must return undefined to keep a chunk and '' to withhold one.`)}}export{l as default,i as formatDiagnostic,n as isDiagnosticsEnabled,a as splitHtmlShell,c as walkSerializable};
1
+ import t from"./logger.js";const e="\x3c!--ssr-outlet--\x3e",o="window.__staticRouterHydrationData",r=Symbol.for("@lomray/vite-ssr-boost/diagnostics"),s=globalThis,n=t=>{const e="undefined"==typeof process?void 0:process.env;return"0"===e?.SSR_BOOST_DIAGNOSTICS||"1"===e?.SSR_BOOST_DIAGNOSTICS?"1"===e.SSR_BOOST_DIAGNOSTICS:t??"production"!==e?.NODE_ENV},i=(t,e)=>`[ssr-boost] ${t}: ${e} See https://lomray-software.github.io/vite-ssr-boost/reference/diagnostics#${t.toLowerCase()}`,a=(t,o,r=e)=>{const s=t.split(r);if(!r||2!==s.length)throw new Error(i("SSR_BOOST_OUTLET_MISSING",`Invalid HTML shell in ${JSON.stringify(o)}: expected exactly one non-empty outlet ${JSON.stringify(r)}.`));return s},S=t=>{if(null===t)return"null";if("object"!=typeof t){return{bigint:"BigInt",symbol:"Symbol"}[typeof t]??typeof t}const e=Object.getPrototypeOf(t),o=e?.constructor?.name;return"string"==typeof o&&o?o:"object"},c=(t,e,o="$",r=new Set,s=!1)=>{const n=typeof t;if(s&&(t instanceof Promise||t instanceof Date||t instanceof RegExp||"bigint"===n))return;if("function"===n||"bigint"===n||"symbol"===n)return void e({path:o,reason:`${S(t)} is not JSON-serializable`});if(null===t||"object"!==n)return;const i=t,a=Object.getPrototypeOf(i);if(!(s&&(i instanceof Map||i instanceof Set)||a===Object.prototype||null===a||Array.isArray(i)&&a===Array.prototype)){const t=S(i);return void e({path:o,reason:"Date"===t?"Date hydrates as a string":`${t} is not JSON-serializable`})}if(r.has(i))return void e({path:o,reason:"a circular reference is not JSON-serializable"});r.add(i);const f=s&&i instanceof Map?[...i].flatMap(([t,e],o)=>[[`${o}.key`,t],[`${o}.value`,e]]):s&&i instanceof Set?[...i].map((t,e)=>[String(e),t]):Object.entries(i);for(const[t,n]of f){const a=Array.isArray(i)&&/^(0|[1-9]\d*)$/.test(t)?`[${t}]`:/^[A-Za-z_$][\w$]*$/.test(t)?`.${t}`:`[${JSON.stringify(t)}]`;c(n,e,o+a,r,s)}r.delete(i)};class f{route;logger;chunks=[];constructor(e,o=new t){this.route=e,this.logger=o}warn(t,e){const o=i(t,e),n=s[r]??=new Set;n.has(o)||(n.add(o),this.logger.warn(o,{}))}inspectShell({header:t,footer:o}){("string"!=typeof t||"string"!=typeof o||t.includes(e)||o.includes(e))&&this.warn("SSR_BOOST_OUTLET_MISSING",`HTML shell for route ${JSON.stringify(this.route)} must supply both header and footer around exactly one ${e} outlet, with no outlet left in either half.`)}inspectRouterState({loaderData:t,actionData:e}){for(const[o,r]of Object.entries({loaderData:t,actionData:e}))for(const[t,e]of Object.entries(r??{}))c(e,({path:e,reason:o})=>this.warn("SSR_BOOST_LOADER_NOT_SERIALIZABLE",`Route ${JSON.stringify(t)} at ${e}: ${o}.`),`${o}[${JSON.stringify(t)}]`,new Set,!0)}streamAborted(t){this.warn("SSR_BOOST_STREAM_PROMISE_ABORTED",`Route ${JSON.stringify(this.route)} aborted with ${t} pending loader/action promise(s); the browser receives a rejection when connected.`)}inspectStreamValue(t,e){c(t,({path:t,reason:e})=>this.warn("SSR_BOOST_LOADER_NOT_SERIALIZABLE",`Route ${JSON.stringify(this.route)} at ${t}: ${e}.`),`promise[${e}]`,new Set,!0)}inspectState(t){c(t,({path:t,reason:e})=>this.warn("SSR_BOOST_STATE_NOT_SERIALIZABLE",`getState for route ${JSON.stringify(this.route)} at ${t}: ${e}.`))}inspectOnResponse(t){void 0!==t&&"string"!=typeof t&&this.warn("SSR_BOOST_ONRESPONSE_INVALID_RETURN",`onResponse for route ${JSON.stringify(this.route)} returned ${S(t)}; return a string or undefined.`)}append(t){this.chunks.push(t)}complete(){const t=this.chunks.join("");this.chunks=[];const e=new Map,r=t=>{e.set(t,(e.get(t)??0)+1)},s=t.replace(/<!--[\s\S]*?-->/g,"").replace(/(<(script|style|textarea|title)\b(?:[^"'<>]|"[^"]*"|'[^']*')*>)([\s\S]*?)<\/\2\s*>/gi,(t,e,s,n)=>{if("script"===s.toLowerCase()){/\bwindow\.__staticRouterHydrationData\s*=/.test(n)&&r(o);for(const t of n.matchAll(/\$RC\s*\(\s*(["'])(B:[^"']+)\1/g))r(`$RC("${t[2]}")`)}return e});for(const t of s.matchAll(/<([a-z][\w:-]*)\b((?:[^"'<>]|"[^"]*"|'[^']*')*)>/gi)){const e=t[1].toLowerCase();"html"!==e&&"head"!==e||r(`<${e}>`);for(const e of t[2].matchAll(/([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+))/g)){const t=e[2]??e[3]??e[4];"id"===e[1].toLowerCase()&&/^(S|B):/.test(t)&&r(`id="${t}"`)}}e.has(o)||this.warn("SSR_BOOST_HYDRATION_STATE_MISSING",`Completed response for route ${JSON.stringify(this.route)} has no ${o} script; preserve the hydration footer in onResponse.`);for(const[t,o]of e)o>1&&this.warn("SSR_BOOST_DUPLICATE_OUTPUT",`Completed response for route ${JSON.stringify(this.route)} repeats ${t}; onResponse must return undefined to keep a chunk and '' to withhold one.`)}}export{f as default,i as formatDiagnostic,n as isDiagnosticsEnabled,a as splitHtmlShell,c as walkSerializable};
2
2
  //# sourceMappingURL=diagnostics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sources":["../../src/services/diagnostics.ts"],"sourcesContent":[null],"names":["OUTLET","HYDRATION","warnedKey","Symbol","for","registry","globalThis","isDiagnosticsEnabled","enabled","env","process","undefined","SSR_BOOST_DIAGNOSTICS","NODE_ENV","formatDiagnostic","code","sentence","toLowerCase","splitHtmlShell","html","file","outlet","parts","split","length","Error","JSON","stringify","valueType","value","bigint","symbol","prototype","Object","getPrototypeOf","name","constructor","walkSerializable","report","path","ancestors","Set","type","reason","object","Array","isArray","has","add","key","child","entries","suffix","test","delete","Diagnostics","route","logger","chunks","Logger","this","warn","detail","message","warned","inspectShell","header","footer","includes","inspectRouterState","loaderData","actionData","kind","data","inspectState","state","inspectOnResponse","append","push","complete","join","markers","Map","count","marker","set","get","markup","replace","_tag","opening","content","match","matchAll","attribute","total"],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.js","sources":["../../src/services/diagnostics.ts"],"sourcesContent":[null],"names":["OUTLET","HYDRATION","warnedKey","Symbol","for","registry","globalThis","isDiagnosticsEnabled","enabled","env","process","undefined","SSR_BOOST_DIAGNOSTICS","NODE_ENV","formatDiagnostic","code","sentence","toLowerCase","splitHtmlShell","html","file","outlet","parts","split","length","Error","JSON","stringify","valueType","value","bigint","symbol","prototype","Object","getPrototypeOf","name","constructor","walkSerializable","report","path","ancestors","Set","streamed","type","Promise","Date","RegExp","reason","object","Map","Array","isArray","has","add","entries","flatMap","key","child","index","map","String","suffix","test","delete","Diagnostics","route","logger","chunks","Logger","this","warn","detail","message","warned","inspectShell","header","footer","includes","inspectRouterState","loaderData","actionData","kind","data","streamAborted","count","inspectStreamValue","id","inspectState","state","inspectOnResponse","append","push","complete","join","markers","marker","set","get","markup","replace","_tag","opening","content","match","matchAll","attribute","total"],"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":"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"}
@@ -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":"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"}
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":"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,EAenD,OAbAU,EAAOE,QAASC,IACd,MAAMC,EAAW,CAACH,EAAOI,OAAOF,EAAMF,QAAQK,OAAOxB,SAASyB,KAAK,KAC7DC,EAAUL,EAAMM,IAAML,EAExBD,EAAMO,SACRpB,EAAOkB,GAAWlC,KAAKb,cAAckD,WAAWR,EAAMO,SAGpDP,EAAMS,SAASf,OAAS,GAC1BgB,OAAOC,OAAOxB,EAAQhB,KAAKyB,iBAAiBI,EAAMS,SAAUR,MAIzDd,CACT,CAKU,cAAAyB,CACRC,EACAC,EACAC,GAAW,GAEX,MAEMC,EAFa,IAAKF,GAAQE,QAAU,MAASF,GAAQG,KAAO,GAAKH,GAAQI,MAErDC,OACxB,CAACC,EAAKC,KACJ,GAAIA,EAAO,CACT,MAAMC,EAAOnD,KAAKoD,aAAaF,GACzBG,EAAUV,EAAOU,SAAWV,EAAOI,OAASG,EAGlD,GAAIC,EAAM,CACR,MAAMG,EAAW1D,EAAK2D,MAAMC,UAAU,GAAGxD,KAAKR,YAAY0D,KACpDO,EAAmBzD,KAAKP,iBAAiB6D,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,IAAMrD,KAAKkE,eAAehB,GAC5CC,OACAP,WACAuB,WAAYd,EAEhB,CACF,CAEA,OAAOJ,GAET,CAAA,GAcF,OAVIN,GAAQyB,SAAS7C,QACnBoB,EAAOyB,QAAQxC,QAASyC,IACtB,MAAMC,EAAe5B,EAAS2B,GAE1BC,GACF/B,OAAOC,OAAOK,EAAQ7C,KAAKyC,eAAeC,EAAU4B,GAAc,MAKjEzB,CACT,CAKO,mBAAA0B,GACL,MAAM7B,EAAW1C,KAAKW,qBAChB6D,EAAgB,IAAIC,EAAYzE,KAAKd,OAAQc,KAAKT,aAClDmF,EAAc1E,KAAKyB,iBAAiB+C,EAActD,SAElDyD,EAAY3E,KAAKb,cAAcyF,mBAC/B5D,EAAmC,CAAA,EAGzCuB,OAAOsC,QAAQH,GAAa9C,QAAQ,EAAEM,EAAS4C,MAC7C,MAAMC,EAAeJ,EAAUK,KAAMC,QAGLC,IAAvBxC,EAFU,GAAGoC,IAAYG,MAK5BE,EAAYzC,EADA,GAAGoC,IAAYC,GAAgB,MAGjD/D,EAAOkB,GAAWlC,KAAKoF,WAAW7C,OAAO8C,OAAOrF,KAAKyC,eAAeC,EAAUyC,OAGhFrE,EAAGwE,cAActF,KAAKU,wBAAyBO,KAAKsE,UAAUvE,EAAQ,KAAM,GAAI,CAC9EI,SAAU,SAEd,CAKU,SAAAoE,CAAU9D,GAClB,OAAO1B,KAAKO,MAAQP,KAAKyF,aAAa/D,GAAU/B,MAAM6F,UAAU9D,EAClE,CAKU,aAAAgE,CAAchE,GACtB,MAAMiE,EACHjE,GACGkE,IAAI,EAAG/D,WAAY7B,KAAKb,cAAckD,WAAYR,GAAuBgE,QAAQ,IAClF7D,OAAOxB,UAAyB,GAE/BmE,EAAY3E,KAAKb,cAAcyF,mBAC/BkB,EAAe9F,KAAKd,OAAO6G,kBAC3BC,EAAU,CACdF,GAAcG,YAAc,YAC5BH,GAAcI,YAAc,aAC5BN,IAAK7C,GAASnD,EAAKC,QAAQG,KAAKZ,KAAM2D,IAClCoD,EAAwB,GAa9B,MAXA,IAAIH,KAAYL,GAAU/D,QAASwE,IACjC,IAAK,MAAMC,KAAO1B,EAAW,CAC3B,MAAMhC,EAAS3C,KAAKd,OAAOe,WAAWqG,YAAYC,cAAc,GAAGH,IAAWC,KAE9E,GAAI1D,EAAQ,CACVwD,EAAQK,KAAK7D,GACb,KACF,CACF,IAGKwD,CACT,CAKO,sBAAMM,CAAiB/E,GAC5B,MAAMgF,EAAO1G,KAAKd,OAAOe,UAEzB,IAAKyG,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,IAAIpH,KAAK0F,cAAchE,GAAQkE,IAAIiB,GACnD,CAKU,YAAApB,CAAa/D,GACrB,MAAMmB,EAASN,OAAOC,OACpB,CAAA,KACGxC,KAAK0F,cAAchE,GAAQkE,IAAKjD,GAAW3C,KAAKsH,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,EAAQxC,QAAS8F,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,OAAQjE,KAAKkE,eAAenB,GAC5BmF,QAAUjH,KAAKC,MAAM,cAAc2G,OAAgCI,MACnErF,SAAUpC,QAAQ+G,EAAYE,MAC9BtD,WAAW,EAEf,CAAE,MACAgE,QAAQC,KAAKC,EAAMC,aAAa,0BAA2BvF,GAC7D,CAEJ,MACEF,EAAS,IACJA,KACA7C,KAAKsH,gBAAgBI,EAAWH,MAKlC1E,CACT,CAKU,cAAAqB,CAAehB,GAGvB,OAFalD,KAAKoD,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"}