@wren-js/core 0.12.0 → 0.14.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,4 +1,4 @@
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-B3ndZB9W.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-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(`
2
2
  `);n!==-1;n=e.indexOf(`
3
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
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:`
package/dist/config.d.mts CHANGED
@@ -1,5 +1,4 @@
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;
@@ -102,10 +101,7 @@ interface WrenIntegration {
102
101
  };
103
102
  viteConfig(config: WrenConfig, env: ConfigEnv): Promise<UserConfig> | UserConfig;
104
103
  }
105
- //#endregion
106
- //#region src/entry/config/index.d.ts
107
104
  export declare const CONFIG_VALID_EXTENSIONS: readonly ["ts", "mts", "js", "mjs"];
108
105
  export declare function defineConfig(config?: WrenConfig): WrenConfig;
109
106
  export declare const DEFAULTS: WrenConfig;
110
- //#endregion
111
107
  export type { WrenAdapter, WrenConfig, WrenIntegration };
@@ -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
- var e=`0.12.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
+ 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};
@@ -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-DY_YNC7k.mjs";
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 };
@@ -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-B3ndZB9W.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-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};
package/dist/link.d.mts CHANGED
@@ -1,5 +1,3 @@
1
1
  import "virtual:wrenjs-hoist:virtual:wrenjs-link-script";
2
- //#region src/runtime/components/Link/index.d.ts
3
2
  declare const Link: "a";
4
- //#endregion
5
3
  export { Link as default };
@@ -1,5 +1,3 @@
1
- //#region ../_shared/entry/ssr/response.d.ts
2
1
  type RedirectStatus = 301 | 302 | 303 | 307 | 308;
3
2
  export declare const redirect: (location: string | URL, status?: RedirectStatus) => Response;
4
- //#endregion
5
3
  export {};
@@ -1,7 +1,5 @@
1
- import { n as RouteEntry, t as RadixTrie } from "../types-B5lgdAKl.mjs";
2
- //#region src/runtime/prerender/index.d.ts
1
+ import { n as RouteEntry, t as RadixTrie } from "../types-PJ4hg00s.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-B3ndZB9W.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-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,5 +1,3 @@
1
- import { a as WrenContext, i as RouteStack, r as RouteModule } from "../types-B5lgdAKl.mjs";
2
- //#region src/runtime/router/index.d.ts
1
+ import { a as WrenContext, i as RouteStack, r as RouteModule } from "../types-PJ4hg00s.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 };
@@ -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-DY_YNC7k.mjs";
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,11 +38,25 @@ 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 {
43
+ type ApiHandler<TParams extends RouteParams = RouteParams> = RouteApiHandler<TParams>;
44
+ type ApiParams<TParams extends RouteParams = RouteParams> = RouteApiParams<TParams>;
45
+ type Config = RouteConfig;
54
46
  interface Context {}
47
+ type GetStaticPaths = () => Promise<string[]> | string[];
48
+ type Head<TParams extends RouteParams = RouteParams, TData = unknown> = RouteHead<IntegrationHead, TParams, TData>;
49
+ type HeadProps<TParams extends RouteParams = RouteParams, TData = unknown> = RouteHeadParams<TParams, TData>;
50
+ interface Integration {}
51
+ type Layout<TData = unknown> = RouteComponent<LayoutProps<TData>, IntegrationNode>;
52
+ type LayoutProps<TData = unknown> = RouteLayoutProps<IntegrationNode, TData>;
53
+ type Loader<TReturn = unknown, TParams extends RouteParams = RouteParams> = RouteLoader<TReturn, TParams>;
54
+ type LoaderProps<TParams extends RouteParams = RouteParams> = RouteLoaderParams<TParams>;
55
+ type Page<TParams extends RouteParams = RouteParams, TData = unknown> = RouteComponent<PageProps<TParams, TData>, IntegrationNode>;
56
+ type PageProps<TParams extends RouteParams = RouteParams, TData = unknown> = RoutePageProps<TParams, TData>;
57
+ type Proxy<TParams extends RouteParams = RouteParams> = RouteProxy<TParams>;
58
+ type ProxyContext<TParams extends RouteParams = RouteParams> = RouteProxyContext<TParams>;
59
+ type ProxyNext = () => Promise<Response>;
55
60
  }
56
61
  }
57
62
  interface Entry$1 {
@@ -74,6 +79,12 @@ interface RadixTrie$1<Route = Entry$1> {
74
79
  w?: Route;
75
80
  }
76
81
  type RedirectStatus = 301 | 302 | 303 | 307 | 308;
82
+ type RouteApiHandler<TParams extends RouteParams = RouteParams> = (request: Request, route: RouteApiParams<TParams>) => Promise<Response> | Response;
83
+ interface RouteApiParams<TParams extends RouteParams = RouteParams> {
84
+ context: WrenContext;
85
+ params: TParams;
86
+ }
87
+ type RouteComponent<TProps, TNode> = (props: TProps) => Promise<TNode> | TNode;
77
88
  interface RouteConfig {
78
89
  headers?: Readonly<Record<string, string>>;
79
90
  prerender?: boolean;
@@ -87,14 +98,20 @@ interface RouteEntry {
87
98
  proxies?: (() => Promise<RouteModule>)[];
88
99
  stack: () => Promise<RouteStackModules> | RouteStackModules;
89
100
  }
90
- type RouteHead<TElement = unknown> = ({ data, params, request }: RouteHeadParams) => Promise<TElement> | TElement;
91
- interface RouteHeadParams extends RouteLoaderParams {
92
- data?: ReturnType<RouteLoader>;
101
+ type RouteHead<TElement = unknown, TParams extends RouteParams = RouteParams, TData = unknown> = ({ data, params, request }: RouteHeadParams<TParams, TData>) => Promise<TElement> | TElement;
102
+ interface RouteHeadParams<TParams extends RouteParams = RouteParams, TData = unknown> extends RouteLoaderParams<TParams> {
103
+ data?: Promise<TData>;
104
+ }
105
+ interface RouteLayoutProps<TChildren = unknown, TData = unknown> {
106
+ children?: TChildren;
107
+ context?: WrenContext;
108
+ data?: Promise<TData>;
109
+ request?: Request;
93
110
  }
94
- type RouteLoader<TDefault = unknown> = ({ params, request }: RouteLoaderParams) => Promise<TDefault>;
95
- interface RouteLoaderParams {
111
+ type RouteLoader<TReturn = unknown, TParams extends RouteParams = RouteParams> = ({ params, request }: RouteLoaderParams<TParams>) => Promise<TReturn>;
112
+ interface RouteLoaderParams<TParams extends RouteParams = RouteParams> {
96
113
  context: WrenContext;
97
- params?: Record<string, string>;
114
+ params?: TParams;
98
115
  request: Request;
99
116
  }
100
117
  interface RouteModule<TDefault = unknown, THandler = unknown, THead = unknown> {
@@ -102,7 +119,7 @@ interface RouteModule<TDefault = unknown, THandler = unknown, THead = unknown> {
102
119
  default: TDefault;
103
120
  DELETE?: THandler;
104
121
  GET?: THandler;
105
- getStaticPaths?: () => Promise<string[]> | string[];
122
+ getStaticPaths?: Wren.GetStaticPaths;
106
123
  HEAD?: THandler;
107
124
  head?: RouteHead<THead>;
108
125
  loader?: RouteLoader<TDefault>;
@@ -111,18 +128,25 @@ interface RouteModule<TDefault = unknown, THandler = unknown, THead = unknown> {
111
128
  POST?: THandler;
112
129
  PUT?: THandler;
113
130
  }
131
+ interface RoutePageProps<TParams extends RouteParams = RouteParams, TData = unknown> {
132
+ context?: WrenContext;
133
+ data?: Promise<TData>;
134
+ params?: TParams;
135
+ request?: Request;
136
+ }
137
+ type RouteParams = Record<string, string>;
114
138
  /** A `__proxy` default export. Return a `Response` to short-circuit, or nothing to continue. */
115
- type RouteProxy = (context: RouteProxyContext, next: RouteProxyNext) => Promise<Response | void> | Response | void;
116
- interface RouteProxyContext {
139
+ type RouteProxy<TParams extends RouteParams = RouteParams> = (context: RouteProxyContext<TParams>, next: RouteProxyNext) => Promise<Response | void> | Response | void;
140
+ interface RouteProxyContext<TParams extends RouteParams = RouteParams> {
117
141
  context: WrenContext;
118
- params: Record<string, string>;
142
+ params: TParams;
119
143
  redirect: (location: string | URL, status?: RedirectStatus) => Response;
120
144
  request: Request;
121
145
  /** The page URL, without the Flight request suffix. */
122
146
  url: URL;
123
147
  }
124
148
  /** Runs the inner proxies and the route handler; may be called once. */
125
- type RouteProxyNext = () => Promise<Response>;
149
+ type RouteProxyNext = Wren.ProxyNext;
126
150
  interface RouteStack<TModule extends RouteModule = RouteModule, TLayout extends RouteModule = RouteModule, TProxy extends RouteModule = RouteModule<RouteProxy>> {
127
151
  context: WrenContext;
128
152
  kind: "API" | "NOT_FOUND" | "PAGE";
@@ -133,5 +157,10 @@ interface RouteStack<TModule extends RouteModule = RouteModule, TLayout extends
133
157
  }
134
158
  type RouteStackModules = Pick<Required<RouteStack>, "layouts" | "module" | "proxies">;
135
159
  type WrenContext = Wren.Context;
136
- //#endregion
160
+ type IntegrationHead = Wren.Integration extends {
161
+ head: infer THead;
162
+ } ? THead : IntegrationNode;
163
+ type IntegrationNode = Wren.Integration extends {
164
+ node: infer TNode;
165
+ } ? TNode : unknown;
137
166
  export { WrenContext as a, RouteStack as i, RouteEntry as n, RouteModule as r, RadixTrie$1 as t };
package/dist/types.d.ts CHANGED
@@ -8,7 +8,39 @@ import "./virtual-wrenjs-routes.d.ts";
8
8
 
9
9
  declare global {
10
10
  namespace Wren {
11
+ type ApiHandler<TParams extends RouteParams = RouteParams> = RouteApiHandler<TParams>;
12
+ type ApiParams<TParams extends RouteParams = RouteParams> = RouteApiParams<TParams>;
13
+ type Config = RouteConfig;
11
14
  interface Context {}
15
+ type GetStaticPaths = () => Promise<string[]> | string[];
16
+ type Head<TParams extends RouteParams = RouteParams, TData = unknown> = RouteHead<
17
+ IntegrationHead,
18
+ TParams,
19
+ TData
20
+ >;
21
+ type HeadProps<TParams extends RouteParams = RouteParams, TData = unknown> = RouteHeadParams<
22
+ TParams,
23
+ TData
24
+ >;
25
+ interface Integration {}
26
+ type Layout<TData = unknown> = RouteComponent<LayoutProps<TData>, IntegrationNode>;
27
+ type LayoutProps<TData = unknown> = RouteLayoutProps<IntegrationNode, TData>;
28
+ type Loader<TReturn = unknown, TParams extends RouteParams = RouteParams> = RouteLoader<
29
+ TReturn,
30
+ TParams
31
+ >;
32
+ type LoaderProps<TParams extends RouteParams = RouteParams> = RouteLoaderParams<TParams>;
33
+ type Page<TParams extends RouteParams = RouteParams, TData = unknown> = RouteComponent<
34
+ PageProps<TParams, TData>,
35
+ IntegrationNode
36
+ >;
37
+ type PageProps<TParams extends RouteParams = RouteParams, TData = unknown> = RoutePageProps<
38
+ TParams,
39
+ TData
40
+ >;
41
+ type Proxy<TParams extends RouteParams = RouteParams> = RouteProxy<TParams>;
42
+ type ProxyContext<TParams extends RouteParams = RouteParams> = RouteProxyContext<TParams>;
43
+ type ProxyNext = () => Promise<Response>;
12
44
  }
13
45
  }
14
46
 
@@ -72,7 +104,17 @@ export interface RoutableEntry {
72
104
  routes: Entry[];
73
105
  }
74
106
 
75
- export type RouteApiParams = Pick<RouteStack, "context" | "params">;
107
+ export type RouteApiHandler<TParams extends RouteParams = RouteParams> = (
108
+ request: Request,
109
+ route: RouteApiParams<TParams>,
110
+ ) => Promise<Response> | Response;
111
+
112
+ export interface RouteApiParams<TParams extends RouteParams = RouteParams> {
113
+ context: WrenContext;
114
+ params: TParams;
115
+ }
116
+
117
+ export type RouteComponent<TProps, TNode> = (props: TProps) => Promise<TNode> | TNode;
76
118
 
77
119
  export interface RouteConfig {
78
120
  headers?: Readonly<Record<string, string>>;
@@ -90,24 +132,34 @@ export interface RouteEntry {
90
132
  stack: () => Promise<RouteStackModules> | RouteStackModules;
91
133
  }
92
134
 
93
- export type RouteHead<TElement = unknown> = ({
94
- data,
95
- params,
96
- request,
97
- }: RouteHeadParams) => Promise<TElement> | TElement;
135
+ export type RouteHead<
136
+ TElement = unknown,
137
+ TParams extends RouteParams = RouteParams,
138
+ TData = unknown,
139
+ > = ({ data, params, request }: RouteHeadParams<TParams, TData>) => Promise<TElement> | TElement;
140
+
141
+ export interface RouteHeadParams<
142
+ TParams extends RouteParams = RouteParams,
143
+ TData = unknown,
144
+ > extends RouteLoaderParams<TParams> {
145
+ data?: Promise<TData>;
146
+ }
98
147
 
99
- export interface RouteHeadParams extends RouteLoaderParams {
100
- data?: ReturnType<RouteLoader>;
148
+ export interface RouteLayoutProps<TChildren = unknown, TData = unknown> {
149
+ children?: TChildren;
150
+ context?: WrenContext;
151
+ data?: Promise<TData>;
152
+ request?: Request;
101
153
  }
102
154
 
103
- export type RouteLoader<TDefault = unknown> = ({
155
+ export type RouteLoader<TReturn = unknown, TParams extends RouteParams = RouteParams> = ({
104
156
  params,
105
157
  request,
106
- }: RouteLoaderParams) => Promise<TDefault>;
158
+ }: RouteLoaderParams<TParams>) => Promise<TReturn>;
107
159
 
108
- export interface RouteLoaderParams {
160
+ export interface RouteLoaderParams<TParams extends RouteParams = RouteParams> {
109
161
  context: WrenContext;
110
- params?: Record<string, string>;
162
+ params?: TParams;
111
163
  request: Request;
112
164
  }
113
165
 
@@ -117,7 +169,7 @@ export interface RouteModule<TDefault = unknown, THandler = unknown, THead = unk
117
169
  DELETE?: THandler;
118
170
  GET?: THandler;
119
171
 
120
- getStaticPaths?: () => Promise<string[]> | string[];
172
+ getStaticPaths?: Wren.GetStaticPaths;
121
173
  HEAD?: THandler;
122
174
  head?: RouteHead<THead>;
123
175
  loader?: RouteLoader<TDefault>;
@@ -127,15 +179,24 @@ export interface RouteModule<TDefault = unknown, THandler = unknown, THead = unk
127
179
  PUT?: THandler;
128
180
  }
129
181
 
182
+ export interface RoutePageProps<TParams extends RouteParams = RouteParams, TData = unknown> {
183
+ context?: WrenContext;
184
+ data?: Promise<TData>;
185
+ params?: TParams;
186
+ request?: Request;
187
+ }
188
+
189
+ export type RouteParams = Record<string, string>;
190
+
130
191
  /** A `__proxy` default export. Return a `Response` to short-circuit, or nothing to continue. */
131
- export type RouteProxy = (
132
- context: RouteProxyContext,
192
+ export type RouteProxy<TParams extends RouteParams = RouteParams> = (
193
+ context: RouteProxyContext<TParams>,
133
194
  next: RouteProxyNext,
134
195
  ) => Promise<Response | void> | Response | void;
135
196
 
136
- export interface RouteProxyContext {
197
+ export interface RouteProxyContext<TParams extends RouteParams = RouteParams> {
137
198
  context: WrenContext;
138
- params: Record<string, string>;
199
+ params: TParams;
139
200
  redirect: (location: string | URL, status?: RedirectStatus) => Response;
140
201
  request: Request;
141
202
  /** The page URL, without the Flight request suffix. */
@@ -143,7 +204,7 @@ export interface RouteProxyContext {
143
204
  }
144
205
 
145
206
  /** Runs the inner proxies and the route handler; may be called once. */
146
- export type RouteProxyNext = () => Promise<Response>;
207
+ export type RouteProxyNext = Wren.ProxyNext;
147
208
 
148
209
  export interface RouteStack<
149
210
  TModule extends RouteModule = RouteModule,
@@ -162,4 +223,8 @@ export type RouteStackModules = Pick<Required<RouteStack>, "layouts" | "module"
162
223
 
163
224
  export type WrenContext = Wren.Context;
164
225
 
226
+ type IntegrationHead = Wren.Integration extends { head: infer THead } ? THead : IntegrationNode;
227
+
228
+ type IntegrationNode = Wren.Integration extends { node: infer TNode } ? TNode : unknown;
229
+
165
230
  export type { fetch } from "virtual:wrenjs-fetch";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wren-js/core",
3
- "version": "0.12.0",
3
+ "version": "0.14.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.4"
63
+ "vite": "8.3.5"
64
64
  },
65
65
  "devDependencies": {
66
66
  "typescript": "7.0.2",
67
- "vite-plus": "1.3.0"
67
+ "vite-plus": "1.4.0"
68
68
  },
69
69
  "scripts": {
70
70
  "build": "vp pack",