ws-dottie
Version:
Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration
3 lines • 3.21 kB
JavaScript
import {e,d as d$1}from'./chunk-Y7XUJYLQ.mjs';import {e as e$1,d as d$2,c}from'./chunk-FKVJZJHV.mjs';import {a}from'./chunk-XEHBQAFR.mjs';import {useQuery,useQueryClient}from'@tanstack/react-query';import q,{useEffect}from'react';var C,I=a(()=>{C={name:"wsf-fares",baseUrl:"https://www.wsdot.wa.gov/ferries/api/fares/rest"};});var O,S=a(()=>{O={name:"wsf-schedule",baseUrl:"https://www.wsdot.wa.gov/ferries/api/schedule/rest"};});var M,E=a(()=>{M={name:"wsf-terminals",baseUrl:"https://www.wsdot.wa.gov/ferries/api/terminals/rest"};});var v,H=a(()=>{v={name:"wsf-vessels",baseUrl:"https://www.wsdot.wa.gov/ferries/api/vessels/rest"};});function T(e,t){return {urlTemplate:`${e.baseUrl}${t.endpoint}`,endpoint:t.endpoint,inputSchema:t.inputSchema,outputSchema:t.outputSchema}}var k=a(()=>{});function u(e){let t=T(e.api,e.endpoint);return r=>d$1({endpoint:t,...r})}var m=a(()=>{e();k();});var _,L,K,W,j,V,f,l,D=a(()=>{e$1();I();S();E();H();e();_=new Set(["wsf-fares","wsf-schedule","wsf-terminals","wsf-vessels"]),L={"wsf-fares":C.baseUrl,"wsf-schedule":O.baseUrl,"wsf-terminals":M.baseUrl,"wsf-vessels":v.baseUrl},K=e=>({urlTemplate:`${e}/cacheflushdate`,endpoint:"/cacheflushdate",inputSchema:c,outputSchema:d$2}),W=async(e,t="native")=>{let r=L[e];if(!r)throw new Error(`No base URL found for API: ${e}`);let s=await d$1({endpoint:K(r),fetchMode:t,validate:false,logMode:"none"});return V(s)},j=e=>{let t=`fetchCacheFlushDate${e.replace("wsf-","").split("-").map(r=>r[0].toUpperCase()+r.slice(1)).join("")}`;return `${e}:${t}`},V=e=>e?e instanceof Date?e.toISOString():String(e):"",f=(e,t="native")=>{let r=_.has(e),s=r?j(e):"no-cache-flush";return useQuery({queryKey:[s,t],queryFn:r?()=>W(e,t):()=>Promise.resolve(""),refetchInterval:r?300*1e3:void 0,staleTime:r?300*1e3:void 0,refetchOnWindowFocus:false})},l=(e,t)=>{let r=useQueryClient(),s=q.useRef(null);useEffect(()=>{if(!t?.data)return;let o=t.data;s.current!==null&&s.current!==o&&r.invalidateQueries({queryKey:[e]}),s.current=o;},[t?.data,r,e]);};});var U=a(()=>{D();});var p,y=a(()=>{p={REALTIME:{staleTime:5e3,gcTime:36e5,refetchInterval:5e3,retry:2,retryDelay:5e3},FREQUENT:{staleTime:3e5,gcTime:36e5,refetchInterval:3e5,retry:3,retryDelay:5e3},MODERATE:{staleTime:36e5,gcTime:1728e5,refetchInterval:36e5,retry:3,retryDelay:6e4},STATIC:{staleTime:864e5,gcTime:1728e5,refetchInterval:864e5,retry:2,retryDelay:5e3}};});function F(e){let{apiName:t,endpointName:r,fetchFn:s,cacheStrategy:o}=e;return t.startsWith("wsf-")&&o==="STATIC"?(n,i)=>{let h=f(t,n?.fetchMode);return l(r,h),useQuery({queryKey:[r,n?.params??null],queryFn:()=>s(n),...p.STATIC,refetchOnWindowFocus:false,...i})}:(n,i)=>useQuery({queryKey:[r,n?.params??null],queryFn:()=>s(n),...p[o],refetchOnWindowFocus:false,...i})}var d=a(()=>{U();y();});function z(e){let{api:t,endpoint:r,getCacheStrategy:s}=e,o=u({api:t,endpoint:r});return {fetch:o,useHook:(n,i)=>{let h=s();return F({apiName:t.name,endpointName:r.functionName,fetchFn:o,cacheStrategy:h})(n,i)}}}var N=a(()=>{m();d();});var B=a(()=>{N();m();d();y();});
export{C as a,I as b,O as c,S as d,M as e,E as f,v as g,H as h,z as i,B as j};//# sourceMappingURL=chunk-DOBO2Q4R.mjs.map
//# sourceMappingURL=chunk-DOBO2Q4R.mjs.map