@route-forge/core 1.4.0 → 2.0.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/README.md +10 -6
- package/dist/codegen.d.cts +1 -1
- package/dist/codegen.d.ts +1 -1
- package/dist/index.cjs +137 -112
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -5
- package/dist/index.d.ts +16 -5
- package/dist/index.js +137 -112
- package/dist/index.js.map +1 -1
- package/dist/route-forge.global.js +137 -112
- package/dist/route-forge.global.js.map +1 -1
- package/dist/route-forge.global.min.js +2 -2
- package/dist/{types-BFlrOTrN.d.cts → types-BvLdl02f.d.cts} +6 -17
- package/dist/{types-BFlrOTrN.d.ts → types-BvLdl02f.d.ts} +6 -17
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var RouteForge=(function(exports){'use strict';var Fe="route-forge:";function Ue(o){return o==="memory"||typeof globalThis>"u"?null:o==="sessionStorage"?globalThis.sessionStorage??null:o==="localStorage"?globalThis.localStorage??null:null}var z=class{constructor(t){this.memory=new Map;this.storage=t.storage,this.fallbackTtl=t.ttl,this.backend=Ue(t.storage);}key(t){return `${Fe}${t}`}get(t){if(this.storage==="memory"||!this.backend)return this.getFromMemory(t);let n=this.backend.getItem(this.key(t));if(n)try{let r=JSON.parse(n);if(this.isExpired(r)){this.del(t);return}return r}catch{return}return this.getFromMemory(t)}getFromMemory(t){let n=this.memory.get(t);if(n){if(this.isExpired(n)){this.memory.delete(t);return}return n}}set(t){let n;t.cache!==void 0&&t.cache!==null?n=t.cache>0?Math.min(t.cache,this.fallbackTtl):t.cache:n=this.fallbackTtl;let r={level:t.level,routes:t.routes,ttl:n,cachedAt:Date.now()};if(this.storage==="memory"||!this.backend){this.memory.set(t.level,r);return}try{this.backend.setItem(this.key(t.level),JSON.stringify(r));}catch{this.memory.set(t.level,r);}}del(t){if(this.memory.delete(t),this.backend)try{this.backend.removeItem(this.key(t));}catch{}}clear(){if(this.memory.clear(),this.backend)try{let t=[];for(let n=0;n<this.backend.length;n++){let r=this.backend.key(n);r&&r.startsWith(Fe)&&t.push(r);}for(let n of t)this.backend.removeItem(n);}catch{}}isExpired(t){return t.ttl===null||t.ttl===0?false:Date.now()-t.cachedAt>t.ttl*1e3}};var w=class extends Error{constructor(t,n){super(t),this.name=this.constructor.name,this.code=n.code,n.route!==void 0&&(this.route=n.route),n.level!==void 0&&(this.level=n.level),n.context!==void 0&&(this.context=n.context),n.cause!==void 0&&(this.cause=n.cause);}},A=class extends w{constructor(t,n){super(`Route "${t}" not found${n?` in level "${n}"`:""}`,{code:"RF_FE_001",route:t,level:n});}},J=class extends w{constructor(t){super(`Level "${t}" not declared in options.levels`,{code:"RF_FE_002",level:t});}},V=class extends w{constructor(t,n){super(`Missing path parameter(s) ${n.join(", ")} for route "${t}"`,{code:"RF_FE_003",route:t,context:{missingParams:n}});}},j=class extends w{constructor(t){super(`Adapter "${t}" not available; install axios or use 'builtin'`,{code:"RF_FE_005",context:{adapter:t}});}},Q=class extends w{constructor(t){super("Request interceptor must return a RequestConfig object",{code:"RF_FE_006",route:t});}},D=class extends w{constructor(t,n,r,d){super(t,{code:"RF_FE_007",route:n,level:r,cause:d});}},L=class extends w{constructor(t,n){super(t,{code:"RF_FE_008",route:n.route,level:n.level,context:{status:n.status,url:n.url,method:n.method},cause:n.cause});}},_=class extends w{constructor(t,n,r){super(`Request aborted${t?` for route "${t}"`:""}`,{code:"RF_FE_009",route:t,level:n,cause:r});}};var O=class{constructor(){this.handlers=[];this.nextId=0;}use(t,n){let r=this.nextId++;return this.handlers.push({id:r,onFulfilled:t,onRejected:n}),r}eject(t){let n=this.handlers.findIndex(r=>r.id===t);n>=0&&this.handlers.splice(n,1);}clear(){this.handlers=[];}forEach(t){for(let n of this.handlers)t(n);}get size(){return this.handlers.length}};async function te(o,t){let n=[];o.forEach(d=>n.push(d)),n.reverse();let r=Promise.resolve(t);for(let d of n){let f=d.onFulfilled,R=d.onRejected;r=r.then(async g=>{if(!f)return g;let q=await f(g);if(q===null||typeof q!="object")throw new Q;return q},g=>R?R(g):Promise.reject(g));}return r}async function ne(o,t){let n=[];o.forEach(d=>n.push(d));let r=t;for(let d of n){let f=d.onFulfilled,R=d.onRejected;r=r.then(g=>f?f(g):g,g=>R?R(g):Promise.reject(g));}return r}function re(){return new O}function Be(o){return o===null?false:typeof FormData<"u"&&o instanceof FormData||typeof URLSearchParams<"u"&&o instanceof URLSearchParams||typeof Blob<"u"&&o instanceof Blob||typeof ArrayBuffer<"u"&&(o instanceof ArrayBuffer||ArrayBuffer.isView(o))||typeof ReadableStream<"u"&&o instanceof ReadableStream}function He(o){let t=o;return !!t&&t.name==="AbortError"}function Ne(...o){let t=o.filter(r=>!!r);if(t.length===0)return;if(t.length===1)return t[0];if(typeof AbortSignal<"u"&&typeof AbortSignal.any=="function")return AbortSignal.any(t);let n=new AbortController;for(let r of t){if(r.aborted)return n.abort(r.reason),n.signal;r.addEventListener("abort",()=>n.abort(r.reason),{once:true});}return n.signal}function le(o){let t=o?.request??re(),n=o?.response??re();async function r(a){let h=Ne(a.signal,a.timeout&&a.timeout>0?AbortSignal.timeout(a.timeout):void 0),y=a.url;if(a.paramsSerializer&&a.params){let C=a.paramsSerializer(a.params);C&&(y=y.includes("?")?`${y}&${C}`:`${y}?${C}`);}let x=new Headers(a.headers),E={method:a.method,headers:x};h&&(E.signal=h),a.body!==void 0&&!["GET","HEAD"].includes(a.method.toUpperCase())&&(typeof a.body=="string"||Be(a.body)?E.body=a.body:(E.body=JSON.stringify(a.body),x.has("Content-Type")||x.set("Content-Type","application/json")));let v;try{v=await fetch(y,E);}catch(C){throw He(C)?C:new D(C instanceof Error?C.message:String(C),a.route,a.level,C)}let se=await v.text(),M=se;if((v.headers.get("content-type")??"").includes("application/json"))try{M=JSON.parse(se);}catch{}let Y={route:a.route,level:a.level,method:a.method,url:y,status:v.status,headers:v.headers,data:M,config:a};if(v.status>=200&&v.status<300)return Y;throw new L(`HTTP ${v.status} for route "${a.route}" (${a.method} ${y})`,{route:a.route,level:a.level,status:v.status,url:y,method:a.method})}async function d(a){let h=await te(t,a),y=Promise.resolve(h).then(r);return ne(n,y)}return {request:d,requestRaw:r,interceptors:{request:t,response:n},runsInterceptors:true,get:(a,h)=>d({...h,url:a,method:"GET"}),post:(a,h)=>d({...h,url:a,method:"POST"}),put:(a,h)=>d({...h,url:a,method:"PUT"}),patch:(a,h)=>d({...h,url:a,method:"PATCH"}),delete:(a,h)=>d({...h,url:a,method:"DELETE"})}}function xe(o){if(!o)return new Headers;let t=typeof o.toJSON=="function"?o.toJSON():o;try{return new Headers(t)}catch{return new Headers}}async function fe(){let o,t="axios";try{let r=await import(t);o=r.default??r;}catch{typeof globalThis<"u"&&globalThis.axios&&(o=globalThis.axios);}if(!o||typeof o.request!="function")return null;async function n(r){let d={...r.headers};try{let f=await o.request({url:r.url,method:r.method,headers:d,data:r.body,timeout:r.timeout,signal:r.signal});return {route:r.route,level:r.level,method:r.method,url:r.url,status:f.status,headers:xe(f.headers),data:f.data,config:r}}catch(f){if(f&&f.response){let R=f.response;return {route:r.route,level:r.level,method:r.method,url:r.url,status:R.status,headers:xe(R.headers),data:R.data,config:r}}throw f}}return {request:n,interceptors:void 0}}async function ge(o){let{adapter:t}=o;if(t&&typeof t=="object")return {request:r=>t.request(r),interceptors:t.interceptors};if(t==="builtin")return le(o.forgeInterceptors);if(t==="axios"){let r=await fe();if(!r)throw new j("axios");return r}let n=await fe().catch(()=>null);return n||le(o.forgeInterceptors)}async function pe(o,t,n,r,d="."){if(!r)return n;let f=`${n}${d}${r}`;if(!r.startsWith(`${n}${d}`)||(await o.load(t),o.hasRoute(t,f)))return f;if(o.hasRoute(t,r))return r;throw new A(f,t)}function oe(o,t,n,r,d="."){if(!r)return n;let f=`${n}${d}${r}`;if(!r.startsWith(`${n}${d}`)||o.hasRoute(t,f))return f;if(o.hasRoute(t,r))return r;throw new A(f,t)}function Ee(o,t){for(let n of Object.keys(t)){let r=t[n];Object.defineProperty(o,n,{value:r!==null&&typeof r=="object"?Object.freeze(r):r,writable:false,enumerable:false,configurable:false});}return o}var Z=class{constructor(){this.count=0;this.subscribers=new Set;}start(){this.count++,this.notify();}stop(){this.count=Math.max(0,this.count-1),this.notify();}isLoading(){return this.count>0}getCount(){return this.count}subscribe(t){return this.subscribers.add(t),()=>{this.subscribers.delete(t);}}notify(){let t={loading:this.count>0,count:this.count};for(let n of this.subscribers)try{n(t);}catch{}}};var We=3e4,Je=3600,K="unassigned";function Ge(o){if(!o.endpoint)throw new TypeError("options.endpoint is required");let{adapter:t="auto",timeout:n=We,baseURL:r="",interceptors:d,cache:f={}}=o,R=new Z,g=o.levels,q=o.eager,I=o.endpoint,a=g??[],h=q??[],y=I,x="",E,v=false,M=(async()=>{try{let e=I,s=await fetch(e,{method:"GET"});return s.ok?await s.json():(console.warn(`[route-forge] summary endpoint ${e} unreachable (HTTP ${s.status}); falling back to explicit options`),null)}catch(e){if(g&&g.length>0)return console.warn(`[route-forge] summary endpoint unreachable: ${e.message}; using explicit levels`),null;throw new J("(auto-discovery)")}})().then(e=>{if(e===null)return;let s=e.schemaVersion??1;s>1&&console.warn(`[route-forge] backend schemaVersion=${s} > client supported 1; some features may be unavailable`),e.config.endpoint_prefix&&e.config.endpoint_prefix!==I&&(console.warn(`[route-forge] backend endpoint_prefix "${e.config.endpoint_prefix}" overrides frontend endpoint "${I}"`),y=e.config.endpoint_prefix),e.config.url_prefix&&(x=e.config.url_prefix.endsWith("/")?e.config.url_prefix.slice(0,-1):e.config.url_prefix);let i=Object.keys(e.levels);v=i.includes(K),Array.isArray(e.unassigned)&&e.unassigned.length>0&&!v&&(E=e.unassigned);let u=i.slice();if(E&&!v&&u.push(K),g&&g.length>0){let c=g.filter(k=>u.includes(k)),p=g.filter(k=>!u.includes(k));p.length>0&&console.warn(`[route-forge] levels not in backend summary and dropped: ${p.join(", ")}`),a=c;}else a=u;let l=i.filter(c=>e.levels[c]?.load==="eager");q?h=[...new Set([...l,...q])]:h=l;}),X=null;M.catch(e=>{X=e;});let Y=false,C,he=new Promise(e=>{C=e;}),Ae=f.ttl??Je,Ie=f.storage??"memory",F=new z({storage:Ie,ttl:Ae}),U=new O,B=new O;if(d?.request)for(let e of d.request)if(typeof e=="function")U.use(e);else {let[s,i]=e;U.use(s,i);}if(d?.response)for(let e of d.response)if(typeof e=="function")B.use(e);else {let[s,i]=e;B.use(s,i);}let Te=ge({adapter:t,forgeInterceptors:{request:U,response:B}}),me=false,Re=null;async function ye(){return me||(Re=await Te.catch(e=>{if(e instanceof j)throw e;return ge({adapter:"builtin",forgeInterceptors:{request:U,response:B}})}),me=true),Re}let H=new Map,T=new Map;function $e(e){if(!a.includes(e))throw new J(e)}function be(){if(!Y&&!g?.length)throw new w("Route data not available. Auto-discovery has not completed. Use forge.ready() or forge.use(level) first.",{code:"RF_FE_010"})}function ae(e){let s=r.endsWith("/")?r.slice(0,-1):r,i=y.startsWith("/")?y:`/${y}`;return `${s}${i}/${encodeURIComponent(e)}`}async function Se(e){let s=await ye(),i={route:`__forge__.load.${e}`,level:e,method:"GET",url:ae(e),headers:{Accept:"application/json"},params:{},timeout:n,meta:{name:`__forge__.load.${e}`,uri:ae(e),methods:["GET"],parameters:[],level:e}},l=await(s.requestRaw??s.request)(i);if(!l||l.status<200||l.status>=300)throw new L(`Failed to load level "${e}": HTTP ${l?.status}`,{level:e,status:l?.status,url:ae(e),method:"GET"});return l.data}async function Le(e){if(X)throw X;if($e(e),F.get(e))return;let s=H.get(e);if(s)return s;let i=T.get(e)??0,u=(async()=>{try{if(e===K&&!v&&E){let c={};for(let p of E)c[p.name]={...p,level:K};F.set({level:K,routes:c,cache:null});return}let l=await Se(e);(T.get(e)??0)===i&&F.set(l);}finally{H.delete(e);}})();return H.set(e,u),u}async function N(e){await M;let s=Array.isArray(e)?e:[e];await Promise.all(s.map(Le));}function W(e,s,i){be();let u=ie(e,s);if(!u)throw new A(s,e);return we(u,i??{})}function we(e,s){let i=e.parameter_defaults??{},u=[],l={};for(let b of e.parameters){let P=s[b];P==null&&b in i&&(P=i[b]),P==null?e.uri.includes(`{${b}?}`)||u.push(b):l[b]=P;}if(u.length>0)throw new V(e.name,u);let c=e.uri.replace(/\{([^{}]+)\}/g,(b,P)=>{let G=P.endsWith("?"),$=G?P.slice(0,-1):P;if(l[$]!==void 0){let S=l[$];if(typeof S=="object")throw new w(`Path parameter "${$}" must be a primitive value (string, number, boolean), got ${typeof S}`,{code:"RF_FE_003",route:e.name,context:{param:$,value:S}});return encodeURIComponent(String(S))}return G?"":b});if(c=c.replace(/\/+/g,"/").replace(/\/$/,""),/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(x)){let b=x.endsWith("/")?x.slice(0,-1):x;return c.startsWith("/")?`${b}${c}`:`${b}/${c}`}let p=r.endsWith("/")?r.slice(0,-1):r,k=x;return c.startsWith("/")?`${p}${k}${c}`:`${p}${k}/${c}`}function ie(e,s){let u=F.get(e)?.routes[s];if(u)return {...u,level:e}}function ue(e,s,i={}){let u,l=false,c,k=(async()=>{u=new AbortController,l&&u.abort(c),await M,await N(e);let b=ie(e,s);if(!b)throw new A(s,e);return Me(b,i,u.signal)})();return k.abort=()=>{u?u.abort():l=true;},k}async function Me(e,s,i){let{pathParams:u,query:l,body:c,headers:p,timeout:k}=Qe(s);if(i?.aborted)throw new _(e.name,e.level,i.reason);let b=ze(e),P=Ve(we(e,u),l),G={route:e.name,level:e.level??"",method:b,url:P,headers:{Accept:"application/json",...p??{}},body:c,params:u,timeout:k??n,signal:i,meta:e},$=await ye(),S=$.runsInterceptors?G:await te(U,G);if(S.signal?.aborted)throw new _(e.name,e.level,S.signal.reason);R.start();try{let qe=$.request(S).then(m=>{if(m.status<200||m.status>=300)throw new L(`HTTP ${m.status} for route "${m.route}" (${m.method} ${m.url})`,{route:m.route,level:m.level,status:m.status,url:m.url,method:m.method});return m},m=>{throw m instanceof w?m:Ze(m,i)?new _(e.name,e.level,m):new D(m instanceof Error?m.message:String(m),e.name,e.level,m)});return $.runsInterceptors?await qe:await ne(B,qe)}finally{R.stop();}}function ve(e){if(e===void 0){F.clear(),H.clear();for(let s of a)T.set(s,(T.get(s)??0)+1);}else if(Array.isArray(e))for(let s of e)F.del(s),H.delete(s),T.set(s,(T.get(s)??0)+1);else F.del(e),H.delete(e),T.set(e,(T.get(e)??0)+1);}function Ce(e){return e?F.get(e)!==void 0:a.length>0&&a.every(s=>F.get(s)!==void 0)}function ce(e,s){return be(),ie(e,s)!==void 0}function ke(e){if(e!==void 0){let u=F.get(e)?.routes??{},l={};for(let[c,p]of Object.entries(u))l[c]=JSON.parse(JSON.stringify(p));return l}let s={};for(let i of a){let u=F.get(i);if(u){let l={};for(let[c,p]of Object.entries(u.routes))l[c]=JSON.parse(JSON.stringify(p));s[i]=l;}}return s}M.then(()=>{if(Y=true,o.onSummaryReady?.(),h.length>0)return Promise.all(h.map(e=>N(e))).catch(e=>{console.warn(`[route-forge] eager load failed: ${e.message}`);})}).then(()=>{C(ee);}).catch(()=>{});function je(e,s){return e?he.then(e,s).then(()=>ee):he}let de={load:N,hasRoute:ce};function De(e,s){let i=N(e);i.catch(()=>{});let u=s?(c,p)=>pe(de,e,s,c).then(k=>ue(e,k,p)):(c,p)=>ue(e,c,p),l=u;return Ee(l,{level:e,...s!==void 0?{prefix:s}:{},api:u,route:s?(c,p)=>W(e,oe(de,e,s,c),p):(c,p)=>W(e,c,p),url:s?(c,p)=>W(e,oe(de,e,s,c),p):(c,p)=>W(e,c,p),hasRoute:c=>ce(e,c),getRoutes:()=>ke(e),load:()=>N(e),invalidate:()=>ve(e),isLoaded:()=>Ce(e),isLoading:()=>R.isLoading(),onLoadingChange:c=>R.subscribe(c)}),Object.defineProperty(l,"levelLoaded",{value:i,writable:false,enumerable:true,configurable:true}),l}function _e(e,s,i,u){let l=s.then(()=>e);return i?l.then(i,u).then(()=>e):l}function Oe(e,s,i){Object.defineProperty(e,"onLevelLoaded",{value:(u,l)=>_e(e,s,u,l),writable:false,enumerable:false,configurable:false}),Object.defineProperty(e,"useRoutePrefix",{value:u=>Pe(i,u),writable:false,enumerable:false,configurable:false});}function Pe(e,s){let i=De(e,s),u=i.levelLoaded;return Oe(i,u,e),i}let ee={api:ue,load:N,route:W,url:W,invalidate:ve,isLoaded:Ce,hasRoute:ce,getRoutes:ke,isLoading:()=>R.isLoading(),onLoadingChange:e=>R.subscribe(e),interceptors:{request:U,response:B},ready:je,use(e,s){return e===void 0?ee:Pe(e,s)}};return ee}function ze(o){return (o.methods.find(n=>n.toUpperCase()!=="HEAD")??o.methods[0]??"GET").toUpperCase()}function Ve(o,t){if(!t)return o;let n=new URLSearchParams;for(let[d,f]of Object.entries(t))f!=null&&n.append(d,String(f));let r=n.toString();return r?o.includes("?")?`${o}&${r}`:`${o}?${r}`:o}function Qe(o){let{params:t,query:n,body:r,headers:d,timeout:f,...R}=o,g=t?{...t}:{};for(let[h,y]of Object.entries(R))h in g||(g[h]=y);let q,I,a;return n!==void 0&&(typeof n=="object"&&n!==null?q=n:"query"in g||(g.query=n)),r!==void 0&&(typeof r!="string"&&typeof r!="number"?I=r:"body"in g||(g.body=r)),d!==void 0&&(typeof d=="object"&&d!==null?a=d:"headers"in g||(g.headers=d)),{pathParams:g,query:q,body:I,headers:a,timeout:f}}function Ze(o,t){if(t?.aborted)return true;let n=o;return n?n.name==="AbortError"||n.code==="ERR_CANCELED":false}
|
|
2
|
-
exports.AdapterNotFoundError=
|
|
1
|
+
var RouteForge=(function(exports){'use strict';var X="route-forge:";function Ge(r){return r==="memory"||typeof globalThis>"u"?null:r==="sessionStorage"?globalThis.sessionStorage??null:r==="localStorage"?globalThis.localStorage??null:null}var N=class{constructor(t){this.memory=new Map;this.onStorageEvent=t=>{t.key&&t.key.startsWith(X)&&this.memory.delete(t.key.slice(X.length));};this.storage=t.storage,this.fallbackTtl=t.ttl,this.backend=Ge(t.storage),this.backend&&typeof globalThis.addEventListener=="function"&&globalThis.addEventListener("storage",this.onStorageEvent);}key(t){return `${X}${t}`}get(t){if(this.storage==="memory"||!this.backend)return this.getFromMemory(t);let n=this.getFromMemory(t);if(n)return n;let o=this.backend.getItem(this.key(t));if(o)try{let i=JSON.parse(o);if(this.isExpired(i)){this.del(t);return}return this.memory.set(t,i),i}catch{return}}getFromMemory(t){let n=this.memory.get(t);if(n){if(this.isExpired(n)){this.memory.delete(t);return}return n}}set(t){let n;t.cache!==void 0&&t.cache!==null?n=t.cache>0?Math.min(t.cache,this.fallbackTtl):t.cache:n=this.fallbackTtl;let o={level:t.level,routes:t.routes,ttl:n,cachedAt:Date.now()};if(this.memory.set(t.level,o),!(this.storage==="memory"||!this.backend))try{this.backend.setItem(this.key(t.level),JSON.stringify(o));}catch{}}del(t){if(this.memory.delete(t),this.backend)try{this.backend.removeItem(this.key(t));}catch{}}clear(){if(this.memory.clear(),this.backend)try{let t=[];for(let n=0;n<this.backend.length;n++){let o=this.backend.key(n);o&&o.startsWith(X)&&t.push(o);}for(let n of t)this.backend.removeItem(n);}catch{}}isExpired(t){return t.ttl===null||t.ttl===0?false:Date.now()-t.cachedAt>t.ttl*1e3}};var b=class extends Error{constructor(t,n){super(t),this.name=this.constructor.name,this.code=n.code,n.route!==void 0&&(this.route=n.route),n.level!==void 0&&(this.level=n.level),n.context!==void 0&&(this.context=n.context),n.cause!==void 0&&(this.cause=n.cause);}},P=class extends b{constructor(t,n){super(`Route "${t}" not found${n?` in level "${n}"`:""}`,{code:"RF_FE_001",route:t,level:n});}},B=class extends b{constructor(t){super(`Level "${t}" not declared in options.levels`,{code:"RF_FE_002",level:t});}},W=class extends b{constructor(t,n){super(`Missing path parameter(s) ${n.join(", ")} for route "${t}"`,{code:"RF_FE_003",route:t,context:{missingParams:n}});}},T=class extends b{constructor(t){super(`Adapter "${t}" not available; install axios or use 'builtin'`,{code:"RF_FE_005",context:{adapter:t}});}},J=class extends b{constructor(t){super("Request interceptor must return a RequestConfig object",{code:"RF_FE_006",route:t});}},S=class extends b{constructor(t,n,o,i){super(t,{code:"RF_FE_007",route:n,level:o,cause:i});}},I=class extends b{constructor(t,n){super(t,{code:"RF_FE_008",route:n.route,level:n.level,context:{status:n.status,url:n.url,method:n.method},cause:n.cause});}},$=class extends b{constructor(t,n,o){super(`Request aborted${t?` for route "${t}"`:""}`,{code:"RF_FE_009",route:t,level:n,cause:o});}};var _=class{constructor(){this.handlers=[];this.nextId=0;}use(t,n){let o=this.nextId++;return this.handlers.push({id:o,onFulfilled:t,onRejected:n}),o}eject(t){let n=this.handlers.findIndex(o=>o.id===t);n>=0&&this.handlers.splice(n,1);}clear(){this.handlers=[];}forEach(t){for(let n of this.handlers)t(n);}get size(){return this.handlers.length}};async function Y(r,t){let n=[];r.forEach(i=>n.push(i)),n.reverse();let o=Promise.resolve(t);for(let i of n){let c=i.onFulfilled,h=i.onRejected;o=o.then(async l=>{if(!c)return l;let v=await c(l);if(v===null||typeof v!="object")throw new J;return v},l=>h?h(l):Promise.reject(l));}return o}async function ee(r,t){let n=[];r.forEach(i=>n.push(i));let o=t;for(let i of n){let c=i.onFulfilled,h=i.onRejected;o=o.then(l=>c?c(l):l,l=>h?h(l):Promise.reject(l));}return o}function te(){return new _}function de(r,t){if(t?.aborted)return true;let n=r;return n?n.name==="AbortError"||n.code==="ERR_CANCELED":false}function ze(...r){let t=r.filter(o=>!!o);if(t.length===0)return;if(t.length===1)return t[0];if(typeof AbortSignal<"u"&&typeof AbortSignal.any=="function")return AbortSignal.any(t);let n=new AbortController;for(let o of t){if(o.aborted)return n.abort(o.reason),n.signal;o.addEventListener("abort",()=>n.abort(o.reason),{once:true});}return n.signal}function Ve(r){return r===null?false:typeof FormData<"u"&&r instanceof FormData||typeof URLSearchParams<"u"&&r instanceof URLSearchParams||typeof Blob<"u"&&r instanceof Blob||typeof ArrayBuffer<"u"&&(r instanceof ArrayBuffer||ArrayBuffer.isView(r))||typeof ReadableStream<"u"&&r instanceof ReadableStream}async function Ie(r){let t=ze(r.signal,r.timeout&&r.timeout>0?AbortSignal.timeout(r.timeout):void 0),n=r.url;if(r.paramsSerializer&&r.params){let g=r.paramsSerializer(r.params);g&&(n=n.includes("?")?`${n}&${g}`:`${n}?${g}`);}let o=new Headers(r.headers),i={method:r.method,headers:o};t&&(i.signal=t),r.body!==void 0&&!["GET","HEAD"].includes(r.method.toUpperCase())&&(typeof r.body=="string"||Ve(r.body)?i.body=r.body:(i.body=JSON.stringify(r.body),o.has("Content-Type")||o.set("Content-Type","application/json")));let c;try{c=await fetch(n,i);}catch(g){throw de(g)?g:new S(g instanceof Error?g.message:String(g),r.route,r.level,g)}let h=await c.text(),l=h;if((c.headers.get("content-type")??"").includes("application/json"))try{l=JSON.parse(h);}catch{}let C={route:r.route,level:r.level,method:r.method,url:n,status:c.status,headers:c.headers,data:l,config:r};if(c.status>=200&&c.status<300)return C;throw new I(`HTTP ${c.status} for route "${r.route}" (${r.method} ${n})`,{route:r.route,level:r.level,status:c.status,url:n,method:r.method})}function le(r){let t=r?.request??te(),n=r?.response??te(),o=Ie;async function i(g){let R=await Y(t,g),E=Promise.resolve(R).then(o);return ee(n,E)}return {request:i,requestRaw:o,interceptors:{request:t,response:n},runsInterceptors:true,get:(g,R)=>i({...R,url:g,method:"GET"}),post:(g,R)=>i({...R,url:g,method:"POST"}),put:(g,R)=>i({...R,url:g,method:"PUT"}),patch:(g,R)=>i({...R,url:g,method:"PATCH"}),delete:(g,R)=>i({...R,url:g,method:"DELETE"})}}function Te(r){if(!r)return new Headers;let t=typeof r.toJSON=="function"?r.toJSON():r;try{return new Headers(t)}catch{return new Headers}}async function fe(){let r,t="axios";try{let o=await import(t);r=o.default??o;}catch{typeof globalThis<"u"&&globalThis.axios&&(r=globalThis.axios);}if(!r||typeof r.request!="function")return null;async function n(o){let i={...o.headers};try{let c=await r.request({url:o.url,method:o.method,headers:i,data:o.body,timeout:o.timeout,signal:o.signal});return {route:o.route,level:o.level,method:o.method,url:o.url,status:c.status,headers:Te(c.headers),data:c.data,config:o}}catch(c){if(c&&c.response){let h=c.response;return {route:o.route,level:o.level,method:o.method,url:o.url,status:h.status,headers:Te(h.headers),data:h.data,config:o}}throw c}}return {request:n,interceptors:void 0}}async function ge(r){let{adapter:t}=r;if(t&&typeof t=="object")return {request:o=>t.request(o),interceptors:t.interceptors};if(t==="builtin")return le(r.forgeInterceptors);if(t==="axios"){let o=await fe();if(!o)throw new T("axios");return o}let n=await fe().catch(()=>null);return n||le(r.forgeInterceptors)}async function pe(r,t,n,o,i="."){if(!o)return n;let c=`${n}${i}${o}`;if(!o.startsWith(`${n}${i}`)||(await r.load(t),r.hasRoute(t,c)))return c;if(r.hasRoute(t,o))return o;throw new P(c,t)}function ne(r,t,n,o,i="."){if(!o)return n;let c=`${n}${i}${o}`;if(!o.startsWith(`${n}${i}`)||r.hasRoute(t,c))return c;if(r.hasRoute(t,o))return o;throw new P(c,t)}function Se(r,t){for(let n of Object.keys(t)){let o=t[n];Object.defineProperty(r,n,{value:o!==null&&typeof o=="object"?Object.freeze(o):o,writable:false,enumerable:false,configurable:false});}return r}var G=class{constructor(){this.count=0;this.subscribers=new Set;}start(){this.count++,this.notify();}stop(){this.count=Math.max(0,this.count-1),this.notify();}isLoading(){return this.count>0}getCount(){return this.count}subscribe(t){return this.subscribers.add(t),()=>{this.subscribers.delete(t);}}notify(){let t={loading:this.count>0,count:this.count};for(let n of this.subscribers)try{n(t);}catch{}}};var Qe=3e4,Ze=3600,z="unassigned";function Ke(r){if(!r.endpoint)throw new TypeError("options.endpoint is required");let{adapter:t="auto",timeout:n=Qe,baseURL:o="",interceptors:i,cache:c={}}=r,h=new G,l=r.levels,v=r.eager,C=r.endpoint,g=l??[],R=v??[],E=C,L="",V,Q=false,$e=async()=>{try{let e=o.endsWith("/")?o.slice(0,-1):o,s=C.startsWith("/")?C:`/${C}`;return await Fe("__forge__.summary",`${e}${s}`)}catch(e){if(l&&l.length>0)return console.warn(`[route-forge] summary endpoint unreachable: ${e.message}; using explicit levels`),null;throw new B("(auto-discovery)")}},re,he=[],Z=(re??new Promise(e=>he.push(e))).then(e=>{if(e===null)return;let s=e.schemaVersion??1;s>1&&console.warn(`[route-forge] backend schemaVersion=${s} > client supported 1; some features may be unavailable`),e.config.endpoint_prefix&&e.config.endpoint_prefix!==C&&(console.warn(`[route-forge] backend endpoint_prefix "${e.config.endpoint_prefix}" overrides frontend endpoint "${C}"`),E=e.config.endpoint_prefix),e.config.url_prefix&&(L=e.config.url_prefix.endsWith("/")?e.config.url_prefix.slice(0,-1):e.config.url_prefix);let a=Object.keys(e.levels);Q=a.includes(z),Array.isArray(e.unassigned)&&e.unassigned.length>0&&!Q&&(V=e.unassigned);let u=a.slice();if(V&&!Q&&u.push(z),l&&l.length>0){let d=l.filter(w=>u.includes(w)),f=l.filter(w=>!u.includes(w));f.length>0&&console.warn(`[route-forge] levels not in backend summary and dropped: ${f.join(", ")}`),g=d;}else g=u;let p=a.filter(d=>e.levels[d]?.load==="eager");v?R=[...new Set([...p,...v])]:R=p;}),oe=null;Z.catch(e=>{oe=e;});let me=false,Re,ye,se=new Promise((e,s)=>{Re=e,ye=s;});se.catch(()=>{});let _e=c.ttl??Ze,Le=c.storage??"memory",k=new N({storage:Le,ttl:_e}),M=new _,j=new _;if(i?.request)for(let e of i.request)if(typeof e=="function")M.use(e);else {let[s,a]=e;M.use(s,a);}if(i?.response)for(let e of i.response)if(typeof e=="function")j.use(e);else {let[s,a]=e;j.use(s,a);}let Me=ge({adapter:t,forgeInterceptors:{request:M,response:j}});Promise.resolve().then(()=>{re=$e();for(let e of he)e(re);});let be=false,we=null;async function ve(){return be||(we=await Me.catch(e=>{if(e instanceof T)throw e;return ge({adapter:"builtin",forgeInterceptors:{request:M,response:j}})}),be=true),we}let D=new Map,q=new Map;function je(e){if(!g.includes(e))throw new B(e)}function Ce(){if(!me&&!l?.length)throw new b("Route data not available. Auto-discovery has not completed. Use forge.ready() or forge.use(level) first.",{code:"RF_FE_010"})}function De(e){let s=o.endsWith("/")?o.slice(0,-1):o,a=E.startsWith("/")?E:`/${E}`;return `${s}${a}/${encodeURIComponent(e)}`}async function Fe(e,s,a=""){let u=await ve(),p={route:e,level:a,method:"GET",url:s,headers:{Accept:"application/json"},params:{},timeout:n,meta:{name:e,uri:s,methods:["GET"],parameters:[],level:a}},f=await(u.requestRaw??u.request)(p);if(!f||f.status<200||f.status>=300)throw new I(`Failed to fetch "${e}": HTTP ${f?.status}`,{level:a,status:f?.status,url:s,method:"GET"});return f.data}async function Oe(e){return await Fe(`__forge__.load.${e}`,De(e),e)}async function Ue(e){if(oe)throw oe;if(je(e),k.get(e))return;let s=D.get(e);if(s)return s;let a=q.get(e)??0,u=(async()=>{try{if(e===z&&!Q&&V){let d={};for(let f of V)d[f.name]={...f,level:z};k.set({level:z,routes:d,cache:null});return}let p=await Oe(e);(q.get(e)??0)===a&&k.set(p);}finally{D.delete(e);}})();return D.set(e,u),u}async function O(e){await Z;let s=Array.isArray(e)?e:[e];await Promise.all(s.map(Ue));}function U(e,s,a){Ce();let u=ie(e,s);if(!u)throw new P(s,e);return ke(u,a??{})}function ke(e,s){let a=e.parameter_defaults??{},u=[],p={};for(let y of e.parameters){let F=s[y];F==null&&y in a&&(F=a[y]),F==null?e.uri.includes(`{${y}?}`)||u.push(y):p[y]=F;}if(u.length>0)throw new W(e.name,u);let d=e.uri.replace(/\{([^{}]+)\}/g,(y,F)=>{let H=F.endsWith("?"),x=H?F.slice(0,-1):F;if(p[x]!==void 0){let A=p[x];if(typeof A=="object")throw new b(`Path parameter "${x}" must be a primitive value (string, number, boolean), got ${typeof A}`,{code:"RF_FE_003",route:e.name,context:{param:x,value:A}});return encodeURIComponent(String(A))}return H?"":y});if(d=d.replace(/\/+/g,"/").replace(/\/$/,""),/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(L)){let y=L.endsWith("/")?L.slice(0,-1):L;return d.startsWith("/")?`${y}${d}`:`${y}/${d}`}let f=o.endsWith("/")?o.slice(0,-1):o,w=L;return d.startsWith("/")?`${f}${w}${d}`:`${f}${w}/${d}`}function ie(e,s){let u=k.get(e)?.routes[s];if(u)return {...u,level:e}}function ae(e,s,a={}){let u,p=false,d,w=(async()=>{u=new AbortController,p&&u.abort(d),await Z,await O(e);let y=ie(e,s);if(!y)throw new P(s,e);return Be(y,a,u.signal)})();return w.abort=()=>{u?u.abort():p=true;},w}async function Be(e,s,a){let{pathParams:u,query:p,body:d,headers:f,timeout:w}=et(s);if(a?.aborted)throw new $(e.name,e.level,a.reason);let y=Xe(e),F=Ye(ke(e,u),p),H={route:e.name,level:e.level??"",method:y,url:F,headers:{Accept:"application/json",...f??{}},body:d,params:u,timeout:w??n,signal:a,meta:e},x=await ve(),A=x.runsInterceptors?H:await Y(M,H);if(A.signal?.aborted)throw new $(e.name,e.level,A.signal.reason);h.start();try{let Ae=x.request(A).then(m=>{if(m.status<200||m.status>=300)throw new I(`HTTP ${m.status} for route "${m.route}" (${m.method} ${m.url})`,{route:m.route,level:m.level,status:m.status,url:m.url,method:m.method});return m},m=>{throw m instanceof b?m:de(m,a)?new $(e.name,e.level,m):new S(m instanceof Error?m.message:String(m),e.name,e.level,m)});return x.runsInterceptors?await Ae:await ee(j,Ae)}finally{h.stop();}}function Pe(e){if(e===void 0){k.clear(),D.clear();for(let s of g)q.set(s,(q.get(s)??0)+1);}else if(Array.isArray(e))for(let s of e)k.del(s),D.delete(s),q.set(s,(q.get(s)??0)+1);else k.del(e),D.delete(e),q.set(e,(q.get(e)??0)+1);}function Ee(e){return e?k.get(e)!==void 0:g.length>0&&g.every(s=>k.get(s)!==void 0)}function ue(e,s){return Ce(),ie(e,s)!==void 0}function qe(e){if(e!==void 0){let u=k.get(e)?.routes??{},p={};for(let[d,f]of Object.entries(u))p[d]=JSON.parse(JSON.stringify(f));return p}let s={};for(let a of g){let u=k.get(a);if(u){let p={};for(let[d,f]of Object.entries(u.routes))p[d]=JSON.parse(JSON.stringify(f));s[a]=p;}}return s}Z.then(()=>{if(me=true,R.length>0)return Promise.allSettled(R.map(e=>O(e))).then(e=>{e.forEach((s,a)=>{s.status==="rejected"&&console.error(`[route-forge] eager load failed for level "${R[a]}":`,s.reason);});})}).then(()=>{Re(K);}).catch(e=>{ye(e);});function He(e,s){return e?se.then(e,s).then(()=>K):se}let ce={load:O,hasRoute:ue};function Ne(e,s){let a=O(e);a.catch(()=>{});let u=s?(d,f)=>pe(ce,e,s,d).then(w=>ae(e,w,f)):(d,f)=>ae(e,d,f),p=u;return Se(p,{level:e,...s!==void 0?{prefix:s}:{},api:u,route:s?(d,f)=>U(e,ne(ce,e,s,d),f):(d,f)=>U(e,d,f),url:s?(d,f)=>U(e,ne(ce,e,s,d),f):(d,f)=>U(e,d,f),hasRoute:d=>ue(e,d),getRoutes:()=>qe(e),load:()=>O(e),invalidate:()=>Pe(e),isLoaded:()=>Ee(e),isLoading:()=>h.isLoading(),onLoadingChange:d=>h.subscribe(d)}),Object.defineProperty(p,"levelLoaded",{value:a,writable:false,enumerable:true,configurable:true}),p}function We(e,s,a,u){let p=s.then(()=>e);return a?p.then(a,u).then(()=>e):p}function Je(e,s,a){Object.defineProperty(e,"onLevelLoaded",{value:(u,p)=>We(e,s,u,p),writable:false,enumerable:false,configurable:false}),Object.defineProperty(e,"useRoutePrefix",{value:u=>xe(a,u),writable:false,enumerable:false,configurable:false});}function xe(e,s){let a=Ne(e,s),u=a.levelLoaded;return Je(a,u,e),a}let K={api:ae,load:O,route:U,url:U,invalidate:Pe,isLoaded:Ee,hasRoute:ue,getRoutes:qe,isLoading:()=>h.isLoading(),onLoadingChange:e=>h.subscribe(e),interceptors:{request:M,response:j},ready:He,use(e,s){return e===void 0?K:xe(e,s)}};return K}function Xe(r){return (r.methods.find(n=>n.toUpperCase()!=="HEAD")??r.methods[0]??"GET").toUpperCase()}function Ye(r,t){if(!t)return r;let n=new URLSearchParams;for(let[i,c]of Object.entries(t))c!=null&&n.append(i,String(c));let o=n.toString();return o?r.includes("?")?`${r}&${o}`:`${r}?${o}`:r}function et(r){let{params:t,query:n,body:o,headers:i,timeout:c,...h}=r,l=t?{...t}:{};for(let[R,E]of Object.entries(h))R in l||(l[R]=E);let v,C,g;return n!==void 0&&(typeof n=="object"&&n!==null?v=n:"query"in l||(l.query=n)),o!==void 0&&(typeof o!="string"&&typeof o!="number"?C=o:"body"in l||(l.body=o)),i!==void 0&&(typeof i=="object"&&i!==null?g=i:"headers"in l||(l.headers=i)),{pathParams:l,query:v,body:C,headers:g,timeout:c}}
|
|
2
|
+
exports.AdapterNotFoundError=T;exports.ForgeError=b;exports.HTTPError=I;exports.InterceptorManagerImpl=_;exports.InvalidInterceptorReturnError=J;exports.LoadingTracker=G;exports.MissingRouteParamError=W;exports.NetworkError=S;exports.RequestAbortedError=$;exports.RouteCache=N;exports.UnknownLevelError=B;exports.UnknownRouteError=P;exports.createInterceptorManager=te;exports.createRouteForge=Ke;exports.resolveRouteName=pe;exports.resolveRouteNameSync=ne;return exports;})({});
|
|
@@ -75,7 +75,11 @@ interface RouteMeta {
|
|
|
75
75
|
parameter_defaults?: Record<string, unknown>;
|
|
76
76
|
/** 所属层级(前端填充,便于隔离缓存) */
|
|
77
77
|
level?: string;
|
|
78
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* 后端 manifest 契约字段:路由级缓存 TTL(秒)。
|
|
80
|
+
* 当前前端按层级消费 TTL(LevelRoutesResponse.cache,见 cache.ts),
|
|
81
|
+
* 路由级字段为后端契约预留——将来支持路由级缓存时无需改类型。
|
|
82
|
+
*/
|
|
79
83
|
cache?: number | null;
|
|
80
84
|
}
|
|
81
85
|
/**
|
|
@@ -334,16 +338,6 @@ interface RouteForgeOptions {
|
|
|
334
338
|
strict?: boolean;
|
|
335
339
|
timeout?: number;
|
|
336
340
|
baseURL?: string;
|
|
337
|
-
/**
|
|
338
|
-
* 摘要端点(auto-discovery)完成后的回调。
|
|
339
|
-
* 推荐用法:在回调中 mount 应用,确保 route() / hasRoute() 等同步方法可用。
|
|
340
|
-
* @example
|
|
341
|
-
* createRouteForgePlugin({
|
|
342
|
-
* endpoint: '/_forge/routes',
|
|
343
|
-
* onSummaryReady: () => app.mount('#app'),
|
|
344
|
-
* });
|
|
345
|
-
*/
|
|
346
|
-
onSummaryReady?: () => void;
|
|
347
341
|
}
|
|
348
342
|
/**
|
|
349
343
|
* 二级路由类型映射(可由 codegen 生成或通过 module augmentation 增强)
|
|
@@ -445,10 +439,5 @@ interface UseForgeApiBoundReturn<L extends string, PendingType = unknown, ErrorT
|
|
|
445
439
|
error: ErrorType;
|
|
446
440
|
call: UseForgeApiBoundCall<L>;
|
|
447
441
|
}
|
|
448
|
-
/** useForgeByPrefix 返回类型 */
|
|
449
|
-
interface UseForgeByPrefixReturn {
|
|
450
|
-
api: (suffix: string, params?: ApiCallParams) => Promise<unknown>;
|
|
451
|
-
route: (suffix: string, params?: Record<string, unknown>) => string;
|
|
452
|
-
}
|
|
453
442
|
|
|
454
|
-
export { type AdapterOption as A, type BoundForge as B, type CacheStorage as C, type Fetcher as F, type InterceptorManager as I, type LevelRoutesResponse as L, type RouteMeta as R, type SummaryResponse as S, type UseForgeApiBoundCall as U, type InterceptorHandler as a, type RouteForgeOptions as b, type RouteForge as c, type ApiCallParams as d, type ForgeApiParams as e, type ForgeApiResponse as f, type ForgeRequest as g, type ForgeRouteMap as h, type ForgeRouteName as i, type LoadingChangeCallback as j, type LoadingChangeEvent as k, LoadingTracker as l, type RequestConfig as m, type ResponseData as n, type UseForgeApiBoundReturn as o, type UseForgeApiCall as p, type UseForgeApiReturn as q
|
|
443
|
+
export { type AdapterOption as A, type BoundForge as B, type CacheStorage as C, type Fetcher as F, type InterceptorManager as I, type LevelRoutesResponse as L, type RouteMeta as R, type SummaryResponse as S, type UseForgeApiBoundCall as U, type InterceptorHandler as a, type RouteForgeOptions as b, type RouteForge as c, type ApiCallParams as d, type ForgeApiParams as e, type ForgeApiResponse as f, type ForgeRequest as g, type ForgeRouteMap as h, type ForgeRouteName as i, type LoadingChangeCallback as j, type LoadingChangeEvent as k, LoadingTracker as l, type RequestConfig as m, type ResponseData as n, type UseForgeApiBoundReturn as o, type UseForgeApiCall as p, type UseForgeApiReturn as q };
|
|
@@ -75,7 +75,11 @@ interface RouteMeta {
|
|
|
75
75
|
parameter_defaults?: Record<string, unknown>;
|
|
76
76
|
/** 所属层级(前端填充,便于隔离缓存) */
|
|
77
77
|
level?: string;
|
|
78
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* 后端 manifest 契约字段:路由级缓存 TTL(秒)。
|
|
80
|
+
* 当前前端按层级消费 TTL(LevelRoutesResponse.cache,见 cache.ts),
|
|
81
|
+
* 路由级字段为后端契约预留——将来支持路由级缓存时无需改类型。
|
|
82
|
+
*/
|
|
79
83
|
cache?: number | null;
|
|
80
84
|
}
|
|
81
85
|
/**
|
|
@@ -334,16 +338,6 @@ interface RouteForgeOptions {
|
|
|
334
338
|
strict?: boolean;
|
|
335
339
|
timeout?: number;
|
|
336
340
|
baseURL?: string;
|
|
337
|
-
/**
|
|
338
|
-
* 摘要端点(auto-discovery)完成后的回调。
|
|
339
|
-
* 推荐用法:在回调中 mount 应用,确保 route() / hasRoute() 等同步方法可用。
|
|
340
|
-
* @example
|
|
341
|
-
* createRouteForgePlugin({
|
|
342
|
-
* endpoint: '/_forge/routes',
|
|
343
|
-
* onSummaryReady: () => app.mount('#app'),
|
|
344
|
-
* });
|
|
345
|
-
*/
|
|
346
|
-
onSummaryReady?: () => void;
|
|
347
341
|
}
|
|
348
342
|
/**
|
|
349
343
|
* 二级路由类型映射(可由 codegen 生成或通过 module augmentation 增强)
|
|
@@ -445,10 +439,5 @@ interface UseForgeApiBoundReturn<L extends string, PendingType = unknown, ErrorT
|
|
|
445
439
|
error: ErrorType;
|
|
446
440
|
call: UseForgeApiBoundCall<L>;
|
|
447
441
|
}
|
|
448
|
-
/** useForgeByPrefix 返回类型 */
|
|
449
|
-
interface UseForgeByPrefixReturn {
|
|
450
|
-
api: (suffix: string, params?: ApiCallParams) => Promise<unknown>;
|
|
451
|
-
route: (suffix: string, params?: Record<string, unknown>) => string;
|
|
452
|
-
}
|
|
453
442
|
|
|
454
|
-
export { type AdapterOption as A, type BoundForge as B, type CacheStorage as C, type Fetcher as F, type InterceptorManager as I, type LevelRoutesResponse as L, type RouteMeta as R, type SummaryResponse as S, type UseForgeApiBoundCall as U, type InterceptorHandler as a, type RouteForgeOptions as b, type RouteForge as c, type ApiCallParams as d, type ForgeApiParams as e, type ForgeApiResponse as f, type ForgeRequest as g, type ForgeRouteMap as h, type ForgeRouteName as i, type LoadingChangeCallback as j, type LoadingChangeEvent as k, LoadingTracker as l, type RequestConfig as m, type ResponseData as n, type UseForgeApiBoundReturn as o, type UseForgeApiCall as p, type UseForgeApiReturn as q
|
|
443
|
+
export { type AdapterOption as A, type BoundForge as B, type CacheStorage as C, type Fetcher as F, type InterceptorManager as I, type LevelRoutesResponse as L, type RouteMeta as R, type SummaryResponse as S, type UseForgeApiBoundCall as U, type InterceptorHandler as a, type RouteForgeOptions as b, type RouteForge as c, type ApiCallParams as d, type ForgeApiParams as e, type ForgeApiResponse as f, type ForgeRequest as g, type ForgeRouteMap as h, type ForgeRouteName as i, type LoadingChangeCallback as j, type LoadingChangeEvent as k, LoadingTracker as l, type RequestConfig as m, type ResponseData as n, type UseForgeApiBoundReturn as o, type UseForgeApiCall as p, type UseForgeApiReturn as q };
|