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.22 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 M,O=a(()=>{M={name:"wsf-schedule",baseUrl:"https://www.wsdot.wa.gov/ferries/api/schedule/rest"};});var E,S=a(()=>{E={name:"wsf-terminals",baseUrl:"https://www.wsdot.wa.gov/ferries/api/terminals/rest"};});var v,T=a(()=>{v={name:"wsf-vessels",baseUrl:"https://www.wsdot.wa.gov/ferries/api/vessels/rest"};});function k(e,t){return {urlTemplate:`${e.baseUrl}${t.endpoint}`,endpoint:t.endpoint,inputSchema:t.inputSchema,outputSchema:t.outputSchema}}var D=a(()=>{});function h(e){let t=k(e.api,e.endpoint);return r=>d$1({endpoint:t,...r})}var m=a(()=>{e();D();});var _,L,G,K,W,j,f,l,H=a(()=>{e$1();I();O();S();T();e();_=new Set(["wsf-fares","wsf-schedule","wsf-terminals","wsf-vessels"]),L={"wsf-fares":C.baseUrl,"wsf-schedule":M.baseUrl,"wsf-terminals":E.baseUrl,"wsf-vessels":v.baseUrl},G=e=>({urlTemplate:`${e}/cacheflushdate`,endpoint:"/cacheflushdate",inputSchema:c,outputSchema:d$2}),K=async(e,t="native")=>{let r=L[e];if(!r)throw new Error(`No base URL found for API: ${e}`);let o=await d$1({endpoint:G(r),fetchMode:t,validate:false,logMode:"none"});return j(o)},W=e=>{let t=`fetchCacheFlushDate${e.replace("wsf-","").split("-").map(r=>r[0].toUpperCase()+r.slice(1)).join("")}`;return `${e}:${t}`},j=e=>e?e instanceof Date?e.toISOString():String(e):"",f=(e,t="native")=>{let r=_.has(e),o=r?W(e):"no-cache-flush";return useQuery({queryKey:[o,t],queryFn:r?()=>K(e,t):()=>Promise.resolve(""),refetchInterval:r?300*1e3:void 0,staleTime:r?300*1e3:void 0,refetchOnWindowFocus:false})},l=(e,t)=>{let r=useQueryClient(),o=q.useRef(null);useEffect(()=>{if(!t?.data)return;let a=t.data;o.current!==null&&o.current!==a&&r.invalidateQueries({queryKey:[e]}),o.current=a;},[t?.data,r,e]);};});var U=a(()=>{H();});var p,F=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 y(e){let{apiName:t,endpointName:r,fetchFn:o,cacheStrategy:a}=e;return t.startsWith("wsf-")&&a==="STATIC"?(n,i)=>{let u=f(t,n?.fetchMode);return l(r,u),useQuery({queryKey:[r,n?.params??null],queryFn:()=>o(n),...p.STATIC,refetchOnWindowFocus:false,...i})}:(n,i)=>useQuery({queryKey:[r,n?.params??null],queryFn:()=>o(n),...p[a],refetchOnWindowFocus:false,...i})}var d=a(()=>{U();F();});function V(e){let{api:t,endpoint:r,getEndpointGroup:o}=e,a=h({api:t,endpoint:r});return {fetch:a,hook:(n,i)=>{let u=o().cacheStrategy;return y({apiName:t.name,endpointName:r.functionName,fetchFn:a,cacheStrategy:u})(n,i)}}}var N=a(()=>{m();d();});var z=a(()=>{N();m();d();F();});
export{C as a,I as b,M as c,O as d,E as e,S as f,v as g,T as h,V as i,z as j};//# sourceMappingURL=chunk-F55G67O2.mjs.map
//# sourceMappingURL=chunk-F55G67O2.mjs.map