@wren-js/core 0.13.0 → 0.16.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 +7 -10
- package/dist/components/Link/wren-link.mjs +1 -1
- package/dist/config.d.mts +7 -28
- package/dist/constants-C34HTzRo.mjs +1 -0
- package/dist/{constants-DY_YNC7k.d.mts → constants-Cl_tAd3n.d.mts} +0 -4
- package/dist/{constants-CB936btA.mjs → constants-DiYpQ2qF.mjs} +1 -1
- package/dist/constants.d.mts +1 -1
- package/dist/constants.mjs +1 -1
- package/dist/link.d.mts +0 -2
- package/dist/response.d.mts +0 -2
- package/dist/response.mjs +1 -1
- package/dist/runtime/prerender.d.mts +2 -4
- package/dist/runtime/prerender.mjs +1 -1
- package/dist/runtime/router.d.mts +1 -3
- package/dist/runtime/router.mjs +1 -1
- package/dist/{types-BMcFdUPW.d.mts → types-DXHI0mTH.d.mts} +2 -14
- package/dist/types.d.ts +1 -1
- package/dist/{utils-li1KYQ1O.mjs → utils-DduvrkBB.mjs} +1 -1
- package/package.json +3 -3
- package/dist/constants-DEZyjgyc.mjs +0 -1
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-
|
|
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-C34HTzRo.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},
|
|
4
|
-
`.repeat(i):r}},
|
|
5
|
-
`.repeat(
|
|
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
|
-
|
|
8
|
-
`)}`);let i=
|
|
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
|
-
`}
|
|
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-
|
|
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
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import { ConfigEnv, UserConfig } from "vite";
|
|
2
|
-
//#region src/entry/config/types.d.ts
|
|
3
2
|
interface WrenAdapter {
|
|
4
3
|
name: string;
|
|
5
4
|
viteConfig(config: WrenConfig, env: ConfigEnv): Promise<UserConfig> | UserConfig;
|
|
6
5
|
}
|
|
7
6
|
interface WrenConfig {
|
|
8
7
|
/**
|
|
9
|
-
* Hosting adapter
|
|
8
|
+
* Hosting adapter that prepares the build output for a deployment target.
|
|
10
9
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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`.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* If no adapters are specified, Wren's default build output remains unchanged.
|
|
14
|
+
* Without an adapter, Wren's default build output remains unchanged.
|
|
17
15
|
*
|
|
18
16
|
* @default undefined
|
|
19
17
|
*/
|
|
@@ -34,18 +32,6 @@ interface WrenConfig {
|
|
|
34
32
|
* @default false
|
|
35
33
|
*/
|
|
36
34
|
inlineCSS?: boolean | number;
|
|
37
|
-
// /**
|
|
38
|
-
// * If client JS assets should be inlined into the per-route HTML for prerendered output.
|
|
39
|
-
// *
|
|
40
|
-
// * | Value | Behavior |
|
|
41
|
-
// * | :---: | :--- |
|
|
42
|
-
// * | `true` | Inline all JS assets. |
|
|
43
|
-
// * | `false` | Do not inline any JS assets. |
|
|
44
|
-
// * | `number` | Inline assets smaller than the specified size in bytes. |
|
|
45
|
-
// *
|
|
46
|
-
// * @default false
|
|
47
|
-
// */
|
|
48
|
-
// inlineJS?: boolean | number;
|
|
49
35
|
/**
|
|
50
36
|
* Defines the output format for the build.
|
|
51
37
|
*
|
|
@@ -72,12 +58,8 @@ interface WrenConfig {
|
|
|
72
58
|
*/
|
|
73
59
|
integrations?: WrenIntegration[];
|
|
74
60
|
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* | Value | Behavior |
|
|
78
|
-
* | :---: | :--- |
|
|
79
|
-
* | `string` | Use a file-based routing strategy where routes are determined by the file structure, at the specified directory. |
|
|
80
|
-
* | `() => 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.
|
|
81
63
|
*
|
|
82
64
|
* @default "src/pages"
|
|
83
65
|
*/
|
|
@@ -102,10 +84,7 @@ interface WrenIntegration {
|
|
|
102
84
|
};
|
|
103
85
|
viteConfig(config: WrenConfig, env: ConfigEnv): Promise<UserConfig> | UserConfig;
|
|
104
86
|
}
|
|
105
|
-
//#endregion
|
|
106
|
-
//#region src/entry/config/index.d.ts
|
|
107
87
|
export declare const CONFIG_VALID_EXTENSIONS: readonly ["ts", "mts", "js", "mjs"];
|
|
108
88
|
export declare function defineConfig(config?: WrenConfig): WrenConfig;
|
|
109
89
|
export declare const DEFAULTS: WrenConfig;
|
|
110
|
-
//#endregion
|
|
111
90
|
export type { WrenAdapter, WrenConfig, WrenIntegration };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./constants-DiYpQ2qF.mjs";var e=`0.16.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,7 +1,4 @@
|
|
|
1
|
-
//#region ../_shared/constants.d.ts
|
|
2
1
|
declare const ROUTE_MODULE_RE: RegExp;
|
|
3
|
-
//#endregion
|
|
4
|
-
//#region src/constants.d.ts
|
|
5
2
|
declare const WREN_NAME = "wrenjs";
|
|
6
3
|
declare const WREN_VERSION: string;
|
|
7
4
|
declare const ENTRY_KIND_ROOT = "ROOT";
|
|
@@ -22,5 +19,4 @@ declare const ENTRY_FILEROUTE_API_EXPORT_PATCH = "PATCH";
|
|
|
22
19
|
declare const ENTRY_FILEROUTE_API_EXPORT_POST = "POST";
|
|
23
20
|
declare const ENTRY_FILEROUTE_API_EXPORT_PUT = "PUT";
|
|
24
21
|
declare const ENTRY_API_EXPORTS: readonly ["GET", "DELETE", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"];
|
|
25
|
-
//#endregion
|
|
26
22
|
export { ENTRY_KIND_PROXY as _, ENTRY_FILEROUTE_API_EXPORT_OPTIONS as a, WREN_VERSION as b, ENTRY_FILEROUTE_API_EXPORT_PUT as c, ENTRY_FILEROUTE_PROXY as d, ENTRY_FILEROUTE_ROOT as f, ENTRY_KIND_PAGE as g, ENTRY_KIND_NOT_FOUND as h, ENTRY_FILEROUTE_API_EXPORT_HEAD as i, ENTRY_FILEROUTE_LAYOUT as l, ENTRY_KIND_LAYOUT as m, ENTRY_FILEROUTE_API_EXPORT_DELETE as n, ENTRY_FILEROUTE_API_EXPORT_PATCH as o, ENTRY_KIND_API as p, ENTRY_FILEROUTE_API_EXPORT_GET as r, ENTRY_FILEROUTE_API_EXPORT_POST as s, ENTRY_API_EXPORTS as t, ENTRY_FILEROUTE_NOT_FOUND as u, ENTRY_KIND_ROOT as v, ROUTE_MODULE_RE as x, WREN_NAME 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};
|
package/dist/constants.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as ENTRY_KIND_PROXY, a as ENTRY_FILEROUTE_API_EXPORT_OPTIONS, b as WREN_VERSION, c as ENTRY_FILEROUTE_API_EXPORT_PUT, d as ENTRY_FILEROUTE_PROXY, f as ENTRY_FILEROUTE_ROOT, g as ENTRY_KIND_PAGE, h as ENTRY_KIND_NOT_FOUND, i as ENTRY_FILEROUTE_API_EXPORT_HEAD, l as ENTRY_FILEROUTE_LAYOUT, m as ENTRY_KIND_LAYOUT, n as ENTRY_FILEROUTE_API_EXPORT_DELETE, o as ENTRY_FILEROUTE_API_EXPORT_PATCH, p as ENTRY_KIND_API, r as ENTRY_FILEROUTE_API_EXPORT_GET, s as ENTRY_FILEROUTE_API_EXPORT_POST, t as ENTRY_API_EXPORTS, u as ENTRY_FILEROUTE_NOT_FOUND, v as ENTRY_KIND_ROOT, x as ROUTE_MODULE_RE, y as WREN_NAME } from "./constants-
|
|
1
|
+
import { _ as ENTRY_KIND_PROXY, a as ENTRY_FILEROUTE_API_EXPORT_OPTIONS, b as WREN_VERSION, c as ENTRY_FILEROUTE_API_EXPORT_PUT, d as ENTRY_FILEROUTE_PROXY, f as ENTRY_FILEROUTE_ROOT, g as ENTRY_KIND_PAGE, h as ENTRY_KIND_NOT_FOUND, i as ENTRY_FILEROUTE_API_EXPORT_HEAD, l as ENTRY_FILEROUTE_LAYOUT, m as ENTRY_KIND_LAYOUT, n as ENTRY_FILEROUTE_API_EXPORT_DELETE, o as ENTRY_FILEROUTE_API_EXPORT_PATCH, p as ENTRY_KIND_API, r as ENTRY_FILEROUTE_API_EXPORT_GET, s as ENTRY_FILEROUTE_API_EXPORT_POST, t as ENTRY_API_EXPORTS, u as ENTRY_FILEROUTE_NOT_FOUND, v as ENTRY_KIND_ROOT, x as ROUTE_MODULE_RE, y as WREN_NAME } from "./constants-Cl_tAd3n.mjs";
|
|
2
2
|
export { ENTRY_API_EXPORTS, ENTRY_FILEROUTE_API_EXPORT_DELETE, ENTRY_FILEROUTE_API_EXPORT_GET, ENTRY_FILEROUTE_API_EXPORT_HEAD, ENTRY_FILEROUTE_API_EXPORT_OPTIONS, ENTRY_FILEROUTE_API_EXPORT_PATCH, ENTRY_FILEROUTE_API_EXPORT_POST, ENTRY_FILEROUTE_API_EXPORT_PUT, ENTRY_FILEROUTE_LAYOUT, ENTRY_FILEROUTE_NOT_FOUND, ENTRY_FILEROUTE_PROXY, ENTRY_FILEROUTE_ROOT, ENTRY_KIND_API, ENTRY_KIND_LAYOUT, ENTRY_KIND_NOT_FOUND, ENTRY_KIND_PAGE, ENTRY_KIND_PROXY, ENTRY_KIND_ROOT, ROUTE_MODULE_RE, WREN_NAME, WREN_VERSION };
|
package/dist/constants.mjs
CHANGED
|
@@ -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-
|
|
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-C34HTzRo.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/link.d.mts
CHANGED
package/dist/response.d.mts
CHANGED
package/dist/response.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as e,o as t}from"./constants-
|
|
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,7 +1,5 @@
|
|
|
1
|
-
import { n as RouteEntry, t as RadixTrie } from "../types-
|
|
2
|
-
//#region src/runtime/prerender/index.d.ts
|
|
1
|
+
import { n as RouteEntry, t as RadixTrie } from "../types-DXHI0mTH.mjs";
|
|
3
2
|
export declare const getPrerenderPaths: (manifest: {
|
|
4
3
|
dynamicRoutes: RadixTrie<RouteEntry>;
|
|
5
4
|
staticRoutes?: Record<string, RouteEntry>;
|
|
6
|
-
}, prerenderAll?: boolean) => Promise<string[]>;
|
|
7
|
-
//#endregion
|
|
5
|
+
}, prerenderAll?: boolean) => Promise<string[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../constants-
|
|
1
|
+
import"../constants-C34HTzRo.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,5 +1,3 @@
|
|
|
1
|
-
import { a as WrenContext, i as RouteStack, r as RouteModule } from "../types-
|
|
2
|
-
//#region src/runtime/router/index.d.ts
|
|
1
|
+
import { a as WrenContext, i as RouteStack, r as RouteModule } from "../types-DXHI0mTH.mjs";
|
|
3
2
|
export declare function matchRouteToStack<T extends RouteStack = RouteStack>(path?: string, context?: WrenContext): Promise<T | undefined> | T | undefined;
|
|
4
|
-
//#endregion
|
|
5
3
|
export type { RouteModule, RouteStack };
|
package/dist/runtime/router.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"../utils-
|
|
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};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/// <reference types="vite/client" />
|
|
2
|
-
import { _ as ENTRY_KIND_PROXY, g as ENTRY_KIND_PAGE, h as ENTRY_KIND_NOT_FOUND, m as ENTRY_KIND_LAYOUT, p as ENTRY_KIND_API, v as ENTRY_KIND_ROOT } from "./constants-
|
|
2
|
+
import { _ as ENTRY_KIND_PROXY, g as ENTRY_KIND_PAGE, h as ENTRY_KIND_NOT_FOUND, m as ENTRY_KIND_LAYOUT, p as ENTRY_KIND_API, v as ENTRY_KIND_ROOT } from "./constants-Cl_tAd3n.mjs";
|
|
3
3
|
import "virtual:wrenjs-fetch";
|
|
4
|
-
//#region src/virtual-wrenjs-fetch.d.ts
|
|
5
4
|
declare module "virtual:wrenjs-fetch" {
|
|
6
5
|
export type RequestInput = Request | {
|
|
7
6
|
headers: Pick<Headers, "get">;
|
|
@@ -11,14 +10,10 @@ declare module "virtual:wrenjs-fetch" {
|
|
|
11
10
|
};
|
|
12
11
|
export const fetch: (request: RequestInput, context?: Wren.Context) => Promise<Response>;
|
|
13
12
|
}
|
|
14
|
-
//#endregion
|
|
15
|
-
//#region src/virtual-wrenjs-island-script.d.ts
|
|
16
13
|
declare module "virtual:wrenjs-island-script" {
|
|
17
14
|
const url: string;
|
|
18
15
|
export default url;
|
|
19
16
|
}
|
|
20
|
-
//#endregion
|
|
21
|
-
//#region src/virtual-wrenjs-link-client.d.ts
|
|
22
17
|
declare module "virtual:wrenjs-link-client" {
|
|
23
18
|
export const kind: "document" | "flight" | "native";
|
|
24
19
|
export function render(response: Response, signal: AbortSignal): Promise<void>;
|
|
@@ -27,8 +22,6 @@ declare module "virtual:wrenjs-link-script" {
|
|
|
27
22
|
const url: string;
|
|
28
23
|
export default url;
|
|
29
24
|
}
|
|
30
|
-
//#endregion
|
|
31
|
-
//#region src/virtual-wrenjs-page-scripts.d.ts
|
|
32
25
|
declare module "virtual:wrenjs-page-scripts" {
|
|
33
26
|
const manifest: {
|
|
34
27
|
routes: Record<string, string[]>;
|
|
@@ -37,8 +30,6 @@ declare module "virtual:wrenjs-page-scripts" {
|
|
|
37
30
|
export default manifest;
|
|
38
31
|
}
|
|
39
32
|
declare module "virtual:wrenjs-hoist:*" {}
|
|
40
|
-
//#endregion
|
|
41
|
-
//#region src/virtual-wrenjs-routes.d.ts
|
|
42
33
|
declare module "virtual:wrenjs-routes" {
|
|
43
34
|
export type Entry = RouteEntry;
|
|
44
35
|
export type RadixTrie = RadixTrie$1<Entry>;
|
|
@@ -47,8 +38,6 @@ declare module "virtual:wrenjs-routes" {
|
|
|
47
38
|
export const staticNotFounds: Record<string, Entry> | undefined;
|
|
48
39
|
export const staticRoutes: Record<string, Entry> | undefined;
|
|
49
40
|
}
|
|
50
|
-
//#endregion
|
|
51
|
-
//#region src/types.d.ts
|
|
52
41
|
declare global {
|
|
53
42
|
namespace Wren {
|
|
54
43
|
type ApiHandler<TParams extends RouteParams = RouteParams> = RouteApiHandler<TParams>;
|
|
@@ -133,7 +122,7 @@ interface RouteModule<TDefault = unknown, THandler = unknown, THead = unknown> {
|
|
|
133
122
|
getStaticPaths?: Wren.GetStaticPaths;
|
|
134
123
|
HEAD?: THandler;
|
|
135
124
|
head?: RouteHead<THead>;
|
|
136
|
-
loader?: RouteLoader
|
|
125
|
+
loader?: RouteLoader;
|
|
137
126
|
OPTIONS?: THandler;
|
|
138
127
|
PATCH?: THandler;
|
|
139
128
|
POST?: THandler;
|
|
@@ -174,5 +163,4 @@ type IntegrationHead = Wren.Integration extends {
|
|
|
174
163
|
type IntegrationNode = Wren.Integration extends {
|
|
175
164
|
node: infer TNode;
|
|
176
165
|
} ? TNode : unknown;
|
|
177
|
-
//#endregion
|
|
178
166
|
export { WrenContext as a, RouteStack as i, RouteEntry as n, RouteModule as r, RadixTrie$1 as t };
|
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
|
|
175
|
+
loader?: RouteLoader;
|
|
176
176
|
OPTIONS?: THandler;
|
|
177
177
|
PATCH?: THandler;
|
|
178
178
|
POST?: THandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./constants-
|
|
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.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"description": "Framework agnostic utilities for the wrenjs meta-framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"@wren-js/core",
|
|
@@ -60,11 +60,11 @@
|
|
|
60
60
|
"access": "public"
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"vite": "8.3.
|
|
63
|
+
"vite": "8.3.5"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
66
|
"typescript": "7.0.2",
|
|
67
|
-
"vite-plus": "1.
|
|
67
|
+
"vite-plus": "1.4.0"
|
|
68
68
|
},
|
|
69
69
|
"scripts": {
|
|
70
70
|
"build": "vp pack",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=`0.13.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};
|