PageSourceSearch

https://www.carshippers.ai/assets/route-distance-ensure-CUd_SzJG.js

js carshippers.ai collected 2026-10-05 11:55:46 UTC 3,899 bytes, 2 lines download raw bytes

1import{isConfirmedAtQuotePlaceholder as m}from"./shipping-calculate-D52AJGrp.js";import{ch as y,ap as x,ar as M,bj as $,ci as v}from"./index-xhV5zqee.js";import"./vendor-react-B2yXUpJz.js";import"./vendor-react-dom-jsSkwV1-.js";import"./vendor-tanstack-router-LfX9NekQ.js";import"./vendor-tanstack-query-BOzNBcA8.js";function h(t){let e=t.trim().replace(/\s+/g," ");return e=e.replace(/\s+state$/i,"").trim(),e&&(/,/.test(e)||(e=`${e}, USA`),e)}async function b(t){const e=y;if(!e)return null;const i=`https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(t)}.json?limit=1&country=us&types=place,region,locality,district&access_token=${e}`,n=await fetch(i);if(!n.ok)return null;const a=(await n.json()).features?.[0],s=a?.center;return!s||s.length<2?null:{lng:s[0],lat:s[1],label:a?.text??a?.place_name??t}}async function A(t,e){const i=y;if(!i)return null;const[n,r]=await Promise.all([b(h(t)),b(h(e))]);if(!n||!r)return null;const a=`https://api.mapbox.com/directions/v5/mapbox/driving/${n.lng},${n.lat};${r.lng},${r.lat}?overview=false&access_token=${i}`,s=await fetch(a);if(!s.ok)return null;const o=(await s.json()).routes?.[0];if(!o?.distance||!(o.distance>0))return null;const f=Math.max(1,Math.round(o.distance/1609.344)),p=o.duration!=null&&o.duration>0?Number((o.duration/3600).toFixed(1)):Number((f/67.2).toFixed(1));return{origin:n.label,destination:r.label,distanceMiles:f,durationHours:p,source:"mapbox"}}function k(t){return Array.isArray(t)?t:t&&typeof t=="object"&&Array.isArray(t.data)?t.data:[]}function _(t){return k(t).map(e=>M(e)??e)}function P(t){if(t==null)return null;const e=String(t).replace(/,/g,"").match(/(\d+(?:\.\d+)?)/);if(!e)return null;const i=Number(e[1]);return Number.isFinite(i)&&i>0?Math.round(i):null}function T(t){const e=t?.statsItems;return e?.length?e.find(n=>n.label.toLowerCase().includes("distance"))??null:null}function I(t){return`${Math.round(t).toLocaleString()} mi`}async function F(t){const{overlay:e,route:i}=t,n=T(e);if(n&&!m(n.value)){const o=P(n.value);if(o!=null)return{distanceMiles:o,source:"cms",needsPersist:!1}}const r=!n||m(n.value);if(i.distanceMiles>0)return{distanceMiles:Math.round(i.distanceMiles),source:"static",needsPersist:r};const a=i.origin.name?.trim()??"",s=i.destination.name?.trim()??"";if(!a||!s)return null;const c=await A(a,s);return!c||!(c.distanceMiles>0)?null:{distanceMiles:c.distanceMiles,source:"mapbox",needsPersist:r}}let S=!1;function R(){return v?.trim()||null}async function K(t,e){if(!(e>0)||!t)return!1;const i=R();if(!i)return S||(S=!0,console.warn("[route-distance] STRAPI_TOKEN missing — skip Distance write-back (display overlay still applied)")),!1;const n=x();if(!n)return!1;const r=typeof t.documentId=="string"?t.documentId.trim():"";if(!r)return console.warn("[route-distance] shipping-route documentId missing — skip persist"),!1;const a=_(t.page_sections);if(!a.length)return!1;const s=I(e);let c=!1;const o=a.map(l=>{const u={...l};if(u.__component!=="shared.stats-bar")return u;const w=k(u.statistics).map(g=>{const d={...M(g)??g};return!String(d.label??"").toLowerCase().includes("distance")||!m(String(d.value??""))?d:(c=!0,{...d,value:s})});return{...u,statistics:w}});if(!c)return!1;const f=$(),p=`${n}${f}/${encodeURIComponent(r)}?status=published`;try{const l=await fetch(p,{method:"PUT",headers:{Accept:"application/json","Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify({data:{page_sections:o}})});if(!l.ok){const u=await l.text().catch(()=>"");return console.warn("[route-distance] Strapi Distance persist failed",l.status,u.slice(0,300)),!1}return!0}catch(l){return console.warn("[route-distance] Strapi Distance persist error",l),!1}}export{F as ensureRouteDistanceMiles,I as formatDistanceMilesStat,P as parseMilesFromStatValue,K as persistRouteDistanceToStrapi};
2//# sourceMappingURL=route-distance-ensure-CUd_SzJG.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.