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":["resolveAsArrayOrUndefined","resolveAbsoluteUrlWithPathname","resolveAlternateUrl","url","metadataBase","pathname","metadataContext","URL","newUrl","searchParams","forEach","value","key","set","resolveThemeColor","themeColor","themeColorDescriptors","descriptor","push","color","media","resolveUrlValuesOfObject","obj","result","Object","entries","pathnameForUrl","length","item","index","title","resolveCanonicalUrl","urlOrDescriptor","resolveAlternates","alternates","context","canonical","languages","types","robotsKeys","resolveRobotsValue","robots","values","follow","join","resolveRobots","basic","googleBot","VerificationKeys","resolveVerification","verification","res","other","otherKey","otherValue","resolveAppleWebApp","appWebApp","capable","startupImages","startupImage","map","statusBarStyle","resolveAppLinks","appLinks","resolveItunes","itunes","appId","appArgument","undefined","resolveFacebook","facebook","admins","resolvePagination","pagination","previous","next"],"mappings":"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","ignoreList":[0]} |