UNPKG

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) 9.54 kB
#!/usr/bin/env node 'use strict';var chunk2E4URJAD_js=require('../chunk-2E4URJAD.js');require('../chunk-ZGHAQCXB.js'),require('../chunk-Q6AGCOY2.js'),require('../chunk-X53RCA2Q.js'),require('../chunk-T72YAZ3C.js'),require('../chunk-VSHMU3YU.js'),require('../chunk-MY6IJPFI.js'),require('../chunk-ANJE5TIZ.js'),require('../chunk-6EEPTGWY.js'),require('../chunk-YPSD6HMU.js'),require('../chunk-O5Z5N4SK.js'),require('../chunk-3WMYSBZ6.js'),require('../chunk-G4PJ24FU.js'),require('../chunk-QDWK72CG.js'),require('../chunk-CLVN6RRS.js'),require('../chunk-PTMH7TE5.js'),require('../chunk-BM4MF46V.js'),require('../chunk-U3WRL5AN.js'),require('../chunk-SDPD2MDJ.js'),require('../chunk-LBTBTUJX.js'),require('../chunk-364MX7M2.js'),require('../chunk-H6E25RTH.js'),require('../chunk-BDAZ7BVG.js'),require('../chunk-G4IN3ELL.js'),require('../chunk-YA4OUADO.js'),require('../chunk-YI6XABV5.js'),require('../chunk-COSMNAQ7.js'),require('../chunk-ZKPQXWLZ.js'),require('../chunk-WL62AP2S.js'),require('../chunk-45M3IGAM.js'),require('../chunk-FEOMCHFU.js'),require('../chunk-2B4HUVJE.js'),require('../chunk-MEAEQ2MP.js'),require('../chunk-CMR4HQZV.js'),require('../chunk-SWFS2CXR.js'),require('../chunk-2PDD22YA.js'),require('../chunk-YH2IDLXA.js');var chunk3SKBQ6PR_js=require('../chunk-3SKBQ6PR.js');require('../chunk-O5KYHHVM.js'),require('../chunk-VTADX4C6.js'),require('../chunk-XD2OIZAB.js');var commander=require('commander'),i=require('picocolors');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var i__default=/*#__PURE__*/_interopDefault(i);chunk3SKBQ6PR_js.h();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 chunk3SKBQ6PR_js.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:"{}"};chunk3SKBQ6PR_js.h();var v=(e,t)=>{let n=chunk3SKBQ6PR_js.f(e)||e instanceof Error?e.message:String(e);console.error(i__default.default.red(`\u274C Error calling ${t}:`)),console.error(i__default.default.yellow(n)),$(e),e instanceof Error&&!chunk3SKBQ6PR_js.f(e)&&e.stack&&process.env.NODE_ENV==="development"&&console.error(i__default.default.gray(e.stack)),process.exit(1);},$=e=>{if(chunk3SKBQ6PR_js.f(e)){P(e);return}let t=N(e);A(t);},N=e=>chunk3SKBQ6PR_js.f(e)||e instanceof Error?e.message:String(e),P=e=>{e.status&&e.status>=400?e.status===404?console.error(i__default.default.gray("\u{1F4A1} Tip: Check if the endpoint or parameters are correct")):e.status>=500?console.error(i__default.default.gray("\u{1F4A1} Tip: The API server may be experiencing issues. Try again later")):e.status===401||e.status===403?console.error(i__default.default.gray("\u{1F4A1} Tip: Check your API access permissions")):console.error(i__default.default.gray("\u{1F4A1} Tip: Check your request parameters and try again")):e.message.includes("timeout")?console.error(i__default.default.gray("\u{1F4A1} Tip: The request timed out. Check your internet connection")):(e.message.includes("network")||e.message.includes("fetch"))&&console.error(i__default.default.gray("\u{1F4A1} Tip: Check your internet connection"));},A=e=>{e.includes("Invalid JSON parameters")?console.error(i__default.default.gray("\u{1F4A1} Tip: Ensure your parameters are valid JSON")):e.includes("Parameter validation failed")||e.includes("Validation failed")?console.error(i__default.default.gray("\u{1F4A1} Tip: Check the function documentation for required parameters")):e.includes("not found")&&console.error(i__default.default.gray("\u{1F4A1} Tip: Use --help to see available functions"));},E=(e,t)=>{console.error(i__default.default.red(`\u274C Multiple endpoints found with name '${e}':`)),console.error(i__default.default.yellow("Please use a fully-qualified name:")),console.error(),t.forEach(n=>{console.error(i__default.default.cyan(` ${n.api}:${e}`)),console.error(i__default.default.gray(` \u2192 ${n.urlTemplate}`));}),console.error(),console.error(i__default.default.gray("\u{1F4A1} Tip: Use the format 'api:endpoint' to specify which endpoint you want"));},w=e=>{let n=chunk2E4URJAD_js.r.map(o=>o.functionName);console.error(i__default.default.red(`\u274C Function '${e}' not found`)),console.error(i__default.default.yellow("Available functions:")),n.forEach(o=>{console.error(i__default.default.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__default.default.yellow("null");if(e instanceof Date)return i__default.default.green(`"${e.toISOString()}"`);if(Array.isArray(e))return `[${e.map(d).join(",")}]`;switch(typeof e){case "string":return i__default.default.green(`"${e}"`);case "number":return i__default.default.cyan(String(e));case "boolean":return i__default.default.yellow(String(e));case "object":return `{${Object.entries(e).map(([n,o])=>`${i__default.default.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=chunk2E4URJAD_js.r.map(s=>{let r=s.functionName,c=`${s.api} - ${r}`;return ` ${i__default.default.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 commander.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=chunk2E4URJAD_js.r.map(o=>{let{functionName:s,api:r}=o,a=`${r} - ${s}`;return ` ${i__default.default.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__default.default.red("\u274C Function name is required")),console.error(i__default.default.gray("\u{1F4A1} Tip: Use --help to see available functions")),process.exit(1));},J=(e,t)=>{let{api:n,endpoint:o}=L(e),s=chunk2E4URJAD_js.r,r;if(n)r=s.find(a=>a.api.name===n&&a.functionName===o);else {let a=s.filter(c=>c.functionName===o);a.length===0?r=void 0:a.length===1?r=a[0]:(t(),E(o,a),process.exit(1));}return r||(t(),w(e),process.exit(1)),r},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.js.map //# sourceMappingURL=fetch-dottie.js.map