@useavalon/avalon 0.1.32 → 0.1.34
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
export async function createMDXPlugin(e={}){let{remarkPlugins:t=[],rehypePlugins:n=[],development:r=!1,jsxImportSource:i=`preact`,syntaxHighlighting:a=!0}=e;try{let{default:e}=await import(`@mdx-js/rollup`),{default:o}=await import(`remark-frontmatter`),{default:s}=await import(`remark-mdx-frontmatter`),{default:c}=await import(`remark-gfm`),l=[];if(a)try{let{default:e}=await import(`rehype-highlight`);l.push(e)}catch{console.warn(`[avalon:mdx] rehype-highlight not installed, syntax highlighting disabled. Install it with: npm install rehype-highlight`)}
|
|
1
|
+
export async function createMDXPlugin(e={}){let{remarkPlugins:t=[],rehypePlugins:n=[],development:r=!1,jsxImportSource:i=`preact`,syntaxHighlighting:a=!0}=e;try{let{default:e}=await import(`@mdx-js/rollup`),{default:o}=await import(`remark-frontmatter`),{default:s}=await import(`remark-mdx-frontmatter`),{default:c}=await import(`remark-gfm`),l=[];if(a)try{let{default:e}=await import(`rehype-highlight`);l.push(e)}catch{console.warn(`[avalon:mdx] rehype-highlight not installed, syntax highlighting disabled. Install it with: npm install rehype-highlight`)}l.push(...n);let u=e({remarkPlugins:[o,s,c,...t],rehypePlugins:l,jsxImportSource:i,development:r,format:`mdx`});return u.sharedDuringBuild=!0,[u]}catch(e){let t=e instanceof Error?e.message:String(e);return console.error(`❌ Failed to configure MDX plugin:`,t),console.warn(`💡 Install missing dependencies or check import map`),console.warn(`⚠️ MDX plugin disabled - .mdx files will not be processed`),[]}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{DEFAULT_NITRO_CONFIG as e,VALID_V3_PRESETS as t}from"./config.js";export const DEFAULT_BUILD_CONFIG={mode:`both`,clientOutDir:`dist/client`,serverOutDir:`dist/server`,sourcemap:!0,minify:`oxc`,target:`es2020`,ssr:!0,preset:`node_server`,verbose:!1};export const PRESET_OUTPUT_CONFIGS={node_server:{outputDir:`.output`,serverEntry:`server/index.mjs`,supportsStreaming:!0,bundleDependencies:!1},node_middleware:{outputDir:`.output`,serverEntry:`server/index.mjs`,supportsStreaming:!0,bundleDependencies:!1},vercel:{outputDir:`.vercel/output`,serverEntry:`functions/render.func/index.mjs`,supportsStreaming:!0,bundleDependencies:!0,additionalFiles:[`config.json`]},cloudflare_module:{outputDir:`dist`,serverEntry:`server/index.mjs`,supportsStreaming:!1,bundleDependencies:!0},cloudflare_pages:{outputDir:`dist`,serverEntry:`_worker.js`,supportsStreaming:!1,bundleDependencies:!0,additionalFiles:[`_routes.json`]},deno_deploy:{outputDir:`.output`,serverEntry:`server/index.ts`,supportsStreaming:!0,bundleDependencies:!1},deno_server:{outputDir:`.output`,serverEntry:`server/index.ts`,supportsStreaming:!0,bundleDependencies:!1},netlify_functions:{outputDir:`.netlify`,serverEntry:`functions-internal/render.mjs`,supportsStreaming:!0,bundleDependencies:!0},netlify:{outputDir:`.netlify`,serverEntry:`functions-internal/server/index.mjs`,supportsStreaming:!0,bundleDependencies:!0},netlify_edge:{outputDir:`.netlify/edge-functions`,serverEntry:`render.js`,supportsStreaming:!0,bundleDependencies:!0},aws_lambda:{outputDir:`.output`,serverEntry:`server/index.mjs`,supportsStreaming:!1,bundleDependencies:!0},azure_swa:{outputDir:`.output`,serverEntry:`server/index.mjs`,supportsStreaming:!1,bundleDependencies:!0},firebase_functions:{outputDir:`.output`,serverEntry:`server/index.mjs`,supportsStreaming:!0,bundleDependencies:!0},render_com:{outputDir:`.output`,serverEntry:`server/index.mjs`,supportsStreaming:!0,bundleDependencies:!1},static:{outputDir:`dist`,serverEntry:``,supportsStreaming:!1,bundleDependencies:!1},browser:{outputDir:`dist`,serverEntry:``,supportsStreaming:!1,bundleDependencies:!0}};export function createClientBuildConfig(e,t={}){let r={...DEFAULT_BUILD_CONFIG,...t};return{outDir:r.clientOutDir,emptyOutDir:!0,sourcemap:r.sourcemap,minify:r.minify,target:r.target,rolldownOptions:{output:{entryFileNames:`[name].[hash].js`,chunkFileNames:`chunks/[name].[hash].js`,assetFileNames:`assets/[name].[hash].[ext]`,codeSplitting:{groups:[{name:`vendor-react`,test:/node_modules\/(react|react-dom)/},{name:`vendor-vue`,test:/node_modules\/(vue|@vue)/},{name:`vendor-svelte`,test:/node_modules\/svelte/},{name:`vendor-preact`,test:/node_modules\/preact/},{name:`vendor-solid`,test:/node_modules\/solid-js/},{name:`vendor-lit`,test:/node_modules\/(lit|@lit)/},{name:`vendor`,test:/node_modules/},{name:`islands`,test:/\/islands\//}]}}},reportCompressedSize:!e.isDev,cssCodeSplit:!0}}export function createServerBuildConfig(t,i,a={}){let s={...DEFAULT_BUILD_CONFIG,...a},c=i.preset??e.preset,l=PRESET_OUTPUT_CONFIGS[c]??PRESET_OUTPUT_CONFIGS.node_server;return{outDir:s.serverOutDir,emptyOutDir:!0,sourcemap:s.sourcemap,minify:s.minify,target:s.target,ssr:!0,rolldownOptions:{input:{index:`./server/index.ts`},output:{format:`esm`,entryFileNames:`[name].mjs`,chunkFileNames:`chunks/[name].[hash].mjs`,preserveModules:!l.bundleDependencies},external:l.bundleDependencies?[]:o(c)}}}function o(e){let t=[/^node:/,/^deno:/];switch(e){case`deno_deploy`:case`deno_server`:return[...t];case`node_server`:return[...t,/^[a-z@]/i];default:return t}}export function getPresetOutputConfig(e){return PRESET_OUTPUT_CONFIGS[e]??PRESET_OUTPUT_CONFIGS.node_server}export function presetSupportsStreaming(e){return getPresetOutputConfig(e).supportsStreaming}export function createCombinedBuildConfig(t,n,r={}){let a=n.preset??e.preset,o=getPresetOutputConfig(a);return{build:{...createClientBuildConfig(t,r),outDir:o.outputDir},define:{__DEV__:!1,__PROD__:!0,"process.env.NODE_ENV":JSON.stringify(`production`),...u(a,o)}}}function u(e,t){let n={__NITRO_PRESET__:JSON.stringify(e),__SUPPORTS_STREAMING__:JSON.stringify(t.supportsStreaming)};if(t.env)for(let[e,r]of Object.entries(t.env))n[`process.env.${e}`]=JSON.stringify(r);return n}export function createNitroBuildPlugin(t,n){let r=n.preset??e.preset,i=getPresetOutputConfig(r);return{name:`avalon:nitro-build`,enforce:`post`,config(e,{command:t}){if(t===`build`)return{define:{__DEV__:!1,__PROD__:!0,"process.env.NODE_ENV":JSON.stringify(`production`),...u(r,i)}}},buildStart(){t.verbose&&(console.log(`🚀 Avalon Nitro build starting...`),console.log(` Preset: ${r}`),console.log(` Output: ${i.outputDir}`),console.log(` Streaming: ${i.supportsStreaming}`))},writeBundle(){t.verbose&&console.log(`✅ Avalon client build complete`)},closeBundle(){t.verbose&&(console.log(`📦 Avalon build finished`),console.log(` Output directory: ${i.outputDir}`))
|
|
1
|
+
import{DEFAULT_NITRO_CONFIG as e,VALID_V3_PRESETS as t}from"./config.js";export const DEFAULT_BUILD_CONFIG={mode:`both`,clientOutDir:`dist/client`,serverOutDir:`dist/server`,sourcemap:!0,minify:`oxc`,target:`es2020`,ssr:!0,preset:`node_server`,verbose:!1};export const PRESET_OUTPUT_CONFIGS={node_server:{outputDir:`.output`,serverEntry:`server/index.mjs`,supportsStreaming:!0,bundleDependencies:!1},node_middleware:{outputDir:`.output`,serverEntry:`server/index.mjs`,supportsStreaming:!0,bundleDependencies:!1},vercel:{outputDir:`.vercel/output`,serverEntry:`functions/render.func/index.mjs`,supportsStreaming:!0,bundleDependencies:!0,additionalFiles:[`config.json`]},cloudflare_module:{outputDir:`dist`,serverEntry:`server/index.mjs`,supportsStreaming:!1,bundleDependencies:!0},cloudflare_pages:{outputDir:`dist`,serverEntry:`_worker.js`,supportsStreaming:!1,bundleDependencies:!0,additionalFiles:[`_routes.json`]},deno_deploy:{outputDir:`.output`,serverEntry:`server/index.ts`,supportsStreaming:!0,bundleDependencies:!1},deno_server:{outputDir:`.output`,serverEntry:`server/index.ts`,supportsStreaming:!0,bundleDependencies:!1},netlify_functions:{outputDir:`.netlify`,serverEntry:`functions-internal/render.mjs`,supportsStreaming:!0,bundleDependencies:!0},netlify:{outputDir:`.netlify`,serverEntry:`functions-internal/server/index.mjs`,supportsStreaming:!0,bundleDependencies:!0},netlify_edge:{outputDir:`.netlify/edge-functions`,serverEntry:`render.js`,supportsStreaming:!0,bundleDependencies:!0},aws_lambda:{outputDir:`.output`,serverEntry:`server/index.mjs`,supportsStreaming:!1,bundleDependencies:!0},azure_swa:{outputDir:`.output`,serverEntry:`server/index.mjs`,supportsStreaming:!1,bundleDependencies:!0},firebase_functions:{outputDir:`.output`,serverEntry:`server/index.mjs`,supportsStreaming:!0,bundleDependencies:!0},render_com:{outputDir:`.output`,serverEntry:`server/index.mjs`,supportsStreaming:!0,bundleDependencies:!1},static:{outputDir:`dist`,serverEntry:``,supportsStreaming:!1,bundleDependencies:!1},browser:{outputDir:`dist`,serverEntry:``,supportsStreaming:!1,bundleDependencies:!0}};export function createClientBuildConfig(e,t={}){let r={...DEFAULT_BUILD_CONFIG,...t};return{outDir:r.clientOutDir,emptyOutDir:!0,sourcemap:r.sourcemap,minify:r.minify,target:r.target,rolldownOptions:{output:{entryFileNames:`[name].[hash].js`,chunkFileNames:`chunks/[name].[hash].js`,assetFileNames:`assets/[name].[hash].[ext]`,codeSplitting:{groups:[{name:`vendor-react`,test:/node_modules\/(react|react-dom)/},{name:`vendor-vue`,test:/node_modules\/(vue|@vue)/},{name:`vendor-svelte`,test:/node_modules\/svelte/},{name:`vendor-preact`,test:/node_modules\/preact/},{name:`vendor-solid`,test:/node_modules\/solid-js/},{name:`vendor-lit`,test:/node_modules\/(lit|@lit)/},{name:`vendor`,test:/node_modules/},{name:`islands`,test:/\/islands\//}]}}},reportCompressedSize:!e.isDev,cssCodeSplit:!0}}export function createServerBuildConfig(t,i,a={}){let s={...DEFAULT_BUILD_CONFIG,...a},c=i.preset??e.preset,l=PRESET_OUTPUT_CONFIGS[c]??PRESET_OUTPUT_CONFIGS.node_server;return{outDir:s.serverOutDir,emptyOutDir:!0,sourcemap:s.sourcemap,minify:s.minify,target:s.target,ssr:!0,rolldownOptions:{input:{index:`./server/index.ts`},output:{format:`esm`,entryFileNames:`[name].mjs`,chunkFileNames:`chunks/[name].[hash].mjs`,preserveModules:!l.bundleDependencies},external:l.bundleDependencies?[]:o(c)}}}function o(e){let t=[/^node:/,/^deno:/];switch(e){case`deno_deploy`:case`deno_server`:return[...t];case`node_server`:return[...t,/^[a-z@]/i];default:return t}}export function getPresetOutputConfig(e){return PRESET_OUTPUT_CONFIGS[e]??PRESET_OUTPUT_CONFIGS.node_server}export function presetSupportsStreaming(e){return getPresetOutputConfig(e).supportsStreaming}export function createCombinedBuildConfig(t,n,r={}){let a=n.preset??e.preset,o=getPresetOutputConfig(a);return{build:{...createClientBuildConfig(t,r),outDir:o.outputDir},define:{__DEV__:!1,__PROD__:!0,"process.env.NODE_ENV":JSON.stringify(`production`),...u(a,o)}}}function u(e,t){let n={__NITRO_PRESET__:JSON.stringify(e),__SUPPORTS_STREAMING__:JSON.stringify(t.supportsStreaming)};if(t.env)for(let[e,r]of Object.entries(t.env))n[`process.env.${e}`]=JSON.stringify(r);return n}export function createNitroBuildPlugin(t,n){let r=n.preset??e.preset,i=getPresetOutputConfig(r);return{name:`avalon:nitro-build`,enforce:`post`,config(e,{command:t}){if(t===`build`)return{define:{__DEV__:!1,__PROD__:!0,"process.env.NODE_ENV":JSON.stringify(`production`),...u(r,i)}}},buildStart(){t.verbose&&(console.log(`🚀 Avalon Nitro build starting...`),console.log(` Preset: ${r}`),console.log(` Output: ${i.outputDir}`),console.log(` Streaming: ${i.supportsStreaming}`))},writeBundle(){t.verbose&&console.log(`✅ Avalon client build complete`)},closeBundle(){t.verbose&&(console.log(`📦 Avalon build finished`),console.log(` Output directory: ${i.outputDir}`))}}}export function validateBuildConfig(e){let n=[];return e.preset&&(t.includes(e.preset)||n.push(`Unknown preset: ${e.preset}. Valid presets: ${t.join(`, `)}`)),e.mode&&![`client`,`server`,`both`].includes(e.mode)&&n.push(`Invalid build mode: ${e.mode}. Must be 'client', 'server', or 'both'`),e.sourcemap!==void 0&&typeof e.sourcemap!=`boolean`&&![`inline`,`hidden`].includes(e.sourcemap)&&n.push(`Invalid sourcemap option: ${e.sourcemap}`),{valid:n.length===0,errors:n}}export const DEFAULT_SOURCEMAP_CONFIG={enabled:!0,type:!0,includeContent:!0};export function createSourceMapConfig(e,t){return t?{enabled:!0,type:!0,includeContent:!0}:e.includes(`edge`)||e.includes(`cloudflare`)||e.includes(`lambda`)?{enabled:!0,type:`hidden`,includeContent:!1}:{enabled:!0,type:!0,includeContent:!0}}export function getViteSourceMapOption(e){return e.enabled?e.type:!1}export function createSourceMapPlugin(e){return{name:`avalon:sourcemap`,enforce:`post`,config(t,{command:n}){if(n===`build`)return{build:{sourcemap:getViteSourceMapOption(e)},...e.sourceRoot&&{rolldownOptions:{output:{sourcemapPathTransform:t=>`${e.sourceRoot}/${t}`}}}}},generateBundle(t,n){if(!e.enabled)return;let r=Object.keys(n).filter(e=>e.endsWith(`.map`)).length;r>0&&globalThis.__avalonConfig?.verbose&&console.log(`📍 Generated ${r} source map(s)`)}}}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import{nitro as e}from"nitro/vite";import{stat as t}from"node:fs/promises";import{existsSync as n}from"node:fs";import{createRequire as r}from"node:module";import{dirname as i,join as a}from"node:path";import{createNitroConfig as o}from"../nitro/config.js";import{createNitroBuildPlugin as s,createIslandManifestPlugin as c,createSourceMapPlugin as l,createSourceMapConfig as u}from"../nitro/index.js";import{discoverScopedMiddleware as d,executeScopedMiddleware as f,clearMiddlewareCache as p}from"../middleware/index.js";import{generateErrorPage as m,generateFallback404 as h}from"../render/error-pages.js";import{collectCssFromModuleGraph as g,injectSsrCss as _}from"../render/collect-css.js";import{getUniversalCSSForHead as v}from"../islands/universal-css-collector.js";import{getUniversalHeadForInjection as y}from"../islands/universal-head-collector.js";function b(e){let t=a(i(r(import.meta.url).resolve(`@useavalon/avalon`)),e);if(e.endsWith(`.ts`)&&!n(t)){let e=t.replace(/\.ts$/,`.js`);if(n(e))return e}return t}function x(e,t){let o=a(i(r(a(process.cwd(),`package.json`)).resolve(`@useavalon/${e}`)),t);if(t.endsWith(`.ts`)&&!n(o)){let e=o.replace(/\.ts$/,`.js`);if(n(e))return e}return o}export const VIRTUAL_MODULE_IDS={PAGE_ROUTES:`virtual:avalon/page-routes`,PAGE_LOADER:`virtual:avalon/page-loader`,ISLAND_MANIFEST:`virtual:avalon/island-manifest`,RUNTIME_CONFIG:`virtual:avalon/runtime-config`,CONFIG:`virtual:avalon/config`};export const RESOLVED_VIRTUAL_IDS={PAGE_ROUTES:`\0`+VIRTUAL_MODULE_IDS.PAGE_ROUTES,PAGE_LOADER:`\0`+VIRTUAL_MODULE_IDS.PAGE_LOADER,ISLAND_MANIFEST:`\0`+VIRTUAL_MODULE_IDS.ISLAND_MANIFEST,RUNTIME_CONFIG:`\0`+VIRTUAL_MODULE_IDS.RUNTIME_CONFIG,CONFIG:`\0`+VIRTUAL_MODULE_IDS.CONFIG};export function createNitroIntegration(t,n={}){let r=o(n,t),i={preset:r.preset,serverDir:n.serverDir??r.serverDir??`./server`,routeRules:r.routeRules,runtimeConfig:r.runtimeConfig,renderer:n.renderer===!1?!1:r.renderer,compatibilityDate:r.compatibilityDate,scanDirs:[`.`]};r.publicRuntimeConfig&&(i.publicRuntimeConfig=r.publicRuntimeConfig),r.publicAssets&&(i.publicAssets=r.publicAssets),r.compressPublicAssets&&(i.compressPublicAssets=r.compressPublicAssets),r.serverEntry&&(i.serverEntry=r.serverEntry);let a=e(i),d=createNitroCoordinationPlugin({avalonConfig:t,nitroConfig:n,verbose:t.verbose}),f=createVirtualModulesPlugin({avalonConfig:t,nitroConfig:n,verbose:t.verbose}),p=s(t,n),m=c(t,{verbose:t.verbose,generatePreloadHints:!0}),h=l(u(n.preset??`node_server`,t.isDev));return{nitroOptions:r,plugins:[...Array.isArray(a)?a:[a],d,f,p,m,h]}}export function createNitroCoordinationPlugin(e){let{avalonConfig:t,verbose:n}=e;return{name:`avalon:nitro-coordination`,enforce:`pre`,configResolved(e){globalThis.__avalonConfig=t},configureServer(e){globalThis.__viteDevServer=e;let r=null;async function i(){return r||=await d({baseDir:`${e.config.root||process.cwd()}/src`,devMode:!1}),r}function a(){r=null}A(e,t,n,a),i().catch(e=>{console.warn(`[middleware] Failed to discover middleware:`,e)}),O(e,t.integrations,n).catch(e=>{console.error(`[prewarm] Core modules pre-warm failed:`,e)}),e.middlewares.use(async(r,a,o)=>{let s=r.url||`/`;if(s.endsWith(`.html`)&&(s=s.slice(0,-5)||`/`),s===`/index`&&(s=`/`),s.startsWith(`/@`)||s.startsWith(`/__`)||s.startsWith(`/node_modules/`)||s.startsWith(`/src/client/`)||s.startsWith(`/packages/`)||s.includes(`.`)&&!s.endsWith(`/`)||s.startsWith(`/api/`))return o();try{if(await E(e,s,r,a,i,n)||await R(e,s,t,a))return;let o=await z(e,s,t);if(o){a.statusCode=200,a.setHeader(`Content-Type`,`text/html`),a.end(o);return}await D(e,s,a,t)}catch(e){console.error(`[SSR Error]`,e),a.statusCode=500,a.setHeader(`Content-Type`,`text/html`),a.end(m(e))}})},buildStart(){}}}async function E(e,t,n,r,i,a){let o=performance.now(),s=await i();if(s.length===0)return!1;let c={};for(let[e,t]of Object.entries(n.headers))typeof t==`string`?c[e]=t:Array.isArray(t)&&(c[e]=t.join(`, `));let l=`http://${n.headers.host||`localhost`}${t}`,u=await f({url:l,method:n.method||`GET`,path:t,node:{req:n,res:r},req:new Request(l,{method:n.method||`GET`,headers:c}),context:{}},s,{devMode:!1}),d=performance.now()-o;return d>100&&console.warn(`⚠️ Slow middleware: ${d.toFixed(0)}ms for ${t}`),u?(r.statusCode=u.status,u.headers.forEach((e,t)=>{r.setHeader(t,e)}),r.end(await u.text()),!0):!1}async function D(e,t,n,r){try{let{discoverErrorPages:i,getErrorPageModule:a,generateDefaultErrorPage:o}=await import(`../nitro/error-handler.js`),s=a(404,await i({isDev:r.isDev,pagesDir:r.pagesDir,loadPageModule:async t=>await e.ssrLoadModule(t)}));if(s?.default&&typeof s.default==`function`){let{renderToHtml:e}=await import(`../render/ssr.js`),r=s.default,i=await e({component:()=>r({statusCode:404,message:`Page not found: ${t}`,url:t})},{});n.statusCode=404,n.setHeader(`Content-Type`,`text/html`),n.end(i);return}let c=o(404,`Page not found: ${t}`,r.isDev);n.statusCode=404,n.setHeader(`Content-Type`,`text/html`),n.end(c)}catch{n.statusCode=404,n.setHeader(`Content-Type`,`text/html`),n.end(h(t))}}async function O(e,t,n){let r=performance.now(),i=[{path:b(`src/render/ssr.ts`),assignTo:`ssr`},{path:b(`src/core/layout/enhanced-layout-resolver.ts`),assignTo:`layout`},{path:b(`src/middleware/index.ts`),assignTo:null},...t.map(e=>({path:x(e,`server/renderer.ts`),assignTo:null}))],a=(await Promise.allSettled(i.map(async({path:t,assignTo:n})=>{let r=await e.ssrLoadModule(t);n===`ssr`&&(I=r),n===`layout`&&(L=r)}))).filter(e=>e.status===`fulfilled`).length,o=performance.now()-r;n&&a>0&&console.log(`🔥 SSR ready in ${o.toFixed(0)}ms (${a}/${i.length} core modules)`)}export function createVirtualModulesPlugin(e){let{avalonConfig:t,nitroConfig:n,verbose:r}=e;return{name:`avalon:nitro-virtual-modules`,enforce:`pre`,resolveId(e){return e===VIRTUAL_MODULE_IDS.PAGE_ROUTES?RESOLVED_VIRTUAL_IDS.PAGE_ROUTES:e===VIRTUAL_MODULE_IDS.PAGE_LOADER?RESOLVED_VIRTUAL_IDS.PAGE_LOADER:e===VIRTUAL_MODULE_IDS.ISLAND_MANIFEST?RESOLVED_VIRTUAL_IDS.ISLAND_MANIFEST:e===VIRTUAL_MODULE_IDS.RUNTIME_CONFIG?RESOLVED_VIRTUAL_IDS.RUNTIME_CONFIG:e===VIRTUAL_MODULE_IDS.CONFIG?RESOLVED_VIRTUAL_IDS.CONFIG:null},async load(e){return e===RESOLVED_VIRTUAL_IDS.PAGE_ROUTES?await j(t,r):e===RESOLVED_VIRTUAL_IDS.PAGE_LOADER?await M(t,r):e===RESOLVED_VIRTUAL_IDS.ISLAND_MANIFEST?N():e===RESOLVED_VIRTUAL_IDS.RUNTIME_CONFIG?P(t,n):e===RESOLVED_VIRTUAL_IDS.CONFIG?generateConfigModule(t,n):null},handleHotUpdate({file:e,server:n}){if(e.includes(t.pagesDir)){let e=n.moduleGraph.getModuleById(RESOLVED_VIRTUAL_IDS.PAGE_ROUTES);e&&n.moduleGraph.invalidateModule(e)}if(e.includes(`vite.config`)||e.includes(`avalon.config`)||e.includes(`nitro.config`)){let e=n.moduleGraph.getModuleById(RESOLVED_VIRTUAL_IDS.CONFIG);e&&n.moduleGraph.invalidateModule(e)}}}}function A(e,t,n,r){e.watcher.on(`change`,e=>{e.includes(`_middleware`)&&(p(),r?.()),(e.includes(`/render/`)||e.includes(`/layout/`)||e.includes(`/islands/`))&&(I=null,L=null),(e.includes(`/layouts/`)||e.includes(`_layout`))&&globalThis.__avalonLayoutResolver?.clearCache?.()}),e.watcher.on(`add`,e=>{e.includes(`_middleware`)&&(p(),r?.())}),e.watcher.on(`unlink`,e=>{e.includes(`_middleware`)&&(p(),r?.())})}async function j(e,t){try{let{getAllPageDirs:t}=await import(`./module-discovery.js`),{discoverPageRoutesFromMultipleDirs:n}=await import(`../nitro/route-discovery.js`),r=await n(await t(e.pagesDir,e.modules,process.cwd()),{developmentMode:e.isDev});return`export const pageRoutes = ${JSON.stringify(r,null,2)};\nexport default pageRoutes;\n`}catch{return`export const pageRoutes = [];
|
|
2
2
|
export default pageRoutes;
|
|
3
|
-
`}}async function M(e,t){try{let{getAllPageDirs:t}=await import(`./module-discovery.js`),{discoverPageRoutesFromMultipleDirs:n,matchRoutePattern:r}=await import(`../nitro/route-discovery.js`),i=await n(await t(e.pagesDir,e.modules,process.cwd()),{developmentMode:e.isDev}),a=[],o=[];for(let e=0;e<i.length;e++){let t=i[e],n=`page_${e}
|
|
3
|
+
`}}async function M(e,t){try{let{getAllPageDirs:t}=await import(`./module-discovery.js`),{discoverPageRoutesFromMultipleDirs:n,matchRoutePattern:r}=await import(`../nitro/route-discovery.js`),i=await n(await t(e.pagesDir,e.modules,process.cwd()),{developmentMode:e.isDev}),a=[],o=[];for(let e=0;e<i.length;e++){let t=i[e],n=`page_${e}`,r=t.filePath.replaceAll(`\\`,`/`);a.push(`import * as ${n} from '/${r}';`),o.push(` { pattern: ${JSON.stringify(t.pattern)}, params: ${JSON.stringify(t.params)}, module: ${n} }`)}return[...a,``,`const routes = [`,o.join(`,
|
|
4
4
|
`),`];`,``,`/**`,` * Match a pathname against discovered routes and return the page module.`,` * Uses the same pattern matching as Avalon's route discovery.`,` */`,`export function loadPage(pathname) {`,` const cleanPath = pathname.split('?')[0];`,` for (const route of routes) {`,` if (matchRoute(cleanPath, route.pattern, route.params)) {`,` return route.module;`,` }`,` }`,` return null;`,`}`,``,`function matchRoute(pathname, pattern, paramNames) {`,` // Exact match`,` if (pattern === pathname) return true;`,` // Normalize trailing slashes`,` const normPath = pathname === '/' ? '/' : pathname.replace(/\\/$/, '');`,` const normPattern = pattern === '/' ? '/' : pattern.replace(/\\/$/, '');`,` if (normPath === normPattern) return true;`,` // Dynamic segments: /users/:id matches /users/123`,` if (paramNames.length > 0) {`,` const patternParts = normPattern.split('/');`,` const pathParts = normPath.split('/');`,` if (patternParts.length !== pathParts.length) return false;`,` return patternParts.every((part, i) => part.startsWith(':') || part === pathParts[i]);`,` }`,` return false;`,`}`,``,`export default { loadPage, routes };`,``].join(`
|
|
5
5
|
`)}catch(e){return console.error(`[page-loader] Failed to generate page loader:`,e),`export function loadPage() { return null; }
|
|
6
6
|
export default { loadPage, routes: [] };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@useavalon/avalon",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.34",
|
|
4
4
|
"description": "Multi-framework islands architecture for the modern web",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
}
|
|
109
109
|
},
|
|
110
110
|
"dependencies": {
|
|
111
|
-
"@useavalon/core": "^0.1.
|
|
111
|
+
"@useavalon/core": "^0.1.6",
|
|
112
112
|
"@mdx-js/rollup": "^3.0.0",
|
|
113
113
|
"h3": "^2.0.1-rc.16",
|
|
114
114
|
"marked": "^17.0.4",
|