Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
1 line
No EOL
14 KiB
Text
1 line
No EOL
14 KiB
Text
{"version":3,"sources":["../../../../src/lib/metadata/resolvers/resolve-basics.ts"],"sourcesContent":["import type { AlternateLinkDescriptor } from '../types/alternative-urls-types'\nimport type {\n Metadata,\n ResolvedMetadataWithURLs,\n Viewport,\n} from '../types/metadata-interface'\nimport type { ResolvedVerification } from '../types/metadata-types'\nimport type {\n FieldResolver,\n AsyncFieldResolverExtraArgs,\n MetadataContext,\n} from '../types/resolvers'\nimport { resolveAsArrayOrUndefined } from '../generate/utils'\nimport {\n resolveAbsoluteUrlWithPathname,\n type MetadataBaseURL,\n} from './resolve-url'\n\nfunction resolveAlternateUrl(\n url: string | URL,\n metadataBase: MetadataBaseURL,\n pathname: string,\n metadataContext: MetadataContext\n) {\n // If alter native url is an URL instance,\n // we treat it as a URL base and resolve with current pathname\n if (url instanceof URL) {\n const newUrl = new URL(pathname, url)\n url.searchParams.forEach((value, key) =>\n newUrl.searchParams.set(key, value)\n )\n url = newUrl\n }\n return resolveAbsoluteUrlWithPathname(\n url,\n metadataBase,\n pathname,\n metadataContext\n )\n}\n\nexport const resolveThemeColor: FieldResolver<'themeColor', Viewport> = (\n themeColor\n) => {\n if (!themeColor) return null\n const themeColorDescriptors: Viewport['themeColor'] = []\n\n resolveAsArrayOrUndefined(themeColor)?.forEach((descriptor) => {\n if (typeof descriptor === 'string')\n themeColorDescriptors.push({ color: descriptor })\n else if (typeof descriptor === 'object')\n themeColorDescriptors.push({\n color: descriptor.color,\n media: descriptor.media,\n })\n })\n\n return themeColorDescriptors\n}\n\nasync function resolveUrlValuesOfObject(\n obj:\n | Record<\n string,\n string | URL | AlternateLinkDescriptor[] | null | undefined\n >\n | null\n | undefined,\n metadataBase: MetadataBaseURL,\n pathname: Promise<string>,\n metadataContext: MetadataContext\n): Promise<null | Record<string, AlternateLinkDescriptor[]>> {\n if (!obj) return null\n\n const result: Record<string, AlternateLinkDescriptor[]> = {}\n for (const [key, value] of Object.entries(obj)) {\n if (typeof value === 'string' || value instanceof URL) {\n const pathnameForUrl = await pathname\n result[key] = [\n {\n url: resolveAlternateUrl(\n value,\n metadataBase,\n pathnameForUrl,\n metadataContext\n ),\n },\n ]\n } else if (value && value.length) {\n result[key] = []\n const pathnameForUrl = await pathname\n value.forEach((item, index) => {\n const url = resolveAlternateUrl(\n item.url,\n metadataBase,\n pathnameForUrl,\n metadataContext\n )\n result[key][index] = {\n url,\n title: item.title,\n }\n })\n }\n }\n return result\n}\n\nasync function resolveCanonicalUrl(\n urlOrDescriptor: string | URL | null | AlternateLinkDescriptor | undefined,\n metadataBase: MetadataBaseURL,\n pathname: Promise<string>,\n metadataContext: MetadataContext\n): Promise<null | AlternateLinkDescriptor> {\n if (!urlOrDescriptor) return null\n\n const url =\n typeof urlOrDescriptor === 'string' || urlOrDescriptor instanceof URL\n ? urlOrDescriptor\n : urlOrDescriptor.url\n\n const pathnameForUrl = await pathname\n\n // Return string url because structureClone can't handle URL instance\n return {\n url: resolveAlternateUrl(\n url,\n metadataBase,\n pathnameForUrl,\n metadataContext\n ),\n }\n}\n\nexport const resolveAlternates: AsyncFieldResolverExtraArgs<\n 'alternates',\n [MetadataBaseURL, Promise<string>, MetadataContext]\n> = async (alternates, metadataBase, pathname, context) => {\n if (!alternates) return null\n\n const canonical = await resolveCanonicalUrl(\n alternates.canonical,\n metadataBase,\n pathname,\n context\n )\n const languages = await resolveUrlValuesOfObject(\n alternates.languages,\n metadataBase,\n pathname,\n context\n )\n const media = await resolveUrlValuesOfObject(\n alternates.media,\n metadataBase,\n pathname,\n context\n )\n const types = await resolveUrlValuesOfObject(\n alternates.types,\n metadataBase,\n pathname,\n context\n )\n\n return {\n canonical,\n languages,\n media,\n types,\n }\n}\n\nconst robotsKeys = [\n 'noarchive',\n 'nosnippet',\n 'noimageindex',\n 'nocache',\n 'notranslate',\n 'indexifembedded',\n 'nositelinkssearchbox',\n 'unavailable_after',\n 'max-video-preview',\n 'max-image-preview',\n 'max-snippet',\n] as const\nconst resolveRobotsValue: (robots: Metadata['robots']) => string | null = (\n robots\n) => {\n if (!robots) return null\n if (typeof robots === 'string') return robots\n\n const values: string[] = []\n\n if (robots.index) values.push('index')\n else if (typeof robots.index === 'boolean') values.push('noindex')\n\n if (robots.follow) values.push('follow')\n else if (typeof robots.follow === 'boolean') values.push('nofollow')\n\n for (const key of robotsKeys) {\n const value = robots[key]\n if (typeof value !== 'undefined' && value !== false) {\n values.push(typeof value === 'boolean' ? key : `${key}:${value}`)\n }\n }\n\n return values.join(', ')\n}\n\nexport const resolveRobots: FieldResolver<'robots'> = (robots) => {\n if (!robots) return null\n return {\n basic: resolveRobotsValue(robots),\n googleBot:\n typeof robots !== 'string' ? resolveRobotsValue(robots.googleBot) : null,\n }\n}\n\nconst VerificationKeys = ['google', 'yahoo', 'yandex', 'me', 'other'] as const\nexport const resolveVerification: FieldResolver<'verification'> = (\n verification\n) => {\n if (!verification) return null\n const res: ResolvedVerification = {}\n\n for (const key of VerificationKeys) {\n const value = verification[key]\n if (value) {\n if (key === 'other') {\n res.other = {}\n for (const otherKey in verification.other) {\n const otherValue = resolveAsArrayOrUndefined(\n verification.other[otherKey]\n )\n if (otherValue) res.other[otherKey] = otherValue\n }\n } else res[key] = resolveAsArrayOrUndefined(value) as (string | number)[]\n }\n }\n return res\n}\n\nexport const resolveAppleWebApp: FieldResolver<'appleWebApp'> = (appWebApp) => {\n if (!appWebApp) return null\n if (appWebApp === true) {\n return {\n capable: true,\n }\n }\n\n const startupImages = appWebApp.startupImage\n ? resolveAsArrayOrUndefined(appWebApp.startupImage)?.map((item) =>\n typeof item === 'string' ? { url: item } : item\n )\n : null\n\n return {\n capable: 'capable' in appWebApp ? !!appWebApp.capable : true,\n title: appWebApp.title || null,\n startupImage: startupImages,\n statusBarStyle: appWebApp.statusBarStyle || 'default',\n }\n}\n\nexport const resolveAppLinks: FieldResolver<'appLinks'> = (appLinks) => {\n if (!appLinks) return null\n for (const key in appLinks) {\n // @ts-ignore // TODO: type infer\n appLinks[key] = resolveAsArrayOrUndefined(appLinks[key])\n }\n return appLinks as ResolvedMetadataWithURLs['appLinks']\n}\n\nexport const resolveItunes: AsyncFieldResolverExtraArgs<\n 'itunes',\n [MetadataBaseURL, Promise<string>, MetadataContext]\n> = async (itunes, metadataBase, pathname, context) => {\n if (!itunes) return null\n return {\n appId: itunes.appId,\n appArgument: itunes.appArgument\n ? resolveAlternateUrl(\n itunes.appArgument,\n metadataBase,\n await pathname,\n context\n )\n : undefined,\n }\n}\n\nexport const resolveFacebook: FieldResolver<'facebook'> = (facebook) => {\n if (!facebook) return null\n return {\n appId: facebook.appId,\n admins: resolveAsArrayOrUndefined(facebook.admins),\n }\n}\n\nexport const resolvePagination: AsyncFieldResolverExtraArgs<\n 'pagination',\n [MetadataBaseURL, Promise<string>, MetadataContext]\n> = async (pagination, metadataBase, pathname, context) => {\n return {\n previous: pagination?.previous\n ? resolveAlternateUrl(\n pagination.previous,\n metadataBase,\n await pathname,\n context\n )\n : null,\n next: pagination?.next\n ? resolveAlternateUrl(\n pagination.next,\n metadataBase,\n await pathname,\n context\n )\n : null,\n }\n}\n"],"names":["resolveAlternates","resolveAppLinks","resolveAppleWebApp","resolveFacebook","resolveItunes","resolvePagination","resolveRobots","resolveThemeColor","resolveVerification","resolveAlternateUrl","url","metadataBase","pathname","metadataContext","URL","newUrl","searchParams","forEach","value","key","set","resolveAbsoluteUrlWithPathname","themeColor","resolveAsArrayOrUndefined","themeColorDescriptors","descriptor","push","color","media","resolveUrlValuesOfObject","obj","result","Object","entries","pathnameForUrl","length","item","index","title","resolveCanonicalUrl","urlOrDescriptor","alternates","context","canonical","languages","types","robotsKeys","resolveRobotsValue","robots","values","follow","join","basic","googleBot","VerificationKeys","verification","res","other","otherKey","otherValue","appWebApp","capable","startupImages","startupImage","map","statusBarStyle","appLinks","itunes","appId","appArgument","undefined","facebook","admins","pagination","previous","next"],"mappings":";;;;;;;;;;;;;;;;;;;;;;IAsIaA,iBAAiB;eAAjBA;;IAmIAC,eAAe;eAAfA;;IAtBAC,kBAAkB;eAAlBA;;IAiDAC,eAAe;eAAfA;;IAlBAC,aAAa;eAAbA;;IA0BAC,iBAAiB;eAAjBA;;IA1FAC,aAAa;eAAbA;;IAzKAC,iBAAiB;eAAjBA;;IAmLAC,mBAAmB;eAAnBA;;;uBAhN6B;4BAInC;AAEP,SAASC,oBACPC,GAAiB,EACjBC,YAA6B,EAC7BC,QAAgB,EAChBC,eAAgC;IAEhC,0CAA0C;IAC1C,8DAA8D;IAC9D,IAAIH,eAAeI,KAAK;QACtB,MAAMC,SAAS,IAAID,IAAIF,UAAUF;QACjCA,IAAIM,YAAY,CAACC,OAAO,CAAC,CAACC,OAAOC,MAC/BJ,OAAOC,YAAY,CAACI,GAAG,CAACD,KAAKD;QAE/BR,MAAMK;IACR;IACA,OAAOM,IAAAA,0CAA8B,EACnCX,KACAC,cACAC,UACAC;AAEJ;AAEO,MAAMN,oBAA2D,CACtEe;QAKAC;IAHA,IAAI,CAACD,YAAY,OAAO;IACxB,MAAME,wBAAgD,EAAE;KAExDD,6BAAAA,IAAAA,gCAAyB,EAACD,gCAA1BC,2BAAuCN,OAAO,CAAC,CAACQ;QAC9C,IAAI,OAAOA,eAAe,UACxBD,sBAAsBE,IAAI,CAAC;YAAEC,OAAOF;QAAW;aAC5C,IAAI,OAAOA,eAAe,UAC7BD,sBAAsBE,IAAI,CAAC;YACzBC,OAAOF,WAAWE,KAAK;YACvBC,OAAOH,WAAWG,KAAK;QACzB;IACJ;IAEA,OAAOJ;AACT;AAEA,eAAeK,yBACbC,GAMa,EACbnB,YAA6B,EAC7BC,QAAyB,EACzBC,eAAgC;IAEhC,IAAI,CAACiB,KAAK,OAAO;IAEjB,MAAMC,SAAoD,CAAC;IAC3D,KAAK,MAAM,CAACZ,KAAKD,MAAM,IAAIc,OAAOC,OAAO,CAACH,KAAM;QAC9C,IAAI,OAAOZ,UAAU,YAAYA,iBAAiBJ,KAAK;YACrD,MAAMoB,iBAAiB,MAAMtB;YAC7BmB,MAAM,CAACZ,IAAI,GAAG;gBACZ;oBACET,KAAKD,oBACHS,OACAP,cACAuB,gBACArB;gBAEJ;aACD;QACH,OAAO,IAAIK,SAASA,MAAMiB,MAAM,EAAE;YAChCJ,MAAM,CAACZ,IAAI,GAAG,EAAE;YAChB,MAAMe,iBAAiB,MAAMtB;YAC7BM,MAAMD,OAAO,CAAC,CAACmB,MAAMC;gBACnB,MAAM3B,MAAMD,oBACV2B,KAAK1B,GAAG,EACRC,cACAuB,gBACArB;gBAEFkB,MAAM,CAACZ,IAAI,CAACkB,MAAM,GAAG;oBACnB3B;oBACA4B,OAAOF,KAAKE,KAAK;gBACnB;YACF;QACF;IACF;IACA,OAAOP;AACT;AAEA,eAAeQ,oBACbC,eAA0E,EAC1E7B,YAA6B,EAC7BC,QAAyB,EACzBC,eAAgC;IAEhC,IAAI,CAAC2B,iBAAiB,OAAO;IAE7B,MAAM9B,MACJ,OAAO8B,oBAAoB,YAAYA,2BAA2B1B,MAC9D0B,kBACAA,gBAAgB9B,GAAG;IAEzB,MAAMwB,iBAAiB,MAAMtB;IAE7B,qEAAqE;IACrE,OAAO;QACLF,KAAKD,oBACHC,KACAC,cACAuB,gBACArB;IAEJ;AACF;AAEO,MAAMb,oBAGT,OAAOyC,YAAY9B,cAAcC,UAAU8B;IAC7C,IAAI,CAACD,YAAY,OAAO;IAExB,MAAME,YAAY,MAAMJ,oBACtBE,WAAWE,SAAS,EACpBhC,cACAC,UACA8B;IAEF,MAAME,YAAY,MAAMf,yBACtBY,WAAWG,SAAS,EACpBjC,cACAC,UACA8B;IAEF,MAAMd,QAAQ,MAAMC,yBAClBY,WAAWb,KAAK,EAChBjB,cACAC,UACA8B;IAEF,MAAMG,QAAQ,MAAMhB,yBAClBY,WAAWI,KAAK,EAChBlC,cACAC,UACA8B;IAGF,OAAO;QACLC;QACAC;QACAhB;QACAiB;IACF;AACF;AAEA,MAAMC,aAAa;IACjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AACD,MAAMC,qBAAoE,CACxEC;IAEA,IAAI,CAACA,QAAQ,OAAO;IACpB,IAAI,OAAOA,WAAW,UAAU,OAAOA;IAEvC,MAAMC,SAAmB,EAAE;IAE3B,IAAID,OAAOX,KAAK,EAAEY,OAAOvB,IAAI,CAAC;SACzB,IAAI,OAAOsB,OAAOX,KAAK,KAAK,WAAWY,OAAOvB,IAAI,CAAC;IAExD,IAAIsB,OAAOE,MAAM,EAAED,OAAOvB,IAAI,CAAC;SAC1B,IAAI,OAAOsB,OAAOE,MAAM,KAAK,WAAWD,OAAOvB,IAAI,CAAC;IAEzD,KAAK,MAAMP,OAAO2B,WAAY;QAC5B,MAAM5B,QAAQ8B,MAAM,CAAC7B,IAAI;QACzB,IAAI,OAAOD,UAAU,eAAeA,UAAU,OAAO;YACnD+B,OAAOvB,IAAI,CAAC,OAAOR,UAAU,YAAYC,MAAM,GAAGA,IAAI,CAAC,EAAED,OAAO;QAClE;IACF;IAEA,OAAO+B,OAAOE,IAAI,CAAC;AACrB;AAEO,MAAM7C,gBAAyC,CAAC0C;IACrD,IAAI,CAACA,QAAQ,OAAO;IACpB,OAAO;QACLI,OAAOL,mBAAmBC;QAC1BK,WACE,OAAOL,WAAW,WAAWD,mBAAmBC,OAAOK,SAAS,IAAI;IACxE;AACF;AAEA,MAAMC,mBAAmB;IAAC;IAAU;IAAS;IAAU;IAAM;CAAQ;AAC9D,MAAM9C,sBAAqD,CAChE+C;IAEA,IAAI,CAACA,cAAc,OAAO;IAC1B,MAAMC,MAA4B,CAAC;IAEnC,KAAK,MAAMrC,OAAOmC,iBAAkB;QAClC,MAAMpC,QAAQqC,YAAY,CAACpC,IAAI;QAC/B,IAAID,OAAO;YACT,IAAIC,QAAQ,SAAS;gBACnBqC,IAAIC,KAAK,GAAG,CAAC;gBACb,IAAK,MAAMC,YAAYH,aAAaE,KAAK,CAAE;oBACzC,MAAME,aAAapC,IAAAA,gCAAyB,EAC1CgC,aAAaE,KAAK,CAACC,SAAS;oBAE9B,IAAIC,YAAYH,IAAIC,KAAK,CAACC,SAAS,GAAGC;gBACxC;YACF,OAAOH,GAAG,CAACrC,IAAI,GAAGI,IAAAA,gCAAyB,EAACL;QAC9C;IACF;IACA,OAAOsC;AACT;AAEO,MAAMtD,qBAAmD,CAAC0D;QAS3DrC;IARJ,IAAI,CAACqC,WAAW,OAAO;IACvB,IAAIA,cAAc,MAAM;QACtB,OAAO;YACLC,SAAS;QACX;IACF;IAEA,MAAMC,gBAAgBF,UAAUG,YAAY,IACxCxC,6BAAAA,IAAAA,gCAAyB,EAACqC,UAAUG,YAAY,sBAAhDxC,2BAAmDyC,GAAG,CAAC,CAAC5B,OACtD,OAAOA,SAAS,WAAW;YAAE1B,KAAK0B;QAAK,IAAIA,QAE7C;IAEJ,OAAO;QACLyB,SAAS,aAAaD,YAAY,CAAC,CAACA,UAAUC,OAAO,GAAG;QACxDvB,OAAOsB,UAAUtB,KAAK,IAAI;QAC1ByB,cAAcD;QACdG,gBAAgBL,UAAUK,cAAc,IAAI;IAC9C;AACF;AAEO,MAAMhE,kBAA6C,CAACiE;IACzD,IAAI,CAACA,UAAU,OAAO;IACtB,IAAK,MAAM/C,OAAO+C,SAAU;QAC1B,iCAAiC;QACjCA,QAAQ,CAAC/C,IAAI,GAAGI,IAAAA,gCAAyB,EAAC2C,QAAQ,CAAC/C,IAAI;IACzD;IACA,OAAO+C;AACT;AAEO,MAAM9D,gBAGT,OAAO+D,QAAQxD,cAAcC,UAAU8B;IACzC,IAAI,CAACyB,QAAQ,OAAO;IACpB,OAAO;QACLC,OAAOD,OAAOC,KAAK;QACnBC,aAAaF,OAAOE,WAAW,GAC3B5D,oBACE0D,OAAOE,WAAW,EAClB1D,cACA,MAAMC,UACN8B,WAEF4B;IACN;AACF;AAEO,MAAMnE,kBAA6C,CAACoE;IACzD,IAAI,CAACA,UAAU,OAAO;IACtB,OAAO;QACLH,OAAOG,SAASH,KAAK;QACrBI,QAAQjD,IAAAA,gCAAyB,EAACgD,SAASC,MAAM;IACnD;AACF;AAEO,MAAMnE,oBAGT,OAAOoE,YAAY9D,cAAcC,UAAU8B;IAC7C,OAAO;QACLgC,UAAUD,CAAAA,8BAAAA,WAAYC,QAAQ,IAC1BjE,oBACEgE,WAAWC,QAAQ,EACnB/D,cACA,MAAMC,UACN8B,WAEF;QACJiC,MAAMF,CAAAA,8BAAAA,WAAYE,IAAI,IAClBlE,oBACEgE,WAAWE,IAAI,EACfhE,cACA,MAAMC,UACN8B,WAEF;IACN;AACF","ignoreList":[0]} |