@route-forge/core 2.2.0 → 2.2.1

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.
@@ -1,2 +1,2 @@
1
- var RouteForge=(function(exports){'use strict';var Q="route-forge:";function Te(r){return r==="memory"||typeof globalThis>"u"?null:r==="sessionStorage"?globalThis.sessionStorage??null:r==="localStorage"?globalThis.localStorage??null:null}var B=class{constructor(e){this.memory=new Map;this.onStorageEvent=e=>{e.key&&e.key.startsWith(Q)&&this.memory.delete(e.key.slice(Q.length));};this.storage=e.storage,this.fallbackTtl=e.ttl,this.backend=Te(e.storage),this.backend&&typeof globalThis.addEventListener=="function"&&globalThis.addEventListener("storage",this.onStorageEvent);}key(e){return `${Q}${e}`}get(e){if(this.storage==="memory"||!this.backend)return this.getFromMemory(e);let t=this.getFromMemory(e);if(t)return t;let n=this.backend.getItem(this.key(e));if(n)try{let o=JSON.parse(n);if(this.isExpired(o)){this.del(e);return}return this.memory.set(e,o),o}catch{return}}getFromMemory(e){let t=this.memory.get(e);if(t){if(this.isExpired(t)){this.memory.delete(e);return}return t}}set(e,t){let n,o;t===null?(n=0,o=false):t===void 0?(n=this.fallbackTtl,o=true):t===0?(n=0,o=true):(n=Math.min(t,this.fallbackTtl),o=true);let s={level:e.level,routes:e.routes,ttl:n,cachedAt:Date.now()};if(this.memory.set(e.level,s),!(!o||this.storage==="memory"||!this.backend))try{this.backend.setItem(this.key(e.level),JSON.stringify(s));}catch{}}del(e){if(this.memory.delete(e),this.backend)try{this.backend.removeItem(this.key(e));}catch{}}clear(){if(this.memory.clear(),this.backend)try{let e=[];for(let t=0;t<this.backend.length;t++){let n=this.backend.key(t);n&&n.startsWith(Q)&&e.push(n);}for(let t of e)this.backend.removeItem(t);}catch{}}isExpired(e){return e.ttl===null||e.ttl===0?false:Date.now()-e.cachedAt>e.ttl*1e3}};var P=class extends Error{constructor(e,t){super(e),this.name=this.constructor.name,this.code=t.code,t.route!==void 0&&(this.route=t.route),t.level!==void 0&&(this.level=t.level),t.context!==void 0&&(this.context=t.context),t.cause!==void 0&&(this.cause=t.cause);}},k=class extends P{constructor(e,t){super(`Route "${e}" not found${t?` in level "${t}"`:""}`,{code:"RF_FE_001",route:e,level:t});}},A=class extends P{constructor(e){super(`Level "${e}" not declared in options.levels`,{code:"RF_FE_002",level:e});}},H=class extends P{constructor(e,t){super(`Missing path parameter(s) ${t.join(", ")} for route "${e}"`,{code:"RF_FE_003",route:e,context:{missingParams:t}});}},D=class extends P{constructor(e){super(`Adapter "${e}" not available; install axios or use 'builtin'`,{code:"RF_FE_005",context:{adapter:e}});}},N=class extends P{constructor(e){super("Request interceptor must return a RequestConfig object",{code:"RF_FE_006",route:e});}},T=class extends P{constructor(e,t,n,o){super(e,{code:"RF_FE_007",route:t,level:n,cause:o});}},q=class extends P{constructor(e,t){super(e,{code:"RF_FE_008",route:t.route,level:t.level,context:{status:t.status,url:t.url,method:t.method},cause:t.cause});}},L=class extends P{constructor(e,t,n){super(`Request aborted${e?` for route "${e}"`:""}`,{code:"RF_FE_009",route:e,level:t,cause:n});}};var S=class{constructor(){this.handlers=[];this.nextId=0;}use(e,t){let n=this.nextId++;return this.handlers.push({id:n,onFulfilled:e,onRejected:t}),n}eject(e){let t=this.handlers.findIndex(n=>n.id===e);t>=0&&this.handlers.splice(t,1);}clear(){this.handlers=[];}forEach(e){for(let t of this.handlers)e(t);}get size(){return this.handlers.length}};async function K(r,e){let t=[];r.forEach(o=>t.push(o)),t.reverse();let n=Promise.resolve(e);for(let o of t){let s=o.onFulfilled,c=o.onRejected;n=n.then(async u=>{if(!s)return u;let h=await s(u);if(h===null||typeof h!="object")throw new N;return h},u=>c?c(u):Promise.reject(u));}return n}async function Y(r,e){let t=[];r.forEach(o=>t.push(o));let n=e;for(let o of t){let s=o.onFulfilled,c=o.onRejected;n=n.then(u=>s?s(u):u,u=>c?c(u):Promise.reject(u));}return n}function Z(){return new S}function se(r,e){if(e?.aborted)return true;let t=r;return t?t.name==="AbortError"||t.code==="ERR_CANCELED":false}function Le(...r){let e=r.filter(n=>!!n);if(e.length===0)return;if(e.length===1)return e[0];if(typeof AbortSignal<"u"&&typeof AbortSignal.any=="function")return AbortSignal.any(e);let t=new AbortController;for(let n of e){if(n.aborted)return t.abort(n.reason),t.signal;n.addEventListener("abort",()=>t.abort(n.reason),{once:true});}return t.signal}function Se(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 Re(r){let e=Le(r.signal,r.timeout&&r.timeout>0?AbortSignal.timeout(r.timeout):void 0),t=r.url;if(r.paramsSerializer&&r.params){let i=r.paramsSerializer(r.params);i&&(t=t.includes("?")?`${t}&${i}`:`${t}?${i}`);}let n=new Headers(r.headers),o={method:r.method,headers:n};e&&(o.signal=e),r.body!==void 0&&!["GET","HEAD"].includes(r.method.toUpperCase())&&(typeof r.body=="string"||Se(r.body)?o.body=r.body:(o.body=JSON.stringify(r.body),n.has("Content-Type")||n.set("Content-Type","application/json")));let s;try{s=await fetch(t,o);}catch(i){throw se(i)?i:new T(i instanceof Error?i.message:String(i),r.route,r.level,i)}let c=await s.text(),u=c;if((s.headers.get("content-type")??"").includes("application/json"))try{u=JSON.parse(c);}catch{}let f={route:r.route,level:r.level,method:r.method,url:t,status:s.status,headers:s.headers,data:u,config:r};if(s.status>=200&&s.status<300)return f;throw new q(`HTTP ${s.status} for route "${r.route}" (${r.method} ${t})`,{route:r.route,level:r.level,status:s.status,url:t,method:r.method})}function ie(r){let e=r?.request??Z(),t=r?.response??Z(),n=Re;async function o(i){let l=await K(e,i),p=Promise.resolve(l).then(n);return Y(t,p)}return {request:o,requestRaw:n,interceptors:{request:e,response:t},runsInterceptors:true,get:(i,l)=>o({...l,url:i,method:"GET"}),post:(i,l)=>o({...l,url:i,method:"POST"}),put:(i,l)=>o({...l,url:i,method:"PUT"}),patch:(i,l)=>o({...l,url:i,method:"PATCH"}),delete:(i,l)=>o({...l,url:i,method:"DELETE"})}}function ye(r){if(!r)return new Headers;let e=typeof r.toJSON=="function"?r.toJSON():r;try{return new Headers(e)}catch{return new Headers}}async function ae(){let r,e="axios";try{let n=await import(e);r=n.default??n;}catch{typeof globalThis<"u"&&globalThis.axios&&(r=globalThis.axios);}if(!r||typeof r.request!="function")return null;async function t(n){let o={...n.headers};try{let s=await r.request({url:n.url,method:n.method,headers:o,data:n.body,timeout:n.timeout,signal:n.signal});return {route:n.route,level:n.level,method:n.method,url:n.url,status:s.status,headers:ye(s.headers),data:s.data,config:n}}catch(s){if(s&&s.response){let c=s.response;return {route:n.route,level:n.level,method:n.method,url:n.url,status:c.status,headers:ye(c.headers),data:c.data,config:n}}throw s}}return {request:t,interceptors:void 0}}async function ue(r){let{adapter:e}=r;if(e&&typeof e=="object")return {request:n=>e.request(n),interceptors:e.interceptors};if(e==="builtin")return ie(r.forgeInterceptors);if(e==="axios"){let n=await ae();if(!n)throw new D("axios");return n}let t=await ae().catch(()=>null);return t||ie(r.forgeInterceptors)}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(e){return this.subscribers.add(e),()=>{this.subscribers.delete(e);}}notify(){let e={loading:this.count>0,count:this.count};for(let t of this.subscribers)try{t(e);}catch{}}};function ve(r,e){let t=e.baseURL.endsWith("/")?e.baseURL.slice(0,-1):e.baseURL,n=e.endpoint.startsWith("/")?e.endpoint:`/${e.endpoint}`;return `${t}${n}/${encodeURIComponent(r)}`}function X(r,e,t){let n=r.parameter_defaults??{},o=[],s={};for(let f of r.parameters){let i=e[f];i==null&&f in n&&(i=n[f]),i==null?r.uri.includes(`{${f}?}`)||o.push(f):s[f]=i;}if(o.length>0)throw new H(r.name,o);let c=r.uri.replace(/\{([^{}]+)\}/g,(f,i)=>{let l=i.endsWith("?"),p=l?i.slice(0,-1):i;if(s[p]!==void 0){let w=s[p];if(typeof w=="object")throw new P(`Path parameter "${p}" must be a primitive value (string, number, boolean), got ${typeof w}`,{code:"RF_FE_003",route:r.name,context:{param:p,value:w}});return encodeURIComponent(String(w))}return l?"":f});if(c=c.replace(/\/+/g,"/").replace(/\/$/,""),/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(t.urlPrefix)){let f=t.urlPrefix.endsWith("/")?t.urlPrefix.slice(0,-1):t.urlPrefix;return c.startsWith("/")?`${f}${c}`:`${f}/${c}`}let u=t.baseURL.endsWith("/")?t.baseURL.slice(0,-1):t.baseURL,h=t.urlPrefix;return c.startsWith("/")?`${u}${h}${c}`:`${u}${h}/${c}`}function be(r){return (r.methods.find(t=>t.toUpperCase()!=="HEAD")??r.methods[0]??"GET").toUpperCase()}function we(r,e){if(!e)return r;let t=new URLSearchParams;for(let[o,s]of Object.entries(e))s!=null&&t.append(o,String(s));let n=t.toString();return n?r.includes("?")?`${r}&${n}`:`${r}?${n}`:r}function Ce(r){let{params:e,query:t,body:n,headers:o,timeout:s,...c}=r,u=e?{...e}:{};for(let[l,p]of Object.entries(c))l in u||(u[l]=p);let h,f,i;return t!==void 0&&(typeof t=="object"&&t!==null?h=t:"query"in u||(u.query=t)),n!==void 0&&(typeof n!="string"&&typeof n!="number"?f=n:"body"in u||(u.body=n)),o!==void 0&&(typeof o=="object"&&o!==null?i=o:"headers"in u||(u.headers=o)),{pathParams:u,query:h,body:f,headers:i,timeout:s}}async function Pe(r,e,t){let{explicitLevels:n,explicitEndpoint:o}=r;if(!o)throw new A("(auto-discovery)");try{let s=e.endsWith("/")?e.slice(0,-1):e,c=o.startsWith("/")?o:`/${o}`;return await t("__forge__.summary",`${s}${c}`)}catch(s){if(n&&n.length>0)return console.warn(`[route-forge] summary endpoint unreachable: ${s.message}; using explicit levels`),null;throw new A("(auto-discovery)")}}function Ie(r){return typeof r=="number"&&r<0?null:r}function ce(r,e,t){let{explicitLevels:n,explicitEager:o,explicitEndpoint:s}=t,c=r.schemeVersion??1;c>1&&console.warn(`[route-forge] backend schemeVersion=${c} > client supported 1; some features may be unavailable`),r.config.endpoint_prefix&&r.config.endpoint_prefix!==s&&(s&&console.warn(`[route-forge] backend endpoint_prefix "${r.config.endpoint_prefix}" overrides frontend endpoint "${s}"`),e.endpoint=r.config.endpoint_prefix),r.config.url_prefix&&(e.urlPrefix=r.config.url_prefix.endsWith("/")?r.config.url_prefix.slice(0,-1):r.config.url_prefix),e.cacheTtl=Ie(r.config.cache_ttl);let u=Object.keys(r.levels),h={};for(let i of u){let l=r.levels[i]?.route;l&&typeof l.uri=="string"&&(h[i]={uri:l.uri,methods:l.methods??["GET","HEAD"]});}if(e.levelRoutes=h,n&&n.length>0){let i=n.filter(p=>u.includes(p)),l=n.filter(p=>!u.includes(p));l.length>0&&console.warn(`[route-forge] levels not in backend summary and dropped: ${l.join(", ")}`),e.levels=i;}else e.levels=u.slice();let f=u.filter(i=>r.levels[i]?.load==="eager");if(!o)e.eager=f;else {let i=new Set([...f,...o]);e.eager=[...i];}}var Me="__ROUTE_FORGE__",W;function Ee(){if(W!==void 0)return W;if(typeof window>"u")return W=null,null;let r;try{r=window[Me];}catch{r=void 0;}return W=r!==null&&typeof r=="object"?r:null,W}var ee=class{constructor(e){this.inflight=new Map;this.invalidationGens=new Map;this.cache=e.cache,this.state=e.state,this.baseURL=e.baseURL,this.fetchMeta=e.fetchMeta,this.autoDiscoveryPromise=e.autoDiscoveryPromise,this.getAutoDiscoveryError=e.getAutoDiscoveryError;}assertLevelDeclared(e){if(!this.state.levels.includes(e))throw new A(e)}async fetchLevel(e){let t=this.state.levelRoutes[e]?.uri,n=t?this.joinBaseAndPath(this.baseURL,t):ve(e,{baseURL:this.baseURL,endpoint:this.state.endpoint});return await this.fetchMeta(`route-forge.${e}`,n,e)}joinBaseAndPath(e,t){let n=e.endsWith("/")?e.slice(0,-1):e,o=t.startsWith("/")?t:`/${t}`;return `${n}${o}`}async loadOne(e){let t=this.getAutoDiscoveryError();if(t)throw t;if(this.assertLevelDeclared(e),!(this.state.cacheTtl===null)&&this.cache.get(e))return;let o=this.inflight.get(e);if(o)return o;let s=this.invalidationGens.get(e)??0,c=(async()=>{try{let u=await this.fetchLevel(e);(this.invalidationGens.get(e)??0)===s&&this.cache.set(u,this.state.cacheTtl);}finally{this.inflight.delete(e);}})();return this.inflight.set(e,c),c}async load(e){await this.autoDiscoveryPromise;let t=Array.isArray(e)?e:[e];await Promise.all(t.map(n=>this.loadOne(n)));}invalidate(e){if(e===void 0){this.cache.clear(),this.inflight.clear();for(let t of this.state.levels)this.invalidationGens.set(t,(this.invalidationGens.get(t)??0)+1);}else if(Array.isArray(e))for(let t of e)this.cache.del(t),this.inflight.delete(t),this.invalidationGens.set(t,(this.invalidationGens.get(t)??0)+1);else this.cache.del(e),this.inflight.delete(e),this.invalidationGens.set(e,(this.invalidationGens.get(e)??0)+1);}isLoaded(e){return e?this.cache.get(e)!==void 0:this.state.levels.length>0&&this.state.levels.every(t=>this.cache.get(t)!==void 0)}findRouteMeta(e,t){let o=this.cache.get(e)?.routes[t];if(o)return {...o,level:e}}getRoutes(e){if(e!==void 0){let o=this.cache.get(e)?.routes??{},s={};for(let[c,u]of Object.entries(o))s[c]=JSON.parse(JSON.stringify(u));return s}let t={};for(let n of this.state.levels){let o=this.cache.get(n);if(o){let s={};for(let[c,u]of Object.entries(o.routes))s[c]=JSON.parse(JSON.stringify(u));t[n]=s;}}return t}};function Fe(r){let{ensureAdapter:e,requestInterceptors:t,responseInterceptors:n,load:o,findRouteMeta:s,baseURL:c,state:u,timeout:h,loadingTracker:f,autoDiscoveryPromise:i}=r;async function l(p,w,d){let{pathParams:v,query:m,body:C,headers:E,timeout:b}=Ce(w);if(d?.aborted)throw new L(p.name,p.level,d.reason);let R=be(p),F=we(X(p,v,{baseURL:c,urlPrefix:u.urlPrefix}),m),J={route:p.name,level:p.level??"",method:R,url:F,headers:{Accept:"application/json",...E??{}},body:C,params:v,timeout:b??h,signal:d,meta:p},I=await e(),M=I.runsInterceptors?J:await K(t,J);if(M.signal?.aborted)throw new L(p.name,p.level,M.signal.reason);f.start();try{let O=I.request(M).then(g=>{if(g.status<200||g.status>=300)throw new q(`HTTP ${g.status} for route "${g.route}" (${g.method} ${g.url})`,{route:g.route,level:g.level,status:g.status,url:g.url,method:g.method});return g},g=>{throw g instanceof P?g:se(g,d)?new L(p.name,p.level,g):new T(g instanceof Error?g.message:String(g),p.name,p.level,g)});return I.runsInterceptors?await O:await Y(n,O)}finally{f.stop();}}return function(w,d,v={}){let m,C=false,E,R=(async()=>{m=new AbortController,C&&m.abort(E),await i,await o(w);let F=s(w,d);if(!F)throw new k(d,w);return l(F,v,m.signal)})();return R.abort=()=>{m?m.abort():C=true;},R}}async function le(r,e,t,n,o="."){if(!n)return t;let s=`${t}${o}${n}`;if(!n.startsWith(`${t}${o}`)||(await r.load(e),r.hasRoute(e,s)))return s;if(r.hasRoute(e,n))return n;throw new k(s,e)}function te(r,e,t,n,o="."){if(!n)return t;let s=`${t}${o}${n}`;if(!n.startsWith(`${t}${o}`)||r.hasRoute(e,s))return s;if(r.hasRoute(e,n))return n;throw new k(s,e)}function xe(r,e){for(let t of Object.keys(e)){let n=e[t];Object.defineProperty(r,t,{value:n!==null&&typeof n=="object"?Object.freeze(n):n,writable:false,enumerable:false,configurable:false});}return r}function ke(r){let{load:e,api:t,route:n,hasRoute:o,getRoutes:s,invalidate:c,isLoaded:u,loadingTracker:h}=r,f={load:e,hasRoute:o};function i(d,v){let m=e(d);m.catch(()=>{});let C=v?(b,R)=>le(f,d,v,b).then(F=>t(d,F,R)):(b,R)=>t(d,b,R),E=C;return xe(E,{level:d,...v!==void 0?{prefix:v}:{},api:C,route:v?(b,R)=>n(d,te(f,d,v,b),R):(b,R)=>n(d,b,R),url:v?(b,R)=>n(d,te(f,d,v,b),R):(b,R)=>n(d,b,R),hasRoute:b=>o(d,b),getRoutes:()=>s(d),load:()=>e(d),invalidate:()=>c(d),isLoaded:()=>u(d),isLoading:()=>h.isLoading(),onLoadingChange:b=>h.subscribe(b)}),Object.defineProperty(E,"levelLoaded",{value:m,writable:false,enumerable:true,configurable:true}),E}function l(d,v,m,C){let E=v.then(()=>d);return m?E.then(m,C).then(()=>d):E}function p(d,v,m){Object.defineProperty(d,"onLevelLoaded",{value:(C,E)=>l(d,v,C,E),writable:false,enumerable:false,configurable:false}),Object.defineProperty(d,"useRoutePrefix",{value:C=>w(m,C),writable:false,enumerable:false,configurable:false});}function w(d,v){let m=i(d,v),C=m.levelLoaded;return p(m,C,d),m}return w}var _e=3e4,$e=3600;function je(r){let e=Ee()??r.summary??null;if(!e&&!r.endpoint)throw new TypeError("createRouteForge: \u9700\u8981 options.endpoint\uFF0C\u6216 options.summary\uFF0C\u6216\u9875\u9762\u5185\u5D4C window.__ROUTE_FORGE__");let{adapter:t="auto",timeout:n=_e,baseURL:o="",interceptors:s,cache:c={}}=r,u=new G,h=r.levels,f=r.eager,i=r.endpoint,l={levels:h??[],eager:f??[],endpoint:i??e?.config?.endpoint_prefix??"",urlPrefix:"",cacheTtl:void 0,levelRoutes:{}},p={explicitLevels:h,explicitEager:f,explicitEndpoint:i},w=false,d,v,m=new Promise((a,y)=>{d=a,v=y;});m.catch(()=>{});let C=c.ttl??$e,E=c.storage??"memory",b=new B({storage:E,ttl:C}),R=new S,F=new S;if(s?.request)for(let a of s.request)if(typeof a=="function")R.use(a);else {let[y,x]=a;R.use(y,x);}if(s?.response)for(let a of s.response)if(typeof a=="function")F.use(a);else {let[y,x]=a;F.use(y,x);}let J=ue({adapter:t,forgeInterceptors:{request:R,response:F}}),I=false,M=null;async function O(){return I||(M=await J.catch(a=>{if(a instanceof D)throw a;return ue({adapter:"builtin",forgeInterceptors:{request:R,response:F}})}),I=true),M}function re(){if(!w&&!h?.length)throw new P("Route data not available. Auto-discovery has not completed. Use forge.ready() or forge.use(level) first.",{code:"RF_FE_010"})}async function g(a,y,x=""){let U=await O(),De={route:a,level:x,method:"GET",url:y,headers:{Accept:"application/json"},params:{},timeout:n,meta:{name:a,uri:y,methods:["GET"],parameters:[],level:x}},j=await(U.requestRaw??U.request)(De);if(!j||j.status<200||j.status>=300)throw new q(`Failed to fetch "${a}": HTTP ${j?.status}`,{level:x,status:j?.status,url:y,method:"GET"});return j.data}let _;e?(ce(e,l,p),w=true,_=Promise.resolve()):_=Pe(p,o,g).then(a=>{a!==null&&ce(a,l,p);});let de=null;_.catch(a=>{de=a;});let $=new ee({cache:b,state:l,baseURL:o,fetchMeta:g,autoDiscoveryPromise:_,getAutoDiscoveryError:()=>de}),z=a=>$.load(a),ne=(a,y)=>$.findRouteMeta(a,y),pe=a=>$.invalidate(a),fe=a=>$.isLoaded(a);function ge(a){return a===void 0?$.getRoutes():$.getRoutes(a)}function oe(a,y,x){re();let U=ne(a,y);if(!U)throw new k(y,a);return X(U,x??{},{baseURL:o,urlPrefix:l.urlPrefix})}let he=Fe({ensureAdapter:O,requestInterceptors:R,responseInterceptors:F,load:z,findRouteMeta:ne,baseURL:o,state:l,timeout:n,loadingTracker:u,autoDiscoveryPromise:_});function me(a,y){return re(),ne(a,y)!==void 0}_.then(()=>{if(w=true,l.eager.length>0)return Promise.allSettled(l.eager.map(a=>z(a))).then(a=>{a.forEach((y,x)=>{y.status==="rejected"&&console.error(`[route-forge] eager load failed for level "${l.eager[x]}":`,y.reason);});})}).then(()=>{d(V);}).catch(a=>{v(a);});function qe(a,y){return a?m.then(a,y).then(()=>V):m}let Ae=ke({load:z,api:he,route:oe,hasRoute:me,getRoutes:ge,invalidate:pe,isLoaded:fe,loadingTracker:u}),V={api:he,load:z,route:oe,url:oe,invalidate:pe,isLoaded:fe,hasRoute:me,getRoutes:ge,isLoading:()=>u.isLoading(),onLoadingChange:a=>u.subscribe(a),interceptors:{request:R,response:F},ready:qe,use(a,y){return a===void 0?V:Ae(a,y)}};return V}
1
+ var RouteForge=(function(exports){'use strict';var Q="route-forge:";function Te(r){return r==="memory"||typeof globalThis>"u"?null:r==="sessionStorage"?globalThis.sessionStorage??null:r==="localStorage"?globalThis.localStorage??null:null}var B=class{constructor(e){this.memory=new Map;this.onStorageEvent=e=>{e.key&&e.key.startsWith(Q)&&this.memory.delete(e.key.slice(Q.length));};this.storage=e.storage,this.fallbackTtl=e.ttl,this.backend=Te(e.storage),this.backend&&typeof globalThis.addEventListener=="function"&&globalThis.addEventListener("storage",this.onStorageEvent);}key(e){return `${Q}${e}`}get(e){if(this.storage==="memory"||!this.backend)return this.getFromMemory(e);let t=this.getFromMemory(e);if(t)return t;let n=this.backend.getItem(this.key(e));if(n)try{let o=JSON.parse(n);if(this.isExpired(o)){this.del(e);return}return this.memory.set(e,o),o}catch{return}}getFromMemory(e){let t=this.memory.get(e);if(t){if(this.isExpired(t)){this.memory.delete(e);return}return t}}set(e,t){let n,o;t===null?(n=0,o=false):t===void 0?(n=this.fallbackTtl,o=true):t===0?(n=0,o=true):(n=Math.min(t,this.fallbackTtl),o=true);let s={level:e.level,routes:e.routes,ttl:n,cachedAt:Date.now()};if(this.memory.set(e.level,s),!(!o||this.storage==="memory"||!this.backend))try{this.backend.setItem(this.key(e.level),JSON.stringify(s));}catch{}}del(e){if(this.memory.delete(e),this.backend)try{this.backend.removeItem(this.key(e));}catch{}}clear(){if(this.memory.clear(),this.backend)try{let e=[];for(let t=0;t<this.backend.length;t++){let n=this.backend.key(t);n&&n.startsWith(Q)&&e.push(n);}for(let t of e)this.backend.removeItem(t);}catch{}}isExpired(e){return e.ttl===null||e.ttl===0?false:Date.now()-e.cachedAt>e.ttl*1e3}};var P=class extends Error{constructor(e,t){super(e),this.name=this.constructor.name,this.code=t.code,t.route!==void 0&&(this.route=t.route),t.level!==void 0&&(this.level=t.level),t.context!==void 0&&(this.context=t.context),t.cause!==void 0&&(this.cause=t.cause);}},k=class extends P{constructor(e,t){super(`Route "${e}" not found${t?` in level "${t}"`:""}`,{code:"RF_FE_001",route:e,level:t});}},A=class extends P{constructor(e){super(`Level "${e}" not declared in options.levels`,{code:"RF_FE_002",level:e});}},H=class extends P{constructor(e,t){super(`Missing path parameter(s) ${t.join(", ")} for route "${e}"`,{code:"RF_FE_003",route:e,context:{missingParams:t}});}},D=class extends P{constructor(e){super(`Adapter "${e}" not available; install axios or use 'builtin'`,{code:"RF_FE_005",context:{adapter:e}});}},N=class extends P{constructor(e){super("Request interceptor must return a RequestConfig object",{code:"RF_FE_006",route:e});}},T=class extends P{constructor(e,t,n,o){super(e,{code:"RF_FE_007",route:t,level:n,cause:o});}},q=class extends P{constructor(e,t){super(e,{code:"RF_FE_008",route:t.route,level:t.level,context:{status:t.status,url:t.url,method:t.method},cause:t.cause});}},L=class extends P{constructor(e,t,n){super(`Request aborted${e?` for route "${e}"`:""}`,{code:"RF_FE_009",route:e,level:t,cause:n});}};var S=class{constructor(){this.handlers=[];this.nextId=0;}use(e,t){let n=this.nextId++;return this.handlers.push({id:n,onFulfilled:e,onRejected:t}),n}eject(e){let t=this.handlers.findIndex(n=>n.id===e);t>=0&&this.handlers.splice(t,1);}clear(){this.handlers=[];}forEach(e){for(let t of this.handlers)e(t);}get size(){return this.handlers.length}};async function K(r,e){let t=[];r.forEach(o=>t.push(o)),t.reverse();let n=Promise.resolve(e);for(let o of t){let s=o.onFulfilled,c=o.onRejected;n=n.then(async u=>{if(!s)return u;let h=await s(u);if(h===null||typeof h!="object")throw new N;return h},u=>c?c(u):Promise.reject(u));}return n}async function Y(r,e){let t=[];r.forEach(o=>t.push(o));let n=e;for(let o of t){let s=o.onFulfilled,c=o.onRejected;n=n.then(u=>s?s(u):u,u=>c?c(u):Promise.reject(u));}return n}function Z(){return new S}function se(r,e){if(e?.aborted)return true;let t=r;return t?t.name==="AbortError"||t.code==="ERR_CANCELED":false}function Le(...r){let e=r.filter(n=>!!n);if(e.length===0)return;if(e.length===1)return e[0];if(typeof AbortSignal<"u"&&typeof AbortSignal.any=="function")return AbortSignal.any(e);let t=new AbortController;for(let n of e){if(n.aborted)return t.abort(n.reason),t.signal;n.addEventListener("abort",()=>t.abort(n.reason),{once:true});}return t.signal}function Se(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 Re(r){let e=Le(r.signal,r.timeout&&r.timeout>0?AbortSignal.timeout(r.timeout):void 0),t=r.url;if(r.paramsSerializer&&r.params){let i=r.paramsSerializer(r.params);i&&(t=t.includes("?")?`${t}&${i}`:`${t}?${i}`);}let n=new Headers(r.headers),o={method:r.method,headers:n};e&&(o.signal=e),r.body!==void 0&&!["GET","HEAD"].includes(r.method.toUpperCase())&&(typeof r.body=="string"||Se(r.body)?o.body=r.body:(o.body=JSON.stringify(r.body),n.has("Content-Type")||n.set("Content-Type","application/json")));let s;try{s=await fetch(t,o);}catch(i){throw se(i)?i:new T(i instanceof Error?i.message:String(i),r.route,r.level,i)}let c=await s.text(),u=c;if((s.headers.get("content-type")??"").includes("application/json"))try{u=JSON.parse(c);}catch{}let f={route:r.route,level:r.level,method:r.method,url:t,status:s.status,headers:s.headers,data:u,config:r};if(s.status>=200&&s.status<300)return f;throw new q(`HTTP ${s.status} for route "${r.route}" (${r.method} ${t})`,{route:r.route,level:r.level,status:s.status,url:t,method:r.method})}function ie(r){let e=r?.request??Z(),t=r?.response??Z(),n=Re;async function o(i){let l=await K(e,i),p=Promise.resolve(l).then(n);return Y(t,p)}return {request:o,requestRaw:n,interceptors:{request:e,response:t},runsInterceptors:true,get:(i,l)=>o({...l,url:i,method:"GET"}),post:(i,l)=>o({...l,url:i,method:"POST"}),put:(i,l)=>o({...l,url:i,method:"PUT"}),patch:(i,l)=>o({...l,url:i,method:"PATCH"}),delete:(i,l)=>o({...l,url:i,method:"DELETE"})}}function ye(r){if(!r)return new Headers;let e=typeof r.toJSON=="function"?r.toJSON():r;try{return new Headers(e)}catch{return new Headers}}async function ae(){let r,e="axios";try{let n=await import(e);r=n.default??n;}catch{typeof globalThis<"u"&&globalThis.axios&&(r=globalThis.axios);}if(!r||typeof r.request!="function")return null;async function t(n){let o={...n.headers};try{let s=await r.request({url:n.url,method:n.method,headers:o,data:n.body,timeout:n.timeout,signal:n.signal});return {route:n.route,level:n.level,method:n.method,url:n.url,status:s.status,headers:ye(s.headers),data:s.data,config:n}}catch(s){if(s&&s.response){let c=s.response;return {route:n.route,level:n.level,method:n.method,url:n.url,status:c.status,headers:ye(c.headers),data:c.data,config:n}}throw s}}return {request:t,interceptors:void 0}}async function ue(r){let{adapter:e}=r;if(e&&typeof e=="object")return {request:n=>e.request(n),interceptors:e.interceptors};if(e==="builtin")return ie(r.forgeInterceptors);if(e==="axios"){let n=await ae();if(!n)throw new D("axios");return n}let t=await ae().catch(()=>null);return t||ie(r.forgeInterceptors)}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(e){return this.subscribers.add(e),()=>{this.subscribers.delete(e);}}notify(){let e={loading:this.count>0,count:this.count};for(let t of this.subscribers)try{t(e);}catch{}}};function ve(r,e){let t=e.baseURL.endsWith("/")?e.baseURL.slice(0,-1):e.baseURL,n=e.endpoint.startsWith("/")?e.endpoint:`/${e.endpoint}`;return `${t}${n}/${encodeURIComponent(r)}`}function X(r,e,t){let n=r.parameter_defaults??{},o=[],s={};for(let f of r.parameters){let i=e[f];i==null&&f in n&&(i=n[f]),i==null?r.uri.includes(`{${f}?}`)||o.push(f):s[f]=i;}if(o.length>0)throw new H(r.name,o);let c=r.uri.replace(/\{([^{}]+)\}/g,(f,i)=>{let l=i.endsWith("?"),p=l?i.slice(0,-1):i;if(s[p]!==void 0){let w=s[p];if(typeof w=="object")throw new P(`Path parameter "${p}" must be a primitive value (string, number, boolean), got ${typeof w}`,{code:"RF_FE_003",route:r.name,context:{param:p,value:w}});return encodeURIComponent(String(w))}return l?"":f});if(c=c.replace(/\/+/g,"/").replace(/\/$/,""),/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(t.urlPrefix)){let f=t.urlPrefix.endsWith("/")?t.urlPrefix.slice(0,-1):t.urlPrefix;return c.startsWith("/")?`${f}${c}`:`${f}/${c}`}let u=t.baseURL.endsWith("/")?t.baseURL.slice(0,-1):t.baseURL,h=t.urlPrefix;return c.startsWith("/")?`${u}${h}${c}`:`${u}${h}/${c}`}function be(r){return (r.methods.find(t=>t.toUpperCase()!=="HEAD")??r.methods[0]??"GET").toUpperCase()}function we(r,e){if(!e)return r;let t=new URLSearchParams;for(let[o,s]of Object.entries(e))s!=null&&t.append(o,String(s));let n=t.toString();return n?r.includes("?")?`${r}&${n}`:`${r}?${n}`:r}function Ce(r){let{params:e,query:t,body:n,headers:o,timeout:s,...c}=r,u=e?{...e}:{};for(let[l,p]of Object.entries(c))l in u||(u[l]=p);let h,f,i;return t!==void 0&&(typeof t=="object"&&t!==null?h=t:"query"in u||(u.query=t)),n!==void 0&&(typeof n!="string"&&typeof n!="number"?f=n:"body"in u||(u.body=n)),o!==void 0&&(typeof o=="object"&&o!==null?i=o:"headers"in u||(u.headers=o)),{pathParams:u,query:h,body:f,headers:i,timeout:s}}async function Pe(r,e,t){let{explicitLevels:n,explicitEndpoint:o}=r;if(!o)throw new A("(auto-discovery)");try{let s=e.endsWith("/")?e.slice(0,-1):e,c=o.startsWith("/")?o:`/${o}`;return await t("__forge__.summary",`${s}${c}`)}catch(s){if(n&&n.length>0)return console.warn(`[route-forge] summary endpoint unreachable: ${s.message}; using explicit levels`),null;throw new A("(auto-discovery)")}}function Ie(r){return typeof r=="number"&&r<0?null:r}function ce(r,e,t){let{explicitLevels:n,explicitEager:o,explicitEndpoint:s}=t,c=r.schemeVersion??1;c>1&&console.warn(`[route-forge] backend schemeVersion=${c} > client supported 1; some features may be unavailable`),r.config.endpoint_prefix&&r.config.endpoint_prefix!==s&&(s&&console.warn(`[route-forge] backend endpoint_prefix "${r.config.endpoint_prefix}" overrides frontend endpoint "${s}"`),e.endpoint=r.config.endpoint_prefix),r.config.url_prefix&&(e.urlPrefix=r.config.url_prefix.endsWith("/")?r.config.url_prefix.slice(0,-1):r.config.url_prefix),e.cacheTtl=Ie(r.config.cache_ttl);let u=Object.keys(r.levels),h={};for(let i of u){let l=r.levels[i]?.route;l&&typeof l.uri=="string"&&(h[i]={uri:l.uri,methods:l.methods??["GET","HEAD"]});}if(e.levelRoutes=h,n&&n.length>0){let i=n.filter(p=>u.includes(p)),l=n.filter(p=>!u.includes(p));l.length>0&&console.warn(`[route-forge] levels not in backend summary and dropped: ${l.join(", ")}`),e.levels=i;}else e.levels=u.slice();let f=u.filter(i=>r.levels[i]?.load==="eager");if(!o)e.eager=f;else {let i=new Set([...f,...o]);e.eager=[...i];}}var Me="__ROUTE_FORGE__",W;function Ee(){if(W!==void 0)return W;if(typeof window>"u")return W=null,null;let r;try{r=window[Me];}catch{r=void 0;}return W=r!==null&&typeof r=="object"?r:null,W}var ee=class{constructor(e){this.inflight=new Map;this.invalidationGens=new Map;this.cache=e.cache,this.state=e.state,this.baseURL=e.baseURL,this.fetchMeta=e.fetchMeta,this.autoDiscoveryPromise=e.autoDiscoveryPromise,this.getAutoDiscoveryError=e.getAutoDiscoveryError;}assertLevelDeclared(e){if(!this.state.levels.includes(e))throw new A(e)}async fetchLevel(e){let t=this.state.levelRoutes[e]?.uri,n=t?this.joinBaseAndPath(this.baseURL,t):ve(e,{baseURL:this.baseURL,endpoint:this.state.endpoint});return await this.fetchMeta(`route-forge.${e}`,n,e)}joinBaseAndPath(e,t){let n=e.endsWith("/")?e.slice(0,-1):e,o=t.startsWith("/")?t:`/${t}`;return `${n}${o}`}async loadOne(e){let t=this.getAutoDiscoveryError();if(t)throw t;if(this.assertLevelDeclared(e),!(this.state.cacheTtl===null)&&this.cache.get(e))return;let o=this.inflight.get(e);if(o)return o;let s=this.invalidationGens.get(e)??0,c=(async()=>{try{let u=await this.fetchLevel(e);(this.invalidationGens.get(e)??0)===s&&this.cache.set(u,this.state.cacheTtl);}finally{this.inflight.delete(e);}})();return this.inflight.set(e,c),c}async load(e){await this.autoDiscoveryPromise;let t=Array.isArray(e)?e:[e];await Promise.all(t.map(n=>this.loadOne(n)));}invalidate(e){if(e===void 0){this.cache.clear(),this.inflight.clear();for(let t of this.state.levels)this.invalidationGens.set(t,(this.invalidationGens.get(t)??0)+1);}else if(Array.isArray(e))for(let t of e)this.cache.del(t),this.inflight.delete(t),this.invalidationGens.set(t,(this.invalidationGens.get(t)??0)+1);else this.cache.del(e),this.inflight.delete(e),this.invalidationGens.set(e,(this.invalidationGens.get(e)??0)+1);}isLoaded(e){return e?this.cache.get(e)!==void 0:this.state.levels.length>0&&this.state.levels.every(t=>this.cache.get(t)!==void 0)}findRouteMeta(e,t){let o=this.cache.get(e)?.routes[t];if(o)return {...o,level:e}}getRoutes(e){if(e!==void 0){let o=this.cache.get(e)?.routes??{},s={};for(let[c,u]of Object.entries(o))s[c]=JSON.parse(JSON.stringify(u));return s}let t={};for(let n of this.state.levels){let o=this.cache.get(n);if(o){let s={};for(let[c,u]of Object.entries(o.routes))s[c]=JSON.parse(JSON.stringify(u));t[n]=s;}}return t}};function Fe(r){let{ensureAdapter:e,requestInterceptors:t,responseInterceptors:n,load:o,findRouteMeta:s,baseURL:c,state:u,timeout:h,loadingTracker:f,autoDiscoveryPromise:i}=r;async function l(p,w,d){let{pathParams:v,query:m,body:C,headers:E,timeout:b}=Ce(w);if(d?.aborted)throw new L(p.name,p.level,d.reason);let R=be(p),F=we(X(p,v,{baseURL:c,urlPrefix:u.urlPrefix}),m),J={route:p.name,level:p.level??"",method:R,url:F,headers:{Accept:"application/json",...E??{}},body:C,params:v,timeout:b??h,signal:d,meta:p},I=await e(),M=I.runsInterceptors?J:await K(t,J);if(M.signal?.aborted)throw new L(p.name,p.level,M.signal.reason);f.start();try{let O=I.request(M).then(g=>{if(g.status<200||g.status>=300)throw new q(`HTTP ${g.status} for route "${g.route}" (${g.method} ${g.url})`,{route:g.route,level:g.level,status:g.status,url:g.url,method:g.method});return g},g=>{throw g instanceof P?g:se(g,d)?new L(p.name,p.level,g):new T(g instanceof Error?g.message:String(g),p.name,p.level,g)});return I.runsInterceptors?await O:await Y(n,O)}finally{f.stop();}}return function(w,d,v={}){let m,C=false,E,R=(async()=>{m=new AbortController,C&&m.abort(E),await i,await o(w);let F=s(w,d);if(!F)throw new k(d,w);return l(F,v,m.signal)})();return R.abort=()=>{m?m.abort():C=true;},R}}async function le(r,e,t,n,o="."){if(!n)return t;let s=`${t}${o}${n}`;if(!n.startsWith(`${t}${o}`)||(await r.load(e),r.hasRoute(e,s)))return s;if(r.hasRoute(e,n))return n;throw new k(s,e)}function te(r,e,t,n,o="."){if(!n)return t;let s=`${t}${o}${n}`;if(!n.startsWith(`${t}${o}`)||r.hasRoute(e,s))return s;if(r.hasRoute(e,n))return n;throw new k(s,e)}function xe(r,e){for(let t of Object.keys(e)){let n=e[t];Object.defineProperty(r,t,{value:n!==null&&typeof n=="object"?Object.freeze(n):n,writable:false,enumerable:false,configurable:false});}return r}function ke(r){let{load:e,api:t,route:n,hasRoute:o,getRoutes:s,invalidate:c,isLoaded:u,loadingTracker:h}=r,f={load:e,hasRoute:o};function i(d,v){let m=e(d);m.catch(()=>{});let C=v?(b,R)=>le(f,d,v,b).then(F=>t(d,F,R)):(b,R)=>t(d,b,R),E=C;return xe(E,{level:d,...v!==void 0?{prefix:v}:{},api:C,route:v?(b,R)=>n(d,te(f,d,v,b),R):(b,R)=>n(d,b,R),url:v?(b,R)=>n(d,te(f,d,v,b),R):(b,R)=>n(d,b,R),hasRoute:b=>o(d,b),getRoutes:()=>s(d),load:()=>e(d),invalidate:()=>c(d),isLoaded:()=>u(d),isLoading:()=>h.isLoading(),onLoadingChange:b=>h.subscribe(b)}),Object.defineProperty(E,"levelLoaded",{value:m,writable:false,enumerable:true,configurable:true}),E}function l(d,v,m,C){let E=v.then(()=>d);return m?E.then(m,C).then(()=>d):E}function p(d,v,m){Object.defineProperty(d,"onLevelLoaded",{value:(C,E)=>l(d,v,C,E),writable:false,enumerable:false,configurable:false}),Object.defineProperty(d,"useRoutePrefix",{value:C=>w(m,C),writable:false,enumerable:false,configurable:false});}function w(d,v){let m=i(d,v),C=m.levelLoaded;return p(m,C,d),m}return w}var _e=3e4,$e=3600;function je(r={}){let e=Ee()??r.summary??null;if(!e&&!r.endpoint)throw new TypeError("createRouteForge: \u9700\u8981 options.endpoint\uFF0C\u6216 options.summary\uFF0C\u6216\u9875\u9762\u5185\u5D4C window.__ROUTE_FORGE__");let{adapter:t="auto",timeout:n=_e,baseURL:o="",interceptors:s,cache:c={}}=r,u=new G,h=r.levels,f=r.eager,i=r.endpoint,l={levels:h??[],eager:f??[],endpoint:i??e?.config?.endpoint_prefix??"",urlPrefix:"",cacheTtl:void 0,levelRoutes:{}},p={explicitLevels:h,explicitEager:f,explicitEndpoint:i},w=false,d,v,m=new Promise((a,y)=>{d=a,v=y;});m.catch(()=>{});let C=c.ttl??$e,E=c.storage??"memory",b=new B({storage:E,ttl:C}),R=new S,F=new S;if(s?.request)for(let a of s.request)if(typeof a=="function")R.use(a);else {let[y,x]=a;R.use(y,x);}if(s?.response)for(let a of s.response)if(typeof a=="function")F.use(a);else {let[y,x]=a;F.use(y,x);}let J=ue({adapter:t,forgeInterceptors:{request:R,response:F}}),I=false,M=null;async function O(){return I||(M=await J.catch(a=>{if(a instanceof D)throw a;return ue({adapter:"builtin",forgeInterceptors:{request:R,response:F}})}),I=true),M}function re(){if(!w&&!h?.length)throw new P("Route data not available. Auto-discovery has not completed. Use forge.ready() or forge.use(level) first.",{code:"RF_FE_010"})}async function g(a,y,x=""){let U=await O(),De={route:a,level:x,method:"GET",url:y,headers:{Accept:"application/json"},params:{},timeout:n,meta:{name:a,uri:y,methods:["GET"],parameters:[],level:x}},j=await(U.requestRaw??U.request)(De);if(!j||j.status<200||j.status>=300)throw new q(`Failed to fetch "${a}": HTTP ${j?.status}`,{level:x,status:j?.status,url:y,method:"GET"});return j.data}let _;e?(ce(e,l,p),w=true,_=Promise.resolve()):_=Pe(p,o,g).then(a=>{a!==null&&ce(a,l,p);});let de=null;_.catch(a=>{de=a;});let $=new ee({cache:b,state:l,baseURL:o,fetchMeta:g,autoDiscoveryPromise:_,getAutoDiscoveryError:()=>de}),z=a=>$.load(a),ne=(a,y)=>$.findRouteMeta(a,y),pe=a=>$.invalidate(a),fe=a=>$.isLoaded(a);function ge(a){return a===void 0?$.getRoutes():$.getRoutes(a)}function oe(a,y,x){re();let U=ne(a,y);if(!U)throw new k(y,a);return X(U,x??{},{baseURL:o,urlPrefix:l.urlPrefix})}let he=Fe({ensureAdapter:O,requestInterceptors:R,responseInterceptors:F,load:z,findRouteMeta:ne,baseURL:o,state:l,timeout:n,loadingTracker:u,autoDiscoveryPromise:_});function me(a,y){return re(),ne(a,y)!==void 0}_.then(()=>{if(w=true,l.eager.length>0)return Promise.allSettled(l.eager.map(a=>z(a))).then(a=>{a.forEach((y,x)=>{y.status==="rejected"&&console.error(`[route-forge] eager load failed for level "${l.eager[x]}":`,y.reason);});})}).then(()=>{d(V);}).catch(a=>{v(a);});function qe(a,y){return a?m.then(a,y).then(()=>V):m}let Ae=ke({load:z,api:he,route:oe,hasRoute:me,getRoutes:ge,invalidate:pe,isLoaded:fe,loadingTracker:u}),V={api:he,load:z,route:oe,url:oe,invalidate:pe,isLoaded:fe,hasRoute:me,getRoutes:ge,isLoading:()=>u.isLoading(),onLoadingChange:a=>u.subscribe(a),interceptors:{request:R,response:F},ready:qe,use(a,y){return a===void 0?V:Ae(a,y)}};return V}
2
2
  exports.AdapterNotFoundError=D;exports.ForgeError=P;exports.HTTPError=q;exports.InterceptorManagerImpl=S;exports.InvalidInterceptorReturnError=N;exports.LoadingTracker=G;exports.MissingRouteParamError=H;exports.NetworkError=T;exports.RequestAbortedError=L;exports.RouteCache=B;exports.UnknownLevelError=A;exports.UnknownRouteError=k;exports.createInterceptorManager=Z;exports.createRouteForge=je;exports.resolveRouteName=le;exports.resolveRouteNameSync=te;return exports;})({});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@route-forge/core",
3
- "version": "2.2.0",
3
+ "version": "2.2.1",
4
4
  "description": "框架无关的命名路由客户端核心:分级懒加载、隔离缓存、并发去重、拦截器 / Framework-agnostic named-routes client core: tiered lazy loading, isolated cache, request deduplication, interceptors",
5
5
  "keywords": [
6
6
  "laravel",