@wren-js/core 0.11.0 → 0.13.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-BulKLrGR.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-DEZyjgyc.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:`
@@ -48,4 +48,4 @@ _e(t).href)})),a=n.environments.client;if(!a)throw Error(`Prerendering requires
48
48
  const manifest = deepFreeze(${i});
49
49
  export const { dynamicNotFounds, dynamicRoutes, staticNotFounds, staticRoutes } = manifest;
50
50
  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.adapter,...t.integrations??[]].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{};
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{};
package/dist/config.d.mts CHANGED
@@ -96,6 +96,10 @@ interface WrenIntegration {
96
96
  entry: string;
97
97
  environment: string;
98
98
  };
99
+ server?: {
100
+ entry: string;
101
+ environment: string;
102
+ };
99
103
  viteConfig(config: WrenConfig, env: ConfigEnv): Promise<UserConfig> | UserConfig;
100
104
  }
101
105
  //#endregion
@@ -1 +1 @@
1
- var e=`0.11.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.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};
@@ -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-BulKLrGR.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-DEZyjgyc.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,4 +1,4 @@
1
- import { n as RouteEntry, t as RadixTrie } from "../types-Dyl_dOT9.mjs";
1
+ import { n as RouteEntry, t as RadixTrie } from "../types-BMcFdUPW.mjs";
2
2
  //#region src/runtime/prerender/index.d.ts
3
3
  export declare const getPrerenderPaths: (manifest: {
4
4
  dynamicRoutes: RadixTrie<RouteEntry>;
@@ -1 +1 @@
1
- import"../constants-BulKLrGR.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-DEZyjgyc.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,5 @@
1
- import { i as RouteStack, r as RouteModule } from "../types-Dyl_dOT9.mjs";
1
+ import { a as WrenContext, i as RouteStack, r as RouteModule } from "../types-BMcFdUPW.mjs";
2
2
  //#region src/runtime/router/index.d.ts
3
- export declare function matchRouteToStack<T extends RouteStack = RouteStack>(path?: string): Promise<T | undefined> | T | undefined;
3
+ export declare function matchRouteToStack<T extends RouteStack = RouteStack>(path?: string, context?: WrenContext): Promise<T | undefined> | T | undefined;
4
4
  //#endregion
5
5
  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){let o=e(a);if(!o)return;let s=[],l=i?.[o]??c(n,o,s)??r?.[o]??c(t,o,s);if(!l)return;let u=Object.fromEntries(l.params?.map((e,t)=>[e,s[t]])??[]),d=({layouts:e,module:t,proxies:n})=>({kind:l.kind,layouts:e,module:t,params:u,proxies:n}),f=l.stack();return f instanceof Promise?f.then(d):d(f)}export{l as matchRouteToStack};
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};
@@ -9,7 +9,7 @@ declare module "virtual:wrenjs-fetch" {
9
9
  toRequest(): Request;
10
10
  url: string;
11
11
  };
12
- export const fetch: (request: RequestInput) => Promise<Response>;
12
+ export const fetch: (request: RequestInput, context?: Wren.Context) => Promise<Response>;
13
13
  }
14
14
  //#endregion
15
15
  //#region src/virtual-wrenjs-island-script.d.ts
@@ -49,6 +49,27 @@ declare module "virtual:wrenjs-routes" {
49
49
  }
50
50
  //#endregion
51
51
  //#region src/types.d.ts
52
+ declare global {
53
+ namespace Wren {
54
+ type ApiHandler<TParams extends RouteParams = RouteParams> = RouteApiHandler<TParams>;
55
+ type ApiParams<TParams extends RouteParams = RouteParams> = RouteApiParams<TParams>;
56
+ type Config = RouteConfig;
57
+ interface Context {}
58
+ type GetStaticPaths = () => Promise<string[]> | string[];
59
+ type Head<TParams extends RouteParams = RouteParams, TData = unknown> = RouteHead<IntegrationHead, TParams, TData>;
60
+ type HeadProps<TParams extends RouteParams = RouteParams, TData = unknown> = RouteHeadParams<TParams, TData>;
61
+ interface Integration {}
62
+ type Layout<TData = unknown> = RouteComponent<LayoutProps<TData>, IntegrationNode>;
63
+ type LayoutProps<TData = unknown> = RouteLayoutProps<IntegrationNode, TData>;
64
+ type Loader<TReturn = unknown, TParams extends RouteParams = RouteParams> = RouteLoader<TReturn, TParams>;
65
+ type LoaderProps<TParams extends RouteParams = RouteParams> = RouteLoaderParams<TParams>;
66
+ type Page<TParams extends RouteParams = RouteParams, TData = unknown> = RouteComponent<PageProps<TParams, TData>, IntegrationNode>;
67
+ type PageProps<TParams extends RouteParams = RouteParams, TData = unknown> = RoutePageProps<TParams, TData>;
68
+ type Proxy<TParams extends RouteParams = RouteParams> = RouteProxy<TParams>;
69
+ type ProxyContext<TParams extends RouteParams = RouteParams> = RouteProxyContext<TParams>;
70
+ type ProxyNext = () => Promise<Response>;
71
+ }
72
+ }
52
73
  interface Entry$1 {
53
74
  file: string;
54
75
  kind: EntryKind;
@@ -69,7 +90,14 @@ interface RadixTrie$1<Route = Entry$1> {
69
90
  w?: Route;
70
91
  }
71
92
  type RedirectStatus = 301 | 302 | 303 | 307 | 308;
93
+ type RouteApiHandler<TParams extends RouteParams = RouteParams> = (request: Request, route: RouteApiParams<TParams>) => Promise<Response> | Response;
94
+ interface RouteApiParams<TParams extends RouteParams = RouteParams> {
95
+ context: WrenContext;
96
+ params: TParams;
97
+ }
98
+ type RouteComponent<TProps, TNode> = (props: TProps) => Promise<TNode> | TNode;
72
99
  interface RouteConfig {
100
+ headers?: Readonly<Record<string, string>>;
73
101
  prerender?: boolean;
74
102
  }
75
103
  interface RouteEntry {
@@ -81,13 +109,20 @@ interface RouteEntry {
81
109
  proxies?: (() => Promise<RouteModule>)[];
82
110
  stack: () => Promise<RouteStackModules> | RouteStackModules;
83
111
  }
84
- type RouteHead<TElement = unknown> = ({ data, params, request }: RouteHeadParams) => Promise<TElement> | TElement;
85
- interface RouteHeadParams extends RouteLoaderParams {
86
- data?: ReturnType<RouteLoader>;
112
+ type RouteHead<TElement = unknown, TParams extends RouteParams = RouteParams, TData = unknown> = ({ data, params, request }: RouteHeadParams<TParams, TData>) => Promise<TElement> | TElement;
113
+ interface RouteHeadParams<TParams extends RouteParams = RouteParams, TData = unknown> extends RouteLoaderParams<TParams> {
114
+ data?: Promise<TData>;
115
+ }
116
+ interface RouteLayoutProps<TChildren = unknown, TData = unknown> {
117
+ children?: TChildren;
118
+ context?: WrenContext;
119
+ data?: Promise<TData>;
120
+ request?: Request;
87
121
  }
88
- type RouteLoader<TDefault = unknown> = ({ params, request }: RouteLoaderParams) => Promise<TDefault>;
89
- interface RouteLoaderParams {
90
- params?: Record<string, string>;
122
+ type RouteLoader<TReturn = unknown, TParams extends RouteParams = RouteParams> = ({ params, request }: RouteLoaderParams<TParams>) => Promise<TReturn>;
123
+ interface RouteLoaderParams<TParams extends RouteParams = RouteParams> {
124
+ context: WrenContext;
125
+ params?: TParams;
91
126
  request: Request;
92
127
  }
93
128
  interface RouteModule<TDefault = unknown, THandler = unknown, THead = unknown> {
@@ -95,7 +130,7 @@ interface RouteModule<TDefault = unknown, THandler = unknown, THead = unknown> {
95
130
  default: TDefault;
96
131
  DELETE?: THandler;
97
132
  GET?: THandler;
98
- getStaticPaths?: () => Promise<string[]> | string[];
133
+ getStaticPaths?: Wren.GetStaticPaths;
99
134
  HEAD?: THandler;
100
135
  head?: RouteHead<THead>;
101
136
  loader?: RouteLoader<TDefault>;
@@ -104,18 +139,27 @@ interface RouteModule<TDefault = unknown, THandler = unknown, THead = unknown> {
104
139
  POST?: THandler;
105
140
  PUT?: THandler;
106
141
  }
142
+ interface RoutePageProps<TParams extends RouteParams = RouteParams, TData = unknown> {
143
+ context?: WrenContext;
144
+ data?: Promise<TData>;
145
+ params?: TParams;
146
+ request?: Request;
147
+ }
148
+ type RouteParams = Record<string, string>;
107
149
  /** A `__proxy` default export. Return a `Response` to short-circuit, or nothing to continue. */
108
- type RouteProxy = (context: RouteProxyContext, next: RouteProxyNext) => Promise<Response | void> | Response | void;
109
- interface RouteProxyContext {
110
- params: Record<string, string>;
150
+ type RouteProxy<TParams extends RouteParams = RouteParams> = (context: RouteProxyContext<TParams>, next: RouteProxyNext) => Promise<Response | void> | Response | void;
151
+ interface RouteProxyContext<TParams extends RouteParams = RouteParams> {
152
+ context: WrenContext;
153
+ params: TParams;
111
154
  redirect: (location: string | URL, status?: RedirectStatus) => Response;
112
155
  request: Request;
113
156
  /** The page URL, without the Flight request suffix. */
114
157
  url: URL;
115
158
  }
116
159
  /** Runs the inner proxies and the route handler; may be called once. */
117
- type RouteProxyNext = () => Promise<Response>;
160
+ type RouteProxyNext = Wren.ProxyNext;
118
161
  interface RouteStack<TModule extends RouteModule = RouteModule, TLayout extends RouteModule = RouteModule, TProxy extends RouteModule = RouteModule<RouteProxy>> {
162
+ context: WrenContext;
119
163
  kind: "API" | "NOT_FOUND" | "PAGE";
120
164
  layouts?: TLayout[];
121
165
  module: TModule;
@@ -123,5 +167,12 @@ interface RouteStack<TModule extends RouteModule = RouteModule, TLayout extends
123
167
  proxies?: TProxy[];
124
168
  }
125
169
  type RouteStackModules = Pick<Required<RouteStack>, "layouts" | "module" | "proxies">;
170
+ type WrenContext = Wren.Context;
171
+ type IntegrationHead = Wren.Integration extends {
172
+ head: infer THead;
173
+ } ? THead : IntegrationNode;
174
+ type IntegrationNode = Wren.Integration extends {
175
+ node: infer TNode;
176
+ } ? TNode : unknown;
126
177
  //#endregion
127
- export { RouteStack as i, RouteEntry as n, RouteModule as r, RadixTrie$1 as t };
178
+ export { WrenContext as a, RouteStack as i, RouteEntry as n, RouteModule as r, RadixTrie$1 as t };
package/dist/types.d.ts CHANGED
@@ -6,6 +6,44 @@ import "./virtual-wrenjs-link-client.d.ts";
6
6
  import "./virtual-wrenjs-page-scripts.d.ts";
7
7
  import "./virtual-wrenjs-routes.d.ts";
8
8
 
9
+ declare global {
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;
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>;
44
+ }
45
+ }
46
+
9
47
  export interface Entry {
10
48
  file: string;
11
49
 
@@ -66,7 +104,20 @@ export interface RoutableEntry {
66
104
  routes: Entry[];
67
105
  }
68
106
 
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;
118
+
69
119
  export interface RouteConfig {
120
+ headers?: Readonly<Record<string, string>>;
70
121
  prerender?: boolean;
71
122
  }
72
123
 
@@ -81,23 +132,34 @@ export interface RouteEntry {
81
132
  stack: () => Promise<RouteStackModules> | RouteStackModules;
82
133
  }
83
134
 
84
- export type RouteHead<TElement = unknown> = ({
85
- data,
86
- params,
87
- request,
88
- }: 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
+ }
89
147
 
90
- export interface RouteHeadParams extends RouteLoaderParams {
91
- data?: ReturnType<RouteLoader>;
148
+ export interface RouteLayoutProps<TChildren = unknown, TData = unknown> {
149
+ children?: TChildren;
150
+ context?: WrenContext;
151
+ data?: Promise<TData>;
152
+ request?: Request;
92
153
  }
93
154
 
94
- export type RouteLoader<TDefault = unknown> = ({
155
+ export type RouteLoader<TReturn = unknown, TParams extends RouteParams = RouteParams> = ({
95
156
  params,
96
157
  request,
97
- }: RouteLoaderParams) => Promise<TDefault>;
158
+ }: RouteLoaderParams<TParams>) => Promise<TReturn>;
98
159
 
99
- export interface RouteLoaderParams {
100
- params?: Record<string, string>;
160
+ export interface RouteLoaderParams<TParams extends RouteParams = RouteParams> {
161
+ context: WrenContext;
162
+ params?: TParams;
101
163
  request: Request;
102
164
  }
103
165
 
@@ -107,7 +169,7 @@ export interface RouteModule<TDefault = unknown, THandler = unknown, THead = unk
107
169
  DELETE?: THandler;
108
170
  GET?: THandler;
109
171
 
110
- getStaticPaths?: () => Promise<string[]> | string[];
172
+ getStaticPaths?: Wren.GetStaticPaths;
111
173
  HEAD?: THandler;
112
174
  head?: RouteHead<THead>;
113
175
  loader?: RouteLoader<TDefault>;
@@ -117,14 +179,24 @@ export interface RouteModule<TDefault = unknown, THandler = unknown, THead = unk
117
179
  PUT?: THandler;
118
180
  }
119
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
+
120
191
  /** A `__proxy` default export. Return a `Response` to short-circuit, or nothing to continue. */
121
- export type RouteProxy = (
122
- context: RouteProxyContext,
192
+ export type RouteProxy<TParams extends RouteParams = RouteParams> = (
193
+ context: RouteProxyContext<TParams>,
123
194
  next: RouteProxyNext,
124
195
  ) => Promise<Response | void> | Response | void;
125
196
 
126
- export interface RouteProxyContext {
127
- params: Record<string, string>;
197
+ export interface RouteProxyContext<TParams extends RouteParams = RouteParams> {
198
+ context: WrenContext;
199
+ params: TParams;
128
200
  redirect: (location: string | URL, status?: RedirectStatus) => Response;
129
201
  request: Request;
130
202
  /** The page URL, without the Flight request suffix. */
@@ -132,13 +204,14 @@ export interface RouteProxyContext {
132
204
  }
133
205
 
134
206
  /** Runs the inner proxies and the route handler; may be called once. */
135
- export type RouteProxyNext = () => Promise<Response>;
207
+ export type RouteProxyNext = Wren.ProxyNext;
136
208
 
137
209
  export interface RouteStack<
138
210
  TModule extends RouteModule = RouteModule,
139
211
  TLayout extends RouteModule = RouteModule,
140
212
  TProxy extends RouteModule = RouteModule<RouteProxy>,
141
213
  > {
214
+ context: WrenContext;
142
215
  kind: "API" | "NOT_FOUND" | "PAGE";
143
216
  layouts?: TLayout[];
144
217
  module: TModule;
@@ -148,4 +221,10 @@ export interface RouteStack<
148
221
 
149
222
  export type RouteStackModules = Pick<Required<RouteStack>, "layouts" | "module" | "proxies">;
150
223
 
224
+ export type WrenContext = Wren.Context;
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
+
151
230
  export type { fetch } from "virtual:wrenjs-fetch";
@@ -8,5 +8,5 @@ declare module "virtual:wrenjs-fetch" {
8
8
  url: string;
9
9
  };
10
10
 
11
- export const fetch: (request: RequestInput) => Promise<Response>;
11
+ export const fetch: (request: RequestInput, context?: Wren.Context) => Promise<Response>;
12
12
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wren-js/core",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "description": "Framework agnostic utilities for the wrenjs meta-framework",
5
5
  "keywords": [
6
6
  "@wren-js/core",