@wren-js/core 0.14.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs CHANGED
@@ -1,11 +1,11 @@
1
- import{_ as e,b as t,d as n,f as r,g as i,h as a,l as o,m as s,t as c,u as l,v as u,y as d}from"./constants-DkL4dSXt.mjs";import{c as f,d as p,f as m,l as h,n as g,p as _}from"./constants-CB936btA.mjs";import{CONFIG_VALID_EXTENSIONS as v,DEFAULTS as y}from"./config.mjs";import{t as b}from"./utils-li1KYQ1O.mjs";import{existsSync as ee}from"node:fs";import{basename as te,dirname as x,extname as ne,isAbsolute as re,join as ie,relative as S,resolve as C}from"node:path";import w from"node:process";import{parseArgs as ae}from"node:util";import{Visitor as T,createBuilder as oe,createServer as se,defineConfig as ce,isCSSRequest as le,loadConfigFromFile as ue,loadEnv as de,mergeConfig as E,normalizePath as D,parseSync as O,perEnvironmentState as fe,resolveEnvPrefix as pe,transformWithOxc as me}from"vite";import{mkdir as he,readFile as k,readdir as ge,rm as A,writeFile as j}from"node:fs/promises";import{pathToFileURL as _e}from"node:url";const M=e=>w.platform===`win32`?e.toUpperCase():e,ve=()=>{let e=/* @__PURE__ */ new Map;return(t,n)=>{for(let[t,n]of e)w.env[t]===n&&delete w.env[t];e.clear();let r=new Set(Object.keys(w.env).map(M)),i=de(t,n,``);for(let[t,n]of Object.entries(i)){let i=M(t);r.has(i)||(w.env[t]=n,e.set(i,n))}}},ye=(e,t)=>{let n=n=>typeof n==`string`&&!Object.hasOwn(e,n)&&!t.some(e=>n.startsWith(e)),r=e=>n(e)&&Object.hasOwn(globalThis.process.env,e);return new Proxy(e,{get(e,t,n){return r(t)?globalThis.process.env[t]:Reflect.get(e,t,n)},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(r(t)?globalThis.process.env:e,t)},has(e,t){return Reflect.has(e,t)||r(t)},ownKeys(e){return[...Reflect.ownKeys(e),...Object.keys(globalThis.process.env).filter(n)]}})},N=`virtual:${d}-server-env`,P=`\0${N}`,F=`import.meta.env.`,be=()=>{let e=fe(({config:e})=>{let t=Object.fromEntries(Object.entries(e.env).map(([e,t])=>[F+e,JSON.stringify(t)]));for(let[n,r]of Object.entries(e.define??{}))n.startsWith(F)&&(t[n]=typeof r==`string`?r:JSON.stringify(r)??`undefined`);return t[`${F}SSR`]=`true`,t});return{applyToEnvironment:e=>e.config.consumer===`server`,load:{filter:{id:RegExp(`^${P}$`)},handler(){let t=Object.entries(e(this)).map(([e,t])=>`${JSON.stringify(e.slice(16))}: ${t}`),n=pe({envPrefix:this.environment.config.envPrefix});return`export default (${ye.toString()})({${t.join(`,`)}}, ${JSON.stringify(n)});`}},name:`${d}-server-env`,resolveId:{filter:{id:RegExp(`^${N}$`)},handler:()=>P},transform:{filter:{code:/\bmeta\b/,id:/\.[cm]?[jt]sx?(?:$|\?)/},handler(t,n){if(n===P)return null;let r=`__wrenServerEnv`;if(t.includes(r)||t.includes(`\\u`)){let{errors:e,program:i}=O(n.split(`?`)[0],t);if(e.length>0)return this.error(e[0].message);let a=/* @__PURE__ */ new Set;for(new T({Identifier:e=>void a.add(e.name)}).visit(i);a.has(r);)r+=`_`}return me(t,n,{define:{...e(this),"import.meta.env":r},inject:{[r]:[N,`default`]},jsx:`preserve`,tsconfig:!1})}}}},I=e=>{let t=0;for(let n=e.indexOf(`
1
+ import{_ as e,b as t,d as n,f as r,g as i,h as a,l as o,m as s,t as c,u as l,v as u,y as d}from"./constants-B3i9jJ2c.mjs";import{c as f,d as p,f as m,l as h,n as ee,p as g}from"./constants-DiYpQ2qF.mjs";import{CONFIG_VALID_EXTENSIONS as _,DEFAULTS as v}from"./config.mjs";import{t as y}from"./utils-DduvrkBB.mjs";import{existsSync as te}from"node:fs";import{basename as ne,dirname as b,extname as re,isAbsolute as x,join as S,relative as C,resolve as w}from"node:path";import T from"node:process";import{parseArgs as ie}from"node:util";import{Visitor as E,createBuilder as ae,createServer as oe,defineConfig as se,isCSSRequest as ce,loadConfigFromFile as le,loadEnv as ue,mergeConfig as D,normalizePath as O,parseSync as k,perEnvironmentState as de,resolveEnvPrefix as fe,transformWithOxc as pe}from"vite";import{mkdir as me,readFile as A,readdir as he,rm as j,writeFile as M}from"node:fs/promises";import{pathToFileURL as ge}from"node:url";const N=e=>T.platform===`win32`?e.toUpperCase():e,_e=()=>{let e=/* @__PURE__ */ new Map;return(t,n)=>{for(let[t,n]of e)T.env[t]===n&&delete T.env[t];e.clear();let r=new Set(Object.keys(T.env).map(N)),i=ue(t,n,``);for(let[t,n]of Object.entries(i)){let i=N(t);r.has(i)||(T.env[t]=n,e.set(i,n))}}},ve=(e,t)=>{let n=n=>typeof n==`string`&&!Object.hasOwn(e,n)&&!t.some(e=>n.startsWith(e)),r=e=>n(e)&&Object.hasOwn(globalThis.process.env,e);return new Proxy(e,{get(e,t,n){return r(t)?globalThis.process.env[t]:Reflect.get(e,t,n)},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(r(t)?globalThis.process.env:e,t)},has(e,t){return Reflect.has(e,t)||r(t)},ownKeys(e){return[...Reflect.ownKeys(e),...Object.keys(globalThis.process.env).filter(n)]}})},P=`virtual:${d}-server-env`,F=`\0${P}`,I=`import.meta.env.`,ye=()=>{let e=de(({config:e})=>{let t=Object.fromEntries(Object.entries(e.env).map(([e,t])=>[I+e,JSON.stringify(t)]));for(let[n,r]of Object.entries(e.define??{}))n.startsWith(I)&&(t[n]=typeof r==`string`?r:JSON.stringify(r)??`undefined`);return t[`${I}SSR`]=`true`,t});return{applyToEnvironment:e=>e.config.consumer===`server`,load:{filter:{id:RegExp(`^${F}$`)},handler(){let t=Object.entries(e(this)).map(([e,t])=>`${JSON.stringify(e.slice(16))}: ${t}`),n=fe({envPrefix:this.environment.config.envPrefix});return`export default (${ve.toString()})({${t.join(`,`)}}, ${JSON.stringify(n)});`}},name:`${d}-server-env`,resolveId:{filter:{id:RegExp(`^${P}$`)},handler:()=>F},transform:{filter:{code:/\bimport\s*\.\s*meta\s*(?:\?\s*)?\.\s*env\b/,id:/\.[cm]?[jt]sx?(?:$|\?)/},handler(t,n){if(n===F)return null;let r=`__wrenServerEnv`;if(t.includes(r)||t.includes(`\\u`)){let{errors:e,program:i}=k(n.split(`?`)[0],t);if(e.length>0)return this.error(e[0].message);let a=/* @__PURE__ */ new Set;for(new E({Identifier:e=>void a.add(e.name)}).visit(i);a.has(r);)r+=`_`}return pe(t,n,{define:{...e(this),"import.meta.env":r},inject:{[r]:[P,`default`]},jsx:`preserve`,tsconfig:!1})}}}},L=e=>{let t=0;for(let n=e.indexOf(`
2
2
  `);n!==-1;n=e.indexOf(`
3
- `,n+1))t++;return t},xe=(e,t,n,r)=>{let i=I(e.slice(t,n))-I(r);return{end:n,start:t,text:i>0?r+`
4
- `.repeat(i):r}},Se=(e,t)=>{let n=``,r=0;for(let{end:i,start:a,text:o}of t.toSorted((e,t)=>e.start-t.start))n+=e.slice(r,a)+o,r=i;return n+e.slice(r)},L=e=>te(e,ne(e)),Ce=e=>Object.fromEntries(e.toSorted(([e],[t])=>e<t?-1:1)),we=e=>{let t=[];for(let{entries:n}of e)for(let{exportName:e,isType:r}of n){if(r)continue;let n=e.kind===`Default`?`default`:e.name;n!==null&&t.push(n)}return t},Te=/^(?:[a-z][a-z\d+.-]*:|\/\/)/i,R=e=>{if(e.type===`Literal`&&typeof e.value==`string`)return e.value;if(e.type===`TemplateLiteral`&&e.expressions.length===0)return e.quasis[0]?.value.cooked??void 0},z=({value:e})=>{if(e?.type===`Literal`)return e.value;if(e?.type===`JSXExpressionContainer`)return R(e.expression)},Ee=(e,t)=>{let n={kept:[]};for(let r of t.attributes){let t=e.slice(r.start,r.end);if(r.type!==`JSXAttribute`||r.name.type!==`JSXIdentifier`){n.kept.push(t);continue}let{name:i}=r.name;i===`src`?n.src=r:i===`dangerouslySetInnerHTML`?n.html=r:(i===`type`&&(n.type=z(r)),n.kept.push(t))}return n},De=({key:e})=>e.type===`Identifier`?e.name:e.type===`Literal`?e.value:null,Oe=({value:e})=>{let t=e?.type===`JSXExpressionContainer`?e.expression:void 0;if(t?.type===`ObjectExpression`)for(let e of t.properties){if(e.type!==`Property`||e.computed||De(e)!==`__html`)continue;let t=R(e.value);return t===void 0?void 0:[t,e.value.start+1]}},ke=(e,t)=>{if(t)return Oe(t);let n=e.children.filter(e=>e.type!==`JSXText`||e.value.trim()!==``);if(n.length===0)return[``,e.start];if(n.length!==1)return;let[r]=n;if(r.type===`JSXText`)return[r.value,r.start];if(r.type!==`JSXExpressionContainer`)return;let i=R(r.expression);return i===void 0?void 0:[i,r.expression.start+1]},Ae=({name:e})=>e.type===`JSXIdentifier`&&e.name===`script`,B=(e,t)=>{let n=[],r=[],{errors:i,program:a}=O(t,e);if(i.length>0)return{scripts:n,warnings:r};let o=0,s=/* @__PURE__ */ new Set,c=e=>{for(let t of e.children)s.add(t.start)},l=t=>{let{html:i,kept:a,src:c,type:l}=Ee(e,t.openingElement),u=c&&z(c),d=u!==void 0&&!Te.test(u);if(l!==`module`){d&&_.test(u)&&r.push(`<script src="${u}"> is not bundled; add type="module" to make it a page script.`);return}let f={attributes:a,end:t.end,replacement:s.has(t.start)?``:`<></>`,start:t.start};if(c){d&&n.push({...f,kind:`src`,src:u});return}let p=ke(t,i);if(!p){r.push(`<script type="module"> content must be a static string to be bundled.`);return}let[m,h]=p;m.trim()!==``&&n.push({...f,code:m,codeStart:h,index:o++,kind:`inline`})};return new T({JSXElement(e){c(e),Ae(e.openingElement)&&l(e)},JSXFragment:c}).visit(a),{scripts:n,warnings:r}},V=`virtual:${d}-page-scripts`,H=`__wrenPageScripts`,U=`${V}:route:`,W=`\0${U}`,G=`\0${f}`,K=/\?wren-script=(\d+)\.ts$/,q=`__wren-page-scripts.mjs`,J=`\0${h}`,Y=(e,t)=>{let n=D(S(e,t));return n.startsWith(`../`)||re(n)?`@fs/${D(t).replace(/^\//,``)}`:n},je=async(e,t,n)=>{let r=t.attributes.filter(e=>!/^type\b/.test(e));if(r.length>0&&e.warn(`Page script attributes are dropped when hoisted: ${r.join(` `)}`),t.kind===`inline`)return{id:`${n}?wren-script=${t.index}.ts`,name:`${L(n)}-${t.index}`};let i=await e.resolve(t.src,n);if(!i||i.external||i.id.includes(`/node_modules/`))e.warn(`Page script "${t.src}" must resolve to a project file; left as is.`);else return{id:i.id,name:L(i.id)}},Me=async(e,t,n)=>{let r=await k(t,`utf8`),i=B(r,t).scripts.find(e=>e.kind===`inline`&&e.index===n);return i?.kind===`inline`?{code:`
5
- `.repeat(I(r.slice(0,i.codeStart)))+i.code,map:null}:e.error(`Inline page script #${n} not found in ${t}.`)},Ne=e=>{let t=/* @__PURE__ */ new Map,n=/* @__PURE__ */ new Set,r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map,a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ new Map,s,c=[],l=(e,n)=>{let r=Y(e,n.id),i=t.get(r)??{...n,key:r};return t.set(r,i),i},u=(e,t)=>{let n=/* @__PURE__ */ new Set,a=/* @__PURE__ */ new Set,o=e=>{if(!a.has(e)){a.add(e);for(let t of r.get(e)??[])n.add(t);for(let t of i.get(e)?.values()??[])for(let e of t)n.add(e);for(let n of t(e))o(n)}};return o(e),[...n]},p=async(e,t,n,i)=>{let{scripts:a,warnings:o}=B(t,n),s=a.map(({end:e,replacement:n,start:r})=>xe(t,r,e,n));if(!i)return s;for(let t of o)e.warn(t);let c=await Promise.all(a.map(t=>je(e,t,n))),{root:u}=e.environment.config;return r.set(n,c.flatMap(e=>e?[l(u,e)]:[])),s.filter((e,t)=>c[t])},v=(e,t,n)=>{if(!n)return`\nexport const ${g} = async () => (await import(${JSON.stringify(U+encodeURIComponent(e))})).default;\n`;let r=Y(t,e);return a.set(e,r),`\nimport ${H} from ${JSON.stringify(V)};export const ${g} = () => ${H}.routes[${JSON.stringify(r)}];\n`},y=(e,t)=>{let n=u(t,t=>c.flatMap(({moduleGraph:n})=>{let r=n.getModuleById(t);return r?.file&&re(r.file)&&e.addWatchFile(r.file),Array.from(r?.importedModules??[],e=>e.id).filter(e=>e!==null&&!le(e))})),{base:r}=e.environment.config;return`export default ${JSON.stringify(n.map(e=>r+e.key))};`};return{buildApp:{async handler(e){let r=[...t.values()],i=r.filter(e=>!e.url).map(e=>e.key);if(i.length>0)throw Error(`[${d}] Page scripts were not bundled by the client environment (server environments must build first): ${i.join(`, `)}`);let s={routes:Ce(Array.from(a,([e,t])=>[t,u(e,e=>o.get(e)??[]).map(e=>e.url)])),scripts:Ce(r.map(e=>[e.key,e.url]))},c=`export default ${JSON.stringify(s)};\n`;await Promise.all([...n].map(async t=>{let{build:n,root:r}=e.environments[t].config;await j(C(r,n.outDir,q),c)}))},order:`post`},buildEnd(){if(this.environment.mode===`build`)for(let e of this.getModuleIds()){let t=this.getModuleInfo(e);if(!t)continue;let n=[...t.importedIds,...t.dynamicallyImportedIds];o.set(e,[...o.get(e)??[],...n])}},buildStart(){let{mode:e,name:n}=this.environment;if(e===`build`&&n===`client`)for(let e of t.values())e.reference=this.emitFile({id:e.id,name:`scripts/${e.name}`,preserveSignature:`exports-only`,type:`chunk`})},configResolved(t){s=`${D(C(t.root,e))}/`},configureServer(e){c=Object.values(e.environments)},enforce:`pre`,generateBundle(){if(this.environment.name!==`client`)return;let{base:e}=this.environment.config;for(let n of t.values())n.reference&&(n.url=e+this.getFileName(n.reference))},load:{filter:{id:[K,RegExp(`^${J}`),RegExp(`^${W}`),RegExp(`^${G}$`)]},async handler(e){let{config:t,mode:n}=this.environment;if(e===G)return`export {};`;if(e.startsWith(J)){let r=e.slice(J.length),{key:i}=l(t.root,{id:r,name:L(r)});return n===`build`?`import ${H} from ${JSON.stringify(V)};export default ${H}.scripts[${JSON.stringify(i)}];`:`export default ${JSON.stringify(t.base+i)};`}if(e.startsWith(W))return y(this,decodeURIComponent(e.slice(W.length)));let r=K.exec(e);return r?Me(this,e.slice(0,r.index),Number(r[1])):null}},name:`${d}-page-scripts`,renderChunk(e,t){if(!e.includes(V))return null;this.environment.config.build.write&&n.add(this.environment.name);let r=D(S(x(t.fileName),q)),i=r.startsWith(`.`)?r:`./${r}`;return{code:e.replaceAll(V,i),map:null}},resolveId:{filter:{id:RegExp(`^(?:${f}|${h}|${V})`)},async handler(e,t){if(e.startsWith(`virtual:wrenjs-hoist:`)){if(t&&this.environment.config.consumer===`server`){let n=await this.resolve(e.slice(f.length),t);if(!n?.id.startsWith(J))return this.error(`"${e}" must resolve to a Wren page script (${t}).`);let r=n.id.slice(J.length),a=l(this.environment.config.root,{id:r,name:L(r)}),o=i.get(t)??/* @__PURE__ */ new Map,s=o.get(this.environment.name)??/* @__PURE__ */ new Set;i.set(t,o.set(this.environment.name,s.add(a)))}return G}return e.startsWith(`virtual:wrenjs-script-url:`)||e.startsWith(U)?`\0${e}`:e===V?{external:!0,id:e}:null}},sharedDuringBuild:!0,transform:{filter:{id:_},async handler(e,t){let{config:n,mode:a}=this.environment,o=n.consumer===`server`,c=o&&t.startsWith(s)&&m.test(t),l=e.includes(`<script`)?await p(this,e,t,o):[];if(l.length===0&&r.delete(t),i.get(t)?.delete(this.environment.name),l.length===0&&!c)return null;let u=c?v(t,n.root,a===`build`):``;return{code:Se(e,l)+u,map:null}}}}},Pe=/<link\b(?=[^>]*\srel="stylesheet")(?![^>]*\s(?:disabled|media)\b)[^>]*\shref="([^"]+)"[^>]*>/gi,Fe=/\sdata-precedence="[^"]*"/i,Ie=/<\/(style)/gi,Le=(e,t,n,r)=>{for(let i of Object.values(e)){if(i.type!==`asset`||!i.fileName.endsWith(`.css`))continue;let e=Buffer.from(i.source);e.byteLength<n&&r.set(t+i.fileName,e.toString().replace(Ie,`<\\/$1`))}},Re=(e,t)=>{let n=e.indexOf(`</head>`);return n===-1&&(n=e.length),e.slice(0,n).replace(Pe,(e,n)=>{let r=t.get(n);if(r===void 0)return e;let i=Fe.exec(e)?.[0]??``,a=`<style data-href="${n}"${i}>${r}</style>`;return i?`${a}<link disabled type="text/x-inlined"${e.slice(5)}`:a})+e.slice(n)},ze=async(e,t,n=`http://localhost`,r=!1,i=/* @__PURE__ */ new Map)=>{let a=new URL(n);if(!/^https?:$/.test(a.protocol)||a.href!==`${a.origin}/`)throw Error(`build.prerender.origin must be an HTTP(S) origin.`);let o=/* @__PURE__ */ new Set,s=/* @__PURE__ */ new Set,c=async({pathname:e,response:n})=>{let r=b(e);if(n.status!==200)throw Error(`Cannot prerender ${r}: HTTP ${n.status}.`);let a=n.headers.get(`content-type`)?.startsWith(`text/html`),c=a?ie(r.slice(1),`index.html`):r.slice(1);if(o.has(r)||s.has(c))throw Error(`Conflicting prerender artifact: ${r}.`);o.add(r),s.add(c);let l=ie(t,c);await he(x(l),{recursive:!0}),await j(l,a&&i.size>0?Re(await n.text(),i):new Uint8Array(await n.arrayBuffer()))},l=0;return await Promise.all(e.map(async e=>{let t=await e.getPaths(r);await Promise.all(t.map(async t=>{let n=b(t);if(o.has(n))throw Error(`Multiple prerender providers claim ${n}.`);let r=await e.render(new Request(new URL(n,a)));if(await Promise.all(r.map(c)),!o.has(n))throw Error(`Prerender renderer did not return ${n}.`);l++}))})),l},Be=e=>{let t=e.integrations?.flatMap(({prerender:e})=>e?[{...e,output:``,reference:``}]:[])??[],n=e.build?.inlineCSS,r=n===!0?1/0:n||0,i=/* @__PURE__ */ new Map;return{apply:`build`,buildApp:{async handler(n){if(!t.length)return;let r=await Promise.all(t.map(async({environment:e,output:t})=>{if(!t)throw Error(`No prerender entry was built for ${e}.`);return import(
3
+ `,n+1))t++;return t},be=(e,t,n,r)=>{let i=L(e.slice(t,n))-L(r);return{end:n,start:t,text:i>0?r+`
4
+ `.repeat(i):r}},xe=(e,t)=>{let n=``,r=0;for(let{end:i,start:a,text:o}of t.toSorted((e,t)=>e.start-t.start))n+=e.slice(r,a)+o,r=i;return n+e.slice(r)},R=/\/node_modules\//,Se=(e,t)=>{let n=O(e).split(`/`).filter(e=>e!==``&&e!==`.`&&e!==`..`).join(`/`),r=n?`(?:^|/)${n.replaceAll(/[$()*+.?[\\\]^{|}]/g,`\\$&`)}/.*`:``;return RegExp(`${r}${t.source}`)},z=e=>ne(e,re(e)),Ce=/[\p{Cc} "#<>?^`{}\u0080-\u{10FFFF}]+/gu,B=e=>e.toWellFormed().normalize(`NFC`).replaceAll(Ce,e=>encodeURIComponent(e)),V=e=>Object.fromEntries(e.toSorted(([e],[t])=>e<t?-1:1)),we=async(e,t,n)=>{let r=0,i=!1;await Promise.all(Array.from({length:Math.min(t,e.length)},async()=>{for(;!i&&r<e.length;){let t=e[r++];try{await n(t)}catch(e){throw i=!0,e}}}))},Te=e=>{let t=[];for(let{entries:n}of e)for(let{exportName:e,isType:r}of n){if(r)continue;let n=e.kind===`Default`?`default`:e.name;n!==null&&t.push(n)}return t},Ee=/^(?:[a-z][a-z\d+.-]*:|\/\/)/i,H=e=>{if(e.type===`Literal`&&typeof e.value==`string`)return e.value;if(e.type===`TemplateLiteral`&&e.expressions.length===0)return e.quasis[0]?.value.cooked??void 0},De=({value:e})=>{if(e?.type===`Literal`)return e.value;if(e?.type===`JSXExpressionContainer`)return H(e.expression)},Oe=(e,t)=>{let n={kept:[]};for(let r of t.attributes){let t=e.slice(r.start,r.end);if(r.type!==`JSXAttribute`||r.name.type!==`JSXIdentifier`){n.kept.push(t);continue}let{name:i}=r.name;i===`src`?n.src=r:i===`dangerouslySetInnerHTML`?n.html=r:(i===`type`&&(n.type=De(r)),n.kept.push(t))}return n},ke=({key:e})=>e.type===`Identifier`?e.name:e.type===`Literal`?e.value:null,Ae=({value:e})=>{let t=e?.type===`JSXExpressionContainer`?e.expression:void 0;if(t?.type===`ObjectExpression`)for(let e of t.properties){if(e.type!==`Property`||e.computed||ke(e)!==`__html`)continue;let t=H(e.value);return t===void 0?void 0:[t,e.value.start+1]}},je=(e,t)=>{if(t)return Ae(t);let n=e.children.filter(e=>e.type!==`JSXText`||e.value.trim()!==``);if(n.length===0)return[``,e.start];if(n.length!==1)return;let[r]=n;if(r.type===`JSXText`)return[r.value,r.start];if(r.type!==`JSXExpressionContainer`)return;let i=H(r.expression);return i===void 0?void 0:[i,r.expression.start+1]},Me=({name:e})=>e.type===`JSXIdentifier`&&e.name===`script`,Ne=(e,t)=>{let n=[],r=[],{errors:i,program:a}=k(t,e);if(i.length>0)return{scripts:n,warnings:r};let o=0,s=/* @__PURE__ */ new Set,c=e=>{for(let t of e.children)s.add(t.start)},l=t=>{let{html:i,kept:a,src:c,type:l}=Oe(e,t.openingElement),u=c&&De(c),d=u!==void 0&&!Ee.test(u);if(l!==`module`){d&&g.test(u)&&r.push(`<script src="${u}"> is not bundled; add type="module" to make it a page script.`);return}let f={attributes:a,end:t.end,replacement:s.has(t.start)?``:`<></>`,start:t.start};if(c){d&&n.push({...f,kind:`src`,src:u});return}let p=je(t,i);if(!p){r.push(`<script type="module"> content must be a static string to be bundled.`);return}let[m,h]=p;m.trim()!==``&&n.push({...f,code:m,codeStart:h,index:o++,kind:`inline`})};return new E({JSXElement(e){c(e),Me(e.openingElement)&&l(e)},JSXFragment:c}).visit(a),{scripts:n,warnings:r}},U=`virtual:${d}-page-scripts`,W=`__wrenPageScripts`,G=`${U}:route:`,K=`\0${G}`,q=`\0${f}`,Pe=/\?wren-script=(\d+)\.ts$/,Fe=`__wren-page-scripts.mjs`,J=`\0${h}`,Ie=(e,t)=>{let n=O(C(e,t));return n.startsWith(`../`)||x(n)?`@fs/${O(t).replace(/^\//,``)}`:n},Le=async(e,t,n)=>{let r=t.attributes.filter(e=>!/^type\b/.test(e));if(r.length>0&&e.warn(`Page script attributes are dropped when hoisted: ${r.join(` `)}`),t.kind===`inline`)return{id:`${n}?wren-script=${t.index}.ts`,name:`${z(n)}-${t.index}`};let i=await e.resolve(t.src,n);if(!i||i.external||i.id.includes(`/node_modules/`))e.warn(`Page script "${t.src}" must resolve to a project file; left as is.`);else return{id:i.id,name:z(i.id)}},Re=async(e,t,n)=>{let r=await A(t,`utf8`),i=Ne(r,t).scripts.find(e=>e.kind===`inline`&&e.index===n);return i?.kind===`inline`?{code:`
5
+ `.repeat(L(r.slice(0,i.codeStart)))+i.code,map:null}:e.error(`Inline page script #${n} not found in ${t}.`)},ze=e=>{let t=/* @__PURE__ */ new Map,n=/* @__PURE__ */ new Set,r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map,a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ new Map,s,c=[],l=(e,n)=>{let r=Ie(e,n.id),i=t.get(r)??{...n,key:r};return t.set(r,i),i},u=(e,t)=>{let n=/* @__PURE__ */ new Set,a=/* @__PURE__ */ new Set,o=e=>{if(!a.has(e)){a.add(e);for(let t of r.get(e)??[])n.add(t);for(let t of i.get(e)?.values()??[])for(let e of t)n.add(e);for(let n of t(e))o(n)}};return o(e),[...n]},p=async(e,t,n,i)=>{let{scripts:a,warnings:o}=Ne(t,n),s=a.map(({end:e,replacement:n,start:r})=>be(t,r,e,n));if(!i)return s;for(let t of o)e.warn(t);let c=await Promise.all(a.map(t=>Le(e,t,n))),{root:u}=e.environment.config;return r.set(n,c.flatMap(e=>e?[l(u,e)]:[])),s.filter((e,t)=>c[t])},_=(e,t,n)=>{if(!n)return`\nexport const ${ee} = async () => (await import(${JSON.stringify(G+encodeURIComponent(e))})).default;\n`;let r=Ie(t,e);return a.set(e,r),`\nimport ${W} from ${JSON.stringify(U)};export const ${ee} = () => ${W}.routes[${JSON.stringify(r)}];\n`},v=(e,t)=>{let n=u(t,t=>c.flatMap(({moduleGraph:n})=>{let r=n.getModuleById(t);return r?.file&&x(r.file)&&e.addWatchFile(r.file),Array.from(r?.importedModules??[],e=>e.id).filter(e=>e!==null&&!ce(e))})),{base:r}=e.environment.config;return`export default ${JSON.stringify(n.map(e=>r+e.key))};`};return[{buildApp:{async handler(e){let r=[...t.values()],i=r.filter(e=>!e.url).map(e=>e.key);if(i.length>0)throw Error(`[${d}] Page scripts were not bundled by the client environment (server environments must build first): ${i.join(`, `)}`);let s={routes:V(Array.from(a,([e,t])=>[t,u(e,e=>o.get(e)??[]).map(e=>e.url)])),scripts:V(r.map(e=>[e.key,e.url]))},c=`export default ${JSON.stringify(s)};\n`;await Promise.all([...n].map(async t=>{let{build:n,root:r}=e.environments[t].config;await M(w(r,n.outDir,Fe),c)}))},order:`post`},buildEnd(){if(this.environment.mode===`build`)for(let e of this.getModuleIds()){let t=this.getModuleInfo(e);if(!t)continue;let n=[...t.importedIds,...t.dynamicallyImportedIds];o.set(e,[...o.get(e)??[],...n])}},buildStart(){let{mode:e,name:n}=this.environment;if(e===`build`&&n===`client`)for(let e of t.values())e.reference=this.emitFile({id:e.id,name:`scripts/${e.name}`,preserveSignature:`exports-only`,type:`chunk`})},configResolved(t){s=`${O(w(t.root,e))}/`},configureServer(e){c=Object.values(e.environments)},enforce:`pre`,generateBundle(){if(this.environment.name!==`client`)return;let{base:e}=this.environment.config;for(let n of t.values())n.reference&&(n.url=e+this.getFileName(n.reference))},hotUpdate({modules:e}){for(let{id:t}of e)t&&(r.delete(t),i.get(t)?.delete(this.environment.name))},load:{filter:{id:[Pe,RegExp(`^${J}`),RegExp(`^${K}`),RegExp(`^${q}$`)]},async handler(e){let{config:t,mode:n}=this.environment;if(e===q)return`export {};`;if(e.startsWith(J)){let r=e.slice(J.length),{key:i}=l(t.root,{id:r,name:z(r)});return n===`build`?`import ${W} from ${JSON.stringify(U)};export default ${W}.scripts[${JSON.stringify(i)}];`:`export default ${JSON.stringify(t.base+i)};`}if(e.startsWith(K))return v(this,decodeURIComponent(e.slice(K.length)));let r=Pe.exec(e);return r?Re(this,e.slice(0,r.index),Number(r[1])):null}},name:`${d}-page-scripts`,renderChunk(e,t){if(!e.includes(U))return null;this.environment.config.build.write&&n.add(this.environment.name);let r=O(C(b(t.fileName),Fe)),i=r.startsWith(`.`)?r:`./${r}`;return{code:e.replaceAll(U,i),map:null}},resolveId:{filter:{id:RegExp(`^(?:${f}|${h}|${U})`)},async handler(e,t){if(e.startsWith(`virtual:wrenjs-hoist:`)){if(t&&this.environment.config.consumer===`server`){let n=await this.resolve(e.slice(f.length),t);if(!n?.id.startsWith(J))return this.error(`"${e}" must resolve to a Wren page script (${t}).`);let r=n.id.slice(J.length),a=l(this.environment.config.root,{id:r,name:z(r)}),o=i.get(t)??/* @__PURE__ */ new Map,s=o.get(this.environment.name)??/* @__PURE__ */ new Set;i.set(t,o.set(this.environment.name,s.add(a)))}return q}return e.startsWith(`virtual:wrenjs-script-url:`)||e.startsWith(G)?`\0${e}`:e===U?{external:!0,id:e}:null}},sharedDuringBuild:!0,transform:{filter:{code:`<script`,id:{exclude:R,include:g}},async handler(e,t){let n=this.environment.config.consumer===`server`,i=await p(this,e,t,n);return i.length>0?{code:xe(e,i),map:null}:(r.delete(t),null)}}},{applyToEnvironment:e=>e.config.consumer===`server`,enforce:`pre`,name:`${d}-page-scripts-routes`,sharedDuringBuild:!0,transform:{filter:{id:{exclude:R,include:Se(e,g)}},handler(e,t){if(!t.startsWith(s)||!m.test(t))return null;let{config:n,mode:r}=this.environment;return{code:e+_(t,n.root,r===`build`),map:null}}}}]},Be=/<link\b(?=[^>]*\srel="stylesheet")(?![^>]*\s(?:disabled|media)\b)[^>]*\shref="([^"]+)"[^>]*>/gi,Ve=/\sdata-precedence="[^"]*"/i,He=/<\/(style)/gi,Ue=(e,t,n,r)=>{for(let i of Object.values(e)){if(i.type!==`asset`||!i.fileName.endsWith(`.css`))continue;let e=Buffer.from(i.source);e.byteLength<n&&r.set(t+i.fileName,e.toString().replace(He,`<\\/$1`))}},We=(e,t)=>{let n=e.indexOf(`</head>`);return n===-1&&(n=e.length),e.slice(0,n).replace(Be,(e,n)=>{let r=t.get(n);if(r===void 0)return e;let i=Ve.exec(e)?.[0]??``,a=`<style data-href="${n}"${i}>${r}</style>`;return i?`${a}<link disabled type="text/x-inlined"${e.slice(5)}`:a})+e.slice(n)},Ge=/[/\\]|^\.\.?$/,Ke=e=>{try{let t=decodeURIComponent(e);return Ge.test(t)?e:t}catch{return e}},qe=e=>e.slice(1).split(`/`).map(Ke).join(`/`),Je=(e,t)=>{let n=new URL(y(e)??`/`,t);if(n.origin!==t.origin)throw Error(`Invalid prerender path: ${e}.`);return y(n.pathname)},Ye=async(e,t,n=`http://localhost`,r=!1,i=/* @__PURE__ */ new Map)=>{let a=new URL(n);if(!/^https?:$/.test(a.protocol)||a.href!==`${a.origin}/`)throw Error(`build.prerender.origin must be an HTTP(S) origin.`);let o=/* @__PURE__ */ new Set,s=/* @__PURE__ */ new Set,c=async({pathname:e,response:n})=>{let r=y(e);if(n.status!==200)throw Error(`Cannot prerender ${r}: HTTP ${n.status}.`);let a=n.headers.get(`content-type`)?.startsWith(`text/html`),c=a?S(qe(r),`index.html`):qe(r);if(o.has(r)||s.has(c))throw Error(`Conflicting prerender artifact: ${r}.`);o.add(r),s.add(c);let l=S(t,c);await me(b(l),{recursive:!0}),await M(l,a&&i.size>0?We(await n.text(),i):new Uint8Array(await n.arrayBuffer()))},l=await Promise.all(e.map(async e=>[e,await e.getPaths(r)])),u=/* @__PURE__ */ new Map;for(let[e,t]of l)for(let n of t){let t=Je(n,a);if((u.get(t)??e)!==e)throw Error(`Multiple prerender providers claim ${t}.`);u.set(t,e)}let d=0;return await we([...u],32,async([e,t])=>{let n=await t.render(new Request(new URL(e,a)));if(await Promise.all(n.map(c)),!o.has(e))throw Error(`Prerender renderer did not return ${e}.`);d++}),d},Xe=e=>{let t=e.integrations?.flatMap(({prerender:e})=>e?[{...e,output:``,reference:``}]:[])??[],n=e.build?.inlineCSS,r=n===!0?1/0:n||0,i=/* @__PURE__ */ new Map;return{apply:`build`,buildApp:{async handler(n){if(!t.length)return;let r=await Promise.all(t.map(async({environment:e,output:t})=>{if(!t)throw Error(`No prerender entry was built for ${e}.`);return import(
6
6
  /* @vite-ignore */
7
- _e(t).href)})),a=n.environments.client;if(!a)throw Error(`Prerendering requires a client output environment.`);let o=await ze(r,C(n.config.root,a.config.build.outDir),e.build?.prerender?.origin,e.build?.output===`static`,i);n.config.logger.info(`Prerendered ${o} pages.`),await Promise.all(t.flatMap(({output:e})=>[A(e,{force:!0}),A(`${e}.map`,{force:!0})]))},order:`post`},buildStart(){for(let e of t)e.environment===this.environment.name&&(e.reference=this.emitFile({id:e.entry,preserveSignature:`strict`,type:`chunk`}))},generateBundle(){if(this.environment.config.build.write)for(let e of t)e.environment===this.environment.name&&(e.output=C(this.environment.config.root,this.environment.config.build.outDir,this.getFileName(e.reference)))},name:`${d}-prerender`,sharedDuringBuild:!0,writeBundle(e,t){r&&this.environment.name===`client`&&Le(t,this.environment.config.base,r,i)}}},Ve=/* @__PURE__ */ new Map([[o,s],[l,a],[n,e],[r,u]]),He={layouts:[],proxies:[]},Ue=/\/\([^/]+\)(?=\/|$)/g,We=(e,t)=>{let n=t.includes(`default`),r=c.some(e=>t.includes(e)),a=Ve.get(L(e));if(n)return a?r?void 0:a:i;if(r)return!a||a===`LAYOUT`||a===`ROOT`?`API`:void 0},Ge=e=>e.isFile()&&m.test(e.name),Ke=async e=>{let t=D(`${e.parentPath}/${e.name}`),{errors:n,module:r}=O(t,await k(t,`utf8`));if(n.length>0)throw SyntaxError(`Cannot parse ${t}: ${n.map(e=>e.message).join(`
8
- `)}`);let i=We(e.name,we(r.staticExports));return i&&{file:t,kind:i}},X=(e,t)=>{let n=[];return{params:n,pattern:t.slice(e.length).replace(/\.[^/.]+$/,``).replace(/\/(?:index|__not-found)$/,``).replaceAll(/\[(\.\.\.)?([^[\]]+)\]/g,(e,t,r)=>(n.push(r),t?`:${r}*`:`:${r}`)).replaceAll(Ue,``)||`/`}},qe=async(e,t)=>{let n=D(C(t,e.router)),r=await ge(n,{recursive:!0,withFileTypes:!0}),i=(await Promise.all(r.filter(Ge).map(Ke))).filter(e=>e!==void 0),a=/* @__PURE__ */ new Map;for(let e of i){let{kind:t}=e;if(t!==`LAYOUT`&&t!==`PROXY`&&t!==`ROOT`)continue;let n=x(e.file),r=a.get(n)??{layouts:[],proxies:[],roots:[]};a.set(n,r),t===`LAYOUT`?r.layouts.push(e):t===`PROXY`?r.proxies.push(e):r.roots.push(e)}let o=/* @__PURE__ */ new Map,s=e=>{let t=o.get(e);if(!t){let r=e===n?He:s(x(e)),{layouts:i=[],proxies:c=[],roots:l=[]}=a.get(e)??{};t={layouts:[...i,...l,...r.layouts],proxies:[...c,...r.proxies]},o.set(e,t)}return t},c=[],l=[];for(let{file:e,kind:t}of i)t===`PAGE`?l.push({file:e,kind:t,...X(n,e),...s(x(e))}):(t===`API`||t===`NOT_FOUND`)&&(t===`API`?l:c).push({file:e,kind:t,...X(n,e),proxies:s(x(e)).proxies});return{notFounds:c,routes:l}},Z=()=>({s:Object.create(null)}),Je=(e,t,n)=>{let r=[],i=e,a=n;for(;a<t.length;a++){let e=i.indexOf(`:${t[a]}`);if(e<0)break;r.push(i.slice(0,e)),i=i.slice(e+t[a].length+1)}return r.push(i),{i:a,lits:r}},Ye=(e,t,n)=>{let r=n.params,i=t.split(`/`).filter(Boolean),a=i.at(-1)===`:${r.at(-1)}*`?`w`:`e`;a===`w`&&i.pop();let o=e,s=0;for(let e of i)if(!e.includes(`:`))o.s[e]??=Z(),o=o.s[e];else if(e===`:${r[s]}`)o.p??=Z(),o=o.p,s++;else if(e.endsWith(`*`))throw Error(`Catch-all must be last in "${t}".`);else{let n=Je(e,r,s);if(n.i===s)throw Error(`Params do not match pattern "${t}".`);let i=Z();o.m??=[],o.m.push({lits:n.lits,node:i}),o=i,s=n.i}if(s!==r.length-+(a===`w`))throw Error(`Params do not match pattern "${t}".`);let c=o[a];if(c)throw Error(`"${n.file}" conflicts with "${c.file}".`);o[a]=n},Xe=e=>{let t=Z();for(let[n,r]of Object.entries(e))Ye(t,n,r);return t},Ze=e=>{let t={},n={};for(let r of e){let{params:e,pattern:i,...a}=r;e?.length?t[i]=r:n[i]=a}return[Xe(t),n]},Qe=async(e,t)=>{let{notFounds:n,routes:r}=await qe(e,t),[i,a]=Ze(n),[o,s]=Ze(r);return{dynamicNotFounds:i,dynamicRoutes:o,staticNotFounds:a,staticRoutes:s}},Q=e=>({__wrenCode:e}),$e=(e,t)=>{let n=/* @__PURE__ */ new Map,r=e=>{let t=D(e.file),r=n.get(t);return r||(r=`load${n.size}`,n.set(t,r)),r},i=JSON.stringify(e,(e,t)=>{if(!t||typeof t.file!=`string`)return t;let n=r(t),i=t.layouts?.map(r),a=t.proxies?.map(r);return{kind:t.kind,layouts:i?.map(Q),module:Q(n),params:t.params,pattern:t.pattern,proxies:a?.map(Q),stack:Q(`createStack(${n}, [${i?.join(`, `)??``}], [${a?.join(`, `)??``}])`)}}).replace(/\{"__wrenCode":"([^"]+)"\}/g,`$1`),a=[...n].map(([e,n])=>{let r=`() => import(${JSON.stringify(e)})`;return`const ${n} = ${t?`memoize(${r})`:r};`});return`
7
+ ge(t).href)})),a=n.environments.client;if(!a)throw Error(`Prerendering requires a client output environment.`);let o=await Ye(r,w(n.config.root,a.config.build.outDir),e.build?.prerender?.origin,e.build?.output===`static`,i);n.config.logger.info(`Prerendered ${o} pages.`),await Promise.all(t.flatMap(({output:e})=>[j(e,{force:!0}),j(`${e}.map`,{force:!0})]))},order:`post`},buildStart(){for(let e of t)e.environment===this.environment.name&&(e.reference=this.emitFile({id:e.entry,preserveSignature:`strict`,type:`chunk`}))},generateBundle(){if(this.environment.config.build.write)for(let e of t)e.environment===this.environment.name&&(e.output=w(this.environment.config.root,this.environment.config.build.outDir,this.getFileName(e.reference)))},name:`${d}-prerender`,sharedDuringBuild:!0,writeBundle(e,t){r&&this.environment.name===`client`&&Ue(t,this.environment.config.base,r,i)}}},Ze=/* @__PURE__ */ new Map([[o,s],[l,a],[n,e],[r,u]]),Qe={layouts:[],proxies:[]},$e=/\/\([^/]+\)(?=\/|$)/g,et=(e,t)=>{let n=t.includes(`default`),r=c.some(e=>t.includes(e)),a=Ze.get(z(e));if(n)return a?r?void 0:a:i;if(r)return!a||a===`LAYOUT`||a===`ROOT`?`API`:void 0},tt=e=>e.isFile()&&m.test(e.name),nt=async(e,t)=>{let{errors:n,module:r}=k(e,await A(e,`utf8`));if(n.length>0)throw SyntaxError(`Cannot parse ${e}: ${n.map(e=>e.message).join(`
8
+ `)}`);let i=et(t,Te(r.staticExports));return i&&{file:e,kind:i}},rt=(e,t)=>{let n=O(`${e.parentPath}/${e.name}`),r=t.get(n);if(r)return r;let i=nt(n,e.name);return t.set(n,i),i.catch(()=>{t.get(n)===i&&t.delete(n)}),i},it=(e,t)=>{let n=[];return{params:n,pattern:t.slice(e.length).replace(/\.[^/.]+$/,``).replace(/\/(?:index|__not-found)$/,``).replaceAll(/\[(\.\.\.)?([^[\]]+)\]/g,(e,t,r)=>(n.push(r),t?`:${r}*`:`:${r}`)).replaceAll($e,``)||`/`}},at=async(e,t,n)=>{let r=O(w(t,e.router)),i=await he(r,{recursive:!0,withFileTypes:!0}),a=(await Promise.all(i.filter(tt).map(e=>rt(e,n)))).filter(e=>e!==void 0),o=/* @__PURE__ */ new Map;for(let e of a){let{kind:t}=e;if(t!==`LAYOUT`&&t!==`PROXY`&&t!==`ROOT`)continue;let n=b(e.file),r=o.get(n)??{layouts:[],proxies:[],roots:[]};o.set(n,r),t===`LAYOUT`?r.layouts.push(e):t===`PROXY`?r.proxies.push(e):r.roots.push(e)}let s=/* @__PURE__ */ new Map,c=e=>{let t=s.get(e);if(!t){let n=e===r?Qe:c(b(e)),{layouts:i=[],proxies:a=[],roots:l=[]}=o.get(e)??{};t={layouts:[...i,...l,...n.layouts],proxies:[...a,...n.proxies]},s.set(e,t)}return t},l=[],u=[];for(let{file:e,kind:t}of a)t===`PAGE`?u.push({file:e,kind:t,...it(r,e),...c(b(e))}):(t===`API`||t===`NOT_FOUND`)&&(t===`API`?u:l).push({file:e,kind:t,...it(r,e),proxies:c(b(e)).proxies});return{notFounds:l,routes:u}},Y=()=>({s:Object.create(null)}),ot=(e,t,n)=>{let r=[],i=e,a=n;for(;a<t.length;a++){let e=i.indexOf(`:${t[a]}`);if(e<0)break;r.push(i.slice(0,e)),i=i.slice(e+t[a].length+1)}return r.push(i),{i:a,lits:r}},st=(e,t,n)=>{let r=n.params,i=t.split(`/`).filter(Boolean),a=i.at(-1)===`:${r.at(-1)}*`?`w`:`e`;a===`w`&&i.pop();let o=e,s=0;for(let e of i)if(!e.includes(`:`)){let t=B(e);o.s[t]??=Y(),o=o.s[t]}else if(e===`:${r[s]}`)o.p??=Y(),o=o.p,s++;else if(e.endsWith(`*`))throw Error(`Catch-all must be last in "${t}".`);else{let n=ot(e,r,s);if(n.i===s)throw Error(`Params do not match pattern "${t}".`);let i=Y();o.m??=[],o.m.push({lits:n.lits.map(e=>B(e)),node:i}),o=i,s=n.i}if(s!==r.length-+(a===`w`))throw Error(`Params do not match pattern "${t}".`);let c=o[a];if(c)throw Error(`"${n.file}" conflicts with "${c.file}".`);o[a]=n},ct=e=>{let t=Y();for(let[n,r]of Object.entries(e))st(t,n,r);return t},lt=e=>{let t={},n={};for(let r of e){let{params:e,pattern:i,...a}=r,o=e!==void 0&&e.length>0,s=o?i:B(i),c=o?t[s]:n[s];if(c)throw Error(`"${r.file}" conflicts with "${c.file}".`);o?t[s]=r:n[s]=a}return[ct(t),n]},ut=async(e,t,n)=>{let{notFounds:r,routes:i}=await at(e,t,n),[a,o]=lt(r),[s,c]=lt(i);return{dynamicNotFounds:a,dynamicRoutes:s,staticNotFounds:o,staticRoutes:c}},X=e=>({__wrenCode:e}),dt=(e,t)=>{let n=/* @__PURE__ */ new Map,r=e=>{let t=O(e.file),r=n.get(t);return r||(r=`load${n.size}`,n.set(t,r)),r},i=JSON.stringify(e,(e,t)=>{if(!t||typeof t.file!=`string`)return t;let n=r(t),i=t.layouts?.map(r),a=t.proxies?.map(r);return{kind:t.kind,layouts:i?.map(X),module:X(n),params:t.params,pattern:t.pattern,proxies:a?.map(X),stack:X(`createStack(${n}, [${i?.join(`, `)??``}], [${a?.join(`, `)??``}])`)}}).replace(/\{"__wrenCode":"([^"]+)"\}/g,`$1`),a=[...n].map(([e,n])=>{let r=`() => import(${JSON.stringify(e)})`;return`const ${n} = ${t?`memoize(${r})`:r};`});return`
9
9
  ${t?`function memoize(load) {
10
10
  let pending;
11
11
  return () => {
@@ -16,9 +16,6 @@ _e(t).href)})),a=n.environments.client;if(!a)throw Error(`Prerendering requires
16
16
  return pending;
17
17
  };
18
18
  }`:``}
19
-
20
- // Resolves a route's module, layouts, and proxies together; once loaded, returns
21
- // the same object synchronously so requests skip the promise machinery.
22
19
  function createStack(load, layouts, proxies) {
23
20
  let resolved;
24
21
  return () =>
@@ -48,4 +45,4 @@ _e(t).href)})),a=n.environments.client;if(!a)throw Error(`Prerendering requires
48
45
  const manifest = deepFreeze(${i});
49
46
  export const { dynamicNotFounds, dynamicRoutes, staticNotFounds, staticRoutes } = manifest;
50
47
  export default manifest;
51
- `},$=`\0${p}`,et=(e,t)=>({configureServer(e){let n=`${D(C(e.config.root,t.router))}/`,r=t=>{if(!D(t).startsWith(n))return;let r=!1;for(let{moduleGraph:t}of Object.values(e.environments)){let e=t.getModuleById($);e&&(r=!0,t.invalidateModule(e))}r&&e.ws.send({type:`full-reload`})};e.watcher.on(`add`,r).on(`change`,r).on(`unlink`,r)},load:{filter:{id:RegExp(`^${$}$`)},async handler(){let n=await Qe(t,this.environment.config.root);return $e(n,e.command===`build`)}},name:`${d}-route-manifest`,resolveId:{filter:{id:RegExp(`^${p}$`)},handler:()=>$}}),tt=async(e,t)=>{let n=ce({appType:`custom`,build:{minify:!0,outDir:`dist`,rolldownOptions:{experimental:{nativeMagicString:!0},optimization:{inlineConst:{mode:`smart`,pass:2}}}},builder:{async buildApp(e){let t=Object.values(e.environments).toSorted((e,t)=>Number(e.config.consumer===`client`)-Number(t.config.consumer===`client`));for(let n of t){if(n.isBuilt)continue;let{build:t,input:r,isBundled:i}=n.config,a=t.rolldownOptions.input??(t.lib?t.lib.entry:void 0)??(typeof t.ssr==`string`?t.ssr:r);!(typeof a==`string`||Object.keys(a??{}).length>0)||!i?delete e.environments[n.name]:await e.build(n)}},sharedConfigBuild:!0,sharedPlugins:!0},plugins:[{api:{wrenConfig:t},name:`${d}-config`},et(e,t),Ne(t.router),be(),Be(t)],resolve:{noExternal:[/^@wren-js\//],tsconfigPaths:!0}});return(await Promise.all([...t.integrations??[],t.adapter].map(async n=>n?.viteConfig(t,e)))).reduce((e,t)=>t?E(e,t):e,n)},nt=ve(),rt=async e=>{let t=w.cwd();nt(e.mode,t);let n=v.map(e=>D(C(t,`wren.config.${e}`))),r=n.find(e=>ee(e)),i=r?await ue(e,r):null,a=/* @__PURE__ */ new Set([...n,...(i?.dependencies??[]).map(e=>D(C(e)))]),o=i?E(y,i.config):y,s=E(await tt(e,o),o.vite??{});return{...s,clearScreen:!1,configFile:!1,envDir:t,envPrefix:`VITE_`,mode:e.mode,plugins:[...s.plugins??[],{apply:`serve`,configResolved(e){e.configFileDependencies.push(...a)},configureServer(n){let r=new Set([`.env`,`.env.local`,`.env.${e.mode}`,`.env.${e.mode}.local`].map(e=>D(C(t,e)))),i=n.restart.bind(n),a;n.restart=t=>(a??=(async()=>{let r=await rt(e),{inlineConfig:a}=n.config;for(let e of Object.keys(a))Reflect.deleteProperty(a,e);Object.assign(a,r),await i(t)})().finally(()=>{a=void 0}),a),n.watcher.on(`all`,(e,t)=>{let i=D(t),a=n.config.server.hmr===!1&&(e===`add`||e===`change`||e===`unlink`)&&r.has(i);(e===`change`&&/\.config\.[^/]*$/.test(i)||a)&&n.restart().catch(e=>{n.config.logger.error(e instanceof Error?e.stack??e.message:String(e))})})},name:`${d}-config-reload`}]}},it=async e=>{let n=await rt(e);if(e.command===`build`)return(await oe(n)).buildApp();let r=await se(n);return await r.listen(),console.info(`${d} v${t}`),r.printUrls(),r.bindCLIShortcuts({print:!0}),r},{positionals:at,values:ot}=ae({allowPositionals:!0,args:w.argv.slice(2),options:{help:{short:`h`,type:`boolean`},version:{short:`v`,type:`boolean`}}});if(ot.version)console.info(`${d} v${t}`);else if(ot.help)console.info(`Usage: wren [dev|build] [-h|--help] [-v|--version]`);else{let e=at[0]===`build`?`build`:`serve`;it({command:e,mode:e===`build`?`production`:w.env.NODE_ENV??`development`}).catch(e=>{console.error(e),w.exit(1)})}export{};
48
+ `},Z=`\0${p}`,ft=(e,t)=>{let n=/* @__PURE__ */ new Map,r=/* @__PURE__ */ new Map,i,a=r=>{if(i)return i;let a=ut(t,r,n).then(t=>dt(t,e.command===`build`));return i=a,a.catch(()=>{i===a&&(i=void 0)}),a},o=async e=>{let t=a(e),n=await t;return t===i?n:o(e)};return{configureServer(e){let{root:a}=e.config,s=`${O(w(a,t.router))}/`,c=async()=>{if(i=void 0,r.size===0)return;let t=await o(a).catch(()=>void 0),n=!1;for(let[i,a]of r){if(a===t)continue;r.set(i,t);let{moduleGraph:o}=e.environments[i],s=o.getModuleById(Z);s&&(n=!0,o.invalidateModule(s))}n&&e.ws.send({type:`full-reload`})},l=e=>{let t=O(e);t.startsWith(s)&&m.test(t)&&(n.delete(t),c())},u=e=>{let t=`${O(e)}/`;if(t.startsWith(s)){for(let e of n.keys())e.startsWith(t)&&n.delete(e);c()}};e.watcher.on(`add`,l).on(`change`,l).on(`unlink`,l).on(`addDir`,u).on(`unlinkDir`,u)},load:{filter:{id:RegExp(`^${Z}$`)},async handler(){let e=await o(this.environment.config.root);return r.set(this.environment.name,e),e}},name:`${d}-route-manifest`,resolveId:{filter:{id:RegExp(`^${p}$`)},handler:()=>Z}}},pt=async(e,t)=>{let n=se({appType:`custom`,build:{minify:!0,outDir:`dist`,rolldownOptions:{experimental:{nativeMagicString:!0},optimization:{inlineConst:{mode:`smart`,pass:2}}}},builder:{async buildApp(e){let t=Object.values(e.environments).toSorted((e,t)=>Number(e.config.consumer===`client`)-Number(t.config.consumer===`client`));for(let n of t){if(n.isBuilt)continue;let{build:t,input:r,isBundled:i}=n.config,a=t.rolldownOptions.input??(t.lib?t.lib.entry:void 0)??(typeof t.ssr==`string`?t.ssr:r);!(typeof a==`string`||Object.keys(a??{}).length>0)||!i?delete e.environments[n.name]:await e.build(n)}},sharedConfigBuild:!0,sharedPlugins:!0},plugins:[{api:{wrenConfig:t},name:`${d}-config`},ft(e,t),ze(t.router),ye(),Xe(t)],resolve:{noExternal:[/^@wren-js\//],tsconfigPaths:!0}});return(await Promise.all([...t.integrations??[],t.adapter].map(async n=>n?.viteConfig(t,e)))).reduce((e,t)=>t?D(e,t):e,n)},mt=_e(),ht=async e=>{let t=T.cwd();mt(e.mode,t);let n=_.map(e=>O(w(t,`wren.config.${e}`))),r=n.find(e=>te(e)),i=r?await le(e,r):null,a=/* @__PURE__ */ new Set([...n,...(i?.dependencies??[]).map(e=>O(w(e)))]),o=i?D(v,i.config):v,s=D(await pt(e,o),o.vite??{});return{...s,clearScreen:!1,configFile:!1,envDir:t,envPrefix:`VITE_`,mode:e.mode,plugins:[...s.plugins??[],{apply:`serve`,configResolved(e){e.configFileDependencies.push(...a)},configureServer(n){let r=O(t),i=new Set([`.env`,`.env.local`,`.env.${e.mode}`,`.env.${e.mode}.local`].map(e=>O(w(t,e)))),a=n.restart.bind(n),o;n.restart=t=>(o??=(async()=>{let r=await ht(e),{inlineConfig:i}=n.config;for(let e of Object.keys(i))Reflect.deleteProperty(i,e);Object.assign(i,r),await a(t)})().finally(()=>{o=void 0}),o),n.watcher.on(`all`,(e,t)=>{let a=O(t),o=n.config.server.hmr===!1&&(e===`add`||e===`change`||e===`unlink`)&&i.has(a);(e===`change`&&b(a)===r&&/\.config\.[^/]*$/.test(a)||o)&&n.restart().catch(e=>{n.config.logger.error(e instanceof Error?e.stack??e.message:String(e))})})},name:`${d}-config-reload`}]}},gt=async e=>{let n=await ht(e);if(e.command===`build`)return(await ae(n)).buildApp();let r=await oe(n);return await r.listen(),console.info(`${d} v${t}`),r.printUrls(),r.bindCLIShortcuts({print:!0}),r},_t=`Usage: wren [dev|build] [-h|--help] [-v|--version]`,{positionals:vt,values:Q}=ie({allowPositionals:!0,args:T.argv.slice(2),options:{help:{short:`h`,type:`boolean`},version:{short:`v`,type:`boolean`}}}),[$=`dev`]=vt;if(Q.version)console.info(`${d} v${t}`);else if(Q.help)console.info(_t);else if($!==`dev`&&$!==`build`)console.error(`Unknown command "${$}".\n${_t}`),T.exitCode=1;else{let e=$===`build`?`build`:`serve`;gt({command:e,mode:e===`build`?`production`:T.env.NODE_ENV??`development`}).catch(e=>{console.error(e),T.exit(1)})}export{};
@@ -1 +1 @@
1
- import{a as e,i as t,r as n,s as r,t as i}from"../../constants-CB936btA.mjs";import{n as a,r as o}from"../../utils-li1KYQ1O.mjs";import{kind as s,render as c}from"virtual:wrenjs-link-client";const l=`__wrenNavigation`,u=e=>{let t=a(e)?e[l]:void 0;return a(t)&&typeof t.x==`number`&&typeof t.y==`number`?{x:t.x,y:t.y}:void 0},d=e=>{let t=e.getAttribute(`href`),n=e.getAttribute(`target`);if(!t||e.hasAttribute(`download`)||n&&n!==`_self`||!URL.canParse(t,document.baseURI))return;let r=new URL(t,document.baseURI);if(r.origin===location.origin&&(r.pathname!==location.pathname||r.search!==location.search))return r},f=(e,t)=>{let n=document.createElement(`a`);for(let t of[`href`,`target`,`download`,`rel`]){let r=e.getAttribute(t);r!==null&&n.setAttribute(t,r)}(t.button===1||t.metaKey||t.ctrlKey||t.shiftKey)&&(n.target=`_blank`),document.body.append(n),n.click(),n.remove()},p=e=>{try{return decodeURIComponent(e.slice(1))}catch{return e.slice(1)}},m=(e,t)=>{if(t){scrollTo(t.x,t.y);return}let n=e.hash?document.getElementById(p(e.hash)):null;n?n.scrollIntoView():scrollTo(0,0);let r=n??document.querySelector(`main`)??document.body;r.hasAttribute(`tabindex`)||(r.tabIndex=-1),r.focus({preventScroll:!0})},h=e=>{e.key!==`Enter`||e.defaultPrevented||e.target instanceof HTMLElement&&e.target.matches(`wren-link[href]`)&&e.target.click()},g=e=>{let t=t=>{if(t.defaultPrevented||t.button>1||!(t.target instanceof Element))return;let n=t.target.closest(`wren-link[href]`);if(!n||t.target.closest(`a, button, input, select, textarea`))return;t.preventDefault();let r=d(n),i=t.button===0&&!t.metaKey&&!t.ctrlKey&&!t.altKey&&!t.shiftKey;e&&r&&i?e(r):f(n,t)};window.addEventListener(`click`,t),window.addEventListener(`auxclick`,t),window.addEventListener(`keydown`,h)},_=()=>{let e=history.state,t=a(e)?e:{};history.replaceState({...t,[l]:{x:scrollX,y:scrollY}},``)},v=e=>{let t=new URL(location.href),n,r,i=!1,a=async(r,i)=>{n?.abort(),n=new AbortController;let{signal:a}=n;try{if(await e(r,a),a.aborted)return;i||history.pushState({[l]:{x:0,y:0}},``,r),t=r,m(r,i)}catch(e){if(a.aborted)return;o(e)||console.error(`[wrenjs] Client navigation failed; using browser navigation.`,e),i?location.reload():location.assign(r.href)}};g(e=>{i=!0,history.scrollRestoration=`manual`,_(),a(e)}),window.addEventListener(`popstate`,e=>{if(!i)return;let r=new URL(location.href),o=u(e.state);r.pathname===t.pathname&&r.search===t.search?(n?.abort(),m(r,o)):o?a(r,o):location.reload()}),window.addEventListener(`scroll`,()=>{r??=requestAnimationFrame(()=>{r=void 0,i&&_()})},{passive:!0})};function y(r,a){let o=new URL(r);o.pathname+=e,o.hash=``;let s=new Headers({[i]:n});return a&&s.set(t,a.id),new Request(o,{body:a?.body,headers:s,method:a?`POST`:`GET`,redirect:`manual`})}const b=`data-prefetch`,x={"":!0,false:!1,hover:`hover`,"on-load":`on-load`,true:!0,visible:`visible`},S=/* @__PURE__ */ new Map,C=/* @__PURE__ */ new Set,w=()=>{let{connection:e,onLine:t}=navigator;return t&&!e?.saveData&&!e?.effectiveType?.includes(`2g`)},T=e=>{let t=new URL(e);return t.hash=``,t.href},E=e=>{S.get(e)?.controller.abort(),S.delete(e)},D=()=>{for(let e of S.keys())E(e)},O=async(e,t)=>{let n=await fetch(y(e),{signal:t});if(n.headers.get(`content-type`)?.startsWith(`text/x-component`))return n;await n.body?.cancel()},k=e=>{let t=Date.now();for(let[e,n]of S)t-n.created>=3e4&&E(e);let n=S.get(e);if(n)return n;S.size>=20&&E(S.keys().next().value);let r=new AbortController,i={controller:r,created:t,response:O(e,r.signal)};return S.set(e,i),i.response.catch(()=>{S.get(e)===i&&S.delete(e)}),i},A=async e=>{let t=w()?d(e):void 0;if(!t)return;let n=T(t);if(s===`flight`)await k(n).response;else if(s===`document`&&!C.has(n)){C.add(n);let e=document.createElement(`link`);e.rel=`prefetch`,e.as=`document`,e.href=n,document.head.append(e)}};var j=class extends HTMLElement{static observedAttributes=[b,`href`];get prefetch(){let e=this.getAttribute(b);return e===null?`hover`:Object.hasOwn(x,e)?x[e]:(console.warn(`[wrenjs] Invalid Link prefetch mode:`,e),!1)}#e;#t;#n;attributeChangedCallback(){this.isConnected&&this.#s()}connectedCallback(){this.#e=new AbortController;let{signal:e}=this.#e;this.addEventListener(`mouseenter`,this.#i,{signal:e}),this.addEventListener(`focus`,this.#i,{signal:e}),this.addEventListener(`mouseleave`,this.#a,{signal:e}),this.addEventListener(`blur`,this.#a,{signal:e}),this.#s()}disconnectedCallback(){this.#r(),this.#e?.abort()}#r(){this.#a(),this.#n?.disconnect(),this.#n=void 0}#i=()=>{this.#a();let{prefetch:e}=this;(e===!0||e===`hover`)&&(this.#t=setTimeout(()=>this.#o(),80))};#a=()=>{clearTimeout(this.#t),this.#t=void 0};#o(){A(this).catch(e=>{e instanceof DOMException&&e.name===`AbortError`||console.error(`[wrenjs] Unable to prefetch Link.`,e)})}#s(){if(this.#r(),!this.hasAttribute(`href`))return;this.hasAttribute(`role`)||this.setAttribute(`role`,`link`),this.hasAttribute(`tabindex`)||(this.tabIndex=0);let{prefetch:e}=this;e===`on-load`?this.#o():e===`visible`&&(this.#n=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(this.#n?.disconnect(),this.#o())}),this.#n.observe(this))}};customElements.get(`wren-link`)||(document.head.insertAdjacentHTML(`beforeend`,`<style>:where(wren-link[href]){color:inherit;cursor:pointer}</style>`),customElements.define(`wren-link`,j),window.addEventListener(r,D),s===`flight`?v(async(e,t)=>{let n=T(e),r=k(n);S.delete(n),t.addEventListener(`abort`,()=>r.controller.abort(),{once:!0});let i=await r.response;return t.throwIfAborted(),i?c(i,t):(location.assign(e),new Promise(()=>{}))}):g());export{};
1
+ import{a as e,i as t,r as n,s as r,t as i}from"../../constants-DiYpQ2qF.mjs";import{n as a,r as o}from"../../utils-DduvrkBB.mjs";import{kind as s,render as c}from"virtual:wrenjs-link-client";const l=`__wrenNavigation`,u=e=>{let t=a(e)?e[l]:void 0;return a(t)&&typeof t.x==`number`&&typeof t.y==`number`?{x:t.x,y:t.y}:void 0},d=e=>{let t=e.getAttribute(`href`),n=e.getAttribute(`target`);if(!t||e.hasAttribute(`download`)||n&&n!==`_self`||!URL.canParse(t,document.baseURI))return;let r=new URL(t,document.baseURI);if(r.origin===location.origin&&(r.pathname!==location.pathname||r.search!==location.search))return r},f=(e,t)=>{let n=document.createElement(`a`);for(let t of[`href`,`target`,`download`,`rel`]){let r=e.getAttribute(t);r!==null&&n.setAttribute(t,r)}(t.button===1||t.metaKey||t.ctrlKey||t.shiftKey)&&(n.target=`_blank`),document.body.append(n),n.click(),n.remove()},p=e=>{try{return decodeURIComponent(e.slice(1))}catch{return e.slice(1)}},m=(e,t)=>{if(t){scrollTo(t.x,t.y);return}let n=e.hash?document.getElementById(p(e.hash)):null;n?n.scrollIntoView():scrollTo(0,0);let r=n??document.querySelector(`main`)??document.body;r.hasAttribute(`tabindex`)||(r.tabIndex=-1),r.focus({preventScroll:!0})},h=e=>{e.key!==`Enter`||e.defaultPrevented||e.target instanceof HTMLElement&&e.target.matches(`wren-link[href]`)&&e.target.click()},g=e=>{let t=t=>{if(t.defaultPrevented||t.button>1||!(t.target instanceof Element))return;let n=t.target.closest(`wren-link[href]`);if(!n||t.target.closest(`a, button, input, select, textarea`))return;t.preventDefault();let r=d(n),i=t.button===0&&!t.metaKey&&!t.ctrlKey&&!t.altKey&&!t.shiftKey;e&&r&&i?e(r):f(n,t)};window.addEventListener(`click`,t),window.addEventListener(`auxclick`,t),window.addEventListener(`keydown`,h)},_=()=>{let e=history.state,t=a(e)?e:{};try{history.replaceState({...t,[l]:{x:scrollX,y:scrollY}},``)}catch{}},v=e=>{let t=new URL(location.href),n,r,i,a=!1,s=()=>{clearTimeout(r),r=void 0,i=void 0},c=()=>{s(),_()},d=async(r,i)=>{n?.abort(),n=new AbortController;let{signal:a}=n;try{if(await e(r,a),a.aborted)return;i||history.pushState({[l]:{x:0,y:0}},``,r),t=r,m(r,i)}catch(e){if(a.aborted)return;o(e)||console.error(`[wrenjs] Client navigation failed; using browser navigation.`,e),i?location.reload():location.assign(r.href)}};g(e=>{a=!0,history.scrollRestoration=`manual`,c(),d(e)}),window.addEventListener(`popstate`,e=>{if(!a)return;s();let r=new URL(location.href),i=u(e.state);r.pathname===t.pathname&&r.search===t.search?(n?.abort(),m(r,i)):i?d(r,i):location.reload()}),window.addEventListener(`scroll`,()=>{if(!a)return;let e=performance.now();i??=e,clearTimeout(r),e-i>=1e3?c():r=setTimeout(c,100)},{passive:!0})};function y(r,a){let o=new URL(r);o.pathname+=e,o.hash=``;let s=new Headers({[i]:n});return a&&s.set(t,a.id),new Request(o,{body:a?.body,headers:s,method:a?`POST`:`GET`,redirect:`manual`})}const b=`data-prefetch`,x={"":!0,false:!1,hover:`hover`,"on-load":`on-load`,true:!0,visible:`visible`},S=/* @__PURE__ */ new Map,C=/* @__PURE__ */ new Set,w=()=>{let{connection:e,onLine:t}=navigator;return t&&!e?.saveData&&!e?.effectiveType?.includes(`2g`)},T=e=>{let t=new URL(e);return t.hash=``,t.href},E=e=>{S.get(e)?.controller.abort(),S.delete(e)},D=()=>{for(let e of S.keys())E(e)},O=async(e,t)=>{let n=await fetch(y(e),{signal:t});if(n.headers.get(`content-type`)?.startsWith(`text/x-component`))return n;await n.body?.cancel()},k=e=>{let t=Date.now();for(let[e,n]of S)t-n.created>=3e4&&E(e);let n=S.get(e);if(n)return n;S.size>=20&&E(S.keys().next().value);let r=new AbortController,i={controller:r,created:t,response:O(e,r.signal)};return S.set(e,i),i.response.catch(()=>{S.get(e)===i&&S.delete(e)}),i},A=async e=>{let t=w()?d(e):void 0;if(!t)return;let n=T(t);if(s===`flight`)await k(n).response;else if(s===`document`&&!C.has(n)){C.add(n);let e=document.createElement(`link`);e.rel=`prefetch`,e.as=`document`,e.href=n,document.head.append(e)}};var j=class extends HTMLElement{static observedAttributes=[b,`href`];get prefetch(){let e=this.getAttribute(b);return e===null?`hover`:Object.hasOwn(x,e)?x[e]:(console.warn(`[wrenjs] Invalid Link prefetch mode:`,e),!1)}#e;#t;#n;attributeChangedCallback(e,t,n){t!==n&&this.#e?.signal.aborted===!1&&this.#s()}connectedCallback(){this.#e=new AbortController;let{signal:e}=this.#e;this.addEventListener(`mouseenter`,this.#i,{signal:e}),this.addEventListener(`focus`,this.#i,{signal:e}),this.addEventListener(`mouseleave`,this.#a,{signal:e}),this.addEventListener(`blur`,this.#a,{signal:e}),this.#s()}disconnectedCallback(){this.#r(),this.#e?.abort()}#r(){this.#a(),this.#n?.disconnect(),this.#n=void 0}#i=()=>{this.#a();let{prefetch:e}=this;(e===!0||e===`hover`)&&(this.#t=setTimeout(()=>this.#o(),80))};#a=()=>{clearTimeout(this.#t),this.#t=void 0};#o(){A(this).catch(e=>{e instanceof DOMException&&e.name===`AbortError`||console.error(`[wrenjs] Unable to prefetch Link.`,e)})}#s(){if(this.#r(),!this.hasAttribute(`href`))return;this.hasAttribute(`role`)||this.setAttribute(`role`,`link`),this.hasAttribute(`tabindex`)||(this.tabIndex=0);let{prefetch:e}=this;e===`on-load`?this.#o():e===`visible`&&(this.#n=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(this.#n?.disconnect(),this.#o())}),this.#n.observe(this))}};customElements.get(`wren-link`)||(document.head.insertAdjacentHTML(`beforeend`,`<style>:where(wren-link[href]){color:inherit;cursor:pointer}</style>`),customElements.define(`wren-link`,j),window.addEventListener(r,D),s===`flight`?v(async(e,t)=>{let n=T(e),r=k(n);S.delete(n),t.addEventListener(`abort`,()=>r.controller.abort(),{once:!0});let i=await r.response;return t.throwIfAborted(),i?c(i,t):(location.assign(e),new Promise(()=>{}))}):g());export{};
package/dist/config.d.mts CHANGED
@@ -5,14 +5,13 @@ interface WrenAdapter {
5
5
  }
6
6
  interface WrenConfig {
7
7
  /**
8
- * Hosting adapter plugins that hook into the Vite build pipeline.
8
+ * Hosting adapter that prepares the build output for a deployment target.
9
9
  *
10
- * Each adapter is a standard Vite `Plugin` and can use any Vite plugin hooks
11
- * to generate platform-specific output during `wren build`.
10
+ * An adapter is a `{ name, viteConfig }` object. `viteConfig` receives the resolved `WrenConfig`
11
+ * and returns Vite configuration (plugins, environments, ...) that is merged into Wren's, so it
12
+ * can generate platform-specific output during `wren build`.
12
13
  *
13
- * The adapter receives the resolved `WrenConfig`.
14
- *
15
- * If no adapters are specified, Wren's default build output remains unchanged.
14
+ * Without an adapter, Wren's default build output remains unchanged.
16
15
  *
17
16
  * @default undefined
18
17
  */
@@ -33,18 +32,6 @@ interface WrenConfig {
33
32
  * @default false
34
33
  */
35
34
  inlineCSS?: boolean | number;
36
- // /**
37
- // * If client JS assets should be inlined into the per-route HTML for prerendered output.
38
- // *
39
- // * | Value | Behavior |
40
- // * | :---: | :--- |
41
- // * | `true` | Inline all JS assets. |
42
- // * | `false` | Do not inline any JS assets. |
43
- // * | `number` | Inline assets smaller than the specified size in bytes. |
44
- // *
45
- // * @default false
46
- // */
47
- // inlineJS?: boolean | number;
48
35
  /**
49
36
  * Defines the output format for the build.
50
37
  *
@@ -71,12 +58,8 @@ interface WrenConfig {
71
58
  */
72
59
  integrations?: WrenIntegration[];
73
60
  /**
74
- * Defines the routing strategy used by the application.
75
- *
76
- * | Value | Behavior |
77
- * | :---: | :--- |
78
- * | `string` | Use a file-based routing strategy where routes are determined by the file structure, at the specified directory. |
79
- * | `() => Config` | Use a code-based routing strategy where routes are determined programmatically. |
61
+ * Directory used for file-based routing, relative to the project root. Routes are determined by
62
+ * the file structure within it.
80
63
  *
81
64
  * @default "src/pages"
82
65
  */
@@ -0,0 +1 @@
1
+ import"./constants-DiYpQ2qF.mjs";var e=`0.17.0`;const t=`wrenjs`,n=e,r=`ROOT`,i=`PAGE`,a=`API`,o=`NOT_FOUND`,s=`LAYOUT`,c=`PROXY`,l=`___root`,u=`__layout`,d=`__not-found`,f=`__proxy`,p=`GET`,m=`DELETE`,h=`HEAD`,g=`OPTIONS`,_=`PATCH`,v=`POST`,y=`PUT`,b=[`GET`,m,h,g,_,v,`PUT`];export{c as _,g as a,n as b,y as c,f as d,l as f,i as g,o as h,h as i,u as l,s as m,m as n,_ as o,a as p,p as r,v as s,b as t,d as u,r as v,t as y};
@@ -1 +1 @@
1
- const e=`Accept`,t=`charset=utf-8`,n=`text/x-component;${t}`,r=`_.flt`,i=`x-server-action`,a=`wrenjs:invalidate-prefetch`,o=`virtual:wrenjs-routes`,s=`virtual:wrenjs-script-url:`,c=`virtual:wrenjs-hoist:`,l=`__wrenScripts`,u=/\.([cm]?[jt]sx?|astro|svelte|tsrx)$/,d=/\.[cm]?[jt]sx?$/,f=Symbol.for(`wrenjs.response`),p=`wrenjs.response`,m={"Content-Type":`text/plain;${t}`,"X-Content-Type-Options":`nosniff`};export{r as a,c,o as d,u as f,i,s as l,f as m,l as n,m as o,d as p,n as r,a as s,e as t,p as u};
1
+ const e=`Accept`,t=`charset=utf-8`,n=`text/x-component;${t}`,r=`_.flt`,i=`x-server-action`,a=`wrenjs:invalidate-prefetch`,o=`virtual:wrenjs-routes`,s=`virtual:wrenjs-script-url:`,c=`virtual:wrenjs-hoist:`,l=`__wrenScripts`,u=/\.([cm]?[jt]sx?|astro|svelte|tsrx)$/,d=/\.[cm]?[jt]sx?$/,f=Symbol.for(`wrenjs.response`),p=`wrenjs.response`,m={"Content-Type":`text/plain;${t}`,"X-Content-Type-Options":`nosniff`};(async()=>{}).constructor;export{r as a,c,o as d,u as f,i,s as l,f as m,l as n,m as o,d as p,n as r,a as s,e as t,p as u};
@@ -1 +1 @@
1
- import{_ as e,a as t,b as n,c as r,d as i,f as a,g as o,h as s,i as c,l,m as u,n as d,o as f,p,r as m,s as h,t as g,u as _,v,y}from"./constants-DkL4dSXt.mjs";import{f as b}from"./constants-CB936btA.mjs";export{g as ENTRY_API_EXPORTS,d as ENTRY_FILEROUTE_API_EXPORT_DELETE,m as ENTRY_FILEROUTE_API_EXPORT_GET,c as ENTRY_FILEROUTE_API_EXPORT_HEAD,t as ENTRY_FILEROUTE_API_EXPORT_OPTIONS,f as ENTRY_FILEROUTE_API_EXPORT_PATCH,h as ENTRY_FILEROUTE_API_EXPORT_POST,r as ENTRY_FILEROUTE_API_EXPORT_PUT,l as ENTRY_FILEROUTE_LAYOUT,_ as ENTRY_FILEROUTE_NOT_FOUND,i as ENTRY_FILEROUTE_PROXY,a as ENTRY_FILEROUTE_ROOT,p as ENTRY_KIND_API,u as ENTRY_KIND_LAYOUT,s as ENTRY_KIND_NOT_FOUND,o as ENTRY_KIND_PAGE,e as ENTRY_KIND_PROXY,v as ENTRY_KIND_ROOT,b as ROUTE_MODULE_RE,y as WREN_NAME,n as WREN_VERSION};
1
+ import{_ as e,a as t,b as n,c as r,d as i,f as a,g as o,h as s,i as c,l,m as u,n as d,o as f,p,r as m,s as h,t as g,u as _,v,y}from"./constants-B3i9jJ2c.mjs";import{f as b}from"./constants-DiYpQ2qF.mjs";export{g as ENTRY_API_EXPORTS,d as ENTRY_FILEROUTE_API_EXPORT_DELETE,m as ENTRY_FILEROUTE_API_EXPORT_GET,c as ENTRY_FILEROUTE_API_EXPORT_HEAD,t as ENTRY_FILEROUTE_API_EXPORT_OPTIONS,f as ENTRY_FILEROUTE_API_EXPORT_PATCH,h as ENTRY_FILEROUTE_API_EXPORT_POST,r as ENTRY_FILEROUTE_API_EXPORT_PUT,l as ENTRY_FILEROUTE_LAYOUT,_ as ENTRY_FILEROUTE_NOT_FOUND,i as ENTRY_FILEROUTE_PROXY,a as ENTRY_FILEROUTE_ROOT,p as ENTRY_KIND_API,u as ENTRY_KIND_LAYOUT,s as ENTRY_KIND_NOT_FOUND,o as ENTRY_KIND_PAGE,e as ENTRY_KIND_PROXY,v as ENTRY_KIND_ROOT,b as ROUTE_MODULE_RE,y as WREN_NAME,n as WREN_VERSION};
package/dist/response.mjs CHANGED
@@ -1 +1 @@
1
- import{m as e,o as t}from"./constants-CB936btA.mjs";const n=Object.freeze({});var r=class{get body(){return this.#n().body}get bodyUsed(){return this.#t?.bodyUsed??!1}get headers(){let e=this.#e;return e?(e.headers instanceof Headers||(e.headers=new Headers(e.headers)),e.headers):this.#t.headers}get ok(){let{status:e}=this;return e>=200&&e<300}get redirected(){return this.#t?.redirected??!1}get status(){return this.#e?.status??this.#n().status}get statusText(){return this.#t?.statusText??``}get[Symbol.toStringTag](){return`Response`}get type(){return this.#t?.type??`default`}get url(){return this.#t?.url??``}#e;#t;constructor(e=null,r={}){this.#e={body:e,headers:r.headers??(typeof e==`string`?t:n),status:r.status??200}}arrayBuffer(){return this.#n().arrayBuffer()}blob(){return this.#n().blob()}bytes(){return this.#n().bytes()}clone(){return this.#n().clone()}formData(){return this.#n().formData()}json(){return this.#n().json()}text(){return this.#n().text()}[e](){return this.#e}#n(){if(this.#e){let{body:e,headers:t,status:n}=this.#e;this.#e=void 0,this.#t=new Response(e,{headers:t,status:n})}return this.#t}};Object.setPrototypeOf(r.prototype,new Proxy({},{getPrototypeOf:()=>{let e=globalThis.Response.prototype;return Object.setPrototypeOf(r.prototype,e),e}}));const i=/* @__PURE__ */ new Set([301,302,303,307,308]),a=(e,t=302)=>{if(!i.has(t))throw RangeError(`[wrenjs] Invalid redirect status: ${t}.`);return new r(null,{headers:{Location:String(e)},status:t})};export{a as redirect};
1
+ import{m as e,o as t}from"./constants-DiYpQ2qF.mjs";const n=Object.freeze({});var r=class{get body(){return this.#n().body}get bodyUsed(){return this.#t?.bodyUsed??!1}get headers(){let e=this.#e;return e?(e.headers instanceof Headers||(e.headers=new Headers(e.headers)),e.headers):this.#t.headers}get ok(){let{status:e}=this;return e>=200&&e<300}get redirected(){return this.#t?.redirected??!1}get status(){return this.#e?.status??this.#n().status}get statusText(){return this.#t?.statusText??``}get[Symbol.toStringTag](){return`Response`}get type(){return this.#t?.type??`default`}get url(){return this.#t?.url??``}#e;#t;constructor(e=null,r={}){this.#e={body:e,headers:r.headers??(typeof e==`string`?t:n),status:r.status??200}}arrayBuffer(){return this.#n().arrayBuffer()}blob(){return this.#n().blob()}bytes(){return this.#n().bytes()}clone(){return this.#n().clone()}formData(){return this.#n().formData()}json(){return this.#n().json()}text(){return this.#n().text()}[e](){return this.#e}#n(){if(this.#e){let{body:e,headers:t,status:n}=this.#e;this.#e=void 0,this.#t=new Response(e,{headers:t,status:n})}return this.#t}};Object.setPrototypeOf(r.prototype,new Proxy({},{getPrototypeOf:()=>{let e=globalThis.Response.prototype;return Object.setPrototypeOf(r.prototype,e),e}}));const i=/* @__PURE__ */ new Set([301,302,303,307,308]),a=(e,t=302)=>{if(!i.has(t))throw RangeError(`[wrenjs] Invalid redirect status: ${t}.`);return new r(null,{headers:{Location:String(e)},status:t})};export{a as redirect};
@@ -1,4 +1,4 @@
1
- import { n as RouteEntry, t as RadixTrie } from "../types-PJ4hg00s.mjs";
1
+ import { n as RouteEntry, t as RadixTrie } from "../types-DXHI0mTH.mjs";
2
2
  export declare const getPrerenderPaths: (manifest: {
3
3
  dynamicRoutes: RadixTrie<RouteEntry>;
4
4
  staticRoutes?: Record<string, RouteEntry>;
@@ -1 +1 @@
1
- import"../constants-DkL4dSXt.mjs";import{t as e}from"../utils-li1KYQ1O.mjs";function*t(e){e.e&&(yield e.e),e.w&&(yield e.w);for(let n of Object.values(e.s))yield*t(n);e.p&&(yield*t(e.p));for(let n of e.m??[])yield*t(n.node)}const n=async(e,t,n)=>{if(e.kind!==`PAGE`)return[];let r=await Promise.all([e.module(),...e.layouts?.map(e=>e())??[]]);if(!n&&!r.some(e=>e.config?.prerender===!0))return[];if(!e.params?.length){if(!t)throw Error(`A static prerender route must have a pathname.`);return[t]}let[i]=r;if(!i.getStaticPaths)throw Error(`Prerendered route ${t} must export getStaticPaths().`);return i.getStaticPaths()},r=async(r,i=!1)=>{let{dynamicRoutes:a,staticRoutes:o={}}=r,s=await Promise.all([...Object.entries(o).map(([e,t])=>n(t,e,i)),...Array.from(t(a),e=>n(e,e.pattern,i))]);return[...new Set(s.flat().map(t=>e(t)))]};export{r as getPrerenderPaths};
1
+ import"../constants-B3i9jJ2c.mjs";import{t as e}from"../utils-DduvrkBB.mjs";function*t(e){e.e&&(yield e.e),e.w&&(yield e.w);for(let n of Object.values(e.s))yield*t(n);e.p&&(yield*t(e.p));for(let n of e.m??[])yield*t(n.node)}const n=async(e,t,n)=>{if(e.kind!==`PAGE`)return[];let r=await Promise.all([e.module(),...e.layouts?.map(e=>e())??[]]),i=r.find(({config:e})=>e?.prerender!==void 0);if(!n&&i?.config?.prerender!==!0)return[];if(!e.params?.length){if(!t)throw Error(`A static prerender route must have a pathname.`);return[t]}let[a]=r;if(!a.getStaticPaths)throw Error(`Prerendered route ${t} must export getStaticPaths().`);return a.getStaticPaths()},r=async(r,i=!1)=>{let{dynamicRoutes:a,staticRoutes:o={}}=r,s=await Promise.all([...Object.entries(o).map(([e,t])=>n(t,e,i)),...Array.from(t(a),e=>n(e,e.pattern,i))]);return[...new Set(s.flat().map(t=>e(t)))]};export{r as getPrerenderPaths};
@@ -1,3 +1,3 @@
1
- import { a as WrenContext, i as RouteStack, r as RouteModule } from "../types-PJ4hg00s.mjs";
1
+ import { a as WrenContext, i as RouteStack, r as RouteModule } from "../types-DXHI0mTH.mjs";
2
2
  export declare function matchRouteToStack<T extends RouteStack = RouteStack>(path?: string, context?: WrenContext): Promise<T | undefined> | T | undefined;
3
3
  export type { RouteModule, RouteStack };
@@ -1 +1 @@
1
- import{t as e}from"../utils-li1KYQ1O.mjs";import{dynamicNotFounds as t,dynamicRoutes as n,staticNotFounds as r,staticRoutes as i}from"virtual:wrenjs-routes";const a=(e,t,n)=>{let r=e.length-1;if(!t.startsWith(e[0])||!t.endsWith(e[r]))return!1;let i=e[0].length;for(let a=1;a<r;a++){let r=t.indexOf(e[a],i+1);if(r<0)return!1;n?.push(t.slice(i,r)),i=r+e[a].length}let a=t.length-e[r].length;return a<=i?!1:(n?.push(t.slice(i,a)),!0)},o=(e,t,n,r,i)=>{let o=i?.length??0;for(let{lits:c,node:l}of e){let e=a(c,t,i)?s(l,n,r,i):void 0;if(e!==void 0)return e;i&&(i.length=o)}},s=(e,t,n,r)=>{if(n>=t.length)return e.e;let i=t.indexOf(`/`,n),a=i<0?t.length:i,c=t.slice(n,a),l=a+1,u=e.s,d=Object.hasOwn(u,c)?s(u[c],t,l,r):void 0;if(d!==void 0)return d;let f=e.m&&o(e.m,c,t,l,r);if(f!==void 0)return f;if(e.p&&c){let n=r?.length??0;r?.push(c);let i=s(e.p,t,l,r);if(i!==void 0)return i;r&&(r.length=n)}return e.w!==void 0&&r?.push(t.slice(n)),e.w},c=(e,t,n)=>s(e,t,1,n);function l(a,o={}){let s=e(a);if(!s)return;let l=[],u=i?.[s]??c(n,s,l)??r?.[s]??c(t,s,l);if(!u)return;let d=Object.fromEntries(u.params?.map((e,t)=>[e,l[t]])??[]),f=({layouts:e,module:t,proxies:n})=>({context:o,kind:u.kind,layouts:e,module:t,params:d,proxies:n}),p=u.stack();return p instanceof Promise?p.then(f):f(p)}export{l as matchRouteToStack};
1
+ import{t as e}from"../utils-DduvrkBB.mjs";import{dynamicNotFounds as t,dynamicRoutes as n,staticNotFounds as r,staticRoutes as i}from"virtual:wrenjs-routes";const a=(e,t,n)=>{let r=e.length-1;if(!t.startsWith(e[0])||!t.endsWith(e[r]))return!1;let i=e[0].length;for(let a=1;a<r;a++){let r=t.indexOf(e[a],i+1);if(r<0)return!1;n?.push(t.slice(i,r)),i=r+e[a].length}let a=t.length-e[r].length;return a<=i?!1:(n?.push(t.slice(i,a)),!0)},o=(e,t,n,r,i)=>{let o=i?.length??0;for(let{lits:c,node:l}of e){let e=a(c,t,i)?s(l,n,r,i):void 0;if(e!==void 0)return e;i&&(i.length=o)}},s=(e,t,n,r)=>{if(n>=t.length)return e.e;let i=t.indexOf(`/`,n),a=i<0?t.length:i,c=t.slice(n,a),l=a+1,u=e.s,d=Object.hasOwn(u,c)?s(u[c],t,l,r):void 0;if(d!==void 0)return d;let f=e.m&&o(e.m,c,t,l,r);if(f!==void 0)return f;if(e.p&&c){let n=r?.length??0;r?.push(c);let i=s(e.p,t,l,r);if(i!==void 0)return i;r&&(r.length=n)}return e.w!==void 0&&r?.push(t.slice(n)),e.w},c=(e,t,n)=>s(e,t,1,n),l=({kind:e,stack:t},n,r)=>{let i=({layouts:t,module:i,proxies:a})=>({context:r,kind:e,layouts:t,module:i,params:n,proxies:a}),a=t();return a instanceof Promise?a.then(i):i(a)},u=Math.max(0,...Object.keys(r??{}).map(e=>e.length)),d=(e,n)=>{for(let i=e;;i=i.slice(0,i.lastIndexOf(`/`))||`/`){let e=(i.length<=u?r?.[i]:void 0)??c(t,i,n);if(e||i===`/`)return e}};function f(t,r={}){let a=e(t);if(!a)return;let o=i?.[a];if(o)return l(o,{},r);let s=[],u=c(n,a,s)??d(a,s);if(!u)return;let f=u.params,p=f?Object.fromEntries(f.map((e,t)=>[e,s[t]])):{};return l(u,p,r)}export{f as matchRouteToStack};
@@ -122,7 +122,7 @@ interface RouteModule<TDefault = unknown, THandler = unknown, THead = unknown> {
122
122
  getStaticPaths?: Wren.GetStaticPaths;
123
123
  HEAD?: THandler;
124
124
  head?: RouteHead<THead>;
125
- loader?: RouteLoader<TDefault>;
125
+ loader?: RouteLoader;
126
126
  OPTIONS?: THandler;
127
127
  PATCH?: THandler;
128
128
  POST?: THandler;
package/dist/types.d.ts CHANGED
@@ -172,7 +172,7 @@ export interface RouteModule<TDefault = unknown, THandler = unknown, THead = unk
172
172
  getStaticPaths?: Wren.GetStaticPaths;
173
173
  HEAD?: THandler;
174
174
  head?: RouteHead<THead>;
175
- loader?: RouteLoader<TDefault>;
175
+ loader?: RouteLoader;
176
176
  OPTIONS?: THandler;
177
177
  PATCH?: THandler;
178
178
  POST?: THandler;
@@ -1 +1 @@
1
- import"./constants-CB936btA.mjs";const e=e=>typeof e==`object`&&!!e,t=t=>e(t)&&t.digest===`wrenjs.response`,n=e=>{if(!e)return;let t=0,n=e.indexOf(`?`);n===-1&&(n=e.length);let r=e.indexOf(`#`);if(r!==-1&&r<n&&(n=r),e[0]!==`/`){let r=e.indexOf(`://`);if(r!==-1&&r<n){let i=e.indexOf(`/`,r+3);t=i!==-1&&i<n?i:n}}for(;n>t+1&&e[n-1]===`/`;)n--;let i=e.slice(t,n);return i[0]===`/`?i:`/${i}`};export{e as n,t as r,n as t};
1
+ import"./constants-DiYpQ2qF.mjs";const e=e=>typeof e==`object`&&!!e,t=t=>e(t)&&t.digest===`wrenjs.response`,n=e=>{if(!e)return;let t=0,n=e.indexOf(`?`);n===-1&&(n=e.length);let r=e.indexOf(`#`);if(r!==-1&&r<n&&(n=r),e[0]!==`/`){let r=e.indexOf(`://`);if(r!==-1&&r<n){let i=e.indexOf(`/`,r+3);t=i!==-1&&i<n?i:n}}for(;n>t+1&&e[n-1]===`/`;)n--;let i=e.slice(t,n);return i[0]===`/`?i:`/${i}`};export{e as n,t as r,n as t};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wren-js/core",
3
- "version": "0.14.0",
3
+ "version": "0.17.0",
4
4
  "description": "Framework agnostic utilities for the wrenjs meta-framework",
5
5
  "keywords": [
6
6
  "@wren-js/core",
@@ -1 +0,0 @@
1
- var e=`0.14.0`;const t=`wrenjs`,n=e,r=`ROOT`,i=`PAGE`,a=`API`,o=`NOT_FOUND`,s=`LAYOUT`,c=`PROXY`,l=`___root`,u=`__layout`,d=`__not-found`,f=`__proxy`,p=`GET`,m=`DELETE`,h=`HEAD`,g=`OPTIONS`,_=`PATCH`,v=`POST`,y=`PUT`,b=[`GET`,m,h,g,_,v,`PUT`];export{c as _,g as a,n as b,y as c,f as d,l as f,i as g,o as h,h as i,u as l,s as m,m as n,_ as o,a as p,p as r,v as s,b as t,d as u,r as v,t as y};