ws-dottie
Version:
Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration
10 lines • 11.6 kB
JavaScript
import {e,c}from'./chunk-C3ZUMU65.mjs';import {a}from'./chunk-XEHBQAFR.mjs';import xe from'json5';import ye from'picocolors';import {z as z$1}from'zod';var Me,W,Be,_e,qe,He,J,V=a(()=>{Me="https://www.wsdot.wa.gov",W={apiKey:process.env.WSDOT_ACCESS_TOKEN||"",domain:process.env.WSDOT_BASE_URL||Me},Be=()=>W.apiKey,_e=()=>W.domain,qe=e=>{W.apiKey=e;},He=e=>{W.domain=e;},J={getApiKey:Be,getDomain:_e,setApiKey:qe,setBaseUrl:He};});var ze=a(()=>{V();e();});var m,ie=a(()=>{m=class extends Error{constructor(r,n){super(`${r} at position ${n}`),this.position=n;}};});function ae(e){return /^[0-9A-Fa-f]$/.test(e)}function b(e){return e>="0"&&e<="9"}function ce(e){return e>=" "}function v(e){return `,:[]/{}()
+`.includes(e)}function Q(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"||e==="_"||e==="$"}function K(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"||e==="_"||e==="$"||e>="0"&&e<="9"}function _(e){return `,[]/{}
+`.includes(e)}function q(e){return D(e)||Ze.test(e)}function ue(e){return e===`
`||e==="\r"||e===" "||e==="\b"||e==="\f"}function y(e,r){let n=e.charCodeAt(r);return n===32||n===10||n===9||n===13}function le(e,r){let n=e.charCodeAt(r);return n===32||n===9||n===13}function pe(e,r){let n=e.charCodeAt(r);return n===160||n>=8192&&n<=8202||n===8239||n===8287||n===12288}function D(e){return H(e)||R(e)}function H(e){return e==='"'||e==="\u201C"||e==="\u201D"}function z(e){return e==='"'}function R(e){return e==="'"||e==="\u2018"||e==="\u2019"||e==="`"||e==="\xB4"}function Z(e){return e==="'"}function O(e,r){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:false,a=e.lastIndexOf(r);return a!==-1?e.substring(0,a)+(n?"":e.substring(a+1)):e}function g(e,r){let n=e.length;if(!y(e,n-1))return e+r;for(;y(e,n-1);)n--;return e.substring(0,n)+r+e.substring(n)}function fe(e,r,n){return e.substring(0,r)+e.substring(r+n)}function de(e){return /[,\n][ \t\r]*$/.test(e)}var M,B,Ze,ge=a(()=>{M=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,B=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;Ze=/^[[{\w-]$/;});function Y(e){let r=0,n="";k(["```","[```","{```"]),o()||Ve(),k(["```","```]","```}"]);let u=E(",");for(u&&s(),q(e[r])&&de(n)?(u||(n=g(n,",")),Re()):u&&(n=O(n,","));e[r]==="}"||e[r]==="]";)r++,s();if(r>=e.length)return n;Je();function o(){s();let t=Ue()||We()||N()||Fe()||Ie()||ee(false)||Le();return s(),t}function s(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:true,i=r,c=f(t);do c=h(),c&&(c=f(t));while(c);return r>i}function f(t){let i=t?y:le,c="";for(;;)if(i(e,r))c+=e[r],r++;else if(pe(e,r))c+=" ",r++;else break;return c.length>0?(n+=c,true):false}function h(){if(e[r]==="/"&&e[r+1]==="*"){for(;r<e.length&&!Xe(e,r);)r++;return r+=2,true}if(e[r]==="/"&&e[r+1]==="/"){for(;r<e.length&&e[r]!==`
`;)r++;return true}return false}function k(t){if(T(t)){if(Q(e[r]))for(;r<e.length&&K(e[r]);)r++;return s(),true}return false}function T(t){f(true);for(let i of t){let c=r+i.length;if(e.slice(r,c)===i)return r=c,true}return false}function E(t){return e[r]===t?(n+=e[r],r++,true):false}function w(t){return e[r]===t?(r++,true):false}function Pe(){return w("\\")}function X(){return s(),e[r]==="."&&e[r+1]==="."&&e[r+2]==="."?(r+=3,s(),w(","),true):false}function Ue(){if(e[r]==="{"){n+="{",r++,s(),w(",")&&s();let t=true;for(;r<e.length&&e[r]!=="}";){let i;if(t?(i=true,t=false):(i=E(","),i||(n=g(n,",")),s()),X(),!(N()||ee(true))){e[r]==="}"||e[r]==="{"||e[r]==="]"||e[r]==="["||e[r]===void 0?n=O(n,","):Qe();break}s();let U=E(":"),C=r>=e.length;U||(q(e[r])||C?n=g(n,":"):ne()),o()||(U||C?n+="null":ne());}return e[r]==="}"?(n+="}",r++):n=g(n,"}"),true}return false}function We(){if(e[r]==="["){n+="[",r++,s(),w(",")&&s();let t=true;for(;r<e.length&&e[r]!=="]";)if(t?t=false:E(",")||(n=g(n,",")),X(),!o()){n=O(n,",");break}return e[r]==="]"?(n+="]",r++):n=g(n,"]"),true}return false}function Re(){let t=true,i=true;for(;i;)t?t=false:E(",")||(n=g(n,",")),i=o();i||(n=O(n,",")),n=`[
${n}
]`;}function N(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:false,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1,c=e[r]==="\\";if(c&&(r++,c=true),D(e[r])){let U=z(e[r])?z:Z(e[r])?Z:R(e[r])?R:H,C=r,A=n.length,l='"';for(r++;;){if(r>=e.length){let p=re(r-1);return !t&&v(e.charAt(p))?(r=C,n=n.substring(0,A),N(true)):(l=g(l,'"'),n+=l,true)}if(r===i)return l=g(l,'"'),n+=l,true;if(U(e[r])){let p=r,j=l.length;if(l+='"',r++,n+=l,s(false),t||r>=e.length||v(e[r])||D(e[r])||b(e[r]))return x(),true;let S=re(p-1),te=e.charAt(S);if(te===",")return r=C,n=n.substring(0,A),N(false,S);if(v(te))return r=C,n=n.substring(0,A),N(true);n=n.substring(0,A),r=p+1,l=`${l.substring(0,j)}\\${l.substring(j)}`;}else if(t&&_(e[r])){if(e[r-1]===":"&&M.test(e.substring(C+1,r+2)))for(;r<e.length&&B.test(e[r]);)l+=e[r],r++;return l=g(l,'"'),n+=l,x(),true}else if(e[r]==="\\"){let p=e.charAt(r+1);if(Ge[p]!==void 0)l+=e.slice(r,r+2),r+=2;else if(p==="u"){let S=2;for(;S<6&&ae(e[r+S]);)S++;S===6?(l+=e.slice(r,r+6),r+=6):r+S>=e.length?r=e.length:Ke();}else l+=p,r+=2;}else {let p=e.charAt(r);p==='"'&&e[r-1]!=="\\"?(l+=`\\${p}`,r++):ue(p)?(l+=Ye[p],r++):(ce(p)||je(p),l+=p,r++);}c&&Pe();}}return false}function x(){let t=false;for(s();e[r]==="+";){t=true,r++,s(),n=O(n,'"',true);let i=n.length;N()?n=fe(n,i,1):n=g(n,'"');}return t}function Fe(){let t=r;if(e[r]==="-"){if(r++,P())return L(t),true;if(!b(e[r]))return r=t,false}for(;b(e[r]);)r++;if(e[r]==="."){if(r++,P())return L(t),true;if(!b(e[r]))return r=t,false;for(;b(e[r]);)r++;}if(e[r]==="e"||e[r]==="E"){if(r++,(e[r]==="-"||e[r]==="+")&&r++,P())return L(t),true;if(!b(e[r]))return r=t,false;for(;b(e[r]);)r++;}if(!P())return r=t,false;if(r>t){let i=e.slice(t,r),c=/^0\d/.test(i);return n+=c?`"${i}"`:i,true}return false}function Ie(){return $("true","true")||$("false","false")||$("null","null")||$("True","true")||$("False","false")||$("None","null")}function $(t,i){return e.slice(r,r+t.length)===t?(n+=i,r+=t.length,true):false}function ee(t){let i=r;if(Q(e[r])){for(;r<e.length&&K(e[r]);)r++;let c=r;for(;y(e,c);)c++;if(e[c]==="(")return r=c+1,o(),e[r]===")"&&(r++,e[r]===";"&&r++),true}for(;r<e.length&&!_(e[r])&&!D(e[r])&&(!t||e[r]!==":");)r++;if(e[r-1]===":"&&M.test(e.substring(i,r+2)))for(;r<e.length&&B.test(e[r]);)r++;if(r>i){for(;y(e,r-1)&&r>0;)r--;let c=e.slice(i,r);return n+=c==="undefined"?"null":JSON.stringify(c),e[r]==='"'&&r++,true}}function Le(){if(e[r]==="/"){let t=r;for(r++;r<e.length&&(e[r]!=="/"||e[r-1]==="\\");)r++;return r++,n+=`"${e.substring(t,r)}"`,true}}function re(t){let i=t;for(;i>0&&y(e,i);)i--;return i}function P(){return r>=e.length||v(e[r])||y(e,r)}function L(t){n+=`${e.slice(t,r)}0`;}function je(t){throw new m(`Invalid character ${JSON.stringify(t)}`,r)}function Je(){throw new m(`Unexpected character ${JSON.stringify(e[r])}`,r)}function Ve(){throw new m("Unexpected end of json string",e.length)}function Qe(){throw new m("Object key expected",r)}function ne(){throw new m("Colon expected",r)}function Ke(){let t=e.slice(r,r+6);throw new m(`Invalid unicode character "${t}"`,r)}}function Xe(e,r){return e[r]==="*"&&e[r+1]==="/"}var Ye,Ge,he=a(()=>{ie();ge();Ye={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},Ge={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:`
`,r:"\r",t:" "};});var me=a(()=>{he();});var we,Se=a(()=>{me();we=e=>{try{return JSON.parse(e)}catch(r){try{let n=xe.parse(e);if(typeof n=="string"&&n===e)throw r;return n}catch{try{let a=Y(e),u=JSON.parse(a);if(typeof u=="string"&&u===e)throw r;return u}catch{throw r}}}};});var be,Ee,Ce=a(()=>{be=(e,r)=>{let n=e.split("/").pop()||e,a=r?JSON.stringify(r):"none",u=ye.blue(`Calling ${n} with parameters ${a}...`);console.log(u);},Ee=(e,r,n)=>{let a=Date.now()-r,u=Array.isArray(e)?e.length:1,o=(a/1e3).toFixed(1),s=(n/1024).toFixed(1),f=ye.green(` Retrieved ${u} objects in ${o} sec (${s} kb).`);console.log(f);};});var ke,er,rr,nr,tr,or,G,Ne=a(()=>{V();ke=(e,r)=>{if(!r){let[E]=e.split("?"),w=E.match(/\{[^}]+\}/g);if(w&&w.length>0)throw new Error(`Missing required URL parameters: ${w.join(", ")} in URL template: ${e}`);return e}let n=r,{path:a,query:u}=er(e),o=rr(a,n),s=nr(u,n),f=s?`${o}?${s}`:o,[h]=f.split("?"),k=h.match(/\{[^}]+\}/g);if(k&&k.length>0)throw new Error(`Missing required URL parameters: ${k.join(", ")} in URL: ${f}`);let T=new URL(f);return tr(T),T.toString()},er=e=>{let[r,n=""]=e.split("?");return {path:r,query:n}},rr=(e,r)=>{let n=e;for(let[a,u]of Object.entries(r)){let o=G(u);n=n.replace(`{${a}}`,o);}return n},nr=(e,r)=>{let n=e;for(let[o,s]of Object.entries(r))if(s!=null){let f=G(s);n=n.replace(new RegExp(`\\{${o}\\}`,"g"),f);}let a=n.match(/\{[^}]+\}/g);if(a&&a.length>0){for(let o of a){let s=o.slice(1,-1);n=n.replace(new RegExp(`[&?]${s}=${o}`,"g"),""),n=n.replace(new RegExp(`${o}=[^&]*&?`,"g"),""),n=n.replace(new RegExp(`&${o}=[^&]*`,"g"),"");}n=n.replace(/\{[^}]+\}/g,""),n=n.replace(/&&/g,"&"),n=n.replace(/[&?]$/,""),n=n.replace(/\?&/,"?");}let u=new URLSearchParams(n);for(let[o,s]of Object.entries(r))s!=null&&!u.has(o)&&u.set(o,G(s));return u.toString()},tr=e=>{let r=or(e.toString()),n=J.getApiKey(),a=r==="wsdot"?"AccessCode":"apiaccesscode";e.searchParams.set(a,n);},or=e=>e.toLowerCase().includes("/traffic/")?"wsdot":"wsf",G=e=>e instanceof Date?e.toISOString():String(e);});var F,ir,ar,I=a(()=>{F=(e,r)=>{let{message:n,status:a}=ar(e);return {name:"ApiError",message:n,status:a,context:{timestamp:new Date,endpoint:r,url:r}}},ir=e=>e!==null&&typeof e=="object"&&"name"in e&&e.name==="ApiError",ar=e=>{if(e instanceof Error&&e.name==="ZodError"){let r=e;return {message:`Validation failed:
${z$1.prettifyError(r)}`}}if(e instanceof Error){let r=e.message.match(/HTTP (\d+)/),n=r?parseInt(r[1],10):void 0;return {message:e.message,status:n}}return {message:"An unexpected error occurred"}};});var $e,Oe,Ae=a(()=>{$e=async e=>{let r=await fetch(e);if(!r.ok)throw new Error(`HTTP ${r.status}: ${r.statusText}`);return r.text()},Oe=async e=>new Promise((r,n)=>{if(!document?.head){n(new Error("DOM environment not available"));return}let a=document.createElement("script"),u=`jsonp_${Date.now()}_${Math.random().toString(36).substring(2,11)}`,o=false,s=()=>{if(!o){o=true;try{a.parentNode?.removeChild(a);}catch{}window[u]&&delete window[u];}};setTimeout(()=>{s(),n(new Error("JSONP request timed out after 30 seconds"));},3e4);window[u]=h=>{s(),r(JSON.stringify(h));},a.onerror=()=>{s(),n(new Error("JSONP script failed to load"));},a.src=`${e}${e.includes("?")?"&":"?"}callback=${encodeURIComponent(u)}`,document.head.appendChild(a);});});var ve,De=a(()=>{Se();Ce();Ne();I();Ae();ve=async(e,r,n="none",a="native")=>{let u=Date.now();n!=="none"&&be(e.endpoint,r);try{let o=ke(e.urlTemplate,r);n!=="none"&&console.log(`Fetching: ${o}`);let f=await(a==="jsonp"?Oe:$e)(o),h=we(f);return n!=="none"&&Ee(h,u,f.length),h}catch(o){throw F(o,e.endpoint)}};});var cr,Te=a(()=>{e();De();I();cr=async({endpoint:e,params:r,fetchMode:n="native",logMode:a="none",validate:u=false})=>{try{if(u&&r){if(!e.inputSchema)throw new Error("Validation requires schemas. This endpoint was built without schemas. Use the full build or import schemas from the /schemas subpath.");e.inputSchema.parse(r);}let o=await ve(e,r,a,n);if(u){if(!e.outputSchema)throw new Error("Validation requires schemas. This endpoint was built without schemas. Use the full build or import schemas from the /schemas subpath.");return e.outputSchema.parse(o)}else return c(o)}catch(o){throw o&&typeof o=="object"&&"name"in o&&o.name==="ApiError"?o:F(o,e.endpoint)}};});var ur=a(()=>{Te();I();});export{J as a,ze as b,ir as c,cr as d,ur as e};//# sourceMappingURL=chunk-2FPG2HTT.mjs.map
//# sourceMappingURL=chunk-2FPG2HTT.mjs.map