@useavalon/avalon 0.1.89 → 0.1.90

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 (107) hide show
  1. package/dist/src/build/integration-bundler-plugin.d.ts +1 -1
  2. package/dist/src/build/integration-detection-plugin.d.ts +1 -1
  3. package/dist/src/build/integration-detection-plugin.js +1 -1
  4. package/dist/src/build/integration-resolver-plugin.d.ts +1 -1
  5. package/dist/src/build/island-code-splitting.d.ts +1 -1
  6. package/dist/src/build/island-manifest.d.ts +2 -2
  7. package/dist/src/build/island-manifest.js +1 -1
  8. package/dist/src/build/island-types-generator.js +4 -4
  9. package/dist/src/build/mdx-island-transform.js +1 -1
  10. package/dist/src/build/mdx-plugin.d.ts +2 -2
  11. package/dist/src/build/prop-extractors/index.d.ts +3 -3
  12. package/dist/src/build/prop-extractors/index.js +1 -1
  13. package/dist/src/build/prop-extractors/lit.js +1 -1
  14. package/dist/src/build/prop-extractors/svelte.js +1 -1
  15. package/dist/src/build/sidecar-file-manager.js +1 -1
  16. package/dist/src/client/adapters/index.d.ts +1 -1
  17. package/dist/src/client/adapters/index.js +1 -1
  18. package/dist/src/client/css-hmr-handler.d.ts +2 -2
  19. package/dist/src/client/framework-adapter.d.ts +2 -2
  20. package/dist/src/client/hmr-coordinator.d.ts +6 -6
  21. package/dist/src/client/types/framework-runtime.d.ts +54 -55
  22. package/dist/src/client/types/vite-hmr.d.ts +35 -35
  23. package/dist/src/client/types/vite-virtual-modules.d.ts +56 -28
  24. package/dist/src/core/components/component-analyzer.d.ts +3 -3
  25. package/dist/src/core/components/component-analyzer.js +1 -1
  26. package/dist/src/core/components/component-detection.d.ts +8 -8
  27. package/dist/src/core/components/component-detection.js +1 -1
  28. package/dist/src/core/components/enhanced-framework-detector.d.ts +2 -2
  29. package/dist/src/core/components/enhanced-framework-detector.js +1 -1
  30. package/dist/src/core/components/framework-registry.d.ts +1 -1
  31. package/dist/src/core/integrations/index.d.ts +1 -1
  32. package/dist/src/core/integrations/index.js +1 -1
  33. package/dist/src/core/integrations/registry.js +1 -1
  34. package/dist/src/core/layout/enhanced-layout-resolver.d.ts +8 -8
  35. package/dist/src/core/layout/enhanced-layout-resolver.js +1 -1
  36. package/dist/src/core/layout/layout-cache-manager.d.ts +1 -1
  37. package/dist/src/core/layout/layout-composer.d.ts +2 -2
  38. package/dist/src/core/layout/layout-composer.js +1 -1
  39. package/dist/src/core/layout/layout-data-loader.d.ts +2 -2
  40. package/dist/src/core/layout/layout-discovery.d.ts +2 -2
  41. package/dist/src/core/layout/layout-discovery.js +1 -1
  42. package/dist/src/core/layout/layout-matcher.d.ts +1 -1
  43. package/dist/src/core/layout/layout-matcher.js +1 -1
  44. package/dist/src/core/layout/layout-types.d.ts +3 -3
  45. package/dist/src/islands/component-analysis.d.ts +4 -4
  46. package/dist/src/islands/component-analysis.js +1 -1
  47. package/dist/src/islands/css-utils.js +1 -1
  48. package/dist/src/islands/discovery/index.d.ts +9 -9
  49. package/dist/src/islands/discovery/index.js +1 -1
  50. package/dist/src/islands/discovery/registry.d.ts +1 -1
  51. package/dist/src/islands/discovery/resolver.d.ts +1 -1
  52. package/dist/src/islands/discovery/resolver.js +2 -2
  53. package/dist/src/islands/discovery/scanner.d.ts +1 -1
  54. package/dist/src/islands/discovery/scanner.js +1 -1
  55. package/dist/src/islands/discovery/validator.d.ts +1 -1
  56. package/dist/src/islands/discovery/validator.js +9 -9
  57. package/dist/src/islands/discovery/watcher.d.ts +1 -1
  58. package/dist/src/islands/discovery/watcher.js +1 -1
  59. package/dist/src/islands/framework-detection.d.ts +3 -3
  60. package/dist/src/islands/framework-detection.js +1 -1
  61. package/dist/src/islands/island.js +1 -1
  62. package/dist/src/islands/universal-head-collector.d.ts +2 -2
  63. package/dist/src/middleware/discovery.d.ts +1 -1
  64. package/dist/src/middleware/discovery.js +1 -1
  65. package/dist/src/middleware/executor.d.ts +2 -2
  66. package/dist/src/middleware/index.d.ts +3 -3
  67. package/dist/src/middleware/index.js +1 -1
  68. package/dist/src/middleware/types.d.ts +2 -2
  69. package/dist/src/nitro/error-handler.d.ts +2 -2
  70. package/dist/src/nitro/error-handler.js +2 -2
  71. package/dist/src/nitro/index.d.ts +8 -8
  72. package/dist/src/nitro/index.js +1 -1
  73. package/dist/src/nitro/island-manifest.d.ts +1 -1
  74. package/dist/src/nitro/island-manifest.js +1 -1
  75. package/dist/src/nitro/middleware-adapter.d.ts +2 -2
  76. package/dist/src/nitro/types.d.ts +4 -4
  77. package/dist/src/render/isolated-ssr-renderer.d.ts +2 -2
  78. package/dist/src/render/isolated-ssr-renderer.js +1 -1
  79. package/dist/src/render/ssr.d.ts +5 -5
  80. package/dist/src/render/ssr.js +4 -4
  81. package/dist/src/schemas/api.d.ts +1 -1
  82. package/dist/src/schemas/core.d.ts +1 -1
  83. package/dist/src/schemas/index.d.ts +8 -8
  84. package/dist/src/schemas/index.js +1 -1
  85. package/dist/src/schemas/routing/index.d.ts +1 -1
  86. package/dist/src/schemas/routing/index.js +1 -1
  87. package/dist/src/schemas/routing.d.ts +4 -4
  88. package/dist/src/schemas/routing.js +1 -1
  89. package/dist/src/types/image.d.ts +38 -38
  90. package/dist/src/types/island-jsx.d.ts +16 -16
  91. package/dist/src/types/mdx.d.ts +2 -2
  92. package/dist/src/types/routing.d.ts +7 -7
  93. package/dist/src/types/routing.js +1 -1
  94. package/dist/src/types/virtual-modules.d.ts +1 -1
  95. package/dist/src/types/vite-env.d.ts +1 -1
  96. package/dist/src/vite-plugin/auto-discover.js +1 -1
  97. package/dist/src/vite-plugin/config.d.ts +1 -1
  98. package/dist/src/vite-plugin/image-optimization.d.ts +2 -2
  99. package/dist/src/vite-plugin/image-optimization.js +1 -1
  100. package/dist/src/vite-plugin/island-sidecar-plugin.js +1 -1
  101. package/dist/src/vite-plugin/module-discovery.js +1 -1
  102. package/dist/src/vite-plugin/plugin.d.ts +2 -2
  103. package/dist/src/vite-plugin/plugin.js +1 -1
  104. package/dist/src/vite-plugin/types.d.ts +1 -2
  105. package/package.json +3 -2
  106. package/dist/src/client/main-slim.js +0 -1
  107. package/dist/src/client/strategies.js +0 -1
@@ -1,4 +1,4 @@
1
- import{h as e}from"preact";import{render as t}from"preact-render-to-string";import{readFile as n}from"node:fs/promises";import{getUniversalCSSForHead as r}from"../islands/universal-css-collector.js";import{getUniversalHeadForInjection as i,injectSolidHydrationScriptIfNeeded as a}from"../islands/universal-head-collector.js";import{analyzeComponentContent as o}from"../core/components/component-analyzer.js";import{IsolatedSSRRenderer as s}from"./isolated-ssr-renderer.js";function c(e){let t=e;if(!(e.includes(`data-framework=`)||e.includes(`data-src=`)))return e;if(!e.includes(`data-universal-ssr="true"`)){let n=r(!0);n&&e.includes(`</head>`)&&(t=t.replace(`</head>`,`${n}\n</head>`))}let n=i(!0);if(n&&e.includes(`</head>`)&&(t=t.replace(`</head>`,` ${n}\n</head>`)),t=a(t),e.includes(`/src/client/main.js`)||e.includes(`main.js`))return t;let o=`<script type="module" src="/src/client/main.js"><\/script>`;return t.includes(`</body>`)?t.replace(`</body>`,`${o}\n</body>`):t+o}const l={solid:[`solid-js`,`SolidIsland`,`createSignal`,`.solid.`,`data-solid-hydrate`],vue:[`data-vue-hydrate`,`.vue`,`Vue`],svelte:[`data-framework="svelte"`,`.svelte`,`s-`]};let u=null;function d(){return u||=new s({enableStrictIsolation:!0,allowedCrossFrameworkImports:[`preact`,`preact-render-to-string`],errorHandling:`fallback`,debugLogging:process.env.NODE_ENV!==`production`}),u}function f(e){return{solid:l.solid.some(t=>e.includes(t)),vue:l.vue.some(t=>e.includes(t)),svelte:l.svelte.some(t=>e.includes(t))}}function p(e,t,n){let r=[],i=/^import\s[^'"]*['"]([^'"]+)['"]/gm,a=[],o;for(;(o=i.exec(t))!==null;)a.push(o[1]);let s=n;e.includes(`.solid.`)?s=`solid`:e.includes(`.preact.`)&&(s=`preact`);let c=new Map([[`preact`,[`solid-js`,`solid-js/web`,`vue`,`svelte`]],[`solid`,[`preact`,`preact-render-to-string`,`vue`,`svelte`]],[`vue`,[`preact`,`solid-js`,`svelte`]],[`svelte`,[`preact`,`solid-js`,`vue`]]]).get(s)||[];for(let t of a)for(let n of c)t.startsWith(n)&&r.push(`Cross-framework import detected: ${s} component (${e}) importing ${t}`);return r}function m(e,t){return t.type===`ssr-only`?e.replaceAll(/data-hydrate="[^"]*"\s*/g,``).replace(`>`,` data-render-strategy="${t.type}" data-ssr-reason="${t.reason}">`):e.replace(`>`,` data-render-strategy="${t.type}" data-hydrate-reason="${t.reason}">`)}async function h(e,t={}){let n=/(<[^>]*data-hydrate="([^"]*)"[^>]*>)/g,r=e,i=Array.from(e.matchAll(n));for(let e of i){let[n,i,a]=e;try{if(n.includes(`data-render-strategy`))continue;let e=await _(a,t);await g(a,t),r=r.replace(n,m(n,e)),t.logDecisions===!0&&(console.log(`[SSR Strategy] ${a} -> ${e.type.toUpperCase()}: ${e.reason}`),e.warnings&&e.warnings.length>0&&!t.suppressWarnings&&e.warnings.forEach(e=>console.warn(`[SSR Warning] ${a}: ${e}`)))}catch(e){console.warn(`Failed to analyze component ${a}:`,e);let t=n.replace(`>`,` data-render-strategy="hydrate" data-error="analysis-failed">`);r=r.replace(n,t)}}return r}async function g(e,t={}){try{let r,i=e;e.startsWith(`/`)&&(i=e.substring(1));let a=[i,`examples/${i.split(`/`).pop()}`,`src/islands/${i.split(`/`).pop()}`,`islands/${i.split(`/`).pop()}`],o=``;for(let e of a)try{r=await n(e,`utf-8`),o=e;break}catch{continue}if(!o||!r)return;let s=f(r),c=`preact`;s.solid?c=`solid`:s.vue?c=`vue`:s.svelte&&(c=`svelte`);let l=p(o,r,c);l.length>0&&!t.suppressWarnings&&l.forEach(e=>console.warn(`[Import Validation] ${e}`))}catch(n){t.logDecisions!==!1&&console.warn(`Import validation failed for ${e}:`,n)}}async function _(e,t={}){if(t.forceSSROnly)return{type:`ssr-only`,reason:`Explicitly configured for SSR-only rendering`};if(e.includes(`NoHydrate`)||e.includes(`Static`)||e.includes(`SSROnly`))return{type:`ssr-only`,reason:`Component name explicitly indicates SSR-only rendering`};if(t.detectScripts===!1)return{type:`hydrate`,reason:`Script detection disabled, defaulting to hydration`};try{let r,i=e;e.startsWith(`/`)&&(i=e.substring(1));let a=[i,`examples/${i.split(`/`).pop()}`,`src/islands/${i.split(`/`).pop()}`,`islands/${i.split(`/`).pop()}`],s=null;for(let e of a)try{r=await n(e,`utf-8`);let i={forceSSROnly:t.forceSSROnly,detectScripts:t.detectScripts,suppressWarnings:t.suppressWarnings,logDecisions:!1};s=o(e,r,i);break}catch{continue}return s?{type:s.decision.shouldHydrate?`hydrate`:`ssr-only`,reason:s.decision.reason,warnings:s.decision.warnings}:v(e)}catch(t){return console.warn(`Component analysis failed for ${e}:`,t),{type:`ssr-only`,reason:`Analysis failed, defaulting to SSR-only for safety`,warnings:[`Component analysis error: ${t instanceof Error?t.message:String(t)}`]}}}function v(e){return e.endsWith(`.vue`)||e.endsWith(`.svelte`)||e.endsWith(`.tsx`)||e.endsWith(`.jsx`)?{type:`ssr-only`,reason:`Framework component detected, defaulting to SSR-only (hydration requires explicit hydrate function)`}:{type:`ssr-only`,reason:`Unknown component type, defaulting to SSR-only for safety`}}function y(e){return e.meta?.map(({name:e,content:t})=>`<meta name="${e}" content="${t}">`).join(`
1
+ import{readFile as e}from"node:fs/promises";import{h as t}from"preact";import{render as n}from"preact-render-to-string";import{analyzeComponentContent as r}from"../core/components/component-analyzer.js";import{getUniversalCSSForHead as i}from"../islands/universal-css-collector.js";import{getUniversalHeadForInjection as a,injectSolidHydrationScriptIfNeeded as o}from"../islands/universal-head-collector.js";import{IsolatedSSRRenderer as s}from"./isolated-ssr-renderer.js";function c(e){let t=e;if(!(e.includes(`data-framework=`)||e.includes(`data-src=`)))return e;if(!e.includes(`data-universal-ssr="true"`)){let n=i(!0);n&&e.includes(`</head>`)&&(t=t.replace(`</head>`,`${n}\n</head>`))}let n=a(!0);if(n&&e.includes(`</head>`)&&(t=t.replace(`</head>`,` ${n}\n</head>`)),t=o(t),e.includes(`/src/client/main.js`)||e.includes(`main.js`))return t;let r=`<script type="module" src="/src/client/main.js"><\/script>`;return t.includes(`</body>`)?t.replace(`</body>`,`${r}\n</body>`):t+r}const l={solid:[`solid-js`,`SolidIsland`,`createSignal`,`.solid.`,`data-solid-hydrate`],vue:[`data-vue-hydrate`,`.vue`,`Vue`],svelte:[`data-framework="svelte"`,`.svelte`,`s-`]};let u=null;function d(){return u||=new s({enableStrictIsolation:!0,allowedCrossFrameworkImports:[`preact`,`preact-render-to-string`],errorHandling:`fallback`,debugLogging:process.env.NODE_ENV!==`production`}),u}function f(e){return{solid:l.solid.some(t=>e.includes(t)),vue:l.vue.some(t=>e.includes(t)),svelte:l.svelte.some(t=>e.includes(t))}}function p(e,t,n){let r=[],i=/^import\s[^'"]*['"]([^'"]+)['"]/gm,a=[];for(let e=i.exec(t);e!==null;e=i.exec(t))a.push(e[1]);let o=n;e.includes(`.solid.`)?o=`solid`:e.includes(`.preact.`)&&(o=`preact`);let s=new Map([[`preact`,[`solid-js`,`solid-js/web`,`vue`,`svelte`]],[`solid`,[`preact`,`preact-render-to-string`,`vue`,`svelte`]],[`vue`,[`preact`,`solid-js`,`svelte`]],[`svelte`,[`preact`,`solid-js`,`vue`]]]).get(o)||[];for(let t of a)for(let n of s)t.startsWith(n)&&r.push(`Cross-framework import detected: ${o} component (${e}) importing ${t}`);return r}function m(e,t){return t.type===`ssr-only`?e.replaceAll(/data-hydrate="[^"]*"\s*/g,``).replace(`>`,` data-render-strategy="${t.type}" data-ssr-reason="${t.reason}">`):e.replace(`>`,` data-render-strategy="${t.type}" data-hydrate-reason="${t.reason}">`)}async function h(e,t={}){let n=/(<[^>]*data-hydrate="([^"]*)"[^>]*>)/g,r=e,i=Array.from(e.matchAll(n));for(let e of i){let[n,i,a]=e;try{if(n.includes(`data-render-strategy`))continue;let e=await _(a,t);await g(a,t),r=r.replace(n,m(n,e)),t.logDecisions===!0&&(console.log(`[SSR Strategy] ${a} -> ${e.type.toUpperCase()}: ${e.reason}`),e.warnings&&e.warnings.length>0&&!t.suppressWarnings&&e.warnings.forEach(e=>console.warn(`[SSR Warning] ${a}: ${e}`)))}catch(e){console.warn(`Failed to analyze component ${a}:`,e);let t=n.replace(`>`,` data-render-strategy="hydrate" data-error="analysis-failed">`);r=r.replace(n,t)}}return r}async function g(t,n={}){try{let r,i=t;t.startsWith(`/`)&&(i=t.substring(1));let a=[i,`examples/${i.split(`/`).pop()}`,`src/islands/${i.split(`/`).pop()}`,`islands/${i.split(`/`).pop()}`],o=``;for(let t of a)try{r=await e(t,`utf-8`),o=t;break}catch{}if(!o||!r)return;let s=f(r),c=`preact`;s.solid?c=`solid`:s.vue?c=`vue`:s.svelte&&(c=`svelte`);let l=p(o,r,c);l.length>0&&!n.suppressWarnings&&l.forEach(e=>console.warn(`[Import Validation] ${e}`))}catch(e){n.logDecisions!==!1&&console.warn(`Import validation failed for ${t}:`,e)}}async function _(t,n={}){if(n.forceSSROnly)return{type:`ssr-only`,reason:`Explicitly configured for SSR-only rendering`};if(t.includes(`NoHydrate`)||t.includes(`Static`)||t.includes(`SSROnly`))return{type:`ssr-only`,reason:`Component name explicitly indicates SSR-only rendering`};if(n.detectScripts===!1)return{type:`hydrate`,reason:`Script detection disabled, defaulting to hydration`};try{let i,a=t;t.startsWith(`/`)&&(a=t.substring(1));let o=[a,`examples/${a.split(`/`).pop()}`,`src/islands/${a.split(`/`).pop()}`,`islands/${a.split(`/`).pop()}`],s=null;for(let t of o)try{i=await e(t,`utf-8`);let a={forceSSROnly:n.forceSSROnly,detectScripts:n.detectScripts,suppressWarnings:n.suppressWarnings,logDecisions:!1};s=r(t,i,a);break}catch{}return s?{type:s.decision.shouldHydrate?`hydrate`:`ssr-only`,reason:s.decision.reason,warnings:s.decision.warnings}:v(t)}catch(e){return console.warn(`Component analysis failed for ${t}:`,e),{type:`ssr-only`,reason:`Analysis failed, defaulting to SSR-only for safety`,warnings:[`Component analysis error: ${e instanceof Error?e.message:String(e)}`]}}}function v(e){return e.endsWith(`.vue`)||e.endsWith(`.svelte`)||e.endsWith(`.tsx`)||e.endsWith(`.jsx`)?{type:`ssr-only`,reason:`Framework component detected, defaulting to SSR-only (hydration requires explicit hydrate function)`}:{type:`ssr-only`,reason:`Unknown component type, defaulting to SSR-only for safety`}}function y(e){return e.meta?.map(({name:e,content:t})=>`<meta name="${e}" content="${t}">`).join(`
2
2
  `)||``}function b(e){return e.styles?.map(e=>`<link rel="stylesheet" href="${e}">`).join(`
3
3
  `)||``}function x(e){return e.scripts?.map(e=>typeof e==`string`?`<script src="${e}" defer><\/script>`:`<script ${e.src?`src="${e.src}"`:``} ${e.type?`type="${e.type}"`:``}>${e.content||``}<\/script>`).join(`
4
4
  `)||``}function S(e,t){return`
@@ -7,7 +7,7 @@ import{h as e}from"preact";import{render as t}from"preact-render-to-string";impo
7
7
  if (import.meta.hot) {
8
8
  import.meta.hot.accept();
9
9
  }
10
- <\/script>`:``}function w(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`).replaceAll(`"`,`&quot;`).replaceAll(`'`,`&#039;`)}function T(e,t,n){let a=process.env.NODE_ENV!==`production`,o=y(e),s=b(e),c=x(e),l=S(a,t),u=C(a,n),d=r(!0),f=i(!0);return`
10
+ <\/script>`:``}function w(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`).replaceAll(`"`,`&quot;`).replaceAll(`'`,`&#039;`)}function T(e,t,n){let r=process.env.NODE_ENV!==`production`,o=y(e),s=b(e),c=x(e),l=S(r,t),u=C(r,n),d=i(!0),f=a(!0);return`
11
11
  <head>
12
12
  <meta charset="utf-8">
13
13
  <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -29,13 +29,13 @@ import{h as e}from"preact";import{render as t}from"preact-render-to-string";impo
29
29
  ${d}
30
30
  ${f}
31
31
  ${c}${l}${u}
32
- </head>`.trim()}export async function renderToHtml(e,n={},r,i={}){try{let o,s;if(i.forceSSROnly===!0){let n=e.component();o=t(n instanceof Promise?await n:n),s=f(o)}else ({content:o,frameworks:s}=await O(e,i));o=await h(o,i);let c=`<!DOCTYPE html>\n<html lang="en">\n${T({...n,...e.options},s,r)}\n<body>\n${o}\n</body>\n</html>`;return c=a(c),c}catch(e){throw console.error(`Error rendering component:`,e),Error(`Failed to render component`)}}export async function renderToHtmlWithLayouts(e,t,n,r,i={},a,o={}){try{let s=e,c={default:e.component,layoutConfig:s.layoutConfig,loader:s.loader,frontmatter:e.frontmatter},l=await t.resolveAndRender(r,c,n);return l.handlers.length===0?await renderToHtml(e,i,a,o):E(await h(await j(await A(e,r,o),l,c,n,r),o),e,i,a)}catch(t){console.error(`Error rendering component with layouts:`,t);try{return await renderToHtml(e,i,a,o)}catch(e){throw console.error(`Fallback rendering also failed:`,e),Error(`Failed to render component with layouts and fallback failed`)}}}function E(e,t,n,r){if(e.trim().startsWith(`<!DOCTYPE html>`)||e.trim().startsWith(`<html`))return c(e);let i=f(e);return c(`<!DOCTYPE html>\n<html lang="en">\n${T({...n,...t.options},i,r)}\n<body>\n${e}\n</body>\n</html>`)}async function D(e,n,r,i){let a,o;if(i.forceSSROnly===!0){let n=e.component();a=t(n instanceof Promise?await n:n),o=f(a)}else ({content:a,frameworks:o}=await O(e,i));return a=await h(a,i),{head:T({...n,...e.options},o,r),content:a}}async function O(e,n){try{let t=await d().renderWithIsolation({componentPath:`route-component`,component:e.component});if(!t.success)throw Error(`Isolated rendering failed: ${t.errors.join(`, `)}`);return t.warnings.length>0&&!n.suppressWarnings&&t.warnings.forEach(e=>console.warn(`[SSR Isolation] ${e}`)),{content:t.html,frameworks:f(t.html)}}catch(n){console.warn(`[SSR] Isolated rendering failed, falling back to standard rendering:`,n);let r=e.component(),i=t(r instanceof Promise?await r:r);return{content:i,frameworks:f(i)}}}function k(e,t,n,r,i,a=`Streaming Error`,o=`route-component`){if(console.error(`[${a}]`,{message:e.message,stack:e.stack,shellSent:t,timestamp:new Date().toISOString()}),i.onError?.(e),t){console.log(`[${a}] Mid-stream error detected, injecting error boundary`);try{n.enqueue(r.encode(N(e,o))),n.enqueue(r.encode(`
32
+ </head>`.trim()}export async function renderToHtml(e,t={},r,i={}){try{let a,s;if(i.forceSSROnly===!0){let t=e.component();a=n(t instanceof Promise?await t:t),s=f(a)}else ({content:a,frameworks:s}=await O(e,i));a=await h(a,i);let c=`<!DOCTYPE html>\n<html lang="en">\n${T({...t,...e.options},s,r)}\n<body>\n${a}\n</body>\n</html>`;return c=o(c),c}catch(e){throw console.error(`Error rendering component:`,e),Error(`Failed to render component`)}}export async function renderToHtmlWithLayouts(e,t,n,r,i={},a,o={}){try{let s=e,c={default:e.component,layoutConfig:s.layoutConfig,loader:s.loader,frontmatter:e.frontmatter},l=await t.resolveAndRender(r,c,n);return l.handlers.length===0?await renderToHtml(e,i,a,o):E(await h(await j(await A(e,r,o),l,c,n,r),o),e,i,a)}catch(t){console.error(`Error rendering component with layouts:`,t);try{return await renderToHtml(e,i,a,o)}catch(e){throw console.error(`Fallback rendering also failed:`,e),Error(`Failed to render component with layouts and fallback failed`)}}}function E(e,t,n,r){if(e.trim().startsWith(`<!DOCTYPE html>`)||e.trim().startsWith(`<html`))return c(e);let i=f(e);return c(`<!DOCTYPE html>\n<html lang="en">\n${T({...n,...t.options},i,r)}\n<body>\n${e}\n</body>\n</html>`)}async function D(e,t,r,i){let a,o;if(i.forceSSROnly===!0){let t=e.component();a=n(t instanceof Promise?await t:t),o=f(a)}else ({content:a,frameworks:o}=await O(e,i));return a=await h(a,i),{head:T({...t,...e.options},o,r),content:a}}async function O(e,t){try{let n=await d().renderWithIsolation({componentPath:`route-component`,component:e.component});if(!n.success)throw Error(`Isolated rendering failed: ${n.errors.join(`, `)}`);return n.warnings.length>0&&!t.suppressWarnings&&n.warnings.forEach(e=>console.warn(`[SSR Isolation] ${e}`)),{content:n.html,frameworks:f(n.html)}}catch(t){console.warn(`[SSR] Isolated rendering failed, falling back to standard rendering:`,t);let r=e.component(),i=n(r instanceof Promise?await r:r);return{content:i,frameworks:f(i)}}}function k(e,t,n,r,i,a=`Streaming Error`,o=`route-component`){if(console.error(`[${a}]`,{message:e.message,stack:e.stack,shellSent:t,timestamp:new Date().toISOString()}),i.onError?.(e),t){console.log(`[${a}] Mid-stream error detected, injecting error boundary`);try{n.enqueue(r.encode(N(e,o))),n.enqueue(r.encode(`
33
33
  </body>
34
34
  </html>`))}catch(e){console.error(`[${a}] Failed to inject error boundary:`,e)}}else i.onShellError?.(e),n.enqueue(r.encode(M(e)));n.close()}export async function renderToHtmlStream(e,t={},n,r={}){let i=new TextEncoder,a=null,o=!1;return new ReadableStream({async start(s){a=s;try{let{head:s,content:c}=await D(e,t,n,r);a.enqueue(i.encode(`<!DOCTYPE html>\n<html lang="en">\n${s}\n<body>\n`)),o=!0,r.onShellReady?.(),a.enqueue(i.encode(c)),a.enqueue(i.encode(`
35
35
  </body>
36
36
  </html>`)),r.onAllReady?.(),a.close()}catch(e){k(e instanceof Error?e:Error(String(e)),o,a,i,r)}},cancel(){try{a?.close()}catch{}}})}export async function renderToHtmlStreamWithLayouts(e,t,n,r,i={},a,o={}){let s=new TextEncoder,l=null,u=!1;return new ReadableStream({async start(d){l=d;try{let d=e,p={default:e.component,layoutConfig:d.layoutConfig,loader:d.loader,frontmatter:e.frontmatter},m=await t.resolveAndRender(r,p,n);if(m.handlers.length===0){let t=(await renderToHtmlStream(e,i,a,o)).getReader();try{for(;;){let{done:e,value:n}=await t.read();if(e)break;l.enqueue(n)}}finally{t.releaseLock()}l.close();return}let g=await h(await j(await A(e,r,o),m,p,n,r),o);if(g.trim().startsWith(`<!DOCTYPE html>`)||g.trim().startsWith(`<html`)){let e=c(g);l.enqueue(s.encode(e)),u=!0,o.onShellReady?.(),o.onAllReady?.(),l.close();return}let _=f(g),v=T({...i,...e.options},_,a);l.enqueue(s.encode(`<!DOCTYPE html>\n<html lang="en">\n${v}\n<body>\n`)),u=!0,o.onShellReady?.(),l.enqueue(s.encode(g)),l.enqueue(s.encode(`
37
37
  </body>
38
- </html>`)),o.onAllReady?.(),l.close()}catch(e){k(e instanceof Error?e:Error(String(e)),u,l,s,o,`Streaming Error with Layouts`,`layout-${r}`)}},cancel(){try{l?.close()}catch{}}})}async function A(e,n,r){if(r.forceSSROnly===!0){let n=e.component();return t(n instanceof Promise?await n:n)}try{let t=await d().renderWithIsolation({componentPath:n,component:e.component});if(!t.success)throw Error(`Isolated rendering failed: ${t.errors.join(`, `)}`);return t.warnings.length>0&&!r.suppressWarnings&&t.warnings.forEach(e=>console.warn(`[SSR Isolation] ${e}`)),t.html}catch(n){console.warn(`[SSR] Isolated page rendering failed, falling back to standard rendering:`,n);let r=e.component();return t(r instanceof Promise?await r:r)}}async function j(n,r,i,a,o){let s=e(`avalon-page-content`,{dangerouslySetInnerHTML:{__html:n}}),c=null;for(let n=r.handlers.length-1;n>=0;n--){let l=r.handlers[n],u={data:r.dataLoaders[n]?await r.dataLoaders[n](a):{},frontmatter:i.frontmatter||{},route:{path:o,params:a.params,query:a.query}},d=l.component,f=d({...u,children:s});if(f instanceof Promise){let r=t(await f);n===0?c=r:s=e(`avalon-layout-fragment`,{dangerouslySetInnerHTML:{__html:r}})}else s=e(d,u,s)}if(c!==null)return c;try{let e=await d().renderWithIsolation({componentPath:`layout-chain-${o}`,component:()=>s});if(e.success)return e.html}catch{}return t(s)}function M(e){let t=process.env.NODE_ENV!==`production`;return`<!DOCTYPE html>
38
+ </html>`)),o.onAllReady?.(),l.close()}catch(e){k(e instanceof Error?e:Error(String(e)),u,l,s,o,`Streaming Error with Layouts`,`layout-${r}`)}},cancel(){try{l?.close()}catch{}}})}async function A(e,t,r){if(r.forceSSROnly===!0){let t=e.component();return n(t instanceof Promise?await t:t)}try{let n=await d().renderWithIsolation({componentPath:t,component:e.component});if(!n.success)throw Error(`Isolated rendering failed: ${n.errors.join(`, `)}`);return n.warnings.length>0&&!r.suppressWarnings&&n.warnings.forEach(e=>console.warn(`[SSR Isolation] ${e}`)),n.html}catch(t){console.warn(`[SSR] Isolated page rendering failed, falling back to standard rendering:`,t);let r=e.component();return n(r instanceof Promise?await r:r)}}async function j(e,r,i,a,o){let s=t(`avalon-page-content`,{dangerouslySetInnerHTML:{__html:e}}),c=null;for(let e=r.handlers.length-1;e>=0;e--){let l=r.handlers[e],u={data:r.dataLoaders[e]?await r.dataLoaders[e](a):{},frontmatter:i.frontmatter||{},route:{path:o,params:a.params,query:a.query}},d=l.component,f=d({...u,children:s});if(f instanceof Promise){let r=n(await f);e===0?c=r:s=t(`avalon-layout-fragment`,{dangerouslySetInnerHTML:{__html:r}})}else s=t(d,u,s)}if(c!==null)return c;try{let e=await d().renderWithIsolation({componentPath:`layout-chain-${o}`,component:()=>s});if(e.success)return e.html}catch{}return n(s)}function M(e){let t=process.env.NODE_ENV!==`production`;return`<!DOCTYPE html>
39
39
  <html lang="en">
40
40
  <head>
41
41
  <meta charset="utf-8">
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from "zod";
2
2
  /**
3
3
  * Supported HTTP methods for API routes
4
4
  */
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from "zod";
2
2
  /**
3
3
  * Schema for meta tags
4
4
  */
@@ -1,11 +1,11 @@
1
- import { z } from 'zod';
2
- import type { RenderOptions } from './core.ts';
3
- import type { LayoutContext, LayoutData, LayoutHandler, LayoutDiscoveryOptions, LayoutConfig, ResolvedLayout } from './layout.ts';
4
- import type { FileSystemRoute, RoutePageModule, RouteDiscoveryOptions, FileSystemRouterConfig, Metadata, ResolvedMetadata } from './routing.ts';
5
- export * from './core.ts';
6
- export * from './api.ts';
7
- export * from './layout.ts';
8
- export * from './routing.ts';
1
+ import { z } from "zod";
2
+ import type { RenderOptions } from "./core.ts";
3
+ import type { LayoutConfig, LayoutContext, LayoutData, LayoutDiscoveryOptions, LayoutHandler, ResolvedLayout } from "./layout.ts";
4
+ import type { FileSystemRoute, FileSystemRouterConfig, Metadata, ResolvedMetadata, RouteDiscoveryOptions, RoutePageModule } from "./routing.ts";
5
+ export * from "./api.ts";
6
+ export * from "./core.ts";
7
+ export * from "./layout.ts";
8
+ export * from "./routing.ts";
9
9
  export interface ValidationSuccess<T> {
10
10
  success: true;
11
11
  data: T;
@@ -1 +1 @@
1
- import{z as e}from"zod";import{RenderOptionsSchema as t}from"./core.js";import{LayoutContextSchema as n,LayoutDataSchema as r,LayoutHandlerSchema as i,LayoutDiscoveryOptionsSchema as a,LayoutConfigSchema as o,ResolvedLayoutSchema as s}from"./layout.js";import{FileSystemRouteSchema as c,RoutePageModuleSchema as l,RouteDiscoveryOptionsSchema as u,FileSystemRouterConfigSchema as d,MetadataSchema as f,ResolvedMetadataSchema as p}from"./routing.js";export*from"./core.js";export*from"./api.js";export*from"./layout.js";export*from"./routing.js";export class ValidationError extends Error{constructor(e,t){super(e),this.zodError=t,this.name=`ValidationError`}getFormattedErrors(){return this.zodError.issues.map(e=>`${e.path.length>0?`${e.path.join(`.`)}: `:``}${e.message}`)}getErrorMessage(){return this.getFormattedErrors().join(`; `)}}export function createValidationError(e,t){return new ValidationError(e,t)}export function safeValidate(e,t,n=`Validation failed`){let r=e.safeParse(t);return r.success?{success:!0,data:r.data}:{success:!1,error:createValidationError(n,r.error)}}export function validate(e,t,n=`Validation failed`){let r=e.safeParse(t);if(r.success)return r.data;throw createValidationError(n,r.error)}export const validators={renderOptions:e=>validate(t,e,`Invalid render options`),layoutContext:e=>validate(n,e,`Invalid layout context`),layoutData:e=>validate(r,e,`Invalid layout data`),layoutHandler:e=>validate(i,e,`Invalid layout handler`),layoutDiscoveryOptions:e=>validate(a,e,`Invalid layout discovery options`),layoutConfig:e=>validate(o,e,`Invalid layout config`),resolvedLayout:e=>validate(s,e,`Invalid resolved layout`),fileSystemRoute:e=>validate(c,e,`Invalid file system route`),routePageModule:e=>validate(l,e,`Invalid route page module`),routeDiscoveryOptions:e=>validate(u,e,`Invalid route discovery options`),fileSystemRouterConfig:e=>validate(d,e,`Invalid file system router config`),metadata:e=>validate(f,e,`Invalid metadata`),resolvedMetadata:e=>validate(p,e,`Invalid resolved metadata`)};export const safeValidators={renderOptions:e=>safeValidate(t,e,`Invalid render options`),layoutContext:e=>safeValidate(n,e,`Invalid layout context`),layoutData:e=>safeValidate(r,e,`Invalid layout data`),layoutHandler:e=>safeValidate(i,e,`Invalid layout handler`),layoutDiscoveryOptions:e=>safeValidate(a,e,`Invalid layout discovery options`),layoutConfig:e=>safeValidate(o,e,`Invalid layout config`),resolvedLayout:e=>safeValidate(s,e,`Invalid resolved layout`),fileSystemRoute:e=>safeValidate(c,e,`Invalid file system route`),routePageModule:e=>safeValidate(l,e,`Invalid route page module`),routeDiscoveryOptions:e=>safeValidate(u,e,`Invalid route discovery options`),fileSystemRouterConfig:e=>safeValidate(d,e,`Invalid file system router config`),metadata:e=>safeValidate(f,e,`Invalid metadata`),resolvedMetadata:e=>safeValidate(p,e,`Invalid resolved metadata`)};export const devValidators={renderOptionsSoft:(e,t=`unknown`)=>{let n=safeValidators.renderOptions(e);return n.success?!0:(console.warn(`Render options validation warning in ${t}:`,n.error?.getErrorMessage?.()??`unknown error`),!1)}};export function isValidRenderOptions(e){return safeValidators.renderOptions(e).success}export function isValidFileSystemRoute(e){return safeValidators.fileSystemRoute(e).success}export function isValidRoutePageModule(e){return safeValidators.routePageModule(e).success}export function isValidRouteDiscoveryOptions(e){return safeValidators.routeDiscoveryOptions(e).success}export function isValidFileSystemRouterConfig(e){return safeValidators.fileSystemRouterConfig(e).success}export function isValidMetadata(e){return safeValidators.metadata(e).success}export function isValidResolvedMetadata(e){return safeValidators.resolvedMetadata(e).success}export function validateBatch(e,t){let n={},r=[];for(let[i,a]of Object.entries(e))try{n[i]=validate(a,t[i],`Invalid ${String(i)}`)}catch(e){e instanceof ValidationError?r.push(`${String(i)}: ${e.getErrorMessage()}`):r.push(`${String(i)}: Unknown validation error`)}if(r.length>0)throw Error(`Batch validation failed: ${r.join(`; `)}`);return n}export function safeValidateBatch(t,n){try{return{success:!0,data:validateBatch(t,n)}}catch(t){return{success:!1,error:t instanceof ValidationError?t:createValidationError(`Batch validation failed`,new e.ZodError([{code:`custom`,message:String(t),path:[]}]))}}}
1
+ import{z as e}from"zod";import{RenderOptionsSchema as t}from"./core.js";import{LayoutConfigSchema as n,LayoutContextSchema as r,LayoutDataSchema as i,LayoutDiscoveryOptionsSchema as a,LayoutHandlerSchema as o,ResolvedLayoutSchema as s}from"./layout.js";import{FileSystemRouterConfigSchema as c,FileSystemRouteSchema as l,MetadataSchema as u,ResolvedMetadataSchema as d,RouteDiscoveryOptionsSchema as f,RoutePageModuleSchema as p}from"./routing.js";export*from"./api.js";export*from"./core.js";export*from"./layout.js";export*from"./routing.js";export class ValidationError extends Error{constructor(e,t){super(e),this.zodError=t,this.name=`ValidationError`}getFormattedErrors(){return this.zodError.issues.map(e=>`${e.path.length>0?`${e.path.join(`.`)}: `:``}${e.message}`)}getErrorMessage(){return this.getFormattedErrors().join(`; `)}}export function createValidationError(e,t){return new ValidationError(e,t)}export function safeValidate(e,t,n=`Validation failed`){let r=e.safeParse(t);return r.success?{success:!0,data:r.data}:{success:!1,error:createValidationError(n,r.error)}}export function validate(e,t,n=`Validation failed`){let r=e.safeParse(t);if(r.success)return r.data;throw createValidationError(n,r.error)}export const validators={renderOptions:e=>validate(t,e,`Invalid render options`),layoutContext:e=>validate(r,e,`Invalid layout context`),layoutData:e=>validate(i,e,`Invalid layout data`),layoutHandler:e=>validate(o,e,`Invalid layout handler`),layoutDiscoveryOptions:e=>validate(a,e,`Invalid layout discovery options`),layoutConfig:e=>validate(n,e,`Invalid layout config`),resolvedLayout:e=>validate(s,e,`Invalid resolved layout`),fileSystemRoute:e=>validate(l,e,`Invalid file system route`),routePageModule:e=>validate(p,e,`Invalid route page module`),routeDiscoveryOptions:e=>validate(f,e,`Invalid route discovery options`),fileSystemRouterConfig:e=>validate(c,e,`Invalid file system router config`),metadata:e=>validate(u,e,`Invalid metadata`),resolvedMetadata:e=>validate(d,e,`Invalid resolved metadata`)};export const safeValidators={renderOptions:e=>safeValidate(t,e,`Invalid render options`),layoutContext:e=>safeValidate(r,e,`Invalid layout context`),layoutData:e=>safeValidate(i,e,`Invalid layout data`),layoutHandler:e=>safeValidate(o,e,`Invalid layout handler`),layoutDiscoveryOptions:e=>safeValidate(a,e,`Invalid layout discovery options`),layoutConfig:e=>safeValidate(n,e,`Invalid layout config`),resolvedLayout:e=>safeValidate(s,e,`Invalid resolved layout`),fileSystemRoute:e=>safeValidate(l,e,`Invalid file system route`),routePageModule:e=>safeValidate(p,e,`Invalid route page module`),routeDiscoveryOptions:e=>safeValidate(f,e,`Invalid route discovery options`),fileSystemRouterConfig:e=>safeValidate(c,e,`Invalid file system router config`),metadata:e=>safeValidate(u,e,`Invalid metadata`),resolvedMetadata:e=>safeValidate(d,e,`Invalid resolved metadata`)};export const devValidators={renderOptionsSoft:(e,t=`unknown`)=>{let n=safeValidators.renderOptions(e);return n.success?!0:(console.warn(`Render options validation warning in ${t}:`,n.error?.getErrorMessage?.()??`unknown error`),!1)}};export function isValidRenderOptions(e){return safeValidators.renderOptions(e).success}export function isValidFileSystemRoute(e){return safeValidators.fileSystemRoute(e).success}export function isValidRoutePageModule(e){return safeValidators.routePageModule(e).success}export function isValidRouteDiscoveryOptions(e){return safeValidators.routeDiscoveryOptions(e).success}export function isValidFileSystemRouterConfig(e){return safeValidators.fileSystemRouterConfig(e).success}export function isValidMetadata(e){return safeValidators.metadata(e).success}export function isValidResolvedMetadata(e){return safeValidators.resolvedMetadata(e).success}export function validateBatch(e,t){let n={},r=[];for(let[i,a]of Object.entries(e))try{n[i]=validate(a,t[i],`Invalid ${String(i)}`)}catch(e){e instanceof ValidationError?r.push(`${String(i)}: ${e.getErrorMessage()}`):r.push(`${String(i)}: Unknown validation error`)}if(r.length>0)throw Error(`Batch validation failed: ${r.join(`; `)}`);return n}export function safeValidateBatch(t,n){try{return{success:!0,data:validateBatch(t,n)}}catch(t){return{success:!1,error:t instanceof ValidationError?t:createValidationError(`Batch validation failed`,new e.ZodError([{code:`custom`,message:String(t),path:[]}]))}}}
@@ -1,4 +1,4 @@
1
- export * from '../routing.ts';
1
+ export * from "../routing.ts";
2
2
  export declare const routingValidators: {
3
3
  readonly fileSystemRoute: (data: unknown) => {
4
4
  pattern: any;
@@ -1 +1 @@
1
- export*from"../routing.js";import{FileSystemRouteSchema as e,RoutePageModuleSchema as t,RouteDiscoveryOptionsSchema as n,FileSystemRouterConfigSchema as r,MetadataSchema as i,ResolvedMetadataSchema as a}from"../routing.js";import{validate as o,safeValidate as s}from"../index.js";export const routingValidators={fileSystemRoute:t=>o(e,t,`Invalid file system route`),routePageModule:e=>o(t,e,`Invalid route page module`),routeDiscoveryOptions:e=>o(n,e,`Invalid route discovery options`),fileSystemRouterConfig:e=>o(r,e,`Invalid file system router config`),metadata:e=>o(i,e,`Invalid metadata`),resolvedMetadata:e=>o(a,e,`Invalid resolved metadata`)};export const safeRoutingValidators={fileSystemRoute:t=>s(e,t,`Invalid file system route`),routePageModule:e=>s(t,e,`Invalid route page module`),routeDiscoveryOptions:e=>s(n,e,`Invalid route discovery options`),fileSystemRouterConfig:e=>s(r,e,`Invalid file system router config`),metadata:e=>s(i,e,`Invalid metadata`),resolvedMetadata:e=>s(a,e,`Invalid resolved metadata`)};
1
+ export*from"../routing.js";import{safeValidate as e,validate as t}from"../index.js";import{FileSystemRouterConfigSchema as n,FileSystemRouteSchema as r,MetadataSchema as i,ResolvedMetadataSchema as a,RouteDiscoveryOptionsSchema as o,RoutePageModuleSchema as s}from"../routing.js";export const routingValidators={fileSystemRoute:e=>t(r,e,`Invalid file system route`),routePageModule:e=>t(s,e,`Invalid route page module`),routeDiscoveryOptions:e=>t(o,e,`Invalid route discovery options`),fileSystemRouterConfig:e=>t(n,e,`Invalid file system router config`),metadata:e=>t(i,e,`Invalid metadata`),resolvedMetadata:e=>t(a,e,`Invalid resolved metadata`)};export const safeRoutingValidators={fileSystemRoute:t=>e(r,t,`Invalid file system route`),routePageModule:t=>e(s,t,`Invalid route page module`),routeDiscoveryOptions:t=>e(o,t,`Invalid route discovery options`),fileSystemRouterConfig:t=>e(n,t,`Invalid file system router config`),metadata:t=>e(i,t,`Invalid metadata`),resolvedMetadata:t=>e(a,t,`Invalid resolved metadata`)};
@@ -1,5 +1,5 @@
1
- import { z } from 'zod';
2
- import type { ComponentType } from 'preact/compat';
1
+ import type { ComponentType } from "preact/compat";
2
+ import { z } from "zod";
3
3
  /**
4
4
  * Route Type Schema - Defines the different types of routes supported
5
5
  */
@@ -384,5 +384,5 @@ export declare function isRouteParams(data: unknown): data is RouteParams;
384
384
  * Type guard for FileSystemApiModule
385
385
  */
386
386
  export declare function isFileSystemApiModule(data: unknown): data is FileSystemApiModule;
387
- export type { ExtractRouteParams, ExtractOptionalParams, RouteParameters, TypedPageComponent, TypedPageComponentWithData, TypedMetadataGenerator, TypedPageLoader, TypedApiHandler, TypedApiModule, HasDynamicSegments, HasCatchAllSegments, HasOptionalSegments, CountDynamicSegments, ValidRoutePattern, ValidRouteExtension, PageComponentProps, } from '../types/routing.ts';
388
- export { isValidRouteParams, isValidPageProps, isValidRoutePattern, validatePageComponent, createTypedPageComponent, createTypedMetadataGenerator, createTypedPageLoader, createTypedApiHandler, } from '../types/routing.ts';
387
+ export type { CountDynamicSegments, ExtractOptionalParams, ExtractRouteParams, HasCatchAllSegments, HasDynamicSegments, HasOptionalSegments, PageComponentProps, RouteParameters, TypedApiHandler, TypedApiModule, TypedMetadataGenerator, TypedPageComponent, TypedPageComponentWithData, TypedPageLoader, ValidRouteExtension, ValidRoutePattern, } from "../types/routing.ts";
388
+ export { createTypedApiHandler, createTypedMetadataGenerator, createTypedPageComponent, createTypedPageLoader, isValidPageProps, isValidRouteParams, isValidRoutePattern, validatePageComponent, } from "../types/routing.ts";
@@ -1 +1 @@
1
- import{z as e}from"zod";export const RouteTypeSchema=e.enum([`static`,`dynamic`,`catch-all`,`index`,`group`]);export const FileSystemRouteSchema=e.object({pattern:e.any(),filePath:e.string().min(1),routeType:RouteTypeSchema,dynamicSegments:e.array(e.string()),priority:e.number().int().min(0),isPrivate:e.boolean(),routeGroup:e.string().optional()});export const RoutePageModuleSchema=e.object({default:e.any(),layoutConfig:e.any().optional(),generateMetadata:e.any().optional(),loader:e.any().optional(),frontmatter:e.record(e.string(),e.any()).optional()});export const RouteParamsSchema=e.record(e.string(),e.string());export const LoaderContextSchema=e.object({request:e.instanceof(Request),url:e.instanceof(URL),params:RouteParamsSchema,query:e.instanceof(URLSearchParams),state:e.instanceof(Map)});export const PagePropsSchema=e.object({params:RouteParamsSchema,query:e.instanceof(URLSearchParams),data:e.unknown().optional()});export const MetadataSchema=e.object({title:e.string().optional(),description:e.string().optional(),keywords:e.array(e.string()).optional(),openGraph:e.object({title:e.string().optional(),description:e.string().optional(),image:e.url().optional(),url:e.url().optional(),type:e.string().optional(),siteName:e.string().optional()}).optional(),twitter:e.object({card:e.enum([`summary`,`summary_large_image`,`app`,`player`]).optional(),title:e.string().optional(),description:e.string().optional(),image:e.url().optional(),site:e.string().optional()}).optional(),schema:e.array(e.record(e.string(),e.unknown())).optional(),canonical:e.url().optional(),robots:e.string().optional()});export const ResolvedMetadataSchema=MetadataSchema.extend({sources:e.array(e.string()).optional(),resolvedAt:e.number().optional()});export const MetadataChainSchema=e.object({global:MetadataSchema.optional(),sections:e.array(e.object({path:e.string(),metadata:MetadataSchema})),page:MetadataSchema.optional()});export const RouteDiscoveryOptionsSchema=e.object({pagesDirectory:e.string().min(1).default(`src/pages`),apiDirectory:e.string().min(1).default(`src/api`),extensions:e.array(e.string()).default([`.tsx`,`.ts`,`.jsx`,`.js`]),excludeDirectories:e.array(e.string()).default([`node_modules`,`.git`]),enableWatching:e.boolean().default(!1),developmentMode:e.boolean().default(!1),quietMode:e.boolean().default(!1)});export const FileSystemRouterConfigSchema=e.object({discovery:RouteDiscoveryOptionsSchema.optional(),enabled:e.boolean().default(!0),fallbackToManual:e.boolean().default(!0),enableCaching:e.boolean().default(!0),cacheTTL:e.number().positive().default(3e5)});export const PageFileSchema=e.object({filePath:e.string().min(1),relativePath:e.string().min(1),extension:e.string().min(1),isPrivate:e.boolean(),routeGroup:e.string().optional(),mtime:e.number().optional()});export const RouteHandlerSchema=e.object({pattern:e.any(),handler:e.any(),metadata:e.object({filePath:e.string(),routeType:RouteTypeSchema,priority:e.number(),dynamicSegments:e.array(e.string())})});export const RouteCacheEntrySchema=e.object({routes:e.array(FileSystemRouteSchema),timestamp:e.number(),fileMtimes:e.record(e.string(),e.number())});export const FileSystemApiRouteSchema=e.object({pattern:e.any(),filePath:e.string().min(1),methods:e.array(e.enum([`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`])),priority:e.number().int().min(0),dynamicSegments:e.array(e.string())});export const FileSystemApiModuleSchema=e.object({GET:e.any().optional(),POST:e.any().optional(),PUT:e.any().optional(),DELETE:e.any().optional(),PATCH:e.any().optional(),HEAD:e.any().optional(),OPTIONS:e.any().optional()});export function isFileSystemRoute(e){return FileSystemRouteSchema.safeParse(e).success}export function isRoutePageModule(e){return RoutePageModuleSchema.safeParse(e).success}export function isMetadata(e){return MetadataSchema.safeParse(e).success}export function isRouteParams(e){return RouteParamsSchema.safeParse(e).success}export function isFileSystemApiModule(e){return FileSystemApiModuleSchema.safeParse(e).success}export{isValidRouteParams,isValidPageProps,isValidRoutePattern,validatePageComponent,createTypedPageComponent,createTypedMetadataGenerator,createTypedPageLoader,createTypedApiHandler}from"../types/routing.js";
1
+ import{z as e}from"zod";export const RouteTypeSchema=e.enum([`static`,`dynamic`,`catch-all`,`index`,`group`]);export const FileSystemRouteSchema=e.object({pattern:e.any(),filePath:e.string().min(1),routeType:RouteTypeSchema,dynamicSegments:e.array(e.string()),priority:e.number().int().min(0),isPrivate:e.boolean(),routeGroup:e.string().optional()});export const RoutePageModuleSchema=e.object({default:e.any(),layoutConfig:e.any().optional(),generateMetadata:e.any().optional(),loader:e.any().optional(),frontmatter:e.record(e.string(),e.any()).optional()});export const RouteParamsSchema=e.record(e.string(),e.string());export const LoaderContextSchema=e.object({request:e.instanceof(Request),url:e.instanceof(URL),params:RouteParamsSchema,query:e.instanceof(URLSearchParams),state:e.instanceof(Map)});export const PagePropsSchema=e.object({params:RouteParamsSchema,query:e.instanceof(URLSearchParams),data:e.unknown().optional()});export const MetadataSchema=e.object({title:e.string().optional(),description:e.string().optional(),keywords:e.array(e.string()).optional(),openGraph:e.object({title:e.string().optional(),description:e.string().optional(),image:e.url().optional(),url:e.url().optional(),type:e.string().optional(),siteName:e.string().optional()}).optional(),twitter:e.object({card:e.enum([`summary`,`summary_large_image`,`app`,`player`]).optional(),title:e.string().optional(),description:e.string().optional(),image:e.url().optional(),site:e.string().optional()}).optional(),schema:e.array(e.record(e.string(),e.unknown())).optional(),canonical:e.url().optional(),robots:e.string().optional()});export const ResolvedMetadataSchema=MetadataSchema.extend({sources:e.array(e.string()).optional(),resolvedAt:e.number().optional()});export const MetadataChainSchema=e.object({global:MetadataSchema.optional(),sections:e.array(e.object({path:e.string(),metadata:MetadataSchema})),page:MetadataSchema.optional()});export const RouteDiscoveryOptionsSchema=e.object({pagesDirectory:e.string().min(1).default(`src/pages`),apiDirectory:e.string().min(1).default(`src/api`),extensions:e.array(e.string()).default([`.tsx`,`.ts`,`.jsx`,`.js`]),excludeDirectories:e.array(e.string()).default([`node_modules`,`.git`]),enableWatching:e.boolean().default(!1),developmentMode:e.boolean().default(!1),quietMode:e.boolean().default(!1)});export const FileSystemRouterConfigSchema=e.object({discovery:RouteDiscoveryOptionsSchema.optional(),enabled:e.boolean().default(!0),fallbackToManual:e.boolean().default(!0),enableCaching:e.boolean().default(!0),cacheTTL:e.number().positive().default(3e5)});export const PageFileSchema=e.object({filePath:e.string().min(1),relativePath:e.string().min(1),extension:e.string().min(1),isPrivate:e.boolean(),routeGroup:e.string().optional(),mtime:e.number().optional()});export const RouteHandlerSchema=e.object({pattern:e.any(),handler:e.any(),metadata:e.object({filePath:e.string(),routeType:RouteTypeSchema,priority:e.number(),dynamicSegments:e.array(e.string())})});export const RouteCacheEntrySchema=e.object({routes:e.array(FileSystemRouteSchema),timestamp:e.number(),fileMtimes:e.record(e.string(),e.number())});export const FileSystemApiRouteSchema=e.object({pattern:e.any(),filePath:e.string().min(1),methods:e.array(e.enum([`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`])),priority:e.number().int().min(0),dynamicSegments:e.array(e.string())});export const FileSystemApiModuleSchema=e.object({GET:e.any().optional(),POST:e.any().optional(),PUT:e.any().optional(),DELETE:e.any().optional(),PATCH:e.any().optional(),HEAD:e.any().optional(),OPTIONS:e.any().optional()});export function isFileSystemRoute(e){return FileSystemRouteSchema.safeParse(e).success}export function isRoutePageModule(e){return RoutePageModuleSchema.safeParse(e).success}export function isMetadata(e){return MetadataSchema.safeParse(e).success}export function isRouteParams(e){return RouteParamsSchema.safeParse(e).success}export function isFileSystemApiModule(e){return FileSystemApiModuleSchema.safeParse(e).success}export{createTypedApiHandler,createTypedMetadataGenerator,createTypedPageComponent,createTypedPageLoader,isValidPageProps,isValidRouteParams,isValidRoutePattern,validatePageComponent}from"../types/routing.js";
@@ -14,93 +14,93 @@
14
14
  */
15
15
 
16
16
  declare module "*.jpg" {
17
- const src: string;
18
- export default src;
17
+ const src: string;
18
+ export default src;
19
19
  }
20
20
 
21
21
  declare module "*.jpeg" {
22
- const src: string;
23
- export default src;
22
+ const src: string;
23
+ export default src;
24
24
  }
25
25
 
26
26
  declare module "*.png" {
27
- const src: string;
28
- export default src;
27
+ const src: string;
28
+ export default src;
29
29
  }
30
30
 
31
31
  declare module "*.webp" {
32
- const src: string;
33
- export default src;
32
+ const src: string;
33
+ export default src;
34
34
  }
35
35
 
36
36
  declare module "*.avif" {
37
- const src: string;
38
- export default src;
37
+ const src: string;
38
+ export default src;
39
39
  }
40
40
 
41
41
  declare module "*.gif" {
42
- const src: string;
43
- export default src;
42
+ const src: string;
43
+ export default src;
44
44
  }
45
45
 
46
46
  declare module "*.tiff" {
47
- const src: string;
48
- export default src;
47
+ const src: string;
48
+ export default src;
49
49
  }
50
50
 
51
51
  declare module "*.svg" {
52
- const src: string;
53
- export default src;
52
+ const src: string;
53
+ export default src;
54
54
  }
55
55
 
56
56
  // vite-imagetools srcset output
57
57
  interface ImageToolsSrcset {
58
- src: string;
59
- srcset: string;
60
- width: number;
61
- height: number;
58
+ src: string;
59
+ srcset: string;
60
+ width: number;
61
+ height: number;
62
62
  }
63
63
 
64
64
  declare module "*&as=srcset" {
65
- const srcset: ImageToolsSrcset;
66
- export default srcset;
65
+ const srcset: ImageToolsSrcset;
66
+ export default srcset;
67
67
  }
68
68
 
69
69
  declare module "*?as=srcset" {
70
- const srcset: ImageToolsSrcset;
71
- export default srcset;
70
+ const srcset: ImageToolsSrcset;
71
+ export default srcset;
72
72
  }
73
73
 
74
74
  // vite-imagetools picture output (multiple formats)
75
75
  interface ImageToolsPicture {
76
- sources: Record<string, ImageToolsSrcset>;
77
- img: ImageToolsSrcset;
76
+ sources: Record<string, ImageToolsSrcset>;
77
+ img: ImageToolsSrcset;
78
78
  }
79
79
 
80
80
  declare module "*&as=picture" {
81
- const picture: ImageToolsPicture;
82
- export default picture;
81
+ const picture: ImageToolsPicture;
82
+ export default picture;
83
83
  }
84
84
 
85
85
  declare module "*?as=picture" {
86
- const picture: ImageToolsPicture;
87
- export default picture;
86
+ const picture: ImageToolsPicture;
87
+ export default picture;
88
88
  }
89
89
 
90
90
  // vite-imagetools metadata output
91
91
  interface ImageToolsMetadata {
92
- src: string;
93
- width: number;
94
- height: number;
95
- format: string;
92
+ src: string;
93
+ width: number;
94
+ height: number;
95
+ format: string;
96
96
  }
97
97
 
98
98
  declare module "*&as=metadata" {
99
- const metadata: ImageToolsMetadata;
100
- export default metadata;
99
+ const metadata: ImageToolsMetadata;
100
+ export default metadata;
101
101
  }
102
102
 
103
103
  declare module "*?as=metadata" {
104
- const metadata: ImageToolsMetadata;
105
- export default metadata;
104
+ const metadata: ImageToolsMetadata;
105
+ export default metadata;
106
106
  }
@@ -4,29 +4,29 @@
4
4
  * Automatically included via tsconfig.json `compilerOptions.types`.
5
5
  */
6
6
 
7
- import type { IslandDirective } from './island-prop.d.ts';
7
+ import type { IslandDirective } from "./island-prop.d.ts";
8
8
 
9
9
  /** Force TypeScript to expand the type inline on hover instead of showing the alias name */
10
10
  type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
11
11
 
12
- declare module 'preact' {
13
- namespace JSX {
14
- interface IntrinsicAttributes {
15
- island?: Expand<IslandDirective>;
16
- }
17
- }
12
+ declare module "preact" {
13
+ namespace JSX {
14
+ interface IntrinsicAttributes {
15
+ island?: Expand<IslandDirective>;
16
+ }
17
+ }
18
18
  }
19
19
 
20
20
  declare global {
21
- namespace JSX {
22
- interface IntrinsicAttributes {
23
- island?: Expand<IslandDirective>;
24
- }
25
- }
21
+ namespace JSX {
22
+ interface IntrinsicAttributes {
23
+ island?: Expand<IslandDirective>;
24
+ }
25
+ }
26
26
  }
27
27
 
28
- declare module '@vue/runtime-core' {
29
- interface ComponentCustomProps {
30
- island?: Expand<IslandDirective>;
31
- }
28
+ declare module "@vue/runtime-core" {
29
+ interface ComponentCustomProps {
30
+ island?: Expand<IslandDirective>;
31
+ }
32
32
  }
@@ -1,6 +1,6 @@
1
- import type { ComponentType } from 'preact';
1
+ import type { ComponentType } from "preact";
2
2
 
3
- declare module '*.mdx' {
3
+ declare module "*.mdx" {
4
4
  const MDXComponent: ComponentType<Record<string, unknown>>;
5
5
  export default MDXComponent;
6
6
  }
@@ -4,9 +4,9 @@
4
4
  * This module provides strongly typed interfaces, utility types, and type guards
5
5
  * for the file-system routing system, ensuring type safety throughout the routing pipeline.
6
6
  */
7
- import type { ComponentType } from 'preact';
8
- import type { LoaderContext, Metadata } from '../schemas/routing.ts';
9
- import type { LayoutConfig } from '../schemas/layout.ts';
7
+ import type { ComponentType } from "preact";
8
+ import type { LayoutConfig } from "../schemas/layout.ts";
9
+ import type { LoaderContext, Metadata } from "../schemas/routing.ts";
10
10
  /**
11
11
  * Extract route parameters from a route pattern string
12
12
  *
@@ -170,7 +170,7 @@ export type ValidRoutePattern<T extends string> = T extends `${string}[${string}
170
170
  /**
171
171
  * Valid file extensions for routes
172
172
  */
173
- export type ValidRouteExtension = '.tsx' | '.ts' | '.jsx' | '.js';
173
+ export type ValidRouteExtension = ".tsx" | ".ts" | ".jsx" | ".js";
174
174
  /**
175
175
  * Route file path validation
176
176
  */
@@ -212,11 +212,11 @@ export type GetStaticParts<T extends string> = T extends `${infer Static}[${stri
212
212
  /**
213
213
  * Count dynamic segments in a route
214
214
  */
215
- export type CountDynamicSegments<T extends string, Count extends readonly unknown[] = []> = T extends `${string}[${string}]${infer Rest}` ? CountDynamicSegments<Rest, [...Count, unknown]> : Count['length'];
215
+ export type CountDynamicSegments<T extends string, Count extends readonly unknown[] = []> = T extends `${string}[${string}]${infer Rest}` ? CountDynamicSegments<Rest, [...Count, unknown]> : Count["length"];
216
216
  /**
217
217
  * Route error types
218
218
  */
219
- export type RouteErrorType = 'ROUTE_NOT_FOUND' | 'INVALID_PARAMS' | 'LOADER_ERROR' | 'METADATA_ERROR' | 'COMPONENT_ERROR' | 'VALIDATION_ERROR';
219
+ export type RouteErrorType = "ROUTE_NOT_FOUND" | "INVALID_PARAMS" | "LOADER_ERROR" | "METADATA_ERROR" | "COMPONENT_ERROR" | "VALIDATION_ERROR";
220
220
  /**
221
221
  * Route error with context
222
222
  */
@@ -294,4 +294,4 @@ export declare function validatePageComponent<TRoute extends string>(component:
294
294
  * Create a typed API handler with parameter validation
295
295
  */
296
296
  export declare function createTypedApiHandler<TRoute extends string>(handler: TypedApiHandler<TRoute>, expectedParams: (keyof RouteParameters<TRoute>)[]): TypedApiHandler<TRoute>;
297
- export type { RouteParams, LoaderContext, Metadata, PageProps, RoutePageModule, FileSystemRoute, ResolvedMetadata, } from '../schemas/routing.ts';
297
+ export type { FileSystemRoute, LoaderContext, Metadata, PageProps, ResolvedMetadata, RoutePageModule, RouteParams, } from "../schemas/routing.ts";
@@ -1 +1 @@
1
- import{h as e}from"preact";import t from"node:process";export function isValidRouteParams(e,t){if(!e||typeof e!=`object`)return!1;let n=e;for(let e of t){let t=n[e];if(t===void 0||typeof t!=`string`&&!Array.isArray(t)||Array.isArray(t)&&!t.every(e=>typeof e==`string`))return!1}return!0}export function isValidPageProps(e,t){if(!e||typeof e!=`object`)return!1;let r=e;return!(!r.params||!r.query||!isValidRouteParams(r.params,t)||!(r.query instanceof URLSearchParams))}export function isValidRoutePattern(e){let t=e.match(/\[([^\]]+)\]/g);if(t)for(let e of t){let t=e.slice(1,-1);if(!/^[a-zA-Z_]\w*(\?)?$/.test(t)&&!/^\.\.\.[a-zA-Z_]\w*$/.test(t))return!1}let n=e.match(/\(([^)]+)\)/g);if(n)for(let e of n){let t=e.slice(1,-1);if(!/^[a-zA-Z_]\w*-*\w*$/.test(t))return!1}return!0}export function createTypedPageComponent(n,i){return a=>(t.env?.NODE_ENV===`development`&&(isValidPageProps(a,i)||console.warn(`Invalid props passed to typed page component:`,a)),e(n,a))}export function createTypedMetadataGenerator(e,r){return async i=>(t.env?.NODE_ENV===`development`&&(isValidRouteParams(i,r)||console.warn(`Invalid params passed to typed metadata generator:`,i)),await e(i))}export function createTypedPageLoader(e,r){return async i=>(t.env?.NODE_ENV===`development`&&(isValidRouteParams(i.params,r)||console.warn(`Invalid params passed to typed page loader:`,i.params)),await e(i))}export function validatePageComponent(e,t){return typeof e==`function`}export function createTypedApiHandler(e,r){return async(i,a)=>(t.env?.NODE_ENV===`development`&&(isValidRouteParams(a.params,r)||console.warn(`Invalid params passed to typed API handler:`,a.params)),await e(i,a))}
1
+ import e from"node:process";import{h as t}from"preact";export function isValidRouteParams(e,t){if(!e||typeof e!=`object`)return!1;let n=e;for(let e of t){let t=n[e];if(t===void 0||typeof t!=`string`&&!Array.isArray(t)||Array.isArray(t)&&!t.every(e=>typeof e==`string`))return!1}return!0}export function isValidPageProps(e,t){if(!e||typeof e!=`object`)return!1;let r=e;return!(!r.params||!r.query||!isValidRouteParams(r.params,t)||!(r.query instanceof URLSearchParams))}export function isValidRoutePattern(e){let t=e.match(/\[([^\]]+)\]/g);if(t)for(let e of t){let t=e.slice(1,-1);if(!/^[a-zA-Z_]\w*(\?)?$/.test(t)&&!/^\.\.\.[a-zA-Z_]\w*$/.test(t))return!1}let n=e.match(/\(([^)]+)\)/g);if(n)for(let e of n){let t=e.slice(1,-1);if(!/^[a-zA-Z_]\w*-*\w*$/.test(t))return!1}return!0}export function createTypedPageComponent(n,i){return a=>(e.env?.NODE_ENV===`development`&&(isValidPageProps(a,i)||console.warn(`Invalid props passed to typed page component:`,a)),t(n,a))}export function createTypedMetadataGenerator(t,r){return async i=>(e.env?.NODE_ENV===`development`&&(isValidRouteParams(i,r)||console.warn(`Invalid params passed to typed metadata generator:`,i)),await t(i))}export function createTypedPageLoader(t,r){return async i=>(e.env?.NODE_ENV===`development`&&(isValidRouteParams(i.params,r)||console.warn(`Invalid params passed to typed page loader:`,i.params)),await t(i))}export function validatePageComponent(e,t){return typeof e==`function`}export function createTypedApiHandler(t,r){return async(i,a)=>(e.env?.NODE_ENV===`development`&&(isValidRouteParams(a.params,r)||console.warn(`Invalid params passed to typed API handler:`,a.params)),await t(i,a))}
@@ -24,7 +24,7 @@ declare module "virtual:avalon/config" {
24
24
  }
25
25
 
26
26
  declare module "virtual:avalon/layouts" {
27
- import type { PageModule, NitroRenderContext } from "@useavalon/avalon/nitro/types";
27
+ import type { NitroRenderContext, PageModule } from "@useavalon/avalon/nitro/types";
28
28
  export function wrapWithLayouts(
29
29
  pageHtml: string,
30
30
  pageModule: PageModule,
@@ -7,5 +7,5 @@ interface ImportMetaEnv {
7
7
 
8
8
  interface ImportMeta {
9
9
  readonly env: ImportMetaEnv;
10
- readonly hot?: import('vite/types/hot').ViteHotContext;
10
+ readonly hot?: import("vite/types/hot").ViteHotContext;
11
11
  }
@@ -1 +1 @@
1
- import{resolve as e}from"node:path";import{stat as t,readdir as n,readFile as r}from"node:fs/promises";import{openSync as i,readSync as a,closeSync as o}from"node:fs";const s={".vue":`vue`,".svelte":`svelte`},c=[{pattern:/\.solid\.(tsx|jsx)$/,integration:`solid`},{pattern:/\.react\.(tsx|jsx)$/,integration:`react`},{pattern:/\.lit\.(ts|js)$/,integration:`lit`},{pattern:/\.preact\.(tsx|jsx)$/,integration:`preact`},{pattern:/\.qwik\.(tsx|jsx)$/,integration:`qwik`}],l=[{pattern:/from\s+['"]react['"]/,integration:`react`},{pattern:/@jsxImportSource\s+react/,integration:`react`},{pattern:/from\s+['"]solid-js['"]/,integration:`solid`},{pattern:/@jsxImportSource\s+solid-js/,integration:`solid`},{pattern:/from\s+['"]preact['"]/,integration:`preact`},{pattern:/@jsxImportSource\s+preact/,integration:`preact`},{pattern:/from\s+['"]@builder\.io\/qwik['"]/,integration:`qwik`},{pattern:/@jsxImportSource\s+@builder\.io\/qwik/,integration:`qwik`}],u=`preact`,d=[`.tsx`,`.jsx`,`.ts`,`.js`,`.vue`,`.svelte`];export async function discoverIntegrationsFromFiles(n,r){let i=r?e(r,n):e(n);try{if(!(await t(i)).isDirectory())return new Set}catch{return new Set}let a=new Set;return await f(i,a),a}async function f(t,r){try{let i=await n(t,{withFileTypes:!0});for(let n of i){let i=e(t,n.name);if(n.isDirectory())await f(i,r);else if(n.isFile()){let e=await m(i,n.name);e&&r.add(e)}}}catch(e){(!(e instanceof Error)||e.code!==`EACCES`)&&console.warn(`Warning: Could not scan directory ${t}:`,e)}}function p(e){try{let t=i(e,`r`),n=Buffer.alloc(500);a(t,n,0,500,0),o(t);let r=n.toString(`utf-8`);for(let{pattern:e,integration:t}of l)if(e.test(r))return t}catch{}return u}async function m(e,t){let n=t.toLowerCase();for(let{pattern:e,integration:t}of c)if(e.test(n))return t;for(let[e,t]of Object.entries(s))if(n.endsWith(e))return t;return n.endsWith(`.tsx`)||n.endsWith(`.jsx`)?p(e):(n.endsWith(`.ts`)||n.endsWith(`.js`))&&!n.endsWith(`.d.ts`)&&/^[A-Z]/.test(t)?`lit`:null}export function detectIntegrationFromFileName(e){let t=e.toLowerCase();for(let{pattern:e,integration:n}of c)if(e.test(t))return n;for(let[e,n]of Object.entries(s))if(t.endsWith(e))return n;return t.endsWith(`.tsx`)||t.endsWith(`.jsx`)?u:(t.endsWith(`.ts`)||t.endsWith(`.js`))&&!t.endsWith(`.d.ts`)&&/^[A-Z]/.test(e)?`lit`:null}export function isSupportedExtension(e){return d.includes(e.toLowerCase())}export function getSupportedExtensions(){return d}export async function discoverIntegrationsFromIslandUsage(n,r,i,a){let o=new Set,s=i??process.cwd(),c=[e(s,n),e(s,r)];a&&c.push(e(s,a));for(let e of c)try{(await t(e)).isDirectory()&&await h(e,s,o)}catch{}return o}async function h(t,r,i){try{let a=await n(t,{withFileTypes:!0});for(let n of a){let a=e(t,n.name);n.isDirectory()?await h(a,r,i):n.isFile()&&g(n.name)&&await v(a,r,i)}}catch(e){!(e instanceof Error)||e.code}}function g(e){let t=e.toLowerCase();return t.endsWith(`.tsx`)||t.endsWith(`.jsx`)||t.endsWith(`.mdx`)}const _=[{pattern:/\.qwik\./,integration:`qwik`}];async function v(e,t,n){try{let i=await r(e,`utf-8`),a=y(i),o=b(i);for(let r of o){let i=a.get(r);if(!i)continue;let o=x(i,e,t);if(!o)continue;let s=await S(o);s&&n.add(s)}for(let[,e]of a)for(let{pattern:t,integration:r}of _)t.test(e)&&n.add(r)}catch{}}function y(e){let t=new Map,n=/import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g,r;for(;(r=n.exec(e))!==null;)t.set(r[1],r[2]);let i=/import\s+\{([^}]+)\}\s+from\s+['"]([^'"]+)['"]/g;for(;(r=i.exec(e))!==null;){let e=r[1].split(`,`).map(e=>e.trim()),n=r[2];for(let r of e){let e=r.match(/(\w+)\s+as\s+(\w+)/);e?t.set(e[2],n):r&&t.set(r,n)}}return t}function b(e){let t=new Set,n=/<([A-Z]\w*)\s+[^>]*\bisland\b/g,r;for(;(r=n.exec(e))!==null;)t.add(r[1]);return t}function x(t,n,r){if(t.startsWith(`.`))return e(e(n,`..`),t);for(let{prefix:n,replacement:i}of[{prefix:`@/`,replacement:`src/`},{prefix:`$components/`,replacement:`src/components/`},{prefix:`$islands/`,replacement:`src/islands/`},{prefix:`~/`,replacement:`src/`}])if(t.startsWith(n))return e(r,i,t.slice(n.length));return t.startsWith(`/src/`)?e(r,t.slice(1)):null}async function S(e){for(let n of[``,`.tsx`,`.jsx`,`.ts`,`.js`,`.vue`,`.svelte`]){let r=e+n;try{if((await t(r)).isFile())return m(r,r.split(`/`).pop()||``)}catch{}}return null}
1
+ import{closeSync as e,openSync as t,readSync as n}from"node:fs";import{stat as r,readdir as i,readFile as a}from"node:fs/promises";import{resolve as o}from"node:path";const s={".vue":`vue`,".svelte":`svelte`},c=[{pattern:/\.solid\.(tsx|jsx)$/,integration:`solid`},{pattern:/\.react\.(tsx|jsx)$/,integration:`react`},{pattern:/\.lit\.(ts|js)$/,integration:`lit`},{pattern:/\.preact\.(tsx|jsx)$/,integration:`preact`},{pattern:/\.qwik\.(tsx|jsx)$/,integration:`qwik`}],l=[{pattern:/from\s+['"]react['"]/,integration:`react`},{pattern:/@jsxImportSource\s+react/,integration:`react`},{pattern:/from\s+['"]solid-js['"]/,integration:`solid`},{pattern:/@jsxImportSource\s+solid-js/,integration:`solid`},{pattern:/from\s+['"]preact['"]/,integration:`preact`},{pattern:/@jsxImportSource\s+preact/,integration:`preact`},{pattern:/from\s+['"]@builder\.io\/qwik['"]/,integration:`qwik`},{pattern:/@jsxImportSource\s+@builder\.io\/qwik/,integration:`qwik`}],u=`preact`,d=[`.tsx`,`.jsx`,`.ts`,`.js`,`.vue`,`.svelte`];export async function discoverIntegrationsFromFiles(e,t){let n=t?o(t,e):o(e);try{if(!(await r(n)).isDirectory())return new Set}catch{return new Set}let i=new Set;return await f(n,i),i}async function f(e,t){try{let n=await i(e,{withFileTypes:!0});for(let r of n){let n=o(e,r.name);if(r.isDirectory())await f(n,t);else if(r.isFile()){let e=await m(n,r.name);e&&t.add(e)}}}catch(t){(!(t instanceof Error)||t.code!==`EACCES`)&&console.warn(`Warning: Could not scan directory ${e}:`,t)}}function p(r){try{let i=t(r,`r`),a=Buffer.alloc(500);n(i,a,0,500,0),e(i);let o=a.toString(`utf-8`);for(let{pattern:e,integration:t}of l)if(e.test(o))return t}catch{}return u}async function m(e,t){let n=t.toLowerCase();for(let{pattern:e,integration:t}of c)if(e.test(n))return t;for(let[e,t]of Object.entries(s))if(n.endsWith(e))return t;return n.endsWith(`.tsx`)||n.endsWith(`.jsx`)?p(e):(n.endsWith(`.ts`)||n.endsWith(`.js`))&&!n.endsWith(`.d.ts`)&&/^[A-Z]/.test(t)?`lit`:null}export function detectIntegrationFromFileName(e){let t=e.toLowerCase();for(let{pattern:e,integration:n}of c)if(e.test(t))return n;for(let[e,n]of Object.entries(s))if(t.endsWith(e))return n;return t.endsWith(`.tsx`)||t.endsWith(`.jsx`)?u:(t.endsWith(`.ts`)||t.endsWith(`.js`))&&!t.endsWith(`.d.ts`)&&/^[A-Z]/.test(e)?`lit`:null}export function isSupportedExtension(e){return d.includes(e.toLowerCase())}export function getSupportedExtensions(){return d}export async function discoverIntegrationsFromIslandUsage(e,t,n,i){let a=new Set,s=n??process.cwd(),c=[o(s,e),o(s,t)];i&&c.push(o(s,i));for(let e of c)try{(await r(e)).isDirectory()&&await h(e,s,a)}catch{}return a}async function h(e,t,n){try{let r=await i(e,{withFileTypes:!0});for(let i of r){let r=o(e,i.name);i.isDirectory()?await h(r,t,n):i.isFile()&&g(i.name)&&await v(r,t,n)}}catch(e){!(e instanceof Error)||e.code}}function g(e){let t=e.toLowerCase();return t.endsWith(`.tsx`)||t.endsWith(`.jsx`)||t.endsWith(`.mdx`)}const _=[{pattern:/\.qwik\./,integration:`qwik`}];async function v(e,t,n){try{let r=await a(e,`utf-8`),i=y(r),o=b(r);for(let r of o){let a=i.get(r);if(!a)continue;let o=x(a,e,t);if(!o)continue;let s=await S(o);s&&n.add(s)}for(let[,e]of i)for(let{pattern:t,integration:r}of _)t.test(e)&&n.add(r)}catch{}}function y(e){let t=new Map,n=/import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g,r;for(r=n.exec(e);r!==null;r=n.exec(e))t.set(r[1],r[2]);let i=/import\s+\{([^}]+)\}\s+from\s+['"]([^'"]+)['"]/g;for(r=i.exec(e);r!==null;r=i.exec(e)){let e=r[1].split(`,`).map(e=>e.trim()),n=r[2];for(let r of e){let e=r.match(/(\w+)\s+as\s+(\w+)/);e?t.set(e[2],n):r&&t.set(r,n)}}return t}function b(e){let t=new Set,n=/<([A-Z]\w*)\s+[^>]*\bisland\b/g;for(let r=n.exec(e);r!==null;r=n.exec(e))t.add(r[1]);return t}function x(e,t,n){if(e.startsWith(`.`))return o(o(t,`..`),e);for(let{prefix:t,replacement:r}of[{prefix:`@/`,replacement:`src/`},{prefix:`$components/`,replacement:`src/components/`},{prefix:`$islands/`,replacement:`src/islands/`},{prefix:`~/`,replacement:`src/`}])if(e.startsWith(t))return o(n,r,e.slice(t.length));return e.startsWith(`/src/`)?o(n,e.slice(1)):null}async function S(e){for(let t of[``,`.tsx`,`.jsx`,`.ts`,`.js`,`.vue`,`.svelte`]){let n=e+t;try{if((await r(n)).isFile())return m(n,n.split(`/`).pop()||``)}catch{}}return null}
@@ -4,7 +4,7 @@
4
4
  * This module provides default configuration values and the resolution
5
5
  * function that merges user configuration with defaults.
6
6
  */
7
- import type { AvalonPluginConfig, ResolvedAvalonConfig, ResolvedMDXConfig, ResolvedImageConfig } from "./types.ts";
7
+ import type { AvalonPluginConfig, ResolvedAvalonConfig, ResolvedImageConfig, ResolvedMDXConfig } from "./types.ts";
8
8
  /**
9
9
  * Default MDX configuration values
10
10
  */
@@ -23,8 +23,8 @@
23
23
  * <HeroImage alt="Hero" />
24
24
  * ```
25
25
  */
26
- import type { Plugin } from 'vite';
27
- import type { ResolvedImageConfig } from './types.ts';
26
+ import type { Plugin } from "vite";
27
+ import type { ResolvedImageConfig } from "./types.ts";
28
28
  /**
29
29
  * Creates the vite-imagetools plugin with Avalon's configuration
30
30
  */
@@ -1,4 +1,4 @@
1
- import{createRequire as e}from"node:module";import{join as t}from"node:path";export async function createImagePlugin(n,r){if(!n.enabled)return r&&console.log(` ⏭️ Image optimization disabled`),[];try{let{imagetools:i}=e(t(process.cwd(),`package.json`))(`vite-imagetools`);return r&&(console.log(` 🖼️ Image optimization enabled`),console.log(` Format: ${n.defaultFormat}`),console.log(` Quality: ${n.quality}`),console.log(` Widths: ${n.widths.join(`, `)}`)),[i({include:n.include,exclude:n.exclude,removeMetadata:n.removeMetadata,defaultDirectives:e=>{let t=new URLSearchParams;return e.searchParams.has(`format`)||t.set(`format`,n.defaultFormat),e.searchParams.has(`quality`)||t.set(`quality`,String(n.quality)),e.searchParams.has(`jsx`)&&(!e.searchParams.has(`w`)&&!e.searchParams.has(`width`)&&t.set(`w`,n.widths.join(`;`)),t.set(`as`,`picture`)),t}})]}catch(e){let t=e instanceof Error?e.message:String(e);if(t.includes(`Cannot find package`)||t.includes(`MODULE_NOT_FOUND`))return console.warn(`⚠️ Avalon: Image optimization is enabled but vite-imagetools is not installed.
1
+ import{createRequire as e}from"node:module";import{join as t}from"node:path";import{pathToFileURL as n}from"node:url";async function r(){try{return await import(n(e(t(process.cwd(),`package.json`)).resolve(`vite-imagetools`)).href)}catch{return await import(`vite-imagetools`)}}export async function createImagePlugin(e,t){if(!e.enabled)return t&&console.log(` ⏭️ Image optimization disabled`),[];try{let{imagetools:n}=await r();return t&&(console.log(` 🖼️ Image optimization enabled`),console.log(` Format: ${e.defaultFormat}`),console.log(` Quality: ${e.quality}`),console.log(` Widths: ${e.widths.join(`, `)}`)),[n({include:e.include,exclude:e.exclude,removeMetadata:e.removeMetadata,defaultDirectives:t=>{let n=new URLSearchParams;return t.searchParams.has(`format`)||n.set(`format`,e.defaultFormat),t.searchParams.has(`quality`)||n.set(`quality`,String(e.quality)),t.searchParams.has(`jsx`)&&(!t.searchParams.has(`w`)&&!t.searchParams.has(`width`)&&n.set(`w`,e.widths.join(`;`)),n.set(`as`,`picture`)),n}})]}catch(e){let t=e instanceof Error?e.message:String(e);if(t.includes(`Cannot find package`)||t.includes(`MODULE_NOT_FOUND`))return console.warn(`⚠️ Avalon: Image optimization is enabled but vite-imagetools is not installed.
2
2
  Install it with: bun add -d vite-imagetools
3
3
  Or disable image optimization: image: false`),[];throw e}}export const IMAGE_TYPES_DECLARATION=`
4
4
  declare module '*.jpg' {
@@ -1 +1 @@
1
- import{readFile as e,access as t}from"node:fs/promises";import n from"node:path";import{detectFrameworkFromPath as r}from"../islands/integration-loader.js";import{EXTRACTOR_MAP as i}from"../build/prop-extractors/index.js";import{renderSidecarContent as a}from"../build/sidecar-renderer.js";import{getSidecarPath as o,writeSidecarIfChanged as s,deleteSidecar as c,isSidecarFresh as l}from"../build/sidecar-file-manager.js";const u=new Set([`react`,`preact`]),d=[`.vue`,`.svelte`,`.lit.ts`,`.solid.tsx`,`.qwik.tsx`];export async function checkTsConfigForArbitraryExtensions(t){let r=n.join(t,`tsconfig.json`);try{let t=await e(r,`utf-8`);JSON.parse(t)?.compilerOptions?.allowArbitraryExtensions!==!0&&console.warn(`[avalon] tsconfig.json is missing "allowArbitraryExtensions: true" — sidecar .d.[ext].ts files require this setting`)}catch{}}function f(e){let t=n.basename(e);return/\.d\.(vue|svelte|lit|solid\.tsx)/.test(t)}function p(e){return f(e)?!1:d.some(t=>e.endsWith(t))}async function m(t,n){try{let n=r(t);if(u.has(n))return!1;let c=i[n];if(!c)return!1;let l=a(c(await e(t,`utf-8`)).propsType);return await s(o(t),l)}catch(e){return n&&console.warn(`[avalon] Failed to generate sidecar for ${t}:`,e instanceof Error?e.message:e),!1}}export function islandSidecarPlugin(e={}){let n,r=new Set;return{name:`avalon:island-sidecar`,configResolved(e){n=e.root},async buildStart(){await checkTsConfigForArbitraryExtensions(n),r.clear()},async load(t){return!p(t)||r.has(t)||(r.add(t),await l(t,o(t)))||await m(t,e.verbose)&&e.verbose&&console.log(`[avalon] Generated sidecar for: ${t}`),null},async handleHotUpdate(n){let i=n.file;if(!p(i))return;let a=!0;try{await t(i)}catch{a=!1}if(!a){await c(o(i))&&e.verbose&&console.log(`[avalon] Deleted sidecar for removed file: ${i}`),r.delete(i);return}r.delete(i),await m(i,e.verbose)&&e.verbose&&console.log(`[avalon] Updated sidecar for: ${i}`)}}}
1
+ import{access as e,readFile as t}from"node:fs/promises";import n from"node:path";import{EXTRACTOR_MAP as r}from"../build/prop-extractors/index.js";import{deleteSidecar as i,getSidecarPath as a,isSidecarFresh as o,writeSidecarIfChanged as s}from"../build/sidecar-file-manager.js";import{renderSidecarContent as c}from"../build/sidecar-renderer.js";import{detectFrameworkFromPath as l}from"../islands/integration-loader.js";const u=new Set([`react`,`preact`]),d=[`.vue`,`.svelte`,`.lit.ts`,`.solid.tsx`,`.qwik.tsx`];export async function checkTsConfigForArbitraryExtensions(e){let r=n.join(e,`tsconfig.json`);try{let e=await t(r,`utf-8`);JSON.parse(e)?.compilerOptions?.allowArbitraryExtensions!==!0&&console.warn(`[avalon] tsconfig.json is missing "allowArbitraryExtensions: true" — sidecar .d.[ext].ts files require this setting`)}catch{}}function f(e){let t=n.basename(e);return/\.d\.(vue|svelte|lit|solid\.tsx)/.test(t)}function p(e){return f(e)?!1:d.some(t=>e.endsWith(t))}async function m(e,n){try{let n=l(e);if(u.has(n))return!1;let i=r[n];if(!i)return!1;let o=c(i(await t(e,`utf-8`)).propsType);return await s(a(e),o)}catch(t){return n&&console.warn(`[avalon] Failed to generate sidecar for ${e}:`,t instanceof Error?t.message:t),!1}}export function islandSidecarPlugin(t={}){let n,r=new Set;return{name:`avalon:island-sidecar`,configResolved(e){n=e.root},async buildStart(){await checkTsConfigForArbitraryExtensions(n),r.clear()},async load(e){return!p(e)||r.has(e)||(r.add(e),await o(e,a(e)))||await m(e,t.verbose)&&t.verbose&&console.log(`[avalon] Generated sidecar for: ${e}`),null},async handleHotUpdate(n){let o=n.file;if(!p(o))return;let s=!0;try{await e(o)}catch{s=!1}if(!s){await i(a(o))&&t.verbose&&console.log(`[avalon] Deleted sidecar for removed file: ${o}`),r.delete(o);return}r.delete(o),await m(o,t.verbose)&&t.verbose&&console.log(`[avalon] Updated sidecar for: ${o}`)}}}
@@ -1 +1 @@
1
- import{readdir as e,stat as t}from"node:fs/promises";import{resolve as n,join as r}from"node:path";export async function discoverModules(t,i){let s=n(i,t.dir),c=[],l=[],u=[];try{let n=await e(s,{withFileTypes:!0});for(let e of n){if(!e.isDirectory()||e.name.startsWith(`.`)||e.name===`node_modules`)continue;let n=r(s,e.name),i=r(n,t.pagesDirName),d=r(n,t.layoutsDirName),[f,p]=await Promise.all([o(i),o(d)]),m=a(e.name),h={name:e.name,path:n,pagesDir:f?i:null,layoutsDir:p?d:null,routePrefix:m};c.push(h),f&&l.push({dir:i,prefix:m}),p&&u.push({dir:d,prefix:m})}}catch{}return c.sort((e,t)=>e.routePrefix===`/`?-1:t.routePrefix===`/`?1:e.name.localeCompare(t.name)),{modules:c,pageDirs:l,layoutDirs:u}}function a(e){return[`home`,`root`,`main`,`index`].includes(e.toLowerCase())?`/`:`/`+e}async function o(e){try{return(await t(e)).isDirectory()}catch{return!1}}export async function getAllPageDirs(e,t,r){let a=[],s=n(r,e);if(await o(s)&&a.push({dir:s,prefix:`/`}),t){let{pageDirs:e}=await discoverModules(t,r);a.push(...e)}return a}export async function getAllLayoutDirs(e,t,r){let a=[],s=n(r,e);if(await o(s)&&a.push({dir:s,prefix:`/`}),t){let{layoutDirs:e}=await discoverModules(t,r);a.push(...e)}return a}
1
+ import{readdir as e,stat as t}from"node:fs/promises";import{join as n,resolve as r}from"node:path";export async function discoverModules(t,i){let s=r(i,t.dir),c=[],l=[],u=[];try{let r=await e(s,{withFileTypes:!0});for(let e of r){if(!e.isDirectory()||e.name.startsWith(`.`)||e.name===`node_modules`)continue;let r=n(s,e.name),i=n(r,t.pagesDirName),d=n(r,t.layoutsDirName),[f,p]=await Promise.all([o(i),o(d)]),m=a(e.name),h={name:e.name,path:r,pagesDir:f?i:null,layoutsDir:p?d:null,routePrefix:m};c.push(h),f&&l.push({dir:i,prefix:m}),p&&u.push({dir:d,prefix:m})}}catch{}return c.sort((e,t)=>e.routePrefix===`/`?-1:t.routePrefix===`/`?1:e.name.localeCompare(t.name)),{modules:c,pageDirs:l,layoutDirs:u}}function a(e){return[`home`,`root`,`main`,`index`].includes(e.toLowerCase())?`/`:`/`+e}async function o(e){try{return(await t(e)).isDirectory()}catch{return!1}}export async function getAllPageDirs(e,t,n){let a=[],s=r(n,e);if(await o(s)&&a.push({dir:s,prefix:`/`}),t){let{pageDirs:e}=await discoverModules(t,n);a.push(...e)}return a}export async function getAllLayoutDirs(e,t,n){let a=[],s=r(n,e);if(await o(s)&&a.push({dir:s,prefix:`/`}),t){let{layoutDirs:e}=await discoverModules(t,n);a.push(...e)}return a}
@@ -10,8 +10,8 @@
10
10
  * or layouts is automatically treated as an island. No fixed islands directory required.
11
11
  */
12
12
  import type { Plugin, PluginOption, ViteDevServer } from "vite";
13
- import type { AvalonPluginConfig, IntegrationName, ResolvedAvalonConfig } from "./types.ts";
14
13
  import type { NitroConfigOutput } from "../nitro/config.ts";
14
+ import type { AvalonPluginConfig, IntegrationName, ResolvedAvalonConfig } from "./types.ts";
15
15
  declare global {
16
16
  var __avalonConfig: ResolvedAvalonConfig | undefined;
17
17
  var __viteDevServer: ViteDevServer | undefined;
@@ -49,5 +49,5 @@ export declare function getPagesDir(): string;
49
49
  export declare function getLayoutsDir(): string;
50
50
  export declare function getNitroConfig(): NitroConfigOutput | undefined;
51
51
  export declare function isNitroEnabled(): boolean;
52
- export type { AvalonPluginConfig, IntegrationName, ResolvedAvalonConfig, ImageConfig, ResolvedImageConfig, } from "./types.ts";
53
52
  export type { AvalonNitroConfig, NitroConfigOutput } from "../nitro/config.ts";
53
+ export type { AvalonPluginConfig, ImageConfig, IntegrationName, ResolvedAvalonConfig, ResolvedImageConfig, } from "./types.ts";
@@ -1 +1 @@
1
- import{createRequire as e}from"node:module";import{dirname as t,join as n}from"node:path";import{resolveConfig as r,checkDirectoriesExist as i}from"./config.js";import{activateIntegrations as a,activateSingleIntegration as o}from"./integration-activator.js";import{discoverIntegrationsFromIslandUsage as s}from"./auto-discover.js";import{validateActiveIntegrations as c,formatValidationResults as l}from"./validation.js";import{createMDXPlugin as u}from"../build/mdx-plugin.js";import{mdxIslandTransform as d}from"../build/mdx-island-transform.js";import{pageIslandTransform as f}from"../build/page-island-transform.js";import{registry as p}from"../core/integrations/registry.js";import{createNitroIntegration as m}from"./nitro-integration.js";import{islandSidecarPlugin as h}from"./island-sidecar-plugin.js";import{createImagePlugin as g}from"./image-optimization.js";import{islandClientBundlerPlugin as _}from"../build/island-client-bundler.js";import{islandCodeSplittingPlugin as v}from"../build/island-code-splitting.js";export async function collectIntegrationPlugins(e,t=!1){let n=[],r=[];for(let i of e){let e=await y(i,t);i===`lit`?r.push(...e):n.push(...e)}return[...r,...n]}async function y(e,t){let n=p.get(e);if(!n||typeof n.vitePlugin!=`function`)return[];try{let e=await n.vitePlugin();return(Array.isArray(e)?e:[e]).filter(e=>e!=null)}catch(t){return console.warn(`[avalon] Failed to load vite plugin for ${e}:`,t instanceof Error?t.message:t),[]}}async function b(e,t){let n=new Set;try{let r=await s(e.pagesDir,e.layoutsDir,t,e.modules?.dir);for(let t of r)e.integrations.includes(t)&&n.add(t)}catch{for(let t of e.integrations)n.add(t)}return n}async function x(e){if(!e.lazyIntegrations||e.integrations.length===0)return[...e.integrations];let t=await b(e);return t.size===0?[...e.integrations]:Array.from(t)}async function S(e){try{let t=await u({jsxImportSource:e.mdx.jsxImportSource,syntaxHighlighting:e.mdx.syntaxHighlighting,remarkPlugins:e.mdx.remarkPlugins,rehypePlugins:e.mdx.rehypePlugins,development:!0});return t.push(d({verbose:e.verbose})),t}catch(t){return e.showWarnings&&console.warn(`⚠️ Could not configure MDX plugin:`,t),[]}}function C(e,t,n){let{plugins:r,nitroOptions:i}=m(e,t);return globalThis.__nitroConfig=i,{plugins:r,options:i}}async function w(e,t,n){if(e.autoDiscoverIntegrations)try{let r=await s(e.pagesDir,e.layoutsDir,t,e.modules?.dir);for(let t of r)if(!n.has(t))try{await o(t,n,e.verbose)}catch(n){e.showWarnings&&console.warn(` ⚠️ Could not auto-load integration: ${t}`,n)}}catch(t){e.showWarnings&&console.warn(` ⚠️ Auto-discovery failed:`,t)}}function T(e,t){if(!e.validateIntegrations||t.size===0)return;let n=c(t,e.showWarnings);n.allValid||(console.error(l(n)),e.showWarnings&&console.warn(` ⚠️ Some integrations have validation issues.`))}export async function avalon(o){let s,c,l=new Set,u=r(o,!0),d=await x(u);d.length>0&&await a({...u,integrations:d},l);let p=await S(u),m=await g(u.image,u.verbose),y=[];l.size>0&&(y=await collectIntegrationPlugins(l,u.verbose));let b=[];if(o?.nitro){let{plugins:e}=C(u,o.nitro,u.verbose);b=e}let E=h({verbose:u.verbose}),D=e(import.meta.url),O=null;try{O=n(t(D.resolve(`@useavalon/avalon/client`)),`main.js`)}catch{}let k=new Set([`preact`,`react`,`vue`,`svelte`,`solid`,`lit`,`qwik`].flatMap(e=>[`/@useavalon/${e}/client`,`/@useavalon/${e}/client/hmr`,`@useavalon/${e}/client`,`@useavalon/${e}/client/hmr`])),A={name:`avalon`,enforce:`pre`,config(e,{command:t}){let n={preact:[`preact`,`preact/hooks`],react:[`react`,`react-dom`,`react-dom/client`],vue:[`vue`],svelte:[`svelte`,`svelte/internal`],solid:[`solid-js`,`solid-js/web`],lit:[`lit`,`@lit-labs/ssr-client`],qwik:[`@builder.io/qwik`]},r=d.flatMap(e=>n[e]??[]);return{define:{__AVALON_PER_ISLAND__:JSON.stringify(t===`build`)},oxc:{exclude:[/node_modules\/@useavalon\/.*\.tsx?$/]},ssr:{noExternal:[/^@useavalon\//]},optimizeDeps:{exclude:[`@useavalon/avalon`,...d.map(e=>`@useavalon/${e}`)],include:r}}},configResolved(e){c=e,s=r(o,e.command===`serve`),globalThis.__avalonConfig=s,i(s,e.root)},async resolveId(e){if(e===`/src/client/main.js`&&O)return O;if(k.has(e)){let t=e.startsWith(`/`)?e.slice(1):e;return(await this.resolve(t))?.id??null}return null},async transform(e,t){if(t.includes(`@useavalon/`)&&/\.tsx?$/.test(t)){let{transform:n}=await import(`oxc-transform`),r=await n(t,e,{sourcemap:!0,typescript:{onlyRemoveTypeImports:!1}});return{code:r.code,map:r.map,moduleType:`js`}}},async buildStart(){await w(s,c?.root,l),T(s,l)},configureServer(e){globalThis.__viteDevServer=e}},j=y.filter(e=>e.name?.includes(`lit`)),M=y.filter(e=>!e.name?.includes(`lit`));return[f({pagesDir:u.pagesDir,layoutsDir:u.layoutsDir,modules:u.modules,verbose:u.verbose}),_(u,o?.nitro),v(u,o?.nitro),...m,...j,...p,A,E,...b,...M]}export function getResolvedConfig(){return globalThis.__avalonConfig}export function getPagesDir(){return globalThis.__avalonConfig?.pagesDir??`src/pages`}export function getLayoutsDir(){return globalThis.__avalonConfig?.layoutsDir??`src/layouts`}export function getNitroConfig(){return globalThis.__nitroConfig}export function isNitroEnabled(){return globalThis.__nitroConfig!==void 0}
1
+ import{createRequire as e}from"node:module";import{dirname as t,join as n}from"node:path";import{islandClientBundlerPlugin as r}from"../build/island-client-bundler.js";import{islandCodeSplittingPlugin as i}from"../build/island-code-splitting.js";import{mdxIslandTransform as a}from"../build/mdx-island-transform.js";import{createMDXPlugin as o}from"../build/mdx-plugin.js";import{pageIslandTransform as s}from"../build/page-island-transform.js";import{registry as c}from"../core/integrations/registry.js";import{discoverIntegrationsFromIslandUsage as l}from"./auto-discover.js";import{checkDirectoriesExist as u,resolveConfig as d}from"./config.js";import{createImagePlugin as f}from"./image-optimization.js";import{activateIntegrations as p,activateSingleIntegration as m}from"./integration-activator.js";import{islandSidecarPlugin as h}from"./island-sidecar-plugin.js";import{createNitroIntegration as g}from"./nitro-integration.js";import{formatValidationResults as _,validateActiveIntegrations as v}from"./validation.js";export async function collectIntegrationPlugins(e,t=!1){let n=[],r=[];for(let i of e){let e=await y(i,t);i===`lit`?r.push(...e):n.push(...e)}return[...r,...n]}async function y(e,t){let n=c.get(e);if(!n||typeof n.vitePlugin!=`function`)return[];try{let e=await n.vitePlugin();return(Array.isArray(e)?e:[e]).filter(e=>e!=null)}catch(t){return console.warn(`[avalon] Failed to load vite plugin for ${e}:`,t instanceof Error?t.message:t),[]}}async function b(e,t){let n=new Set;try{let r=await l(e.pagesDir,e.layoutsDir,t,e.modules?.dir);for(let t of r)e.integrations.includes(t)&&n.add(t)}catch{for(let t of e.integrations)n.add(t)}return n}async function x(e){if(!e.lazyIntegrations||e.integrations.length===0)return[...e.integrations];let t=await b(e);return t.size===0?[...e.integrations]:Array.from(t)}async function S(e){try{let t=await o({jsxImportSource:e.mdx.jsxImportSource,syntaxHighlighting:e.mdx.syntaxHighlighting,remarkPlugins:e.mdx.remarkPlugins,rehypePlugins:e.mdx.rehypePlugins,development:!0});return t.push(a({verbose:e.verbose})),t}catch(t){return e.showWarnings&&console.warn(`⚠️ Could not configure MDX plugin:`,t),[]}}function C(e,t,n){let{plugins:r,nitroOptions:i}=g(e,t);return globalThis.__nitroConfig=i,{plugins:r,options:i}}async function w(e,t,n){if(e.autoDiscoverIntegrations)try{let r=await l(e.pagesDir,e.layoutsDir,t,e.modules?.dir);for(let t of r)if(!n.has(t))try{await m(t,n,e.verbose)}catch(n){e.showWarnings&&console.warn(` ⚠️ Could not auto-load integration: ${t}`,n)}}catch(t){e.showWarnings&&console.warn(` ⚠️ Auto-discovery failed:`,t)}}function T(e,t){if(!e.validateIntegrations||t.size===0)return;let n=v(t,e.showWarnings);n.allValid||(console.error(_(n)),e.showWarnings&&console.warn(` ⚠️ Some integrations have validation issues.`))}export async function avalon(a){let o,c,l=new Set,m=d(a,!0),g=await x(m);g.length>0&&await p({...m,integrations:g},l);let _=await S(m),v=await f(m.image,m.verbose),y=[];l.size>0&&(y=await collectIntegrationPlugins(l,m.verbose));let b=[];if(a?.nitro){let{plugins:e}=C(m,a.nitro,m.verbose);b=e}let E=h({verbose:m.verbose}),D=e(import.meta.url),O=null;try{O=n(t(D.resolve(`@useavalon/avalon/client`)),`main.js`)}catch{}let k=new Set([`preact`,`react`,`vue`,`svelte`,`solid`,`lit`,`qwik`].flatMap(e=>[`/@useavalon/${e}/client`,`/@useavalon/${e}/client/hmr`,`@useavalon/${e}/client`,`@useavalon/${e}/client/hmr`])),A={name:`avalon`,enforce:`pre`,config(e,{command:t}){let n={preact:[`preact`,`preact/hooks`],react:[`react`,`react-dom`,`react-dom/client`],vue:[`vue`],svelte:[`svelte`,`svelte/internal`],solid:[`solid-js`,`solid-js/web`],lit:[`lit`,`@lit-labs/ssr-client`],qwik:[`@builder.io/qwik`]},r=g.flatMap(e=>n[e]??[]);return{define:{__AVALON_PER_ISLAND__:JSON.stringify(t===`build`)},oxc:{exclude:[/node_modules\/@useavalon\/.*\.tsx?$/]},ssr:{noExternal:[/^@useavalon\//]},optimizeDeps:{exclude:[`@useavalon/avalon`,...g.map(e=>`@useavalon/${e}`)],include:r}}},configResolved(e){c=e,o=d(a,e.command===`serve`),globalThis.__avalonConfig=o,u(o,e.root)},async resolveId(e){if(e===`/src/client/main.js`&&O)return O;if(k.has(e)){let t=e.startsWith(`/`)?e.slice(1):e;return(await this.resolve(t))?.id??null}return null},async transform(e,t){if(t.includes(`@useavalon/`)&&/\.tsx?$/.test(t)){let{transform:n}=await import(`oxc-transform`),r=await n(t,e,{sourcemap:!0,typescript:{onlyRemoveTypeImports:!1}});return{code:r.code,map:r.map,moduleType:`js`}}},async buildStart(){await w(o,c?.root,l),T(o,l)},configureServer(e){globalThis.__viteDevServer=e}},j=y.filter(e=>e.name?.includes(`lit`)),M=y.filter(e=>!e.name?.includes(`lit`));return[s({pagesDir:m.pagesDir,layoutsDir:m.layoutsDir,modules:m.modules,verbose:m.verbose}),r(m,a?.nitro),i(m,a?.nitro),...v,...j,..._,A,E,...b,...M]}export function getResolvedConfig(){return globalThis.__avalonConfig}export function getPagesDir(){return globalThis.__avalonConfig?.pagesDir??`src/pages`}export function getLayoutsDir(){return globalThis.__avalonConfig?.layoutsDir??`src/layouts`}export function getNitroConfig(){return globalThis.__nitroConfig}export function isNitroEnabled(){return globalThis.__nitroConfig!==void 0}