@weatherboard/cms 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -0
- package/dist/next.cjs +4 -2
- package/dist/next.cjs.map +4 -4
- package/dist/next.d.cts +2 -0
- package/dist/next.d.mts +2 -0
- package/dist/next.d.ts +2 -0
- package/dist/next.mjs +4 -2
- package/dist/next.mjs.map +4 -4
- package/dist/runtime/site-readers.d.cts +164 -0
- package/dist/runtime/site-readers.d.mts +164 -0
- package/dist/runtime/site-readers.d.ts +164 -0
- package/dist/runtime/test-fixtures/saved-documents.d.cts +81 -0
- package/dist/runtime/test-fixtures/saved-documents.d.mts +81 -0
- package/dist/runtime/test-fixtures/saved-documents.d.ts +81 -0
- package/dist/server.cjs +4 -2
- package/dist/server.cjs.map +4 -4
- package/dist/server.d.cts +2 -0
- package/dist/server.d.mts +2 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.mjs +4 -2
- package/dist/server.mjs.map +4 -4
- package/package.json +3 -2
package/dist/next.d.cts
CHANGED
|
@@ -5,3 +5,5 @@ export type { TypeToTags, RevalidateRouteOptions, CmsRouteHandler, CmsRevalidate
|
|
|
5
5
|
export { MENU_LAYOUTS, MENU_DECORATIONS, MENU_LAYOUT_DEFAULTS, parseMenuDocument, menuTags } from "./portable/menu.cjs";
|
|
6
6
|
export { menuQuery } from "./contracts/query.cjs";
|
|
7
7
|
export type { MenuDocument, MenuVariant, MenuSection, MenuItem, MenuPrice, MenuExtra, MenuMoney, MenuLayout, MenuDecoration, MenuSectionInput } from "./portable/menu.cjs";
|
|
8
|
+
export { resolveWithFallback, parseVacancyDocument, parseVacancies, vacancyTags, openVacanciesQuery, parseLocationDocument, parseBusinessLocation, locationTags, locationsQuery, businessLocationsQuery, parseScheduleDocument, scheduleTags, scheduleQuery } from "./runtime/site-readers.cjs";
|
|
9
|
+
export type { Vacancy, LocationFields, BusinessLocationLike, ScheduleStop, WeeklyScheduleInput } from "./runtime/site-readers.cjs";
|
package/dist/next.d.mts
CHANGED
|
@@ -5,3 +5,5 @@ export type { TypeToTags, RevalidateRouteOptions, CmsRouteHandler, CmsRevalidate
|
|
|
5
5
|
export { MENU_LAYOUTS, MENU_DECORATIONS, MENU_LAYOUT_DEFAULTS, parseMenuDocument, menuTags } from "./portable/menu.mjs";
|
|
6
6
|
export { menuQuery } from "./contracts/query.mjs";
|
|
7
7
|
export type { MenuDocument, MenuVariant, MenuSection, MenuItem, MenuPrice, MenuExtra, MenuMoney, MenuLayout, MenuDecoration, MenuSectionInput } from "./portable/menu.mjs";
|
|
8
|
+
export { resolveWithFallback, parseVacancyDocument, parseVacancies, vacancyTags, openVacanciesQuery, parseLocationDocument, parseBusinessLocation, locationTags, locationsQuery, businessLocationsQuery, parseScheduleDocument, scheduleTags, scheduleQuery } from "./runtime/site-readers.mjs";
|
|
9
|
+
export type { Vacancy, LocationFields, BusinessLocationLike, ScheduleStop, WeeklyScheduleInput } from "./runtime/site-readers.mjs";
|
package/dist/next.d.ts
CHANGED
|
@@ -5,3 +5,5 @@ export type { TypeToTags, RevalidateRouteOptions, CmsRouteHandler, CmsRevalidate
|
|
|
5
5
|
export { MENU_LAYOUTS, MENU_DECORATIONS, MENU_LAYOUT_DEFAULTS, parseMenuDocument, menuTags } from "./portable/menu.js";
|
|
6
6
|
export { menuQuery } from "./contracts/query.js";
|
|
7
7
|
export type { MenuDocument, MenuVariant, MenuSection, MenuItem, MenuPrice, MenuExtra, MenuMoney, MenuLayout, MenuDecoration, MenuSectionInput } from "./portable/menu.js";
|
|
8
|
+
export { resolveWithFallback, parseVacancyDocument, parseVacancies, vacancyTags, openVacanciesQuery, parseLocationDocument, parseBusinessLocation, locationTags, locationsQuery, businessLocationsQuery, parseScheduleDocument, scheduleTags, scheduleQuery } from "./runtime/site-readers.js";
|
|
9
|
+
export type { Vacancy, LocationFields, BusinessLocationLike, ScheduleStop, WeeklyScheduleInput } from "./runtime/site-readers.js";
|
package/dist/next.mjs
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import"server-only";function
|
|
1
|
+
import"server-only";function U(e){if(!Array.isArray(e))return!1;for(let n=0;n<e.length;n+=1)if(!Object.hasOwn(e,n))return!1;return!0}var v=["stacked","columns"],j=["none","playful"],P={layout:"stacked",decoration:"none"},O=`_type, _id, _rev, _updatedAt, title, locationKeys, note, signOff,
|
|
2
2
|
variants[]{_key, label, note, sections[]{_key, title, service, items[]{
|
|
3
3
|
_key, name, description, priceNote, dietary, allergenNote, availability,
|
|
4
4
|
prices[]{_key, label, amount{minor, currency}}, extras[]{_key, name, amount{minor, currency}}
|
|
5
|
-
}}}`;function W(e,n){return w(e,{types:["menu"],...n===void 0?{}:{ids:[n]}})}function d(e,n){throw new T("menu",[`${e} ${n}`])}function N(e,n,t=new Set,o){if(e===null||typeof e=="string"||typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e))return e;if(typeof e!="object"||e===null)return d(n,"is not plain JSON data");try{if(t.has(e))return d(n,"is not acyclic JSON data");let r=Array.isArray(e),i=Object.getPrototypeOf(e);if(r?i!==Array.prototype:i!==Object.prototype&&i!==null)return d(n,"is not an ordinary saved object");t.add(e);let l=Reflect.ownKeys(e),c=r?[]:{},u=0,m=0;for(let s of l){if(typeof s!="string")return d(n,"has a symbol key");let a=r&&s!=="length"?`${n}[${s}]`:`${n}.${s}`,p;try{p=s==="_id"&&o!==void 0?o:Object.getOwnPropertyDescriptor(e,s)}catch{return d(a,"could not be snapshotted as plain JSON data")}if(!p||!Object.hasOwn(p,"value"))return d(a,"is not a saved data property");if(r&&s==="length"){let k=p.value;if(typeof k!="number"||!Number.isSafeInteger(k)||k<0)return d(a,"is not a saved list length");u=k;continue}if(!p.enumerable||r&&!/^(0|[1-9]\d*)$/.test(s))return d(a,"is not a JSON data property");let f=p.value,g=N(f,a,t);Object.defineProperty(c,s,{value:g,enumerable:!0,writable:!0,configurable:!0}),m++}return r&&(m!==u||c.length!==u)?d(n,"is not a complete saved list"):c}catch(r){if(r instanceof T)throw r;return d(n,"could not be snapshotted as plain JSON data")}finally{t.delete(e)}}function C(e,n){return e===null||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null?d(n,"is not an ordinary saved object"):e}function y(e,n,t=!0){return typeof e!="string"||t&&e.trim()===""?d(n,"is not saved text"):e}function S(e,n,t){return e[n]===void 0||e[n]===null?{}:{[n]:y(e[n],`${t}.${n}`,!1)}}function _(e,n,t){return e==null?[]:v(e)?e.map((o,r)=>t(o,`${n}[${String(r)}]`)):d(n,"is not a complete saved list")}function P(e,n){let t=C(e,n);if(typeof t.minor!="number"||!Number.isSafeInteger(t.minor)||t.minor<0)return d(`${n}.minor`,"is not a whole non-negative safe amount");let o=y(t.currency,`${n}.currency`);return/^[A-Z]{3}$/.test(o)?{minor:t.minor,currency:o}:d(`${n}.currency`,"is not a three-letter currency code")}function G(e,n){let t=C(e,n);return{_key:y(t._key,`${n}._key`),amount:P(t.amount,`${n}.amount`),...S(t,"label",n)}}function Z(e,n){let t=C(e,n);return{_key:y(t._key,`${n}._key`),name:y(t.name,`${n}.name`),amount:P(t.amount,`${n}.amount`)}}function V(e,n){let t=C(e,n),o=t.availability??"available";return o!=="available"&&o!=="sold-out"&&o!=="hidden"?d(`${n}.availability`,"is not an availability choice"):{_key:y(t._key,`${n}._key`),name:y(t.name,`${n}.name`),...S(t,"description",n),...S(t,"priceNote",n),...S(t,"allergenNote",n),prices:_(t.prices,`${n}.prices`,G),extras:_(t.extras,`${n}.extras`,Z),dietary:_(t.dietary,`${n}.dietary`,y),availability:o}}function K(e,n){let t=C(e,n);return{_key:y(t._key,`${n}._key`),title:y(t.title,`${n}.title`),...S(t,"service",n),items:_(t.items,`${n}.items`,V)}}function X(e,n){let t=C(e,n);return{_key:y(t._key,`${n}._key`),label:y(t.label,`${n}.label`),...S(t,"note",n),sections:_(t.sections,`${n}.sections`,K)}}function ee(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let n=e._id;return typeof n=="string"&&n.trim()!==""&&!/^(drafts|versions)\./.test(n)}function E(e,n="menu"){return ne(N(e,n),n)}function ne(e,n){let t=C(e,n);if(t._type!=="menu")return d(`${n}._type`,"is not menu");if(!ee(t))return d(`${n}._id`,"is not a published menu identity");let o=y(t._updatedAt,`${n}._updatedAt`);if(!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/.test(o)||!Number.isFinite(Date.parse(o)))return d(`${n}._updatedAt`,"is not an update date");let r=_(t.variants,`${n}.variants`,X);return r.length===0?d(`${n}.variants`,"has no menu choices"):{_type:"menu",_id:y(t._id,`${n}._id`),_rev:y(t._rev,`${n}._rev`),_updatedAt:o,title:y(t.title,`${n}.title`),locationKeys:_(t.locationKeys,`${n}.locationKeys`,y),variants:r,...S(t,"note",n),...Object.hasOwn(t,"signOff")?{signOff:t.signOff}:{}}}function U(e){if(e===null)return!0;try{return E(e),!0}catch{return!1}}var L="malformed-content",T=class extends Error{code=L;documentId;problems;constructor(n,t){super(`${L}: ${n}: ${t.join("; ")}`),this.name="MalformedContentError",this.documentId=n,this.problems=t}};var q=`{..., "sections": coalesce(sections[]{..., _type == "menuBlock" => {menu->{${R}}}, _type == "linkListBlock" => {links[]{..., "page": page->{title, "slug": slug.current}}}}, sections)}`,Te=`*[_type == "page" && defined(slug.current)]|order(slug.current asc)${q}`,Ae=`*[_type == "page" && slug.current == $slug][0]${q}`;var te=/^[A-Za-z][A-Za-z0-9_]{0,63}$/,oe=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/,re=/^[a-z0-9]{6,12}\.[a-z][a-z0-9_-]{0,63}$/;function H(e){if(!e||!Array.isArray(e.types)||e.types.length===0)throw new TypeError("CMS dependencies require document types");let n=[...e.types];for(let o of n)if(typeof o!="string"||!te.test(o))throw new TypeError("Invalid CMS document type");if(e.ids!==void 0&&!Array.isArray(e.ids))throw new TypeError("Invalid CMS document IDs");let t=e.ids===void 0?void 0:[...e.ids];for(let o of t??[])if(typeof o!="string"||!oe.test(o)||/^(drafts|versions)\./.test(o))throw new TypeError("Invalid CMS document ID");if(new Set(n).size+new Set(t).size>128)throw new TypeError("Too many CMS tags");return Object.freeze({types:Object.freeze(n),...t===void 0?{}:{ids:Object.freeze(t)}})}function D(e){if(!e||typeof e.name!="string"||!/^[A-Za-z][A-Za-z0-9_.-]{0,127}$/.test(e.name)||typeof e.query!="string"||e.query.trim()===""||typeof e.resolve!="function")throw new TypeError("Invalid CMS query configuration");let n=e.params;if(!n||typeof n!="object"||Object.getPrototypeOf(n)!==Object.prototype&&Object.getPrototypeOf(n)!==null)throw new TypeError("CMS params must be plain JSON scalars");let t={};for(let o of Reflect.ownKeys(n)){let r=Object.getOwnPropertyDescriptor(n,o);if(typeof o!="string"||!r||!Object.hasOwn(r,"value")||!r.enumerable)throw new TypeError("CMS params must be plain JSON scalars");let i=r.value;if(!(i===null||typeof i=="string"||typeof i=="boolean"||typeof i=="number"&&Number.isFinite(i)))throw new TypeError("CMS params must be plain JSON scalars");Object.defineProperty(t,o,{value:i,enumerable:!0})}return Object.freeze({name:e.name,query:e.query,params:Object.freeze(t),dependencies:H(e.dependencies),resolve:e.resolve})}function w(e,n){if(typeof e!="string"||e.length>77||!re.test(e))throw new TypeError("Invalid CMS scope");let t=H(n),o=[...[...new Set(t.types)].sort().map(r=>`cms:${e}:type:${r}`),...[...new Set(t.ids??[])].sort().map(r=>`cms:${e}:id:${r}`)];return Object.freeze(o)}function ie(e){return D({name:"menu.v1",query:`*[_type == "menu" && _id == $id && !(_id in path("drafts.**")) && !(_id in path("versions.**"))][0]{${R}}`,params:{id:e},dependencies:{types:["menu"],ids:[e]},resolve:(n,t)=>{if(!U(t)||t!==null&&t._id!==e)throw new TypeError("Invalid CMS menu fallback");if(n==null)return{data:t,fallbackFields:["$"]};let o=E(n);if(o._id!==e)throw new T("menu",["menu._id does not match the requested document"]);return{data:o,fallbackFields:[]}}})}function B(e){if(!e||!Object.hasOwn(e,"data")||!Array.isArray(e.fallbackFields)||![...e.fallbackFields].every(n=>typeof n=="string"&&(n==="$"||/^[A-Za-z][A-Za-z0-9_.[\]-]{0,127}$/.test(n))))throw new TypeError("Invalid CMS resolution");if(e.warnings!==void 0&&(!Array.isArray(e.warnings)||![...e.warnings].every(n=>n==="siteHero.layout.defaulted"||n==="siteHero.tagline.dropped"||n==="siteHero.taglines.defaulted")))throw new TypeError("Invalid CMS resolution warnings");return{data:e.data,fallbackFields:Object.freeze([...new Set(e.fallbackFields)]),...e.warnings?.length?{warnings:Object.freeze([...new Set(e.warnings)])}:{}}}function z(e){let n=e?.revalidateSeconds??3600;if(!Number.isSafeInteger(n)||n<3600||!e?.adapter||typeof e.adapter.read!="function"||e.onDiagnostic!==void 0&&typeof e.onDiagnostic!="function")throw new TypeError("Invalid CMS reader configuration");let t=e.adapter;w(t.scope,{types:["ScopeValidation"]});let o=r=>{try{e.onDiagnostic?e.onDiagnostic(r):console.warn(JSON.stringify(r))}catch{}};return{async read(r,i){let l,c,u;try{if(l=D(r),u=w(t.scope,l.dependencies),!i||!Object.hasOwn(i,"fallback"))throw new TypeError;c=B(l.resolve(null,i.fallback))}catch{throw new TypeError("Invalid CMS query or fallback configuration")}let m=(p,f,g)=>(o({event:"cms.fallback",query:l.name,reason:p,fields:["$"],...f===void 0?{}:{status:f},...g?{warnings:g}:{}}),{data:c.data,source:"fallback",fallbackFields:["$"],reason:p,...g?{warnings:g}:{}}),s;try{s=await t.read({name:l.name,query:l.query,params:l.params},{tags:u,revalidateSeconds:n})}catch{return m("network")}if(!s.ok){let f=["configuration","network","timeout","rate-limit","upstream","plan-limit","permission","malformed"].includes(s.reason)?s.reason:"malformed",g=Number.isInteger(s.status)&&(s.status??0)>=100&&(s.status??0)<=599?s.status:void 0;return m(f,g)}if(s.value===null||s.value===void 0)return m("missing");let a;try{a=B(l.resolve(s.value,i.fallback))}catch{return m("malformed")}return a.fallbackFields.includes("$")?{...m("invalid-field",void 0,a.warnings),data:a.data}:a.fallbackFields.length>0?(o({event:"cms.partial-fallback",query:l.name,reason:"invalid-field",fields:a.fallbackFields,...a.warnings?{warnings:a.warnings}:{}}),{...a,source:"mixed",reason:"invalid-field"}):{...a,source:"cms"}}}}var se=z;import{revalidateTag as ue}from"next/cache.js";var j="sanity-webhook-signature",ae=/^t=(\d+)[, ]+v1=([^, ]+)$/;var F=new TextEncoder;function le(e){return crypto.subtle.importKey("raw",F.encode(e),{name:"HMAC",hash:"SHA-256"},!1,["sign","verify"])}function ce(e){if(!/^[A-Za-z0-9_-]+={0,2}$/.test(e))return null;let n=e.replace(/-/g,"+").replace(/_/g,"/");try{let t=atob(n),o=new Uint8Array(t.length);for(let r=0;r<t.length;r+=1)o[r]=t.charCodeAt(r);return o}catch{return null}}async function J(e){let{secret:n,rawBody:t,headers:o}=e,r=e.now??Date.now(),i=e.toleranceMs??3e5;if(!n||n.length===0)return{ok:!1,reason:"no-secret"};let l=o.get(j);if(!l)return{ok:!1,reason:"no-signature"};let c=ae.exec(l.trim());if(c===null)return{ok:!1,reason:"malformed-signature"};let u=Number(c[1]),m=c[2]??"";if(!Number.isSafeInteger(u))return{ok:!1,reason:"malformed-signature"};if(u<16094592e5)return{ok:!1,reason:"stale-timestamp"};if(Math.abs(r-u)>i)return{ok:!1,reason:"stale-timestamp"};let s=ce(m);if(s===null)return{ok:!1,reason:"malformed-signature"};let a=await le(n);return await crypto.subtle.verify("HMAC",a,s,F.encode(`${u}.${t}`))?{ok:!0}:{ok:!1,reason:"bad-signature"}}var de=16*1024,ye=1500,pe=new TextEncoder;function h(e,n,t={},o=!1){return new Response(o?null:JSON.stringify(n),{status:e,headers:{"Content-Type":"application/json","Cache-Control":"no-store",...t}})}function fe(e,n){if(!n||typeof n!="object"||Array.isArray(n)||Object.keys(n).length===0)throw new TypeError("Invalid CMS invalidation mapping");let t=Object.create(null);for(let o of Reflect.ownKeys(n)){let r=Object.getOwnPropertyDescriptor(n,o);if(typeof o!="string"||!r?.enumerable||!Object.hasOwn(r,"value"))throw new TypeError("Invalid CMS invalidation mapping");let i=r.value;if(!Array.isArray(i)||!i.includes(o))throw new TypeError("Invalid CMS invalidation mapping");w(e,{types:i,ids:["validation"]}),t[o]=Object.freeze([...i])}for(let o of Object.values(t))if(o.some(r=>!Object.hasOwn(t,r)))throw new TypeError("Invalid CMS invalidation mapping");return Object.freeze(t)}function Y(e){return typeof e=="string"&&e.trim()!==""&&pe.encode(e).byteLength>=32}var A=class extends Error{constructor(t){super("Invalid CMS webhook body");this.status=t}status};async function me(e){let n=e.body?.getReader();if(!n)return"";let t=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}),o,r=new Promise((i,l)=>{o=setTimeout(()=>l(new A(400)),ye)});try{let i=0,l="";for(;;){let{done:c,value:u}=await Promise.race([n.read(),r]);if(c)return l+t.decode();if(i+=u.byteLength,i>de)throw new A(413);l+=t.decode(u,{stream:!0})}}catch(i){throw n.cancel().catch(()=>{}),i}finally{clearTimeout(o),n.releaseLock()}}function ge(e){let n=e.scope,t=fe(n,e.typeToTags),o=e.secretEnv??"SANITY_REVALIDATE_SECRET",r=e.previousSecretEnv??"SANITY_REVALIDATE_SECRET_PREVIOUS",i=e.env??(()=>process.env),l=e.now??Date.now,c=async u=>{if(u.method!=="POST")return h(405,{error:"Method not allowed"},{Allow:"POST"},u.method==="HEAD");let m,s;try{let b=i(),O=b[o],$=b[r];if(!Y(O)||$!==void 0&&!Y($))throw new Error;m=O,s=$}catch{return h(503,{error:"COULD NOT ANSWER: revalidation configuration unavailable"})}let a=u.headers.get(j);if(!a||a.length>512||!/^t=\d+[, ]+v1=[A-Za-z0-9_-]+={0,2}$/.test(a.trim()))return h(401,{error:"Unauthorized"});let p;try{p=await me(u)}catch(b){return b instanceof A&&b.status===413?h(413,{error:"Payload too large"}):h(400,{error:"Invalid body"})}try{let b=l();if(!Number.isFinite(b))throw new Error;if(!(await Promise.all([m,...s===void 0?[]:[s]].map($=>J({secret:$,rawBody:p,headers:u.headers,now:b})))).some($=>$.ok))return h(401,{error:"Unauthorized"})}catch{return h(401,{error:"Unauthorized"})}let f;try{f=JSON.parse(p)}catch{return h(400,{error:"Invalid payload"})}if(!f||typeof f!="object"||Array.isArray(f)||Object.keys(f).length!==2||!Object.hasOwn(f,"_type")||!Object.hasOwn(f,"_id"))return h(400,{error:"Invalid payload"});let{_type:g,_id:k}=f;if(typeof g!="string"||!/^[A-Za-z][A-Za-z0-9_]{0,63}$/.test(g)||typeof k!="string"||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(k))return h(400,{error:"Invalid payload"});if(!Object.hasOwn(t,g)||/^(drafts|versions)\./.test(k))return h(400,{error:"Unsupported document"});let Q=w(n,{types:t[g],ids:[k]});try{for(let b of Q)ue(b,{expire:0})}catch{return h(500,{error:"Could not revalidate"})}return h(200,{revalidated:!0})};return Object.freeze({POST:c,GET:c,HEAD:c,PUT:c,PATCH:c,DELETE:c,OPTIONS:c})}export{x as MENU_DECORATIONS,I as MENU_LAYOUTS,M as MENU_LAYOUT_DEFAULTS,se as createNextCmsReader,ge as createRevalidateRoute,ie as menuQuery,W as menuTags,E as parseMenuDocument};
|
|
5
|
+
}}}`;function ie(e,n){return S(e,{types:["menu"],...n===void 0?{}:{ids:[n]}})}function f(e,n){throw new R("menu",[`${e} ${n}`])}function F(e,n,t=new Set,o){if(e===null||typeof e=="string"||typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e))return e;if(typeof e!="object"||e===null)return f(n,"is not plain JSON data");try{if(t.has(e))return f(n,"is not acyclic JSON data");let r=Array.isArray(e),s=Object.getPrototypeOf(e);if(r?s!==Array.prototype:s!==Object.prototype&&s!==null)return f(n,"is not an ordinary saved object");t.add(e);let u=Reflect.ownKeys(e),y=r?[]:{},a=0,p=0;for(let i of u){if(typeof i!="string")return f(n,"has a symbol key");let c=r&&i!=="length"?`${n}[${i}]`:`${n}.${i}`,d;try{d=i==="_id"&&o!==void 0?o:Object.getOwnPropertyDescriptor(e,i)}catch{return f(c,"could not be snapshotted as plain JSON data")}if(!d||!Object.hasOwn(d,"value"))return f(c,"is not a saved data property");if(r&&i==="length"){let k=d.value;if(typeof k!="number"||!Number.isSafeInteger(k)||k<0)return f(c,"is not a saved list length");a=k;continue}if(!d.enumerable||r&&!/^(0|[1-9]\d*)$/.test(i))return f(c,"is not a JSON data property");let l=d.value,m=F(l,c,t);Object.defineProperty(y,i,{value:m,enumerable:!0,writable:!0,configurable:!0}),p++}return r&&(p!==a||y.length!==a)?f(n,"is not a complete saved list"):y}catch(r){if(r instanceof R)throw r;return f(n,"could not be snapshotted as plain JSON data")}finally{t.delete(e)}}function A(e,n){return e===null||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null?f(n,"is not an ordinary saved object"):e}function g(e,n,t=!0){return typeof e!="string"||t&&e.trim()===""?f(n,"is not saved text"):e}function C(e,n,t){return e[n]===void 0||e[n]===null?{}:{[n]:g(e[n],`${t}.${n}`,!1)}}function T(e,n,t){return e==null?[]:U(e)?e.map((o,r)=>t(o,`${n}[${String(r)}]`)):f(n,"is not a complete saved list")}function q(e,n){let t=A(e,n);if(typeof t.minor!="number"||!Number.isSafeInteger(t.minor)||t.minor<0)return f(`${n}.minor`,"is not a whole non-negative safe amount");let o=g(t.currency,`${n}.currency`);return/^[A-Z]{3}$/.test(o)?{minor:t.minor,currency:o}:f(`${n}.currency`,"is not a three-letter currency code")}function le(e,n){let t=A(e,n);return{_key:g(t._key,`${n}._key`),amount:q(t.amount,`${n}.amount`),...C(t,"label",n)}}function ae(e,n){let t=A(e,n);return{_key:g(t._key,`${n}._key`),name:g(t.name,`${n}.name`),amount:q(t.amount,`${n}.amount`)}}function ue(e,n){let t=A(e,n),o=t.availability??"available";return o!=="available"&&o!=="sold-out"&&o!=="hidden"?f(`${n}.availability`,"is not an availability choice"):{_key:g(t._key,`${n}._key`),name:g(t.name,`${n}.name`),...C(t,"description",n),...C(t,"priceNote",n),...C(t,"allergenNote",n),prices:T(t.prices,`${n}.prices`,le),extras:T(t.extras,`${n}.extras`,ae),dietary:T(t.dietary,`${n}.dietary`,g),availability:o}}function ce(e,n){let t=A(e,n);return{_key:g(t._key,`${n}._key`),title:g(t.title,`${n}.title`),...C(t,"service",n),items:T(t.items,`${n}.items`,ue)}}function de(e,n){let t=A(e,n);return{_key:g(t._key,`${n}._key`),label:g(t.label,`${n}.label`),...C(t,"note",n),sections:T(t.sections,`${n}.sections`,ce)}}function ye(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let n=e._id;return typeof n=="string"&&n.trim()!==""&&!/^(drafts|versions)\./.test(n)}function D(e,n="menu"){return pe(F(e,n),n)}function pe(e,n){let t=A(e,n);if(t._type!=="menu")return f(`${n}._type`,"is not menu");if(!ye(t))return f(`${n}._id`,"is not a published menu identity");let o=g(t._updatedAt,`${n}._updatedAt`);if(!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/.test(o)||!Number.isFinite(Date.parse(o)))return f(`${n}._updatedAt`,"is not an update date");let r=T(t.variants,`${n}.variants`,de);return r.length===0?f(`${n}.variants`,"has no menu choices"):{_type:"menu",_id:g(t._id,`${n}._id`),_rev:g(t._rev,`${n}._rev`),_updatedAt:o,title:g(t.title,`${n}.title`),locationKeys:T(t.locationKeys,`${n}.locationKeys`,g),variants:r,...C(t,"note",n),...Object.hasOwn(t,"signOff")?{signOff:t.signOff}:{}}}function H(e){if(e===null)return!0;try{return D(e),!0}catch{return!1}}var B="malformed-content",R=class extends Error{code=B;documentId;problems;constructor(n,t){super(`${B}: ${n}: ${t.join("; ")}`),this.name="MalformedContentError",this.documentId=n,this.problems=t}};var z=`{..., "sections": coalesce(sections[]{..., _type == "menuBlock" => {menu->{${O}}}, _type == "linkListBlock" => {links[]{..., "page": page->{title, "slug": slug.current}}}}, sections)}`,Xe=`*[_type == "page" && defined(slug.current)]|order(slug.current asc)${z}`,en=`*[_type == "page" && slug.current == $slug][0]${z}`;var fe=/^[A-Za-z][A-Za-z0-9_]{0,63}$/,me=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/,ge=/^[a-z0-9]{6,12}\.[a-z][a-z0-9_-]{0,63}$/;function Q(e){if(!e||!Array.isArray(e.types)||e.types.length===0)throw new TypeError("CMS dependencies require document types");let n=[...e.types];for(let o of n)if(typeof o!="string"||!fe.test(o))throw new TypeError("Invalid CMS document type");if(e.ids!==void 0&&!Array.isArray(e.ids))throw new TypeError("Invalid CMS document IDs");let t=e.ids===void 0?void 0:[...e.ids];for(let o of t??[])if(typeof o!="string"||!me.test(o)||/^(drafts|versions)\./.test(o))throw new TypeError("Invalid CMS document ID");if(new Set(n).size+new Set(t).size>128)throw new TypeError("Too many CMS tags");return Object.freeze({types:Object.freeze(n),...t===void 0?{}:{ids:Object.freeze(t)}})}function E(e){if(!e||typeof e.name!="string"||!/^[A-Za-z][A-Za-z0-9_.-]{0,127}$/.test(e.name)||typeof e.query!="string"||e.query.trim()===""||typeof e.resolve!="function")throw new TypeError("Invalid CMS query configuration");let n=e.params;if(!n||typeof n!="object"||Object.getPrototypeOf(n)!==Object.prototype&&Object.getPrototypeOf(n)!==null)throw new TypeError("CMS params must be plain JSON scalars");let t={};for(let o of Reflect.ownKeys(n)){let r=Object.getOwnPropertyDescriptor(n,o);if(typeof o!="string"||!r||!Object.hasOwn(r,"value")||!r.enumerable)throw new TypeError("CMS params must be plain JSON scalars");let s=r.value;if(!(s===null||typeof s=="string"||typeof s=="boolean"||typeof s=="number"&&Number.isFinite(s)))throw new TypeError("CMS params must be plain JSON scalars");Object.defineProperty(t,o,{value:s,enumerable:!0})}return Object.freeze({name:e.name,query:e.query,params:Object.freeze(t),dependencies:Q(e.dependencies),resolve:e.resolve})}function S(e,n){if(typeof e!="string"||e.length>77||!ge.test(e))throw new TypeError("Invalid CMS scope");let t=Q(n),o=[...[...new Set(t.types)].sort().map(r=>`cms:${e}:type:${r}`),...[...new Set(t.ids??[])].sort().map(r=>`cms:${e}:id:${r}`)];return Object.freeze(o)}function he(e){return E({name:"menu.v1",query:`*[_type == "menu" && _id == $id && !(_id in path("drafts.**")) && !(_id in path("versions.**"))][0]{${O}}`,params:{id:e},dependencies:{types:["menu"],ids:[e]},resolve:(n,t)=>{if(!H(t)||t!==null&&t._id!==e)throw new TypeError("Invalid CMS menu fallback");if(n==null)return{data:t,fallbackFields:["$"]};let o=D(n);if(o._id!==e)throw new R("menu",["menu._id does not match the requested document"]);return{data:o,fallbackFields:[]}}})}function V(e){if(!e||!Object.hasOwn(e,"data")||!Array.isArray(e.fallbackFields)||![...e.fallbackFields].every(n=>typeof n=="string"&&(n==="$"||/^[A-Za-z][A-Za-z0-9_.[\]-]{0,127}$/.test(n))))throw new TypeError("Invalid CMS resolution");if(e.warnings!==void 0&&(!Array.isArray(e.warnings)||![...e.warnings].every(n=>n==="siteHero.layout.defaulted"||n==="siteHero.tagline.dropped"||n==="siteHero.taglines.defaulted")))throw new TypeError("Invalid CMS resolution warnings");return{data:e.data,fallbackFields:Object.freeze([...new Set(e.fallbackFields)]),...e.warnings?.length?{warnings:Object.freeze([...new Set(e.warnings)])}:{}}}function Z(e){let n=e?.revalidateSeconds??3600;if(!Number.isSafeInteger(n)||n<3600||!e?.adapter||typeof e.adapter.read!="function"||e.onDiagnostic!==void 0&&typeof e.onDiagnostic!="function")throw new TypeError("Invalid CMS reader configuration");let t=e.adapter;S(t.scope,{types:["ScopeValidation"]});let o=r=>{try{e.onDiagnostic?e.onDiagnostic(r):console.warn(JSON.stringify(r))}catch{}};return{async read(r,s){let u,y,a;try{if(u=E(r),a=S(t.scope,u.dependencies),!s||!Object.hasOwn(s,"fallback"))throw new TypeError;y=V(u.resolve(null,s.fallback))}catch{throw new TypeError("Invalid CMS query or fallback configuration")}let p=(d,l,m)=>(o({event:"cms.fallback",query:u.name,reason:d,fields:["$"],...l===void 0?{}:{status:l},...m?{warnings:m}:{}}),{data:y.data,source:"fallback",fallbackFields:["$"],reason:d,...m?{warnings:m}:{}}),i;try{i=await t.read({name:u.name,query:u.query,params:u.params},{tags:a,revalidateSeconds:n})}catch{return p("network")}if(!i.ok){let l=["configuration","network","timeout","rate-limit","upstream","plan-limit","permission","malformed"].includes(i.reason)?i.reason:"malformed",m=Number.isInteger(i.status)&&(i.status??0)>=100&&(i.status??0)<=599?i.status:void 0;return p(l,m)}if(i.value===null||i.value===void 0)return p("missing");let c;try{c=V(u.resolve(i.value,s.fallback))}catch{return p("malformed")}return c.fallbackFields.includes("$")?{...p("invalid-field",void 0,c.warnings),data:c.data}:c.fallbackFields.length>0?(o({event:"cms.partial-fallback",query:u.name,reason:"invalid-field",fields:c.fallbackFields,...c.warnings?{warnings:c.warnings}:{}}),{...c,source:"mixed",reason:"invalid-field"}):{...c,source:"cms"}}}}var be=Z;import{revalidateTag as we}from"next/cache.js";var L="sanity-webhook-signature",ke=/^t=(\d+)[, ]+v1=([^, ]+)$/;var J=new TextEncoder;function Se(e){return crypto.subtle.importKey("raw",J.encode(e),{name:"HMAC",hash:"SHA-256"},!1,["sign","verify"])}function $e(e){if(!/^[A-Za-z0-9_-]+={0,2}$/.test(e))return null;let n=e.replace(/-/g,"+").replace(/_/g,"/");try{let t=atob(n),o=new Uint8Array(t.length);for(let r=0;r<t.length;r+=1)o[r]=t.charCodeAt(r);return o}catch{return null}}async function W(e){let{secret:n,rawBody:t,headers:o}=e,r=e.now??Date.now(),s=e.toleranceMs??3e5;if(!n||n.length===0)return{ok:!1,reason:"no-secret"};let u=o.get(L);if(!u)return{ok:!1,reason:"no-signature"};let y=ke.exec(u.trim());if(y===null)return{ok:!1,reason:"malformed-signature"};let a=Number(y[1]),p=y[2]??"";if(!Number.isSafeInteger(a))return{ok:!1,reason:"malformed-signature"};if(a<16094592e5)return{ok:!1,reason:"stale-timestamp"};if(Math.abs(r-a)>s)return{ok:!1,reason:"stale-timestamp"};let i=$e(p);if(i===null)return{ok:!1,reason:"malformed-signature"};let c=await Se(n);return await crypto.subtle.verify("HMAC",c,i,J.encode(`${a}.${t}`))?{ok:!0}:{ok:!1,reason:"bad-signature"}}var _e=16*1024,Ce=1500,Te=new TextEncoder;function b(e,n,t={},o=!1){return new Response(o?null:JSON.stringify(n),{status:e,headers:{"Content-Type":"application/json","Cache-Control":"no-store",...t}})}function Ae(e,n){if(!n||typeof n!="object"||Array.isArray(n)||Object.keys(n).length===0)throw new TypeError("Invalid CMS invalidation mapping");let t=Object.create(null);for(let o of Reflect.ownKeys(n)){let r=Object.getOwnPropertyDescriptor(n,o);if(typeof o!="string"||!r?.enumerable||!Object.hasOwn(r,"value"))throw new TypeError("Invalid CMS invalidation mapping");let s=r.value;if(!Array.isArray(s)||!s.includes(o))throw new TypeError("Invalid CMS invalidation mapping");S(e,{types:s,ids:["validation"]}),t[o]=Object.freeze([...s])}for(let o of Object.values(t))if(o.some(r=>!Object.hasOwn(t,r)))throw new TypeError("Invalid CMS invalidation mapping");return Object.freeze(t)}function Y(e){return typeof e=="string"&&e.trim()!==""&&Te.encode(e).byteLength>=32}var I=class extends Error{constructor(t){super("Invalid CMS webhook body");this.status=t}status};async function Re(e){let n=e.body?.getReader();if(!n)return"";let t=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}),o,r=new Promise((s,u)=>{o=setTimeout(()=>u(new I(400)),Ce)});try{let s=0,u="";for(;;){let{done:y,value:a}=await Promise.race([n.read(),r]);if(y)return u+t.decode();if(s+=a.byteLength,s>_e)throw new I(413);u+=t.decode(a,{stream:!0})}}catch(s){throw n.cancel().catch(()=>{}),s}finally{clearTimeout(o),n.releaseLock()}}function Ee(e){let n=e.scope,t=Ae(n,e.typeToTags),o=e.secretEnv??"SANITY_REVALIDATE_SECRET",r=e.previousSecretEnv??"SANITY_REVALIDATE_SECRET_PREVIOUS",s=e.env??(()=>process.env),u=e.now??Date.now,y=async a=>{if(a.method!=="POST")return b(405,{error:"Method not allowed"},{Allow:"POST"},a.method==="HEAD");let p,i;try{let $=s(),M=$[o],_=$[r];if(!Y(M)||_!==void 0&&!Y(_))throw new Error;p=M,i=_}catch{return b(503,{error:"COULD NOT ANSWER: revalidation configuration unavailable"})}let c=a.headers.get(L);if(!c||c.length>512||!/^t=\d+[, ]+v1=[A-Za-z0-9_-]+={0,2}$/.test(c.trim()))return b(401,{error:"Unauthorized"});let d;try{d=await Re(a)}catch($){return $ instanceof I&&$.status===413?b(413,{error:"Payload too large"}):b(400,{error:"Invalid body"})}try{let $=u();if(!Number.isFinite($))throw new Error;if(!(await Promise.all([p,...i===void 0?[]:[i]].map(_=>W({secret:_,rawBody:d,headers:a.headers,now:$})))).some(_=>_.ok))return b(401,{error:"Unauthorized"})}catch{return b(401,{error:"Unauthorized"})}let l;try{l=JSON.parse(d)}catch{return b(400,{error:"Invalid payload"})}if(!l||typeof l!="object"||Array.isArray(l)||Object.keys(l).length!==2||!Object.hasOwn(l,"_type")||!Object.hasOwn(l,"_id"))return b(400,{error:"Invalid payload"});let{_type:m,_id:k}=l;if(typeof m!="string"||!/^[A-Za-z][A-Za-z0-9_]{0,63}$/.test(m)||typeof k!="string"||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(k))return b(400,{error:"Invalid payload"});if(!Object.hasOwn(t,m)||/^(drafts|versions)\./.test(k))return b(400,{error:"Unsupported document"});let se=S(n,{types:t[m],ids:[k]});try{for(let $ of se)we($,{expire:0})}catch{return b(500,{error:"Could not revalidate"})}return b(200,{revalidated:!0})};return Object.freeze({POST:y,GET:y,HEAD:y,PUT:y,PATCH:y,DELETE:y,OPTIONS:y})}var w=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),h=e=>typeof e=="string"&&e.trim()?e.trim():null,xe=(e,n)=>e._type===n&&typeof e._id=="string"&&e._id.length>0&&!/^(drafts|versions)\./.test(e._id),Ie=/^\d{4}-\d{2}-\d{2}$/,G=/^([01]\d|2[0-3]):[0-5]\d$/,Oe=["mon","tue","wed","thu","fri","sat","sun"];async function De(e,n,t){try{let o=await e.read(n,{fallback:t});return{...o,source:o.source==="cms"?"sanity":o.source}}catch{return{data:t,source:"fallback",fallbackFields:["$"],reason:"configuration"}}}var Me=/^[A-Za-z0-9._+-]{1,64}@[A-Za-z0-9-]{1,63}(?:\.[A-Za-z0-9-]{1,63})*\.[A-Za-z]{2,63}$/;function ve(e){let n=h(e);if(!n)return null;try{let t=new URL(n);return t.protocol==="http:"||t.protocol==="https:"?t.href:null}catch{return null}}function x(e){if(typeof e!="function")throw new TypeError("A client validator is required")}function K(e,n,t){if(x(t),!w(e)||e.status!=="open")return null;let o=h(e.closingDate);if(o!==null&&o<n||t(e)!==null)return null;let r=h(e.title),s=e.location==="Other"?h(e.locationNote):h(e.location);if(!r||!s)return null;let u=h(e.pdfUrl);return{id:String(h(e._id)),title:r,location:s,summary:h(e.summary),pdfUrl:u?.startsWith("https://cdn.sanity.io/files/")?u:null,applyUrl:ve(e.applyUrl),applyEmail:typeof e.applyEmail=="string"&&e.applyEmail.length<=254&&Me.test(e.applyEmail)?e.applyEmail:null}}function X(e,n,t){if(x(t),!Array.isArray(e))throw new TypeError("Sanity returned vacancies that are not a list");return e.map(o=>({value:K(o,n,t),order:w(o)&&typeof o.order=="number"&&Number.isFinite(o.order)?o.order:1e6})).filter(o=>o.value!==null).sort((o,r)=>o.order-r.order||o.value.title.toLowerCase().localeCompare(r.value.title.toLowerCase())).map(o=>o.value)}function je(e){return S(e,{types:["vacancy"]})}function Pe(e,n){if(!Ie.test(e))throw new TypeError("Invalid calendar date");return x(n),E({name:"vacancy.open.v1",query:'*[_type == "vacancy" && status == "open" && !(_id in path("drafts.**")) && !(_id in path("versions.**")) && (!defined(closingDate) || closingDate >= $today)]|order(coalesce(order, 1000000) asc, lower(title) asc){_id, _type, title, location, locationNote, summary, "pdfUrl": jobDescriptionPdf.asset->url, applyUrl, applyEmail, status, closingDate, order}',params:{today:e},dependencies:{types:["vacancy"]},resolve:(t,o)=>({data:t==null?o:X(t,e,n),fallbackFields:t==null?["$"]:[]})})}var Le=["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],Ne=/^[a-z0-9]+(?:-[a-z0-9]+)*$/;function N(e){return!w(e)||typeof e._id!="string"||!w(e.slug)||typeof e.slug.current!="string"||!Ne.test(e.slug.current)||h(e.name)===null||e.addressLines!==void 0&&e.addressLines!==null&&(!Array.isArray(e.addressLines)||Array.from(e.addressLines).some(n=>h(n)===null))||e.postcode!==void 0&&e.postcode!==null&&h(e.postcode)===null||e.coordinates!==void 0&&e.coordinates!==null&&(!w(e.coordinates)||typeof e.coordinates.lat!="number"||!Number.isFinite(e.coordinates.lat)||typeof e.coordinates.lng!="number"||!Number.isFinite(e.coordinates.lng))||e.phone!==void 0&&e.phone!==null&&typeof e.phone!="string"||e.email!==void 0&&e.email!==null&&typeof e.email!="string"?null:{name:h(e.name),slug:e.slug.current,addressLines:e.addressLines==null?e.addressLines:e.addressLines.map(n=>n.trim()),postcode:e.postcode==null?e.postcode:String(e.postcode).trim(),coordinates:e.coordinates==null?e.coordinates:{lat:e.coordinates.lat,lng:e.coordinates.lng},phone:e.phone,email:e.email,hours:e.hours}}function ee(e){if(!w(e))return null;let n={};for(let t of Le){let o=e[t];if(!Array.isArray(o)||!Array.from(o).every(r=>w(r)&&typeof r.opens=="string"&&typeof r.closes=="string"))return null;n[t]=o.map(r=>({opens:r.opens,closes:r.closes}))}return n}function ne(e,n,t){x(t);let o=N(e);if(o===null||o.slug!==n.id)return{data:n,fallbackFields:["$"]};let r=ee(o.hours),s={id:n.id,label:o.name,addressLines:o.addressLines??n.addressLines,postcode:o.postcode??n.postcode,geo:o.coordinates==null?n.geo:{latitude:o.coordinates.lat,longitude:o.coordinates.lng},telephone:o.phone===void 0?n.telephone:o.phone,email:o.email===void 0?n.email:o.email,hours:r??n.hours};try{return{data:t(s),fallbackFields:r===null?["hours"]:[]}}catch{if(r!==null)try{return{data:t({...s,hours:n.hours}),fallbackFields:["hours"]}}catch{}return{data:n,fallbackFields:["$"]}}}function te(e,n,t){x(t);let o=N(e);if(o===null||o.slug!==n.id)return{data:n,fallbackFields:["$"]};let r=ee(o.hours),s={...n,label:o.name,address:n.address===null?null:{...n.address,streetAddress:o.addressLines??n.address.streetAddress,postalCode:o.postcode??n.address.postalCode},telephone:o.phone===void 0?n.telephone:o.phone,email:o.email===void 0?n.email:o.email,geo:o.coordinates==null?n.geo:{latitude:o.coordinates.lat,longitude:o.coordinates.lng},hours:r??n.hours};try{return{data:t(s),fallbackFields:r===null?["hours"]:[]}}catch{if(r!==null)try{return{data:t({...s,hours:n.hours}),fallbackFields:["hours"]}}catch{}return{data:n,fallbackFields:["$"]}}}function Ue(e){return S(e,{types:["location"]})}function oe(e,n){return E({name:e,query:'*[_type == "location" && defined(slug.current) && !(_id in path("drafts.**")) && !(_id in path("versions.**"))]{_id, _type, name, slug, addressLines, postcode, coordinates, phone, email, hours}',params:{},dependencies:{types:["location"]},resolve:(t,o)=>{if(!Array.isArray(t))return{data:o,fallbackFields:["$"]};let r=new Map,s=new Set;for(let a of t){let p=N(a);p!==null&&(r.has(p.slug)?s.add(p.slug):r.set(p.slug,a))}let u=[];return{data:o.map((a,p)=>{let i=r.get(a.id),c=i===void 0||s.has(a.id)?{data:a,fallbackFields:["$"]}:n(i,a);return u.push(...c.fallbackFields.map(d=>d==="$"?`locations[${p}]`:`locations[${p}].${d}`)),c.data}),fallbackFields:o.length>0&&u.length===o.length&&u.every(a=>/^locations\[\d+\]$/.test(a))?["$"]:u}}})}function Fe(e){return x(e),oe("locations.v1",(n,t)=>ne(n,t,e))}function qe(e){return x(e),oe("locations.business.v1",(n,t)=>te(n,t,e))}function He(e,n,t){let o=`${e}-${n.normalize("NFKD").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"stop"}`,r=o;for(let s=2;t.has(r);s++)r=`${o}-${s}`;return t.add(r),r}function re(e,n){if(!w(e)||!xe(e,"schedule")||e._id!=="schedule"||e.timeZone!==n.timeZone||!Array.isArray(e.days)||e.days.length!==7)throw new TypeError("Invalid schedule document");let t=e.days.map((o,r)=>{if(!w(o)||o.day!==Oe[r]||typeof o.rest!="boolean"||!Array.isArray(o.stops))throw new TypeError("Invalid schedule day");let s=o.day,u=o.rest,y=o.stops,a=n.days.find(d=>d.day===s),p=new Set(a?.stops.map(d=>d.id)??[]),i=new Set,c=y.map(d=>{if(!w(d))throw new TypeError("Invalid schedule stop");let l=d;if(!h(l.name)||!G.test(String(l.from??""))||!G.test(String(l.to??""))||!h(l.address))throw new TypeError("Invalid schedule stop");let m=a?.stops.find(k=>k.name===l.name&&!i.has(k.id));return m?(i.add(m.id),{...m,name:String(l.name),from:String(l.from),to:String(l.to),address:String(l.address)}):{id:He(s,String(l.name),p),name:String(l.name),from:String(l.from),to:String(l.to),address:String(l.address),place:null,postcode:null,notes:null,lat:null,lng:null,coordinateSource:null,approximate:!1,needsConfirmation:null,captured:`${l.name}
|
|
6
|
+
${l.from}-${l.to}
|
|
7
|
+
${l.address}`}});return{day:s,rest:u,stops:u?[]:c}});return{timeZone:n.timeZone,days:t}}function Be(e){return S(e,{types:["schedule"],ids:["schedule"]})}function ze(){return E({name:"schedule.v1",query:'*[_type == "schedule" && _id == "schedule" && !(_id in path("drafts.**")) && !(_id in path("versions.**"))][0]{_id, _type, timeZone, days}',params:{},dependencies:{types:["schedule"],ids:["schedule"]},resolve:(e,n)=>({data:e==null?n:re(e,n),fallbackFields:e==null?["$"]:[]})})}export{j as MENU_DECORATIONS,v as MENU_LAYOUTS,P as MENU_LAYOUT_DEFAULTS,qe as businessLocationsQuery,be as createNextCmsReader,Ee as createRevalidateRoute,Ue as locationTags,Fe as locationsQuery,he as menuQuery,ie as menuTags,Pe as openVacanciesQuery,te as parseBusinessLocation,ne as parseLocationDocument,D as parseMenuDocument,re as parseScheduleDocument,X as parseVacancies,K as parseVacancyDocument,De as resolveWithFallback,ze as scheduleQuery,Be as scheduleTags,je as vacancyTags};
|
|
6
8
|
//# sourceMappingURL=next.mjs.map
|