1export const DAY_KEYS=["sun","mon","tue","wed","thu","fri","sat"];const DAY_MS=864e5,NEXT_OPENING_HORIZON_DAYS=30,WEEKDAY_TO_KEY={Sun:"sun",Mon:"mon",Tue:"tue",Wed:"wed",Thu:"thu",Fri:"fri",Sat:"sat"},romeFormatter=new Intl.DateTimeFormat("en-US",{timeZone:"Europe/Rome",weekday:"short",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hourCycle:"h23"}),RECURRING_RX=/^\d{2}-\d{2}$/,DATED_RX=/^\d{4}-\d{2}-\d{2}$/;export function romeParts(date){const parts={};for(const{type,value}of romeFormatter.formatToParts(date))parts[type]=value;return{dayKey:WEEKDAY_TO_KEY[parts.weekday],minutes:parseInt(parts.hour,10)*60+parseInt(parts.minute,10),ymd:`${parts.year}-${parts.month}-${parts.day}`,md:`${parts.month}-${parts.day}`}}export function parseTime(hhmm){if(typeof hhmm!="string")return null;const match=hhmm.match(/^(\d{1,2}):(\d{2})$/);return match?parseInt(match[1],10)*60+parseInt(match[2],10):null}function entryRange(entry){const{from,to}=entry,fromEmpty=from==null||from==="",toEmpty=to==null||to==="";if(fromEmpty&&toEmpty)return null;if(!(typeof from!="string"||typeof to!="string")){if(DATED_RX.test(from)&&DATED_RX.test(to))return{from,to,dated:!0};if(RECURRING_RX.test(from)&&RECURRING_RX.test(to))return{from,to,dated:!1}}}function rangeMatches(range,parts){const day=range.dated?parts.ymd:parts.md;return range.from<=range.to?day>=range.from&&day<=range.to:day>=range.from||day<=range.to}function dayOfYear(md){const[month,day]=md.split("-");return Date.UTC(2001,parseInt(month,10)-1,parseInt(day,10))/864e5}function rangeSpanDays(range){let span;return range.dated?(span=(Date.parse(`${range.to}T00:00:00Z`)-Date.parse(`${range.from}T00:00:00Z`))/864e5,span<0&&(span+=366)):(span=dayOfYear(range.to)-dayOfYear(range.from),span<0&&(span+=365)),span}export function resolveSchedule(data,parts){if(!data||typeof data!="object")return null;if(!Array.isArray(data))return data;let best=null,bestKind=1/0,bestSpan=1/0;return data.forEach(entry=>{if(!entry||typeof entry!="object"||Array.isArray(entry))return;const range=entryRange(entry);if(range===void 0)return;let kind,span;if(range===null)kind=2,span=1/0;else{if(!rangeMatches(range,parts))return;kind=range.dated?0:1,span=rangeSpanDays(range)}(kind<bestKind||kind===bestKind&&span<bestSpan)&&(best=entry,bestKind=kind,bestSpan=span)}),best}function rangesFor(data,parts){const schedule=resolveSchedule(data,parts),ranges=schedule&&schedule[parts.dayKey];return Array.isArray(ranges)?ranges:[]}export function openStateAt(data,date){const parts=romeParts(date),current=rangesFor(data,parts).find(range=>{const open=parseTime(range&&range.open),close=parseTime(range&&range.close);return open!=null&&close!=null&&parts.minutes>=open&&parts.minutes<close});return current?{open:!0,closesAt:current.close}:{open:!1,nextOpen:findNextOpening(data,date)}}function romeNoonAnchor(date,parts){return date.getTime()-parts.minutes*60*1e3+720*60*1e3}export function findNextOpening(data,date){const nowParts=romeParts(date),noon=romeNoonAnchor(date,nowParts);for(let offset=0;offset<=30;offset+=1){const parts=offset===0?nowParts:romeParts(new Date(noon+offset*864e5));for(const range of rangesFor(data,parts)){const open=parseTime(range&&range.open);if(open!=null&&!(offset===0&&open<=nowParts.minutes))return{open:range.open,dayOffset:offset}}}return null}export function openOnWeekend(data,date){const noon=romeNoonAnchor(date,romeParts(date));for(let offset=0;offset<7;offset+=1){const parts=romeParts(new Date(noon+offset*864e5));if(!(parts.dayKey!=="sat"&&parts.dayKey!=="sun")&&rangesFor(data,parts).some(range=>range&&range.open&&range.close))return!0}return!1} 2//# sourceMappingURL=/cdn/shop/t/173/assets/store-hours.js.map?v=142392176373815954661789479104
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.