ws-dottie
Version:
Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration
26 lines (22 loc) • 8.63 kB
JavaScript
import {r}from'../chunk-6XG5R7U5.mjs';import'../chunk-MNODBI5M.mjs';import'../chunk-BHCHRI6E.mjs';import'../chunk-LAJ7YTDF.mjs';import'../chunk-C4XRSLGU.mjs';import'../chunk-HZ35JY3B.mjs';import'../chunk-TBCN5JT4.mjs';import'../chunk-TMJFE75Z.mjs';import'../chunk-2M3HHUDS.mjs';import'../chunk-43AIOQU3.mjs';import'../chunk-XFM45K3M.mjs';import'../chunk-IKCOELYR.mjs';import'../chunk-IM37ZGVR.mjs';import'../chunk-FU2GNGR7.mjs';import'../chunk-24WBNEYO.mjs';import'../chunk-U247QKAJ.mjs';import'../chunk-TVJBRBUP.mjs';import'../chunk-UONXOKBY.mjs';import'../chunk-ONZTCPT7.mjs';import'../chunk-B3KPAXQV.mjs';import'../chunk-W67F3YTG.mjs';import'../chunk-N2M2TSJW.mjs';import'../chunk-PR5BP6LQ.mjs';import'../chunk-Z2QTVRUV.mjs';import'../chunk-ATMJJIVS.mjs';import'../chunk-LCSGVHHN.mjs';import'../chunk-CMGL7PZH.mjs';import'../chunk-7P7743W2.mjs';import'../chunk-YEVBDDYL.mjs';import'../chunk-NMTJI2FR.mjs';import'../chunk-S2QBHZAH.mjs';import'../chunk-5JFHQU4N.mjs';import'../chunk-NHV2K6QY.mjs';import'../chunk-OSILB2GQ.mjs';import'../chunk-W27HMIHB.mjs';import'../chunk-VNH4AZU6.mjs';import'../chunk-FPY3NF5N.mjs';import {h as h$1,f,g}from'../chunk-QRM6N4Z4.mjs';import'../chunk-OYWJ7UB2.mjs';import'../chunk-Y7ZPKVJH.mjs';import'../chunk-XEHBQAFR.mjs';import {Command}from'commander';import i from'picocolors';h$1();var y=async(e,t,n)=>{let o=n.validation!==false,s=n.jsonp??false?"jsonp":"native",r=process.env.NODE_ENV==="test"?"none":"info";return g({endpoint:e,params:t,fetchMode:s,logMode:r,validate:o})},h=e=>{let t=e.jsonp??false,n=e.validation!==false;return t&&n?"JSONP + validation":t&&!n?"JSONP (no validation)":!t&&n?"native + validation":"native (no validation)"};var u={QUIET_MODES:["quiet","silent"],DEFAULT_PARAMS:"{}"};h$1();var v=(e,t)=>{let n=f(e)||e instanceof Error?e.message:String(e);console.error(i.red(`\u274C Error calling ${t}:`)),console.error(i.yellow(n)),$(e),e instanceof Error&&!f(e)&&e.stack&&process.env.NODE_ENV==="development"&&console.error(i.gray(e.stack)),process.exit(1);},$=e=>{if(f(e)){P(e);return}let t=N(e);A(t);},N=e=>f(e)||e instanceof Error?e.message:String(e),P=e=>{e.status&&e.status>=400?e.status===404?console.error(i.gray("\u{1F4A1} Tip: Check if the endpoint or parameters are correct")):e.status>=500?console.error(i.gray("\u{1F4A1} Tip: The API server may be experiencing issues. Try again later")):e.status===401||e.status===403?console.error(i.gray("\u{1F4A1} Tip: Check your API access permissions")):console.error(i.gray("\u{1F4A1} Tip: Check your request parameters and try again")):e.message.includes("timeout")?console.error(i.gray("\u{1F4A1} Tip: The request timed out. Check your internet connection")):(e.message.includes("network")||e.message.includes("fetch"))&&console.error(i.gray("\u{1F4A1} Tip: Check your internet connection"));},A=e=>{e.includes("Invalid JSON parameters")?console.error(i.gray("\u{1F4A1} Tip: Ensure your parameters are valid JSON")):e.includes("Parameter validation failed")||e.includes("Validation failed")?console.error(i.gray("\u{1F4A1} Tip: Check the function documentation for required parameters")):e.includes("not found")&&console.error(i.gray("\u{1F4A1} Tip: Use --help to see available functions"));},E=(e,t)=>{console.error(i.red(`\u274C Multiple endpoints found with name '${e}':`)),console.error(i.yellow("Please use a fully-qualified name:")),console.error(),t.forEach(n=>{console.error(i.cyan(` ${n.api}:${e}`)),console.error(i.gray(` \u2192 ${n.urlTemplate}`));}),console.error(),console.error(i.gray("\u{1F4A1} Tip: Use the format 'api:endpoint' to specify which endpoint you want"));},w=e=>{let n=r.map(o=>o.functionName);console.error(i.red(`\u274C Function '${e}' not found`)),console.error(i.yellow("Available functions:")),n.forEach(o=>{console.error(i.gray(` ${o}`));});},b=(e,t)=>{let n=e;if(t.limit&&t.limit>0&&Array.isArray(e)&&(n=e.slice(0,t.limit)),t.concise&&Array.isArray(n)){I(n,t);return}let o=d(n);if(t.limit&&t.limit>0&&!Array.isArray(e)){let r=o.split(`
`).slice(0,t.limit);console.log(r.join(`
`));}else console.log(o);},I=(e,t)=>{let n=t.limit&&t.limit>0?e.slice(0,t.limit):e;console.log("["),n.forEach((o,s)=>{let r=s===n.length-1,a=d(o);console.log(` ${a}${r?"":","}`);}),console.log("]");},d=e=>{if(e===null)return i.yellow("null");if(e instanceof Date)return i.green(`"${e.toISOString()}"`);if(Array.isArray(e))return `[${e.map(d).join(",")}]`;switch(typeof e){case "string":return i.green(`"${e}"`);case "number":return i.cyan(String(e));case "boolean":return i.yellow(String(e));case "object":return `{${Object.entries(e).map(([n,o])=>`${i.gray(`"${n}"`)}:${d(o)}`).join(",")}}`;default:return String(e)}},O=e=>{if(!e)return {restore:()=>{}};let t=console.log,n=console.error;return console.log=console.error=()=>{},{restore:()=>{console.log=t,console.error=n;}}};var k=()=>["# Default: native fetch with validation","fetch-dottie vesselBasics","","# Using namespace syntax for disambiguation","fetch-dottie wsf-fares:cacheFlushDate","fetch-dottie wsf-schedule:cacheFlushDate","","# Native fetch without validation (faster, raw data)","fetch-dottie vesselBasics --no-validation","","# JSONP with validation (browser environments)","fetch-dottie vesselBasics --jsonp","","# JSONP without validation (browser environments, raw data)","fetch-dottie vesselBasics --jsonp --no-validation","","# With parameters and pretty printing",`fetch-dottie fareLineItems '{"originTerminalId": 7, "destinationTerminalId": 3}' --pretty`,"","# Quiet mode for scripting","fetch-dottie getBorderCrossings --quiet"],C=(e,t=[])=>{let n=r.map(s=>{let r=s.functionName,c=`${s.api} - ${r}`;return ` ${i.cyan(r)} - ${c}`}).join(`
`);return `
Examples:
${(t.length>0?t:k()).map(s=>` ${s}`).join(`
`)}
Function Names:
Simple: fetch-dottie vesselBasics
Namespace: fetch-dottie wsf-fares:cacheFlushDate (for disambiguation)
Fetch Strategies:
Default: Native fetch with Zod validation (recommended)
--no-validation: Disable validation for faster, raw data access
--jsonp: Use JSONP for browser environments (bypasses CORS)
--jsonp --no-validation: JSONP without validation (browser, raw data)
Available functions:
${n}
For more information about parameters, see the ws-dottie documentation.
`};var S=(e,t)=>{let n=(()=>{if(!e||e.trim()==="")return {};try{return JSON.parse(e)}catch(r){throw new Error(`Invalid JSON parameters: ${r}`)}})(),o=t.sampleParams||{};return Object.keys(n).length>0?n:{...o,...n}};var F=e=>u.QUIET_MODES.some(t=>e[t])||!!e.limit,x=()=>{let e=new Command;e.name("fetch-dottie").description("WSDOT/WSF API client with configurable transport and validation").argument("[function-name]","Name of the function to call").argument("[params]","JSON string of parameters",u.DEFAULT_PARAMS).option("--list","List all available endpoints").option("--pretty","Pretty-print JSON output with 2-space indentation").option("--concise","Concise array output: brackets on own lines, items indented and compact").option("--quiet","Quiet mode: suppress debug output and verbose messages").option("--silent","Silent mode: suppress all output except final JSON result").option("--limit <number>","Truncate output to first N lines (equivalent to --quiet | jq . | head -N)",t=>parseInt(t,10)).option("--jsonp","Use JSONP instead of native fetch (for browser environments)").option("--no-validation","Disable Zod validation (use raw fetch with .NET date conversion)").addHelpText("after",C()),e.action(async(t,n,o)=>{let s=F(o),r=O(s);try{o.list&&j(r.restore),o.list||q(t);let a=J(t,r.restore),c=S(n,a),T=await R(a,c,o,s);r.restore(),b(T,o);}catch(a){r.restore(),v(a,t);}}),e.parse();},j=e=>{e();let n=r.map(o=>{let{functionName:s,api:r}=o,a=`${r} - ${s}`;return ` ${i.cyan(s)} - ${a}`}).join(`
`);console.log("Available endpoints:"),console.log(n),process.exit(0);},L=e=>{let t=e.trim(),n=t.indexOf(":");if(n===-1)return {endpoint:t};let o=t.substring(0,n),s=t.substring(n+1);return {api:o,endpoint:s}},q=e=>{(!e||typeof e!="string"||e.trim()==="")&&(console.error(i.red("\u274C Function name is required")),console.error(i.gray("\u{1F4A1} Tip: Use --help to see available functions")),process.exit(1));},J=(e,t)=>{let{api:n,endpoint:o}=L(e),s=r,r$1;if(n)r$1=s.find(a=>a.api.name===n&&a.functionName===o);else {let a=s.filter(c=>c.functionName===o);a.length===0?r$1=void 0:a.length===1?r$1=a[0]:(t(),E(o,a),process.exit(1));}return r$1||(t(),w(e),process.exit(1)),r$1},R=async(e,t,n,o)=>{if(!o){let s=h(n);console.error(`\u{1F50D} Calling ${e.functionName} (${s})...`);}return await y(e,t,n)};x();//# sourceMappingURL=fetch-dottie.mjs.map
//# sourceMappingURL=fetch-dottie.mjs.map